MQTT und MySensors

Begonnen von BobbyD, 25 November 2014, 10:47:49

Vorheriges Thema - Nächstes Thema

BobbyD

Hallo,

ich benutze mit FHEM die Mysensors Umgebung mit dem MQTT-Gateway (Arduino). Ich bekomme auch alle meine Sensoren in FHEM angezeigt und kann auch Werte zum Sensor schicken.
Jetzt habe ich bei einem Sensor, testweise, die Batterie Erkennung bzw. die Prozentanzeige für den Ladezustand der Batterie eingebaut.
Vom Sensor bekomme ich am Gateway auch den übermittelten Wert angezigt nur in FHEM bekomm ich den nicht rein.

>>30 17 00 11 4D 79 4D 51 54 54 2F 39 2F 31 2F 56 5F 54 45 4D 50 32 30 2E 35
0;0;3;0;9;read: 9-9-0 s=255,c=3,t=0,pt=1,l=1:249
0;0;3;0;9;read: 9-9-0 s=255,c=3,t=0,pt=1,l=1:250
0;0;3;0;9;read: 9-9-0 s=1,c=1,t=0,pt=7,l=5:20.6
MyMQTT/9/1/V_TEMP

Das kommt am Gateway an. Die 20.6 ist der Wert für die Temp. Die Zeilen oben drüber sind der Batterie Wert (hier keine reellen Werte, da Sensor an Strom und nicht Batterie hängt).

Kann mir da jemand bitte weiterhelfen?

Vielen Dank
BobbyD

ntruchsess

in FHEM kannst Du da nicht machen, Du müsstest den Sourcecode des MQTT-gateways dahingehend erweitern, dass er das weiterleitet.

Hast Du schon mal das MYSENSORS-modul (in Verbindung mit dem Ethernet-gateway) probiert? Die MQTT-anbindung von MySensors an FHEM ist damit eigentlich obsolete (falls man die MQTT-messages nicht noch in einem anderen Kontext brauchen kann).

- Norbert
while (!asleep()) {sheep++};

John

Ich habe den MySensor / MQTT-Gateway von Norbert noch etwas angepasst/erweitert, sowie eine Erweiterung für MySensors-Lib erstellt.

Folgende Änderungen

       
  • MySensor Nodes können nun zusätzlich Attribute übertragen (name, location..)
  • die MQTT-Item-Systematik wurde entsprechend angepasst, so daß sich die Sensoren weitgehend selbst erklären
Das Ergebnis im Anhang

1.Bild: Darstellung der Token-Struktur in MQTT-Spy.
2.Bild: Darstellung in FHEM

Die Erweiterung lässt sich im Sketch wie folgt nutzen:

MySensorJ gw; // erweiterte Klasse MySensorJ

void setup()
{
..
  gw.sensorAttribute(CHILD_ID_HUM,A_NAME,"MS.HUM.1");
  gw.sensorAttribute(CHILD_ID_HUM,A_LOCATION,"Bathroom");
  gw.sensorAttribute(CHILD_ID_HUM,A_SENSORDATATYPE,S_HUM);
..
}
/


Ich halte es für den weitaus besseren Weg, MySensors über MQTT anzubinden als über einen den MySensors-Gateway.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

hexenmeister

Cool, die Idee ist gut.
Noch besser wäre, die Änderung bei MySensors vorzuschagen. Denn bald soll die neue Protokoll-Version 1.5 fertig werden. Wäre schade immer wieder neu patchen zu müssen.
So richtig gut wäre es, wenn man die Zusätzlichen Attribute auch per Funk setzen könnte, anstatt immer wieder neu Sketch kompilieren zu müssen (ist ja nicht für mehr als 2-3 Stück zu gebrauchen).

Grüße,

Alexander


John

#4
Hallo Alexander,
das ist nicht unbedingt nötig.

Man kann mit einem beliebigen MQTT Client weitere Attribute im Sensor-Knoten anlegen.
Die Informationen müssen also nicht selbst im Sensor vorhanden sein.
Der Broker merkt sich diese Infos, wenn das Topic mit Retain-Flag angelegt wurde.

Habe mal Testweise das Topics FHEM im Sensor-Knoten angelegt.

1. Bild: Ergebnis der Maßnahme in FHEM
2. Bild: erzeugen des Topics via MQTT-Spy

MS.Switch ist ein Relais, das sich von FHEM, aber eben auch von allen anderen MQTT-Clients schalten lässt, die die Bechtigung haben.

Mosquitto unterstützt ja ACL, so dass für jeden Zweit pro User die Zugriffsrechte zu regeln sind.
Damit kann ich festlegen, dass etwa nur der Client FHEM hier schreiben darf, was übrigens bestens funktioniert.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

hexenmeister

Ja, klar, aber damit würde ja die ganze Erweiterung nicht nötig sein, oder? Ich würde aber schon ganz gut finden, dass die Sensoren alle Infos selbst beherbergen. Nur eben einstellbar. Willst Du Deine Idee mit Attributen bei MySensors-Forum vorschlagen? Ist ja schon zimlich unversäll einsetzbar und nicht auf MQTT beschränkt.