neues Modul MQTTPUB für IPS ab 4.1

Nach längerem Try and Error gibt es in meiner Library ein neues IO Modul zum Publishen von Variablenänderungen an einen MQTT-Broker.

Es nutzt die mit IPS 4.1 eingeführte Möglichkeit der Registrierung auf IPS Events von einzelnen Objekten
Man registriert (subscribed) die VariableIDs, für die man Update Messages an den Broker schicken möchte. Das Modul verarbeitet dann die IPS VM_UPDATE Events, bildet aus dem Variablen-Namen, ID und Path einen MQTT Topic (kann man in der Konfiguration einstellen),z.B.

IPS/status/42440/Watt/APCUPSD_Devices/Back-UPS_RS_900G/Watt

Als Payload wird ein Json-String mit den aktuellen Wert und Eigenschaften der Variable an den Broker übertragen.

{'Path': 'APCUPSD Devices/Back-UPS RS 900G/Watt',
 'TS': 1477132802,
 'UTF8Value': '124',
 'VariableChanged': 1477132502,
 'VariableID': 42440,
 'VariableIdent': 'Watt',
 'VariableType': 2,
 'VariableUpdated': 1477132802}

Zur Installation einfach eine neue IP Instance des Moduls erstellen. Die kann dann für alle Variablen in IPS genutzt werden. Das Modul stellt die Verbindung zum Broker mittels einer angepassten phpMQTT Klasse direkt her, es wird also keine zusätzlichen IO Instance wie Client Sockets benötigt.

Folgende Funktionen stehen zur Verfügung


MQTTPUP_Publish($id,$varid); //trigger immediately publishing variable $varid to the broker
MQTTPUB_Subscribe($id,$varid); //Subscribes VM_UPDATE messages for variable $varid on IPS Messageloop
MQTTPUB_UnSubscribe($id,$varid); //UnSubscribes VM_UPDATE messages for variable $varid from IPS Messageloop
MQTTPUB_Subscribe_All($id,$objectid); // Subscribes all variable IDs below $objectid to IPS Messageloop
MQTTPUB_UnSubscribe_All($id,$objectid); //UnSubscribes all variable IDs below $objectid from IPS Messageloop

Als Beispiel Consumer habe ich ein Python Script beigelegt, womit man die an den Broker übergebenen Daten in eine Mysql-DB schieben kann.

Details zum Modul wie immer auf Github

Viel Spass!

Tommi

Would it also be possible to connect to non-standard ports and use SSL with this module?

non standard ports yes, this can be done within configuration dialog.

SSL is not available because the underlying phpMQTT library doesnt support it.
see https://github.com/bluerhinos/phpMQTT/issues/7. If you know an alternative, i would be happy to check it.

Tommi

Die Subscribe_all und UnSubscribe_All Funktionen haben heute einen neuen optionalen Parameter ‚ident‘ bekommen.


//Subscribes all variable IDs below $objectid to IPS Messageloop, optionally only thus equal which supplied ident
MQTTPUB_Subscribe_All($id,$objectid,$ident=null);
//UnSubscribes all variable IDs below $objectid from IPS Messageloop, optionally only thus equal which supplied ident
MQTTPUB_UnSubscribe_ALL($id,$objectid,$ident=null);

Damit ist es möglich, selectiv aus einem Baum gezielt einzelne Metriken auszuwählen. Ich habe z.B. unterhalb der Kategorie mit id=22000 alle Homematic Geräte liegen und möchte von den vielen hundert Veraiablen nur die mit den aktuellen Leistungsdaten an den Broker schicken.

MQTTPUB_Subscribe_All($mqttid, 22000 /*[Homematic]*/,'POWER');

Tommi