(FHEM) 00 MQTT2 CLIENT.pm
Uebersetzung aus dem FHEM WIKI
MQTT2_CLIENT ist eine Reinraumimplementierung eines MQTT-Clients (der eine Verbindung zu einem externen Server wie mosquitto herstellt) ohne Perl-Bibliotheken. Es dient als IODev für MQTT2_DEVICES.
Was auch immer eine Reinraumimplementierung sein soll. Ich vermute es ist damit gemeint, dass die Programmierung "auszerhalb" des FHEM-Frameworks arbeitet.
Steckbrief
| Define | define <name> MQTT2_CLIENT <host>:<port> | |
| Set | publish [-r] topic value | Verschickt eine Nachricht an den Topic; -r setzt das retain Flag |
| password <password> value | Setzt das Passwort, welches in FHEM/FhemUtils/uniqueID gespeicher ist. Wenn kein <passwort> uebergeben wird, wird das Passwort geloescht. | |
| connect | Dient zum manuellen Verbinden an den Broker. | |
| disconnect | Dient zum manuellen Unterbrechen der Verbindung zum Broker. | |
| Get | ||
| Readings | ||
| Attributes | simple|complex]" | siehe Erlaeuterung |
| binaryTopicRegexp <regular-expression> | ||
| ignoreRegexp | ||
| clientId <name> | setzt die ClientId | |
| clientOrder [MQTT2_DEVICE] [MQTT_GENERIC_BRIDGE] | ||
| connectTimeout <seconds> | ||
| disable | ||
| disabledForIntervals | ||
| disconnectAfter <seconds> | ||
| keepaliveTimeout <seconds;> | ||
| lwt | ||
| lwtRetain | ||
| mqttVersion 3.1,3.1.1 | ||
| msgAfterConnect [-r] topic message | ||
| msgBeforeDisconnect [-r] topic message | ||
| qosMaxQueueLength <number> | ||
| rawEvents <topic-regexp> | ||
| subscriptions <subscriptions> | ||
| SSL | ||
| sslargs | ||
| username <username> |
Erlaeuterungen
Es wird nur QoS 0 und 1 unterstuetzt.
Saetze evtl. zum Einbauen.
Ich nutze ebenfalls MQTT_GENERIC_BRIDGE zum "Weiterbefördern" relevanter Informationen von den Nebensystemen zum Hauptsystem.
Das Trennen der vom Nebensystem angelieferten Informationen übernimmt dabei das Attribut bridgeRegexp eines allgemeinen MQTT2_DEVICEs auf dem Hauptsystem.
Usererror 1
Was bei mir gefehlt hat war die "base" Definition sowie eine Bridge mit dem entsprechenden Filter
bridgeRegexp \ SmartHome/MqttGenericBridge2/([A-Za-z0-9]*)/.*:.* "mgb2_$1"\
Das Autocreate hat nach den Anpassungen dann auch funktioniert. Die letzte Herausforderung ist nun, dass ich auf dem Slavesystem Namen mit einem Underscore habe und diese abgeschnitten werden. Experimente mit der RegEx Definition hatten bisher noch keinen Erfolg.
Da dieser Matchingparameter [([A-Za-z0-9]*)] bei den Underscores aufhört bei der Deviceerstellung, habe ich eine Wildcard [.*] genutz... ist aber nicht effektiv, da alle Radings in einem Device landen
([A-Za-z0-9]...*) weitere Varianten
hat das Problem mit den _ in den Devicenamen gelöst.
([^/]+)
https://forum.fhem.de/index.php?topic=98206.0
Usererror 2
Ich falsch davon ausgegangen, dass die Port-Angabe entfallen kann wenn sie Standard (1883) ist.
defmod MQTT_CLX_FHEMClient MQTT2_CLIENT 192.168.178.10:1883
Defmod mit Port-Angabe hat dann auch direkt ein Publish zugelassen.