ZigBee Integration mit Tuya und Sonoff

Hey,

ich habe folgendes Problem:
Ich möchte ZigBee Schalter von Tuya mit den Sonoff Dongle einbinden.
Allerdings geht mein Switch / Filter nicht. Die MQTT Verbindung steht. Es kommen auch Daten an im Debug sehe ich Schalter 1 Single Klick etc. Sobald ich aber versuche einen Switch zu setzen mit Filter auf diesen Schalter tut sich nichts mehr.
Entferne ich den Filter bzw setze ihn auf notempty ohne irgend eine Bedingung, funktioniert das Togglen vom Dimmer.
Dh meine Kommunikation von Schalter und Dimmer geht ich möchte nur noch den Filter da es ein 4 Tasten-Schalter ist.

Ich bekomme folgende Info nach dem Json Block wenn ich es im Debug ausgebe:

29.11.2025, 13:07:21 node: Wohnraum Actions
zigbee2mqtt/Wohnraum : msg.payload : string[68]
"
{“action”:“1_single”,“battery”:100,“linkquality”:138,“voltage”:3000}"

Ein Systemupdate vom Pekaway habe ich durchgeführt auf die neuste Version.

Mein Flow:

[

{

    "id": "cfe1ab40e0efad92",

    "type": "tab",

    "label": "ZigBee Schalter",

    "disabled": false,

    "info": "",

    "env": \[\]

},

{

    "id": "bfe5389340829577",

    "type": "mqtt in",

    "z": "cfe1ab40e0efad92",

    "name": "MQQT Localhost",

    "topic": "zigbee2mqtt/Wohnraum",

    "qos": "2",

    "datatype": "auto-detect",

    "broker": "0ddb07c65cbb68bc",

    "nl": false,

    "rap": true,

    "rh": 0,

    "inputs": 0,

    "x": 220,

    "y": 100,

    "wires": \[

        \[

            "481397262d75c19a"

        \]

    \]

},

{

    "id": "67c8e023b4b83d59",

    "type": "debug",

    "z": "cfe1ab40e0efad92",

    "name": "Wohnraum Actions",

    "active": true,

    "tosidebar": true,

    "console": true,

    "tostatus": false,

    "complete": "payload",

    "targetType": "msg",

    "statusVal": "",

    "statusType": "auto",

    "x": 720,

    "y": 100,

    "wires": \[\]

},

{

    "id": "0d98132b795022f0",

    "type": "link out",

    "z": "cfe1ab40e0efad92",

    "name": "Wohnraum_1_single",

    "mode": "link",

    "links": \[

        "a4c0fd66546e7864"

    \],

    "x": 845,

    "y": 160,

    "wires": \[\]

},

{

    "id": "7a58c7a2637eeb41",

    "type": "switch",

    "z": "cfe1ab40e0efad92",

    "name": "",

    "property": "action",

    "propertyType": "jsonata",

    "rules": \[

        {

            "t": "nempty"

        }

    \],

    "checkall": "true",

    "repair": false,

    "outputs": 1,

    "x": 570,

    "y": 160,

    "wires": \[

        \[

            "a39172e55ec9f882",

            "94b1f8a66cf14afe"

        \]

    \]

},

{

    "id": "a39172e55ec9f882",

    "type": "function",

    "z": "cfe1ab40e0efad92",

    "name": "toggle1",

    "func": "// Liest den aktuellen Helligkeitswert von Dimmer 1 aus dem globalen Speicher\\n// Die Dimmer-Controller-Flows von Pekaway speichern den Wert üblicherweise unter global.dimmerX\\nlet currentBrightness = global.get(\\"dimmer1\\") || 0;\\nlet newBrightness;\\n\\n// Wenn die aktuelle Helligkeit größer als 5% ist (als AN betrachtet), setze auf 0% (AUS).\\n// Sonst setze auf 100% (AN).\\nif (currentBrightness > 5) {\\n    newBrightness = 0; // Ausschalten\\n} else {\\n    newBrightness = 100; // Einschalten (volle Helligkeit)\\n}\\n\\n// Setze den neuen Wert im globalen Speicher\\nglobal.set(\\"dimmer1\\", newBrightness);\\n\\n// Setze die Payload auf den neuen Helligkeitswert (0 oder 100)\\nmsg.payload = newBrightness;\\n\\n// Optional: Setze das Label des Lichts für Debug-Zwecke (wenn der Name definiert ist)\\nmsg.label = global.get(\\"Ndimmer1\\");\\n\\nreturn msg;",

    "outputs": 1,

    "timeout": 0,

    "noerr": 0,

    "initialize": "",

    "finalize": "",

    "libs": \[\],

    "x": 740,

    "y": 160,

    "wires": \[

        \[

            "0d98132b795022f0"

        \]

    \]

},

{

    "id": "94b1f8a66cf14afe",

    "type": "debug",

    "z": "cfe1ab40e0efad92",

    "name": "debug 1",

    "active": true,

    "tosidebar": true,

    "console": true,

    "tostatus": false,

    "complete": "payload",

    "targetType": "msg",

    "statusVal": "",

    "statusType": "auto",

    "x": 690,

    "y": 260,

    "wires": \[\]

},

{

    "id": "481397262d75c19a",

    "type": "json",

    "z": "cfe1ab40e0efad92",

    "name": "",

    "property": "payload",

    "action": "",

    "pretty": false,

    "x": 470,

    "y": 100,

    "wires": \[

        \[

            "67c8e023b4b83d59",

            "7a58c7a2637eeb41"

        \]

    \]

},

{

    "id": "0ddb07c65cbb68bc",

    "type": "mqtt-broker",

    "name": "",

    "broker": "http://localhost",

    "port": "1883",

    "clientid": "",

    "autoConnect": true,

    "usetls": false,

    "protocolVersion": "4",

    "keepalive": "60",

    "cleansession": true,

    "birthTopic": "",

    "birthQos": "0",

    "birthPayload": "",

    "birthMsg": {},

    "closeTopic": "",

    "closeQos": "0",

    "closePayload": "",

    "closeMsg": {},

    "willTopic": "",

    "willQos": "0",

    "willPayload": "",

    "willMsg": {},

    "sessionExpiry": ""

}

]

Schau dir den Flow an, da kannst du sicher was von brauchen.

Hey danke für den Tipp. Meine Kommunikation geht ja. Nur ich weiß nicht wie ich ihm sage Schalter 1 wurde gedrückt. Aktuell hört er einfach auf jeden MQTT Befehl der kommt egal von woher egal welche taste.

Wie du im Debug ja auch siehst, weiß ich ja welcher schalter gedrückt wurde die Info kommt also an.
Drücke ich 1 steht da 1_singel bei 2 steht 2_single usw. Nur der Switch danach reagiert auf absolut nichts mehr. Der kann keine einzige eigenschaft auswerten.

Ich habe deinen flow nicht installiert, ich weiß nur das meiner funktioniert::sweat_smile:

Zumindest für meine Schaltung, aber den habe ich schon mehrfach verändert, und auf andere Bedienung eingestellt. Kein Problem wenn man das mal verstanden hat

ich wollte einen Flow mal importieren, aber ich glaube das ist beim export was schief gelaufen.

line 12 column12 hab ich schon gelöscht aber das geht so weiter

versuch eine Change Node

oder eine Funktion Node

Flow Schalter.json (4.5 KB)

Anbei nochmals mein Flow. Eine Function hab ich schon probiert. Mit mehreren Ifs aber die hat auch nichts zu Tage gebracht. Ein Change der ein Json objekt daraus baut auch. Ich habe ja 4 Schalter bzw. eigentlich 12. Ein Switch war hierfür das was am meisten Sinn macht. Ich versteh nur nicht warum ich kein vernünftiges Json Objekt rüber bekomme wo ich auswerten kann.

Meine Vermutung wäre das mein Json objekt nicht als solches ankommt oder die Daten kaputt gehen. Der Debugger in der Console gibt mir immer ein String aus. Kann man das so Debuggen, das ich das Objekt in Real Time sehe?

Ich habe deinen Flow mal etwas geändert. da ich das in meinem Test System gemacht habe, da habe ich kein Zigbee. Dafür habe ich 3 Injekt nodes genommen. Den Rest habe ich fast übernommen.

flows.json (7,5 KB)

Debug Ausgabe

.12.2025, 10:03:30node: Wohnraum Actionsmsg : Object
object
_msgid: "0834e7130d6b8647"
payload: "{"action":"1_double"}"
3.12.2025, 10:03:30node: debug 16msg : Object
object
_msgid: "0834e7130d6b8647"
payload: "{"action":"1_double"}"
3.12.2025, 10:03:30node: debug 94msg : Object
object
_msgid: "0834e7130d6b8647"
payload: 100
label: "Dimmer 2"
3.12.2025, 10:03:31node: Wohnraum Actionsmsg : Object
object
_msgid: "4a9751b71ef62b5c"
payload: "{"action":"1_double"}"
3.12.2025, 10:03:31node: debug 16msg : Object
object
_msgid: "4a9751b71ef62b5c"
payload: "{"action":"1_double"}"
3.12.2025, 10:03:31node: debug 94msg : Object
object
_msgid: "4a9751b71ef62b5c"
payload: 0
label: "Dimmer 2"
3.12.2025, 10:03:31node: Wohnraum Actionsmsg : Object
object
_msgid: "abf3a59a87a4b71c"
payload: "{"action":"1_double"}"
3.12.2025, 10:03:31node: debug 16msg : Object
{ _msgid: "abf3a59a87a4b71c", payload: "{"action":"1_double"}" }
3.12.2025, 10:03:31node: debug 94msg : Object
{ _msgid: "abf3a59a87a4b71c", payload: 100, label: "Dimmer 2" }
3.12.2025, 10:03:32node: Wohnraum Actionsmsg : Object
{ _msgid: "075e2488471c4da2", payload: "{"action":"1_double"}" }
3.12.2025, 10:03:32node: debug 16msg : Object
{ _msgid: "075e2488471c4da2", payload: "{"action":"1_double"}" }
3.12.2025, 10:03:32node: debug 94
msg : Object

sollte funktionieren.

Viel Spass beim weiter entwickeln

Cool vielen dank das probiere ich später direkt aus wenn ich am Fahrzeug bin. Was genau hast du nun geändert?

Auf 3 Aktionen erweitert, und den Text im Switch geändert

Danke die die Injects tun wenn auch irgendwie zu viel geschalten wird. Per Taster tut sich gar nix.
Im Anhang ein Bild vom Log zuerst die Inject dann der Schalter.
Ich habe das ganze etwas vereinfacht und an alle Dimmer gebunden. Damit es Debuggen übersichtlicher ist.

Ich muss mich nochmal korrigieren, ich habe nun mal den Befehl nur an Dimmer1 gebunden. Der Dimmer ist laut Display Aktiv und 100% aber leuchten tut nichts.

Das liegt aber dann nicht mehr am Schalter, da beim 1. Drücken bei togel ne 0 und beim 2 drücken ne 100 steht. Dann musst du mal auf der Dimmy Seite wo der linkout hingeht schauen og da der Fehler ist

Interessant ist aber auch das wenn ich den Schalter drücke Tooglet er nicht mehr. Über ein Inject schon
Also auch hier scheint irgend was anderst zu sein. Sieht man auch am Log nutze ich den Inject schreibt er alle Logs nutze ich den schalter sind es nur zwei. Am Pekaway Display schaltet er mein schalter dh die verbindung scheint ja irgendwie zu stehen. Wohin muss das signal den?

Änder den swich mal von == auf enthält, vermutlich spuckt uns die Batterie in Essen

schon probiert tut sich null war auch zuerst meine vermutung.
Habe es sogar so geändert
Einfach zum testen licht bleibt aus

Spanned ist das jetzt 2 Lampen angehen. Die dritte bleibt aber aus. Ich habe eigentlich Kanal 1-3 belegt gibt es hier besonderheiten?

Poste mal die debugjsohn Ausgabe von singel, duble, hold, aber bitte als Text. Dann kann man das kopieren und muß nicht soviel tippen. Dann schaue ich morgen mal ob ich was machen kann.

Häng mal ein debug hinter MQTT.

Und poste die Ausgabe auch.

Dann gibt es eine Palette zigbee2mqtt. Das Ergebnis was da rauskommt ist glaube ich schöner zu verarbeiten.

Damit hatte ich keine Probleme.

Hast du meinen flow mal installiert???

Kannst ja alles löschen was dich nicht interessiert, ein linkout liefert “on” “off” die anderen gehen auf meinen Dimmy, die kannst du vermutlich nicht brauchen, oder passend machen für dich.

Nachtrag zwei:
Ich habe mit aus dem DiplayFlow folgende Funktion geholt
msg.payload = 100;’
msg.label = global.get(“Ndimmer2”)
msg.dimmer = 2
return msg;

Dimmer 0 und 1 gehn dimmer 2 bleibt tot.
Über das Display geht er natürlich.

EDIT: Ich schaffe es nun das über den Schalter das Licht an und ausgeht das im Bad bleibt aber aus. Dimmer 1 und 2 zu verlinken hat geklappt Dimmer 3 mein Bad geht nicht also verlinkt auf dimmer2 index fängt ja mit 0 an. Neustart vom System habe ich auch ausgeführt. Wie kann das sein das 2 Dimmer gehn der Dritte aber nicht? Über das Display geht das licht an und aus. Ebenso über die App. Im Display und in der Web UI ändert sich der Status. Nur vom licht selbst tut sich nichts.

ich möchte derzeit nur auf single reagieren
Dein Flow habe ich direkt installiert und getestet.
Ich fokusiere mich derzeit auf eine Aktion und ein Dimmer

Hier ist das Log wenn ich den Schalter drücke
3.12.2025, 20:20:22node: Wohnraum Actionszigbee2mqtt/Wohnraum : msg : Object

{ topic: “zigbee2mqtt/Wohnraum”, payload: “{“action”:“1_single”,“battery”…”, qos: 0, retain: false, _topic: “zigbee2mqtt/Wohnraum” … }

3.12.2025, 20:20:22node: DebugJsonzigbee2mqtt/Wohnraum : msg : string[68]

“{“action”:“1_single”,“battery”:100,“linkquality”:114,“voltage”:3000}”

3.12.2025, 20:20:22node: Debug Switchzigbee2mqtt/Wohnraum : msg : Object

{ topic: “zigbee2mqtt/Wohnraum”, payload: “{“action”:“1_single”,“battery”…”, qos: 0, retain: false, _topic: “zigbee2mqtt/Wohnraum” … }

3.12.2025, 20:20:22node: Debug Togglezigbee2mqtt/Wohnraum : msg : Object

{ topic: “zigbee2mqtt/Wohnraum”, payload: 100, qos: 0, retain: false, _topic: “zigbee2mqtt/Wohnraum” … }’

Hier das log wenn ich mit dem Inject arbeite

3.12.2025, 20:21:26node: Wohnraum Actionsmsg : Object

{ _msgid: “61f305ea51c9426b”, payload: “{“action”:“1_single”}” }

3.12.2025, 20:21:26node: DebugJsonmsg : string[21]

“{“action”:“1_single”}”

3.12.2025, 20:21:26node: Debug Switchmsg : Object

{ _msgid: “61f305ea51c9426b”, payload: “{“action”:“1_single”}” }

3.12.2025, 20:21:26node: Debug Togglemsg : Object

{ _msgid: “61f305ea51c9426b”, payload: 0, label: “Bad” }

Im Display sehe ich nun bei beiden das er den Schalter an oder aus macht nur das Licht bleibt aus.

In der Doku steht noch was davon das man das per MQQT machen soll
msg.topic = ‘pkw/cmnd/PekawayMOTA/driver15’;
msg.payload = ‘pwm,’ + CHANNEL + ‘,’ + value;

klappt aber auch nicht

Den Angepassten flow hab ich angehängt

flows (3).json (7.0 KB)

Ok wenn ich das morgen schaffe mach ich den Flow in meinen aktives System und nimm einen neuen Schalter, und versuche das mal.

Kann nix versprechen, habe morgen noch ein paar Termine

Moin,

nimm mal das setzen der globale raus. Wenn der Wert schon gesetzt wird, bevor der Dimmer angesteuert wird, passiert einfach nichts.

Gruß Wulle