FHEM und LoRaWAN

Begonnen von rz259, 14 Dezember 2024, 13:56:42

Vorheriges Thema - Nächstes Thema

rz259

Hallo zusammen,

ich möchte gerne zukünftig LoraWAN-Sensoren in meinen Hausautomatisierung einbauen. Da die Sensoren auch im Haus sind, würde ich aber ungern TTN nutzen, sondern möchte ein privates LoraWAN-Netzwerk aufbauen - es interessiert ja wahrscheinlich auch niemanden, wie warm es in meinem Haus ist. Die Verbindung zu FHEM soll dann über MQTT laufen.

Ich habe mir inzwischen ein LoraWAN-Gateway besorgt (das LPS8V2 von Dragino) sowie zwei LHT52-Sensoren (ebenfalls von Dragino).

Jetzt geht es darum, das Netzwerk aufzubauen und ich scheitere schon an den Basics. Ich habe das Gateway in Betrieb genommen - das Gateway hat die Möglichkeit von zwei verschiedenen LoraWAN-Netzwerken. Das erste ist per Default auf TTN eingestellt (das habe ich auch mal so gelassen), das zweite habe ich auf Custom/Private eingestellt (Adresse 127.0.0.1), wobei ich mir da schon unsicher bin. Es gibt auch die Option "Builtin server" - vielleicht müsste ich ja auch das nehmen?

Was muss ich da genau einstellen? Und wie kann ich die Sensoren in Betrieb nehmen?  Wie kann ich das Ganze mit FHEM verbinden? Im Gateway habe ich MQTT aktiviert und als Adresse meinen Raspberry angegeben, auf dem FHEM läuft. Daten kommen jedoch noch keine an, ist ja auch klar, weil die Sensoren noch nicht mit dem Netzwerk verbunden sind.

Die Frage ist, was muss ich alles in welcher Reihenfolge machen, damit
a) meine Sensoren mit dem Gateway verbunden werden und
b) die Daten an FHEM gesendet werden

Ich habe leider nirgendwo eine Anleitung für diesen Fall gefunden und wäre für jede Hilfe dankbar. Die meisten Antleitungen beziehen sich auf TTN, was ich ja nicht brauche und eigentlich auch nicht will - zumindest nicht für alle Sensoren. Ich würde das Procedure für spätere Interessenten genau dokumentieren, damit es dann für diese leichter wird.

Sollte es doch irgendwelche Tutorials oder Anleitungen geben, die ich übersehen habe, dann dürft ihr mich natürlich auch gerne darauf verweisen.

Vielen Dank schon mal fürs Lesen und eure Ratschläge,

Rudi

rudolfkoenig

Ich habe das Geraet nicht, ich rate anhand Doku:

- erst in FHEM einen MQTT2_SERVER definieren mit: define m2s MQTT2_SERVER 1883 global
- pruefen, ob in FHEM eine autocreate Instanz definiert ist. Per Auslieferung ist das vorhanden, ansonsten eine definieren mit: define autocreate autocreate
- in den LPS8V2 Einstellungen, unter MQTT Forwarder bei Broker Address die Adresse des FHEM Servers angeben (am besten als IP-Adresse), als Port 1883, Benutzer, Passwort und Zertifikate leer lassen. Topic ist erstmal egal, Format json ist richtig, und zum Schluss Save&Apply
- danach sollte in FHEM eine MQTT2_DEVICE Instanz angelegt werden, zunaechst eine fuer alle Sensoren.
- damit man diese Sensoren einzelnen FHEM Geraeten zuordnen kann (was das Protokollieren, die Anzeige, usw vereinfacht), sollte man bei der gerade angelegten MQTT2_DEVICE Instanz ein bridgeregexp Attribut setzen. Wie das ausschaut, haengt von den empfangenen Nachrichten ab. Bei diesem letzten Schritt koennen wir erst was Konkretes sagen, wenn wir sehen, was genau empfangen wurde => In der Detailansicht der angelegten MQTT2_DEVICE Instanz unten den "Copy for forum.fhem.de" Knopf druecken, und das Ergebnis hier per Einfuegen uns zeigen.

Das meiste haben wir aber schon angesprochen in diesem Thema: https://forum.fhem.de/index.php?topic=139642

Jamo

#2
Hallo Rudi (rz259),
das muss im Gateway etwa so aussehen:LoRaWAN Configuration - General Settings
Email dragino-123456@dragino.com
Gateway EUI 1234567890123456

Primary LoRaWAN Server
Service Provider The Things Network v3 Server Address eu1.cloud.thethings.network
Uplink Port 1700 Downlink Port 1700

