Läuft: zigbee2mqtt mit MQTT2_SERVER und MQTT2_DEVICE

Begonnen von supernova1963, 23 September 2018, 19:17:21

Vorheriges Thema - Nächstes Thema

Beta-User

Den brightness-slider als Vorlage nehmen und dann mal im Wiki zu color nachsehen, wie ein hue-Slider da zu definieren wäre. Wertebereich kann ich dir leider nicht sagen, aber evtl. weis da jemand schon was?
Ggf. mit großer größer werdender Bandbreite austesten. Topic ist vermutlich hue.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rudolfkoenig

ZitatKönnte man nicht die Eigenschaften eines Geräts als attribute hinterlegen wenn Typ der Bridge zigbee2mqtt ist? Sowas wie dimmable, color, color_temp capable etc?
Gerne, bei mir laeuft das unter dem Namen "Template".
Damit ich ein verwendares Konzept bauen kann, brauche ich Beispiele einer kompletten Definition (define + attr) mit Modellbezeichnung und Anwendungszenario (letzteres weil ein Schalter als Lampen-/Pumpen-/Rolladen-Schalter verwendet werden kann), und raw Events, damit ich die Templates testen kann. raw Events kann man im Event-Monitor verfolgen, wenn man fuer MQTT2_SERVER oder MQTT2_CLIENT das Attribut rawEvents gesetzt hat.

akr1983

Hiho,

ich hab jetzt im mqtt2_client rawevents auf den Bewegungsmelder aktiviert. Glaub ich zumindest ;-) Das sind jetzt die Events für den Bewegungsmelder "RTCGQ11LM" von Xiaomi. Gerät heißt GB_Bewegungsmelder.

2018-11-12 23:28:36 MQTT2_DEVICE GB_Bewegungsmelder_MQTT2 battery: 99.00
2018-11-12 23:28:36 MQTT2_DEVICE GB_Bewegungsmelder_MQTT2 linkquality: 0
2018-11-12 23:28:36 MQTT2_DEVICE GB_Bewegungsmelder_MQTT2 voltage: 3005
2018-11-12 23:28:36 MQTT2_DEVICE GB_Bewegungsmelder_MQTT2 illuminance: 15
2018-11-12 23:28:36 MQTT2_DEVICE GB_Bewegungsmelder_MQTT2 occupancy: false
2018-11-12 23:28:36 MQTT2_DEVICE GB_Bewegungsmelder_MQTT2 illuminance: 15
2018-11-12 23:28:36 MQTT2_DEVICE GB_Bewegungsmelder_MQTT2 occupancy: true
2018-11-12 23:28:36 MQTT2_DEVICE GB_Bewegungsmelder_MQTT2 voltage: 3005
2018-11-12 23:28:36 MQTT2_DEVICE GB_Bewegungsmelder_MQTT2 battery: 99.00
2018-11-12 23:28:36 MQTT2_DEVICE GB_Bewegungsmelder_MQTT2 linkquality: 0


Und das "Device" GB_Bewegungsmelder sieht so aus:

defmod GB_Bewegungsmelder_MQTT2 MQTT2_DEVICE zigbee_158d0001f9d030
attr GB_Bewegungsmelder_MQTT2 IODev mqtt2_client
attr GB_Bewegungsmelder_MQTT2 devStateIcon motion:motion_detector@red off:motion_detector@green no_motion:motion_detector@green
attr GB_Bewegungsmelder_MQTT2 icon motion_detector@blue
attr GB_Bewegungsmelder_MQTT2 readingList mqtt2client:zigbee2mqtt/GB_Bewegungsmelder:.* { json2nameValue($EVENT) }
attr GB_Bewegungsmelder_MQTT2 room MQTT2_DEVICE
attr GB_Bewegungsmelder_MQTT2 stateFormat {\
if(ReadingsVal("$name","occupancy",0) eq "true") {\
sprintf("motion");;\
} else {\
sprintf("no_motion");; \
}\
}

setstate GB_Bewegungsmelder_MQTT2 motion
setstate GB_Bewegungsmelder_MQTT2 2018-11-12 23:31:49 battery 99.00
setstate GB_Bewegungsmelder_MQTT2 2018-11-12 23:31:49 illuminance 2
setstate GB_Bewegungsmelder_MQTT2 2018-11-12 23:31:49 linkquality 2
setstate GB_Bewegungsmelder_MQTT2 2018-11-12 23:31:49 occupancy true
setstate GB_Bewegungsmelder_MQTT2 2018-11-12 23:31:49 voltage 3005


Mein Mqtt2_client device sieht folgendermaßen aus:
defmod mqtt2_client MQTT2_CLIENT 192.168.2.4:1883
attr mqtt2_client autocreate 1
attr mqtt2_client rawEvents zigbee2mqtt/GB_Bewegungsmelder:.*
attr mqtt2_client room test
attr mqtt2_client subscriptions #

setstate mqtt2_client opened
setstate mqtt2_client 2018-11-12 20:06:27 state opened



Grundsätzlich kann ich die Infos für folgende Geräte liefern:


Xiaomi Bewegungsmelder - RTCGQ11LM
Xiaomi Rauchmelder - JTYJ-GD-01LM/BW
Xiaomi Temperatur-, Luftfeuchte-, Helligkeitssensor - WSDCGQ01LM
Xiaomi "Water leakage sensor" - SJCGQ11LM
Xiaomi "Schalter" - WXKG03LM
Xiaomi Temperatur-, Luftfeuchte-, Helligkeitssensor - WSDCGQ11LM
Xiaomi "Würfel" - 0x656275635f726f736e65732e696d756c
Hue Lightstripe 1. Generation      7299355PH
Hue Lightstripe Plus akt. Generation - 915005106701
Hue Bulb 1. Generation  9290012573A
Hue Dimmer Switch     324131092621
Hue Spot GU10 1. Gen  8718696485880
INNR RB165 (Bulb)
Osram Lightify Bulb - AC03641
Ikea Tradfri E14 "Kerze" - LED1649C5
Ikea Tradfri E27 (Farbwechsel, etc.) - LED1624G9


Die Geräte hab ich aktuell alle über XiamiMQTTDevice eingebunden und von Hand mit Attributen versehen. Der Farbwechsel ging aber nur (wie weiter oben schon beschrieben) durch Quellcode fummeln ;-)

Lg,
Arne


Beta-User

V.a. @rudolfkoenig:
Nach etwas Recherche wegen dieser Farb-Sache sieht es so aus, als wäre der direkte Weg mit hue nicht möglich, dagegen scheint der Austausch mit einem Array der drei rgb-Werte verbreitet zu sein - vermutlich braucht ioBroker das so.
Daher folgender Ansatz zur Diskussion:
json2nameValue() erweitern, dass es diese Konstellation erkennt und dann ggf. direkt in dem in FHEM üblichen HEX-Format zurückgibt.
In color eine Slider-Option einbauen, die den rgb-Wert als json-Array liefert.

Wenn das vom Konzept her passt, kann ich gerne versuchen, entsprechende patches zu liefern (vielleicht gleich mit dem devStateIcon-Code für brightness im 255-er Format). (Schon klar, dass pah (?) als maintainer für color das letztlich insoweit entscheiden muss).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

hexenmeister

json2nameValue ist eine allgemeingültige Funktion. So eine Umwandlung wäre da fehlt am Platz. Dafür sollte eine neue Funktion implementiert und verwendet werden.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Beta-User

Dass das eine allgemeingültige Funktion betrifft, ist schon klar.
Allerdings wäre Voraussetzung, dass genau so ein json-Array als input vorliegt (3 Werte innerhalb einer geschweiften Klammer mit "r", " g" und "b" als Kennung. Sollte kaum Verwechslungsgefahr bestehen.

Man könnte das aber auch innerhalb des ...-Device-Moduls lösen (z.b. einschaltbar via attr.). Ein userReading hat halt den Nachteil, dass der Zeitstempel nicht passt, und daher ggf. Farbe angenommen wird, obwohl white-Modus angesagt wäre... Daher Oberhaupt dieser Ansatz.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

hexenmeister

Auch in das Modul gehört es nicht hin. Zu speziell. Ggf. muss man auch ein unveränderten Wert bekommen können. Wofür auch immer. Daher einfach eine andere (neue) parse Methode.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Beta-User

Alternative: entsprechender neuer Parameter für die Funktion?
.....,"toRGB"). Dann hätte es der user in der Hand und man bräuchte nichts extra.

Klar ist es speziell, aber eben auch nicht völlig exotisch.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

hexenmeister

#113
Zitat von: Beta-User am 13 November 2018, 11:29:31
Alternative: entsprechender neuer Parameter für die Funktion?
.....,"toRGB"). Dann hätte es der user in der Hand und man bräuchte nichts extra.

Klar ist es speziell, aber eben auch nicht völlig exotisch.
Auch nicht viel besser. Dann kommt sicher bald ein weiteres Modul mit eigenem Spezifika. Wie viele Parameter dann noch spendieren?
Und doch auch völlig exotisch, da nur ein Anwendungsfall von Tausenden von anderen Möglichen ;)

Einfach eine neue Methode "json2vameValueSpecialForTheMyGreatSomeThingWithRGB" erstellen und verwenden. Sauber, einfach und verständlich für jeden ;)

P.S. Diese Methode wird sicher auch in anderen Modulen verwendet, die Auswirkungen des Einbaus einer Sonderlocke wären schwer abzusehen.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Beta-User

Ich werde diesen Teil (empfangsseitig) mit einem notify lösen, da kann ich dann gleich auch white_mode-Events von den MiLight-Devices mit verwursteln.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rudolfkoenig

@akr1983: Vielen Dank!
Kannst du noch bitte beschreiben, welche topics/messages das Geraet fuer Farbwechsel erwartet, da ich keine Fehler durchs Code-Lesen verewigen will.

ZitatDer Farbwechsel ging aber nur (wie weiter oben schon beschrieben) durch Quellcode fummeln ;-)
Ich empfehle solche Probleme mit cmdalias zu loesen, dann ist der Stress mit dem update kleiner.
ZitatEinfach eine neue Methode "json2vameValueSpecialForTheMyGreatSomeThingWithRGB" erstellen und verwenden. Sauber, einfach und verständlich für jeden
Bin ich auch dafuer, obwohl ich einen etwas kuerzeren Namen praeferieren wuerde :)

hexenmeister

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

akr1983

#117
Zitat von: rudolfkoenig am 13 November 2018, 12:43:36
@akr1983: Vielen Dank!
Kannst du noch bitte beschreiben, welche topics/messages das Geraet fuer Farbwechsel erwartet, da ich keine Fehler durchs Code-Lesen verewigen will.
Ich empfehle solche Probleme mit cmdalias zu loesen, dann ist der Stress mit dem update kleiner.Bin ich auch dafuer, obwohl ich einen etwas kuerzeren Namen praeferieren wuerde :)

Hier das Logfile vom Zigbee2mqtt für einen Farbwechsel von "weiß" auf RGB #1100FF

2018-11-13 20:30:21 - info: Zigbee publish to '0x0017880100f08887', lightingColorCtrl - moveToColor - {"colorx":9043.83,"colory":2686.935,"transtime":30} - {"manufSpec":0,"disDefaultRsp":0} - null
2018-11-13 20:30:22 - info: MQTT publish, topic: 'zigbee2mqtt/Kueche_Licht_Spot', payload: '{"state":"ON","brightness":254,"color_temp":153,"color":{"x":0.308,"y":0.301}}'
2018-11-13 20:30:23 - info: MQTT publish, topic: 'zigbee2mqtt/Kueche_Licht_Spot', payload: '{"state":"ON","brightness":254,"color_temp":153,"color":{"x":0.274,"y":0.301}}'
2018-11-13 20:30:23 - info: MQTT publish, topic: 'zigbee2mqtt/Kueche_Licht_Spot', payload: '{"state":"ON","brightness":254,"color_temp":153,"color":{"x":0.274,"y":0.236}}'
2018-11-13 20:30:24 - info: MQTT publish, topic: 'zigbee2mqtt/Kueche_Licht_Spot', payload: '{"state":"ON","brightness":254,"color_temp":153,"color":{"x":0.217,"y":0.236}}'
2018-11-13 20:30:24 - info: MQTT publish, topic: 'zigbee2mqtt/Kueche_Licht_Spot', payload: '{"state":"ON","brightness":254,"color_temp":153,"color":{"x":0.217,"y":0.131}}'
2018-11-13 20:30:25 - info: MQTT publish, topic: 'zigbee2mqtt/Kueche_Licht_Spot', payload: '{"state":"ON","brightness":254,"color_temp":153,"color":{"x":0.167,"y":0.131}}'
2018-11-13 20:30:25 - info: MQTT publish, topic: 'zigbee2mqtt/Kueche_Licht_Spot', payload: '{"state":"ON","brightness":254,"color_temp":153,"color":{"x":0.167,"y":0.04}}'



Als Payload im Topic zigbee2mqtt/Kueche_Licht_Spot/set steht dann folgendes:

{"color":{"r":0.0666666666666667,"g":0,"b":1},"transition":3}


Es sind eigentlich nur so viele verschiedene Logeinträge im Log von zigbee2mqtt, da er durch das "transition" einen schönen Farbwechsel macht. Das scheint aber von Zigbee2mqtt zu kommen.

Hier noch der Teil mit der Konvertierung von RGB zur Payload vom Set. Das hab ich mal irgendwo gefunden. Die Transition kann man natürlich auch weg lassen:

my( $r, $g, $b ) = (hex($1)/255.0, hex($2)/255.0, hex($3)/255.0);
my %color_hash = (r => $r, g => $g, b => $b);
my %set_hash = ('transition' => 3, 'color' => \%color_hash);


Tabularasa

Hallo. Habe hierhttps://forum.fhem.de/index.php/topic,84790.msg859149.html#msg859149 schonmal was geschrieben. Kann es sein daß es mit MQTT2 nicht läuft? Danke


rudolfkoenig

Wie schon angedeutet und gerade hier angekuendigt, habe ich ein Template-Machanismus implementiert.

Ich waere dankbar, wenn jemand meine Umsetzung der Wiki-Beispiele kontrolliert, und auch, wenn man neue Template-Eintraege mir zukommen laesst.

Zum Testen am besten eine eigene Datei in FHEM/lib/AttrTemplate anlegen, Beispiele fuer was z.Zt. moeglich ist, sind in  mqtt2.template zu sehen.