ZigBee2Mqtt - Dwa ściemniacze na jedną żarówkę

Mam dwa ściemniacze ZigBee.
Pierwszy dopuszkowy z potencjometrem, który steruje zwykłymi żarówkami. To on fizycznie reguluje ich świecenie.
Drugi IKEA dwuprzyciskowy (w sumie to nie ściemniacz tylko “pilot”), który “zwraca” tylko akcje klik lub push. W ekosystemie ikea da się go “zbindować” bezpośrednio z żarówką.
Kliknięciami robi się ON/OFF a naciśnięciem Dim.
Potrzebuję zrobić tak aby IKEA “pilot” zadawał wartości na tym pierwszym klasycznym i robił jako drugi
ściemniacz. Bindowanie w ZigBee2Mqtt nie działa więc poszukuję chytrego sposobu aby to ożenić.

Hmm oba ściemniacze sterują ten sam zestaw żarówek? To może pobrać z MQTT warość jasnosci pierwszego pilota i zmieniać ją z drugiego pilota? W NR?

Tak zamyślałem na początku :slight_smile: …ale pilot daje tylko on, off, move_up, move_down, stop - nie ma czegoś takiego jak brightness. Można by w NR zrobić licznik pseudo brightness ale chciałem coś chytrego… coś jak w przypadku zbindowania pilota ze smartLED ikea. W jednym przypadku mam takie powiązanie i odbywa się to na poziomie Zigbee (p2p lub rutera - tego nie wiem).

Może i tak. Ja taka jasność na takim pilocie ikea mam w NR. Nie mam rozwiązania z potencjometrem. Ale zobacz jak to u mnie działa. Może coś wykorzystasz :slight_smile:
flows.json (13,8 KB)

1 polubienie

Dzięki… z ciekawości zapytam co tam robi count presses? To jakaś sztuczka z wyborem sterowanej żarówki?
Chyba jednak pozostaje NR i doczytam co robi loop timer. Będę musiał to zrobić trochę inaczej bo drugim punktem sterowania jest potencjometr i dla poprawnego działania jego zmiany muszę zwrotnie aktualizować.

To taki ficzer :stuck_out_tongue: Mam jeden pilot, ale dwie lampy w różnych miejscach. Jedno naciśnięcie, włącza się jedna, dwa to druga, trzy obie. Jeszcze mam tam pewien problem właśnie z regulacją jasności, bo wtedy reagują obie, nawet ta wyłączona, ale to tak do rozwiązania na przyszłość :slight_smile:

Te nody zigbee2mqtt to coś więcej wnoszą? Wyglądają jakby był to zwykły odczyt/zapis po mqtt.
Pytam bo jestem zwolennikiem działania na palecie podstawowej.

Hmm, raczej nie. Może po prostu bardziej przyjemnie. Widzą od razu urządzenia w drzewie MQTT a w tradycyjnym MQTT in/out musisz chyba lecieć po tematach. Niby to samo, ale trochę łatwiej. Używam tych i tych, zależy co mi łatwiej. W stabilności nie ma różnicy. U mnie większość jest oparta na MQTT<->NR, a sam HA to ewentualnie integracje i panel.

@gregusz …uprościłem Twój proces. Do regulacji nie jest potrzebne liczenie brigthness.
Odpadają więc niezalecane pętle jak również niestandardowe nody.
dimmer
flows (43).json (2,9 KB)
Wykorzystałem komendę brightness_move

Jestem kontent :smile:

1 polubienie

O tym nie pomyślałem. A chyba czytałem. Muszę przetestować w wolnej chwili. Zawsze to 2 nody mniej na każde sterowanie i prostszy cały flow. Może w końcu dorobię ten system sprawdzania, która żarówka świeci i tylko ją ma regulować :slight_smile:

Dla tych którzy lubią gotowce.
https://flows.nodered.org/node/node-red-contrib-hal2



Screenshot - 13.01.2023 , 22_50_26
Screenshot - 13.01.2023 , 22_50_15
Screenshot - 13.01.2023 , 22_49_57

@artpc …mógłbyś to krótko zareklamować? Co to daje i dlaczego warto zastosować?
Sam opis jest trochę ubogi.

Tu masz przykłady https://github.com/flic/node-red-contrib-hal2/tree/main/examples

Jestem na etapie poznawczym, ale za pomocą tylko jednego noda think node można ogarnąć całość na wejściu MQTT, filtrowanie, funkcje, wysyłać wartości pobrane do innych przepływów, przesyłać wartości do zdefiniowanych urządzeń. Myślę ze nie będziesz miał żadnych problemów z ogarnięciem tego bo funkcje wejścia/wyjścia zaimplementowane wewnątrz noda, reguły, bramki.
Tyle wiem na tą chwilę.
Screenshot - 14.01.2023 , 16_17_54