Secondary LoRaWAN Server
Service Provider Custom/Private LoRaWan Server Address <IP.Add.Vom.Raspi>
Uplink Port 1700 Downlink Port 1700

Der Rest ab hier bleibt alles leer.

Current Mode:LoRaWAN Semtech UDP

Dann musst Du ja natürlich noch auf deinem Raspi den 'Custom/Private LoRaWan' Server aufsetzen, der under der <IP.Add.Vom.Raspi> erreichbar ist. Das ist dann evtl ein Chirpstack Server. Auf dem Chirpstack Server verbindest Du dann das Gateway, und dort lernst Du dann erstmal alle deine Sensoren verschlüsselt an, die sich dann nach der Anmeldung mit dem Gateway verbinden. Im Webfrontend von Chirpstack siehst Du dann auch, ob die Daten der Sensoren vom Gateway empfangen werden. In den Device Profiles deiner Sensoren richtet man auch den Payload codec ein, der die empfangenen RAW data Bytes in z.b. Temp und Humidity umsetzt.

Im Chirpstack Server, der jetzt alle events deiner Sensoren empfängt, wird dann unter "Applications" die Integration mit MQTT eingerichtet. Diese Integration sendet dann alle Events an FHEM. Mit google findest Du alle Information zum aufsetzten eines Chirpstack Servers. So habe ich das gemacht.

So wie Rudi (rudolfkoenig) kannst du es auch machen, aber Du benoetigst trotzdem immer einen Server, um die Sensoren anzulernen.
Falls dass Gateway dann wie bei Rudi (rudolfkoenig) beschrieben die Sensor Daten per MQTT direkt an FHEM sendet, musst Du den Payload decoder der Raw Bytes dann in FHEM realisieren. Das ist mein Verständnis.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

rz259

@rudolfkoenig

Ich habe den Server mit 0

defmod MQTT2SRV MQTT2_SERVER 1883 global
definiert. Ist das gleichwertig zu deinem Vorschlag oder besteht da ein Unterschied?
Die MQTT2-Instanz ist auf jeden Fall schon vorhanden, die Frage ist, ob sie richtig ist.

Das mit der IP-Adresse für den MQTT ist ein guter Hinweis, aktuell steht da der Name des Servers drin.

Und bzgl. dem Chirpstack-Server - brauche ich sowas, wenn ich FHEM einsetze oder nicht?



Jamo

Zitat von: rz259 am 14 Dezember 2024, 17:36:41Und bzgl. dem Chirpstack-Server - brauche ich sowas, wenn ich FHEM einsetze oder nicht?
Ja, Du musst ja deine Sensoren mit der Device Adress, Device EUI (DevEUI, findest Du auf dem Karton des Sensors), Join EUI, Application session key, etc an einem Server anlernen. Das kann Chirpstack (lokal, privat) oder TTN (thethings.network, public cloud) oder Helium sein. Du brauchst also immer einen Server, der dein Gateway und deine Sensoren im Netzwerk von Chirpstack oder TTN bekannt macht.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

rz259

#5
Vielen Dank für den Hinweis mit dem Chirpstack-Server. Ich hatte schon gelesen, dass man auch einen Application Server benötigt, war aber naiverweise davon ausgegangen, dass der bereits in FHEM integriert ist. Ich hatte schon mal einige Fragen zu dem Thema gestellt und irgendwie habe ich das fälschlicherweise so interpretiert, dass ich außer FHEM und dem Gateway nichts benötigen würde.
Ich hatte mich auch schon gewundert, wie ich in FHEM die jeweiligen Keys für die Devices bekanntmachen könnte.

Schade, es wäre cool gewesen, wenn ich auf den Chirpstack-Server hätte verzichten können, schließlich muss man die Sachen ja nicht komplizierter als unbedingt nötig machen...

Die Frage ist, muss ich hier einen neuen Raspberrypi aufsetzen oder kann ich das auch auf einem bestehenden Server hinzufügen. Auf die Schnelle hat meine Suche ergeben, dass es für den Chirpstack Server ein eigenes Image gibt, d. h. dass man dafür einen neuen Server einrichten muss - lieber wäre es mir natürlich, wenn ich das auf dem bestehenden Server laufen lassen könnte.

Update:

Für Chirpstack gibt es auch einen Container, der auch unter dem Raspberry läuft - da bin  ich gerade dran,  mich durchzuwühlen - einfach so out of the box funktioniert es erst mal nicht. Darum gibt's ja auch wahrscheinlich die Images für den Raspberry, damit geht es wahrscheinlich deutlich einfacher, aber dafür läuft halt dann noch eine Maschine mehr...

Vielen Dank schon mal,

Rudi

rz259

Hallo,

ich bin nun etwas weiter, ich habe einen Chirpstack-Server mit einem Docker-Container aufgesetzt und schon mal einen Sensor angelernt. Das funktioniert soweit gut, ich sehe auch die Daten (Events) in Chirpstack. Allerdings weiß ich nicht, welches DeviceProfile ich am besten einsetzen sollte - es gibt drei verschiedene Auswahlmöglichkeiten
- none (die Daten werden roh übertragen)
- Cayenne LPP - das funktioniert nicht, da erscheint dann ein Fehler oder
- Javascript Function

Wie ist da die beste Strategie? Kann ich die Daten per Javascript function dekodieren und dann am FHEM per MQTT weitergeben? Oder soll ich die Daten unbearbeitet an FEHM weitergeben.

Und dann habe ich noch das Problem, dass ich zwar MQTT enabled habe und bei meinem LoraWAN-Server auch die IP-Adresse des Raspberry-Servers eingetragen habe, auf dem FHEM läuft, aber da scheint nichts anzukommen, ich habe auch kein Gerät gefunden, welches automatisch angelegt wurde.

Wo würde das Gerät denn angelegt werden bzw. wie wäre ein möglicher Name für das Gerät? Muss ich noch weitere Sachen in Chirpstack machen, damit die MQTT-Payload weitergeleitet wird?

Jamo

#7
Hallo Rudi,
der Payload decoder fuer deinen LHT52 findest Du unter https://github.com/dragino/dragino-end-node-decoder/tree/main/LHT52 (ehemals https://www.dragino.com/downloads/index.php?dir=LoRa_End_Node/LHT52/Decoder/, siehe readme.txt)
Dieser payload decoder wird unter chirpstack in "Device Profiles" -> "Codec" -> Payload codec/JavaScript functions in dem grossen Eingabefeld einkopiert.

