MQTT Probleme zwei openHAB´s verbinden

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

favorit626
Beiträge: 35
Registriert: 15. Mai 2016 22:38
Answers: 0

MQTT Probleme zwei openHAB´s verbinden

Beitrag von favorit626 »

Hallo Leute,

benötige einmal mehr die Hilfe der MQTT-Profis.
Ich habe auf einem Raspberry 2 openHAB 3 Mosquitto installiert, daran betreibe ich einen Jeelink-USB
dieser empfängt über LaCross Gateway Temperaturen von einem Technoline Sensor, klappt alles sehr gut.
Der "RP2" hängt auf dem Dachboden und ist mittels LAN-Kabel mit einer Fritzbox verbunden, das muss
so sein wegen der funkreichweite der Sensoren, da wo der eigentliche Raspberry (4/4BG) steht/hängt
erreiche ich die TechnolineSensoren nicht mehr. Auf dem eigentlichen "openHAB Raspberry" läuft openHAB 2.5.12-1
und Mosquitto ist auch installiert. Nun wollte ich eigentlich die Temperaturdaten von dem ausgelagerten "RP"
in openHAB auf dem "Hauptraspi" bekommen, um evtl. einen Heizstab mit einer Shelly 1 zu steuern, aber da bin
ich irgendwie zu doof. Bei dieser ganzen MQTT Sache blick ich noch nicht durch.


Broker auf dem ausgelagerten Raspi.

Code: Alles auswählen

MQTT Broker Ponystall

UID: mqtt:broker:MQTTBroker44
label: MQTT Broker Ponystall
thingTypeUID: mqtt:broker
configuration:
  lwtQos: 0
  publickeypin: true
  keepAlive: 60
  clientid: xxxxxx
  clientID: xxxxx
  secure: false
  certificatepin: true
  password: xxxxxxx
  qos: 0
  reconnectTime: 60000
  port: 1883
  host: 192.168.178.xx
  lwtRetain: true
  username: xxxxxx
  enableDiscovery: true
location: Ponystall
Technolinesensoren.

Code: Alles auswählen

Technol. TemSensor Ponystall
UID: jeelink:lacrosse:LaCrossGatewayUSB:19
label: Technol. TempSensor Ponystall
thingTypeUID: jeelink:lacrosse
configuration:
  maxDiff: 2
  updateInterval: 120
  maxTemp: 100
  sensorTimeout: 60
  sensorId: "19"
  bufferSize: 20
  minTemp: -100
bridgeUID: jeelink:lgwUsb:LaCrossGatewayUSB
location: LaCrossJeelink
Generic MQTT Thing Ponystall

Code: Alles auswählen

Generic MQTT Thing Ponystal
UID: mqtt:topic:MQTTBroker44:GeMQTTThiPonystall
label: Generic MQTT Thing Ponystal
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:MQTTBroker44
location: Ponystall
channels:
  - id: TempPonystal
    channelTypeUID: mqtt:number
    label: Temperatur Ponystall
    description: ""
    configuration:
      qos: 0
      stateTopic: mqtt/topic/MQTTBroker44/GeMQTTThiPonystall/TempPonystal
      retained: true
  - id: TempPferdeWasser
    channelTypeUID: mqtt:number
    label: Temperatur Pferdewasser
    description: ""
    configuration:
      qos: 0
      stateTopic: mqtt/topic/MQTTBroker44/GeMQTTThiPonystall/TempPferdeWasser
      retained: true
Auf dem Haupt Raspi habe ich einen MQTT-Broker eingerichtet, der aber auf dem ausgelagerten Raspi "zugreift"

Code: Alles auswählen

Configuration Parameters

Configure parameters for the thing.
Broker Hostname/IP
ip von ausgelagerten Raspi
The IP/Hostname of the MQTT broker
und dazu auch ein

Code: Alles auswählen

Generic MQTT Thing44

Generic MQTT Thing

You need a configured Broker first. Dynamically add channels of various types to this Thing. Link different MQTT topics to each channel.

Status: ONLINE

Channels
Temperatur Ponystall
mqtt:topic:GenericMQTTThing44:TempPonystall
Number

MQTT State Topic
mqtt/topic/MQTTBroker44/GeMQTTThiPonystall/TempPonystal/state

Temperatur Pferdewasser
mqtt:topic:GenericMQTTThing44:TempPferdeWasser
Number

MQTT State Topic
mqtt/topic/MQTTBroker44/GeMQTTThiPonystall/TempPferdeWasser/state

Transform Values
Incoming Value Transformations
JSONPATH:$.lacross.status.temperature
Aber meine Temperaturen bekomme ich nicht zu sehen, jedenfalls nicht in der Haupt OH-Installation.

Bin für jeden Tipp dankbar.

Gruß
Knut

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

Re: MQTT Probleme zwei openHAB´s verbinden

Beitrag von udo1toni »

Warum installierst Du überhaupt zwei Instanzen von openHAB? Du kannst den USB-Stick leicht über netcat/socat per LAN an den Raspberry Pi4 "durchreichen", für openHAB ist es dann so, als wäre der Stick lokal angeschlossen. Du kannst natürlich auch "oben" ein openHAB laufen lassen, welches dann die Daten per mqtt an die 2. Instanz weiterreichen kann. Das ist aber eher umständlich, und Du musst zwei openHAB Instanzen verwalten.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

favorit626
Beiträge: 35
Registriert: 15. Mai 2016 22:38
Answers: 0

Re: MQTT Probleme zwei openHAB´s verbinden

Beitrag von favorit626 »

Hallo und guten Morgen,
Warum installierst Du überhaupt zwei Instanzen von openHAB?
um die Entfernung zu überbrücken.
Du kannst den USB-Stick leicht über netcat/socat per LAN an den Raspberry Pi4 "durchreichen",...
Da muss ich mich erstmal einlesen, bin schließlich ein alter Mann und froh, das ich openHAB überhaupt zum laufen kriege, und nun kommst Du wieder mit etwas neuen um die Ecke.
Du kannst natürlich auch "oben" ein openHAB laufen lassen, welches dann die Daten per mqtt an die 2. Instanz weiterreichen kann.
Das hatte ich eigentlich gedacht, damit ich die MQTT- Geschichte vielleicht mal verstehe. Aber wenn das andere einfacher ist, wäre das ja auch eine Möglichkeit.
Danke erstmal, dann habe ich ja wieder Beschäftigung für die nächsten Tage.

Gruß
Knut

Benutzeravatar
peter-pan
Beiträge: 2773
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: MQTT Probleme zwei openHAB´s verbinden

Beitrag von peter-pan »

Hallo zusammen,
ich bin mir nicht sicher, ob ich das alles richtig verstanden habe.

Aber könntest du nicht die Bridge auf deinem RP2 so ändern, dass dort die Broker-Adresse von deinem Haupt-Pi drin steht. Dann werden doch deine Daten automatisch an den richtigen Broker geschickt.

Ich mach das jedenfalls so mit Test-System und Produktiv-System. Auf meinem Produktions-System ist auch der Mosquitto-Broker installiert und in der OH-Bridge ist "localhost" als IP-Adresse eingetragen. Auf der Bridge im Test-System steht dann statt "localhost" -> "192.168.178.xxx".

du musst dann halt Things und Items auch auf beiden Rechnern installieren.

z.B.:
.things (Produktion Bridge + Thing):

Code: Alles auswählen

//https://openhabforum.de/viewtopic.php?f=15&t=970&start=20   // from Udo
//Bridge mqtt:broker:MosquittoMqttBroker "Mosquitto MQTT Broker" @ "MQTT2" 
//       ^    ^      ^                    ^                      ^ Zeige diese Bridge auf der Unterseite "MQTT2" in Paper UI Control
//       ^    ^      ^                    ^ Label der Bridge
//       ^    ^      ^ Name der Bridge
//       ^    ^ Art der Bridge
//       ^ Binding

