Skip to content

Instantly share code, notes, and snippets.

@zubir2k
Last active October 13, 2024 08:54
Show Gist options
  • Select an option

  • Save zubir2k/a7c5243ed2d7e328a5f0372b3be088af to your computer and use it in GitHub Desktop.

Select an option

Save zubir2k/a7c5243ed2d7e328a5f0372b3be088af to your computer and use it in GitHub Desktop.
Solplanet Inverter Template - IP and Serial No. maintained in a text input.

🌞 Solplanet Inverter Template

Easily apply template with Text input for inverter IP and serial no.
Note:

  1. If you have battery, it will fetch battery information such as SoC, Voltage, Amps, Current.
  2. I use ShellyEM to read reverse energy via CT Clamp.

🛠️ Initial Setup

Enter inverter IP Address and Serial Number to these input_text entity:
image

⚡ Energy Dashboard Setup

  • Solar Production - sensor.solplanet_mppt_power
  • Battery Charging - sensor.solplanet_battery_charging_daily
  • Battery Discharging - sensor.solplanet_battery_discharging_daily

🖥️ Dashboard

Sample dashboard (solplanet-dashboard.yaml) as below:
image

## Aiswei Solplanet Inverter Template
## Template for Solplanet Inverter consist of 2 API calls for PV and Battery.
## Last modified: 23/09/2024
## Inverter Input ##
input_text:
solplanet_ip:
name: "Solplanet IP"
icon: mdi:ip
solplanet_serialno:
name: "Solplanet SerialNo"
icon: mdi:card-account-details
rest:
## Battery Sensors ##
- resource_template: "http://{{ states('input_text.solplanet_ip') }}:8484/getdevdata.cgi?device=4&sn={{ states('input_text.solplanet_serialno') }}"
scan_interval: 10
sensor:
- name: "Solplanet EPS Voltage"
unique_id: solplanet_eps_voltage
value_template: "{{ value_json.vesp | float / 10 }}"
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
- name: "Solplanet EPS Current"
unique_id: solplanet_eps_current
value_template: "{{ value_json.cesp | float / 10 }}"
unit_of_measurement: "A"
device_class: current
state_class: measurement
- name: "Solplanet EPS Power"
unique_id: solplanet_eps_power
value_template: "{{ value_json.pesp | float }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Solplanet Battery State"
unique_id: solplanet_battery_state
value_template: >-
{% set bst = value_json.bst %}
{% if bst == 1 %}Idle
{% elif bst == 2 %}Charging
{% elif bst == 3 %}Discharging
{% elif bst == 4 %}Fault
{% else %}Unknown ({{ bst }}){% endif %}
icon: >-
{% set bst = value_json.bst %}
{% if bst == 1 %}mdi:battery
{% elif bst == 2 %}mdi:battery-positive
{% elif bst == 3 %}mdi:battery-negative
{% elif bst == 4 %}mdi:battery-alert-variant
{% else %}mdi:battery-unknown{% endif %}
- name: "Solplanet Battery State of Charge"
unique_id: solplanet_battery_soc
unit_of_measurement: "%"
value_template: "{{ value_json.soc }}"
icon: mdi:battery
device_class: battery
- name: "Solplanet Battery State of Health"
unique_id: solplanet_battery_soh
unit_of_measurement: "%"
value_template: "{{ value_json.soh }}"
icon: mdi:battery
- name: "Solplanet Battery Temperature"
unique_id: solplanet_battery_temperature
value_template: "{{ value_json.tb | float / 10 }}"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
- name: "Solplanet Battery Voltage"
unique_id: solplanet_battery_voltage
value_template: "{{ value_json.vb | float / 100 }}"
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
- name: "Solplanet Battery Current"
unique_id: solplanet_battery_current
value_template: "{{ value_json.cb | float / 10 }}"
unit_of_measurement: "A"
device_class: current
state_class: measurement
- name: "Solplanet Battery Power"
unique_id: solplanet_battery_power
value_template: "{{ value_json.pb | float }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Solplanet Battery Charging Power"
unique_id: solplanet_battery_charging_power
value_template: >-
{% if value_json.pb | int < 0 %}{{ (value_json.pb | int * -1) }}
{% else %}0{% endif %}
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Solplanet Battery Discharging Power"
unique_id: solplanet_battery_discharging_power
value_template: >-
{% if value_json.pb | int > 0 %}{{ value_json.pb | int }}
{% else %}0{% endif %}
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Solplanet Battery PV Power"
unique_id: solplanet_battery_pv_power
value_template: "{{ value_json.ppv | float }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Solplanet Battery Daily Production"
unique_id: solplanet_battery_daily_production
unit_of_measurement: "kWh"
value_template: "{{ value_json.etdpv | float / 1000 }}"
device_class: energy
state_class: total_increasing
- name: "Solplanet Battery Total Production"
unique_id: solplanet_battery_total_production
value_template: "{{ value_json.etopv | float / 1000 }}"
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
## Inverter Sensors ##
- resource_template: "http://{{ states('input_text.solplanet_ip') }}:8484/getdevdata.cgi?device=2&sn={{ states('input_text.solplanet_serialno') }}"
scan_interval: 10
sensor:
- name: "Solplanet Date/Time"
unique_id: solplanet_datetime
value_template: >-
{% set solplanetdatetime = value_json.tim | replace('"', '') %}
{{ as_timestamp(strptime(solplanetdatetime, '%Y%m%d%H%M%S')) | timestamp_local }}
device_class: timestamp
- name: "Solplanet Current Production"
unique_id: solplanet_current_production
value_template: "{{ value_json.pac | float }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Solplanet Daily Production"
unique_id: solplanet_daily_production
value_template: "{{ value_json.etd | float / 10 }}"
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
- name: "Solplanet Total Production"
unique_id: solplanet_total_production
value_template: "{{ value_json.eto | float / 10 }}"
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
- name: "Solplanet Temperature"
unique_id: solplanet_temperature
value_template: "{{ value_json.tmp | float / 10 }}"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
- name: "Solplanet AC Voltage"
unique_id: solplanet_ac_voltage
value_template: "{{ value_json.vac.0 | float / 10 }}"
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
- name: "Solplanet AC Current"
unique_id: solplanet_ac_current
value_template: "{{ value_json.iac.0 | float / 10 }}"
unit_of_measurement: "A"
device_class: current
state_class: measurement
- name: "Solplanet AC Power"
unique_id: solplanet_ac_power
value_template: "{{ '{:.2f}'.format((value_json.vac.0 | float / 10) * (value_json.iac.0 | float / 10)) }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Solplanet MPPT1 Voltage"
unique_id: solplanet_mppt1_voltage
value_template: "{{ value_json.vpv.0 | float / 10 }}"
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
- name: "Solplanet MPPT1 Current"
unique_id: solplanet_mppt1_current
value_template: "{{ value_json.ipv.0 | float / 100 }}"
unit_of_measurement: "A"
device_class: current
state_class: measurement
- name: "Solplanet MPPT1 Power"
unique_id: solplanet_mppt1_power
value_template: "{{ '{:.2f}'.format((states('sensor.solplanet_mppt1_voltage') | float * states('sensor.solplanet_mppt1_current') | float)) }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Solplanet MPPT2 Voltage"
unique_id: solplanet_mppt2_voltage
value_template: "{{ value_json.vpv.1 | float / 10 }}"
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
- name: "Solplanet MPPT2 Current"
unique_id: solplanet_mppt2_current
value_template: "{{ value_json.ipv.1 | float / 100 }}"
unit_of_measurement: "A"
device_class: current
state_class: measurement
- name: "Solplanet MPPT2 Power"
unique_id: solplanet_mppt2_power
value_template: "{{ '{:.2f}'.format((states('sensor.solplanet_mppt2_voltage') | float * states('sensor.solplanet_mppt2_current') | float)) }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
- name: "Solplanet MPPT Power"
unique_id: solplanet_mppt_power
value_template: "{{ '{:.2f}'.format((states('sensor.solplanet_mppt1_power') | float + states('sensor.solplanet_mppt2_power') | float)) }}"
unit_of_measurement: "W"
device_class: power
state_class: measurement
## Additional Sensors ##
sensor:
- platform: integration
source: sensor.solplanet_mppt_power
name: "Solplanet MPPT Energy"
unit_prefix: k # Converts Wh to kWh
round: 2
method: trapezoidal
- platform: integration
source: sensor.solplanet_battery_charging_power
name: "Solplanet Battery Charging Energy"
unit_prefix: k # Converts Wh to kWh
round: 2
method: trapezoidal
- platform: integration
source: sensor.solplanet_battery_discharging_power
name: "Solplanet Battery Discharging Energy"
unit_prefix: k # Converts Wh to kWh
round: 2
method: trapezoidal
- platform: history_stats
name: "Solplanet Battery Discharging Duration"
entity_id: sensor.solplanet_battery_state
state: 'Discharging'
type: time
start: '{{ now().replace(hour=0, minute=0, second=0) }}'
end: '{{ now() }}'
- platform: history_stats
name: "Solplanet Battery Charging Duration"
entity_id: sensor.solplanet_battery_state
state: 'Charging'
type: time
start: '{{ now().replace(hour=0, minute=0, second=0) }}'
end: '{{ now() }}'
utility_meter:
solplanet_mppt_production_daily:
name: "Solplanet MPPT Production Daily"
unique_id: solplanet_mppt_production_daily
cycle: daily
source: sensor.solplanet_mppt_energy
solplanet_battery_charging_daily:
name: "Solplanet Battery Charging Daily"
unique_id: solplanet_battery_charging_daily
cycle: daily
source: sensor.solplanet_battery_charging_energy
solplanet_battery_discharging_daily:
name: "Solplanet Battery Discharging Daily"
unique_id: solplanet_battery_discharging_daily
cycle: daily
source: sensor.solplanet_battery_discharging_energy
title: Solar
path: solar
icon: mdi:solar-power-variant-outline
type: sections
max_columns: 3
sections:
- type: grid
cards:
- type: entities
entities:
- entity: sensor.solplanet_mppt_power
name: Actual Production
icon: mdi:solar-power-variant
- entity: sensor.power_production_now
name: Forecasted Production
icon: mdi:solar-power-variant-outline
- type: section
label: Energy Reading
- entity: sensor.solplanet_eps_power
type: custom:multiple-entity-row
name: EPS
icon: mdi:car-battery
show_state: false
entities:
- entity: sensor.solplanet_eps_power
name: Power
- entity: sensor.solplanet_eps_current
name: Current
- entity: sensor.solplanet_eps_voltage
name: Voltage
- entity: sensor.solplanet_ac_power
type: custom:multiple-entity-row
name: Inverter
icon: mdi:current-ac
show_state: false
entities:
- entity: sensor.solplanet_ac_power
name: Power
- entity: sensor.solplanet_ac_current
name: Current
- entity: sensor.solplanet_ac_voltage
name: Voltage
- entity: sensor.tnb_power_source
type: custom:multiple-entity-row
name: TNB Grid
icon: mdi:transmission-tower
show_state: false
entities:
- entity: sensor.tnb_power_source
name: Power
- entity: sensor.tnb_current_source
name: Current
- entity: sensor.tnb_voltage_source
name: Voltage
- type: section
label: Solar by String
- entity: sensor.solplanet_mppt1_power
type: custom:multiple-entity-row
name: MPPT 1 (Front)
icon: mdi:solar-panel
show_state: false
entities:
- entity: sensor.solplanet_mppt1_power
name: Power
- entity: sensor.solplanet_mppt1_current
name: Current
- entity: sensor.solplanet_mppt1_voltage
name: Voltage
- entity: sensor.solplanet_mppt2_power
type: custom:multiple-entity-row
name: MPPT 2 (Back)
icon: mdi:solar-panel
show_state: false
entities:
- entity: sensor.solplanet_mppt2_power
name: Power
- entity: sensor.solplanet_mppt2_current
name: Current
- entity: sensor.solplanet_mppt2_voltage
name: Voltage
title: ⛅ Solar Energy
view_layout:
position: sidebar
- type: tile
entity: sensor.solplanet_battery_state
name: Battery State
icon: mdi:car-battery
- type: tile
name: State of Charge
layout_options:
grid_columns: 2
grid_rows: 1
entity: sensor.solplanet_battery_state_of_charge
- type: entities
title: 🔋 Battery Information
entities:
- entity: sensor.solplanet_battery_power
type: custom:multiple-entity-row
name: Battery Reading
icon: mdi:car-battery
show_state: false
entities:
- entity: sensor.solplanet_battery_power
name: Power
- entity: sensor.solplanet_battery_current
name: Current
- entity: sensor.solplanet_battery_voltage
name: Voltage
- entity: sensor.solplanet_battery_charging_daily
type: custom:multiple-entity-row
name: Charge State
icon: mdi:car-battery
show_state: false
entities:
- entity: sensor.solplanet_battery_state_of_health
name: Health
- entity: sensor.solplanet_battery_charging_power
name: Charging
- entity: sensor.solplanet_battery_discharging_power
name: Discharging
- entity: sensor.solplanet_battery_charging_duration
type: custom:multiple-entity-row
name: Battery Duration
icon: mdi:car-battery
show_state: false
entities:
- entity: sensor.solplanet_battery_charging_duration
name: Charging
- entity: sensor.solplanet_battery_discharging_duration
name: Discharging
- type: gauge
entity: sensor.solplanet_temperature
name: Inverter Temperature
max: 70
min: -25
needle: true
severity:
green: 0
yellow: 50
red: 65
view_layout:
position: sidebar
layout_options:
grid_columns: 2
grid_rows: null
- type: gauge
entity: sensor.solplanet_battery_temperature
name: Battery Temperature
needle: true
severity:
green: 0
yellow: 45
red: 80
layout_options:
grid_columns: 2
grid_rows: auto
- type: grid
cards:
- show_current: true
show_forecast: false
type: weather-forecast
entity: weather.openweathermap
forecast_type: hourly
layout_options:
grid_columns: 2
grid_rows: 3
name: Kajang, Selangor
secondary_info_attribute: cloud_coverage
- type: tile
entity: sun.sun
- type: tile
entity: sensor.sun_next_rising
layout_options:
grid_columns: 2
grid_rows: 1
- type: tile
entity: binary_sensor.water_leak
name: Moisture Sensor
- type: energy-solar-graph
title: Solar Production
- type: energy-usage-graph
title: Energy Usage
- type: grid
cards:
- type: energy-distribution
title: 🧭 Energy Distribution
- type: markdown
content: >+
![Solplanet](https://datav.aisweicloud.com/ProductImage/inverter/en_US/ASW%203000H-S2%20%7E6000H-S2%20%20Solplanet%20logo.png)
**Model:** ASW6000H-S2
**Serial No:** {{ states('input_text.solplanet_serialno') }}
**IP Address:** {{ states('input_text.solplanet_ip') }}
**Date/Time:** {{
as_datetime(states('sensor.solplanet_date_time')).astimezone().strftime('%-d
%b %Y, %-I:%M %p') }}
layout_options:
grid_columns: 2
grid_rows: 6
- type: tile
name: Solar Production
icon: mdi:solar-power
entity: sensor.solplanet_mppt_production_daily
- type: tile
entity: sensor.tnb_current_day_energy
name: Grid Consumption
icon: mdi:transmission-tower-export
- type: tile
entity: sensor.tnb_nem_current_day
name: Export to Grid
icon: mdi:transmission-tower-import
- type: energy-grid-neutrality-gauge
title: Net Consumption
layout_options:
grid_columns: 2
grid_rows: 3
cards: []
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment