MQTT

Begonnen von smurfix, 21 Januar 2015, 09:26:49

Vorheriges Thema - Nächstes Thema

stephanwenzel

Zitat von: JoWiemann am 14 Januar 2016, 19:54:09
Hallo,

dafür gibt es Editoren, die das können sollen. Anbei das gepatche Modul. Bitte das Modul dann vom Update ausnehmen. Sonst wird es wieder überschrieben.

Grüße Jörg

Hallo,

entschuldigt bitte diese Anfängerfrage aber wo kann ich dann den Benutzernamen und das Passwort für den MQTT Broker eingeben? Ich habe das Modul 00_MQTT.pm mit der gepatchten Version ersetzt und FHEM sicherheitshalber neu gestartet. Wo kann ich jetzt den Benutzernamen und das Passwort eingeben?

Danke!!!

hexenmeister

Schau ins Commandref in dem gepatchten Modul.
Define

    define <name> MQTT <ip:port> <username:password>

    Specifies the MQTT device.

    Username and password are optional.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

klausw

Das Modul unterstützt nicht zufällig TLS?  :o
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

hexenmeister

Zitat von: klausw am 06 Juni 2016, 10:33:53
Das Modul unterstützt nicht zufällig TLS?  :o

gute frage, müsste man reinschauen. Würde aber eher nicht erwarten.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

smurfix

Zitat von: klausw am 06 Juni 2016, 10:33:53
Das Modul unterstützt nicht zufällig TLS?  :o
Nö. Bau es ein ... oder verfrachte deine Infrastruktur in ein eigenes VLAN, so dass von vornherein keiner mitlesen kann. (Intelligente Switche sind was Feines.)

netbus

Hallo,
ich habe eine Frage zu autoSubscribeReadings
Laut commandref soll man es zum generieren der subscribe attribute verwenden und dann kann man es wieder löschen.
Ohne diesen Attribut empfange ich aber keine Readings mehr.
Muss man es doch dauerhaft verwenden und Topics zu empfangen?
Weiteres ist mir aufgefallen das manche statt dem + ein # verwenden.
Das # wird aber in der commandref gar nicht erwähnt. Wo liegt da der Unterschied?

klausw

Zitat von: smurfix am 06 Juni 2016, 12:14:05
Nö. Bau es ein ...
im mom ist der Leidensdruck noch nicht groß genug  8)
Zitat von: smurfix am 06 Juni 2016, 12:14:05
oder verfrachte deine Infrastruktur in ein eigenes VLAN, so dass von vornherein keiner mitlesen kann. (Intelligente Switche sind was Feines.)
im Heimnetz ist das überflüssig, alllerdings will ich über das Inet gehen und wenn möglich ohne vpn wie bisher
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

amithlon

#22
Hallo,

Zitat von: netbus am 06 Juni 2016, 16:06:54
Weiteres ist mir aufgefallen das manche statt dem + ein # verwenden.
Das # wird aber in der commandref gar nicht erwähnt. Wo liegt da der Unterschied?

ich habe mich gerade erst angemeldet und FHEM auch erst vorgestern installiert, um zu schauen, wie es mir gefällt.
Da es bei mir im Moment sozusagen nur "FrontEnd" für MQTT ist, antworte ich hier mal trotzdem:

+ und # sind die MQTT Subscribe/Publish-Platzhalter. + ersetzt genau einen topic-Teil, # alle folgenden.
Beispiel: Haus/Wohnzimmer/Temperatur
+/Wohnzimmer/Temperatur liefert auch Sommerhaus/Wohnzimmer/Temperatur
Haus/+/Temperatur liefert auch Haus/Keller/Temperatur
+/+/Temperatur liefert alle Temperaturen.

Haus/# liefert alle mit Haus am Anfang, Haus/Wohnzimmer/# alle vom Wohnzimmer
# liefert überhaupt alles...

Damit kann man in MQTT schon schön gruppieren, mit Haus/+/Licht aus im ganzen Haus das Licht ausmachen...

Inwiefern das in FHEM ein Vorteil ist, muß ich noch ergründen...


Ich hänge hier mal gleich eine Frage ran, weil ich zu MQTT und FHEM noch nicht allzuviel gefunden habe.

# PC-Steckdose
define DOSE_1 MQTT_DEVICE
attr DOSE_1 IODev mqtt
attr DOSE_1 group Energie
attr DOSE_1 publishSet ein aus  Dose/1
attr DOSE_1 room Wohnzimmer
attr DOSE_1 stateFormat state
attr DOSE_1 webCmd ein:aus

set DOSE_1 ein usw. geht problemlos.

MQTT verschickt ja im payload prinzipiell beliebige Daten.

Also mein Versuch mit meiner Thermometeranzeige in gleicher Art. Geht nicht, weil ein publishSet angegeben werden muß und
attr IN9 publishSet state  IN9/Temperatur
einen Fehler erzeugt.

Eigentlich will ich nur mit
set IN9 245
den Temperaturwert in 1/10 Grad schicken.

Ich habe es jetzt erstmal mit einem dummy-Device und MQTT_BRIDGE gelöst, da gibt es publishState und der schickt auch meinen analogwert richtig raus.
Macht es aber unnötig kompliziert in der Config.

Kann man publshState auch in MQTT_DEVICE mit einbauen oder im publishSet eben state einbinden?
Ich schaue da im Moment noch etwas hilflos rein, Perl und die Struktur von FHEM sind mir dazu noch zu fremd...

Gruß aus Berlin
Michael



netbus

Danke fürs Erklären

Gesendet von meinem SM-G935F mit Tapatalk


klausw

Zitat von: amithlon am 07 Juni 2016, 18:29:42
Also mein Versuch mit meiner Thermometeranzeige in gleicher Art. Geht nicht, weil ein publishSet angegeben werden muß und
attr IN9 publishSet state  IN9/Temperatur
einen Fehler erzeugt.

Eigentlich will ich nur mit
set IN9 245
den Temperaturwert in 1/10 Grad schicken.

Ich habe es jetzt erstmal mit einem dummy-Device und MQTT_BRIDGE gelöst, da gibt es publishState und der schickt auch meinen analogwert richtig raus.
Macht es aber unnötig kompliziert in der Config.

Kann man publshState auch in MQTT_DEVICE mit einbauen oder im publishSet eben state einbinden?
Ich schaue da im Moment noch etwas hilflos rein, Perl und die Struktur von FHEM sind mir dazu noch zu fremd...

Die MQTT_BRIDGE ist eigentlich auch genau das, was du brauchst.

MQTT_DEVICE -> empfangen und senden von MQTT Telegrammen
MQTT_BRIDGE -> Readings eines anderen Devices über MQTT rausschicken bzw. über MQTT empfangene Telegramme als set an dieses Device schicken.

Ist die Temperaturanzeige ein Device in FHEM?
In diesem Fall kannst du mit publishReading_* über eine MQTT_BRIDGE das entsprechende Reading einfach über MQTT rausblasen.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

amithlon

Hallo,

vorab: ich habe es mit MQTT_BRIDGE in Betrieb, insofern also kein direkter Handlungsbedarf.

Zitat von: klausw am 08 Juni 2016, 09:39:30
Die MQTT_BRIDGE ist eigentlich auch genau das, was du brauchst.

MQTT_DEVICE -> empfangen und senden von MQTT Telegrammen

Genauso würde ich es interpretieren, so stimmt es aber eben nicht ganz.
MQTT_DEVICE verschickt nur genau die Werte, die als Vorgaben in publishSet definiert wurden.
Letztlich scheint publishSet ja nur ein Filter zu sein, der alles verwirft, dort nicht definiert wurde.
Bei attr DOSE_1 publishSet ein aus  Dose/1 wird eben ein oder aus mit dem MQTT-topic DOSE/1 geschickt.
publishSet state DOSE/1 sollte eben einfach den Inhalt von state mit topic DOSE/1 schicken können, wäre für mich einfach konsistenter, MQTT hat dort ja keine Einschänkung.

Ich kann somit "set DOSE_3 ein" schicken oder "set DOSE_3 aus". Aber nicht z.B. "set DOSE_3 125" wenn es z.b. ein Dimmer mit Analogwerten ist.
Dann baut man extra ein dummy und muß MQTT_BRIDGE benutzen, unnötige config-Zeilen meine ich.

Gruß aus Berlin
Michael



klausw

Ak ok, jetzt verstehe ich.


    attr <name> publishSet [<commands>] <topic>


Hast du schonmal versucht <commands> wegzulassen?
Evtl. kannst du auch ein regex z.B. für Zahlen verwenden.

Noch ein kleiner Hinweis: wenn du den den MQTT Geräten die Attribute veränderst dann wurde das bei mir nicht korrekt übernommen. Ich musste die attribute immer löschen und neu anlegen.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

amithlon

Zitat von: klausw am 08 Juni 2016, 18:15:32
Ak ok, jetzt verstehe ich.


    attr <name> publishSet [<commands>] <topic>


Hast du schonmal versucht <commands> wegzulassen?
Evtl. kannst du auch ein regex z.B. für Zahlen verwenden.

Noch ein kleiner Hinweis: wenn du den den MQTT Geräten die Attribute veränderst dann wurde das bei mir nicht korrekt übernommen. Ich musste die attribute immer löschen und neu anlegen.

Eine Aufzählung geht, z.B.  attr DOSE_1 publishSet 100 150 200 300 350 400  Dose/1
Dann kann man jeden dieser Werte benutzen. Eine RegEx ist mir nicht gelungen, da kommt dann (frei übersetzt) "Einen Wert aus xxx benutzen"" xxx ist dann genau der Text.
Ohne <commands> kommt eben  "Einen Wert aus  benutzen ".

Ich werde da vermutlich mal reinschauen, wenn ich mich etwas mehr mit Perl angefreundet habe.
Ich suche mir sowieso immer Seltsames aus. ;)
Meine Sensoren sind 433MHz Eigenbau (AVRtiny/RFM02), schon ein paar Jahre in Betrieb. Jetzt mit den ESP8266 rumgespielt, eine 433MHz-WLAN/MQTT-Bridge mit dem ESP8266 gebaut, ein paar MQTT-Clients mit den ESP, eine alte Pearl-Laufschrift als MQTT-Client usw.
FHEM ist da jetzt eigentlich "drübergestülpt" und gefällt mir.
Die Laufschrift zeigt jetzt auch den nächten Titel an, den der IceCast-Player spielt. Stream-Client ist ein Eigenbau mit ESP8266 und VS1003.
IceCast, Mosquitto als MQTT-Broker und FHEM laufen auf einem RasPi.

Mal schauen, was daraus noch wird, ist letztlich Zeitvertreib, nichts davon ist mir bis jetzt lebenswichtig.

Gruß aus Berlin
Michael


amithlon

Hallo,

mein Problem hat sich gelöst...
Ein anderer thread hat mich zur Lösung gebracht:

# IN9
define IN9_1 MQTT_DEVICE
attr IN9_1 IODev mqtt
attr IN9_1 publishSet_IN9temp IN-9/Temperatur
attr IN9_1 stateFormat IN9status
attr IN9_1 subscribeReading_IN9status IN-9/Status

Die attr-Vorbelegung mit publishSet_.* ist leider wenig hilfreich, dort muß der FHEM-Variablenname hin und der MQTT-topic hin.
Dann wird der Inhalt von IN9temp auch unabhängig vom Inhalt rausgeschickt.

Dort wäre publishSet_ angebrachter um dann das Parameterfeld auszufüllen und anzuhängen.

Gruß aus Berlin
Michael

PatrickR

Mahlzeit!
Zitat von: smurfix am 22 Februar 2015, 00:01:14
Patch im Anhang. Getestet. Jemand mit Schreibrechten importiere dies bitte ins CVS.
Sorry, dass ich das Thema wieder pushe aber der Patch läuft einwandfrei und es wäre schön, wenn den jemand einchecken würde.
Danke, Smurfix.

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook