Kommunikation zwischen synology und raspberry

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Antworten
Quautiputzli
Beiträge: 367
Registriert: 29. Okt 2020 19:53
Answers: 2

Kommunikation zwischen synology und raspberry

Beitrag von Quautiputzli »

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?
Servus

Benutzeravatar
udo1toni
Beiträge: 15372
Registriert: 11. Apr 2018 18:05
Answers: 247
Wohnort: Darmstadt

Re: Kommunikation zwischen synology und raspberry

Beitrag von udo1toni »

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.:

Code: Alles auswählen

{
    "GPO": {
        "1": "ON",
        "2": "OFF"
    },
    "GPI": {
        "3": "OFF",
        "4": "OFF"
    }
}
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:

Code: Alles auswählen

Type switch : gpi3 "GPI 3" [ stateTopic="raspberry/status/GPIO",transformationPattern="JSONPATH:$.GPI.3" ]
Und ein Schaltkanal sieht dann so aus:

Code: Alles auswählen

Type switch : gpo1 "GPO 1" [ stateTopic="raspberry/status/GPIO",transformationPattern="JSONPATH:$.GPO.1", commandTopic="raspberry/command/GPO1" ]
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.
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)

Quautiputzli
Beiträge: 367
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Kommunikation zwischen synology und raspberry

Beitrag von Quautiputzli »

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?
Servus

Benutzeravatar
udo1toni
Beiträge: 15372
Registriert: 11. Apr 2018 18:05
Answers: 247
Wohnort: Darmstadt

Re: Kommunikation zwischen synology und raspberry

Beitrag von udo1toni »

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
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)

Quautiputzli
Beiträge: 367
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Kommunikation zwischen synology und raspberry

Beitrag von Quautiputzli »

Danke,
das hilft mir schon mal weiter. Dann werde ich das mal abarbeiten und mit etwas einlesen.

Bis dann.
Servus

Quautiputzli
Beiträge: 367
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Kommunikation zwischen synology und raspberry

Beitrag von Quautiputzli »

udo1toni hat geschrieben: 2. Dez 2020 11:27 In openHAB richtest Du dann einen mqtt Broker ein.
Unterhalb dieser mqtt Bridge richtest Du dann ein mqtt generic Thing ein, und unterhalb des Thing einen oder mehrere Channel, die die Kommunikation erledigen.
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

Benutzeravatar
udo1toni
Beiträge: 15372
Registriert: 11. Apr 2018 18:05
Answers: 247
Wohnort: Darmstadt

Re: Kommunikation zwischen synology und raspberry

Beitrag von udo1toni »

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)

Quautiputzli
Beiträge: 367
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Kommunikation zwischen synology und raspberry

Beitrag von Quautiputzli »

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

Quautiputzli
Beiträge: 367
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: Kommunikation zwischen synology und raspberry

Beitrag von Quautiputzli »

Ich seh schon, das "," nach dem Port war zuviel.
Servus

Benutzeravatar
udo1toni
Beiträge: 15372
Registriert: 11. Apr 2018 18:05
Answers: 247
Wohnort: Darmstadt

Re: Kommunikation zwischen synology und raspberry

Beitrag von udo1toni »

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:

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
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.
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.6, LXC)

Antworten