From 2b1a87bc71c1182eb4abd28bc8f64245706f9f38 Mon Sep 17 00:00:00 2001 From: 31c0fe9c6dbd74bcdde92e1d2aaa03e1d272f75f Date: Tue, 19 Jul 2022 18:53:10 +1000 Subject: [PATCH] Home Assistant Git Exporter --- config/.HA_VERSION | 2 +- config/automations.yaml | 1 + config/configuration.yaml | 10 +- config/packages/debug.yaml | 44 +- config/packages/electricity.yaml | 8 - config/packages/energy.yaml | 342 ++++++++ config/packages/media_centre.yaml | 34 +- config/packages/media_server.yaml | 2 +- config/packages/network.yaml | 23 + config/packages/sungrow.yaml | 1105 +++++++++++++++++++++++++ config/packages/vacuum.yaml | 23 +- config/solcast.json | 1 + lovelace/lovelace.bos_office.yaml | 41 +- lovelace/lovelace.lovelace_solar.yaml | 376 +++++++++ lovelace/lovelace.yaml | 395 ++++----- lovelace/lovelace_dashboards.yaml | 7 + lovelace/lovelace_resources.yaml | 11 +- 17 files changed, 2123 insertions(+), 302 deletions(-) delete mode 100644 config/packages/electricity.yaml create mode 100644 config/packages/energy.yaml create mode 100644 config/packages/network.yaml create mode 100644 config/packages/sungrow.yaml create mode 100644 config/solcast.json create mode 100644 lovelace/lovelace.lovelace_solar.yaml diff --git a/config/.HA_VERSION b/config/.HA_VERSION index 87b76e6..22c18a9 100644 --- a/config/.HA_VERSION +++ b/config/.HA_VERSION @@ -1 +1 @@ -2022.6.2 \ No newline at end of file +2022.7.5 \ No newline at end of file diff --git a/config/automations.yaml b/config/automations.yaml index 465eaec..a99222d 100644 --- a/config/automations.yaml +++ b/config/automations.yaml @@ -53,6 +53,7 @@ data: {} target: area_id: ri_s_office + controller_device: a68268df00fb475e9dbffc45c6de8a6f - id: '1650766227595' alias: Update OpenUV every 30 minutes during the daytime trigger: diff --git a/config/configuration.yaml b/config/configuration.yaml index c5a6a6a..6a7581a 100644 --- a/config/configuration.yaml +++ b/config/configuration.yaml @@ -17,6 +17,7 @@ homeassistant: recorder: db_url: !secret recorder_db commit_interval: 30 + purge_keep_days: 60 http: use_x_forwarded_for: true @@ -42,12 +43,3 @@ tts: automation: !include automations.yaml script: !include scripts.yaml scene: !include scenes.yaml - -spotify: - client_id: !secret spotify_client_id - client_secret: !secret spotify_client_secret - -google: - client_id: !secret google_client_id - client_secret: !secret google_client_secret - track_new_calendar: false diff --git a/config/packages/debug.yaml b/config/packages/debug.yaml index 09c8797..a018f7e 100644 --- a/config/packages/debug.yaml +++ b/config/packages/debug.yaml @@ -1,27 +1,27 @@ sensor: - - platform: sql - db_url: !secret recorder_db - queries: - - name: Recorder age - column: "last_state_age" - unit_of_measurement: seconds - ## For SQLite - #query: > - # SELECT strftime("%s", "now") - strftime("%s", last_updated) - # AS last_state_age - # , last_updated - # FROM "states" - # ORDER BY last_updated DESC - # LIMIT 1 + # - platform: sql + # db_url: !secret recorder_db + # queries: + # - name: Recorder age + # column: "last_state_age" + # unit_of_measurement: seconds + # ## For SQLite + # #query: > + # # SELECT strftime("%s", "now") - strftime("%s", last_updated) + # # AS last_state_age + # # , last_updated + # # FROM "states" + # # ORDER BY last_updated DESC + # # LIMIT 1 - # For Postgres - query: > - SELECT extract(epoch from now() - last_updated) - AS last_state_age - , last_updated - FROM "states" - ORDER BY last_updated DESC - LIMIT 1 + # # For Postgres + # query: > + # SELECT extract(epoch from now() - last_updated) + # AS last_state_age + # , last_updated + # FROM "states" + # ORDER BY last_updated DESC + # LIMIT 1 - platform: systemmonitor resources: - type: disk_use_percent diff --git a/config/packages/electricity.yaml b/config/packages/electricity.yaml deleted file mode 100644 index 426bfc8..0000000 --- a/config/packages/electricity.yaml +++ /dev/null @@ -1,8 +0,0 @@ -template: - - sensor: - - unique_id: current_electricity_cost - state: | - {{ (states('sensor.electricity_general_price') | float * states('sensor.eagle_200_meter_power_demand') | float) | round(2) }} - unit_of_measurement: $/hr - device_class: monetary - name: Current electricity cost diff --git a/config/packages/energy.yaml b/config/packages/energy.yaml new file mode 100644 index 0000000..40ddbbd --- /dev/null +++ b/config/packages/energy.yaml @@ -0,0 +1,342 @@ +# See also sungrow.yaml + +sensor: + - platform: template + sensors: + eagle_200_meter_power_demand_w: + unique_id: 528a94ffdd069f6f5dcd + friendly_name: Eagle-200 Meter Power Demand (W) + value_template: >- + {{ states('sensor.eagle_200_meter_power_demand') | float * 1000 }} + unit_of_measurement: W + device_class: power + + inverter_grid_power_demand: + unique_id: 733c721fd52bf672d0ed + friendly_name: Inverter grid power demand + value_template: >- + {{ iif(states('sensor.inverter_export_power') | float == 0, 0, -1 * states('sensor.inverter_export_power') | float) }} + unit_of_measurement: W + device_class: power + + household_power_demand: + unique_id: c596e6b17b53069d1e9f + friendly_name: Household power demand + unit_of_measurement: W + device_class: power + value_template: >- + {{ states('sensor.inverter_active_power') | float + + states('sensor.eagle_200_meter_power_demand_w') | float }} + + inverter_load_gap: + unique_id: c6a037b515944aeb1b67 + friendly_name: Inverter load gap + value_template: >- + {{ states('sensor.inverter_load_power') | float - ( + states('sensor.inverter_active_power') | float + + states('sensor.eagle_200_meter_power_demand_w') | float + ) }} + unit_of_measurement: W + device_class: power + + inverter_demand_gap: + unique_id: 534503cd38944c345a6a + friendly_name: Inverter demand gap + value_template: >- + {{ (states('sensor.eagle_200_meter_power_demand_w') | float) - + (-1 * states('sensor.inverter_export_power') | float) }} + unit_of_measurement: W + device_class: power + + current_electricity_cost: + unique_id: current_electricity_cost + value_template: | + {{ (states('sensor.electricity_general_price') | float * states('sensor.eagle_200_meter_power_demand') | float) | round(2) }} + unit_of_measurement: $/hr + device_class: monetary + friendly_name: Current electricity cost +# +# +# +# SunGather (used internally by ModbusTCP2MQTT add-on) produces this payload, but doesn't create sensors for everything I want to monitor: +# { +# "device_type_code": "SH5.0RS", +# "run_state": "OFF", +# "protocol_number": 1094856704, +# "protocol_version": 16781568, +# "arm_software_version": 16722, +# "dsp_software_version": 19780, +# "serial_number": 16690, +# "nominal_active_power": 5.0, +# "output_type": "2P", +# "daily_power_yields": 6.1, +# "total_power_yields": 0.0, +# "total_running_time": 0, +# "internal_temperature": 22.6, +# "total_apparent_power": 1234, +# "mppt_1_voltage": 433.4, +# "mppt_1_current": 1.2, +# "mppt_2_voltage": 213.8, +# "mppt_2_current": 0.7, +# "mppt_3_voltage": 0.0, +# "mppt_3_current": 0.0, +# "total_dc_power": 711, +# "phase_a_voltage": 243.7, +# "phase_b_voltage": 0.0, +# "phase_c_voltage": 0.0, +# "phase_a_current": 5.3, +# "phase_b_current": 0.0, +# "phase_c_current": 0.0, +# "total_active_power": 1084, +# "total_reactive_power": 509, +# "power_factor": 0.91, +# "grid_frequency": 49.97, +# "work_state_1": 0, +# "nominal_reactive_power": 3.0, +# "array_insulation_resistance": 1124, +# "active_power_regulation_setpoint": 0, +# "reactive_power_regulation_setpoint": 0, +# "work_state_2": 0, +# "meter_power": 0, +# "meter_a_phase_power": 0, +# "meter_b_phase_power": 80936959, +# "meter_c_phase_power": -65536, +# "load_power": 1084, +# "daily_export_energy": 0.1, +# "total_export_energy": 2.6, +# "daily_import_energy": 0.0, +# "total_import_energy": 192.3, +# "daily_direct_energy_consumption": 0.3, +# "total_direct_energy_consumption": 12.3, +# "daily_running_time": 0, +# "mppt_4_voltage": 0.0, +# "mppt_4_current": 0.0, +# "mppt_5_voltage": 0.0, +# "mppt_5_current": 0.0, +# "mppt_6_voltage": 0.0, +# "mppt_6_current": 0.0, +# "mppt_7_voltage": 0.0, +# "mppt_7_current": 0.0, +# "mppt_8_voltage": 0.0, +# "mppt_8_current": 0.0, +# "monthly_power_yields": 0.0, +# "mppt_9_voltage": 0.0, +# "mppt_9_current": 0.0, +# "mppt_10_voltage": 0.0, +# "mppt_10_current": 0.0, +# "mppt_11_voltage": 0.0, +# "mppt_11_current": 0.0, +# "mppt_12_voltage": 0.0, +# "mppt_12_current": 0.0, +# "negative_voltage_to_the_ground": 0.0, +# "bus_voltage": 458.0, +# "pid_work_state": 0, +# "pid_alarm_code": 0, +# "export_power": -7, +# "power_meter": 1090, +# "pv_power_of_today": 0, +# "daily_pv_energy_yields": 0.0, +# "monthly_pv_energy_yields": 0, +# "yearly_pv_energy_yields": 0.0, +# "direct_power_consumption_today_pv": 0, +# "direct_power_consumption_pv": 0.0, +# "direct_power_consumption_monthly_pv": 0.0, +# "direct_power_consumption_yearly_pv": 0.0, +# "export_power_from_pv_today": 0, +# "export_power_from_pv": 0.0, +# "export_power_from_pv_monthly": 0.0, +# "export_power_from_pv_yearly": 0.0, +# "battery_charge_power_from_pv_today": 0.0, +# "battery_charge_power_from_pv": 0.0, +# "battery_charge_power_from_pv_monthly": 0.0, +# "battery_charge_power_from_pv_yearly": 0.0, +# "string_1_current": 0.0, +# "string_2_current": 0.0, +# "string_3_current": 0.0, +# "string_4_current": 0.0, +# "string_5_current": 0.0, +# "string_6_current": 0.0, +# "string_7_current": 0.0, +# "string_8_current": 0.0, +# "string_9_current": 0.0, +# "string_10_current": 0.0, +# "string_11_current": 0.0, +# "string_12_current": 0.0, +# "string_13_current": 0.0, +# "string_14_current": 0.0, +# "string_15_current": 0.0, +# "string_16_current": 0.0, +# "string_17_current": 0.0, +# "string_18_current": 0.0, +# "string_19_current": 0.0, +# "string_20_current": 0.0, +# "string_21_current": 0.0, +# "string_22_current": 0.0, +# "string_23_current": 0.0, +# "string_24_current": 0.0, +# "system_state": 0, +# "running_state": 45, +# "daily_pv_generation": 0.3, +# "total_pv_generation": 38.5, +# "daily_pv_export": 0.0, +# "total_pv_export": 2.5, +# "load_power_hybrid": 1094, +# "export_power_hybrid": -10, +# "daily_battery_charge_from_pv": 0.0, +# "total_battery_charge_from_pv": 23.7, +# "co2_reduction": 26.9, +# "battery_voltage": 0.0, +# "battery_current": 0, +# "battery_power": 465, +# "battery_level": 5.8, +# "battery_state_of_healthy": 10.0, +# "battery_temperature": 10.8, +# "daily_battery_discharge_energy": 5.7, +# "total_battery_discharge_energy": 11.2, +# "self_consumption_of_day": 100.0, +# "grid_state": 0, +# "battery_capacity": 12.8, +# "daily_charge_energy": 0.0, +# "total_charge_energy": 10.3, +# "drm_state": 255, +# "inverter_alarm": 0.0, +# "grid-side_fault": 0.0, +# "system_fault1": 0.0, +# "system_fault2": 0.0, +# "dc-side_fault": 0.0, +# "permanent_fault": 0.0, +# "bdc-side_fault": 0.0, +# "bdc-side_permanent_fault": 0.0, +# "battery_fault": 0.0, +# "battery_alarm": 0.0, +# "bms_alarm": 0, +# "bms_protection": 0, +# "bms_fault1": 0, +# "bms_fault2": 0, +# "bms_alarm2": 0, +# "bms_status": 0, +# "max_charging_current": 0, +# "max_discharging_current": 0, +# "warning": 0, +# "protection": 0, +# "fault1": 0, +# "fault2": 0, +# "soc": 0, +# "soh": 0, +# "cycle_count": 0.0, +# "average_cell_voltage": 0, +# "max_cell_voltage": 0, +# "min_cell_voltage": 0, +# "battery_pack_voltage": 0, +# "average_cell_temp": 0, +# "max_cell_temp": 0, +# "min_cell_temp": 0, +# "start_stop": "Start", +# "power_limitation_switch": "Enable", +# "power_limitation_setting": 100.0, +# "export_power_limitation": 0, +# "export_power_limitation_value": 0, +# "current_transformer_output_current": 0, +# "current_transformer_range": 0, +# "current_transformer": 0, +# "export_power_limitation_percentage": 0.0, +# "installed_pv_power": 0.0, +# "power_factor_setting": 0.0, +# "night_svg_switch": 0, +# "reactive_power_adjustment_mode": "Enable Q(U)", +# "reactive_power_percentage_setting": 0.0, +# "power_limitation_adjustment": 0.0, +# "reactive_power_adjustment": 0.0, +# "pid_recovery": 0, +# "anti_pid": 0, +# "fullday_pid_suppression": 0, +# "export_to_grid": 0, +# "import_from_grid": 0, +# "timestamp": "2022-7-8 8:59:15" +# } +# mqtt: +# # https://github.com/bohdan-s/SunGather/blob/main/SunGather/registers-sungrow.yaml +# sensor: +# - &inverter_sensor +# state_topic: "inverter/SH50RS/registers" +# json_attributes_topic: "inverter/SH50RS/registers" +# unique_id: inverter_battery_level +# object_id: inverter_battery_level +# name: "Inverter battery level" +# value_template: "{{ value_json.battery_level }}" +# device_class: battery +# unit_of_measurement: "%" +# device: &inverter_device +# name: Solar Inverter +# manufacturer: Sungrow +# model: SH5.0RS +# via_device: 07bec9a1e7f11660c94ac9b707f6ea66 +# connections: +# - - address +# - !secret solar_inverter_ip +# - <<: *inverter_sensor +# unique_id: inverter_battery_power +# object_id: inverter_battery_power +# name: Inverter battery power +# value_template: "{{ value_json.battery_power }}" +# device_class: power +# unit_of_measurement: W +# - <<: *inverter_sensor +# unique_id: inverter_grid_current +# object_id: inverter_grid_current +# name: Inverter grid current +# value_template: "{{ value_json.phase_a_current }}" +# device_class: current +# unit_of_measurement: A +# - <<: *inverter_sensor +# unique_id: inverter_grid_voltage +# object_id: inverter_grid_voltage +# name: Inverter grid voltage +# value_template: "{{ value_json.phase_a_voltage }}" +# device_class: voltage +# unit_of_measurement: V +# - <<: *inverter_sensor +# unique_id: inverter_grid_frequency +# object_id: inverter_grid_frequency +# name: Inverter grid frequency +# value_template: "{{ value_json.grid_frequency }}" +# unit_of_measurement: Hz +# - <<: *inverter_sensor +# unique_id: inverter_total_battery_discharge +# object_id: inverter_total_battery_discharge +# name: Inverter total battery discharge +# value_template: "{{ value_json.total_battery_discharge_energy }}" +# device_class: energy +# unit_of_measurement: kWh +# state_class: total_increasing +# - <<: *inverter_sensor +# unique_id: inverter_total_battery_charge +# object_id: inverter_total_battery_charge +# name: Inverter total battery charge +# value_template: "{{ value_json.total_battery_charge_from_pv }}" +# device_class: energy +# unit_of_measurement: kWh +# state_class: total_increasing +# - <<: *inverter_sensor +# unique_id: inverter_total_pv_generation +# object_id: inverter_total_pv_generation +# name: Inverter total PV generation +# value_template: "{{ value_json.total_pv_generation }}" +# device_class: energy +# unit_of_measurement: kWh +# state_class: total_increasing +# - <<: *inverter_sensor +# unique_id: inverter_total_pv_export +# object_id: inverter_total_pv_export +# name: Inverter total PV export +# value_template: "{{ value_json.total_pv_export }}" +# device_class: energy +# unit_of_measurement: kWh +# state_class: total_increasing +# - <<: *inverter_sensor +# unique_id: inverter_pv_power +# object_id: inverter_pv_power +# name: Inverter PV power +# value_template: "{{ value_json.total_dc_power }}" +# device_class: power +# unit_of_measurement: W diff --git a/config/packages/media_centre.yaml b/config/packages/media_centre.yaml index ebb25c0..276889e 100644 --- a/config/packages/media_centre.yaml +++ b/config/packages/media_centre.yaml @@ -359,23 +359,49 @@ sensor: condition: time weekday: [sun] + - state: KLFM + start: "12:00:00" + end: "15:00:00" + condition: + condition: time + weekday: [sat] + - state: Triple R condition: condition: state entity_id: sensor.rrr_now_playing state: "On The Blower" + - state: Triple R + condition: + condition: state + entity_id: sensor.rrr_now_playing + state: "Stylin'" + + - state: PBS + condition: + condition: state + entity_id: sensor.pbs_now_playing + state: "Jazz on Saturday" + - state: triple j 107.5 (Alternative Rock) condition: condition: state entity_id: sensor.jjj_now_playing state: "Science with Dr Karl" - - state: triple j 107.5 (Alternative Rock) + - state: ABC Jazz (Jazz Music) # https://www.abc.net.au/jazz/upbeat/ + start: "9:00:00" + end: "13:00:00" condition: - condition: state - entity_id: sensor.jjj_now_playing - state: "Hack" + condition: time + weekday: [sun] + + # - state: triple j 107.5 (Alternative Rock) + # condition: + # condition: state + # entity_id: sensor.jjj_now_playing + # state: "Hack" # ... diff --git a/config/packages/media_server.yaml b/config/packages/media_server.yaml index 2622c57..1fd2b92 100644 --- a/config/packages/media_server.yaml +++ b/config/packages/media_server.yaml @@ -12,7 +12,7 @@ template: sensor: - platform: rtorrent - url: "https://rutorrent.home.bjeanes.com/RPC2" + url: !secret rtorrent_url monitored_variables: - "current_status" - "download_speed" diff --git a/config/packages/network.yaml b/config/packages/network.yaml new file mode 100644 index 0000000..ba343fe --- /dev/null +++ b/config/packages/network.yaml @@ -0,0 +1,23 @@ +sensor: + - platform: unifigateway + host: !secret unifi_controller + port: 443 + username: !secret unifi_username + password: !secret unifi_password + monitored_conditions: + - www + - vpn + - lan + - wan + - wlan + - alerts + - firmware + +wake_on_lan: + +switch: + - platform: wake_on_lan + name: TumTum + mac: !secret tumtum_mac + host: !secret tumtum_ip + broadcast_address: !secret lan_broadcast diff --git a/config/packages/sungrow.yaml b/config/packages/sungrow.yaml new file mode 100644 index 0000000..ee0c495 --- /dev/null +++ b/config/packages/sungrow.yaml @@ -0,0 +1,1105 @@ +# Sungrow integration +# Based on https://github.com/mkaiser/Sungrow-SHx-Inverter-Modbus-Home-Assistant by Martin Kaiser +# Heavily modified to work around quirks in WiNet-S and SH5.0RS firmwares + +# Commented out sensors are because the registers throw errors when they are read + +# - id: "24321413553543" # random number +# alias: update battery charge discharge cmd +# description: "Updates Sungrow holding register for battery charge discharge command" +# trigger: +# - platform: state +# entity_id: +# - input_select.set_sg_battery_charge_discharge_cmd +# condition: [] +# action: +# - service: modbus.write_register +# data_template: +# address: 13050 # 13051 +# slave: 1 +# # 0xAA: 170 Charge +# # 0xBB: 187 Discharge +# # 0xCC: 204 Stop (Default) +# # don't know how to compare the integer values in hexadecimal format in following decoder statement... +# value: "{% if is_state('input_select.set_sg_battery_charge_discharge_cmd' , 'Stop (default)') %} 204 +# {% elif is_state('input_select.set_sg_battery_charge_discharge_cmd' , 'Force charge') %} 170 +# {% elif is_state('input_select.set_sg_battery_charge_discharge_cmd' , 'Force discharge') %} 187 +# {% else %} 204 {% endif %}" +# hub: SungrowSHx +# mode: single +script: + inverter_force_battery_charge: + alias: "Inverter - force battery charge" + sequence: + - service: modbus.write_register + data_template: + address: 13049 # 13050-13051 + slave: 1 + value: [2, 0xAA] + hub: SungrowSHx + inverter_force_battery_discharge: + alias: "Inverter - force battery discharge" + sequence: + - service: modbus.write_register + data_template: + address: 13049 # 13050-13051 + slave: 1 + value: [2, 0xBB] + hub: SungrowSHx + inverter_force_battery_stop: + alias: "Inverter - force battery stop" + sequence: + - service: modbus.write_register + data_template: + address: 13049 # 13050-13051 + slave: 1 + value: [2, 0xCC] + hub: SungrowSHx + inverter_self_consumption: + alias: "Inverter - self consumption" + sequence: + - service: modbus.write_register + data_template: + address: 13049 # 13050-13051 + slave: 1 + value: [0, 0xCC] + hub: SungrowSHx + +modbus: + - name: SungrowSHx + type: tcp + host: !secret solar_inverter_ip + port: 502 + retry_on_empty: true + # retries: 10 + # close_comm_on_error: true + delay: 5 + #timeout: 5 + sensors: + # - name: Sungrow Device type code + # slave: 1 + # address: 4999 # 5000 + # input_type: input + # count: 1 + # data_type: uint16 + # swap: word + # scan_interval: 60 + + - name: Inverter output energy today + unique_id: d1a3ad60e978aaea9407 + slave: 1 + address: 5002 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter output energy total + unique_id: e28068b742fd20919aea + slave: 1 + address: 5003 + input_type: input + count: 2 + data_type: uint32 + swap: word + unit_of_measurement: kWh + precision: 1 + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter temperature + unique_id: a29ef61bc181d9b95ef7 + slave: 1 + address: 5007 + input_type: input + count: 1 + data_type: int16 + precision: 1 + unit_of_measurement: °C + device_class: temperature + state_class: measurement + scale: 0.1 + scan_interval: 10 + + - name: Inverter grid frequency + unique_id: 489e85158f95e8bd71fb + slave: 1 + address: 5035 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 2 + unit_of_measurement: Hz + device_class: frequency + state_class: measurement + scale: 0.01 # docs say 0.1 but WiNet-S implementation differs + scan_interval: 10 + + - name: Inverter phase A voltage + unique_id: c892eb3b2a51b37ffab3 + slave: 1 + address: 5018 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: V + device_class: voltage + state_class: measurement + scale: 0.1 + scan_interval: 10 + + - name: Inverter phase A current + unique_id: 5963c0d0bf24ad5412ff + slave: 1 + address: 13030 + input_type: input + count: 1 + data_type: int16 + swap: word + precision: 1 + unit_of_measurement: A + device_class: current + state_class: measurement + scale: 0.1 + scan_interval: 10 + + - name: Inverter MPPT1 voltage + unique_id: 024b2df03fb2d724277c + slave: 1 + address: 5010 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: V + device_class: voltage + state_class: measurement + scale: 0.1 + scan_interval: 10 + + - name: Inverter MPPT1 current + unique_id: a5179dc512ce97cd1543 + slave: 1 + address: 5011 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 2 + unit_of_measurement: A + device_class: current + scale: 0.1 + scan_interval: 10 + + - name: Inverter MPPT2 voltage + unique_id: 0b856f1678a3afb1002f + slave: 1 + address: 5012 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: V + device_class: voltage + state_class: measurement + scale: 0.1 + scan_interval: 10 + + - name: Inverter MPPT2 current + unique_id: f732afc7332efa49be11 + slave: 1 + address: 5013 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 2 + unit_of_measurement: A + device_class: current + state_class: measurement + scale: 0.1 + scan_interval: 10 + + - name: Inverter PV power + unique_id: 4af1ff47ed7fd1bad213 + slave: 1 + address: 5016 + input_type: input + count: 2 + data_type: uint32 + swap: word + precision: 0 + unit_of_measurement: W + device_class: power + state_class: measurement + scale: 1 + scan_interval: 10 + + - name: Inverter active power + unique_id: a3ee41f78c6c55377c00 + slave: 1 + address: 13033 + input_type: input + count: 2 + data_type: int32 + swap: word + precision: 0 + unit_of_measurement: W + device_class: power + state_class: measurement + scale: 1 + scan_interval: 10 + + - name: Inverter reactive power + unique_id: 5a58fe975877eec6d37c + slave: 1 + address: 5032 + input_type: input + count: 2 + data_type: int32 + swap: word + precision: 0 + unit_of_measurement: var + device_class: reactive_power + state_class: measurement + scale: 1 + scan_interval: 10 + + - name: Inverter power factor + unique_id: 29099a467ed9fec02cb1 + slave: 1 + address: 5034 + input_type: input + count: 1 + data_type: int16 + swap: word + unit_of_measurement: "%" + device_class: power_factor + state_class: measurement + # scale: 0.001 # according to docs... + scale: 0.1 + # precision: 3 + precision: 1 + scan_interval: 10 + + # - name: BDC rated power + # slave: 1 + # address: 5627 #5628 + # input_type: input + # count: 1 + # data_type: uint16 + # swap: word + # unit_of_measurement: "W" + # device_class: power + # state_class: measurement + # scale: 100 + # scan_interval: 10 + + # - name: System state + # slave: 1 + # address: 12999 + # input_type: input + # count: 1 + # data_type: uint16 + # swap: word + # precision: 0 + # scale: 1 + # scan_interval: 10 + + # - name: Running state + # slave: 1 + # address: 13000 + # input_type: input + # count: 1 + # data_type: uint16 + # swap: word + # precision: 0 + # scale: 1 + # scan_interval: 10 + + - name: Inverter PV generation today + unique_id: 27953d57c315260a7983 + slave: 1 + address: 13001 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter PV generation total + unique_id: 885db873746c92fcdf2d + slave: 1 + address: 13002 + input_type: input + count: 2 + data_type: uint32 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter exported energy from PV today + unique_id: 08454b6e9f7061180795 + slave: 1 + address: 13004 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter exported energy from PV total + unique_id: 00efcf01e33337d01b5f + slave: 1 + address: 13005 + input_type: input + count: 2 + data_type: uint32 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter load power + unique_id: 9777fe694d687a4f30df + slave: 1 + address: 13007 + input_type: input + count: 2 + data_type: int32 + swap: word + precision: 0 + unit_of_measurement: W + device_class: power + state_class: measurement + scale: 1 + scan_interval: 10 + + - name: Inverter export power + unique_id: 4c3bac29a87561796c06 + slave: 1 + address: 13009 + input_type: input + count: 2 + data_type: int32 + swap: word + precision: 0 + unit_of_measurement: W + device_class: power + state_class: measurement + scale: 1 + scan_interval: 10 + + - name: Inverter battery charge from PV today + unique_id: d496459e40e0d49f5c11 + slave: 1 + address: 13011 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter battery charge from PV total + unique_id: d743fb021ad5ffd4eaec + slave: 1 + address: 13012 + input_type: input + count: 2 + data_type: uint32 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter direct energy consumption today + unique_id: 31666be0c3b9c9b1046c + slave: 1 + address: 13016 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter direct energy consumption total + unique_id: 1e52906bf8fb43bd584e + slave: 1 + address: 13017 + input_type: input + count: 2 + data_type: uint32 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter battery voltage + unique_id: d847a32343d531d39de9 + slave: 1 + address: 13019 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 0 + unit_of_measurement: V + device_class: voltage + state_class: measurement + scale: 0.1 + scan_interval: 10 + + - name: Inverter battery current + unique_id: 211c77af04532163e7b0 + slave: 1 + address: 13020 + input_type: input + count: 1 + # data_type: uint16 + data_type: + int16 # docs say unsigned but I'm getting overflows when battery is charging + # changing to int shows negative amperage which makes sense. + swap: word + precision: 1 + unit_of_measurement: A + device_class: current + state_class: measurement + scale: 0.1 + scan_interval: 10 + + - name: Inverter battery power (raw) + unique_id: 4f7dacbf06d004b547d9 + slave: 1 + address: 13021 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 0 + unit_of_measurement: W + device_class: power + state_class: measurement + scale: 1 + scan_interval: 10 + + - name: Inverter battery level + unique_id: 61e9d0508f0e75a3f25c + slave: 1 + address: 13022 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: "%" + device_class: battery + state_class: measurement + scale: 0.1 + scan_interval: 60 + + - name: Inverter battery health + slave: 1 + address: 13023 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 0 + unit_of_measurement: "%" + state_class: measurement + scale: 0.1 + scan_interval: 10 + + - name: Inverter battery temperature + slave: 1 + address: 13024 + input_type: input + count: 1 + data_type: int16 + precision: 1 + unit_of_measurement: °C + device_class: temperature + state_class: measurement + scale: 0.1 + scan_interval: 60 + + - name: Inverter battery discharge today + unique_id: aa16dda43d9420767429 + slave: 1 + address: 13025 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter battery discharge total + unique_id: c69ba5e6d4b5233e1d4b + slave: 1 + address: 13026 + input_type: input + count: 2 + data_type: uint32 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 10 + + # - name: Grid state raw + # slave: 1 + # address: 13029 + # input_type: input + # count: 1 + # data_type: uint16 + # swap: word + # precision: 0 + # scan_interval: 10 + + - name: Inverter imported energy today + unique_id: b2b294f51055baee4d83 + slave: 1 + address: 13035 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter imported energy total + unique_id: 3b0efbeb671df362890c + slave: 1 + address: 13036 + input_type: input + count: 2 + data_type: uint32 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter battery charge today + unique_id: 88a0d3dadb8aa103728d + slave: 1 + address: 13039 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter battery charge total + unique_id: ac30fabc192dd714df73 + slave: 1 + address: 13040 + input_type: input + count: 2 + data_type: uint32 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter exported energy today + unique_id: 68e619a9b5ee8d444486 + slave: 1 + address: 13044 + input_type: input + count: 1 + data_type: uint16 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + - name: Inverter exported energy total + unique_id: 6a4ef5fdd89be709656a + slave: 1 + address: 13045 + input_type: input + count: 2 + data_type: uint32 + swap: word + precision: 1 + unit_of_measurement: kWh + device_class: energy + state_class: total_increasing + scale: 0.1 + scan_interval: 60 + + # # holding registers + # - name: Inverter Start Stop + # slave: 1 + # address: 12999 # 13000 + # input_type: holding + # count: 1 + # data_type: uint16 + # swap: word + # precision: 0 + # scan_interval: 10 + # - name: EMS Mode Selection raw + # slave: 1 + # address: 13049 # 13050 + # input_type: holding + # count: 1 + # data_type: uint16 + # swap: word + # scan_interval: 10 + # - name: Inverter charge command (raw) + # unique_id: d1158bbfa40d73933a72 + # slave: 1 + # address: 13050 # 13051 + # input_type: holding + # count: 1 + # data_type: uint16 + # swap: word + # precision: 0 + # scan_interval: 60 + +# - name: Battery Charge Discharge Power +# slave: 1 +# address: 13051 # 13052 +# input_type: holding +# count: 1 +# data_type: uint16 +# swap: word +# precision: 0 +# # datasheet says: +# # 0 to 5000 W for SH*K-* +# # 0 to 100 % for SH*.0RT +# # for my SH10RT it is set in W... +# unit_of_measurement: W +# device_class: power +# state_class: measurement +# scan_interval: 10 + +# - name: Inverter max SoC +# unique_id: c602a1446bddc9d6fa7a +# slave: 1 +# address: 13057 # 13058 +# input_type: holding +# count: 1 +# data_type: uint16 +# swap: word +# precision: 1 +# unit_of_measurement: "%" +# device_class: battery +# state_class: measurement +# scale: 0.1 +# scan_interval: 60 + +# - name: Inverter min SoC +# unique_id: 61a08ee663d37248f372 +# slave: 1 +# address: 13058 # 13059 +# input_type: holding +# count: 1 +# data_type: uint16 +# swap: word +# precision: 1 +# unit_of_measurement: "%" +# device_class: battery +# state_class: measurement +# scale: 0.1 +# scan_interval: 60 + +# binary_sensor: +# - platform: template +# sensors: +# pv_generating: +# friendly_name: "PV generating" +# value_template: "{{ states('sensor.running_state')|int|bitwise_and(0x1) > 0 }}" +# battery_charging: +# friendly_name: "Battery charging" +# value_template: "{{ states('sensor.running_state')|int|bitwise_and(0x2) > 0 }}" +# battery_discharging: +# friendly_name: "Battery discharging" +# value_template: "{{ states('sensor.running_state')|int|bitwise_and(0x4) > 0 }}" +# exporting_power: +# friendly_name: "Exporting power" +# value_template: "{{ states('sensor.running_state')|int|bitwise_and(0x10) > 0 }}" +# importing_power: +# friendly_name: "Importing power" +# value_template: "{{ states('sensor.running_state')|int|bitwise_and(0x20) > 0 }}" + +# # 'virtual' template sensors for better readability +sensor: + - platform: template + sensors: + inverter_battery_power: + unique_id: 7ef0fbbb0d9825b99f35 + friendly_name: Inverter battery power + value_template: >- + {% set current = states('sensor.inverter_battery_current') %} + {% set power = states('sensor.inverter_battery_power_raw') %} + {% if 'unavailable' in [current, power] %} + unavailable + {% elif current|float < 0.0 and power|float > 0.0 %} + {{ -1 * power | float }} + {% else %} + {{ power | float }} + {% endif %} + unit_of_measurement: W + device_class: power +# sungrow_inverter_state: +# # Inverter States from modbus reference manual +# friendly_name: "Sungrow Inverter State" +# value_template: >- +# {% if ((states('sensor.system_state') | int(default=0)) == 0x0002) %} +# Stop +# {% elif ((states('sensor.system_state') | int(default=0)) == 0x0008) %} +# Standby +# {% elif ((states('sensor.system_state') | int(default=0)) == 0x0010) %} +# Initial Standby +# {% elif ((states('sensor.system_state') | int(default=0)) == 0x0020) %} +# Startup +# {% elif ((states('sensor.system_state') | int(default=0)) == 0x0040) %} +# Running +# {% elif ((states('sensor.system_state') | int(default=0)) == 0x0100) %} +# Fault +# {% elif ((states('sensor.system_state') | int(default=0)) == 0x0400) %} +# Maintain mode +# {% elif ((states('sensor.system_state') | int(default=0)) == 0x0800) %} +# Forced mode +# {% elif ((states('sensor.system_state') | int(default=0)) == 0x1000) %} +# Off-grid mode +# {% elif ((states('sensor.system_state') | int(default=0)) == 0x2501) %} +# Restarting +# {% elif ((states('sensor.system_state') | int(default=0)) == 0x4000) %} +# External EMS mode +# {% else %} +# Unknown - should not see me! +# {% endif %} + +# sungrow_grid_state: +# friendly_name: "Sungrow Grid State" +# value_template: >- +# {% if ((states('sensor.grid_state_raw') | int(default=0)) == 0x00AA) %} +# Off Grid +# {% elif ((states('sensor.grid_state_raw') | int(default=0)) == 0x0055) %} +# On Grid +# {% else %} +# Unknown - should not see me! +# {% endif %} + +# sungrow_device_type: +# # device codes from modbus reference manual +# friendly_name: "Sungrow Device Type" +# value_template: >- +# {% if ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0D09) %} +# SH5K-20 +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0D06) %} +# SH3K6 +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0D07) %} +# SH4K6 +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0D03) %} +# SH5K-V13 +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0D0C) %} +# SH5K-30 +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0D0A) %} +# SH3K6-30 +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0D0B) %} +# SH4K6-30 +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0D0F) %} +# SH5.0RS +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0D0D) %} +# SH3.6RS +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0D0E) %} +# SH4.6RS +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0D10) %} +# SH6.0RS +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0E03) %} +# SH10RT +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0E02) %} +# SH8.0RT +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0E01) %} +# SH6.0RT +# {% elif ((states('sensor.sungrow_device_type_code') | int(default=0)) == 0x0E00) %} +# SH5.0RT +# {% else %} +# Unknown device code! +# {% endif %} + +# # make the sensor battery_charge_discharge_cmd more human readable +# sungrow_battery_charge_discharge_cmd: +# # Inverter States from modbus reference manual +# # 0xAA (170) Force charge +# # 0xBB (187) Force discharge +# # 0xCC (204) Stop (Default) +# # don't know how to compare the integer values in hexadecimal format in following decoder statement... +# friendly_name: "Battery Charge Discharge Cmd" +# value_template: >- +# {% if ((states('sensor.battery_charge_discharge_cmd_raw') | int(default=0)) == 0x00AA) %} +# Force charge +# {% elif ((states('sensor.battery_charge_discharge_cmd_raw') | int(default=0)) == 0x00BB) %} +# Force discharge +# {% elif ((states('sensor.battery_charge_discharge_cmd_raw') | int(default=0)) == 0x00CC) %} +# Stop (Default) +# {% else %} +# Unknown - should not see me! +# {% endif %} + +# # make the sensor ems_selection_raw more human readable +# sungrow_ems_mode_selection: +# friendly_name: "EMS Mode Selection" +# value_template: >- +# {% if ((states('sensor.ems_mode_selection_raw') | int(default=0)) == 0) %} +# Self-consumption mode (default) +# {% elif ((states('sensor.ems_mode_selection_raw') | int(default=0)) == 2) %} +# Forced mode +# {% elif ((states('sensor.ems_mode_selection_raw') | int(default=0)) == 3) %} +# External EMS +# {% elif ((states('sensor.ems_mode_selection_raw') | int(default=0)) == 4) %} +# VPP +# {% else %} +# Unknown - should not see me! +# {% endif %} + +# # getting input for Min and Max SoC +# input_number: +# set_sg_min_soc: +# name: min Soc +# #initial: 15 +# min: 5 +# max: 50 +# step: 1 + +# set_sg_max_soc: +# name: max Soc +# #initial: 85 +# min: 50 +# max: 95 +# step: 1 + +# set_sg_charge_discharge_power_percentage: +# name: max charge discharge power in W +# #initial: 40 +# min: 0 +# max: 5000 +# step: 50 + +# input_select: +# set_sg_start_stop_mode: +# name: Inverter mode +# options: +# - "Start" +# - "Stop" + +# # get input for battery mode (forced charge/discharge, stop (default) ) +# set_sg_ems_mode: +# name: EMS mode +# options: +# - "Self-consumption mode (default)" +# - "Forced mode" +# - "External EMS" +# - "VPP" +# icon: mdi:battery-unknown + +# set_sg_battery_charge_discharge_cmd: +# name: Battery charge discharge cmd +# options: +# - "Stop (default)" +# - "Force charge" +# - "Force discharge" +# icon: mdi:battery-unknown + +# # Automation: Write modbus registers on input changes via GUI + +# # note: If you change a value by the sliders, it will take up to 60 seconds until the state variables are updated +# # Unfortunately, I could not find a way to "force update" modbus registers, yet... +# automation: + +# # Start 0xCF = 207 +# # Stop 0xCE = 206 +# # Todo I want to use hexadecimal format to write values!? +# - id: "24334413543545" # random number +# alias: start stop +# description: "Starts/ Stops the inverter" +# trigger: +# - platform: state +# entity_id: +# - input_select.set_sg_start_stop_mode +# condition: [] +# action: +# - service: modbus.write_register +# data_template: +# address: 12999 # 13000 +# slave: 1 +# value: "{% if is_state('input_select.set_sg_start_stop_mode' , 'Start') %} 207 +# {% else %} 206 {% endif %}" +# hub: SungrowSHx +# mode: single + +# - id: "24321413543543" # random number +# alias: update max SoC +# description: "Updates Sungrow max Soc holding register" +# trigger: +# - platform: state +# entity_id: +# - input_number.set_sg_max_soc +# condition: [] +# action: +# - service: modbus.write_register +# data_template: +# address: 13057 # 13058 +# slave: 1 +# value: "{{ states('input_number.set_sg_max_soc') | int *10}}" +# hub: SungrowSHx +# mode: single + +# - id: "24321413543545" # random number +# alias: update min SoC +# description: "Updates Sungrow min Soc holding register" +# trigger: +# - platform: state +# entity_id: +# - input_number.set_sg_min_soc +# condition: [] +# action: +# - service: modbus.write_register +# data_template: +# address: 13058 # 13059 +# slave: 1 +# value: "{{ states('input_number.set_sg_min_soc') | int *10}}" +# hub: SungrowSHx +# mode: single + +# - id: "24321413553543" # random number +# alias: update battery charge discharge cmd +# description: "Updates Sungrow holding register for battery charge discharge command" +# trigger: +# - platform: state +# entity_id: +# - input_select.set_sg_battery_charge_discharge_cmd +# condition: [] +# action: +# - service: modbus.write_register +# data_template: +# address: 13050 # 13051 +# slave: 1 +# # 0xAA: 170 Charge +# # 0xBB: 187 Discharge +# # 0xCC: 204 Stop (Default) +# # don't know how to compare the integer values in hexadecimal format in following decoder statement... +# value: "{% if is_state('input_select.set_sg_battery_charge_discharge_cmd' , 'Stop (default)') %} 204 +# {% elif is_state('input_select.set_sg_battery_charge_discharge_cmd' , 'Force charge') %} 170 +# {% elif is_state('input_select.set_sg_battery_charge_discharge_cmd' , 'Force discharge') %} 187 +# {% else %} 204 {% endif %}" +# hub: SungrowSHx +# mode: single + +# - id: "24323313553543" # random number +# alias: update EMS mode +# description: "Updates EMS mode" +# trigger: +# - platform: state +# entity_id: +# - input_select.set_sg_ems_mode +# condition: [] +# action: +# - service: modbus.write_register +# data_template: +# address: 13049 # 13050 +# slave: 1 +# # 0: Self-consumption mode (Default) +# # 1: entry does not exist +# # 2: Forced Mode +# # 3: External EMS +# # 4: VPP +# # don't know how to compare the integer values in hexadecimal format in following decoder statement... +# value: "{% if is_state('input_select.set_sg_ems_mode' , 'Self-consumption mode (default)') %} 0 +# {% elif is_state('input_select.set_sg_ems_mode' , 'Forced mode') %} 2 +# {% elif is_state('input_select.set_sg_ems_mode' , 'External EMS') %} 3 +# {% elif is_state('input_select.set_sg_ems_mode' , 'VPP') %} 4 +# {% else %} 0 {% endif %}" +# hub: SungrowSHx +# mode: single + +# - id: "24321413543521" # random number +# alias: "update max charge discharge power percent" +# description: "Sets max charge discharge power in % of BDC rated power" +# trigger: +# - platform: state +# entity_id: +# - input_number.set_sg_charge_discharge_power_percentage +# condition: [] +# action: +# - service: modbus.write_register +# data_template: +# address: 13051 # 13052 +# slave: 1 +# value: "{{ states('input_number.set_sg_charge_discharge_power_percentage') | int}}" +# hub: SungrowSHx +# mode: single diff --git a/config/packages/vacuum.yaml b/config/packages/vacuum.yaml index 7a31048..3878d31 100644 --- a/config/packages/vacuum.yaml +++ b/config/packages/vacuum.yaml @@ -5,8 +5,29 @@ camera: username: !secret xiaomi_cloud_username password: !secret xiaomi_cloud_password country: "sg" - name: "Vacuum map" + name: Roborock S5 Map + force_api: xiaomi draw: ["all"] + attributes: + - calibration_points + - rooms + - room_numbers + - vacuum_position + + - platform: xiaomi_cloud_map_extractor + host: !secret xiaomi_vacuum2_host + token: !secret xiaomi_vacuum2_token + username: !secret xiaomi_cloud_username + password: !secret xiaomi_cloud_password + country: "sg" + name: Dreame Z10 Pro Map + force_api: dreame + draw: ["all"] + attributes: + - calibration_points + - rooms + - room_numbers + - vacuum_position template: - sensor: diff --git a/config/solcast.json b/config/solcast.json new file mode 100644 index 0000000..3c9abce --- /dev/null +++ b/config/solcast.json @@ -0,0 +1 @@ +{"forecasts": [{"period_end": "2022-07-19T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T07:00:00+10:00", "pv_estimate": 0.1652}, {"period_end": "2022-07-19T08:00:00+10:00", "pv_estimate": 2.29865}, {"period_end": "2022-07-19T09:00:00+10:00", "pv_estimate": 4.29075}, {"period_end": "2022-07-19T10:00:00+10:00", "pv_estimate": 5.60435}, {"period_end": "2022-07-19T11:00:00+10:00", "pv_estimate": 6.4066}, {"period_end": "2022-07-19T12:00:00+10:00", "pv_estimate": 6.55395}, {"period_end": "2022-07-19T13:00:00+10:00", "pv_estimate": 6.01865}, {"period_end": "2022-07-19T14:00:00+10:00", "pv_estimate": 4.22555}, {"period_end": "2022-07-19T15:00:00+10:00", "pv_estimate": 3.2384}, {"period_end": "2022-07-19T16:00:00+10:00", "pv_estimate": 2.1896}, {"period_end": "2022-07-19T17:00:00+10:00", "pv_estimate": 0.0987}, {"period_end": "2022-07-19T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T07:00:00+10:00", "pv_estimate": 0.10435}, {"period_end": "2022-07-20T08:00:00+10:00", "pv_estimate": 2.22475}, {"period_end": "2022-07-20T09:00:00+10:00", "pv_estimate": 4.29155}, {"period_end": "2022-07-20T10:00:00+10:00", "pv_estimate": 5.5582}, {"period_end": "2022-07-20T11:00:00+10:00", "pv_estimate": 6.2748}, {"period_end": "2022-07-20T12:00:00+10:00", "pv_estimate": 6.54735}, {"period_end": "2022-07-20T13:00:00+10:00", "pv_estimate": 6.2224}, {"period_end": "2022-07-20T14:00:00+10:00", "pv_estimate": 5.4392499999999995}, {"period_end": "2022-07-20T15:00:00+10:00", "pv_estimate": 4.15705}, {"period_end": "2022-07-20T16:00:00+10:00", "pv_estimate": 2.03605}, {"period_end": "2022-07-20T17:00:00+10:00", "pv_estimate": 0.0781}, {"period_end": "2022-07-20T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T07:00:00+10:00", "pv_estimate": 0.08875}, {"period_end": "2022-07-21T08:00:00+10:00", "pv_estimate": 2.077}, {"period_end": "2022-07-21T09:00:00+10:00", "pv_estimate": 3.92595}, {"period_end": "2022-07-21T10:00:00+10:00", "pv_estimate": 5.246650000000001}, {"period_end": "2022-07-21T11:00:00+10:00", "pv_estimate": 6.0548}, {"period_end": "2022-07-21T12:00:00+10:00", "pv_estimate": 6.3704}, {"period_end": "2022-07-21T13:00:00+10:00", "pv_estimate": 6.0533}, {"period_end": "2022-07-21T14:00:00+10:00", "pv_estimate": 5.3351500000000005}, {"period_end": "2022-07-21T15:00:00+10:00", "pv_estimate": 4.1174}, {"period_end": "2022-07-21T16:00:00+10:00", "pv_estimate": 2.0458}, {"period_end": "2022-07-21T17:00:00+10:00", "pv_estimate": 0.07975}, {"period_end": "2022-07-21T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T07:00:00+10:00", "pv_estimate": 0.09145}, {"period_end": "2022-07-22T08:00:00+10:00", "pv_estimate": 2.0791500000000003}, {"period_end": "2022-07-22T09:00:00+10:00", "pv_estimate": 3.8309499999999996}, {"period_end": "2022-07-22T10:00:00+10:00", "pv_estimate": 5.1068999999999996}, {"period_end": "2022-07-22T11:00:00+10:00", "pv_estimate": 5.76485}, {"period_end": "2022-07-22T12:00:00+10:00", "pv_estimate": 5.902}, {"period_end": "2022-07-22T13:00:00+10:00", "pv_estimate": 5.2309}, {"period_end": "2022-07-22T14:00:00+10:00", "pv_estimate": 3.7748999999999997}, {"period_end": "2022-07-22T15:00:00+10:00", "pv_estimate": 2.1012}, {"period_end": "2022-07-22T16:00:00+10:00", "pv_estimate": 0.66015}, {"period_end": "2022-07-22T17:00:00+10:00", "pv_estimate": 0.03115}, {"period_end": "2022-07-22T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T07:00:00+10:00", "pv_estimate": 0.03865}, {"period_end": "2022-07-23T08:00:00+10:00", "pv_estimate": 0.5871999999999999}, {"period_end": "2022-07-23T09:00:00+10:00", "pv_estimate": 1.4879}, {"period_end": "2022-07-23T10:00:00+10:00", "pv_estimate": 2.1003}, {"period_end": "2022-07-23T11:00:00+10:00", "pv_estimate": 2.2268499999999998}, {"period_end": "2022-07-23T12:00:00+10:00", "pv_estimate": 2.0212}, {"period_end": "2022-07-23T13:00:00+10:00", "pv_estimate": 1.6935}, {"period_end": "2022-07-23T14:00:00+10:00", "pv_estimate": 1.31975}, {"period_end": "2022-07-23T15:00:00+10:00", "pv_estimate": 0.7945}, {"period_end": "2022-07-23T16:00:00+10:00", "pv_estimate": 0.2931}, {"period_end": "2022-07-23T17:00:00+10:00", "pv_estimate": 0.01795}, {"period_end": "2022-07-23T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T07:00:00+10:00", "pv_estimate": 0.076}, {"period_end": "2022-07-24T08:00:00+10:00", "pv_estimate": 1.76945}, {"period_end": "2022-07-24T09:00:00+10:00", "pv_estimate": 3.3737}, {"period_end": "2022-07-24T10:00:00+10:00", "pv_estimate": 4.5339}, {"period_end": "2022-07-24T11:00:00+10:00", "pv_estimate": 5.3882}, {"period_end": "2022-07-24T12:00:00+10:00", "pv_estimate": 5.5493500000000004}, {"period_end": "2022-07-24T13:00:00+10:00", "pv_estimate": 5.36705}, {"period_end": "2022-07-24T14:00:00+10:00", "pv_estimate": 4.63125}, {"period_end": "2022-07-24T15:00:00+10:00", "pv_estimate": 3.45115}, {"period_end": "2022-07-24T16:00:00+10:00", "pv_estimate": 1.83555}, {"period_end": "2022-07-24T17:00:00+10:00", "pv_estimate": 0.09175}, {"period_end": "2022-07-24T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T07:00:00+10:00", "pv_estimate": 0.06055}, {"period_end": "2022-07-25T08:00:00+10:00", "pv_estimate": 1.078}, {"period_end": "2022-07-25T09:00:00+10:00", "pv_estimate": 2.30975}, {"period_end": "2022-07-25T10:00:00+10:00", "pv_estimate": 3.12005}, {"period_end": "2022-07-25T11:00:00+10:00", "pv_estimate": 3.3581000000000003}, {"period_end": "2022-07-25T12:00:00+10:00", "pv_estimate": 3.1493}, {"period_end": "2022-07-25T13:00:00+10:00", "pv_estimate": 2.5834}, {"period_end": "2022-07-25T14:00:00+10:00", "pv_estimate": 1.7878500000000002}, {"period_end": "2022-07-25T15:00:00+10:00", "pv_estimate": 0.94625}, {"period_end": "2022-07-25T16:00:00+10:00", "pv_estimate": 0.31125}, {"period_end": "2022-07-25T17:00:00+10:00", "pv_estimate": 0.0197}, {"period_end": "2022-07-25T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T23:00:00+10:00", "pv_estimate": 0.0}], "energy": {"wh_hours": {"2022-07-19T06:00:00+10:00": 0.0, "2022-07-19T07:00:00+10:00": 165.20000000000002, "2022-07-19T08:00:00+10:00": 2298.6499999999996, "2022-07-19T09:00:00+10:00": 4290.75, "2022-07-19T10:00:00+10:00": 5604.35, "2022-07-19T11:00:00+10:00": 6406.6, "2022-07-19T12:00:00+10:00": 6553.950000000001, "2022-07-19T13:00:00+10:00": 6018.65, "2022-07-19T14:00:00+10:00": 4225.55, "2022-07-19T15:00:00+10:00": 3238.4, "2022-07-19T16:00:00+10:00": 2189.6, "2022-07-19T17:00:00+10:00": 98.7, "2022-07-19T18:00:00+10:00": 0.0, "2022-07-20T06:00:00+10:00": 0.0, "2022-07-20T07:00:00+10:00": 104.35, "2022-07-20T08:00:00+10:00": 2224.75, "2022-07-20T09:00:00+10:00": 4291.55, "2022-07-20T10:00:00+10:00": 5558.2, "2022-07-20T11:00:00+10:00": 6274.8, "2022-07-20T12:00:00+10:00": 6547.349999999999, "2022-07-20T13:00:00+10:00": 6222.400000000001, "2022-07-20T14:00:00+10:00": 5439.249999999999, "2022-07-20T15:00:00+10:00": 4157.05, "2022-07-20T16:00:00+10:00": 2036.05, "2022-07-20T17:00:00+10:00": 78.10000000000001, "2022-07-20T18:00:00+10:00": 0.0, "2022-07-21T06:00:00+10:00": 0.0, "2022-07-21T07:00:00+10:00": 88.75, "2022-07-21T08:00:00+10:00": 2077.0, "2022-07-21T09:00:00+10:00": 3925.95, "2022-07-21T10:00:00+10:00": 5246.650000000001, "2022-07-21T11:00:00+10:00": 6054.8, "2022-07-21T12:00:00+10:00": 6370.4, "2022-07-21T13:00:00+10:00": 6053.3, "2022-07-21T14:00:00+10:00": 5335.150000000001, "2022-07-21T15:00:00+10:00": 4117.4, "2022-07-21T16:00:00+10:00": 2045.7999999999997, "2022-07-21T17:00:00+10:00": 79.75, "2022-07-21T18:00:00+10:00": 0.0, "2022-07-22T06:00:00+10:00": 0.0, "2022-07-22T07:00:00+10:00": 91.45, "2022-07-22T08:00:00+10:00": 2079.15, "2022-07-22T09:00:00+10:00": 3830.95, "2022-07-22T10:00:00+10:00": 5106.9, "2022-07-22T11:00:00+10:00": 5764.85, "2022-07-22T12:00:00+10:00": 5902.0, "2022-07-22T13:00:00+10:00": 5230.900000000001, "2022-07-22T14:00:00+10:00": 3774.8999999999996, "2022-07-22T15:00:00+10:00": 2101.2, "2022-07-22T16:00:00+10:00": 660.15, "2022-07-22T17:00:00+10:00": 31.150000000000002, "2022-07-22T18:00:00+10:00": 0.0, "2022-07-23T06:00:00+10:00": 0.0, "2022-07-23T07:00:00+10:00": 38.65, "2022-07-23T08:00:00+10:00": 587.1999999999999, "2022-07-23T09:00:00+10:00": 1487.9, "2022-07-23T10:00:00+10:00": 2100.2999999999997, "2022-07-23T11:00:00+10:00": 2226.85, "2022-07-23T12:00:00+10:00": 2021.1999999999998, "2022-07-23T13:00:00+10:00": 1693.5, "2022-07-23T14:00:00+10:00": 1319.75, "2022-07-23T15:00:00+10:00": 794.5, "2022-07-23T16:00:00+10:00": 293.1, "2022-07-23T17:00:00+10:00": 17.95, "2022-07-23T18:00:00+10:00": 0.0, "2022-07-24T06:00:00+10:00": 0.0, "2022-07-24T07:00:00+10:00": 76.0, "2022-07-24T08:00:00+10:00": 1769.45, "2022-07-24T09:00:00+10:00": 3373.7, "2022-07-24T10:00:00+10:00": 4533.9, "2022-07-24T11:00:00+10:00": 5388.200000000001, "2022-07-24T12:00:00+10:00": 5549.35, "2022-07-24T13:00:00+10:00": 5367.05, "2022-07-24T14:00:00+10:00": 4631.25, "2022-07-24T15:00:00+10:00": 3451.15, "2022-07-24T16:00:00+10:00": 1835.55, "2022-07-24T17:00:00+10:00": 91.75, "2022-07-24T18:00:00+10:00": 0.0, "2022-07-25T06:00:00+10:00": 0.0, "2022-07-25T07:00:00+10:00": 60.55, "2022-07-25T08:00:00+10:00": 1078.0, "2022-07-25T09:00:00+10:00": 2309.75, "2022-07-25T10:00:00+10:00": 3120.05, "2022-07-25T11:00:00+10:00": 3358.1000000000004, "2022-07-25T12:00:00+10:00": 3149.3, "2022-07-25T13:00:00+10:00": 2583.4, "2022-07-25T14:00:00+10:00": 1787.8500000000001, "2022-07-25T15:00:00+10:00": 946.25, "2022-07-25T16:00:00+10:00": 311.25, "2022-07-25T17:00:00+10:00": 19.7, "2022-07-25T18:00:00+10:00": 0.0}}, "siteinfo": {"4441-cd83-3b0b-7ae4": {"forecasts": [{"period_end": "2022-07-19T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T00:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T01:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T02:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T03:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T04:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T05:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T06:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T07:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T07:30:00+10:00", "pv_estimate": 0.1652}, {"period_end": "2022-07-19T08:00:00+10:00", "pv_estimate": 0.8805}, {"period_end": "2022-07-19T08:30:00+10:00", "pv_estimate": 1.41815}, {"period_end": "2022-07-19T09:00:00+10:00", "pv_estimate": 1.9428}, {"period_end": "2022-07-19T09:30:00+10:00", "pv_estimate": 2.34795}, {"period_end": "2022-07-19T10:00:00+10:00", "pv_estimate": 2.6678}, {"period_end": "2022-07-19T10:30:00+10:00", "pv_estimate": 2.93655}, {"period_end": "2022-07-19T11:00:00+10:00", "pv_estimate": 3.1581}, {"period_end": "2022-07-19T11:30:00+10:00", "pv_estimate": 3.2485}, {"period_end": "2022-07-19T12:00:00+10:00", "pv_estimate": 3.2912}, {"period_end": "2022-07-19T12:30:00+10:00", "pv_estimate": 3.26275}, {"period_end": "2022-07-19T13:00:00+10:00", "pv_estimate": 3.0125}, {"period_end": "2022-07-19T13:30:00+10:00", "pv_estimate": 3.00615}, {"period_end": "2022-07-19T14:00:00+10:00", "pv_estimate": 2.5034}, {"period_end": "2022-07-19T14:30:00+10:00", "pv_estimate": 1.72215}, {"period_end": "2022-07-19T15:00:00+10:00", "pv_estimate": 1.53585}, {"period_end": "2022-07-19T15:30:00+10:00", "pv_estimate": 1.70255}, {"period_end": "2022-07-19T16:00:00+10:00", "pv_estimate": 1.31555}, {"period_end": "2022-07-19T16:30:00+10:00", "pv_estimate": 0.87405}, {"period_end": "2022-07-19T17:00:00+10:00", "pv_estimate": 0.0987}, {"period_end": "2022-07-19T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T18:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T19:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T20:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T21:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T22:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T23:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T00:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T01:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T02:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T03:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T04:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T05:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T06:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T07:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T07:30:00+10:00", "pv_estimate": 0.10435}, {"period_end": "2022-07-20T08:00:00+10:00", "pv_estimate": 0.81685}, {"period_end": "2022-07-20T08:30:00+10:00", "pv_estimate": 1.4079}, {"period_end": "2022-07-20T09:00:00+10:00", "pv_estimate": 1.9472}, {"period_end": "2022-07-20T09:30:00+10:00", "pv_estimate": 2.34435}, {"period_end": "2022-07-20T10:00:00+10:00", "pv_estimate": 2.6495}, {"period_end": "2022-07-20T10:30:00+10:00", "pv_estimate": 2.9087}, {"period_end": "2022-07-20T11:00:00+10:00", "pv_estimate": 3.042}, {"period_end": "2022-07-20T11:30:00+10:00", "pv_estimate": 3.2328}, {"period_end": "2022-07-20T12:00:00+10:00", "pv_estimate": 3.2839}, {"period_end": "2022-07-20T12:30:00+10:00", "pv_estimate": 3.26345}, {"period_end": "2022-07-20T13:00:00+10:00", "pv_estimate": 3.1999}, {"period_end": "2022-07-20T13:30:00+10:00", "pv_estimate": 3.0225}, {"period_end": "2022-07-20T14:00:00+10:00", "pv_estimate": 2.8573}, {"period_end": "2022-07-20T14:30:00+10:00", "pv_estimate": 2.58195}, {"period_end": "2022-07-20T15:00:00+10:00", "pv_estimate": 2.29265}, {"period_end": "2022-07-20T15:30:00+10:00", "pv_estimate": 1.8644}, {"period_end": "2022-07-20T16:00:00+10:00", "pv_estimate": 1.30235}, {"period_end": "2022-07-20T16:30:00+10:00", "pv_estimate": 0.7337}, {"period_end": "2022-07-20T17:00:00+10:00", "pv_estimate": 0.0781}, {"period_end": "2022-07-20T17:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T18:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T19:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T20:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T21:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T22:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-20T23:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T00:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T01:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T02:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T03:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T04:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T05:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T06:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T07:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T07:30:00+10:00", "pv_estimate": 0.08875}, {"period_end": "2022-07-21T08:00:00+10:00", "pv_estimate": 0.7617}, {"period_end": "2022-07-21T08:30:00+10:00", "pv_estimate": 1.3153}, {"period_end": "2022-07-21T09:00:00+10:00", "pv_estimate": 1.8125}, {"period_end": "2022-07-21T09:30:00+10:00", "pv_estimate": 2.11345}, {"period_end": "2022-07-21T10:00:00+10:00", "pv_estimate": 2.48085}, {"period_end": "2022-07-21T10:30:00+10:00", "pv_estimate": 2.7658}, {"period_end": "2022-07-21T11:00:00+10:00", "pv_estimate": 2.9095}, {"period_end": "2022-07-21T11:30:00+10:00", "pv_estimate": 3.1453}, {"period_end": "2022-07-21T12:00:00+10:00", "pv_estimate": 3.1948}, {"period_end": "2022-07-21T12:30:00+10:00", "pv_estimate": 3.1756}, {"period_end": "2022-07-21T13:00:00+10:00", "pv_estimate": 3.11165}, {"period_end": "2022-07-21T13:30:00+10:00", "pv_estimate": 2.94165}, {"period_end": "2022-07-21T14:00:00+10:00", "pv_estimate": 2.78575}, {"period_end": "2022-07-21T14:30:00+10:00", "pv_estimate": 2.5494}, {"period_end": "2022-07-21T15:00:00+10:00", "pv_estimate": 2.2615}, {"period_end": "2022-07-21T15:30:00+10:00", "pv_estimate": 1.8559}, {"period_end": "2022-07-21T16:00:00+10:00", "pv_estimate": 1.3023}, {"period_end": "2022-07-21T16:30:00+10:00", "pv_estimate": 0.7435}, {"period_end": "2022-07-21T17:00:00+10:00", "pv_estimate": 0.07975}, {"period_end": "2022-07-21T17:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T18:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T19:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T20:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T21:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T22:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-21T23:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T00:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T01:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T02:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T03:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T04:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T05:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T06:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T07:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T07:30:00+10:00", "pv_estimate": 0.09145}, {"period_end": "2022-07-22T08:00:00+10:00", "pv_estimate": 0.77075}, {"period_end": "2022-07-22T08:30:00+10:00", "pv_estimate": 1.3084}, {"period_end": "2022-07-22T09:00:00+10:00", "pv_estimate": 1.71755}, {"period_end": "2022-07-22T09:30:00+10:00", "pv_estimate": 2.1134}, {"period_end": "2022-07-22T10:00:00+10:00", "pv_estimate": 2.4807}, {"period_end": "2022-07-22T10:30:00+10:00", "pv_estimate": 2.6262}, {"period_end": "2022-07-22T11:00:00+10:00", "pv_estimate": 2.8498}, {"period_end": "2022-07-22T11:30:00+10:00", "pv_estimate": 2.91505}, {"period_end": "2022-07-22T12:00:00+10:00", "pv_estimate": 2.95675}, {"period_end": "2022-07-22T12:30:00+10:00", "pv_estimate": 2.94525}, {"period_end": "2022-07-22T13:00:00+10:00", "pv_estimate": 2.76565}, {"period_end": "2022-07-22T13:30:00+10:00", "pv_estimate": 2.46525}, {"period_end": "2022-07-22T14:00:00+10:00", "pv_estimate": 2.09745}, {"period_end": "2022-07-22T14:30:00+10:00", "pv_estimate": 1.67745}, {"period_end": "2022-07-22T15:00:00+10:00", "pv_estimate": 1.23985}, {"period_end": "2022-07-22T15:30:00+10:00", "pv_estimate": 0.86135}, {"period_end": "2022-07-22T16:00:00+10:00", "pv_estimate": 0.4793}, {"period_end": "2022-07-22T16:30:00+10:00", "pv_estimate": 0.18085}, {"period_end": "2022-07-22T17:00:00+10:00", "pv_estimate": 0.03115}, {"period_end": "2022-07-22T17:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T18:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T19:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T20:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T21:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T22:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-22T23:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T00:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T01:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T02:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T03:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T04:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T05:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T06:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T07:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T07:30:00+10:00", "pv_estimate": 0.03865}, {"period_end": "2022-07-23T08:00:00+10:00", "pv_estimate": 0.1808}, {"period_end": "2022-07-23T08:30:00+10:00", "pv_estimate": 0.4064}, {"period_end": "2022-07-23T09:00:00+10:00", "pv_estimate": 0.62985}, {"period_end": "2022-07-23T09:30:00+10:00", "pv_estimate": 0.85805}, {"period_end": "2022-07-23T10:00:00+10:00", "pv_estimate": 1.0045}, {"period_end": "2022-07-23T10:30:00+10:00", "pv_estimate": 1.0958}, {"period_end": "2022-07-23T11:00:00+10:00", "pv_estimate": 1.12385}, {"period_end": "2022-07-23T11:30:00+10:00", "pv_estimate": 1.103}, {"period_end": "2022-07-23T12:00:00+10:00", "pv_estimate": 1.0543}, {"period_end": "2022-07-23T12:30:00+10:00", "pv_estimate": 0.9669}, {"period_end": "2022-07-23T13:00:00+10:00", "pv_estimate": 0.8715}, {"period_end": "2022-07-23T13:30:00+10:00", "pv_estimate": 0.822}, {"period_end": "2022-07-23T14:00:00+10:00", "pv_estimate": 0.71645}, {"period_end": "2022-07-23T14:30:00+10:00", "pv_estimate": 0.6033}, {"period_end": "2022-07-23T15:00:00+10:00", "pv_estimate": 0.46445}, {"period_end": "2022-07-23T15:30:00+10:00", "pv_estimate": 0.33005}, {"period_end": "2022-07-23T16:00:00+10:00", "pv_estimate": 0.20055}, {"period_end": "2022-07-23T16:30:00+10:00", "pv_estimate": 0.09255}, {"period_end": "2022-07-23T17:00:00+10:00", "pv_estimate": 0.01795}, {"period_end": "2022-07-23T17:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T18:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T19:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T20:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T21:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T22:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-23T23:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T00:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T01:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T02:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T03:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T04:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T05:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T06:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T07:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T07:30:00+10:00", "pv_estimate": 0.076}, {"period_end": "2022-07-24T08:00:00+10:00", "pv_estimate": 0.64735}, {"period_end": "2022-07-24T08:30:00+10:00", "pv_estimate": 1.1221}, {"period_end": "2022-07-24T09:00:00+10:00", "pv_estimate": 1.50555}, {"period_end": "2022-07-24T09:30:00+10:00", "pv_estimate": 1.86815}, {"period_end": "2022-07-24T10:00:00+10:00", "pv_estimate": 2.14065}, {"period_end": "2022-07-24T10:30:00+10:00", "pv_estimate": 2.39325}, {"period_end": "2022-07-24T11:00:00+10:00", "pv_estimate": 2.64855}, {"period_end": "2022-07-24T11:30:00+10:00", "pv_estimate": 2.73965}, {"period_end": "2022-07-24T12:00:00+10:00", "pv_estimate": 2.7638}, {"period_end": "2022-07-24T12:30:00+10:00", "pv_estimate": 2.78555}, {"period_end": "2022-07-24T13:00:00+10:00", "pv_estimate": 2.73015}, {"period_end": "2022-07-24T13:30:00+10:00", "pv_estimate": 2.6369}, {"period_end": "2022-07-24T14:00:00+10:00", "pv_estimate": 2.42605}, {"period_end": "2022-07-24T14:30:00+10:00", "pv_estimate": 2.2052}, {"period_end": "2022-07-24T15:00:00+10:00", "pv_estimate": 1.90875}, {"period_end": "2022-07-24T15:30:00+10:00", "pv_estimate": 1.5424}, {"period_end": "2022-07-24T16:00:00+10:00", "pv_estimate": 1.1501}, {"period_end": "2022-07-24T16:30:00+10:00", "pv_estimate": 0.68545}, {"period_end": "2022-07-24T17:00:00+10:00", "pv_estimate": 0.09175}, {"period_end": "2022-07-24T17:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T18:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T19:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T20:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T21:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T22:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-24T23:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T00:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T00:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T01:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T01:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T02:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T02:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T03:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T03:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T04:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T04:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T05:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T05:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T06:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T06:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T07:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T07:30:00+10:00", "pv_estimate": 0.06055}, {"period_end": "2022-07-25T08:00:00+10:00", "pv_estimate": 0.3678}, {"period_end": "2022-07-25T08:30:00+10:00", "pv_estimate": 0.7102}, {"period_end": "2022-07-25T09:00:00+10:00", "pv_estimate": 1.0092}, {"period_end": "2022-07-25T09:30:00+10:00", "pv_estimate": 1.30055}, {"period_end": "2022-07-25T10:00:00+10:00", "pv_estimate": 1.4891}, {"period_end": "2022-07-25T10:30:00+10:00", "pv_estimate": 1.63095}, {"period_end": "2022-07-25T11:00:00+10:00", "pv_estimate": 1.68835}, {"period_end": "2022-07-25T11:30:00+10:00", "pv_estimate": 1.66975}, {"period_end": "2022-07-25T12:00:00+10:00", "pv_estimate": 1.61295}, {"period_end": "2022-07-25T12:30:00+10:00", "pv_estimate": 1.53635}, {"period_end": "2022-07-25T13:00:00+10:00", "pv_estimate": 1.3984}, {"period_end": "2022-07-25T13:30:00+10:00", "pv_estimate": 1.185}, {"period_end": "2022-07-25T14:00:00+10:00", "pv_estimate": 0.9997}, {"period_end": "2022-07-25T14:30:00+10:00", "pv_estimate": 0.78815}, {"period_end": "2022-07-25T15:00:00+10:00", "pv_estimate": 0.5711}, {"period_end": "2022-07-25T15:30:00+10:00", "pv_estimate": 0.37515}, {"period_end": "2022-07-25T16:00:00+10:00", "pv_estimate": 0.20795}, {"period_end": "2022-07-25T16:30:00+10:00", "pv_estimate": 0.1033}, {"period_end": "2022-07-25T17:00:00+10:00", "pv_estimate": 0.0197}, {"period_end": "2022-07-25T17:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T18:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T18:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T19:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T19:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T20:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T20:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T21:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T21:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T22:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T22:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T23:00:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-25T23:30:00+10:00", "pv_estimate": 0.0}, {"period_end": "2022-07-19T17:30:00+10:00", "pv_estimate": 0}], "tally": 41.09}}, "last_updated": "2022-07-19T08:00:00+00:00", "api_used": 10} \ No newline at end of file diff --git a/lovelace/lovelace.bos_office.yaml b/lovelace/lovelace.bos_office.yaml index d3c20a7..92cba91 100644 --- a/lovelace/lovelace.bos_office.yaml +++ b/lovelace/lovelace.bos_office.yaml @@ -38,11 +38,11 @@ config: type: entity - entity: sensor.ble_humidity_bos_office_a4c1380f0b98 type: entity - - entity: sensor.bo_s_desk_plug_power - name: Desk - type: entity - - entity: sensor.bo_s_office_plug_power - type: entity + - content: "{{ \n \"{:,}\".format(\n (states('sensor.bo_s_desk_plug_power')\ + \ | float(default=0)\n +\n states('sensor.bo_s_office_plug_power')\ + \ | float(default=0)\n ) | round\n )\n}} W" + icon: mdi:flash + type: template - entity: sensor.bo_s_office_perception type: entity - entity: sensor.bo_s_office_simmerzone @@ -55,28 +55,17 @@ config: icon: tc:heat-index type: entity type: custom:mushroom-chips-card - - entities: - - entity: binary_sensor.bo_s_office_pir_2_occupancy - - entity: binary_sensor.bo_s_office_motion - - entity: binary_sensor.bo_s_office_is_occupied - hours_to_show: 2 - title: Occupancy - type: history-graph - - card: + - cards: + - entities: + - entity: automation.warm_up_bo_s_office type: entities - filter: - exclude: - - state: unknown - - state: unavailable - include: - - area: Bo's Office - options: - secondary_info: last-changed - show_empty: false - sort: - method: domain - reverse: true - type: custom:auto-entities + - entities: + - entity: sensor.ble_temperature_bos_office_a4c1380f0b98 + - entity: sensor.ble_humidity_bos_office_a4c1380f0b98 + type: history-graph + layout: {} + layout_type: masonry + type: custom:layout-card icon: mdi:chair-rolling theme: Backend-selected title: Bo's Office diff --git a/lovelace/lovelace.lovelace_solar.yaml b/lovelace/lovelace.lovelace_solar.yaml new file mode 100644 index 0000000..662f633 --- /dev/null +++ b/lovelace/lovelace.lovelace_solar.yaml @@ -0,0 +1,376 @@ +config: + views: + - badges: [] + cards: + - cards: + - content: "{%- set household_usage =\n states('sensor.inverter_active_power')\ + \ | float +\n states('sensor.eagle_200_meter_power_demand_w') | float\n\ + -%}\n**Household usage:** {{ household_usage }} W\n**PV+Bat:** {{ states('sensor.inverter_battery_power')\ + \ | float + states('sensor.inverter_pv_power') | float }} W\n**Active (AC?):**\ + \ {{ states('sensor.inverter_active_power') | float }} W\n**AC from PV:**\ + \ {{ states('sensor.inverter_active_power') | float - states('sensor.inverter_battery_power')\ + \ | float }} W\n**Inverter Load (claimed):** {{ states('sensor.inverter_load_power')\ + \ | float }} W\n**Inverter Load (gap):** {{ states('sensor.inverter_load_power')\ + \ | float - household_usage }} W\n**{Im,Ex}port:** {{ states('sensor.eagle_200_meter_power_demand_w')\ + \ | float }} W\n" + type: markdown + title: Scratch + type: custom:stack-in-card + - cards: + - entities: + battery: sensor.inverter_battery_power + battery_charge: sensor.inverter_battery_level + grid: sensor.eagle_200_meter_power_demand + solar: sensor.inverter_pv_power + kw_decimals: 2 + type: custom:power-flow-card + w_decimals: 0 + watt_threshold: 900 + - entities: + - entity: sensor.inverter_active_power + name: Active (AC) power + secondary_info: last-updated + - entity: sensor.inverter_reactive_power + name: Reactive power + secondary_info: last-updated + - entity: sensor.inverter_power_factor + name: Power factor + secondary_info: last-updated + - entity: sensor.inverter_pv_power + name: PV Power + secondary_info: last-updated + - entity: sensor.inverter_load_power + name: Load power (inverter claimed) + secondary_info: last-updated + - entity: sensor.household_power_demand + name: Actual load + secondary_info: last-updated + - entity: sensor.inverter_battery_power + name: Battery power + secondary_info: last-updated + - entity: sensor.inverter_grid_power_demand + name: Grid demand (inverter) + secondary_info: last-updated + - entity: sensor.eagle_200_meter_power_demand_w + name: Grid demand (meter) + secondary_info: last-updated + type: entities + - entities: + - entity: sensor.inverter_grid_power_demand + name: Grid demand (inverter) + secondary_info: last-updated + - entity: sensor.eagle_200_meter_power_demand_w + name: Grid demand (meter) + secondary_info: last-updated + hours_to_show: 6 + type: history-graph + - entities: + - entity: sensor.inverter_load_power + name: Inverter's claimed load power + - entity: sensor.household_power_demand + name: Actual household power demand + hours_to_show: 6 + type: history-graph + - entities: + - entity: sensor.inverter_load_gap + name: Load gap + - entity: sensor.inverter_demand_gap + name: Demand gap + hours_to_show: 6 + type: history-graph + title: Power + type: custom:stack-in-card + - cards: + - link_dashboard: false + type: energy-distribution + title: Energy (today) + type: custom:stack-in-card + - entities: + - entity: sensor.inverter_pv_power + name: PV Power + - entity: sensor.inverter_active_power + name: Active Power + - entity: sensor.inverter_load_power + name: Load power + type: history-graph + - entities: + - entity: sensor.inverter_battery_level + name: Charge + - entity: sensor.inverter_battery_power + name: Power + title: Battery + type: history-graph + - card: + type: entities + filter: + exclude: + - state: unavailable + include: + - entity_id: sensor.eagle_200_meter_power_demand + - entity_id: /sensor.inverter_/ + type: custom:auto-entities + - card: + title: Actions + type: entities + filter: + exclude: [] + include: + - domain: /script|automation/ + entity_id: /\.inverter_/ + type: custom:auto-entities + - cards: + - entities: + - entity: sensor.inverter_grid_frequency + name: Frequency + secondary_info: last-updated + - entity: sensor.inverter_phase_a_voltage + name: Voltage + secondary_info: last-updated + - entity: sensor.inverter_phase_a_current + name: Current + secondary_info: last-updated + type: entities + - entities: + - entity: sensor.inverter_grid_frequency + name: Frequency + - entity: sensor.inverter_phase_a_voltage + name: Voltage + - entity: sensor.inverter_phase_a_current + name: Current + type: history-graph + title: Grid + type: custom:stack-in-card + icon: mdi:solar-power-variant + theme: Backend-selected + title: Solar + - badges: + - entity: sensor.electricity_general_price + - entity: sensor.eagle_200_meter_power_demand + cards: + - link_dashboard: true + type: energy-distribution + - apex_config: + chart: + height: 250 + type: area + dataLabels: + enabled: false + fill: + gradient: + inverseColors: false + opacityFrom: 0.45 + opacityTo: 0.05 + shadeIntensity: 1 + stops: + - 20 + - 100 + - 100 + - 100 + type: gradient + legend: + show: false + stroke: + curve: smooth + show: true + width: 2 + xaxis: + labels: + datetimeFormatter: + day: ddd + month: ddd + type: datetime + graph_span: 35h + header: + colorize_states: true + show: true + show_states: true + title: Amber Price 24hrs + now: + color: red + label: Now + show: true + series: + - color: black + curve: smooth + entity: sensor.electricity_general_price + extend_to: now + name: Price + type: area + yaxis_id: price + - color: lightgrey + data_generator: "return entity.attributes.forecasts.map((entry) => {\n return\ + \ [new Date(entry.start_time), entry.per_kwh];\n});\n" + entity: sensor.electricity_general_forecast + name: Predicted Price + show: + in_chart: true + in_header: false + type: area + yaxis_id: price + - color: green + curve: smooth + entity: sensor.electricity_renewables + extend_to: now + name: Renewables in Grid + show: + in_chart: true + in_header: true + type: area + unit: '%' + yaxis_id: renewables_perc + - color: lightgreen + curve: smooth + data_generator: "return entity.attributes.forecasts.map((entry) => {\n return\ + \ [new Date(entry.start_time), entry.renewables];\n});\n" + entity: sensor.electricity_general_forecast + name: Renewables in Grid + show: + in_chart: true + in_header: false + type: area + unit: '%' + yaxis_id: renewables_perc + - color: grey + entity: sensor.electricity_general_forecast + name: Predicted Price + show: + in_chart: false + in_header: true + type: area + yaxis_id: price + span: + offset: -24h + start: minute + type: custom:apexcharts-card + yaxis: + - id: price + max: ~1 + min: ~-1 + - id: renewables_perc + max: ~100 + min: ~0 + opposite: true + - entities: + - entity: sensor.eagle_200_meter_power_demand + name: Meter Power Demand + secondary_info: last-changed + - entity: sensor.electricity_renewables + secondary_info: last-changed + - entity: binary_sensor.electricity_price_spike + secondary_info: last-changed + - entity: sensor.electricity_general_price + secondary_info: last-changed + - entity: sensor.electricity_general_forecast + type: entities + - content: "{% set wattage = states.sensor\n | rejectattr('state', 'in', ['unknown',\ + \ 'unavailable'])\n | selectattr('attributes.device_class', 'defined')\n\ + \ | selectattr('attributes.device_class', 'eq', 'power')\n | selectattr('attributes.unit_of_measurement',\ + \ 'defined')\n | selectattr('attributes.unit_of_measurement', 'eq', \"W\"\ + )\n | rejectattr('name', 'search', 'Estimate')\n | rejectattr('name',\ + \ 'search', 'Inverter')\n | list\n %}\n\n{% set total = wattage|map(attribute='state')|map('float')|list|sum\ + \ / 1000.0|round(3) %}\n{% set meter = (states('sensor.inverter_load_power')|float/1000.0\ + \ + states('sensor.eagle_200_meter_power_demand')|float) |round(3) %}\n**TOTAL:**\ + \ {{ total }} kW\n**METER:** {{ meter }} kW\n**Unaccounted:** {{ (meter -\ + \ total) | round(2) }} kW\n\n{% for s in wattage|sort(attribute='state') %}\n\ + - {{ s.name}}: {{s.state}} W\n{% endfor %}" + type: markdown + - cards: + - entity: sensor.eagle_200_meter_power_demand + max: 5 + min: 0 + name: Current Usage + needle: true + severity: + green: 0 + red: 3 + yellow: 1.5 + type: gauge + - entity: sensor.electricity_general_price + max: 2 + min: 0 + name: Current Price + needle: true + severity: + green: -1 + red: 0.65 + yellow: 0.25 + type: gauge + unit: $ + type: horizontal-stack + - entity: sensor.current_electricity_cost + max: 5 + min: 0 + name: Current Cost + needle: true + severity: + green: -1000 + red: 1.5 + yellow: 0.75 + type: gauge + - entities: + - entity: sensor.eagle_200_meter_power_demand + - entity: sensor.electricity_general_price + - entity: sensor.current_electricity_cost + - entity: sensor.eagle_200_net_meter_energy_delivered_minus_received + hours_to_show: 24 + refresh_interval: 5 + type: history-graph + - card: + type: history-graph + filter: + exclude: + - name: /UPS/ + - name: /Eagle-200/ + - name: /Estimated Power Production/ + - state: unavailable + include: + - attributes: + device_class: power + - attributes: + unit_of_measurement: kW + - attributes: + unit_of_measurement: W + - attributes: + unit_of_measurement: A + - attributes: + device_class: current + type: custom:auto-entities + unique: true + - card: + show_header_toggle: false + type: entities + filter: + exclude: + - name: /Restart/ + - state: unavailable + include: + - device: /power|plug/ + domain: switch + options: + secondary_info: last-changed + show_empty: false + sort: + method: friendly_name + type: custom:auto-entities + unique: true + - type: energy-devices-graph + - type: energy-usage-graph + - card: + hours_to_show: 3 + title: Voltage + type: history-graph + filter: + exclude: + - entity_id: /nas_ups/ + - entity_id: /battery/ + - entity_id: /dht/ + - entity_id: /ble_voltage/ + include: + - entity_id: /voltage/ + type: custom:auto-entities + - entities: + - sensor.co2_intensity + type: history-graph + icon: hass:lightning-bolt + path: power + title: Electricity diff --git a/lovelace/lovelace.yaml b/lovelace/lovelace.yaml index 9c77796..55d1e1b 100644 --- a/lovelace/lovelace.yaml +++ b/lovelace/lovelace.yaml @@ -143,13 +143,13 @@ config: action: call-service service: media_player.select_source service_data: - source: Triple R 102.7 (Variety) + source: Triple R target: entity_id: media_player.denon_avr_x1600h_heos type: template conditions: - entity: sensor.current_living_room_media_player_source - state_not: Triple R 102.7 (Variety) + state_not: Triple R type: conditional - chip: content: PBS - {{ states('sensor.pbs_now_playing') }} @@ -158,13 +158,28 @@ config: action: call-service service: media_player.select_source service_data: - source: PBS 106.7FM Melbourne | (Variety) + source: PBS 106.7FM Melbourne target: entity_id: media_player.denon_avr_x1600h_heos type: template conditions: - entity: sensor.current_living_room_media_player_source - state_not: PBS 106.7FM Melbourne | (Variety) + state_not: PBS 106.7FM Melbourne + type: conditional + - chip: + content: KLFM + icon: mdi:music + tap_action: + action: call-service + service: media_player.select_source + service_data: + source: KLFM + target: + entity_id: media_player.denon_avr_x1600h_heos + type: template + conditions: + - entity: sensor.current_living_room_media_player_source + state_not: KLFM type: conditional - chip: content: JJ - {{ states('sensor.jj_now_playing') }} @@ -335,6 +350,15 @@ config: method: none type: custom:auto-entities unique: true + - entities: + battery: sensor.inverter_battery_power + battery_charge: sensor.inverter_battery_level + grid: sensor.eagle_200_meter_power_demand + solar: sensor.inverter_pv_power + kw_decimals: 2 + type: custom:power-flow-card + w_decimals: 0 + watt_threshold: 900 - elements: - attribute: mean entity: sensor.ble_temperature_living_room_a4c1382a9b6e @@ -407,6 +431,150 @@ config: type: custom:state-attribute-element image: /local/floorplan-top.jpg type: picture-elements + - calibration_source: + camera: true + entity: vacuum.dreame_p2028_4394_robot_cleaner + map_locked: true + map_modes: + - max_repeats: 3 + max_selections: 10 + predefined_selections: + - icon: + name: mdi:broom + x: -450 + y: -9175 + id: 8 + label: + offset_y: 35 + text: Analog Room + x: -450 + y: -9175 + - icon: + name: mdi:broom + x: -5625 + y: -9175 + id: 3 + label: + offset_y: 35 + text: Ri's Office + x: -5625 + y: -9175 + - icon: + name: mdi:broom + x: 2000 + y: -9700 + id: 4 + label: + offset_y: 35 + text: Laundry + x: 2000 + y: -9700 + - icon: + name: mdi:broom + x: 1925 + y: -6625 + id: 2 + label: + offset_y: 35 + text: Bathroom + x: 1925 + y: -6625 + - icon: + name: mdi:broom + x: -5750 + y: -6350 + id: 1 + label: + offset_y: 35 + text: Bo's Office + x: -5750 + y: -6350 + - icon: + name: mdi:broom + x: -2525 + y: -750 + id: 9 + label: + offset_y: 35 + text: Hallway + x: -2525 + y: -750 + - icon: + name: mdi:broom + x: 675 + y: -3100 + id: 5 + label: + offset_y: 35 + text: Kitchen + x: 675 + y: -3100 + - icon: + name: mdi:broom + x: -5575 + y: -2525 + id: 10 + label: + offset_y: 35 + text: Spare Room + x: -5575 + y: -2525 + - icon: + name: mdi:broom + x: 675 + y: 1825 + id: 6 + label: + offset_y: 35 + text: Living Room + x: 675 + y: 1825 + - icon: + name: mdi:broom + x: -5650 + y: 1025 + id: 7 + label: + offset_y: 35 + text: Bedroom + x: -5650 + y: 1025 + repeats_type: EXTERNAL + service_call_schema: + service: xiaomi_miot.call_action + service_data: + aiid: 1 + entity_id: '[[entity_id]]' + force_params: true + params: + - piid: 1 + value: 18 + - piid: 10 + value: '{"selects":[[[[selection_unwrapped]],[[repeats]],3,3,1]]}' + siid: 4 + template: vacuum_clean_segment + - template: vacuum_goto + - max_repeats: 5 + max_selections: 10 + repeats_type: EXTERNAL + service_call_schema: + service: xiaomi_miot.call_action + service_data: + aiid: 1 + entity_id: '[[entity_id]]' + force_params: true + params: + - piid: 1 + value: 19 + - piid: 10 + value: '{"areas":[[[[selection_unwrapped]],[[repeats]],1,1]]}' + siid: 4 + template: vacuum_clean_zone + map_source: + camera: camera.dreame_z10_pro_map + two_finger_pan: true + type: custom:xiaomi-vacuum-map-card + vacuum_platform: default icon: hass:home panel: false path: default_view @@ -495,225 +663,6 @@ config: icon: hass:thermometer path: climate title: Climate - - badges: - - entity: sensor.electricity_general_price - - entity: sensor.eagle_200_meter_power_demand - cards: - - link_dashboard: true - type: energy-distribution - - apex_config: - chart: - height: 250 - type: area - dataLabels: - enabled: false - fill: - gradient: - inverseColors: false - opacityFrom: 0.45 - opacityTo: 0.05 - shadeIntensity: 1 - stops: - - 20 - - 100 - - 100 - - 100 - type: gradient - legend: - show: false - stroke: - curve: smooth - show: true - width: 2 - xaxis: - labels: - datetimeFormatter: - day: ddd - month: ddd - type: datetime - graph_span: 35h - header: - colorize_states: true - show: true - show_states: true - title: Amber Price 24hrs - now: - color: red - label: Now - show: true - series: - - color: black - curve: smooth - entity: sensor.electricity_general_price - extend_to: now - name: Price - type: area - yaxis_id: price - - color: lightgrey - data_generator: "return entity.attributes.forecasts.map((entry) => {\n return\ - \ [new Date(entry.start_time), entry.per_kwh];\n});\n" - entity: sensor.electricity_general_forecast - name: Predicted Price - show: - in_chart: true - in_header: false - type: area - yaxis_id: price - - color: green - curve: smooth - entity: sensor.electricity_renewables - extend_to: now - name: Renewables in Grid - show: - in_chart: true - in_header: true - type: area - unit: '%' - yaxis_id: renewables_perc - - color: lightgreen - curve: smooth - data_generator: "return entity.attributes.forecasts.map((entry) => {\n return\ - \ [new Date(entry.start_time), entry.renewables];\n});\n" - entity: sensor.electricity_general_forecast - name: Renewables in Grid - show: - in_chart: true - in_header: false - type: area - unit: '%' - yaxis_id: renewables_perc - - color: grey - entity: sensor.electricity_general_forecast - name: Predicted Price - show: - in_chart: false - in_header: true - type: area - yaxis_id: price - span: - offset: -24h - start: minute - type: custom:apexcharts-card - yaxis: - - id: price - max: ~1 - min: ~-1 - - id: renewables_perc - max: ~100 - min: ~0 - opposite: true - - entities: - - entity: sensor.eagle_200_meter_power_demand - name: Meter Power Demand - secondary_info: last-changed - - entity: sensor.electricity_renewables - secondary_info: last-changed - - entity: binary_sensor.electricity_price_spike - secondary_info: last-changed - - entity: sensor.electricity_general_price - secondary_info: last-changed - - entity: sensor.electricity_general_forecast - type: entities - - cards: - - entity: sensor.eagle_200_meter_power_demand - max: 5 - min: 0 - name: Current Usage - needle: true - severity: - green: 0 - red: 3 - yellow: 1.5 - type: gauge - - entity: sensor.electricity_general_price - max: 2 - min: 0 - name: Current Price - needle: true - severity: - green: -1 - red: 0.65 - yellow: 0.25 - type: gauge - unit: $ - type: horizontal-stack - - entity: sensor.current_electricity_cost - max: 5 - min: 0 - name: Current Cost - needle: true - severity: - green: -1000 - red: 1.5 - yellow: 0.75 - type: gauge - - entities: - - entity: sensor.eagle_200_meter_power_demand - - entity: sensor.electricity_general_price - - entity: sensor.current_electricity_cost - - entity: sensor.eagle_200_net_meter_energy_delivered_minus_received - hours_to_show: 24 - refresh_interval: 5 - type: history-graph - - card: - type: history-graph - filter: - exclude: - - name: /UPS/ - - name: /Eagle-200/ - - name: /Estimated Power Production/ - - state: unavailable - include: - - attributes: - device_class: power - - attributes: - unit_of_measurement: kW - - attributes: - unit_of_measurement: W - - attributes: - unit_of_measurement: A - - attributes: - device_class: current - type: custom:auto-entities - unique: true - - card: - show_header_toggle: false - type: entities - filter: - exclude: - - name: /Restart/ - - state: unavailable - include: - - device: /power|plug/ - domain: switch - options: - secondary_info: last-changed - show_empty: false - sort: - method: friendly_name - type: custom:auto-entities - unique: true - - type: energy-devices-graph - - type: energy-usage-graph - - card: - hours_to_show: 3 - title: Voltage - type: history-graph - filter: - exclude: - - entity_id: /nas_ups/ - - entity_id: /battery/ - - entity_id: /dht/ - - entity_id: /ble_voltage/ - include: - - entity_id: /voltage/ - type: custom:auto-entities - - entities: - - sensor.co2_intensity - type: history-graph - icon: hass:lightning-bolt - path: power - title: Power - badges: [] cards: - calibration_source: diff --git a/lovelace/lovelace_dashboards.yaml b/lovelace/lovelace_dashboards.yaml index 8f3f298..031114c 100644 --- a/lovelace/lovelace_dashboards.yaml +++ b/lovelace/lovelace_dashboards.yaml @@ -34,3 +34,10 @@ items: show_in_sidebar: true title: Gardening url_path: lovelace-gardens +- icon: mdi:solar-power-variant + id: lovelace_solar + mode: storage + require_admin: false + show_in_sidebar: true + title: Solar + url_path: lovelace-solar diff --git a/lovelace/lovelace_resources.yaml b/lovelace/lovelace_resources.yaml index 5332ed6..d9f0160 100644 --- a/lovelace/lovelace_resources.yaml +++ b/lovelace/lovelace_resources.yaml @@ -11,9 +11,6 @@ items: - id: dc13a5629c8a409dad2800cca63fb016 type: module url: /hacsfiles/weather-card/weather-card.js -- id: 45a0fbe9612d4dbba973037d3d0edc99 - type: module - url: /hacsfiles/upcoming-media-card/upcoming-media-card.js - id: 69e31fab8ea64da890a5c68fc590320f type: module url: /hacsfiles/lovelace-xiaomi-vacuum-map-card/xiaomi-vacuum-map-card.js?hacstag=1933720442011 @@ -94,7 +91,7 @@ items: url: /hacsfiles/lovelace-paper-buttons-row/paper-buttons-row.js?hacstag=244872232101 - id: 78939a4781bd40f6accb3cba860a100f type: module - url: /hacsfiles/lovelace-mushroom/mushroom.js?hacstag=444350375190 + url: /hacsfiles/lovelace-mushroom/mushroom.js?hacstag=444350375200 - id: 4795f91c6d3a4fd3a5b1900f9990217e type: module url: /hacsfiles/stack-in-card/stack-in-card.js?hacstag=248954055020 @@ -112,16 +109,16 @@ items: url: /hacsfiles/lovelace-battery-entity-row/battery-entity-row.js?hacstag=303857065131 - id: 867c82efa08d47a3a9ccbe9f5afb238a type: module - url: /hacsfiles/numberbox-card/numberbox-card.js?hacstag=304967918310 + url: /hacsfiles/numberbox-card/numberbox-card.js?hacstag=304967918312 - id: 6a72c3dfa03446ffae4b9d8093bb5b7a type: module url: /hacsfiles/custom-ui/custom-ui.js?hacstag=267558148202204191 - id: 60cfcab39c6d46ea82623fc28bcecb9c type: module - url: /hacsfiles/power-flow-card/power-flow-card.js?hacstag=484538222250 + url: /hacsfiles/power-flow-card/power-flow-card.js?hacstag=484538222251 - id: 8217392f44e24fe98b652c7f36ab302e type: module - url: /hacsfiles/ha-sankey-chart/ha-sankey-chart.js?hacstag=455846088064 + url: /hacsfiles/ha-sankey-chart/ha-sankey-chart.js?hacstag=455846088070 - id: 84ed6341c9b245aba7e66cbdc51e2ccb type: module url: /hacsfiles/state-attribute-element/state-attribute-element.js?hacstag=142038085040