W takim razie, popraw mnie jeżeli założenia są błędne:
- jeżeli w PLC jest wartość 0 to światło jest wyłączone
- jeżeli w PLC jest wartość od 1 do 100 to światło jest włączone a
brightness
w HA obliczasz wg wzoru:((states('sensor.plc_kuchnia_led') | int ) * 255 / 100) | round(0)
co opowiada wartości 255 przy wartości 100 w PLC - jeżeli w HA będziesz zmieniał
brightness
(w zakresie 0-255) to do sterownika PLC musisz wysłać wartość obliczoną wg wzoru:(brightness | float / 255) * 100 | int
.
Wg mnie konfiguracja powinna wyglądać tak:
sensor:
- platform: modbus
scan_interval: 1
registers:
- name: plc_kuchnia_led
hub: fatek1
slave: 1
register: 100
light:
- platform: template
lights:
kuchnia:
friendly_name: "Kuchnia LED"
value_template: "{{ states('sensor.plc_kuchnia_led') | int > 0 }}"
level_template: >
{% if (states('sensor.plc_kuchnia_led') | int) == 0 %}
{{ (states('sensor.plc_kuchnia_led') | int) }}
{% else %}
{{ ((states('sensor.plc_kuchnia_led') | int ) * 255 / 100) | round(0) }}
{% endif %}
turn_on:
- service: modbus.write_register
data:
hub: fatek1
unit: 1
address: 100
value: 100
turn_off:
- service: modbus.write_register
data:
hub: fatek1
unit: 1
address: 100
value: 0
set_level:
- service: modbus.write_register
data:
hub: fatek1
unit: 1
address: 100
data_template:
value: "{{ (brightness | float / 255) * 100 | int }}"
Do przetestowania jest także wysłanie danych do PLC w ten sposób:
set_level:
- service: modbus.write_register
data_template:
hub: fatek1
unit: 1
address: 100
value: "{{ (brightness | float / 255) * 100 | int }}"