Sonoff ZBMiniR2 extreme @Zigbee2MQTT

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Sonoff ZBMiniR2 extreme @Zigbee2MQTT

Beitrag von Selter »

Hallo,

ich bekomme das Item nicht zum Schalten - über die Zigbee2MQTT GUI funktioniert es.
Was mache ich falsch?

Friendly Name:
SwitchSonoffZ14

Code: Alles auswählen

{
    "delayed_power_on_state": false,
    "delayed_power_on_time": 39.5,
    "detach_relay_mode": false,
    "external_trigger_mode": "edge",
    "linkquality": 105,
    "power_on_behavior": "off",
    "state": "OFF",
    "turbo_mode": false,
    "update": {
        "installed_version": 4100,
        "latest_version": 4100,
        "state": "idle"
    }
}

Code: Alles auswählen

	Thing topic SwitchSonoffZ14 "Sonoff ZBMiniR2 extreme Z14 " @ "Zigbee" {
    Channels:
        Type switch : state    "SonoffZ14 Switch"     [ stateTopic = "zigbee2mqtt/SwitchSonoffZ14/state", commandTopic="zigbee2mqtt/SwitchSonoffZ14/set", on="ON", off="OFF" ]
    }

Code: Alles auswählen

Switch EG_wz_l_x_decke1 "WZ: Deckenlampe groß" <light> (gM,Gzigbee,Glicht,Glichtaus,Gschalter,Gwz)    ["Switchable"] { channel="mqtt:topic:mosquitto:SonoffZ14:state" }

Im Log:

Code: Alles auswählen

 Item 'EG_wz_l_x_decke1' received command ON
 Item 'EG_wz_l_x_decke1' predicted to become NULL
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Sonoff ZBMiniR2 extreme @Zigbee2MQTT

Beitrag von udo1toni »

Bei zigbee2mqtt gibt es zwei verschiedene Optionen, entweder Du nutzt JSON Objekte oder Du nutzt diskrete Topics. Die entsprechende Option findest Du in den erweiterten Einstellungen unter MQTT output type, dort kannst Du attribute_and_json auswählen, falls Du an anderer Stelle das josn benötigst, oder Du wechselst auf attribute und bekommst ausschließlich alle Attribute als einzelne Topics.

Alternativ kannst Du im Thing ein transformationPattern eintragen:

Code: Alles auswählen

    Thing topic SwitchSonoffZ14 "Sonoff ZBMiniR2 extreme Z14 " @ "Zigbee" {
    Channels:
        Type switch : state "SonoffZ14 Switch" [ stateTopic="zigbee2mqtt/SwitchSonoffZ14/state",
                                                 commandTopic="zigbee2mqtt/SwitchSonoffZ14/set",
                                                 transformationPattern="JSONPATH:$.state" ]
    }
Unter der Voraussetzung, dass die Topics so stimmen, sollte es damit funktionieren. Die Parameter on und off benötigst Du hingegen nicht, denn ON und OFF sind schon die Werte, die openHAB ohnehin verwendet.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: Sonoff ZBMiniR2 extreme @Zigbee2MQTT

Beitrag von Selter »

Vielen Dank - aber es funktioniert leider immer noch nicht

Topic lauf MQTT-FX:
zigbee2mqtt/SwitchSonoffZ14

Payload (über Zigbee2MQTT ausgelöst):

Code: Alles auswählen

{
  "delayed_power_on_state" : false,
  "delayed_power_on_time" : 39.5,
  "detach_relay_mode" : false,
  "external_trigger_mode" : "edge",
  "linkquality" : 131,
  "power_on_behavior" : "off",
  "state" : "ON",
  "turbo_mode" : false,
  "update" : {
    "installed_version" : 4100,
    "latest_version" : 4100,
    "state" : "idle"
  }
}
Thing:

Code: Alles auswählen

	Thing topic SwitchSonoffZ14 "Sonoff ZBMiniR2 extreme Z14 " @ "Zigbee" {
    	Channels:
    	    Type switch : state "SonoffZ14 Switch" [ stateTopic="zigbee2mqtt/SwitchSonoffZ14/state",
    	                                             commandTopic="zigbee2mqtt/SwitchSonoffZ14/set",
    	                                             transformationPattern="JSONPATH:$.state" ]
    }

Item:

Code: Alles auswählen

Switch EG_wz_l_x_decke1 "WZ: Deckenlampe groß" <light> (gM,Gzigbee,Glicht,Glichtaus,Gschalter,Gwz)    ["Switchable"] { channel="mqtt:topic:mosquitto:SonoffZ14:state" }
Problem scheint das Item zu sein - das Thing erscheint im Log:

Code: Alles auswählen

