diff --git a/.gitignore b/.gitignore index d8b4157..66c2d6d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ # You can modify this file to suit your needs. /.esphome/ /secrets.yaml +/.idea/ +/.vscode/ diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index a490b61..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "githubPullRequests.ignoredPullRequestBranches": [ - "main" - ] -} \ No newline at end of file diff --git a/Home Assistant Cards & Templates/aquarium_dashboard.yaml b/Home Assistant Cards & Templates/aquarium_dashboard.yaml new file mode 100644 index 0000000..5879b6b --- /dev/null +++ b/Home Assistant Cards & Templates/aquarium_dashboard.yaml @@ -0,0 +1,883 @@ +type: custom:layout-card +layout_type: custom:vertical-layout +cards: + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + title: Current Status & History + subtitle: '' + - type: vertical-stack + cards: + - type: vertical-stack + cards: + - show_state: true + show_name: true + camera_view: auto + type: picture-entity + entity: sensor.aquapi_marine_temperature + image: /local/custom/PXL_20230606_162534564.jpg + name: Marine + tap_action: + action: more-info + - type: custom:auto-entities + card: + type: custom:mushroom-chips-card + alignment: center + card_param: chips + filter: + include: + - entity_id: '*marine_temperature_2' + options: + type: entity + tap_action: + action: more-info + - entity_id: '*marine_ph' + options: + type: entity + tap_action: + action: more-info + - entity_id: '*marine_salinity' + options: + type: entity + tap_action: + action: more-info + - name: '*Marine: Ammonia' + options: + type: entity + tap_action: + action: more-info + - name: '*Marine: Nitrite' + options: + type: entity + tap_action: + action: more-info + - name: '*Marine: Nitrate' + options: + type: entity + tap_action: + action: more-info + - name: '*Marine: Phosphate' + options: + type: entity + tap_action: + action: more-info + - name: '*Marine: Calcium' + options: + type: entity + tap_action: + action: more-info + - name: '*Marine: Carbonate Hardness' + options: + type: entity + tap_action: + action: more-info + exclude: + - state: unavailable + - state: unknown + - state: Unknown + - hidden_by: user + - hidden_by: integration + - entity_id: '*internal*' + show_empty: true + sort: {} + - type: custom:auto-entities + card: + type: entities + header: + type: buttons + entities: + - entity: script.aquarium_feed + name: Feed + - entity: switch.plug1 + name: Dose Trace + - entity: switch.plug2 + name: Skimmer + filter: + include: + - entity_id: '*marine_temperature_range' + options: + name: Temperature Range + tap_action: + action: more-info + secondary_info: last-changed + - entity_id: '*marine_heater_state*' + options: + name: Heater + tap_action: + action: more-info + secondary_info: last-changed + - entity_id: '*marine_heater_on*' + options: + name: Heater Time On Today + tap_action: + action: more-info + secondary_info: last-changed + - entity_id: '*marine_skimmer_container*' + options: + name: Skimmer Container + tap_action: + action: more-info + secondary_info: last-changed + - entity_id: '*marine_ato_state*' + options: + name: ATO + tap_action: + action: more-info + secondary_info: last-changed + - entity_id: '*marine_ato_on*' + options: + name: ATO On Today + tap_action: + action: more-info + secondary_info: last-changed + - entity_id: '*marine_water_level' + options: + name: Water Level + tap_action: + action: more-info + secondary_info: last-changed + - entity_id: '*marine_water_hardness' + options: + name: Water Hardness + tap_action: + action: more-info + secondary_info: last-changed + - name: '*Marine: Marine Trace Doser State' + options: + name: Marine Trace Doser + tap_action: + action: more-info + secondary_info: last-changed + - name: '*Marine: Marine Trace Dosed Weekly' + options: + name: Marine Trace Dosed Weekly + tap_action: + action: more-info + secondary_info: last-changed + exclude: + - state: unavailable + - state: unknown + - state: Unknown + - hidden_by: user + - hidden_by: integration + - entity_id: '*on_count*' + - domain: automation + - domain: script + - show_name: true + show_icon: true + show_state: true + type: glance + entities: + - entity: sensor.aquapi_marine_salinity + name: Salinity + - entity: sensor.aquapi_marine_specific_gravity + name: Specific Gravity + - entity: sensor.aquapi_marine_conductivity + name: Conductivity + state_color: false + - type: glance + entities: + - entity: input_number.marine_volume + name: Volume + - entity: sensor.marine_water_weight + name: Water Weight + - entity: sensor.marine_aquarium_power + name: Current Power + - entity: sensor.marine_aquarium_energy_monthly + name: Montly Energy + - type: custom:history-explorer-card + defaultTimeRange: 1d + stateTextMode: auto + statistics: + enabled: true + mode: mean + period: hour + combineSameUnits: true + cardName: historycard-97723151 + showCurrentValues: true + uiLayout: + selector: hide + header: Timeline + stateColors: + sensor.Heating: red + sensor.Standby: darkgreen + sensor.Ok: forestgreen + sensor.Cool: cyan + sensor.Warm: orangered + sensor.Normal: slateblue + sensor.High: gold + sensor.Low: firebrick + graphs: + - type: timeline + entities: + - entity: sensor.marine_temperature_range + name: Temp. + - entity: sensor.marine_heater_state + name: Heater + - entity: sensor.aquapi_marine_water_level + name: Water Lvl. + - entity: sensor.marine_skimmer_container + name: Skimmer + - entity: sensor.marine_trace_doser_state + name: Trace + view_layout: + position: main + - type: custom:auto-entities + filter: + include: + - entity_id: '*marine_water_level' + - entity_id: '*marine_temperature_range*' + - entity_id: '*marine_heater_state' + - entity_id: '*marine_heater_on_count*' + - entity_id: '*marine*skimmer_container*' + - entity_id: '*marine_trace_doser_state' + - entity_id: '*marine_reservoir*' + exclude: + - state: unavailable + - state: unknown + - state: Unknown + - hidden_by: user + - hidden_by: integration + - device: AquaPi 6734b0 - TEST + card: + type: custom:home-feed-card + title: Marine Feed + card_id: m_aq_feed + scrollbars_enabled: false + calendars: null + id_filter: ^home_feed_.* + more_info_on_tap: true + state_color: true + show_empty: true + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + title: Parameters + subtitle: '' + - type: custom:mini-graph-card + animate: true + name: Temperature + align_state: center + hours_to_show: 72 + cache: true + color_thresholds: + - value: 70 + color: '#0a748c' + - value: 74 + color: '#497eb0' + - value: 78 + color: '#58c02b' + - value: 80 + color: '#babf22' + - value: 84 + color: '#c0392b' + show: + labels: true + legend: false + icon_adaptive_color: true + name_adaptive_color: true + entities: + - entity: sensor.aquapi_marine_temperature + name: Marine + icon: mdi:thermometer-water + - type: custom:mini-graph-card + animate: true + align_state: center + name: pH + hours_to_show: 72 + cache: true + show: + labels: true + legend: false + icon_adaptive_color: true + name_adaptive_color: true + color_thresholds: + - value: 8.1 + color: '#0a748c' + - value: 8.2 + color: '#497eb0' + - value: 8.3 + color: '#670e80' + - value: 8.4 + color: '#babf22' + - value: 8.5 + color: '#c0392b' + entities: + - entity: sensor.aquapi_marine_ph + name: Marine + - type: custom:mini-graph-card + animate: true + align_state: center + name: Salinity + hours_to_show: 72 + cache: true + show: + labels: true + legend: false + icon_adaptive_color: true + name_adaptive_color: true + color_thresholds: + - value: 31 + color: '#0a748c' + - value: 33 + color: '#497eb0' + - value: 35 + color: '#16149c' + - value: 37 + color: '#babf22' + - value: 39 + color: '#c0392b' + entities: + - entity: sensor.aquapi_marine_salinity + name: Marine + - square: false + type: grid + cards: + - type: custom:mini-graph-card + animate: true + name: Ammonia + align_state: center + hours_to_show: 72 + height: 150 + cache: true + show: + labels: true + legend: false + icon_adaptive_color: true + name_adaptive_color: true + color_thresholds: + - value: 0 + color: '#d96c14' + - value: 1 + color: '#babf22' + - value: 4 + color: '#c0392b' + entities: + - entity: input_number.ammonia_marine + name: Marine + - type: custom:mini-graph-card + animate: true + name: Nitrite + height: 150 + align_state: center + hours_to_show: 72 + cache: true + show: + labels: true + legend: false + icon_adaptive_color: true + name_adaptive_color: true + color_thresholds: + - value: 0 + color: '#d914d2' + - value: 1 + color: '#babf22' + - value: 3 + color: '#c0392b' + entities: + - entity: input_number.nitrite_2 + name: Marine + - type: custom:mini-graph-card + animate: true + name: Nitrate + height: 150 + align_state: center + hours_to_show: 72 + cache: true + show: + labels: true + legend: false + icon_adaptive_color: true + name_adaptive_color: true + color_thresholds: + - value: 0 + color: '#148ad9' + - value: 20 + color: '#babf22' + - value: 80 + color: '#c0392b' + entities: + - entity: input_number.nitrate_marine + name: Marine + - type: custom:mini-graph-card + animate: true + name: Phospahte + height: 150 + align_state: center + hours_to_show: 72 + cache: true + show: + labels: true + legend: false + icon_adaptive_color: true + name_adaptive_color: true + color_thresholds: + - value: 0 + color: '#0b8015' + - value: 2 + color: '#babf22' + - value: 8 + color: '#c0392b' + entities: + - entity: input_number.phosphate_marine + name: Marine + columns: 2 + - type: custom:pool-monitor-card + title: Parameter Ranges + show_labels: false + show_last_updated: true + temperature: sensor.aquapi_marine_temperature + temperature_setpoint: 77 + temperature_step: 5 + temperature_unit: °F + ph: sensor.aquapi_marine_ph + ph_setpoint: 8.2 + salinity: sensor.aquapi_marine_salinity + salinity_unit: ppt + salinity_setpoint: 34 + salinity_step: 3 + calcium: input_number.calcium_marine + calcium_setpoint: 400 + calcium_step: 50 + alkalinity: input_number.carbonate_hardness_marine + alkalinity_setpoint: 178 + alkalinity_step: 36 + view_layout: + column: 2 + - type: vertical-stack + cards: + - type: custom:mushroom-title-card + title: Device Controls & Power + subtitle: '' + - square: false + columns: 1 + type: grid + cards: + - type: custom:mod-card + style: + hui-horizontal-stack-card$: | + buttons-card { + margin-left: 0px !important; + margin-right: 0px !important; + margin-bottom: 0px !important; + flex: unset !important; + } + mini-graph-card { + margin-right: 0px !important; + width: 60%; + margin-bottom: 0px !important; + flex: unset !important; + } + card: + type: horizontal-stack + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: switch.tp_link_power_strip_d0b7_plug_4 + name: Main Light + - type: custom:mini-graph-card + animate: true + align_state: center + hours_to_show: 72 + height: 150 + cache: true + line_color: lightblue + show: + name: false + icon: false + labels: true + legend: false + entities: + - entity: sensor.plug_4_current_consumption + - type: custom:mod-card + style: + hui-horizontal-stack-card$: | + buttons-card { + margin-left: 0px !important; + margin-right: 0px !important; + margin-bottom: 0px !important; + flex: unset !important; + } + mini-graph-card { + margin-right: 0px !important; + width: 60%; + margin-bottom: 0px !important; + flex: unset !important; + } + card: + type: horizontal-stack + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: switch.plug6 + name: Refugium Light + - type: custom:mini-graph-card + animate: true + align_state: center + hours_to_show: 72 + height: 150 + cache: true + line_color: papayawhip + show: + name: false + icon: false + labels: true + legend: false + entities: + - entity: sensor.refugium_white_current_consumption + - type: custom:mod-card + style: + hui-horizontal-stack-card$: | + buttons-card { + margin-left: 0px !important; + margin-right: 0px !important; + margin-bottom: 0px !important; + flex: unset !important; + } + mini-graph-card { + margin-right: 0px !important; + width: 60%; + margin-bottom: 0px !important; + flex: unset !important; + } + card: + type: horizontal-stack + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: switch.plug3 + name: Return Pump + - type: custom:mini-graph-card + animate: true + name: Main Pump + align_state: center + hours_to_show: 72 + height: 150 + cache: true + line_color: green + show: + name: false + icon: false + labels: true + legend: false + entities: + - entity: sensor.main_system_pump_current_consumption + - type: custom:mod-card + style: + hui-horizontal-stack-card$: | + buttons-card { + margin-left: 0px !important; + margin-right: 0px !important; + margin-bottom: 0px !important; + flex: unset !important; + } + mini-graph-card { + margin-right: 0px !important; + width: 60%; + margin-bottom: 0px !important; + flex: unset !important; + } + card: + type: horizontal-stack + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: switch.tp_link_power_strip_d0b7_plug_3 + name: Canister Filter + - type: custom:mini-graph-card + animate: true + align_state: center + hours_to_show: 72 + height: 150 + cache: true + line_color: magenta + show: + name: false + icon: false + labels: true + legend: false + entities: + - entity: sensor.plug_3_current_consumption + - type: custom:mod-card + style: + hui-horizontal-stack-card$: | + buttons-card { + margin-left: 0px !important; + margin-right: 0px !important; + margin-bottom: 0px !important; + flex: unset !important; + } + mini-graph-card { + margin-right: 0px !important; + width: 60%; + margin-bottom: 0px !important; + flex: unset !important; + } + card: + type: horizontal-stack + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: switch.plug2 + name: Skimmer + - type: custom:mini-graph-card + animate: true + align_state: center + hours_to_show: 72 + height: 150 + cache: true + line_color: blue + show: + name: false + icon: false + labels: true + legend: false + entities: + - entity: sensor.skimmer_current_consumption + - type: custom:mod-card + style: + hui-horizontal-stack-card$: | + buttons-card { + margin-left: 0px !important; + margin-right: 0px !important; + margin-bottom: 0px !important; + flex: unset !important; + } + mini-graph-card { + margin-right: 0px !important; + width: 60%; + margin-bottom: 0px !important; + flex: unset !important; + } + card: + type: horizontal-stack + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: switch.plug4 + name: Heater + - type: custom:mini-graph-card + animate: true + align_state: center + hours_to_show: 72 + height: 150 + cache: true + line_color: red + show: + name: false + icon: false + labels: true + legend: false + entities: + - entity: sensor.heater_current_consumption + - type: custom:mod-card + style: + hui-horizontal-stack-card$: | + buttons-card { + margin-left: 0px !important; + margin-right: 0px !important; + margin-bottom: 0px !important; + flex: unset !important; + } + mini-graph-card { + margin-right: 0px !important; + width: 60%; + margin-bottom: 0px !important; + flex: unset !important; + } + card: + type: horizontal-stack + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: switch.tp_link_power_strip_d0b7_plug_1 + name: UV Sterilizer + - type: custom:mini-graph-card + animate: true + align_state: center + hours_to_show: 72 + height: 150 + cache: true + line_color: cyan + show: + name: false + icon: false + labels: true + legend: false + entities: + - entity: sensor.plug_1_current_consumption + - type: custom:mod-card + style: + hui-horizontal-stack-card$: | + buttons-card { + margin-left: 0px !important; + margin-right: 0px !important; + margin-bottom: 0px !important; + flex: unset !important; + } + mini-graph-card { + margin-right: 0px !important; + width: 60%; + margin-bottom: 0px !important; + flex: unset !important; + } + card: + type: horizontal-stack + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: switch.plug5 + name: Wave Maker + - type: custom:mini-graph-card + animate: true + align_state: center + hours_to_show: 72 + height: 150 + cache: true + line_color: yellow + show: + name: false + icon: false + labels: true + legend: false + entities: + - entity: sensor.wave_maker_current_consumption + - type: custom:mod-card + style: + hui-horizontal-stack-card$: | + buttons-card { + margin-left: 0px !important; + margin-right: 0px !important; + margin-bottom: 0px !important; + flex: unset !important; + } + mini-graph-card { + margin-right: 0px !important; + width: 60%; + margin-bottom: 0px !important; + flex: unset !important; + } + card: + type: horizontal-stack + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: switch.tp_link_power_strip_d0b7_plug_5 + name: Powerhead + - type: custom:mini-graph-card + animate: true + align_state: center + hours_to_show: 72 + height: 150 + cache: true + line_color: orange + show: + name: false + icon: false + labels: true + legend: false + entities: + - entity: sensor.plug_5_current_consumption + - type: custom:mod-card + style: + hui-horizontal-stack-card$: | + buttons-card { + margin-left: 0px !important; + margin-right: 0px !important; + margin-bottom: 0px !important; + flex: unset !important; + } + mini-graph-card { + margin-right: 0px !important; + width: 60%; + margin-bottom: 0px !important; + flex: unset !important; + } + card: + type: horizontal-stack + cards: + - show_name: true + show_icon: true + type: button + tap_action: + action: toggle + entity: switch.plug1 + name: Marine Trace Doser + - type: custom:mini-graph-card + animate: true + align_state: center + hours_to_show: 72 + height: 150 + cache: true + line_color: orange + show: + name: false + icon: false + labels: true + legend: false + entities: + - entity: sensor.fluval_306_current_consumption + view_layout: + column: 3 + - type: vertical-stack + cards: + - type: custom:auto-entities + filter: + template: |- + {% for state in states.sensor -%} + {%- if (state.entity_id | regex_match("^sensor.*marine_heater_on_today($|)", ignorecase=False)) -%} + {{ + { + 'entity': state.entity_id, + 'name': state.attributes.friendly_name|regex_replace(find='(:|)( Heater on Today|)', replace='', ignorecase=True) + } + }}, + {%- endif -%} + {%- endfor %} + exclude: [] + card: + type: custom:mini-graph-card + name: Heater Duration + show: + graph: bar + labels: true + icon_adaptive_color: true + name_adaptive_color: true + hours_to_show: 168 + aggregate_func: max + group_by: date + sort: + method: friendly_name + reverse: false + view_layout: + column: 2 +layout: + max_cols: 3 + max_width: 600 diff --git a/README.md b/README.md index d07504f..a3cbc78 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # [AquaPi for ESPHome](https://therealfalsereality.github.io/aquapi/) -drawing +drawing The Aquarium meets the Smart Home! **[Setup Guide](https://github.com/TheRealFalseReality/aquapi/wiki/Setup-AquaPi)** @@ -19,14 +19,14 @@ Why use AquaPi? ### **[Buy Now!](https://www.capitalcityaquatics.com/store/p/aquapi)** | ![PXL_20230529_200205979](https://github.com/TheRealFalseReality/aquapi/assets/106857076/1ebcddb2-d481-48f0-9136-ca698cbe1889) | ![PXL_20240224_022516268~2](https://github.com/TheRealFalseReality/aquapi/assets/106857076/db50c972-2bbd-4c9f-9f62-fa6e62f41cf3) | -| ------------- | ------------- | +|--------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------| UI | ![Screenshot 2024-02-22 000808](https://github.com/TheRealFalseReality/aquapi/assets/106857076/e985df09-6e08-474d-aa9c-b4e803a5c20c) | ![Screenshot 2024-02-22 001408](https://github.com/TheRealFalseReality/aquapi/assets/106857076/a430aabc-2c28-43e7-9779-3c5c04c4b7db) | | ------------- | ------------- | -### Home Assistand Dashboard & Card Examples -If you want to try some of the Dashboard or Cards I use, follow the link below. You may need addtional integrations or custom cards for some of them! +### Home Assistant Dashboard & Card Examples +If you want to try some of the Dashboard or Cards I use, follow the link below. You may need additional integrations or custom cards for some of them! **[Example HomeAssistant Cards & Templates](https://github.com/TheRealFalseReality/aquapi/tree/main/Example%20HomeAssistant%20Cards%20%26%20Templates)** ## Hardware Used @@ -60,7 +60,7 @@ Get [Raspberry Pi Imager](https://www.raspberrypi.com/software/) **Peristaltic Dosing Pump:** *Atlas Scientific Pump: [EZO-PMP](https://files.atlas-scientific.com/EZO_PMP_Datasheet.pdf)* - EZO™ Pump Embedded Circuit - - Flow Rate: 0.5ml to 105ml/mins + - Flow Rate: 0.5ml to 105ml/min - Tube Size: 5mm - Head Height: 8.1m(26.5') @@ -73,7 +73,7 @@ Get [Raspberry Pi Imager](https://www.raspberrypi.com/software/) [Dissolved Oxygen](https://files.atlas-scientific.com/LG_DO_probe.pdf), [Humidity](https://files.atlas-scientific.com/EZO-HUM-Datasheet.pdf), [ORP](https://files.atlas-scientific.com/orp_probe.pdf), -[Temperture](https://files.atlas-scientific.com/EZO_RTD_Datasheet.pdf) +[Temperature](https://files.atlas-scientific.com/EZO_RTD_Datasheet.pdf) ### Circuit Diagram [See Wiki](https://github.com/TheRealFalseReality/aquapi/wiki/Circuit) for more details on the circuit. @@ -94,7 +94,7 @@ Setting up Home Assistant and Connecting AquaPi to your Wifi. Updating the AquaPi. ### [Web Server](https://github.com/TheRealFalseReality/aquapi/wiki/Setup-AquaPi#update) -Connecting to the AquaPi without Home Assisstant. +Connecting to the AquaPi without Home Assistant. ## Blueprints **[See Wiki](https://github.com/TheRealFalseReality/aquapi/wiki/Blueprints)** diff --git a/aquapi_camera_config.yaml b/aquapi_camera_config.yaml index 3be1bcc..60b9936 100644 --- a/aquapi_camera_config.yaml +++ b/aquapi_camera_config.yaml @@ -3,7 +3,7 @@ substitutions: name: "aquapicamera" friendly_name: "AquaPiCamera" # App Version - Updated: 5/2024 - app_version: "1.0.1-cam" + app_version: "1.1-cam" packages: device_base_camera: !include common/device_base_camera.yaml diff --git a/aquapi_config.yaml b/aquapi_config.yaml index 0239c45..edee606 100644 --- a/aquapi_config.yaml +++ b/aquapi_config.yaml @@ -3,7 +3,7 @@ substitutions: name: "aquapi" friendly_name: "AquaPi" # App Version - Updated: 1/2024 - app_version: "1.7.1" + app_version: "1.8" packages: device_base: !include common/device_base.yaml diff --git a/assests/AquaPi STL Models/AquaPi Case v39 - Plug.stl b/assests/STL Models/AquaPiCase/AquaPi Case v39 - Plug.stl similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v39 - Plug.stl rename to assests/STL Models/AquaPiCase/AquaPi Case v39 - Plug.stl diff --git a/assests/AquaPi STL Models/AquaPi Case v43- IO Cover.stl b/assests/STL Models/AquaPiCase/AquaPi Case v43- IO Cover.stl similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v43- IO Cover.stl rename to assests/STL Models/AquaPiCase/AquaPi Case v43- IO Cover.stl diff --git a/assests/AquaPi STL Models/AquaPi Case v43- IO Covers.3mf b/assests/STL Models/AquaPiCase/AquaPi Case v43- IO Covers.3mf similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v43- IO Covers.3mf rename to assests/STL Models/AquaPiCase/AquaPi Case v43- IO Covers.3mf diff --git a/assests/AquaPi STL Models/AquaPi Case v47.stl b/assests/STL Models/AquaPiCase/AquaPi Case v47.stl similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v47.stl rename to assests/STL Models/AquaPiCase/AquaPi Case v47.stl diff --git a/assests/AquaPi STL Models/AquaPi Case v62 - Mount.3mf b/assests/STL Models/AquaPiCase/AquaPi Case v62 - Mount.3mf similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v62 - Mount.3mf rename to assests/STL Models/AquaPiCase/AquaPi Case v62 - Mount.3mf diff --git a/assests/AquaPi STL Models/AquaPi Case v62 - Mount.stl b/assests/STL Models/AquaPiCase/AquaPi Case v62 - Mount.stl similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v62 - Mount.stl rename to assests/STL Models/AquaPiCase/AquaPi Case v62 - Mount.stl diff --git a/assests/AquaPi STL Models/AquaPi Case v63 - HangarThin.stl b/assests/STL Models/AquaPiCase/AquaPi Case v63 - HangarThin.stl similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v63 - HangarThin.stl rename to assests/STL Models/AquaPiCase/AquaPi Case v63 - HangarThin.stl diff --git a/assests/AquaPi STL Models/AquaPi Case v64 - Clamp.stl b/assests/STL Models/AquaPiCase/AquaPi Case v64 - Clamp.stl similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v64 - Clamp.stl rename to assests/STL Models/AquaPiCase/AquaPi Case v64 - Clamp.stl diff --git a/assests/AquaPi STL Models/AquaPi Case v65.stl b/assests/STL Models/AquaPiCase/AquaPi Case v65.stl similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v65.stl rename to assests/STL Models/AquaPiCase/AquaPi Case v65.stl diff --git a/assests/AquaPi STL Models/AquaPi Case v67 - Hangar.stl b/assests/STL Models/AquaPiCase/AquaPi Case v67 - Hangar.stl similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v67 - Hangar.stl rename to assests/STL Models/AquaPiCase/AquaPi Case v67 - Hangar.stl diff --git a/assests/AquaPi STL Models/AquaPi Case v68 - Clamp.stl b/assests/STL Models/AquaPiCase/AquaPi Case v68 - Clamp.stl similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v68 - Clamp.stl rename to assests/STL Models/AquaPiCase/AquaPi Case v68 - Clamp.stl diff --git a/assests/AquaPi STL Models/AquaPi Case v69 - Lid.stl b/assests/STL Models/AquaPiCase/AquaPi Case v69 - Lid.stl similarity index 100% rename from assests/AquaPi STL Models/AquaPi Case v69 - Lid.stl rename to assests/STL Models/AquaPiCase/AquaPi Case v69 - Lid.stl diff --git a/assests/STL Models/Handle v2.stl b/assests/STL Models/Handle v2.stl new file mode 100644 index 0000000..aa0dcd3 Binary files /dev/null and b/assests/STL Models/Handle v2.stl differ diff --git a/assests/AquaPi STL Models/OpticalBracket v39 - Back.stl b/assests/STL Models/WaterLevelBracket/OpticalBracket v40 - Back.stl similarity index 100% rename from assests/AquaPi STL Models/OpticalBracket v39 - Back.stl rename to assests/STL Models/WaterLevelBracket/OpticalBracket v40 - Back.stl diff --git a/assests/AquaPi STL Models/OpticalBracket v40 - Holder.stl b/assests/STL Models/WaterLevelBracket/OpticalBracket v40 - Holder.stl similarity index 100% rename from assests/AquaPi STL Models/OpticalBracket v40 - Holder.stl rename to assests/STL Models/WaterLevelBracket/OpticalBracket v40 - Holder.stl diff --git a/assests/AquaPi STL Models/OpticalBracket.3mf b/assests/STL Models/WaterLevelBracket/OpticalBracket.3mf similarity index 100% rename from assests/AquaPi STL Models/OpticalBracket.3mf rename to assests/STL Models/WaterLevelBracket/OpticalBracket.3mf diff --git a/blueprints/automation/TheRealFalseReality/aquapi_water_change.yaml b/blueprints/automation/TheRealFalseReality/aquapi_water_change.yaml index 6919f42..f9d44c2 100644 --- a/blueprints/automation/TheRealFalseReality/aquapi_water_change.yaml +++ b/blueprints/automation/TheRealFalseReality/aquapi_water_change.yaml @@ -1,12 +1,12 @@ blueprint: - name: 'Aquarium - AquaPi: Water Change' + name: 'Aquarium - AquaPi: Daily Water Change' description: 'Turn on two AquaPi EZO Pumps to simultaneously remove waste water (Red) and add clean water (Green) daily, in gallons, per month. **Note, this automation will fail if the calculated flow rate exceeds either of - the EZO Pump''s Max Volume/Time Flow Rates.** [More Info]() (v1) [Automation]' + the EZO Pump''s Max Volume/Time Flow Rates.** [More Info]() (v1.0.1) [Automation]' domain: automation - source_url: https://gist.github.com/TheRealFalseReality/87fc1893eb345d8ac5bf340848b9f6ca + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/aquapi_water_change.yaml input: condition: name: Add Condition(s) @@ -21,72 +21,99 @@ blueprint: text: multiple: false multiline: false - pump_waste_button: - name: AquaPi Dose Pump for Waste Water - description: Select the **AquaPi DEVICENAME Pump Waste - Dose Volume for Time** + pump_button: + name: AquaPi Dose Pump for Water Change + description: Select the **Dose Volume for Time** button. selector: - entity: - filter: - - domain: - - button - integration: esphome - multiple: false - pump_waste_volume: - name: AquaPi Dose Pump Volume Input for Waste Water - description: Select the **AquaPi DEVICENAME Pump Waste - Volume to Dose** input - number entity. - selector: - entity: - filter: - - domain: - - number - integration: esphome - multiple: false - pump_waste_time: - name: AquaPi Dose Pump Time Input for Waste Water - description: Select the **AquaPi DEVICENAME Pump Waste - Time to Dose** input - number entity. - selector: - entity: - filter: - - domain: - - number - integration: esphome - multiple: false - pump_clean_button: - name: AquaPi Dose Pump for Clean Water - description: Select the **AquaPi DEVICENAME Pump Clean - Dose Volume for Time** - button. - selector: - entity: - filter: - - domain: - - button - integration: esphome - multiple: false - pump_clean_volume: - name: AquaPi Dose Pump Volume Input for Clean Water - description: Select the **AquaPi DEVICENAME Pump Clean - Volume to Dose** input + target: + entity: + - domain: button + integration: esphome + pump_volume: + name: AquaPi Dose Pump Volume Input for Water Change + description: Select the **Volume to Dose** input number entity. selector: - entity: - filter: - - domain: - - number - integration: esphome - multiple: false - pump_clean_time: - name: AquaPi Dose Pump Time Input for Clean Water - description: Select the **AquaPi DEVICENAME Pump Clean - Time to Dose** input + target: + entity: + - domain: number + integration: esphome + pump_time: + name: AquaPi Dose Pump Time Input for Water Change + description: Select the **Time to Dose** input number entity. selector: - entity: - filter: - - domain: - - number - integration: esphome - multiple: false + target: + entity: + - domain: number + integration: esphome + # pump_waste_button: + # name: AquaPi Dose Pump for Waste Water + # description: Select the **AquaPi DEVICENAME Pump Waste - Dose Volume for Time** + # button. + # selector: + # entity: + # filter: + # - domain: + # - button + # integration: esphome + # multiple: false + # pump_waste_volume: + # name: AquaPi Dose Pump Volume Input for Waste Water + # description: Select the **AquaPi DEVICENAME Pump Waste - Volume to Dose** input + # number entity. + # selector: + # entity: + # filter: + # - domain: + # - number + # integration: esphome + # multiple: false + # pump_waste_time: + # name: AquaPi Dose Pump Time Input for Waste Water + # description: Select the **AquaPi DEVICENAME Pump Waste - Time to Dose** input + # number entity. + # selector: + # entity: + # filter: + # - domain: + # - number + # integration: esphome + # multiple: false + # pump_clean_button: + # name: AquaPi Dose Pump for Clean Water + # description: Select the **AquaPi DEVICENAME Pump Clean - Dose Volume for Time** + # button. + # selector: + # entity: + # filter: + # - domain: + # - button + # integration: esphome + # multiple: false + # pump_clean_volume: + # name: AquaPi Dose Pump Volume Input for Clean Water + # description: Select the **AquaPi DEVICENAME Pump Clean - Volume to Dose** input + # number entity. + # selector: + # entity: + # filter: + # - domain: + # - number + # integration: esphome + # multiple: false + # pump_clean_time: + # name: AquaPi Dose Pump Time Input for Clean Water + # description: Select the **AquaPi DEVICENAME Pump Clean - Time to Dose** input + # number entity. + # selector: + # entity: + # filter: + # - domain: + # - number + # integration: esphome + # multiple: false change_volume_monthly: name: Water Change Volume Montly description: "Volume to change every month. Max: 100 gallons.\n Recommended @@ -137,14 +164,18 @@ blueprint: trigger: - platform: time at: !input time_start + id: time_trigger variables: condition: !input condition - pump_waste_button: !input pump_waste_button - pump_clean_button: !input pump_clean_button - pump_clean_volume: !input pump_clean_volume - pump_waste_volume: !input pump_waste_volume - pump_clean_time: !input pump_clean_time - pump_waste_time: !input pump_waste_time + pump_button: !input pump_button + pump_volume: !input pump_volume + pump_time: !input pump_time + # pump_waste_button: !input pump_waste_button + # pump_clean_button: !input pump_clean_button + # pump_clean_volume: !input pump_clean_volume + # pump_waste_volume: !input pump_waste_volume + # pump_clean_time: !input pump_clean_time + # pump_waste_time: !input pump_waste_time change_time: !input change_time time_start: !input time_start change_volume_monthly: !input change_volume_monthly @@ -175,15 +206,11 @@ action: - choose: [] default: !input additional_actions - service: number.set_value - entity_id: - - !input pump_clean_volume - - !input pump_waste_volume + target: !input pump_volume data: value: '{{ calculated_volume }}' - service: number.set_value - entity_id: - - !input pump_clean_time - - !input pump_waste_time + target: !input pump_time data: value: '{{ calculated_time }}' - delay: @@ -194,9 +221,7 @@ action: - service: button.press metadata: {} data: {} - entity_id: - - !input pump_waste_button - - !input pump_clean_button + target: !input pump_button - if: - condition: template value_template: '{{ notify }}' diff --git a/blueprints/automation/TheRealFalseReality/aquapi_water_change_quick.yaml b/blueprints/automation/TheRealFalseReality/aquapi_water_change_quick.yaml new file mode 100644 index 0000000..1ead1bc --- /dev/null +++ b/blueprints/automation/TheRealFalseReality/aquapi_water_change_quick.yaml @@ -0,0 +1,251 @@ +blueprint: + name: 'Aquarium - AquaPi: Daily Quick Water Change' + description: 'Turn on two AquaPi EZO Pumps to simultaneously remove waste water + (Red) and add clean water (Green) daily, in gallons, per month. + + **Note, this automation will fail if the calculated flow rate exceeds either of + the EZO Pump''s Max Volume/Time Flow Rates.** [More Info]() (v1.0) [Automation]' + domain: automation + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/aquapi_water_change.yaml + input: + condition: + name: Add Condition(s) + description: Add conditions if needed. + default: [] + selector: + condition: {} + aquarium_name: + name: Aquarium Name + description: Name of the Aquarium for the water change (Marine Aquarium). + selector: + text: + multiple: false + multiline: false + pump_button: + name: AquaPi Dose Pump for Water Change + description: Select the **Dose Volume** + button. + selector: + target: + entity: + - domain: button + integration: esphome + pump_volume: + name: AquaPi Dose Pump Volume Input for Water Change + description: Select the **Volume to Dose** input + number entity. + selector: + target: + entity: + - domain: number + integration: esphome + # pump_time: + # name: AquaPi Dose Pump Time Input for Water Change + # description: Select the **Time to Dose** input + # number entity. + # selector: + # target: + # entity: + # - domain: number + # integration: esphome + # pump_waste_button: + # name: AquaPi Dose Pump for Waste Water + # description: Select the **AquaPi DEVICENAME Pump Waste - Dose Volume for Time** + # button. + # selector: + # entity: + # filter: + # - domain: + # - button + # integration: esphome + # multiple: false + # pump_waste_volume: + # name: AquaPi Dose Pump Volume Input for Waste Water + # description: Select the **AquaPi DEVICENAME Pump Waste - Volume to Dose** input + # number entity. + # selector: + # entity: + # filter: + # - domain: + # - number + # integration: esphome + # multiple: false + # pump_waste_time: + # name: AquaPi Dose Pump Time Input for Waste Water + # description: Select the **AquaPi DEVICENAME Pump Waste - Time to Dose** input + # number entity. + # selector: + # entity: + # filter: + # - domain: + # - number + # integration: esphome + # multiple: false + # pump_clean_button: + # name: AquaPi Dose Pump for Clean Water + # description: Select the **AquaPi DEVICENAME Pump Clean - Dose Volume for Time** + # button. + # selector: + # entity: + # filter: + # - domain: + # - button + # integration: esphome + # multiple: false + # pump_clean_volume: + # name: AquaPi Dose Pump Volume Input for Clean Water + # description: Select the **AquaPi DEVICENAME Pump Clean - Volume to Dose** input + # number entity. + # selector: + # entity: + # filter: + # - domain: + # - number + # integration: esphome + # multiple: false + # pump_clean_time: + # name: AquaPi Dose Pump Time Input for Clean Water + # description: Select the **AquaPi DEVICENAME Pump Clean - Time to Dose** input + # number entity. + # selector: + # entity: + # filter: + # - domain: + # - number + # integration: esphome + # multiple: false + change_volume_monthly: + name: Water Change Volume Montly + description: "Volume to change every month. Max: 100 gallons.\n Recommended + 10 - 15% monthly water change.\n ***Example: 120 gallon aquarium at 10% water + change every month. 120gal x 0.10 = 12gal a month.***" + selector: + number: + min: 0.1 + max: 100.0 + step: 0.1 + unit_of_measurement: gal + mode: box + time_start: + name: Time to Start + description: Time to start the Water Change every day. + default: '10:00:00' + selector: + time: {} + # change_time: + # name: Water Change Over Time + # description: Change the water amount over this time in hours every day. + # default: 8 + # selector: + # number: + # min: 4.0 + # max: 23.0 + # step: 1.0 + # unit_of_measurement: hours + # mode: slider + notify: + name: Persistent Notification + description: Notify Home Assistant when script is executed. + default: true + selector: + boolean: {} + additional_actions: + name: Additional Actions + description: "Add additional actions to the script. Will execute before everything + else.\n- Example: To send to Mobile Device using the official Home Assistant + App:\n\n Notifications -> Send a notification via mobile.YOUR_DEVICE_NAME\n + \ ```\n service: notify.YOUR_DEVICE_NAME\n metadata: {}\n data:\n message: + \"{{ message }}\"\n title: \"{{ title }}\"\n ```\n\n Copy {{ message + }} into `message`. This will switch to \"yaml\" mode. Above is a completed + example.\n" + default: [] + selector: + action: {} +trigger: +- platform: time + at: !input time_start + id: time_trigger +variables: + condition: !input condition + pump_button: !input pump_button + pump_volume: !input pump_volume + # pump_time: !input pump_time + # pump_waste_button: !input pump_waste_button + # pump_clean_button: !input pump_clean_button + # pump_clean_volume: !input pump_clean_volume + # pump_waste_volume: !input pump_waste_volume + # pump_clean_time: !input pump_clean_time + # pump_waste_time: !input pump_waste_time + # change_time: !input change_time + time_start: !input time_start + change_volume_monthly: !input change_volume_monthly + change_volume: '{{ (change_volume_monthly * 3) / 91 }}' + aquarium_name: !input aquarium_name + additional_actions: !input additional_actions + notify: !input notify + # calculated_time: '{{ change_time * 60 }}' + calculated_volume: '{{ change_volume * 3785.41 }}' + # calculated_flow_rate: '{{ change_volume / change_time }}' + # calculated_flow_rate_metric: '{{ calculated_volume / calculated_time }}' + title: '{{ aquarium_name }} Water Change' + message: 'Changing {{ change_volume | float | round(2, default=2) }} gal of {{ aquarium_name + }} at max flow rate. Monthly Water Change Amount: {{ change_volume_monthly }} gallons.' + # message: 'Changing {{ change_volume | float | round(2, default=2) }} gal of {{ aquarium_name + # }} water for {{ change_time }} hours at {{ calculated_flow_rate | float | round(2, + # default=2) }} gal/hr ({{ calculated_flow_rate_metric | float | round(2, default=2)}} + # mL/min). Monthly Water Change Amount: {{ change_volume_monthly }} gallons.' + title_fail: '{{ aquarium_name }} Water Change Failed' + message_fail: "Failed to dose {{ aquarium_name }} due to conditions not passing.\n + Conditions: {{ condition }}" + # title_fail_rate: '{{ aquarium_name }} Water Change Failed' + # message_fail_rate: '{{ calculated_flow_rate_metric | float | round(2, default=2)}} + # mL/min is greater than the typical Volume/Time flow rate (50 mL/min), for accuracy, + # the automation may not execute.' +action: +- if: + - condition: !input condition + then: + - choose: [] + default: !input additional_actions + - service: number.set_value + target: !input pump_volume + data: + value: '{{ calculated_volume }}' + # - service: number.set_value + # target: !input pump_time + # data: + # value: '{{ calculated_time }}' + - delay: + hours: 0 + minutes: 0 + seconds: 0 + milliseconds: 100 + - service: button.press + metadata: {} + data: {} + target: !input pump_button + - if: + - condition: template + value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ message }}' + title: '{{ title }}' + # - if: + # - condition: template + # value_template: '{{ calculated_flow_rate_metric > 50 }}' + # then: + # - service: notify.persistent_notification + # data: + # message: '{{ message_fail_rate }}' + # title: '{{ title_fail_rate }}' + else: + - if: + - condition: template + value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ message_fail }}' + title: '{{ title_fail }}' \ No newline at end of file diff --git a/blueprints/automation/TheRealFalseReality/aquarium_ato_aquapi.yaml b/blueprints/automation/TheRealFalseReality/aquarium_ato_aquapi.yaml index 074fe21..034c229 100644 --- a/blueprints/automation/TheRealFalseReality/aquarium_ato_aquapi.yaml +++ b/blueprints/automation/TheRealFalseReality/aquarium_ato_aquapi.yaml @@ -2,9 +2,9 @@ blueprint: name: 'Aquarium - AquaPi: ATO Automation' description: Create an ATO (Automated-Top-Off) Automation. Turn on Water Pump when water level is Low, and stop when level is Normal or High. [More Info](https://community.home-assistant.io/t/aquarium-create-ato-automation-control-switches-based-off-a-sensor/600941) - (v1.9.2) [Automation] + (v1.9.3) [Automation] domain: automation - source_url: https://gist.github.com/TheRealFalseReality/eab1edda7c678b8763ecdcddb45f2f1a + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/aquarium_ato_aquapi.yaml input: condition: name: Add Condition(s) diff --git a/blueprints/automation/TheRealFalseReality/aquarium_ato_binary.yaml b/blueprints/automation/TheRealFalseReality/aquarium_ato_binary.yaml index 44a260e..9a8e617 100644 --- a/blueprints/automation/TheRealFalseReality/aquarium_ato_binary.yaml +++ b/blueprints/automation/TheRealFalseReality/aquarium_ato_binary.yaml @@ -4,7 +4,7 @@ blueprint: binary sensor is off, and stop when binary sensor is on. [More Info](https://community.home-assistant.io/t/aquarium-create-ato-automation-control-switches-based-off-a-sensor/600941) (v1.7.2) [Automation] domain: automation - source_url: https://gist.github.com/TheRealFalseReality/651bc40bf0e539c767e5bac408962f82 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/aquarium_ato_binary.yaml input: condition: name: Add Condition(s) diff --git a/blueprints/automation/TheRealFalseReality/aquarium_dosing_daily.yaml b/blueprints/automation/TheRealFalseReality/aquarium_dosing_daily.yaml index faf8865..04e0806 100644 --- a/blueprints/automation/TheRealFalseReality/aquarium_dosing_daily.yaml +++ b/blueprints/automation/TheRealFalseReality/aquarium_dosing_daily.yaml @@ -2,9 +2,9 @@ blueprint: name: Aquarium - Dosing Time Daily description: Turn on a switch to activate doser equipment for a certain amount of time each day. [More Info](https://community.home-assistant.io/t/aquarium-turn-on-a-switch-to-activate-doser-equipment-for-a-certain-amount-of-volume-or-time/600546) - (v1.1.1) [Automation] + (v1.1.4) [Automation] domain: automation - source_url: https://gist.github.com/TheRealFalseReality/555beb10be631e24ebbf0720253cd1f8 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/aquarium_dosing_daily.yaml input: condition: name: Add Condition(s) @@ -23,10 +23,10 @@ blueprint: name: Doser Switch description: Switch that activates the Doser Equipment. selector: - target: - entity: - - domain: - - switch + entity: + domain: + - switch + multiple: true doser_time: description: Dosing Time. name: Dose Time @@ -88,18 +88,22 @@ blueprint: trigger: - platform: time at: !input time_start + id: trigger_on - platform: state entity_id: !input doseSwitch to: 'on' for: !input doseTime_max + id: max_time - platform: state entity_id: !input doseSwitch to: 'on' for: !input doseTime_max_1 + id: max_time - platform: state entity_id: !input doseSwitch to: 'on' for: !input doseTime_max_2 + id: max_time variables: condition: !input condition doseSwitch: !input doseSwitch @@ -116,27 +120,52 @@ variables: Conditions: {{ condition }}" additional_actions: !input additional_actions notify: !input notify + notify_message_fail_max: Dose Time Exceeded for {{ doseName }}. Switch should have + been switched Off to prevent overdosing. + notify_title_fail_max: Dose Time Exceeded action: - if: - condition: !input condition then: - - choose: [] - default: !input additional_actions - - if: - - condition: template - value_template: '{{ notify }}' - then: - - service: notify.persistent_notification - data: - message: '{{ notify_message }}' - title: '{{ notify_title }}' - - service: switch.turn_on - data: {} - target: !input doseSwitch - - delay: !input doser_time - - service: switch.turn_off - data: {} - target: !input doseSwitch + - choose: + - conditions: + - condition: trigger + id: trigger_on + sequence: + - choose: [] + default: !input additional_actions + - service: switch.turn_on + data: {} + entity_id: !input doseSwitch + - delay: !input doser_time + - service: switch.turn_off + data: {} + entity_id: !input doseSwitch + - if: + - condition: template + value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ notify_message }}' + title: '{{ notify_title }}' + default: + - service: switch.turn_off + metadata: {} + data: {} + entity_id: !input doseSwitch + - if: + - condition: trigger + id: max_time + then: + - if: + - condition: template + value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ notify_message_fail_max }}' + title: '{{ notify_title_fail_max }}' else: - if: - condition: template @@ -146,4 +175,4 @@ action: data: message: '{{ notify_message_fail }}' title: '{{ notify_title_fail }}' -mode: restart +mode: single diff --git a/blueprints/automation/TheRealFalseReality/aquarium_dosing_volume_automation.yaml b/blueprints/automation/TheRealFalseReality/aquarium_dosing_volume_automation.yaml index 69f0474..2bdea03 100644 --- a/blueprints/automation/TheRealFalseReality/aquarium_dosing_volume_automation.yaml +++ b/blueprints/automation/TheRealFalseReality/aquarium_dosing_volume_automation.yaml @@ -1,11 +1,11 @@ blueprint: - name: Aquarium - Dosing Automation + name: Aquarium - Dosing Automation for Script description: Activate a script that activates Doser Equipment when a switch is turned on from off, with a max time to prevent overdosing. Intended to be used with the script [Aquarium Dosing - Volume](https://community.home-assistant.io/t/aquarium-turn-on-a-switch-to-activate-doser-equipment-for-a-certain-amount-of-volume-or-time/600546). - (v1.3.2) [Automation] + (v1.3.6) [Automation] domain: automation - source_url: https://gist.github.com/TheRealFalseReality/596777245f2a364fc01801c4922370a1 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/aquarium_dosing_volume_automation.yaml input: condition: name: Add Condition(s) @@ -31,7 +31,7 @@ blueprint: domain: - switch multiple: false - doseTime: + doseTime_max: name: Dose Max Time description: 'Max time for the doser to be on, will automatically turn off Doser Switch after the set time has passed. Prevents Doser from overdosing. (Default: @@ -40,16 +40,7 @@ blueprint: hours: 1 selector: duration: {} - doseTime_1: - name: Dose Max Time Fallback - description: 'Max time for the doser to be on, will automatically turn off Doser - Switch after the set time has passed. Prevents Doser from overdosing in case - the first trigger fails. (Default: 6hrs)' - default: - hours: 6 - selector: - duration: {} - doseTime_2: + doseTime_max_1: name: Dose Max Time Failsafe description: 'Max time for the doser to be on, will automatically turn off Doser Switch after the set time has passed. Prevents Doser from overdosing in case @@ -62,7 +53,7 @@ blueprint: name: Additional Actions description: 'Add additional actions to the script. Will execute before everything else, each time the automation is triggered successfully. Variables: condition, - doseName, condition, doseSwitch, doseTime, additional_actions.' + doseName, condition, doseSwitch, doseTime_max, additional_actions.' default: [] selector: action: {} @@ -76,58 +67,80 @@ trigger: entity_id: !input doseSwitch from: unknown to: 'on' + id: unknown_on - platform: state entity_id: !input doseSwitch from: unavailable to: 'on' -- platform: state - entity_id: !input doseSwitch - to: 'off' + id: unknown_on - platform: state entity_id: !input doseSwitch to: 'on' - for: !input doseTime + for: !input doseTime_max + id: max_time - platform: state entity_id: !input doseSwitch to: 'on' - for: !input doseTime_1 + for: !input doseTime_max_1 + id: max_time - platform: state entity_id: !input doseSwitch to: 'on' - for: !input doseTime_2 + for: !input doseTime_max_1 + id: max_time variables: condition: !input condition doseScript: !input doseScript doseSwitch: !input doseSwitch - doseTime: !input doseTime - doseTime_1: !input doseTime_1 - doseTime_2: !input doseTime_2 + doseTime_max: !input doseTime_max + doseTime_max_1: !input doseTime_max_1 doseName: '{{ states[doseSwitch].name }}' notify_title_fail: Dosing Stopped or Cancelled notify_message_fail: Dosing of {{ doseName }} has stopped or been cancelled. additional_actions: !input additional_actions + notify_message_fail_max: Dose Time Exceeded for {{ doseName }}. Switch should have + been switched Off to prevent overdosing. + notify_title_fail_max: Dose Time Exceeded action: - if: - condition: !input condition then: - choose: - conditions: - - condition: or - conditions: - - condition: not - conditions: - - condition: trigger - id: trigger_on + - condition: trigger + id: trigger_on sequence: - - service: switch.turn_off - metadata: {} - data: {} - entity_id: !input doseSwitch + - choose: [] + default: !input additional_actions + - if: + - condition: state + entity_id: !input doseScript + state: 'off' + then: + - service: script.turn_on + metadata: {} + data: {} + entity_id: !input doseScript default: - - choose: [] - default: !input additional_actions - - service: script.turn_on + - service: switch.turn_off metadata: {} data: {} - entity_id: !input doseScript + entity_id: !input doseSwitch + - if: + - condition: trigger + id: max_time + then: + - if: + - condition: template + value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ notify_message_fail_max }}' + title: '{{ notify_title_fail_max }}' + else: + - service: notify.persistent_notification + data: + message: '{{ notify_message_fail }}' + title: '{{ notify_title_fail }}' mode: restart diff --git a/blueprints/automation/TheRealFalseReality/aquarium_dosing_volume_daily.yaml b/blueprints/automation/TheRealFalseReality/aquarium_dosing_volume_daily.yaml index 42ac17a..708a6e2 100644 --- a/blueprints/automation/TheRealFalseReality/aquarium_dosing_volume_daily.yaml +++ b/blueprints/automation/TheRealFalseReality/aquarium_dosing_volume_daily.yaml @@ -2,9 +2,9 @@ blueprint: name: Aquarium - Dosing Volume Daily description: Turn on a switch to activate doser equipment for a certain amount of time based on volume and given dose rate each day. [More Info](https://community.home-assistant.io/t/aquarium-turn-on-a-switch-to-activate-doser-equipment-for-a-certain-amount-of-volume-or-time/600546) - (v1.3.2) [Automation] + (v1.3.6) [Automation] domain: automation - source_url: https://gist.github.com/TheRealFalseReality/06f78b75ce11593202f4a1a0bf7bb5da + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/aquarium_dosing_volume_daily.yaml input: condition: name: Add Condition(s) @@ -21,13 +21,12 @@ blueprint: multiline: false doseSwitch: name: Doser Switch - description: Switch that activates the Doser Equipment. Make a Group Helper - switch for multiple switches. + description: Switch that activates the Doser Equipment. selector: entity: domain: - switch - multiple: false + multiple: true doseRate: description: Calibrated dosing rate of doser equipment (in mL/min). BRS 2-part doser is 1.1 mL/min. @@ -106,7 +105,7 @@ blueprint: trigger: - platform: time at: !input time_start - id: trigger_time + id: trigger_on - platform: state entity_id: !input doseSwitch from: 'off' @@ -120,22 +119,21 @@ trigger: entity_id: !input doseSwitch from: unavailable to: 'on' -- platform: state - entity_id: !input doseSwitch - id: trigger_off - to: 'off' - platform: state entity_id: !input doseSwitch to: 'on' for: !input doseTime_max + id: max_time - platform: state entity_id: !input doseSwitch to: 'on' for: !input doseTime_max_1 + id: max_time - platform: state entity_id: !input doseSwitch to: 'on' for: !input doseTime_max_2 + id: max_time variables: condition: !input condition doseName: !input doseName @@ -157,51 +155,56 @@ variables: Conditions: {{ condition }}' additional_actions: !input additional_actions notify: !input notify + notify_message_fail_max: Dose Time Exceeded for {{ doseName }}. Switch should have + been switched Off to prevent overdosing. + notify_title_fail_max: Dose Time Exceeded action: - if: - condition: !input condition then: - choose: - conditions: - - condition: or - conditions: - - condition: not - conditions: - - condition: trigger - id: trigger_on - - condition: trigger - id: trigger_time + - condition: trigger + id: trigger_on sequence: - - service: switch.turn_off - metadata: {} + - choose: [] + default: !input additional_actions + - service: switch.turn_on data: {} entity_id: !input doseSwitch - default: - - choose: [] - default: !input additional_actions - - service: switch.turn_on - data: {} - entity_id: !input doseSwitch - - if: - - condition: and - conditions: + - if: - condition: template value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ notify_message }}' + title: '{{ notify_title }}' + - delay: + hours: 0 + minutes: '{{ doseTime }}' + seconds: 0 + milliseconds: 0 + - service: switch.turn_off + data: {} + entity_id: !input doseSwitch + default: + - service: switch.turn_off + metadata: {} + data: {} + entity_id: !input doseSwitch + - if: - condition: trigger - id: trigger_on - then: - - service: notify.persistent_notification - data: - message: '{{ notify_message }}' - title: '{{ notify_title }}' - - delay: - hours: 0 - minutes: '{{ doseTime }}' - seconds: 0 - milliseconds: 0 - - service: switch.turn_off - data: {} - entity_id: !input doseSwitch + id: max_time + then: + - if: + - condition: template + value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ notify_message_fail_max }}' + title: '{{ notify_title_fail_max }}' else: - if: - condition: template @@ -211,4 +214,4 @@ action: data: message: '{{ notify_message_fail }}' title: '{{ notify_title_fail }}' -mode: restart +mode: single diff --git a/blueprints/automation/TheRealFalseReality/aquarium_lighting_automation.yaml b/blueprints/automation/TheRealFalseReality/aquarium_lighting_automation.yaml index 4119a78..73367b4 100644 --- a/blueprints/automation/TheRealFalseReality/aquarium_lighting_automation.yaml +++ b/blueprints/automation/TheRealFalseReality/aquarium_lighting_automation.yaml @@ -4,7 +4,7 @@ blueprint: at a certain time, daily. When automation is run manually, light(s) will turn off. [More Info](https://community.home-assistant.io/t/aquarium-toggle-lights-at-certain-times-of-day/684862) (v1.1) [Automation] domain: automation - source_url: https://gist.github.com/TheRealFalseReality/3b7f47a0f7e957a2c162a5acd205d26b + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/aquarium_lighting_automation.yaml input: condition: name: Add Condition(s) diff --git a/blueprints/automation/TheRealFalseReality/notify _trigger.yaml b/blueprints/automation/TheRealFalseReality/notify_trigger.yaml similarity index 93% rename from blueprints/automation/TheRealFalseReality/notify _trigger.yaml rename to blueprints/automation/TheRealFalseReality/notify_trigger.yaml index 05ace67..b89ea55 100644 --- a/blueprints/automation/TheRealFalseReality/notify _trigger.yaml +++ b/blueprints/automation/TheRealFalseReality/notify_trigger.yaml @@ -4,7 +4,7 @@ blueprint: when the automation is triggered. Option to send to mobile device with Additional Actions. [More Info]() (v1.1) [Automation] domain: automation - source_url: https://gist.github.com/TheRealFalseReality/647b0b754ef85295dd68e7e06ba4f4e7 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/notify_trigger.yaml input: trigger_additional: name: Trigger(s) @@ -64,4 +64,4 @@ action: message: !input input_message title: !input input_title - choose: [] - default: !input additional_actions \ No newline at end of file + default: !input additional_actions diff --git a/blueprints/automation/TheRealFalseReality/sensor_alarm.yaml b/blueprints/automation/TheRealFalseReality/sensor_alarm.yaml new file mode 100644 index 0000000..e28a5bb --- /dev/null +++ b/blueprints/automation/TheRealFalseReality/sensor_alarm.yaml @@ -0,0 +1,105 @@ +blueprint: + name: "Aquarium - AquaPi: Send a Notification Based on an AquaPi Sensor Value" + description: This automation will send a persistent notification to Home Assistant + when a selected sensor (Temperature, pH, Salinity, etc.) is out of range. Option to send + to mobile device with Additional Actions. + [More Info]() + (v1) [Automation] + domain: automation + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/sensor_alarm.yaml + input: + tank_name: + name: Aquarium Name + description: Name of the Aquarium (ex. Marine Aquarium). + default: My Aquarium + selector: + text: + multiple: false + multiline: false + sensors: + name: Sensors + description: "Select AquaPi sensors to trigger the automation and send the notification.\n + Create a blueprint for each sensor type, i.e., temperaure, pH, etc." + selector: + entity: + filter: + - domain: sensor + integration: esphome + device_class: + - ph + - volatile_organic_compounds_parts + - temperature + multiple: true + value_above: + name: Above Value + description: Set number to trigger automation when sensor value crosses above this threshold. + selector: + number: + min: 0.01 + max: 1000.0 + step: 0.01 + mode: box + value_below: + name: Below Value + description: Set number to trigger automation when sensor value crosses below this threshold. + selector: + number: + min: 0.01 + max: 1000.0 + step: 0.01 + mode: box + input_title: + name: Notification Title + description: "Title of the Notification.\n + Default: TANKNAME Alarm\n + `{{ tank_name }} Alarm`" + default: '{{ title }}' + selector: + text: + multiple: false + multiline: false + input_message: + name: Notification Message + description: "Message of the Notification.\n + Default: TRIGGER_FRIENDLYNAME is SENSORSTATE\n + `{{ state_attr(trigger.entity_id, 'friendly_name') }} is {{ trigger.to_state.state }}`" + default: '{{ message }}' + selector: + text: + multiple: false + multiline: true + additional_actions: + name: Additional Actions + description: "Add additional actions to the script.\n + - Example: To send to Mobile Device using the official Home Assistant + App:\n\n Notifications -> Send a notification via mobile.YOUR_DEVICE_NAME\n + \ ```\n service: notify.YOUR_DEVICE_NAME\n metadata: {}\n data:\n message: + \"{{ message }}\"\n title: \"{{ title }}\"\n ```\n\n Copy {{ message + }} into `message`. This will switch to \"yaml\" mode. Above is a completed + example.\n" + default: [] + selector: + action: {} +variables: + additional_actions: !input additional_actions + tank_name: !input tank_name + sensors: !input sensors + value_below: !input value_below + value_above: !input value_above + message: "{{ state_attr(trigger.entity_id, 'friendly_name') }} is {{ + trigger.to_state.state }}." + title: "{{ tank_name }} Alarm" +trigger: + - platform: numeric_state + entity_id: !input sensors + above: !input value_above + - platform: numeric_state + entity_id: !input sensors + below: !input value_below +action: +- choose: [] + default: !input additional_actions +- service: notify.persistent_notification + data: + message: '{{ message }}' + title: '{{ title }}' diff --git a/blueprints/automation/TheRealFalseReality/temperature_switch_control.yaml b/blueprints/automation/TheRealFalseReality/temperature_switch_control.yaml index da480b8..bba6df9 100644 --- a/blueprints/automation/TheRealFalseReality/temperature_switch_control.yaml +++ b/blueprints/automation/TheRealFalseReality/temperature_switch_control.yaml @@ -3,7 +3,7 @@ blueprint: description: This automation blueprint will turn switches on or off when the selected temperature sensor is above or below a certain value. (v1.1) [Automation] domain: automation - source_url: https://gist.github.com/TheRealFalseReality/9788b2f9ba2e5e51a05bd081441314d3 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/temperature_switch_control.yaml input: condition: name: Add Condition(s) diff --git a/blueprints/automation/TheRealFalseReality/toggle_water_level.yaml b/blueprints/automation/TheRealFalseReality/toggle_water_level.yaml index 4b60848..e73fe1a 100644 --- a/blueprints/automation/TheRealFalseReality/toggle_water_level.yaml +++ b/blueprints/automation/TheRealFalseReality/toggle_water_level.yaml @@ -1,9 +1,9 @@ blueprint: name: 'Aquarium - AquaPi: Toggle Switches Based on Water Level' description: This automation blueprint will turn devices on or off when water level - is high or low. (v1.21) [Automation] + is high or low. (v1.21.1) [Automation] domain: automation - source_url: https://gist.github.com/TheRealFalseReality/6a764c0904067d44ca45e8e59a3d8747 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/automation/TheRealFalseReality/toggle_water_level.yaml input: condition: name: Add Condition(s) @@ -16,63 +16,56 @@ blueprint: description: The AquaPi sensor that detects water level selector: entity: - domain: - - sensor - multiple: false + domain: sensor + integration: esphome switchHighOff: name: High Switch OFF description: Switch(es) to turn OFF when Water Level is High - default: [] + default: {} selector: - entity: - domain: - - switch - multiple: true + target: + entity: + domain: switch switchHighOn: name: High Switch ON description: Switch(es) to turn ON when Water Level is High - default: [] + default: {} selector: - entity: - domain: - - switch - multiple: true + target: + entity: + domain: switch switchNormalOff: name: Normal Switch OFF description: Switch(es) to turn OFF when Water Level is Normal - default: [] + default: {} selector: - entity: - domain: - - switch - multiple: true + target: + entity: + domain: switch switchNormalOn: name: Normal Switch ON description: Switch(es) to turn ON when Water Level is Normal - default: [] + default: {} selector: - entity: - domain: - - switch - multiple: true + target: + entity: + domain: switch switchLowOff: - name: Low Switch OFF - description: Switch(es) to turn OFF when Water Level is Low - default: [] + name: Normal Switch ON + description: Switch(es) to turn ON when Water Level is Normal + default: {} selector: - entity: - domain: - - switch - multiple: true + target: + entity: + domain: switch switchLowOn: - name: Low Switch ON - description: Switch(es) to turn ON when Water Level is Low - default: [] + name: Normal Switch ON + description: Switch(es) to turn ON when Water Level is Normal + default: {} selector: - entity: - domain: - - switch - multiple: true + target: + entity: + domain: switch delayHigh: name: Delay when High (Optional) description: Wait before toggling devices @@ -147,25 +140,25 @@ action: state: High then: - service: switch.turn_off - entity_id: !input switchHighOff + target: !input switchHighOff - service: switch.turn_on - entity_id: !input switchHighOn + target: !input switchHighOn - if: - condition: state entity_id: !input sensor state: Normal then: - service: switch.turn_off - entity_id: !input switchNormalOff + target: !input switchNormalOff - service: switch.turn_on - entity_id: !input switchNormalOn + target: !input switchNormalOn - if: - condition: state entity_id: !input sensor state: Low then: - service: switch.turn_off - entity_id: !input switchLowOff + target: !input switchLowOff - service: switch.turn_on - entity_id: !input switchLowOn + target: !input switchLowOn mode: restart diff --git a/blueprints/script/TheRealFalseReality/aquapi_dosing.yaml b/blueprints/script/TheRealFalseReality/aquapi_dosing.yaml new file mode 100644 index 0000000..e6cb1d9 --- /dev/null +++ b/blueprints/script/TheRealFalseReality/aquapi_dosing.yaml @@ -0,0 +1,123 @@ +blueprint: + name: "Aquarium - AquaPi: Dosing" + description: Turn on an AquaPi EZO Pump to dose a specific amount in mL. + [More Info]() (v1) [Script] + domain: script + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/aquapi_dosing.yaml + input: + condition: + name: Add Condition(s) + description: Add conditions if needed. + default: [] + selector: + condition: {} + dose_name: + name: Dose Name + description: Name of what you are dosing (ex. Marine Trace). + selector: + text: + multiple: false + multiline: false + pump_button: + name: AquaPi Dose Pump + description: Select the **AquaPi DEVICENAME Pump - Dose Volume** button(s). + selector: + entity: + filter: + - domain: button + integration: esphome + volume_number: + name: AquaPi Dose Volume Input Number + description: Select the **AquaPi DEVICENAME Pump - Volume to Dose** input number sensor + to set the Volume to dose. + selector: + entity: + filter: + - domain: number + integration: esphome + dose_volume: + name: Dose Volume (mL) + description: "Volume to dose. The EZO Pump will dose at max flow rate, about 105 mL/min. + *This may not match the sensor reported from the AquaPi.* Max: 1000 mL" + selector: + number: + min: 1 + max: 1000 + step: 0.1 + unit_of_measurement: mL + mode: box + notify: + name: Persistent Notification (Recommended) + description: Notify Home Assistant when script is executed. + default: true + selector: + boolean: {} + additional_actions: + name: Additional Actions + description: | + Add additional actions to the script. Will execute before everything else. + - Example: To send to Mobile Device using the official Home Assistant App: + + Notifications -> Send a notification via mobile.YOUR_DEVICE_NAME + ``` + service: notify.YOUR_DEVICE_NAME + metadata: {} + data: + message: "{{ message }}" + title: "{{ title }}" + ``` + + Copy {{ message }} into `message`. This will switch to "yaml" mode. Above is a completed example. + default: [] + selector: + action: {} +variables: + condition: !input condition + pump_button: !input pump_button + volume_number: !input volume_number + dose_volume: !input dose_volume + dose_name: !input dose_name + title: 'Dosing - {{ dose_name }}' + message: Dosing {{ dose_volume }}mL of {{ dose_name }}. + title_fail: '{{ dose_name }} Failed' + message_fail: "Failed to dose {{ dose_name }} due to conditions not passing.\n + Conditions: {{ condition }}" + additional_actions: !input additional_actions + notify: !input notify +sequence: +- if: + - condition: !input condition + then: + - choose: [] + default: !input additional_actions + - service: number.set_value + entity_id: !input volume_number + data: + value: !input dose_volume + - delay: + hours: 0 + minutes: 0 + seconds: 0 + milliseconds: 100 + - service: button.press + metadata: {} + data: {} + entity_id: !input pump_button + - if: + - condition: template + value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ message }}' + title: '{{ title }}' + else: + - if: + - condition: template + value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ message_fail }}' + title: '{{ title_fail }}' +mode: restart diff --git a/blueprints/script/TheRealFalseReality/aquapi_read.yaml b/blueprints/script/TheRealFalseReality/aquapi_ezo_read.yaml similarity index 63% rename from blueprints/script/TheRealFalseReality/aquapi_read.yaml rename to blueprints/script/TheRealFalseReality/aquapi_ezo_read.yaml index 2582bb7..9fcb032 100644 --- a/blueprints/script/TheRealFalseReality/aquapi_read.yaml +++ b/blueprints/script/TheRealFalseReality/aquapi_ezo_read.yaml @@ -1,9 +1,9 @@ blueprint: name: 'Aquarium - AquaPi: Continuous Read' - description: Read AquaPi probe every second for 60 seconds. [More Info] (v1.1) + description: Read AquaPi probe every second for 60 seconds. [More Info] (v1.1.1) [Script] domain: script - source_url: https://gist.github.com/TheRealFalseReality/31de3a3654209bd4a97317762858c271 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/aquapi_ezo_read.yaml input: read_button: name: Read Button @@ -16,8 +16,18 @@ blueprint: - button integration: esphome multiple: false + time_count: + name: Read Time + description: Time, in seconds to read the probe for. (default = 60 seconds) + default: 60 + selector: + number: + min: 1 + max: 300 + unit_of_measurement: seconds variables: read_button: !input read_button + time_count: !input time_count sequence: - repeat: sequence: @@ -31,5 +41,5 @@ sequence: minutes: 0 seconds: 1 milliseconds: 0 - count: 60 + count: '{{ time_count }}' mode: restart diff --git a/blueprints/script/TheRealFalseReality/aquapi_quick_water_change_script.yaml b/blueprints/script/TheRealFalseReality/aquapi_quick_water_change_script.yaml new file mode 100644 index 0000000..b628f5a --- /dev/null +++ b/blueprints/script/TheRealFalseReality/aquapi_quick_water_change_script.yaml @@ -0,0 +1,167 @@ +blueprint: + name: 'Aquarium - AquaPi: Quick Water Change [Script]' + description: 'Turn on two AquaPi EZO Pumps to simultaneously remove waste water + (Red) and add clean water (Green) daily, in gallons. + + **Note, this script will fail if the calculated flow rate exceeds either of the + EZO Pump''s Max Volume/Time Flow Rates.** [More Info]() (v1.0.1) [Script]' + domain: script + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/aquapi_quick_water_change_script.yaml + input: + condition: + name: Add Condition(s) + description: Add conditions if needed. + default: [] + selector: + condition: {} + aquarium_name: + name: Aquarium Name + description: Name of the Aquarium for the water change (Marine Aquarium). + selector: + text: + multiple: false + multiline: false + pump_button: + name: AquaPi Dose Pump for Water Change + description: Select the **Dose Volume** button. + selector: + target: + entity: + - domain: + - button + integration: esphome + pump_volume: + name: AquaPi Dose Pump Volume Input for Water Change + description: Select the **Volume to Dose** input number entity. + selector: + target: + entity: + - domain: + - number + integration: esphome + # pump_waste_button: + # name: AquaPi Dose Pump for Waste Water + # description: Select the **AquaPi DEVICENAME Pump Waste - Dose Volume** button. + # selector: + # entity: + # filter: + # - domain: + # - button + # integration: esphome + # multiple: false + # pump_waste_volume: + # name: AquaPi Dose Pump Volume Input for Waste Water + # description: Select the **AquaPi DEVICENAME Pump Waste - Volume to Dose** input + # number entity. + # selector: + # entity: + # filter: + # - domain: + # - number + # integration: esphome + # multiple: false + # pump_clean_button: + # name: AquaPi Dose Pump for Clean Water + # description: Select the **AquaPi DEVICENAME Pump Clean - Dose Volume for Time** + # button. + # selector: + # entity: + # filter: + # - domain: + # - button + # integration: esphome + # multiple: false + # pump_clean_volume: + # name: AquaPi Dose Pump Volume Input for Clean Water + # description: Select the **AquaPi DEVICENAME Pump Clean - Volume to Dose** input + # number entity. + # selector: + # entity: + # filter: + # - domain: + # - number + # integration: esphome + # multiple: false + change_volume: + name: Water Change Volume + description: "Volume to change. Max: 100 gallons.\n Recommended 10 - 15% monthly + water change." + default: 5 + selector: + number: + min: 0.5 + max: 100.0 + step: 0.5 + unit_of_measurement: gal + mode: slider + notify: + name: Persistent Notification + description: Notify Home Assistant when script is executed. + default: true + selector: + boolean: {} + additional_actions: + name: Additional Actions + description: "Add additional actions to the script. Will execute before everything + else.\n- Example: To send to Mobile Device using the official Home Assistant + App:\n\n Notifications -> Send a notification via mobile.YOUR_DEVICE_NAME\n + \ ```\n service: notify.YOUR_DEVICE_NAME\n metadata: {}\n data:\n message: + \"{{ message }}\"\n title: \"{{ title }}\"\n ```\n\n Copy {{ message + }} into `message`. This will switch to \"yaml\" mode. Above is a completed + example.\n" + default: [] + selector: + action: {} +variables: + condition: !input condition + pump_button: !input pump_button + pump_volume: !input pump_volume + # pump_waste_button: !input pump_waste_button + # pump_clean_button: !input pump_clean_button + # pump_clean_volume: !input pump_clean_volume + # pump_waste_volume: !input pump_waste_volume + change_volume: !input change_volume + aquarium_name: !input aquarium_name + additional_actions: !input additional_actions + notify: !input notify + calculated_volume: '{{ change_volume * 3785.41 }}' + title: '{{ aquarium_name }} Water Change' + message: Changing {{ change_volume | float | round(2, default=2) }} gal of {{ aquarium_name + }} water. + title_fail: '{{ aquarium_name }} Water Change Failed' + message_fail: "Failed to dose {{ aquarium_name }} due to conditions not passing.\n + Conditions: {{ condition }}" + title_fail_rate: '{{ aquarium_name }} Water Change Failed' +sequence: +- if: + - condition: !input condition + then: + - choose: [] + default: !input additional_actions + - service: number.set_value + target: !input pump_volume + data: + value: '{{ calculated_volume }}' + - delay: + hours: 0 + minutes: 0 + seconds: 0 + milliseconds: 100 + - service: button.press + metadata: {} + data: {} + target: !input pump_button + - if: + - condition: template + value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ message }}' + title: '{{ title }}' + else: + - service: notify.persistent_notification + data: + message: '{{ message_fail }}' + title: '{{ title_fail }}' +mode: single diff --git a/blueprints/script/TheRealFalseReality/aquapi_water_change_script.yaml b/blueprints/script/TheRealFalseReality/aquapi_water_change_script.yaml index 62819cf..c2260dc 100644 --- a/blueprints/script/TheRealFalseReality/aquapi_water_change_script.yaml +++ b/blueprints/script/TheRealFalseReality/aquapi_water_change_script.yaml @@ -4,9 +4,9 @@ blueprint: (Red) and add clean water (Green) daily, in gallons. **Note, this script will fail if the calculated flow rate exceeds either of the - EZO Pump''s Max Volume/Time Flow Rates.** [More Info]() (v1) [Script]' + EZO Pump''s Max Volume/Time Flow Rates.** [More Info]() (v1.0.1) [Script]' domain: script - source_url: https://gist.github.com/TheRealFalseReality/d01e00f94e1b25c9b723b12757d45f58 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/aquapi_water_change_script.yaml input: condition: name: Add Condition(s) @@ -21,72 +21,33 @@ blueprint: text: multiple: false multiline: false - pump_waste_button: - name: AquaPi Dose Pump for Waste Water - description: Select the **AquaPi DEVICENAME Pump Waste - Dose Volume for Time** - button. + pump_button: + name: AquaPi Dose Pump for Water Change + description: Select the **Dose Volume for Time** button. selector: - entity: - filter: + target: + entity: - domain: - button integration: esphome - multiple: false - pump_waste_volume: - name: AquaPi Dose Pump Volume Input for Waste Water - description: Select the **AquaPi DEVICENAME Pump Waste - Volume to Dose** input - number entity. + pump_volume: + name: AquaPi Dose Pump Volume Input for Water Change + description: Select the **Volume to Dose** input number entity. selector: - entity: - filter: + target: + entity: - domain: - number integration: esphome - multiple: false - pump_waste_time: - name: AquaPi Dose Pump Time Input for Waste Water - description: Select the **AquaPi DEVICENAME Pump Waste - Time to Dose** input - number entity. + pump_time: + name: AquaPi Dose Pump Time Input for Water Change + description: Select the **Time to Dose** input number entity. selector: - entity: - filter: + target: + entity: - domain: - number integration: esphome - multiple: false - pump_clean_button: - name: AquaPi Dose Pump for Clean Water - description: Select the **AquaPi DEVICENAME Pump Clean - Dose Volume for Time** - button. - selector: - entity: - filter: - - domain: - - button - integration: esphome - multiple: false - pump_clean_volume: - name: AquaPi Dose Pump Volume Input for Clean Water - description: Select the **AquaPi DEVICENAME Pump Clean - Volume to Dose** input - number entity. - selector: - entity: - filter: - - domain: - - number - integration: esphome - multiple: false - pump_clean_time: - name: AquaPi Dose Pump Time Input for Clean Water - description: Select the **AquaPi DEVICENAME Pump Clean - Time to Dose** input - number entity. - selector: - entity: - filter: - - domain: - - number - integration: esphome - multiple: false change_volume_monthly: name: Water Change Volume Montly description: "Volume to change every month. Max: 100 gallons.\n Recommended @@ -130,12 +91,9 @@ blueprint: action: {} variables: condition: !input condition - pump_waste_button: !input pump_waste_button - pump_clean_button: !input pump_clean_button - pump_clean_volume: !input pump_clean_volume - pump_waste_volume: !input pump_waste_volume - pump_clean_time: !input pump_clean_time - pump_waste_time: !input pump_waste_time + pump_button: !input pump_button + pump_volume: !input pump_volume + pump_time: !input pump_time change_time: !input change_time change_volume_monthly: !input change_volume_monthly change_volume: '{{ (change_volume_monthly * 3) / 91 }}' @@ -165,15 +123,11 @@ sequence: - choose: [] default: !input additional_actions - service: number.set_value - entity_id: - - !input pump_clean_volume - - !input pump_waste_volume + target: !input pump_volume data: value: '{{ calculated_volume }}' - service: number.set_value - entity_id: - - !input pump_clean_time - - !input pump_waste_time + target: !input pump_time data: value: '{{ calculated_time }}' - delay: @@ -184,9 +138,7 @@ sequence: - service: button.press metadata: {} data: {} - entity_id: - - !input pump_waste_button - - !input pump_clean_button + target: !input pump_button - if: - condition: template value_template: '{{ notify }}' @@ -204,12 +156,8 @@ sequence: message: '{{ message_fail_rate }}' title: '{{ title_fail_rate }}' else: - - if: - - condition: template - value_template: '{{ notify }}' - then: - - service: notify.persistent_notification - data: - message: '{{ message_fail }}' - title: '{{ title_fail }}' + - service: notify.persistent_notification + data: + message: '{{ message_fail }}' + title: '{{ title_fail }}' mode: single diff --git a/blueprints/script/TheRealFalseReality/aquarium_dosing.yaml b/blueprints/script/TheRealFalseReality/aquarium_dosing.yaml index 0ba3309..39f6543 100644 --- a/blueprints/script/TheRealFalseReality/aquarium_dosing.yaml +++ b/blueprints/script/TheRealFalseReality/aquarium_dosing.yaml @@ -2,9 +2,9 @@ blueprint: name: Aquarium - Dosing Time description: Turn on a switch to activate doser equipment for a certain amount of time. [More Info](https://community.home-assistant.io/t/aquarium-turn-on-a-switch-to-activate-doser-equipment-for-a-certain-amount-of-volume-or-time/600546) - (v1.3.2) [Script] + (v1.3.3) [Script] domain: script - source_url: https://gist.github.com/TheRealFalseReality/9fd8f929b5f6cc32f6e8a67cd8104941 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/aquarium_dosing.yaml input: condition: name: Add Condition(s) @@ -19,7 +19,7 @@ blueprint: text: multiline: false multiple: false - switch: + doseSwitch: name: Doser Switch description: Switch that activates the Doser Equipment. selector: @@ -54,7 +54,7 @@ blueprint: action: {} variables: condition: !input condition - switch: !input switch + doseSwitch: !input doseSwitch doseName: !input doseName doser_time: !input doser_time title: '{{ doseName }}' @@ -69,29 +69,33 @@ sequence: - condition: !input condition then: - choose: [] - default: !input additional_actions + default: !input additional_actions - if: - condition: template - value_template: '{{ notify }}' + value_template: '{{ this.state == ''off'' }}' then: - - service: notify.persistent_notification - data: - message: '{{ message }}' - title: '{{ title }}' - - service: switch.turn_on - data: {} - target: !input switch - - delay: !input doser_time - - service: switch.turn_off - data: {} - target: !input switch + - service: switch.turn_on + data: {} + target: !input doseSwitch + - if: + - condition: template + value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ message }}' + title: '{{ title }}' + - delay: !input doser_time + - service: switch.turn_off + data: {} + target: !input doseSwitch + else: + - service: switch.turn_off + data: {} + target: !input doseSwitch else: - - if: - - condition: template - value_template: '{{ notify }}' - then: - - service: notify.persistent_notification - data: - message: '{{ message_fail }}' - title: '{{ title_fail }}' + - service: notify.persistent_notification + data: + message: '{{ message_fail }}' + title: '{{ title_fail }}' mode: restart diff --git a/blueprints/script/TheRealFalseReality/aquarium_dosing_volume.yaml b/blueprints/script/TheRealFalseReality/aquarium_dosing_volume.yaml index 9b9c1e0..96be374 100644 --- a/blueprints/script/TheRealFalseReality/aquarium_dosing_volume.yaml +++ b/blueprints/script/TheRealFalseReality/aquarium_dosing_volume.yaml @@ -4,7 +4,7 @@ blueprint: time based on volume and given dose rate. [More Info](https://community.home-assistant.io/t/aquarium-turn-on-a-switch-to-activate-doser-equipment-for-a-certain-amount-of-volume-or-time/600546) (v1.32.2) [Script] domain: script - source_url: https://gist.github.com/TheRealFalseReality/be626c89dfe26fdf4c13b05498a5b8c6 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/aquarium_dosing_volume.yaml input: condition: name: Add Condition(s) @@ -90,33 +90,37 @@ sequence: - condition: !input condition then: - choose: [] - default: !input additional_actions - - service: switch.turn_on - data: {} - target: !input doseSwitch + default: !input additional_actions - if: - condition: template - value_template: '{{ notify }}' + value_template: '{{ this.state == ''off'' }}' then: - - service: notify.persistent_notification - data: - message: '{{ message }}' - title: '{{ title }}' - - delay: - hours: 0 - minutes: '{{ doseTime }}' - seconds: 0 - milliseconds: 0 - - service: switch.turn_off - data: {} - target: !input doseSwitch + - service: switch.turn_on + data: {} + target: !input doseSwitch + - if: + - condition: template + value_template: '{{ notify }}' + then: + - service: notify.persistent_notification + data: + message: '{{ message }}' + title: '{{ title }}' + - delay: + hours: 0 + minutes: '{{ doseTime }}' + seconds: 0 + milliseconds: 0 + - service: switch.turn_off + data: {} + target: !input doseSwitch + else: + - service: switch.turn_off + data: {} + target: !input doseSwitch else: - - if: - - condition: template - value_template: '{{ notify }}' - then: - - service: notify.persistent_notification - data: - message: '{{ message_fail }}' - title: '{{ title_fail }}' + - service: notify.persistent_notification + data: + message: '{{ message_fail }}' + title: '{{ title_fail }}' mode: restart diff --git a/blueprints/script/TheRealFalseReality/aquarium_feeding.yaml b/blueprints/script/TheRealFalseReality/aquarium_feeding.yaml index 47ffc40..b74ae16 100644 --- a/blueprints/script/TheRealFalseReality/aquarium_feeding.yaml +++ b/blueprints/script/TheRealFalseReality/aquarium_feeding.yaml @@ -4,7 +4,7 @@ blueprint: Info](https://community.home-assistant.io/t/aquarium-turn-off-switches-to-feed-your-fish-for-a-certain-amount-of-time-then-turn-back-on-script/600544/1) (1.2) [Script] domain: script - source_url: https://gist.github.com/TheRealFalseReality/06d34488d84e81916768129b0398de25 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/aquarium_feeding.yaml input: condition: name: Add Condition(s) diff --git a/blueprints/script/TheRealFalseReality/aquarium_lights.yaml b/blueprints/script/TheRealFalseReality/aquarium_lights.yaml index bb16ab7..f7a9d19 100644 --- a/blueprints/script/TheRealFalseReality/aquarium_lights.yaml +++ b/blueprints/script/TheRealFalseReality/aquarium_lights.yaml @@ -3,7 +3,7 @@ blueprint: description: Create a script to toggle all your Aquarium Lights all at once. (v1.1) [Script] domain: script - source_url: https://gist.github.com/TheRealFalseReality/046bbbbef7cee12740190945d5ed22b9 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/aquarium_lights.yaml input: condition: name: Add Condition(s) diff --git a/blueprints/script/TheRealFalseReality/ec_calibrate_aquapi.yaml b/blueprints/script/TheRealFalseReality/ec_calibrate_aquapi.yaml index 340b949..6aa9cd3 100644 --- a/blueprints/script/TheRealFalseReality/ec_calibrate_aquapi.yaml +++ b/blueprints/script/TheRealFalseReality/ec_calibrate_aquapi.yaml @@ -1,9 +1,9 @@ blueprint: - name: 'Aquarium - AquaPi: Calibrate Conductivity EZO Probe' + name: 'Aquarium - AquaPi: Calibrate Conductivity(EC) EZO Probe' description: Calibrate Conductivity(EC) probe for the AquaPi, an Atlas Scientific - EZO board and probe. (v1.1.1) [Script] + EZO board and probe, at Dry, Low (12.88 mS/cm) and High (80 mS/cm). (v1.1.2) [Script] domain: script - source_url: https://gist.github.com/TheRealFalseReality/f619b484d63a479004c1d6613b90df1a + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/ec_calibrate_aquapi.yaml input: ec_sensor: name: Conductivity Sensor @@ -43,93 +43,89 @@ blueprint: - button integration: esphome multiple: false - # condition: - # name: Add Condition(s) - # description: Add conditions if needed. - # default: [] - # selector: - # condition: {} - # additional_actions: - # name: Additional Action(s) - # description: Add additional actions to the script if wanted. Will execute before - # everything else. - # default: [] - # selector: - # action: {} variables: - # condition: !input condition - # additional_actions: !input additional_actions ec_sensor: !input ec_sensor ec_selector: !input ec_selector ec_command: !input ec_command sequence: -- if: - # - condition: !input condition - # then: - # - choose: [] - # default: !input additional_actions - - choose: - - conditions: - - condition: numeric_state - entity_id: !input ec_sensor - below: 5 - sequence: - - service: select.select_option - metadata: {} - data: - option: Calibrate @ DRY (WILL RESET CALIBRATION) - target: - entity_id: !input ec_selector - - service: notify.persistent_notification - data: - message: EC - Conductivity Calibrated for DRY/AIR - 0 mS/cm. Now continue to - LOW - 12.88 mS/cm. - title: 'EC Calibration: Air' - - conditions: - - condition: numeric_state - entity_id: !input ec_sensor - above: 10 - below: 15 - sequence: - - service: select.select_option - metadata: {} - data: - option: Calibrate @ LOW = 12880 (WILL RESET CALIBRATION) - target: - entity_id: !input ec_selector - - service: notify.persistent_notification - data: - message: EC - Conductivity Calibrated for LOW - 12.88 mS/cm. Now continue - to HIGH - 80 mS/cm. - title: 'EC Calibration: Low' - - conditions: - - condition: numeric_state - entity_id: !input ec_sensor - above: 78 - below: 82 - sequence: - - service: select.select_option - metadata: {} - data: - option: Calibrate @ HIGH = 80000 (WILL RESET CALIBRATION) - target: - entity_id: !input ec_selector - - service: notify.persistent_notification - data: - message: EC - Conductivity Calibrated for HIGH - 80 mS/cm. Now check calibration. - title: 'EC Calibration: High' - default: +- choose: + - conditions: + - condition: numeric_state + entity_id: !input ec_sensor + below: 5 + sequence: - service: select.select_option metadata: {} data: - option: Check Calibration + option: Calibrate @ DRY (WILL RESET CALIBRATION) target: entity_id: !input ec_selector + - delay: + milliseconds: 500 + - service: button.press + entity_id: !input ec_command - service: notify.persistent_notification data: - message: 'EC - Conductivity Calibration is not within range of AIR: 0 mS/cm, - LOW: 12.88 mS/cm or HIGH: 80 mS/cm. + message: EC - Conductivity Calibrated for DRY/AIR - 0 mS/cm. Now continue to + LOW - 12.88 mS/cm. + title: 'EC Calibration: Dry' + - conditions: + - condition: numeric_state + entity_id: !input ec_sensor + above: 10 + below: 15 + sequence: + - service: select.select_option + metadata: {} + data: + option: Calibrate @ LOW = 12880 (WILL RESET CALIBRATION) + target: + entity_id: !input ec_selector + - delay: + milliseconds: 500 + - service: button.press + entity_id: !input ec_command + - service: notify.persistent_notification + data: + message: EC - Conductivity Calibrated for LOW - 12.88 mS/cm. Now continue + to HIGH - 80 mS/cm. + title: 'EC Calibration: Low' + - conditions: + - condition: numeric_state + entity_id: !input ec_sensor + above: 78 + below: 82 + sequence: + - service: select.select_option + metadata: {} + data: + option: Calibrate @ HIGH = 80000 (WILL RESET CALIBRATION) + target: + entity_id: !input ec_selector + - delay: + milliseconds: 500 + - service: button.press + entity_id: !input ec_command + - service: notify.persistent_notification + data: + message: EC - Conductivity Calibrated for HIGH - 80 mS/cm. Now check calibration. + title: 'EC Calibration: High' + default: + - service: select.select_option + metadata: {} + data: + option: Check Calibration + target: + entity_id: !input ec_selector + - delay: + milliseconds: 500 + - service: button.press + entity_id: !input ec_command + - service: notify.persistent_notification + data: + message: 'EC - Conductivity Calibration is not within range of AIR: 0 mS/cm, + LOW: 12.88 mS/cm or HIGH: 80 mS/cm. (±2 mS/CM) - Start with in-air, no solution, then Low, and finish with High.' - title: 'EC Calibration: Not in Range' + Start with in-air, no solution, then Low, and finish with High.' + title: 'EC Calibration: Not in Range' mode: restart diff --git a/blueprints/script/TheRealFalseReality/ec_continuous_read.yaml.old b/blueprints/script/TheRealFalseReality/ec_continuous_read.yaml.old deleted file mode 100644 index 729326c..0000000 --- a/blueprints/script/TheRealFalseReality/ec_continuous_read.yaml.old +++ /dev/null @@ -1,36 +0,0 @@ -blueprint: - name: 'Aquarium - AquaPi: Continuous Conductivity(EC) Read' - description: Read Conductivity(EC) probe every second for 60 seconds. [More Info] - (v1) [Script] - domain: script - source_url: https://gist.github.com/TheRealFalseReality/94fe6dbd41f7520fa69a955abcea4c9d - input: - ec_sensor: - name: Conductivity(EC) Sensor - description: 'Conductivity(EC) button to use. - - *DEVICENAME EC - Read**' - selector: - entity: - filter: - - domain: - - button - integration: esphome - multiple: false -variables: - ec_sensor: !input ec_sensor -sequence: -- repeat: - sequence: - - service: button.press - metadata: {} - data: {} - target: - entity_id: !input ec_sensor - - delay: - hours: 0 - minutes: 0 - seconds: 1 - milliseconds: 0 - count: 60 -mode: restart diff --git a/blueprints/script/TheRealFalseReality/notify_device.yaml b/blueprints/script/TheRealFalseReality/notify_device.yaml index b29110f..0ed25ca 100644 --- a/blueprints/script/TheRealFalseReality/notify_device.yaml +++ b/blueprints/script/TheRealFalseReality/notify_device.yaml @@ -2,7 +2,7 @@ blueprint: name: Notify - Mobile Device description: Send notification to mobile device. (v1) [Script] domain: script - source_url: https://gist.github.com/TheRealFalseReality/34b7108f7a1c4ab32eba123894c7358e + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/notify_device.yaml input: condition: name: Add Condition(s) diff --git a/blueprints/script/TheRealFalseReality/orp_calibrate_aquapi.yaml b/blueprints/script/TheRealFalseReality/orp_calibrate_aquapi.yaml index b926bc8..3a8c3ed 100644 --- a/blueprints/script/TheRealFalseReality/orp_calibrate_aquapi.yaml +++ b/blueprints/script/TheRealFalseReality/orp_calibrate_aquapi.yaml @@ -1,9 +1,9 @@ blueprint: name: 'Aquarium - AquaPi: Calibrate ORP EZO Probe' - description: Calibrate ORP probe for the AquaPi, an Atlas Scientific - EZO board and probe. (v1.1) [Script] + description: Calibrate ORP probe for the AquaPi, an Atlas Scientific EZO board and + probe, at 225 mV. (v1.2.2) [Script] domain: script - source_url: https://gist.github.com/TheRealFalseReality/f619b484d63a479004c1d6613b90df1a + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/orp_calibrate_aquapi.yaml input: orp_sensor: name: ORP Sensor @@ -48,32 +48,40 @@ variables: orp_selector: !input orp_selector orp_command: !input orp_command sequence: - - choose: - - conditions: - - condition: numeric_state - entity_id: !input orp_sensor - above: 220 - below: 230 - sequence: - - service: select.select_option - metadata: {} - data: - option: Calibrate @ 225 mV (WILL RESET CALIBRATION) - target: - entity_id: !input orp_selector - - service: notify.persistent_notification - data: - message: ORP - ORP Calibrated for 225 mV - title: 'ORP Calibration: 225 mV' - default: +- choose: + - conditions: + - condition: numeric_state + entity_id: !input orp_sensor + above: 210 + below: 230 + sequence: - service: select.select_option metadata: {} data: - option: Check Calibration + option: Calibrate @ 225 mV (WILL RESET CALIBRATION) target: entity_id: !input orp_selector + - delay: + milliseconds: 500 + - service: button.press + entity_id: !input orp_command - service: notify.persistent_notification data: - message: 'ORP - ORP Calibration is not within range of 225 +/- 5 mV' - title: 'ORP Calibration: Not in Range' + message: ORP - ORP Calibrated for 225 mV + title: 'ORP Calibration: 225 mV' + default: + - service: select.select_option + metadata: {} + data: + option: Check Calibration + target: + entity_id: !input orp_selector + - delay: + milliseconds: 500 + - service: button.press + entity_id: !input orp_command + - service: notify.persistent_notification + data: + message: ORP - ORP Calibration is not within range of 225 mV (210 - 230 mV) + title: 'ORP Calibration: Not in Range' mode: restart diff --git a/blueprints/script/TheRealFalseReality/ph_calibrate_aquapi.yaml b/blueprints/script/TheRealFalseReality/ph_calibrate_aquapi.yaml index 2932c6e..272898d 100644 --- a/blueprints/script/TheRealFalseReality/ph_calibrate_aquapi.yaml +++ b/blueprints/script/TheRealFalseReality/ph_calibrate_aquapi.yaml @@ -1,9 +1,9 @@ blueprint: name: 'Aquarium - AquaPi: Calibrate pH EZO Probe' description: Calibrate pH probe for the AquaPi, an Atlas Scientific EZO board and - probe. Calibrate at Mid 7, Low 4 and High 10. [More Info] (v1.1.3) [Script] + probe. Calibrate at Mid 7, Low 4 and High 10. [More Info] (v1.1.5) [Script] domain: script - source_url: https://gist.github.com/TheRealFalseReality/f965fe88fd8b379fc37142f9376b84e6 + source_url: https://github.com/TheRealFalseReality/aquapi/blob/main/blueprints/script/TheRealFalseReality/ph_calibrate_aquapi.yaml input: ph_sensor: name: pH Sensor @@ -60,6 +60,10 @@ sequence: option: Calibrate @ LOW = 4 (WILL RESET CALIBRATION) target: entity_id: !input ph_selector + - delay: + milliseconds: 500 + - service: button.press + entity_id: !input ph_command - service: notify.persistent_notification data: message: 'pH Calibrated for LOW - pH: 4. Now continue to MID - pH: 10.' @@ -76,6 +80,10 @@ sequence: option: Calibrate @ MID = 7 (WILL RESET CALIBRATION) target: entity_id: !input ph_selector + - delay: + milliseconds: 500 + - service: button.press + entity_id: !input ph_command - service: notify.persistent_notification data: message: 'pH Calibrated for MID - pH: 7. Now continue to LOW - pH: 4.' @@ -92,6 +100,10 @@ sequence: option: Calibrate @ HIGH = 10 (WILL RESET CALIBRATION) target: entity_id: !input ph_selector + - delay: + milliseconds: 500 + - service: button.press + entity_id: !input ph_command - service: notify.persistent_notification data: message: 'pH Calibrated for HIGH - pH: 10. Now check calibration.' @@ -103,9 +115,13 @@ sequence: option: Check Calibration target: entity_id: !input ph_selector + - delay: + milliseconds: 500 + - service: button.press + entity_id: !input ph_command - service: notify.persistent_notification data: - message: 'pH Calibration is not within range of LOW: 4, MID: 7 or HIGH: 10. + message: 'pH Calibration is not within range of LOW: 4, MID: 7 or HIGH: 10. (±0.1) Start with Low solution, then Mid, and finish with High.' title: 'Calibration: Not in Range' diff --git a/blueprints/script/TheRealFalseReality/ph_continuous_read.yaml.old b/blueprints/script/TheRealFalseReality/ph_continuous_read.yaml.old deleted file mode 100644 index 94fb9fe..0000000 --- a/blueprints/script/TheRealFalseReality/ph_continuous_read.yaml.old +++ /dev/null @@ -1,35 +0,0 @@ -blueprint: - name: 'Aquarium - AquaPi: Continuous pH Read' - description: Read pH probe every second for 60 seconds. [More Info] (v1) [Script] - domain: script - source_url: https://gist.github.com/TheRealFalseReality/bf955d41f3783f3c711fd65286b76eca - input: - ph_sensor: - name: pH Sensor - description: 'pH button to use. - - *DEVICENAME pH - Read**' - selector: - entity: - filter: - - domain: - - button - integration: esphome - multiple: false -variables: - ph_sensor: !input ph_sensor -sequence: -- repeat: - sequence: - - service: button.press - metadata: {} - data: {} - target: - entity_id: !input ph_sensor - - delay: - hours: 0 - minutes: 0 - seconds: 1 - milliseconds: 0 - count: 60 -mode: restart diff --git a/common/binary_input.yaml b/common/binary_input.yaml new file mode 100644 index 0000000..2e211be --- /dev/null +++ b/common/binary_input.yaml @@ -0,0 +1,26 @@ +substitutions: + binarypin1: "34" + binarypin2: "35" + +binary_sensor: + - platform: gpio + id: binary_pin_1 + name: Binary Sensor 1 + pin: + number: ${binarypin1} + inverted: true + mode: + input: true + filters: + - delayed_on_off: 30ms + + - platform: gpio + id: binary_pin_2 + name: Binary Sensor 2 + pin: + number: ${binarypin2} + inverted: true + mode: + input: true + filters: + - delayed_on_off: 30ms \ No newline at end of file diff --git a/common/device_base.yaml b/common/device_base.yaml index 8b4f40d..f173b29 100644 --- a/common/device_base.yaml +++ b/common/device_base.yaml @@ -5,8 +5,8 @@ substitutions: logger: "DEBUG" # I2C pins - sdaPin: "21" # yellow - sclPin: "22" # blue + sdaPin: "21" # yellow/TX + sclPin: "22" # blue/RX esphome: name: "${name}" @@ -37,7 +37,7 @@ ota: wifi: ap: - + web_server: version: 3 diff --git a/common/device_base_camera.yaml b/common/device_base_camera.yaml index 71c8bcc..ff0d656 100644 --- a/common/device_base_camera.yaml +++ b/common/device_base_camera.yaml @@ -16,15 +16,15 @@ esphome: on_boot: then: - light.turn_on: camera_led - - delay: 150ms + - delay: 500ms - light.turn_off: camera_led - - delay: 150ms + - delay: 500ms - light.turn_on: camera_led - - delay: 150ms + - delay: 500ms - light.turn_off: camera_led esp32: - board: esp32dev + board: esp32cam framework: type: arduino @@ -46,6 +46,7 @@ wifi: captive_portal: web_server: + version: 3 improv_serial: @@ -164,4 +165,4 @@ button: # - platform: shutdown # name: "Shutdown" # disabled_by_default: true - # id: shutdown_button \ No newline at end of file + # id: shutdown_button diff --git a/common/ezo_co2.yaml b/common/ezo_co2.yaml index eb5ed84..9dd4d01 100644 --- a/common/ezo_co2.yaml +++ b/common/ezo_co2.yaml @@ -18,7 +18,7 @@ interval: - button.press: read_co2 sensor: - # EZO Circuits (yellow - SCL/RX, blue - SDA/TX) + # EZO Circuits (SCL/RX, SDA/TX) # EZO Circuit - CO2 # Cardbon Dioxide - platform: ezo diff --git a/common/ezo_commands.yaml b/common/ezo_commands.yaml index 8df7c06..4392315 100644 --- a/common/ezo_commands.yaml +++ b/common/ezo_commands.yaml @@ -1,9 +1,9 @@ substitutions: - # PMP circuit, who's address is 103 - addPMP_default: "103" - addPMP_alt1: "108" - addPMP_alt2: "109" - addPMP_alt3: "110" + # PMP circuit, who's default address is 103 + addPMP_default: "103" #Blue + addPMP_alt1: "108" # Waste/Red + addPMP_alt2: "109" # Clean/Green + addPMP_alt3: "110" #Orange button: # Change I2C Address of EZO-PMP diff --git a/common/ezo_do.yaml b/common/ezo_do.yaml index 28a7c50..5f03aa7 100644 --- a/common/ezo_do.yaml +++ b/common/ezo_do.yaml @@ -10,7 +10,7 @@ substitutions: # - button.press: send_selected_ph sensor: - # EZO Circuits (yellow - SCL/RX, blue - SDA/TX) + # EZO Circuits (SCL/RX, SDA/TX) # EZO Circuit - DO # Dissolved Oxygen - platform: ezo diff --git a/common/ezo_ec.yaml b/common/ezo_ec.yaml index c6e4df5..dde6f07 100644 --- a/common/ezo_ec.yaml +++ b/common/ezo_ec.yaml @@ -8,37 +8,37 @@ api: services: - service: ec_read_continous variables: - time: int + seconds: int then: - repeat: - count: !lambda return time; + count: !lambda return seconds; then: - button.press: read_ec - delay: 1s - service: ec_calibrate_dry then: - lambda: |- - id(ec_ezo).send_custom(Cal,dry); + id(ec_ezo).send_custom("Cal,dry"); - service: ec_calibrate_low then: - lambda: |- - id(ec_ezo).send_custom(Cal,low,12880); + id(ec_ezo).send_custom("Cal,low,12880"); - service: ec_calibrate_high then: - lambda: |- - id(ec_ezo).send_custom(Cal,high,80000); - - service: ec_calibrate_custom - variables: - value: int - then: - - lambda: |- - id(ec_ezo).send_custom(Cal,'{{ value }}'); - - service: ezo_ec_custom_command - variables: - command: string - then: - - lambda: |- - id(ec_ezo).send_custom(command); + id(ec_ezo).send_custom("Cal,high,80000"); + # - service: ec_calibrate_custom + # variables: + # value: int + # then: + # - lambda: |- + # id(ec_ezo).send_custom(Cal,value); + # - service: ezo_ec_custom_command + # variables: + # command: string + # then: + # - lambda: |- + # id(ec_ezo).send_custom('{{ command }}'); esphome: on_boot: @@ -54,7 +54,7 @@ interval: - button.press: read_ec sensor: - # EZO Circuits (yellow - SCL/RX, blue - SDA/TX) + # EZO Circuits (SCL/RX, SDA/TX) # EZO Circuit - EC # Conductivity - platform: ezo @@ -308,20 +308,20 @@ button: id(ec_ezo).get_calibration(); } if (id(select_command_ec).state == "Calibrate @ DRY (WILL RESET CALIBRATION)") { - id(ec_ezo).send_custom(Cal,dry); + id(ec_ezo).send_custom("Cal,dry"); } if (id(select_command_ec).state == "Calibrate @ LOW = 12880 (WILL RESET CALIBRATION)") { - id(ec_ezo).send_custom(Cal,low,12880); + id(ec_ezo).send_custom("Cal,low,12880"); } if (id(select_command_ec).state == "Calibrate @ HIGH = 80000 (WILL RESET CALIBRATION)") { - id(ec_ezo).send_custom(Cal,high,80000); + id(ec_ezo).send_custom("Cal,high,80000"); } if (id(select_command_ec).state == "Calibrate CLEAR (WILL RESET CALIBRATION)") { id(ec_ezo).clear_calibration(); } - else { - id(ec_ezo).send_custom("R"); - } + // else { + // id(ec_ezo).send_custom("R"); + // } select: - platform: template diff --git a/common/ezo_hum.yaml b/common/ezo_hum.yaml index cad9b63..21c9fdc 100644 --- a/common/ezo_hum.yaml +++ b/common/ezo_hum.yaml @@ -18,7 +18,7 @@ interval: - button.press: read_hum sensor: - # EZO Circuits (yellow - SCL/RX, blue - SDA/TX) + # EZO Circuits (SCL/RX, SDA/TX) # EZO Circuit - HUM # Humidity - platform: ezo diff --git a/common/ezo_orp.yaml b/common/ezo_orp.yaml index 6f8ab3d..b1127a9 100644 --- a/common/ezo_orp.yaml +++ b/common/ezo_orp.yaml @@ -1,5 +1,5 @@ substitutions: - # ORP circuit, who's address is 99 + # ORP circuit, who's address is 98 addORP: "98" update_orp: "60s" @@ -7,29 +7,29 @@ api: services: - service: orp_read_continous variables: - time: int + seconds: int then: - repeat: - count: !lambda return time; + count: !lambda return seconds; then: - button.press: read_orp - delay: 1s - service: orp_calibrate_225 then: - lambda: |- - id(orp_ezo).send_custom(Cal,225); - - service: orp_calibrate_custom - variables: - value: int - then: - - lambda: |- - id(orp_ezo).send_custom(Cal,'{{ value }}'); - - service: ezo_orp_custom_command - variables: - command: string - then: - - lambda: |- - id(orp_ezo).send_custom(command); + id(orp_ezo).send_custom("Cal,225"); + # - service: orp_calibrate_custom + # variables: + # value: int + # then: + # - lambda: |- + # id(orp_ezo).send_custom(Cal,value); + # - service: ezo_orp_custom_command + # variables: + # command: string + # then: + # - lambda: |- + # id(orp_ezo).send_custom(command); esphome: on_boot: @@ -38,7 +38,7 @@ esphome: - button.press: send_selected_orp sensor: - # EZO Circuits (yellow - SCL/RX, blue - SDA/TX) + # EZO Circuits (SCL/RX, SDA/TX) # EZO Circuit - ORP - platform: ezo icon: mdi:react @@ -46,7 +46,7 @@ sensor: id: orp_ezo address: ${addORP} unit_of_measurement: mV - accuracy_decimals: 2 + accuracy_decimals: 1 update_interval: "${update_orp}" state_class: "measurement" device_class: voltage @@ -123,14 +123,14 @@ button: id(orp_ezo).get_calibration(); } if (id(select_command_orp).state == "Calibrate @ 225 mV (WILL RESET CALIBRATION)") { - id(orp_ezo).send_custom(Cal,225); + id(orp_ezo).send_custom("Cal,225"); } if (id(select_command_orp).state == "Calibrate CLEAR (WILL RESET CALIBRATION)") { id(orp_ezo).clear_calibration(); } - else { - id(orp_ezo).send_custom("R"); - } + // else { + // id(orp_ezo).send_custom("R"); + // } select: @@ -151,4 +151,4 @@ select: set_action: - logger.log: format: "Chosen option: %s" - args: ["x.c_str()"] \ No newline at end of file + args: ["x.c_str()"] diff --git a/common/ezo_ph.yaml b/common/ezo_ph.yaml index 34e34d4..8de8be4 100644 --- a/common/ezo_ph.yaml +++ b/common/ezo_ph.yaml @@ -7,31 +7,31 @@ api: services: - service: ph_read_continous variables: - time: int + seconds: int then: - repeat: - count: !lambda return time; + count: !lambda return seconds; then: - button.press: read_ph - delay: 1s - - service: ph_calibrate_mid + - service: ph_calibrate_mid_7 then: - lambda: |- id(ph_ezo).set_calibration_point_mid(7.00); - - service: ph_calibrate_low + - service: ph_calibrate_low_4 then: - lambda: |- id(ph_ezo).set_calibration_point_low(4.00); - - service: ph_calibrate_high + - service: ph_calibrate_high_10 then: - lambda: |- id(ph_ezo).set_calibration_point_high(10.00); - - service: ezo_ph_custom_command - variables: - command: string - then: - - lambda: |- - id(ph_ezo).send_custom(command); + # - service: ezo_ph_custom_command + # variables: + # command: string + # then: + # - lambda: |- + # id(ph_ezo).send_custom('{{ command }}'); esphome: on_boot: @@ -40,7 +40,7 @@ esphome: - button.press: send_selected_ph sensor: - # EZO Circuits (yellow - SCL/RX, blue - SDA/TX) + # EZO Circuits (SCL/RX, SDA/TX) # EZO Circuit - pH - platform: ezo icon: mdi:ph @@ -139,9 +139,9 @@ button: if (id(select_command_ph).state == "Calibrate CLEAR (WILL RESET CALIBRATION)") { id(ph_ezo).clear_calibration(); } - else { - id(ph_ezo).send_custom("R"); - } + // else { + // id(ph_ezo).send_custom("R"); + // } select: