Kommunikation zwischen synology und raspberry
-
- Beiträge: 367
- Registriert: 29. Okt 2020 19:53
Kommunikation zwischen synology und raspberry
Hallo,
ich nutze openhab 2.5 auf einer synology NAS. Ich benutze dazu das http-binding um Schaltbefehle an einen raspberry zu schicken, und somit GPIOs zu schalten.
Nun frage ich mich, ob es auch in die andere Richtung geht, also GPIOs als Eingang abfragen, und den Status an openhab auf der synology zu schicken. Das http-binding scheint mir hier ungeeignet, da ich dort in recht kurzen Abständen abfragen müsste.
Welche Möglichkeit gäbe es noch?
ich nutze openhab 2.5 auf einer synology NAS. Ich benutze dazu das http-binding um Schaltbefehle an einen raspberry zu schicken, und somit GPIOs zu schalten.
Nun frage ich mich, ob es auch in die andere Richtung geht, also GPIOs als Eingang abfragen, und den Status an openhab auf der synology zu schicken. Das http-binding scheint mir hier ungeeignet, da ich dort in recht kurzen Abständen abfragen müsste.
Welche Möglichkeit gäbe es noch?
Servus
- udo1toni
- Beiträge: 15372
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Kommunikation zwischen synology und raspberry
Die beste Möglichkeit dazu wäre ein Programm, was auf dem Raspberry läuft und die Ports überwacht. Stöbere mal ein wenig im Netz. Folgende Punkte wären dabei wünschenswert:
1. Es sollte möglich sein, das als Dienst laufen zu lassen.
2. Python ist eine super Grundlage, weil es massig Bibliotheken gibt, mit denen so ein Programm komfortabel erstellt werden kann.
3. Vielleicht findest Du so etwas quasi fertig mit eingebautem mqtt Client.
Falls Punkt drei nicht erfüllt ist, aber Punkt zwei, dann ist es kein Problem, Punkt drei nachzurüsten. Ich habe inzwischen drei verschiedene Systeme per selbst gebasteltem Programm mittels mqtt an openHAB angebunden und muss sagen, einfacher wird's nicht mehr.
Das Script kann sich sicher auch um die GPOs kümmern, nicht nur um die GPIs. Wie man das ganze dann umsetzt, ist Geschmacksache, z.B. ob nun die Status per JSON im Block ausgegeben werden oder in einzelne Topics. Für die Steuerungsseite empfehle ich aber getrennte Topics pro GPO, so dass Du dann eine Struktur bekommst wie raspberry/command/GPO1 bis raspberry/command/GPO8 und als Payload ON bzw OFF, und raspberry/status/GPIO für alle Zustände, die dann als JSON Objekt ausgegeben werden, z.B.:
Dieses JSON wird dann vom Programm abgesetzt, sobald sich einer der Status ändert (also auch, wenn Du einen Schaltbefehl sendest!) und Du bekommst eine direkte Rückmeldung der Schaltzustände gratis oben drauf. In openHAB bekommst Du den Status dann über einen mqtt Channel:
Und ein Schaltkanal sieht dann so aus:
Wen Du ein fertiges Programm für die Problemstellung findest, kann es natürlich (sehr wahrscheinlich...) sein, dass es auf andere Weise kommuniziert, auch wenn es mqtt nutzt.
1. Es sollte möglich sein, das als Dienst laufen zu lassen.
2. Python ist eine super Grundlage, weil es massig Bibliotheken gibt, mit denen so ein Programm komfortabel erstellt werden kann.
3. Vielleicht findest Du so etwas quasi fertig mit eingebautem mqtt Client.
Falls Punkt drei nicht erfüllt ist, aber Punkt zwei, dann ist es kein Problem, Punkt drei nachzurüsten. Ich habe inzwischen drei verschiedene Systeme per selbst gebasteltem Programm mittels mqtt an openHAB angebunden und muss sagen, einfacher wird's nicht mehr.
Das Script kann sich sicher auch um die GPOs kümmern, nicht nur um die GPIs. Wie man das ganze dann umsetzt, ist Geschmacksache, z.B. ob nun die Status per JSON im Block ausgegeben werden oder in einzelne Topics. Für die Steuerungsseite empfehle ich aber getrennte Topics pro GPO, so dass Du dann eine Struktur bekommst wie raspberry/command/GPO1 bis raspberry/command/GPO8 und als Payload ON bzw OFF, und raspberry/status/GPIO für alle Zustände, die dann als JSON Objekt ausgegeben werden, z.B.:
Code: Alles auswählen
{
"GPO": {
"1": "ON",
"2": "OFF"
},
"GPI": {
"3": "OFF",
"4": "OFF"
}
}
Code: Alles auswählen
Type switch : gpi3 "GPI 3" [ stateTopic="raspberry/status/GPIO",transformationPattern="JSONPATH:$.GPI.3" ]
Code: Alles auswählen
Type switch : gpo1 "GPO 1" [ stateTopic="raspberry/status/GPIO",transformationPattern="JSONPATH:$.GPO.1", commandTopic="raspberry/command/GPO1" ]
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)
-
- Beiträge: 367
- Registriert: 29. Okt 2020 19:53
Re: Kommunikation zwischen synology und raspberry
Für die Ansteuerung nutze ich bisher das http Kommando, das läuft auch gut.
Mit mqtt hab ich micht noch nicht außernandergesetzt, aber das schau ich mir mal an. Dann brauch ich wahrscheinlich das richtige Binding, da gibt es wohl mehrere für mqtt, welches muss ich da verwenden?
Und wo muss ich das JSON dann vom raspi aus "hinschicken", also an welchen Pfad auf der Synology?
Mit mqtt hab ich micht noch nicht außernandergesetzt, aber das schau ich mir mal an. Dann brauch ich wahrscheinlich das richtige Binding, da gibt es wohl mehrere für mqtt, welches muss ich da verwenden?
Und wo muss ich das JSON dann vom raspi aus "hinschicken", also an welchen Pfad auf der Synology?
Servus
- udo1toni
- Beiträge: 15372
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Kommunikation zwischen synology und raspberry
Nein, wenn Du in openHAB über Version 2.3 in die Addons Liste schaust, findest Du nur ein mqtt Addon, es sei denn, Du hast Legacy Bindings aktiviert.
Das solltest Du nur tun, wenn es sich nicht vermeiden lässt, z.B. wenn ein bisher nur in V1 verfügbares Binding mit V2 erscheint, Du aber noch nicht umstellen konntest.
Es sollte immer die Ausnahme sein, ein V1 Binding zu nutzen, wenn ein V2 Binding zur Verfügung steht.
mqtt nutzt eine Client-Server-Struktur. Der Server heißt mosquitto und lässt sich einfach auf der Synology installieren. mosquitto kommuniziert auf Port 1883, sofern nichts anderes eingestellt wurde.
In openHAB richtest Du dann einen mqtt Broker ein (das ist die Bridge zu mosquitto). Bitte nicht mit dem System Broker verwechseln!
Unterhalb dieser mqtt Bridge richtest Du dann ein mqtt generic Thing ein, und unterhalb des Thing einen oder mehrere Channel, die die Kommunikation erledigen.
Auf der anderen Seite (also dem 2. Raspberry) wird dann in der mqtt Client Anwendung die IP der Synology eingerichtet.
Du kannst übrigens alternativ den mosquitto auch auf dem Raspberry laufen lassen, falls das auf der Synology wider Erwarten schwierig wird. Für das Client-Server-Modell ist es irrelevant, wo der Server läuft, er muss nur von jedem Client aus erreichbar sein.
Gesendet von iPad mit Tapatalk
Das solltest Du nur tun, wenn es sich nicht vermeiden lässt, z.B. wenn ein bisher nur in V1 verfügbares Binding mit V2 erscheint, Du aber noch nicht umstellen konntest.
Es sollte immer die Ausnahme sein, ein V1 Binding zu nutzen, wenn ein V2 Binding zur Verfügung steht.
mqtt nutzt eine Client-Server-Struktur. Der Server heißt mosquitto und lässt sich einfach auf der Synology installieren. mosquitto kommuniziert auf Port 1883, sofern nichts anderes eingestellt wurde.
In openHAB richtest Du dann einen mqtt Broker ein (das ist die Bridge zu mosquitto). Bitte nicht mit dem System Broker verwechseln!
Unterhalb dieser mqtt Bridge richtest Du dann ein mqtt generic Thing ein, und unterhalb des Thing einen oder mehrere Channel, die die Kommunikation erledigen.
Auf der anderen Seite (also dem 2. Raspberry) wird dann in der mqtt Client Anwendung die IP der Synology eingerichtet.
Du kannst übrigens alternativ den mosquitto auch auf dem Raspberry laufen lassen, falls das auf der Synology wider Erwarten schwierig wird. Für das Client-Server-Modell ist es irrelevant, wo der Server läuft, er muss nur von jedem Client aus erreichbar sein.
Gesendet von iPad mit Tapatalk
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)
-
- Beiträge: 367
- Registriert: 29. Okt 2020 19:53
Re: Kommunikation zwischen synology und raspberry
Danke,
das hilft mir schon mal weiter. Dann werde ich das mal abarbeiten und mit etwas einlesen.
Bis dann.
das hilft mir schon mal weiter. Dann werde ich das mal abarbeiten und mit etwas einlesen.
Bis dann.
Servus
-
- Beiträge: 367
- Registriert: 29. Okt 2020 19:53
Re: Kommunikation zwischen synology und raspberry
Hallo,
Ich habe nun mosquitto auf der Synology installiert, über die Paper UI eine mqtt Bridge und ein mqtt Generic Thing eingerichtet.
Ich würde die Channels und Items aber lieber in Textform einrichten. Wenn ich nun ein Thing in Textform erstelle erscheint es zwar auch in der Paper UI, geht aber nicht online. Wenn man sich dann die Eigenschaften in der Paper UI anschaut, bemerkt man, dass diesen Thing nicht mit dem Broker verbunden ist. Ich kann dass dann natürlich in der Paper UI nicht auswählen und abspeichern.
Wie geht man denn nun vor? Kann man diese Zuordnung zum Broker auch in Textform machen?
Danke und Servus
Servus
- udo1toni
- Beiträge: 15372
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Kommunikation zwischen synology und raspberry
Du kannst zur Not auch die Zuordnung zur Bridge beim Thing mit angeben, besser wäre aber, auch die Bridge in der *.things Datei mit anzulegen.
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)
-
- Beiträge: 367
- Registriert: 29. Okt 2020 19:53
Re: Kommunikation zwischen synology und raspberry
Genau das hätte ich nun probiert, aber da habe ich wohl noch einen Fehler drin:
Code: Alles auswählen
Bridge mqtt:broker:Mosquitto "Mosquitto" [
host="192.168.2.23",
secure=false,
port=1883,
]
{
// Volkszaehler GPIOs
Thing mqtt:topic:VZ_GP "GPIO" @"Volkszaehler" {
Type switch : control "Control" [commandTopic="cmnd/Volkszähler/GPIO"]
}
Servus
-
- Beiträge: 367
- Registriert: 29. Okt 2020 19:53
Re: Kommunikation zwischen synology und raspberry
Ich seh schon, das "," nach dem Port war zuviel.
Servus
- udo1toni
- Beiträge: 15372
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Kommunikation zwischen synology und raspberry
Ja, das Komma ist zu viel, allerdings sollte das gewöhnlich nicht weiter stören (ist dennoch besser, es weg zu lassen...)
Allerdings stimmt die Definition so nicht. Es muss so aussehen:
Die clientID wird bei jedem Start ausgewürfelt, wenn man sie nicht fix setzt. Sie taucht im Log von mosquitto auf, ist also bei der Fehlersuche hilfreich. Die clientID muss für alle mqtt Clients für den Broker eindeutig sein.
Allerdings stimmt die Definition so nicht. Es muss so aussehen:
Code: Alles auswählen
Bridge mqtt:broker:Mosquitto "Mosquitto" [
host="192.168.2.23",
secure=false, // default, kann man also auch weg lassen...
port=1883, // default, könnte man ebenfalls weg lassen
clientID="openHAB2" // das wäre eher wichtig...
] {
// Volkszaehler GPIOs
Thing topic VZ_GP "GPIO" @ "Volkszaehler" { // keine Doppelpunkte, kein mqtt
Type switch : control "Control" [commandTopic="cmnd/Volkszähler/GPIO"]
} // Klammer vom Thing
} // Klammer von der Bridge
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)