Działanie głowic Zigbee Tuya

Szukam jakiejś logiki dla działania głowic Zigbee Tuya w trybie automatyczny - manual :frowning:
Obserwuję wykresy temperatur i ustawień głowicy i zastanawiam się co producent miał na myśli…
Przy interwale 15 minut i skoku głowicy o 5% to bezwładność tego układu jest nie do zaakceptowania.
Wygląda na to, że jedynym rozwiązaniem jest zewnętrzna automatyka sterująca zaworem ON/OFF na podstawie zewnętrznego czujnika temperatury.
Ale też nie wiem skąd nagle po osiągnięciu 40% jest natychmiastowe zejście do 0% i w drugą stronę z 40% na 100%?


Jak macie to u siebie rozwiązane? Muszę ogarnąć 12 głowic…

Generic thermostat z amplitudą 0.1 stopnia.

‘Jedyny minus to ten w baterii czujnika temperatury’ :wink:
A tak na serio to zależność ogrzewania od tego czy HA działa gdzieś mi z tyłu głowy zalega, chociaż w razie ‘W’ mogę zdemontować głowice w rozdzielni lub przełączyć je w UI EspHome.

Dodałem automatyzację na podstawie schematu, której zadaniem jest synchronizacja temperatury lokalnej z temperaturą z zewnętrznego sensora.
Niestety, dla jednej głowicy nie działa :frowning: Nie synchronizuje a logi milczą.
Schemat:

blueprint:
  name: Sync TRV tempature
  description: Sync external tempature sensor with TRV tempature
  domain: automation
  input:
    ieeeaddressoftrv:
      name: IEEE Address
      description: This is the address of the TRV found in your zigbee database example 0x459877fffe1f2e83
    external_temp:
      name: Select the external temp sensor
      description: This will be your external temp sensor
      selector:
        entity:
          domain: sensor
    climate_name:
      name: Climate entry
      description: This will be the TRV it self in home assistant
      selector:
        entity:
          domain: climate
alias: Calibrate Thermostat
description: ''

variables:
  target_device: !input 'ieeeaddressoftrv'
  climate_device: !input 'climate_name'
  external_temperature: !input 'external_temp'
  adjust: "{{state_attr(climate_device, 'current_temperature')}}"
trigger:
  - platform: state
    entity_id: !input 'external_temp'
    for:
      hours: 0
      minutes: 0
      seconds: 15
      milliseconds: 0
  - platform: state
    entity_id: !input 'climate_name'
    for:
      hours: 0
      minutes: 0
      seconds: 15
      milliseconds: 0
condition:
  condition: and
  conditions:
    - condition: template
      value_template: "{{ states(external_temperature) != 'unavailable' }}"
    - condition: template
      value_template: "{{ states(external_temperature) != 'unknown' }}"
    - condition: template
      value_template: "{{ state_attr(climate_device,'local_temperature_calibration')|float(0) | round(1, 'half') !=( states(external_temperature)|float(0) | round(1,'half') - state_attr(climate_device,'local_temperature')|float(0) | round(1, 'half') + state_attr(climate_device,'local_temperature_calibration')|float(0) | round(1, 'half')) }}"
action:
  - service: mqtt.publish
    data_template:
      topic: zigbee2mqtt/{{ target_device }}/set/local_temperature_calibration
      payload_template: >-
        {{states(external_temperature)|float(0) | round(1,'half') - state_attr(climate_device,'local_temperature')|float(0) | round(1, 'half') + state_attr(climate_device,'local_temperature_calibration')|float(0) | round(1, 'half') }}
  - delay: 5
mode: single
max_exceeded: silent

Automatyzacja, która synchronizuje:

- id: '1640602319171'
  alias: ZBTS03 - Sync TRV tempature
  description: Jadalnia
  use_blueprint:
    path: homeassistant/sync_trv_temperature.yaml
    input:
      climate_name: climate.zbts03_0x2c1165fffe55c888
      ieeeaddressoftrv: '0x2c1165fffe55c888'
      external_temp: sensor.parter_2

i automatyzacja, która nie synchronizuje

- id: '1640614559445'
  alias: ZBST04 - Salon Sync TRV tempature
  description: ''
  use_blueprint:
    path: homeassistant/sync_trv_temperature.yaml
    input:
      climate_name: climate.zbts04_0x2c1165fffe3a7ff4
      ieeeaddressoftrv: '0x2c1165fffe3a7ff4'
      external_temp: sensor.parter_2

Może ktoś wpadnie na to dlaczego ta druga nie działa?
A może ktoś ma taką automatyzacje w node-red?

Znaczy się automatyzacja się uruchamia, tylko nie przynosi efektu. Głowica na nią nie reaguje.

2|ais     | 2021-12-27 15:30:26 INFO (MainThread) [homeassistant.components.automation.zbst04_salon_sync_trv_tempature] ZBST04 - Salon Sync TRV tempature: Running automation actions
2|ais     | 2021-12-27 15:30:26 INFO (MainThread) [homeassistant.components.automation.zbst04_salon_sync_trv_tempature] ZBST04 - Salon Sync TRV tempature: Executing step call service
2|ais     | 2021-12-27 15:30:26 INFO (MainThread) [homeassistant.components.automation.zbst04_salon_sync_trv_tempature] ZBST04 - Salon Sync TRV tempature: Executing step delay 0:00:05

I zero odpowiedzi od zigbee2mqtt. A pozostałych 11 przypadkach wywołanie automatyzacji zwraca odpowiedź

2|ais     | 2021-12-27 15:31:32 INFO (MainThread) [homeassistant.components.automation.zbts06_sync_trv_tempature] ZBTS06 - Sync TRV tempature: Running automation actions
2|ais     | 2021-12-27 15:31:32 INFO (MainThread) [homeassistant.components.automation.zbts06_sync_trv_tempature] ZBTS06 - Sync TRV tempature: Executing step call service
2|ais     | 2021-12-27 15:31:32 INFO (MainThread) [homeassistant.components.automation.zbts06_sync_trv_tempature] ZBTS06 - Sync TRV tempature: Executing step delay 0:00:05
5|zigbee  | Zigbee2MQTT:info  2021-12-27 15:31:39: MQTT publish: topic 'zigbee2mqtt/ZBTS06', payload '{"auto_lock":"MANUAL","away_mode":"OFF","away_preset_days":1,"away_preset_temperature":15,"battery_low":fa lse,"boost_time":300,"child_lock":"UNLOCK","comfort_temperature":20,"current_heating_setpoint":16,"eco_temperature":15,"force":"normal","holidays":[{"hour":6,"minute":0,"temperature":20},{"hour":8,"minute":0, "temperature":15},{"hour":11,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}],"linkquality":215,"local_t emperature":15.5,"local_temperature_calibration":-4,"max_temperature":35,"min_temperature":5,"position":80,"preset":"manual","system_mode":"auto","update":{"state":"idle"},"update_available":false,"valve_dete ction":null,"week":"5+2","window_detection":"OFF","window_detection_params":{"minutes":10,"temperature":5},"workdays":[{"hour":6,"minute":0,"temperature":20},{"hour":8,"minute":0,"temperature":15},{"hour":11, "minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}]}'
5|zigbee  | Zigbee2MQTT:info  2021-12-27 15:31:39: MQTT publish: topic 'zigbee2mqtt/ZBTS06', payload '{"auto_lock":"MANUAL","away_mode":"OFF","away_preset_days":1,"away_preset_temperature":15,"battery_low":fa lse,"boost_time":300,"child_lock":"UNLOCK","comfort_temperature":20,"current_heating_setpoint":16,"eco_temperature":15,"force":"normal","holidays":[{"hour":6,"minute":0,"temperature":20},{"hour":8,"minute":0, "temperature":15},{"hour":11,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}],"linkquality":207,"local_t emperature":15.5,"local_temperature_calibration":-4.5,"max_temperature":35,"min_temperature":5,"position":80,"preset":"manual","system_mode":"auto","update":{"state":"idle"},"update_available":false,"valve_de tection":null,"week":"5+2","window_detection":"OFF","window_detection_params":{"minutes":10,"temperature":5},"workdays":[{"hour":6,"minute":0,"temperature":20},{"hour":8,"minute":0,"temperature":15},{"hour":1 1,"minute":30,"temperature":15},{"hour":12,"minute":30,"temperature":15},{"hour":17,"minute":30,"temperature":20},{"hour":22,"minute":0,"temperature":15}]}'

Wychodzi na to, że komunikacja do głowicy nie działa :frowning:

Po którymś restarcie zigbee zaczęło się aktualizować… nie ogarniam tej kuwety :frowning:

ja mam na tej i działa spróbuj

Spoko, moja automatyzacja działa. Chciałem coś na node-red :wink:

Możesz sobie moje zobaczyć,
zmiana docelowej temperatury na głowicy na podst. odczytu z zewnętrznego czujnika.
Termostatem gdzie ustawiamy temp jaka faktycznie ma być w pokoju jest pomocnik z liczbą.

[{"id":"430d13f003702405","type":"server-state-changed","z":"fb7ad2d6d88b2fd4","name":"Temperatura Mały","server":"4d0e02c9.2307bc","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.czujnik_temeperatury_maly_temperature","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"","halt_if_type":"num","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"temperatura_z_czujnika","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":190,"y":360,"wires":[["c196fcfec7891979"]]},{"id":"4b7f8669d5e8160d","type":"switch","z":"fb7ad2d6d88b2fd4","name":"","property":"temperatura_z_czujnika","propertyType":"msg","rules":[{"t":"lt","v":"tempertaura_z_termostatu","vt":"msg"},{"t":"gte","v":"tempertaura_z_termostatu","vt":"msg"}],"checkall":"false","repair":false,"outputs":2,"x":650,"y":340,"wires":[["a42411098869508a"],["784ad074a3ad9f78"]]},{"id":"c196fcfec7891979","type":"api-current-state","z":"fb7ad2d6d88b2fd4","name":"Termostat maly","server":"4d0e02c9.2307bc","version":2,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.termostat_w_malym","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"tempertaura_z_termostatu","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":420,"y":360,"wires":[["4b7f8669d5e8160d"]]},{"id":"056757fc38983424","type":"server-state-changed","z":"fb7ad2d6d88b2fd4","name":"termostat maly","server":"4d0e02c9.2307bc","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_number.termostat_w_malym","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"","halt_if_type":"num","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"tempertaura_z_termostatu","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":180,"y":310,"wires":[["e7f7554de405ba17"]]},{"id":"e7f7554de405ba17","type":"api-current-state","z":"fb7ad2d6d88b2fd4","name":"Temperatura Mały","server":"4d0e02c9.2307bc","version":2,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujnik_temeperatury_maly_temperature","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"temperatura_z_czujnika","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":420,"y":310,"wires":[["4b7f8669d5e8160d"]]},{"id":"0b2f25d7506e2100","type":"comment","z":"fb7ad2d6d88b2fd4","name":"Mały","info":"","x":150,"y":270,"wires":[]},{"id":"0ebb18f5c09ba006","type":"function","z":"fb7ad2d6d88b2fd4","name":"","func":"var liczba = msg.temperatura_z_czujnika - msg.tempertaura_z_termostatu;\nliczba = liczba.toFixed(1) * 2;\nliczba =  Math.round(liczba);\n\nmsg.roznica_temperatur = liczba;\n\nmsg.ustaw_temperature = msg.kaloryfer_temperatura - liczba;\n\n\nmsg.payload=\n{\n    \"data\":\n    {\n        \"temperature\": msg.ustaw_temperature,\n    }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1320,"y":360,"wires":[["9b774b8401a0a07b"]]},{"id":"784ad074a3ad9f78","type":"api-current-state","z":"fb7ad2d6d88b2fd4","name":"kaloryfer maly","server":"4d0e02c9.2307bc","version":2,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"climate.kaloryfer_maly","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"kaloryfer_temperatura","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":850,"y":360,"wires":[["054f337a67460501"]]},{"id":"054f337a67460501","type":"change","z":"fb7ad2d6d88b2fd4","name":"","rules":[{"t":"set","p":"kaloryfer_temperatura","pt":"msg","to":"data.attributes.current_temperature","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1090,"y":360,"wires":[["0ebb18f5c09ba006"]]},{"id":"9b774b8401a0a07b","type":"api-call-service","z":"fb7ad2d6d88b2fd4","name":"Kaloryfer maly","server":"4d0e02c9.2307bc","version":3,"debugenabled":false,"service_domain":"climate","service":"set_temperature","entityId":"climate.kaloryfer_maly","data":"","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1490,"y":360,"wires":[[]]},{"id":"d68bda88b29cace6","type":"function","z":"fb7ad2d6d88b2fd4","name":"","func":"var liczba = msg.temperatura_z_czujnika - msg.tempertaura_z_termostatu;\nliczba = liczba.toFixed(1) * 2;\nliczba =  Math.round(liczba);\n\nmsg.roznica_temperatur = liczba;\n\nmsg.ustaw_temperature = msg.kaloryfer_temperatura + liczba;\n\n\nmsg.payload=\n{\n    \"data\":\n    {\n        \"temperature\": msg.ustaw_temperature,\n    }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1320,"y":320,"wires":[["cf0d09d82fb44158"]]},{"id":"a42411098869508a","type":"api-current-state","z":"fb7ad2d6d88b2fd4","name":"kaloryfer maly","server":"4d0e02c9.2307bc","version":2,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"climate.kaloryfer_maly","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"kaloryfer_temperatura","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":850,"y":320,"wires":[["6dcb1098e17dc27e"]]},{"id":"6dcb1098e17dc27e","type":"change","z":"fb7ad2d6d88b2fd4","name":"","rules":[{"t":"set","p":"kaloryfer_temperatura","pt":"msg","to":"data.attributes.current_temperature","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1090,"y":320,"wires":[["d68bda88b29cace6"]]},{"id":"cf0d09d82fb44158","type":"api-call-service","z":"fb7ad2d6d88b2fd4","name":"Kaloryfer maly","server":"4d0e02c9.2307bc","version":3,"debugenabled":false,"service_domain":"climate","service":"set_temperature","entityId":"climate.kaloryfer_maly","data":"","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1490,"y":320,"wires":[[]]},{"id":"4d0e02c9.2307bc","type":"server","name":"Asystent domowy","version":1,"legacy":false,"addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]
1 polubienie