Bridge mqtt:broker:hans "Mosquitto" [ host="localhost", port=1883, secure=false, clientID="OH2_hans" ]  
{
    // Sonoff Basic
    Thing topic basic03 "Sonoff Basic 03 Schreibtischlampe" @ "MQTT2"  [availabilityTopic="tele/basic_03/LWT", payloadNotAvailable="Offline", payloadAvailable= "Online"]
{
    Channels:
        Type switch : power     "Power "                 [ stateTopic="stat/basic_03/POWER", commandTopic="cmnd/basic_03/POWER" ]
        Type number : rssi      "WiFi Signal Strength"   [ stateTopic="tele/basic_03/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI"]
        Type string : version   "Firmware Version    "   [ stateTopic="stat/basic_03/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Version"]
        Type switch : reachable "Reachable"              [ stateTopic="tele/basic_03/LWT",transformationPattern="MAP:reachable.map" ]
        Type string : hardware  "Chip Set            "   [ stateTopic="stat/basic_03/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Hardware"]
        Type string : ipaddress "IP Address          "   [ stateTopic="stat/basic_03/STATUS5", transformationPattern="JSONPATH:$.StatusNET.IPAddress"]
        }
.things (Test Bridge + Thing):

Code: Alles auswählen

Bridge mqtt:broker:vera "Mosquitto" [ host="192.168.178.75", port=1883, secure=false, clientID="OH2_vera" ]  
{
    // Sonoff Basic
    Thing topic basic03 "Sonoff Basic 03 Schreibtischlampe" @ "MQTT2"  [availabilityTopic="tele/basic_03/LWT", payloadNotAvailable="Offline", payloadAvailable= "Online"]
{
    Channels:
        Type switch : power     "Power "                 [ stateTopic="stat/basic_03/POWER", commandTopic="cmnd/basic_03/POWER" ]
        Type number : rssi      "WiFi Signal Strength"   [ stateTopic="tele/basic_03/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI"]
        Type string : version   "Firmware Version    "   [ stateTopic="stat/basic_03/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Version"]
        Type switch : reachable "Reachable"              [ stateTopic="tele/basic_03/LWT",transformationPattern="MAP:reachable.map" ]
        Type string : hardware  "Chip Set            "   [ stateTopic="stat/basic_03/STATUS2", transformationPattern="JSONPATH:$.StatusFWR.Hardware"]
        Type string : ipaddress "IP Address          "   [ stateTopic="stat/basic_03/STATUS5", transformationPattern="JSONPATH:$.StatusNET.IPAddress"]
}
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: MQTT Probleme zwei openHAB´s verbinden

Beitrag von sihui »

Unabhängig von der Diskussion, ob nun 2 openHAB Instanzen in diesem speziellen Falle notwendig sind oder nicht, würde man die Verbindung mit dem eigens dafür entwickelten Remote openHAB Binding realisieren können:

https://www.openhab.org/addons/bindings ... ab-binding
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

favorit626
Beiträge: 35
Registriert: 15. Mai 2016 22:38
Answers: 0

Re: MQTT Probleme zwei openHAB´s verbinden

Beitrag von favorit626 »

Hallo peter-pan,

Kommt man sich da nicht mit dem Port : 1883 ins Gehege?

Gruß
Knut

favorit626
Beiträge: 35
Registriert: 15. Mai 2016 22:38
Answers: 0

Re: MQTT Probleme zwei openHAB´s verbinden

Beitrag von favorit626 »

Hallo sihui,

Das sieht ja eigentlich ganz gut aus, aber die Daten von OH 3 nach OH 2.5 zu bekommen habe ich noch nicht geschafft.
Ist das überhaupt möglich?

Gruß
Knut

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

Re: MQTT Probleme zwei openHAB´s verbinden

Beitrag von udo1toni »

Wie gesagt, es ist eigentlich eher umständlich, die Daten mit einer eigenen openHAB-Instanz einzusammeln und dann weiterzureichen.
openHAB3 bringt für die Kopplung das Remote openHAB Binding. Allerdings müsste das Binding auf dem Haupt-Server laufen, denn die Kommunikation ist zwar bidirektional, aber man muss auf die Things des Remote Systems zugreifen, es ist also nicht vorgesehen, Daten "einfach so" an den Server zu schicken.
Der einfachste Weg wäre also, auf dem OH3-System Verbindung zum mqtt Server aufzunehmen und die Daten in Topics abzulegen. Die Haupt-Instanz kann dann die entsprechenden Topics auslesen.

Üblicherweise läuft innerhalb eines LAN nur ein mqtt Broker, man kann natürlich auch mehrere Broker verwenden. Jeder Broker muss entweder auf einem anderen Host erreichbar sein (dann unterscheiden sich die Broker über die IP) oder alternativ auf dem gleichen Host laufen, dann aber mit unterschiedlicher Portkonfiguration. Aber wie gesagt, es gibt dafür gewöhnlich keinen Grund.

Für den Remote Zugriff auf angeschlossene USB-Sticks über Netzwerk hier mal eine Anleitung https://community.openhab.org/t/share-z ... uide/34895 aus dem englischen Forum.

Die Idee ist, auf dem Raspberry auf dem Dachboden ser2net laufen zu lassen. ser2net öffnet einen Port, auf dem es dann auf Anfragen lauscht.
Auf dem "Hauptrechner" wird socat installiert. socat nimmt nun Kontakt zum Remote System auf und leitet sämtliche Ein- und Ausgaben auf einen Link um ("in Linux ist alles eine Datei"). So sieht es nun für openHAB so aus, als sei der USB-Stick direkt angeschlossen. Natürlich muss der Linkname so gewählt werden, dass er sich nicht mit einem vorhandenen USB-Stick am Hauptrechner in die Quere kommt. :) aber die Konfiguration ist sehr einfach und schnell erledigt. Anschließend richtet man das LaCrosse Binding in openHAB2.5 ein und nutzt die Hardware, als sei der Stick lokal angeschlossen.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
peter-pan
Beiträge: 2773
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: MQTT Probleme zwei openHAB´s verbinden

Beitrag von peter-pan »

favorit626 hat geschrieben: 9. Feb 2021 17:04 Kommt man sich da nicht mit dem Port : 1883 ins Gehege?
Nein. Du hast ja nur einen Broker. Ich weiss nicht wo du überall Mosquitto installiert hast. Im Prinzip kannst du die alle stilllegen, bis auf einen. Und über @sihui hab ich auch erfahren, dass man auch keine Clients für Mosquitto installieren muss, wenn man sie nicht für andere Zwecke braucht, da OH seine eigenen Clients zur Verfügung stellt.

Wie gesagt, mein Mosquitto-Broker läuft nur auf meinem Produktions-System (OH2.5.12) (MQTT-Bridge host="localhost"), meinem Test-System (OH2.5.11-JSR223) hat keine Mosquitto-Installation (MQTT-Bridge host="192.168.178.xx") und mein OH3-Test-System hat auch keinen installierten Mosquitto-Broker (MQTT-Bridge host="192.168.178.xx"). Meine Pi's hängen alle per LAN an einer Fritzbox als Router.

Ich bin leider kein Experte in diesen Dingen, aber so wie ich das verstehe betrifft die Port-Adresse (1883) deinen Router (Fritzbox) und nicht die PI's. Die kommunizieren alle schön miteinander über diesen Port.

Vielleicht können dir @udo1toni oder @sihui mehr Details dazu verraten.

Edit: Sorry hab gerade gesehen, dass Udo dir schon geantwortet hat, während ich noch am schreiben war.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: MQTT Probleme zwei openHAB´s verbinden

Beitrag von udo1toni »

Also, um das mal allgemeingültig zu beschreiben:

Jegliche Kommunikation auf Netzwerkebene läuft (auf den höheren Ebenen) über IP-Adressen. Nun wollen aber verschiedene Dienste auf dem gleichen Rechner ihre Arbeit verrichten. Damit die Kommunikation einfach läuft, gibt es deshalb auf dem Rechner noch Ports. Die IPv4 Adresse besteht aus 32 Bit, während die Port-Adresse 16 Bit breit ist. Bestimmte Dienste werden als Standard auf bestimmten Ports angeboten, zum Beispiel http auf Port 80 und https auf Port 443, telnet auf Port 23 und ssh auf Port 22. Man kann aber durchaus mehrere http Server auf einem Rechner laufen lassen, die müssen dann halt auf unterschiedlichen Ports lauschen. openHAB bietet seinen http Server auf Port 8080 an, weshalb der Port beim aufrufen mit angegeben werden muss (ist ja nicht der Standard-Port).
Die Kommunikation wird allerdings nur über den Port aufgebaut. Der Serverdienst weist dem Client dann einen Port zu, über den die Kommunikation läuft. Dieses Detail ist z.B. bei öffentlich erreichbaren Webservern essenziell, die ja durchaus mehrere tausend Clients gleichzeitig bedienen müssen.
Aber auch der Client nutzt auf "seinem" Rechner einen Port, den er zur Kommunikation nutzt und dem Server mitteilt, damit dieser den Client ansprechen kann.

Der Router übersetzt nicht nur die private IP in die öffentliche IP, er merkt sich auch noch, über welchen Port die Kommunikation angestoßen wurde und übersetzt die Pakete ankommend und abgehend. Da der Router ebenfalls 16 Bit für die Portadressierung nutzt, sind theoretisch bis zu 65538 gleichzeitige Verbindungen möglich (in der Realität natürlich deutlich weniger, da der Router ja auch verschiedene Dienste anbietet und seinerseits mit anderen Rechnern kommuniziert)

Jeder Rechner im Netzwerk (oder genauer: Jede genutzte IP-Adresse im Netzwerk) kann auf jedem Port kommunizieren. Gewöhnlich ist auf einer Schnittstelle eine IP-Adresse konfiguriert (das kann man aber durchaus auch anders konfigurieren). Ein Dienst muss also entweder über die IP oder über den Port eindeutig adressierbar sein.
Unterschiedliche IP -> unterschiedliche Rechner (oder zumindest Schnittstellen - abgesehen natürlich von der erwähnten Konfiguration mit mehreren IP-Adressen auf einer Schnittstelle), der Dienst kann auf dem gleichen Port laufen.
Gleiche IP -> gleicher Rechner. Dann muss aber der Port unterschiedlich sein.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten