MQTT

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

Vorheriges Thema - Nächstes Thema

hexenmeister

Hallo Stephan,

würdest Du den letzten Patch auch übernehmen? Diesmal habe ich wesentlich intensiever getestetund es dürfte nicht mehr so daneben gehen.  :o

Danke und Grüße
Alexander

eisler

Hallo Alexander,

habe deinen Patch mit aufgenommen. ( https://svn.fhem.de/trac/changeset/14529 )

Grüße
Stephan

hexenmeister

Danke,
dann kann ich mich ja an QOS/RETAIN (und Doku) dram machen  :)
Da Qos-Steuerung in dem IO-Modul implementiert ist, wird das leider Änderungen in allen drei Dateien (MQTT; MQTT_BRIDGE und MQTT_DEVICE) nach sich ziehen  >:(

Dann hätte ich (glaube ich) alles, was ich für mein Mqtt-Projekt brauche 8)

Grüße
Alexander

eisler

Hallo Alexander,

können wir gerne so machen. :)

Grüße
Stephan

PatrickR

Mahlzeit!

Zitat von: hexenmeister am 17 Juni 2017, 12:15:33
Auch ganz ohne Wertedefinition funktioniert es jetzt und es können beliebige Werte gepublisht werden.

Großartig, ich habe gerade auf den 10. Blick festgestellt, dass das mein Problem mit den Leerzeichen in den messages löst. Danke!

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

hexenmeister

Letzte Tage hatte ich keine Zeit für die Weiterentwicklung. Jetzt habe ich erste Testversion mit einer erweiterten Retain-Unterstützung.


Was ist bereits erledigt?
- MQTT_DEVICE: Erweiterung für 'publishSet':
   bugfix:  senden von beliebigen Werte (ohne Angabe von Wertelisten), auch Zeichenketten mit Leerzeichen
           
             set <device> just a simple Test

           
   feature: Angabe von mehreren Wertelisten gleichzeitig, Unterstützung von FHEM-Extensions ('slider' etc.)
            Beispiel:
           
            attr <device> publishSet on off switch:on,off level:slider,0,1,100 /topic/123
           
            #In diesem Fall werden on und off in beim set-Befahl direkt akzeptiert:
            set <device> on
           
            #Eigenschaft 'switch' akzeptiert auch on oder off (FHEM-WebUI zeigt eine Auswahlliste):
            set <device> switch on
           
            #Eigenschaft 'level' akzeptiert einen Wertebereich von 0 bis 100 (WebUI zeigt einen Schieberegler mit Step 1):
            set <device> level 50


- MQTT_DEVICE und MQTT_BRIDGE: Erweiterung für 'retain':
   feature: Möglichkeit, Retain-Flag für verschiedene Readings einzeln anzugeben.
            Beispiele:
             
             # aus Kompatibilitätsgründen gleiches verhalten, wie bis jetzt, gilt allso für alles
             attr <device> retain 0
             
             # hier wird mit * die Default-Vorgabe angegeben, für set ohne Name (publishSet) gilt 1,
             # für 'test' (set <device> test XYZ) gilt auch 1.
             # Wichtig! Für die per publishSet definierten Namen (publishSet switch:on,off ...)
             # müssen ebenso eigenen Angaben gemacht werden, sonst gilt Default-Wert!
             attr <device> retain *:0 1 test:1



Ideen / Was wird möglicherweise noch implementiert?

- MQTT_DEVICE und MQTT_BRIDGE: Erweiterung für 'qos' )auf die gleiche Weise, wie für 'retain')

- MQTT: ClientFn: Unterstützung für andere Client-Module außer MQTT_DEVICE und MQTT_BRIDGE

- MQTT_BRIDGE: subscribeSet / subscribeSet_XXX:
              zusätzlich zum Topic kann ein Perl-Ausdruck mitgegeben werden, der beim Empfang ausgewertet wird.
              Returnwert entscheidet, ob Reading gesetzt ('true'), oder verworfen wird ('false').
              An das auszuwertende Ausdruck sollen folgende Variablen mitübergeben werden: $hash, $name, $topic, $value, $parentname
             
              attr <device> subscribeSet /topic/cmd {if ($value eq "config") fhem("set $parentname getconfig");; 0}


- MQTT: last will: Unterstützung für "last will"-MQTT-Feature:
             
              attr <device> lastWill /topic/status connection lost

- MQTT: onConnect: Publish on connect (Gegenpart zum last will):
             
              attr <device> onConnect /topic/status connected
              eventuel auch:
              attr <device> onConnect {Perl-Ausdruck} /topic/status connected


- MQTT_DEVICE und MQTT_BRIDGE: Möglichkeit, MQTT-Nachrichten direkt zu versenden:
             
              set <device> publishRaw <topic> <value>
              # bestimmte vorhandene Readings (wieder) versenden
              set <device> publish <reading>[,<reading]
              # alle bekannten Readings versenden
              set <device> publishAll



Billy

FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

klausw

Ich würde das Thema TLS gern in den Raum stellen.
Es wäre super wenn sich die das MQTT Modul auch verschlüsselt mit dem Server unterhalten kann.

Grüße
Klaus
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

PatrickR

+1 für TLS


Von unterwegs gesendet.
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

hexenmeister

TLS ist sicher ein nützliches Feature. Aber ich bin hier raus. Keine Ahnung, wie man das in Perl implementieren soll, außerdem unterstützen keine meiner Devices MQTT mit TLS.


klausw

Net::Mqtt unterstützt meines Wissens bereits TLS.
Vermutlich müssen nur ein paar Parameter übergeben werden.

Gesendet von meinem HTC One mit Tapatalk

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 23 Juni 2017, 20:29:56
Net::Mqtt unterstützt meines Wissens bereits TLS.
Vermutlich müssen nur ein paar Parameter übergeben werden.

Nein, leider nicht so einfach. Das Modul benutzt Net::MQTT nur zum Erstellen der Messages, kommunikation erfolgt per DevIo_SimpleWrite.
Zumindest, wenn ich es richtig verstanden habe.


eisler

Hallo Alexander,

TLS sollte mit DevIo_OpenDev funktionieren falls $hash->{SSL} gesetzt ist und der DeviceName der Regexp ^(.+):([0-9]+)$ entspricht.

Grüße
Stephan

hexenmeister

Hallo Stephan,

das wusste ich nicht, allerdings dürfte das auch noch nicht reichen. Wie übergibt man den notwendigen Zertifikat? Evtl. geht das über das Betriebssystem, aber wie gesagt, habe leider keine Erfahrung mit SSL und Perl.

Grüße

Alexander


eisler

Hallo Alexander,

Dazu kann ich in DevIo.pm auch nichts finden. Vor einiger Zeit hatte ich mir das Thema schon mal angeschaut, hatte leider keine Zeit das weiter zu verfolgen:
https://forum.fhem.de/index.php/topic,64358.msg555768.html#msg555768

Grüße
Stephan