Hallo,
ich wollte mich ein bisschen mit MQTT auseinandersetzen und habe auch schon im Forum gesucht, aber leider nicht das richtige gefunden.
Ich habe Mosquitto installiert und läuft auch, ich habe zigbee2mqtt bei mir erfolgreich laufen.
Nun habe ich mir spaßeshalber mal MQTT Dash auf meinem Handy installiert und wollte mit einem Button einem Dummy die Signale on und off schicken. Und genau da hänge ich fest. Überall wo ich suche stoße ich auf subscribeSet. Doch das finde ich nicht im Pulldown-Menü von meinem Dummy. Nur publishSet und subscribeReading. Wenn ich oben attr <device> subscribeSet /Smarthome/Testschalter/Status eingebe kommt nur die Fehlermeldung, dass subscribeSet unbekannt ist
Hallo Torsten_MG,
subscribeSet gibt es nur bei MQTT_BRIDGE. Setzt du das Modul ein?
Grüße
Rainer
Zitat von: ergerd am 02 September 2018, 09:14:42
Hallo Torsten_MG,
subscribeSet gibt es nur bei MQTT_BRIDGE. Setzt du das Modul ein?
Grüße
Rainer
Nein noch nicht. Wie gesagt, bisher null erfahrung mit MQTT. Bisher nur soweit das zigbee2mqtt läuft :-[
Ohne deine FHEM-Konfiguration zu kennen wird es schwierig.
Daher gebe ich mal meine an, vielleicht hilft dir das weiter.
Ich setze MQTT_GENERIC_BRIDGE ein, hier eine List des Devices:
Internals:
DEF 192.168.48.228:1883
DeviceName 192.168.48.228:1883
FD 28
NAME myMQTT
NOTIFYDEV global
NR 235
NTFY_ORDER 50-myMQTT
PARTIAL
STATE opened
TYPE MQTT
buf
msgid 24
ping_received 1
timeout 60
READINGS:
2018-09-02 09:46:15 connection active
2018-09-02 00:01:12 state opened
messages:
Attributes:
DbLogExclude .*
room hidden
So ist ein Schalter definiert:
Internals:
BTN 05
DEF af5f 05
IODev CUNO
NAME wz_schrank
NR 188
STATE off
TYPE FS20
XMIT af5f
CODE:
1 af5f 05
READINGS:
2018-09-02 09:43:07 state off
Attributes:
DbLogExclude .*
IODev CUNO
alexaName schrank
alexaRoom alexa
alias schrank
genericDeviceType switch
group _Steckdose_
model fs20st
mqttPublish *:topic={"/SmartHome/$device/$reading"}
mqttSubscribe state:stopic={"/SmartHome/$device/set"}
room 01_wohnzimmer,alexa
userattr lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
Ich habe mir auf meinem Handy auch MQTT-Dash installiert und mit dem Topic /SmartHome/wz_schrank/state
war es problemlos möglich den Schalter zu bedienen.
Grüße
Rainer
ich habe mir gerade mqtt_Generic_Bridge installiert, komme da aber nicht ganz klar mit.
Meine List sieht so aus
Internals:
NAME mqttGeneric
NR 204
NTFY_ORDER 50-mqttGeneric
STATE ???
TYPE MQTT_GENERIC_BRIDGE
devspec .*
prefix mqtt
READINGS:
2018-09-02 10:01:58 device-count 0
2018-09-02 10:01:45 incoming-count 0
2018-09-02 10:01:45 outgoing-count 0
2018-09-02 10:01:45 updated-reading-count 0
2018-09-02 10:01:45 updated-set-count 0
devices:
globalDeviceExcludes:
globalReadingExcludes:
globalTypeExcludes:
FHEMWEB *
Global *
MQTT transmission-state
MQTT_BRIDGE transmission-state
MQTT_DEVICE transmission-state
MQTT_GENERIC_BRIDGE *
telnet *
subscribe:
subscribeExpr:
subscribeQos:
Attributes:
room MQTT
Edit: anscheinend habe ich ein anderes Modul als du ausgewählt, da bei Type bei mir was anderes steht
Das passt, mein List war nur falsch, hier das richtige:
Internals:
DEF fhem wz_schrank
IODev myMQTT
NAME mqttGeneric
NR 314
NTFY_ORDER 50-mqttGeneric
STATE ???
TYPE MQTT_GENERIC_BRIDGE
devspec .*
prefix mqtt
READINGS:
2018-09-02 00:01:08 device-count 1
2018-09-02 00:00:58 incoming-count 0
2018-09-02 10:26:28 outgoing-count 3082
2018-09-02 10:26:28 transmission-state outgoing publish sent
2018-09-02 00:00:58 updated-reading-count 0
2018-09-02 00:00:58 updated-set-count 0
devices:
wz_schrank:
:publish:
*:
topic {"/SmartHome/$device/$reading"}
:subscribe:
HASH(0x3b336a0)
globalDeviceExcludes:
globalReadingExcludes:
globalTypeExcludes:
FHEMWEB *
Global *
MQTT transmission-state
MQTT_BRIDGE transmission-state
MQTT_DEVICE transmission-state
MQTT_GENERIC_BRIDGE *
telnet *
message_ids:
subscribe:
/SmartHome/wz_schrank/set
subscribeExpr:
^\/SmartHome\/wz_schrank\/set$
subscribeQos:
/SmartHome/wz_schrank/set 0
Attributes:
DbLogExclude .*
IODev myMQTT
Jetzt für deine Schalter bzw. Dummy die Atribute setzen, da sollte dir mein List vom Device helfen.
Grüße
Rainer
[Edit] Du brauchst auch das Modul MQTT (Natürlich mit deiner IP vom Mosqitto):
define myMQTT MQTT 192.168.48.228:1883
ich blicke da nicht ganz durch, was ich da genau eintragen muß. Kannst du mir die RAW schicken? Vielleicht blicke ich dann besser durch. Danke!
Sicher.
Modul MQTT (Statt 192.168.48.228 deine IP zum Mosqitto eintragen!):
defmod myMQTT MQTT 192.168.48.228:1883
Modul MQTT_GENERIC_BRIDGE (Hier statt wz_schrank dein Dummy eintragen):
defmod mqttGeneric MQTT_GENERIC_BRIDGE fhem wz_schrank
attr mqttGeneric IODev myMQTT
Schalter (Wichtig sind nur die Atribute genericDeviceType, mqttPublish und mqttSubscribe. Diese sollten dein Dummy haben ):
defmod wz_schrank FS20 af5f 05
attr wz_schrank userattr lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
attr wz_schrank DbLogExclude .*
attr wz_schrank IODev CUNO
attr wz_schrank alexaName schrank
attr wz_schrank alexaRoom alexa
attr wz_schrank alias schrank
attr wz_schrank genericDeviceType switch
attr wz_schrank group _Steckdose_
attr wz_schrank model fs20st
attr wz_schrank mqttPublish *:topic={"/SmartHome/$device/$reading"}
attr wz_schrank mqttSubscribe state:stopic={"/SmartHome/$device/set"}
attr wz_schrank room 01_wohnzimmer,alexa
Grüße
Rainer
Danke, funktioniert jetzt so wie ich es wollte!
Gesendet von meinem SM-J730F mit Tapatalk
Freut mich das ich helfen konnte.
Grüße
Rainer
Zitat von: ergerd am 02 September 2018, 12:41:07
Modul MQTT_GENERIC_BRIDGE (Hier statt wz_schrank dein Dummy eintragen):
defmod mqttGeneric MQTT_GENERIC_BRIDGE fhem wz_schrank
attr mqttGeneric IODev myMQTT
Da war ein Bug in dem GenericBridge-Modul. der erste Parameter sollte eigentlich der Prefix fpr die Zusatzattribute in den zu überwachenden Geräten sein. Wurde jedoch ignoriert. Ändere Bitte in Deiner Definition (vor dem Update) 'fhem' auf 'mqtt', sonst fliegen nach dem Update (Morgen) aus em 'wz_schrank' alle mqtt* Attribute raus. Du kannst ggf. auch beide letzten Parameter weglassen.
Ist zwar jetzt offtopic aber ich habe noch eine Frage:
Ich habe meinen Temperaturfühler erfolgreich eingebunden und kann mir die Temperatur auch auf dem Handy in mqtt dash anzeigen lassen. Nur habe ich das Problem, wenn ich die App schließe und die Temperatur ändert sich, dann wird bei neustart der App noch die alte Temperatur angezeigt und erst wenn die Temperatur sich wieder ändert, wird die aktuelle Temperatur angezeigt. Kann ich da was anpassen oder muß ich damit leben?
Beendest Du die App, dann wird es auch nichts mehr empfangen. Es wird jedoch offensichtlich der alte Wert gemerkt. Nach dem ein neuer gesendet wird, wird dieser auch angezeigt. Du kannst natürlich auch Temperatur mit retain-Flag senden (s. Commandref), dann wird der letzte Wer gespeichert und allen Client bei der Anmeldung gleich mitgeteilt. Der Nachteil dabei ist, dass dieser Wert auch veraltet sein kann. Fällt z.B. dein Sensor aus, wird dieser gespeicherte Wert trotzden weiterhin gesendet.
@hexenmeister
Was ist eigentlich der Unterschied zwischen
defmod mqttGeneric MQTT_GENERIC_BRIDGE
und
define mqttGeneric MQTT_GENERIC_BRIDGE
interessiert mich eigentlich schon lange. Danke im voraus! ;)
Gruß Billy
Das mit dem Retain versteh ich nicht. Oder es funktioniert bei meinem Modul nicht.
Ich habe attr retain 1 und attr retain 0. Bei beiden Varianten werden die Daten im Mqtt Dash im Handy nicht aktualisiert wenn ich es starte.
Gesendet von meinem SM-J730F mit Tapatalk
define und defmod unterscheiden sich unabhängig von dem jeweiligen Modul. Daher sind wir hier sehr off topic ;)
Kurz: Beides legt zwar eine neue Instanz eines gegebenen Gerätestyps (hier also MQTT_GENERC_BRIDGE). Der Unterschied zeigt sich dann, wenn das Gerät mit diesem Namen bereits existiert. Define wirft hier ein Fehler, defmod redefiniert das Gerät neu (modifiziert die bestehende Instanz). Früher kannte FHEM nur define und modify. Später kam defmod dazu und hat Eigenschaften beider Befehle quasi vereint.
Zitat von: Torsten_MG am 02 September 2018, 18:31:24
Das mit dem Retain versteh ich nicht. Oder es funktioniert bei meinem Modul nicht.
Ich habe attr retain 1 und attr retain 0. Bei beiden Varianten werden die Daten im Mqtt Dash im Handy nicht aktualisiert wenn ich es starte.
Habe mir eine Testkonfiguration gebaut und getestet. Funktioniert. Nach dem Subscribe kommt der letzte mit retain-Flag gesendete Wert (getestet in MQTT.fx und mqtt-spy). Daher vermute ich eher einen Fehler in Deiner Konfiguration. Da Du uns diese jedoch nicht verrätst, kann ich da nicht weiterhelfen ;)
So ungefähr klappt es:
defmod mqGenTest2 dummy
attr mqGenTest2 mqttPublish bla:topic="test/bla/bla"} bla:retain=1
attr mqGenTest2 readingList bla
attr mqGenTest2 setList bla
Funktioniert jetzt bei mir. War nur zu blöd zu verstehen, wie das genau geschrieben wird. Als ich dein Beispiel übernommen habe hat alles geklappt. Danke!