Wie Du selber sagst, Du hast 2 Möglichkeiten,
1) wie von Rudi beschrieben, per MQTT aus dem Gateway raus. Dann bekommst Du meiner Meinung nach die RAW Daten, und musst die Dekodierung (entsprechend dem Payload decoder) manuell in fhem machen.
2) In Chirpstack ueber die MQTT integration (https://www.chirpstack.io/docs/chirpstack/integrations/mqtt.html), dann bekommt man die events als json ueber MQTT geliefert. Das mqtt topic ist auf der Seite ebenfalls beschrieben, "application/APPLICATION_ID/device/+/event/up". Das kann man dann in fhem mit der Funktion { json2nameValue($EVENT) } abholen.
Ich habe in Chirpstack eine Application "FHEM" angelegt, und dort dann auch dort die MQTT integration hinzugefügt (soweit ich mich erinnere, ich möchte das jetzt nicht nochmal machen).

ZitatUnd dann habe ich noch das Problem, dass ich zwar MQTT enabled habe und bei meinem LoraWAN-Server auch die IP-Adresse des Raspberry-Servers eingetragen habe, auf dem FHEM läuft, aber da scheint nichts anzukommen, ich habe auch kein Gerät gefunden, welches automatisch angelegt wurde.
Das habe ich nicht verstanden was Du wo gemacht hast. Du hast wo MQTT enabled? Was meinst Du mit LoraWAN-Server? Chirpstack -> den Application Server?
Ist unter /etc/chirpstack-application-server/chirpstack-application-server.toml die mqtt integration richtig konfiguriert? Also Du musst zusätzlich zu der IP Adresse (oder localhost) auch noch den MQTT port eintragen, und auch einen User und Passwort, falls das in deinem mqtt server auch eingerichtet ist (also wenn Du keinen anonymous Verbindungen zulässt)
Ansonsten würde ich immer erstmal mit einem MQTT Explorer fuer Windows oder Mac schauen, was an traffic gesendet/empfangen wird.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

rz259

@Jamo:

Vielen Dank für die Hilfe, damit komme ich dann schon mal weiter. Bzgl. MQTT habe ich zwei Dinge gemacht:

- in FHEM habe ich den MQTT2_SERVER angelegt und
- in der KOnfiguration für das Gateway habe ich auch MQTT freigeschalten (Server udn Port sind hinterlegt).

In Chirpstack habe ich noch nichts bzgl. MQTT gemacht, das werde ich dann gleich mal erledigen....

Jamo

Hallo Rudi rz259,
falls Du im Gateway MQTT konfigurierst (Methode 1 aus thread #7 oben), musst Du in Chirpstack nicht noch zusätzlich die MQTT integration konfigurieren (Methode 2 aus thread #7 oben). Entweder oder. Das wird zwar funktionieren, damit bekommst du dann alle Daten doppelt (einmal RAW aus dem Gateway, einmal dekodiertes Json aus dem Chirpstack application server).
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

rz259

#10
Hallo Jamo,

momentan habe ich eher ein ganz anderes Problem, ich kriege nämlich überhaupt keine Daten per MQTT. Ich habe in Chirpstack den Javascript codec eingetragen, das funktioniert ganz gut, ich sehe in Chirpstack die letzten Events und die enthalten auch die Temperatur und die Feuchtigkeit - soweit so
gut.

Allerdings kriege ich keine Daten über MQTT - an der Chirpstack-Konfiguration bzgl. MQTT habe ich nichts gemacht, das ist alles noch auf den Default-Einstellungen. Ich habe mich dann mit mosquitto_sub auf dem betreffenden Raspi connected und da kommen nur PINGREQ und PINGRESP events, bzw. wenn ich das auf die konkrete App (hae ich auch FHEM genannt, das macht ja Sinn;-)) einschränke, dann kommt gar nichts an.

Muss man in Chirpstack irgendwas eingestellen, damit diese Events per MQTT weitergeleitet werden? Oder passiert das automatisch? Ich habe zuerst gedacht, das liegt evtl. daran, dass ich Chirpstack in einem Docker-Container laufen habe, aber die Events beim Connect und Subscribe kann ich sehen, wenn ich alle Topics abonniere. Aber von meinem Device kommen keine Events, daher frage ich mich, ob ich da noch irgendwas freischalten muss.

Mit Zertifikaten will ich momentan noch nicht arbeiten, das verkompliziert die Sache ja noch zusätzlich - das würde ich erst dann machen, wenn ich schon mal Daten per MQTT empfangen habe.

Und im Forum von Chirpstack komme ich auch irgendwie nicht weiter - das Ding kann sehr viel, aber man braucht eben auch erst mal Erfahrung

Update:  Ich habe gerade nochmal die chirpstack.toml geändert (ich habe ein template für die events und die commands eingetragen) und beim Neustart in der console gesehen, dass jetzt Events publiziert werden - vielleicht war das ja vorher auch schon der Fall und ich habe es nicht gesehen. Aber jetzt habe ich den Logeintrag gesehen und damit sollte dann auch der mqtt-Client das Topic erhalten haben - blöderweise hatte ich gerade mqttclient_sub nicht laufen, jetzt muss ich wieder 20 Minuten warten;-(

rz259

Gerade gewartet und es ist wieder nichts gekommen. Im Log wird angezeigt, dass das Event  veröffentlicht wird, aber bei meinem mosquitt_sub kommt nichts an...

Aboniiert habe ich das Thema mit folgendem Befehl:

mosquitto_sub -t "application/fc92810c-6cd2-46d4-b85e-b3dd90b54a4f/device/+/event/up" -v
Kann es sein, dass das Kommando einen Fehler enthält?

Allerdings kommt auch in FHEM nix an - irgendwo mache ich da wahrscheinlich einen blöden Fehler, aber Chirpstack scheint das Event korrekt zu veröffentlichen.... da müsste ich es doch zumindest auf dem Raspi mit Chirpstack sehen können?

Merkwürdig....

Jamo

#12
Hallo Rudi,
Ist unter /etc/chirpstack-application-server/chirpstack-application-server.toml die mqtt integration richtig konfiguriert?
Und in Chirpstack eine Application z.B "FHEM" angelegt, und dort dann auch dort die MQTT integration hinzugefügt?
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

rudolfkoenig

Was steht in der nrClients Reading von MQTT2_SERVER?

rz259

Zitat von: Jamo am 20 Dezember 2024, 14:40:40Hallo Rudi,
Ist unter /etc/chirpstack-application-server/chirpstack-application-server.toml die mqtt integration richtig konfiguriert?
Und in Chirpstack eine Application z.B "FHEM" angelegt, und dort dann auch dort die MQTT integration hinzugefügt?

Hallo Jamo,

so ein Verzeichnis gibt es bei mir leider gar nicht. Ich nutze ja docker und da gibt es nur das Verzeichnis chirpstack. Dort gibt es auch nur die Datei "chirpstack.toml" und zumindest darin ist die MQTT-Integration vorhanden.

In Chirpstack selbst habe ich die Applikation FHEM angelegt. Im Reiter "Integrations" sehe ich auch MQTT, allerdings kann ich dort nichts einstellen oder ansehen. Die einzige Möglichkeit hier, ist ein Zertifikat zu holen.