Thing 'mqtt:topic:mosquitto:SwitchSonoffZ14' changed from OFFLINE (BRIDGE_OFFLINE) to ONLINE
Generell funktioniert aber das Zigbee2MQTT Setup - bisher lese ich z.B. ein paar Temperatursensoren aus; nur dies ist jetzt der erste Aktor.
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Sonoff ZBMiniR2 extreme @Zigbee2MQTT

Beitrag von udo1toni »

Schau Dir bitte mal die Thing UID an: 'mqtt:topic:mosquitto:SwitchSonoffZ14' gegenüber mqtt:topic:mosquitto:SonoffZ14 (das :state ist ja der Channel, der gehört nicht zur Thing UID) Da fehlt ein Switch in der Channel UID im Item.
Tipp an dieser Stelle:
Entweder, Du nimmst VS Code mit dem openHAB Plugin (ohnehin erste Wahl, wenn man Textdateien zur Konfiguration nutzen will) und wählst nach dem Anlegen des Things aus dem linken Seitenmenü -> openHAB -> Things dann den Channel aus, um Dir das passende Item darüber generieren zu lassen (Änderungen sind danach ja ohne weiteres möglich, nur die Channel UID solltest Du nicht anfassen).
Oder Du kopierst die Channel UID über die Main UI aus dem Thing heraus, auch das hilft, solche (kleinen) Fehler zu vermeiden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: Sonoff ZBMiniR2 extreme @Zigbee2MQTT

Beitrag von Selter »

Super - daran lag es. Danke auch für den Tipp mit VSCode.

Einen Schönheitsfehler gab es scheinbar noch.

zigbee2mqtt/SwitchSonoffZ14/set

Code: Alles auswählen

*** PAYLOAD IS NOT VALID JSON DATA *** 

Unexpected character ('O' (code 79)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: java.io.StringReader@5002f550; line: 1, column: 2]
Es wird trotzdem korrekt geschaltet. Die MQTT-Message für den Schaltbefehl erscheint aber auch doppelt in MQTT-Fx.

Mit Hilfe von ChatGPT konnte ich die Fehlermeldung durch "formatBeforePublish" umgehen:

Code: Alles auswählen

	Thing topic SwitchSonoffZ14 "Sonoff ZBMiniR2 extreme Z14 " @ "Zigbee" {
    	Channels:
    	    Type switch : state "SonoffZ14 Switch" [ stateTopic = "zigbee2mqtt/SwitchSonoffZ14/state",
    	                                             commandTopic = "zigbee2mqtt/SwitchSonoffZ14/set",
    	                                             formatBeforePublish = "{ \"state\": \"%s\" }" ]
    }
