pirpy
(Borut)
February 14, 2019, 3:57pm
1
Hello
I made a modbus connestion from Hassio to solaredge inverter .
I’m accesing current power and powerfactor.
I have to calculate power with current power divide by1 or divide by 10 or 100 or 1000 depending on powerfactor, the powerfactor is 0,-1,-2 or -3
I have made a template but it does not work.
please help `
sepower:
friendly_name: ‘SEMoč’
value_template: >-
{% if is_state('sensor.sepf', '0') %}
{{sensor.sepwr}}
{% elif is_state('sensor.sepf', '-1') %}
{{sensor.sepwr/10}}
{% elif is_state('sensor.sepf', '-2') %}
{{sensor.sepwr/100}}
{% elif is_state('sensor.sepf', '-3') %}
{{sensor.sepwr/1000}}
{% else %}
0
{% endif %}
`
VDRainer
(🍻)
February 14, 2019, 4:37pm
2
pirpy:
{{sensor.sepwr/10}}
Maybe use
{{sensor.sepwr | float / 10}}
pirpy
(Borut)
February 14, 2019, 4:59pm
3
It is working if I put a number instead of sensor.sepwr, but does not work with sensor.sepwr .
it’s like, there is nothing in the sensor.sepwr
pirpy
(Borut)
February 14, 2019, 5:17pm
4
here is the hole thing
but still does not work
I get 0.0
- platform: modbus
scan_interval: 300
registers:
- name: sepwr
unit_of_measurement: W
slave: 1
register: 40083
scale: 1
- name: AC_Voltage
unit_of_measurement: V
slave: 1
register: 40080
scale: 0.1
- name: SEPF
unit_of_measurement: q
slave: 1
register: 40084
- platform: template
sensors:
sepower:
friendly_name: 'SEMoč'
unit_of_measurement: W
value_template: >-
{% if is_state('sensor.sepf', '0') %}
{{states.sensor.sepwr | float / 1}}
{% elif is_state('sensor.sepf', '-1') %}
{{states.sensor.sepwr | float / 10}}
{% elif is_state('sensor.sepf', '-2') %}
{{states.sensor.sepwr | float / 100}}
{% elif is_state('sensor.sepf', '-3') %}
{{states.sensor.sepwr | float / 1000}}
{% else %}
0
{% endif %}
VDRainer
(🍻)
February 14, 2019, 6:44pm
5
Ahh, sorry, needs to be
{{ states.sensor.sepwr.state | float / 1 }}
if the sensor.sepwr has a numeric value.
Check in Dev Tools/states.
pirpy
(Borut)
February 14, 2019, 9:21pm
7
here is the vorking code
modbus:
type: tcp
host: 192.168.1.24
port: 502
- platform: modbus
type: tcp
host: 192.168.1.24
port: 502
scan_interval: 10
registers:
- name: sepwr
unit_of_measurement: W
slave: 1
register: 40083
scale: 1
- name: AC_Voltage
unit_of_measurement: V
slave: 1
register: 40080
scale: 0.1
- name: SEPF
unit_of_measurement: q
slave: 1
register: 40084
- platform: template
#če je numerična vrednost je treba state zraven napisat
sensors:
sepower:
friendly_name: 'SEMoč'
unit_of_measurement: W
value_template: >-
{% if is_state('sensor.sepf', '0') %}
{{states.sensor.sepwr.state | float / 1}}
{% elif is_state('sensor.sepf', '-1') %}
{{states.sensor.sepwr.state | float / 10}}
{% elif is_state('sensor.sepf', '-2') %}
{{states.sensor.sepwr.state | float / 100}}
{% elif is_state('sensor.sepf', '-3') %}
{{states.sensor.sepwr.state | float / 1000}}
{% else %}
0
{% endif %}
1 Like
Hi pirpy,
you can massivly tighten your code by replacing the value_template by:
value_template: "{{states('sensor.I_AC_Power_RAW')|float * 10**states('sensor.I_AC_Power_SF')|float}}"