title: Gbox420 views: - path: HomeAssistant title: Home Assistant icon: mdi:home-assistant badges: [] cards: - type: custom:stack-in-card cards: - type: markdown content: > {% set last = states.sensor.gbox420_hempy_modulestate.last_updated %} {% set age = (as_timestamp(now()) - as_timestamp(last)) | int %} {% if age < 60 %} {% set time_ago = age ~ ' sec ago' %} {% elif age < 3600 %} {% set time_ago = (age / 60) | int ~ ' min ago' %} {% else %} {% set time_ago = (age / 3600) | int ~ ' h ago' %} {% endif %} {% set events = states('text.gbox420_eventlog') %} {% if age > 600 %} ❌ OFFLINE ({{ time_ago }})
{{ events }}
{% else %} ✅ ONLINE ({{ time_ago }}) {{ events }} {% endif %} - type: custom:multiple-entity-row entity: sensor.gbox420_hempy_modulestate name: Modules secondary_info: last-updated icon: mdi:widgets show_state: false entities: - entity: sensor.gbox420_hempy_modulestate name: Hempy - entity: sensor.gbox420_reservoir_modulestate name: Reservoir - entity: sensor.gbox420_aero1_modulestate name: Aeroponics styles: padding-right: 15px - type: vertical-stack cards: - type: markdown content: | {{ state_attr('sensor.gbox420_alerts', 'alerts') | safe }} card_mod: style: | ha-card { display: {% if states('sensor.gbox420_alerts') == 'False' %} none {% else %} block {% endif %}; margin-bottom: -15px; border-bottom: none; background: transparent; } - type: entities entities: - type: custom:multiple-entity-row entity: sensor.gbox420_alerts name: ' ' icon: none show_state: false entities: - icon: mdi:check-all name: Acknowledge hide_if: 'False' tap_action: action: call-service service: button.press service_data: entity_id: button.gbox_acknowledge - icon: mdi:google-spreadsheet name: Sheets report tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/SheetsRep payload: '' - icon: mdi:refresh name: Refresh tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Refresh payload: '' styles: padding-right: 15px card_mod: style: | ha-card { border-top: none; } .card-content { padding: 0px; } - type: vertical-stack cards: - type: entities state_color: true show_header_toggle: false entities: - type: custom:multiple-entity-row entity: sensor.gbox420_external_humidity name: Temp&Humidity secondary_info: last-updated state_header: External unit: '%' entities: - entity: sensor.gbox420_internal_temp name: Internal unit: °C - entity: sensor.gbox420_external_temp name: External unit: °C - entity: sensor.gbox420_internal_humidity name: Internal unit: '%' - type: custom:multiple-entity-row entity: sensor.gbox420_internal_fan name: Internal Fan state_header: State entities: - icon: mdi:fan-off state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/FanI_O payload: 'OFF' - icon: mdi:fan-speed-1 state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/FanI_L payload: LOW - icon: mdi:fan-speed-2 state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/FanI_H payload: HIGH - type: custom:multiple-entity-row entity: sensor.gbox420_exhaust_fan name: Exhaust Fan state_header: State entities: - icon: mdi:fan-off state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/FanE_O payload: 'OFF' - icon: mdi:fan-speed-1 state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/FanE_L payload: LOW - icon: mdi:fan-speed-2 state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/FanE_H payload: HIGH card_mod: style: | ha-card { white-space: nowrap; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; } - type: custom:mini-graph-card entities: - entity: sensor.gbox420_internal_temp name: Internal Temp color: '#ff9800' - entity: sensor.gbox420_external_temp name: Extermal Temp color: '#d4d433' - entity: sensor.gbox420_internal_humidity name: Internal Humidity color: '#072deb' y_axis: secondary - entity: sensor.gbox420_external_humidity name: Extermal Humidity color: '#03a9f4' y_axis: secondary line_width: 3 hours_to_show: 48 smoothing: false show: name: false icon: false state: false legend: true fill: false card_mod: style: | ha-card { border-top-left-radius: 0px; border-top-right-radius: 0px; margin-top: -16px; } .graph__legend { font-size: 10px; line-height: 10px; margin-top: -10px; } .header { display: none; } - type: entities entities: - type: custom:multiple-entity-row entity: sensor.gbox420_power1_current secondary_info: last-updated name: AC Power state_header: Current icon: mdi:lightning-bolt entities: - entity: sensor.gbox420_power1_power name: Power - entity: sensor.gbox420_power1_energy name: Energy - entity: sensor.gbox420_power1_voltage name: Voltage - type: vertical-stack cards: - type: entities show_header_toggle: false state_color: true entities: - type: custom:multiple-entity-row entity: sensor.gbox420_waste_weight name: Reservoir secondary_info: last-updated icon: mdi:cup-water show_state: false entities: - entity: sensor.gbox420_reservoir_weight name: Weight - entity: sensor.gbox420_reservoir_watertemp name: Temp - entity: sensor.gbox420_waste_weight name: Waste - type: custom:multiple-entity-row entity: switch.gbox420_airpump name: false icon: none toggle: true entities: - entity: sensor.gbox420_reservoir_tds name: TDS - entity: sensor.gbox420_reservoir_ph name: pH - entity: switch.gbox420_airpump name: AirPump card_mod: style: | ha-card { white-space: nowrap; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; } - type: custom:mini-graph-card entities: - entity: sensor.gbox420_reservoir_weight name: Res Weight color: '#0d47a1' - entity: sensor.gbox420_waste_weight name: Waste Weight color: '#ff9800' line_width: 2 hours_to_show: 48 points_per_hour: 12 smoothing: false show: name: false icon: false state: false legend: true fill: true card_mod: style: | ha-card { border-top-left-radius: 0px; border-top-right-radius: 0px; margin-top: -16px; } .header { display: none; } .graph__legend { font-size: 10px; margin-top: -10px; padding-bottom: 8px; } - type: entities entities: - type: custom:multiple-entity-row entity: sensor.gbox420_lightsensor1_reading name: Light sensor icon: mdi:theme-light-dark state_header: Analog reading entities: - entity: sensor.gbox420_lightsensor1_darkbright name: Digital reading footer: type: graph entity: sensor.gbox420_lightsensor1_reading detail: 2 hours_to_show: 48 state_color: true show_header_toggle: false card_mod: style: | ha-card { white-space: nowrap; } - type: entities entities: - type: custom:multiple-entity-row entity: switch.gbox420_light1_state name: Light 1 State secondary_info: last-updated toggle: true entities: - entity: sensor.gbox420_light1_currentbrightness name: Current brightness - type: custom:multiple-entity-row entity: switch.gbox420_light1_timer name: Timer schedule toggle: true entities: - entity: sensor.gbox420_light1_ontime name: 'On' - entity: sensor.gbox420_light1_offtime name: 'Off' - type: custom:fold-entity-row open: false head: type: section label: Settings entities: - type: custom:numberbox-card entity: number.gbox420_light1_brightness name: Brightness delay: 5000 speed: 250 - type: custom:stack-in-card mode: horizontal cards: - type: custom:numberbox-card entity: number.gbox420_light1_ontimehour name: 'On' delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_light1_ontimeminute name: ':' icon: false delay: 5000 speed: 250 card_mod: style: | ha-card { box-shadow: none; border: none; } - type: custom:stack-in-card mode: horizontal border: false cards: - type: custom:numberbox-card entity: number.gbox420_light1_offtimehour name: 'Off' delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_light1_offtimeminute name: ':' icon: false delay: 5000 speed: 250 card_mod: style: | ha-card { box-shadow: none; border: none; } show_header_toggle: false state_color: true - type: entities entities: - type: custom:multiple-entity-row entity: switch.gbox420_light2_state name: Light 2 State secondary_info: last-updated toggle: true entities: - entity: sensor.gbox420_light2_currentbrightness name: Current brightness - type: custom:multiple-entity-row entity: switch.gbox420_light2_timer name: Timer schedule toggle: true entities: - entity: sensor.gbox420_light2_ontime name: 'On' - entity: sensor.gbox420_light2_offtime name: 'Off' - type: custom:fold-entity-row open: false head: type: section label: Settings entities: - type: custom:numberbox-card entity: number.gbox420_light2_brightness name: Brightness delay: 5000 speed: 250 - type: custom:stack-in-card mode: horizontal cards: - type: custom:numberbox-card entity: number.gbox420_light2_ontimehour name: 'On' delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_light2_ontimeminute name: ':' icon: false delay: 5000 speed: 250 card_mod: style: | ha-card { box-shadow: none; border: none; } - type: custom:stack-in-card mode: horizontal border: false cards: - type: custom:numberbox-card entity: number.gbox420_light2_offtimehour name: 'Off' delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_light2_offtimeminute name: ':' icon: false delay: 5000 speed: 250 card_mod: style: | ha-card { box-shadow: none; border: none; } show_header_toggle: false state_color: true - type: vertical-stack cards: - type: entities show_header_toggle: false state_color: true entities: - type: custom:multiple-entity-row entity: sensor.gbox420_bucket1_weight name: Hempy 1 secondary_info: last-updated icon: mdi:bucket state_header: Weight entities: - entity: sensor.gbox420_bucket1_lastwatered name: Last Watered - entity: sensor.gbox420_bucket1_state name: State - entity: sensor.gbox420_bucket1_pumpstate name: Pump - type: custom:multiple-entity-row entity: sensor.gbox420_bucket1_dryweight name: false icon: none show_state: false card_mod: style: hui-generic-entity-row $: | .info { display: none; } div.entity { margin-right: auto; } .: > div.entities-row { justify-content: flex-start !important; } entities: - type: button icon: mdi:watering-can name: Start state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Hemp1_B1On - type: button icon: mdi:watering-can-outline name: Stop state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Hemp1_B1Off - type: button icon: mdi:water-off name: Disable state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Hemp1_B1Dis - entity: sensor.gbox420_bucket1_dryweight name: Dry - entity: sensor.gbox420_bucket1_wetweight name: Wet - entity: sensor.gbox420_bucket1_nextwatering name: Next - type: custom:fold-entity-row open: false head: type: section label: Settings entities: - type: custom:numberbox-card entity: number.gbox420_bucket1_startweight name: Start watering delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_bucket1_wateringincrement name: Watering increment delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_bucket1_maxweight name: Max weight delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_bucket1_evaporationtarget name: Evaporation target delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_bucket1_draintime name: Drain wait delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_bucket1_draintarget name: Drain target delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_bucket1_pumpspeed name: Pump speed delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_bucket1_pumptimeout name: Pump timeout delay: 5000 speed: 250 card_mod: style: | ha-card { white-space: nowrap; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; } - type: custom:mini-graph-card entities: - entity: sensor.gbox420_bucket1_weight name: Weight color: '#ff9800' - entity: sensor.gbox420_bucket1_dryweight name: Dry Limit color: '#ff5252' - entity: sensor.gbox420_bucket1_wetweight name: Wet Limit color: '#072deb' line_width: 2 hours_to_show: 48 smoothing: false show: name: false icon: false state: false legend: true fill: false labels: true card_mod: style: | ha-card { border-top-left-radius: 0px; border-top-right-radius: 0px; margin-top: -16px; } .header { display: none; } .graph__legend { font-size: 10px; margin-top: -10px; padding-bottom: 8px; } - type: vertical-stack cards: - type: entities show_header_toggle: false state_color: true entities: - type: custom:multiple-entity-row entity: sensor.gbox420_bucket2_weight name: Hempy 2 secondary_info: last-updated icon: mdi:bucket state_header: Weight entities: - entity: sensor.gbox420_bucket2_lastwatered name: Last watered - entity: sensor.gbox420_bucket2_state name: State - entity: sensor.gbox420_bucket2_pumpstate name: Pump - type: custom:multiple-entity-row entity: sensor.gbox420_bucket2_dryweight name: false icon: none show_state: false card_mod: style: hui-generic-entity-row $: | .info { display: none; } div.entity { margin-right: auto; } .: > div.entities-row { justify-content: flex-start !important; } entities: - type: button icon: mdi:watering-can name: Start state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Hemp1_B2On - type: button icon: mdi:watering-can-outline name: Stop state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Hemp1_B2Off - type: button icon: mdi:water-off name: Disable state_color: true tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Hemp1_B2Dis - entity: sensor.gbox420_bucket2_dryweight name: Dry - entity: sensor.gbox420_bucket2_wetweight name: Wet - entity: sensor.gbox420_bucket2_nextwatering name: Next - type: custom:fold-entity-row open: false head: type: section label: Settings entities: - type: custom:numberbox-card entity: number.gbox420_bucket2_startweight name: Start watering - type: custom:numberbox-card entity: number.gbox420_bucket2_wateringincrement name: Watering increment - type: custom:numberbox-card entity: number.gbox420_bucket2_maxweight name: Max weight - type: custom:numberbox-card entity: number.gbox420_bucket2_evaporationtarget name: Evaporation target - type: custom:numberbox-card entity: number.gbox420_bucket2_draintime name: Drain wait - type: custom:numberbox-card entity: number.gbox420_bucket2_draintarget name: Drain target - type: custom:numberbox-card entity: number.gbox420_bucket2_pumpspeed name: Pump speed - type: custom:numberbox-card entity: number.gbox420_bucket2_pumptimeout name: Pump timeout card_mod: style: | ha-card { white-space: nowrap; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; } - type: custom:mini-graph-card entities: - entity: sensor.gbox420_bucket2_weight name: Weight color: '#ff9800' - entity: sensor.gbox420_bucket2_dryweight name: Dry Limit color: '#ff5252' - entity: sensor.gbox420_bucket2_wetweight name: Wet Limit color: '#072deb' line_width: 2 hours_to_show: 48 smoothing: false show: name: false icon: false state: false legend: true fill: false labels: true card_mod: style: | ha-card { border-top-left-radius: 0px; border-top-right-radius: 0px; margin-top: -16px; } .header { display: none; } .graph__legend { font-size: 10px; margin-top: -10px; padding-bottom: 8px; } - type: entities entities: - type: custom:multiple-entity-row entity: sensor.gbox420_aero1_pumpstate name: Aeroponics secondary_info: last-updated icon: mdi:sprinkler-variant state_header: Pump entities: - entity: sensor.gbox420_aero1_state name: State - type: custom:multiple-entity-row entity: sensor.gbox420_aero1_pressure name: false show_state: false icon: none card_mod: style: hui-generic-entity-row $: | .info { display: none; } div.entity { margin-right: auto; } .: | div.entities-row { justify-content: flex-start !important; } entities: - type: button icon: mdi:water name: Spray tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Aero1_SprayNow - type: button icon: mdi:water-outline name: Stop tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Aero1_SprayOff - type: button icon: mdi:water-off name: Disable tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Aero1_SprayDis - entity: sensor.gbox420_aero1_pressure name: Pressure - entity: sensor.gbox420_aero1_lastspray name: Last spray - entity: sensor.gbox420_aero1_lastsraytime name: Spray time - entity: sensor.gbox420_aero1_weight name: Weight - type: custom:fold-entity-row open: false head: type: section label: Settings entities: - type: custom:numberbox-card entity: number.gbox420_aero1_minpressure name: Minimum pressure delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_aero1_maxpressure name: Maximum pressure delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_aero1_dayinterval name: Spray interval day delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_aero1_nightinterval name: Spray interval night delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_aero1_sprayduration name: Spray duration delay: 5000 speed: 250 - type: custom:multiple-entity-row entity: sensor.gbox420_aero1_pressure name: Pump show_state: false icon: mdi:water-pump entities: - type: button icon: mdi:water-plus name: Refill tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Aero1_Refill - type: button icon: mdi:water-minus name: Drain tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Aero1_Drain - type: button icon: mdi:water-sync name: Mix tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Aero1_PumpDis - type: button icon: mdi:power name: 'On' tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Aero1_PumpOn - type: button icon: mdi:power-off name: 'Off' tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Aero1_PumpOff - type: button icon: mdi:cancel name: Disable tap_action: action: call-service service: mqtt.publish service_data: topic: Gbox420CMD/Aero1_PumpDis - type: custom:numberbox-card entity: number.gbox420_aero1_pumpspeed name: Speed delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_aero1_pumpprimingtime name: Priming time delay: 5000 speed: 250 - type: custom:numberbox-card entity: number.gbox420_aero1_pumptimeout name: Timeout delay: 5000 speed: 250 footer: type: graph entity: sensor.gbox420_aero1_weight hours_to_show: 48 detail: 1 show_header_toggle: false state_color: true card_mod: style: | ha-card { white-space: nowrap; } - title: Node-RED path: NodeRED panel: true icon: mdi:sitemap badges: [] cards: - type: iframe url: https://growboxguy.duckdns.org:15100/endpoint/ui aspect_ratio: 100% - panel: true title: Grafana path: Grafana icon: mdi:chart-histogram cards: - type: iframe url: >- https://growboxguy.duckdns.org:13100/api/hassio_ingress/MzjXsP-Fk5mGMhAWsCLQbECztrdRfR9ngq-LA-2sl74/public-dashboards/653aae89cb8f4a9da29e44f7fa4396b4?orgId=1&refresh=5s&from=now-7d&to=now&theme=dark type: panel - title: Google Sheets path: GoogleSheets panel: true icon: mdi:google-spreadsheet badges: [] cards: - type: iframe url: >- https://docs.google.com/spreadsheets/d/162557mj4XdpdER_PC6Kbq_GGUgc5nV-MYzr7J0Ims4Q/edit#gid=247713073 aspect_ratio: 100%