Die MQTT-Messages erscheinen jedoch weiterhin doppelt :(

Und müsste sich nicht der Switch (Schaltzustand) in Openhab auch anpassen, wenn über die Zigbee2MQTT Oberfläche geschaltet wird?
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Sonoff ZBMiniR2 extreme @Zigbee2MQTT

Beitrag von peter-pan »

Udo hat dir ja schon beschreiben, dass man in der Konfiguration (configuration.yaml), den Parameter output ändern kann. Das geht entweder im Frontend oder mit einem Editor (nano) direkt in der "configuration.yaml". Ich habe hier beide Möglichkeiten gesetzt attribute_and_json und kann nun sowohl einzelne Atribute oder auch JSON-Srings selektieren.

Hier mein SetUp für eine Schaltsteckdose in OH:

.things:

Code: Alles auswählen

Thing mqtt:topic:danny:tpspe202 "3R Plug E2 02"  (mqtt:broker:danny )   @ "zigbee2mqtt" 
       [ availabilityTopic="zigbee2mqtt/tp_sp_e2_02/availability", transformationPattern="JSONPATH:$.state", payloadNotAvailable="offline", payloadAvailable= "online" ] 
    {
    Channels:
        Type switch  : setget       "3P E2 02 Ein/Aus"                     [ stateTopic="zigbee2mqtt/tp_sp_e2_02/state", commandTopic="zigbee2mqtt/trpe2_02/set/state", on="ON", off="OFF" ]
        Type number  : voltage      "3P E2 02 Spannung"                    [ stateTopic="zigbee2mqtt/tp_sp_e2_02/voltage", unit="V" ]
        Type string  : poweron      "3P E2 02 Power ON Behaveior"          [ stateTopic="zigbee2mqtt/tp_sp_e2_02/power_on_behavior" ]
        Type number  : acfreq       "3P E2 02 AC Frequenz"                 [ stateTopic="zigbee2mqtt/tp_sp_e2_02/ac_frequency", unit="Hz" ] 
        Type number  : power        "3P E2 02 Leistung"                    [ stateTopic="zigbee2mqtt/tp_sp_e2_02/power", unit="W" ] 
        Type number  : powerfac     "3P E2 02 Leistungsfaktor"             [ stateTopic="zigbee2mqtt/tp_sp_e2_02/power_factor"]
        Type number  : energy       "3P E2 02 Energie"                     [ stateTopic="zigbee2mqtt/tp_sp_e2_02/energy", unit="kWh" ]
        Type number  : current      "3P E2 02 Verbrauch"                   [ stateTopic="zigbee2mqtt/tp_sp_e2_02/current", unit="A" ]
        Type number  : linkquality  "3P E2 02 Empfangsstärke LQI"          [ stateTopic="zigbee2mqtt/tp_sp_e2_02", transformationPattern="JSONPATH:$.linkquality", unit="lqi" ]
        Type switch  : reachable    "3P E2 02 Reachable"                   [ stateTopic="zigbee2mqtt/tp_sp_e2_02/availability", transformationPattern="JSONPATH:$.state", on="online", off="offline" ]

    }
und die entsprechenden Items dazu.
.items

Code: Alles auswählen

//                          Steckdose 3R  E1 tpspe202
Group                       gtp_sp_e2_02               "Steckdose 3P E1 02"                              <gosundsp111>           (gUG_Schlafen)                     ["PowerOutlet"]
Switch                      tp_sp_e2_02_switch         "Steckdose 3P E1 02 [MAP(de.map):%s]"             <light>                 (gtp_sp_e2_02, gT_OnOff)           ["Switch"]                                  { channel="mqtt:topic:danny:tpspe202:setget"}        
Number:ElectricPotential    tp_sp_e2_02_voltage        "Steckdose 3P E1 02 Spannung [%.1f]"              <light>                 (gtp_sp_e2_02)                     ["Voltage"]                                 { channel="mqtt:topic:danny:tpspe202:voltage"}        
String                      tp_sp_e2_02_poweron        "Steckdose 3P E1 02 PowerOn"                      <gosundsp111>           (gtp_sp_e2_02)                     ["Point"]                                   { channel="mqtt:topic:danny:tpspe202:poweron"}       
Number:Frequency            tp_sp_e2_02_acfrec         "Steckdose 3P E1 02 AC Frequenz"                  <siren1>                (gtp_sp_e2_02)                     ["Frequency"]                               { channel="mqtt:topic:danny:tpspe202:acfreq" }     
Number:Power                tp_sp_e2_02_power          "Steckdose 3P E1 02 Leistung"                     <qualityofservice>      (gtp_sp_e2_02)                     ["Power", "Measurement"]                    { channel="mqtt:topic:danny:tpspe202:power", stateDescription="" [pattern="%.0f W"] }         
Number                      tp_sp_e2_02_powerfac       "Steckdose 3P E1 02 L-Faktor  [%.1f]"             <qualityofservice>      (gtp_sp_e2_02)                     ["Point"]                                   { channel="mqtt:topic:danny:tpspe202:powerfac" }         
Number:Energy               tp_sp_e2_02_energy         "Steckdose 3P E1 02 Energie  [%.2f %unit%]"       <qualityofservice>      (gtp_sp_e2_02)                     ["Energy", "Measurement"]                   { channel="mqtt:topic:danny:tpspe202:energy" }         
Number:ElectricCurrent      tp_sp_e2_02_current        "Steckdose 3P E1 02 Verbrauch  [%.1f %unit%]"     <qualityofservice>      (gtp_sp_e2_02)                     ["Current", "Measurement"]                  { channel="mqtt:topic:danny:tpspe202:current" }         
Number                      tp_sp_e2_02_linkquality    "Steckdose 3P E1 02 LQI "                         <siren1>                (gtp_sp_e2_02)                     ["Level"]                                   { channel="mqtt:topic:danny:tpspe202:linkquality" }     
Switch                      tp_sp_e2_02_Unreach        "Steckdose 3P E1 02 Erreichbarkeit [%s]"          <siren1>                (gtp_sp_e2_02,gLWT)                ["Point"]                                   { channel="mqtt:topic:danny:tpspe202:reachable" }     
Das Schalten (AN/AUS) wird über Attribute gesteuert. Damit erspare ich mir das formatBeforePublish. Wie ich sehe hast du auch den "Doppelpunkt" in deinem Payload mitgegeben. Hast du es auch schon mal ohne probiert ? (Halbwissen/Try-Error). Vielleicht ist das auch der Grund für die Fehlermeldung "*** PAYLOAD IS NOT VALID JSON DATA ***"

Was meinst du damit
Selter hat geschrieben: 17. Feb 2025 19:24 Die MQTT-Messages erscheinen jedoch weiterhin doppelt :(
Wo erscheinen die doppelt ?

Hier noch der JSON-String für den Schalter aus dem Frontend(Status):

Code: Alles auswählen

{
    "ac_frequency": 50,
    "current": 0.06,
    "energy": 15.84,
    "last_seen": "2025-02-17T23:44:00+01:00",
    "linkquality": 148,
    "power": 0.2,
    "power_factor": 0.05,
    "state": "ON",
    "update": {
        "installed_version": 268513372,
        "latest_version": 268513372,
        "state": "idle"
    },
    "voltage": 233.7
}
Vielleicht hilft dir das weiter.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: Sonoff ZBMiniR2 extreme @Zigbee2MQTT

Beitrag von Selter »

Ich habe mal MQTT output type in Zigbee2MQTT auf "attribute_and_json" und auch "attribute" gesetzt.

Beim Schalten über Zigbee2MQTT werden auch alle Messages doppelt gesendet - Fehlermeldungen bzgl. nicht validem JSON verursachen
- zigbee2mqtt/SwitchSonoffZ14/external_trigger_mode
- zigbee2mqtt/SwitchSonoffZ14/state
- zigbee2mqtt/SwitchSonoffZ14/power_on_behavior
- zigbee2mqtt/SwitchSonoffZ14/update-state

Liegt das Problem damit eher an Zigbee2MQTT oder am Zigbee-Stick oder am Sonoff?
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Sonoff ZBMiniR2 extreme @Zigbee2MQTT

Beitrag von udo1toni »

Wo wird der Fehler gemeldet?

Wenn zigbee2mqtt das beim Empfang eines set-Befehls meldet, deutet das darauf hin, dass zigbee2mqtt hier ein valides JSON Objekt erwartet, z.B.

Code: Alles auswählen

{"state": "ON"}
Wie das JSON Objekt aussehen muss, kannst Du in der Doku zu zigbee2mqtt herausfinden.
Auf openHAB-Seite kann man für diesen Fall über formatBeforePublish vorgeben, wie der Befehl formatiert werden soll, z.B. '{"state": "%s"}', wobei %s der Platzhalter für den eigentlichen Befehl ist, also bei einem Switch ON oder OFF.
Es kann auch sein, dass Du noch weitere Informationen mit in das JSON einbauen musst (wobei Du ja schreibst, das der Schaltvorgang trotz Fehlermeldung funktioniert - evtl. ist zigbee2mqtt hier einfach sehr gnädig und "interpretiert" ein einfaches ON/OFF als den Versuch, den Schaltzustand des Geräts zu setzen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: Sonoff ZBMiniR2 extreme @Zigbee2MQTT

Beitrag von Selter »

Ich habe jetzt mal einen phyischen Schalter an den Sonoff geklemmt - der Schaltzustand wird sowohl in OH als auch im Zigbee2MQTT-Frontend korrekt angzeigt. Allerdings aktualisiert er sich nicht bei Devices/Exposes/State im Frontend; sondern nur im Dashboard.

Der JSON Fehler wird in MQTT-FX angezeigt. Und auch alles doppelt ...

z.B.:
zigbee2mqtt/SwitchSonoffZ14/state

Code: Alles auswählen

*** PAYLOAD IS NOT VALID JSON DATA *** 

Unexpected character ('O' (code 79)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: java.io.StringReader@43ccbdde; line: 1, column: 2]
oder für
zigbee2mqtt/SwitchSonoffZ14/update-state

Code: Alles auswählen

*** PAYLOAD IS NOT VALID JSON DATA *** 

Unexpected character ('i' (code 105)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: java.io.StringReader@2b218ed6; line: 1, column: 2]
... also immer das erste Zeichen

Beim Ausschalten im Log von Zigbee2MQTT:

Code: Alles auswählen

info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14', payload '{"delayed_power_on_state":false,"delayed_power_on_time":39.5,"detach_relay_mode":false,"external_trigger_mode":"following(off)","linkquality":145,"power_on_behavior":"off","state":"OFF","turbo_mode":false,"update":{"installed_version":4100,"latest_version":4100,"state":"idle"}}'
info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14/turbo_mode', payload 'false'
info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14/delayed_power_on_state', payload 'false'
info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14/delayed_power_on_time', payload '39.5'
info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14/detach_relay_mode', payload 'false'
info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14/external_trigger_mode', payload 'following(off)'
info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14/state', payload 'OFF'
info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14/power_on_behavior', payload 'off'
info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14/update-state', payload 'idle'
info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14/update-installed_version', payload '4100'
info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14/update-latest_version', payload '4100'
info 2025-02-19 20:59:58z2m:mqtt: MQTT publish: topic 'zigbee2mqtt/SwitchSonoffZ14/linkquality', payload '145'
Scheint also hier korrekt zu sein.

Da das Schalten korrekt funktioniert, können die Fehlermeldungen als Schönheitsfehler gelten.
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

Antworten