[{"id":"bff9ed56d56ee811","type":"hal2Thing","z":"f382381ee97c4d0d","eventHandler":"e228014191d14be6","thingType":"9ab68f40dc3cd023","name":"czujnik_zig_temp_light_hum","attributes":[],"topicFilter":"","topicFilterType":"mqtt","topicPrefix":"","notes":"","outputs":0,"x":740,"y":600,"wires":[]},{"id":"ed783be883161098","type":"mqtt in","z":"f382381ee97c4d0d","name":"zigbee2mqtt","topic":"zigbee2mqtt/czujnik_zig_temp_light_hum","qos":"2","datatype":"auto-detect","broker":"d486fd9d.644f1","nl":false,"rap":true,"rh":0,"inputs":0,"x":510,"y":600,"wires":[["bff9ed56d56ee811"]]},{"id":"e228014191d14be6","type":"hal2EventHandler","name":"Event handler","maxlisteners":"50","heartbeat":"60"},{"id":"9ab68f40dc3cd023","type":"hal2ThingType","name":"czujnik_zig_temp_light_hum","contextStore":"filesystem","nodestatus":"🌡 %Temperature%°C 🔅 %Lux% 🕺 %Humidity% 🔋 %Battery%%","nodestatusType":"str","statusFn":"// item & attribute objects are\n// passed to function as objects\n\nreturn '';","items":[{"name":"Battery","id":"2fb3e80b.13cdb8","topicFilterType":"StrEnd","topicFilterValue":"","topicSuffix":"","type":"status","ingress":"410fd2db.5ede1c","egress":"73669930.31db58","notes":"","output":"1"},{"name":"Lux","id":"5d5424be.d7c0cc","topicFilterType":"StrEnd","topicFilterValue":"","topicSuffix":"","type":"status","ingress":"42bb0917.8f2d28","egress":"73669930.31db58","notes":"","output":"1"},{"name":"Humidity","id":"b78f11b2.00d09","topicFilterType":"StrEnd","topicFilterValue":"","topicSuffix":"","type":"status","ingress":"2d03ee52.2ca642","egress":"73669930.31db58","notes":"","output":"1"},{"name":"Temperature","id":"af3d2442.e51898","topicFilterType":"StrEnd","topicFilterValue":"","topicSuffix":"","type":"status","ingress":"7bd72d05.ef4f64","egress":"73669930.31db58","notes":"","output":"1"},{"name":"Update_available","id":"6d47a97a.aa1ab8","topicFilterType":"StrEnd","topicFilterValue":"","topicSuffix":"","type":"status","ingress":"32317de5.a09a22","egress":"73669930.31db58","notes":"","output":"1"},{"name":"Alive","id":"1","topicFilterType":"StrEnd","topicFilterValue":"","topicSuffix":"","readOnly":true,"type":"status","ingress":"5be6fde7.b81cf4","egress":""}],"attributes":[],"ingress":[{"name":"Pass-through","id":"5be6fde7.b81cf4","fn":"// msg object is passed to function\n\nreturn msg.payload;"},{"name":"Battery","id":"410fd2db.5ede1c","fn":"// msg object is passed to function\nif (msg.payload.battery) {\n    msg.payload = Number(msg.payload.battery);\n    return msg.payload;\n}\n"},{"name":"Lux","id":"42bb0917.8f2d28","fn":"// msg object is passed to function\nif (msg.payload.illuminance_lux) {\n    msg.payload = Number(msg.payload.illuminance_lux);\n    return msg.payload;\n}"},{"name":"Humidity","id":"2d03ee52.2ca642","fn":"// msg object is passed to function\n\nmsg.payload = msg.payload.humidity;\nreturn msg.payload;"},{"name":"Temperature","id":"7bd72d05.ef4f64","fn":"// msg object is passed to function\nif (msg.payload.temperature) {\n    msg.payload = Number(msg.payload.temperature);\n    return msg.payload;\n}"},{"name":"Update_available","id":"32317de5.a09a22","fn":"// msg object is passed to function\nif (msg.payload.update_available) {\n    msg.payload = msg.payload.update_available;\n    return msg.payload;\n}"}],"egress":[{"name":"Pass-through","id":"73669930.31db58","fn":"// msg object is passed to function\n\nreturn msg;"}],"thingStatus":true,"thingCommand":false,"thingOutput":false,"hbCheck":true,"hbType":"ttl","hbTTL":"3600","hbLWT":"5be6fde7.b81cf4","hbFilterVal":"","hbFilterType":"StrEnd","hbPropVal":"payload","hbPropType":"msg","filterFunction":"0","outputs":"1"},{"id":"d486fd9d.644f1","type":"mqtt-broker","name":"Moj MQTT","broker":"192.168.1.220","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]
1 polubienie