Wetterstation mit seriellem Interface RS232

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Norick
Beiträge: 253
Registriert: 31. Jan 2022 06:35
Answers: 0

Wetterstation mit seriellem Interface RS232

Beitrag von Norick »

Hallo
ich habe eine Elsner Wetterstation die über RS485 folgende Daten (siehe Anhang) schickt:

Code: Alles auswählen

W+04.8030101N99900.2N?151515151515?1882
Das ganze läuft via einem RS232-Konverter (COM-Port 3) was soweit auch funktioniert. Installiert habe ich das "serial binding" in openhab3 (windows).


Nun meine Fragen:
- wie kann ich nun den Datenstream zerpflücken sodass ich dann dem Format entsprechend die Temperatur, Wind etc. anzeigen kann auf dem GUI?
- Muss dies im yaml-file gemacht werden oder kann hierzu auch ein Pythonscript erstellt werden?

Danke für die Antworten
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Wetterstation mit seriellem Interface RS232

Beitrag von udo1toni »

Wo die Konvertierung in Daten erledigt wird, ist zweitrangig. Du kannst also gerne ein Python Script implementieren, welches dann entweder von openHAB regelmäßig aufgerufen wird, oder (besser) im Hintergrund läuft und die Daten per mqtt bereitstellt. Wie komfortabel Du das ganze programmierst, bleibt natürlich Dir überlassen, üblich wäre es aber, ein JSON Objekt zusammenzubauen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Norick
Beiträge: 253
Registriert: 31. Jan 2022 06:35
Answers: 0

Re: Wetterstation mit seriellem Interface RS232

Beitrag von Norick »

danke für die Antwort. Könnte man es auch mit "Blockly" die Konvertierung machen? Dies könnte auf den ersten Blick auch einfach sein.

Welches "Binding" o.ä. müsste ich für ein Pythonscript installieren?

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

Re: Wetterstation mit seriellem Interface RS232

Beitrag von udo1toni »

Ob das mit Blockly einfach zu bewerkstelligen ist? Nun ja. Meine Erfahrung mit Blockly ist, dass man einen extrem begrenzten Befehlssatz hat und durch das ständige Schachteln von Anweisungen nach kürzester Zeit nicht mehr erkennbar ist, wie der Code funktioniert.
Ich bin kein Experte, was die Programmierung von solchen Routinen betrifft, aber so ins Blaue wäre es etwas wie (Pseudo-Code):

Code: Alles auswählen

int i = 0
get data as string
for each char in data
    i++
    if i > 1 and i < 7 temp = temp + char
    if i > 6 and i < 9 sos = sos + char
    if i > 8 and i < 11 sow = sow + char
    if i > 10 and i < 13 soo = soo + char
    if i > 13 and i < 17 light = light + char
    if i > 16 and i < 21 wind = wind + char
    if i == 13 daem = if(char = "J") "ON" else "OFF"
    if i == 21 rain = if(char = "J") "ON" else "OFF"
next
fTemp = val(temp)
also es werden die Daten geholt (dafür wird es eine Funktion brauchen, die das erledigt). Anschließend werden die Daten zeichenweise eingelesen und von Stelle x - y in eine lokale Variable geschrieben (Zerlegen des Streams in einzelne Daten).
Anschließend wird die Temperatur als vorzeichenbehafteter Wert in eine echte Zahl umgewandelt.
Danach kommt es nur noch darauf an, wie man die Daten bereitstellen will. Als JSON würde man einfach eine passende Zeichenkette erzeugen.

Code: Alles auswählen

json = '{"temperature":"' + fTemp.toString + '","southdir":"' + sos + '","westdir":"' + sow + '","eastdir":"' + soo + '","dusk":"' + daem + '","rain":"' + rain + '","light":"' + light + '","wind":"' + wind + '"}'
Und schon kann man dieses JSON Objekt über mqtt in ein Topic schreiben (paho-mqtt wäre eine Bibliothek für python).
Vermutlich gibt es elegantere Verfahren, sie führen aber zum gleichen Ergebnis, so man denn JSON und mqtt verwenden möchte, man erhält ein JSON Objekt, in dem alle relevanten Daten mit eindeutiger Bezeichnung abrufbar sind.

Code: Alles auswählen

{
    "temperature": "12.3",
    "southdir": "3",
    "westdir": "55",
    "eastdir": "1",
    "dusk": "OFF",
    "rain": "OFF",
    "light": "999",
    "wind": "1.2"
}
In openHAB nutzt man dann mqtt um das JSON abzuholen und in einen String Channel zu speichern. Der String Channel wird mit diversen Items gekoppelt (Number und Switch). Dabei werden wird das jeweilige Datum über das Profile JSONPATH ausgewählt. In den einzelnen Items landen also die Einzelwerte.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Norick
Beiträge: 253
Registriert: 31. Jan 2022 06:35
Answers: 0

Re: Wetterstation mit seriellem Interface RS232

Beitrag von Norick »

Vielen Dank für die sehr ausführliche Beschreibung. Das heisst man benötigt immer für die Datenbereitstellung ein JSON Objekt mit MQTT um es in einem String Channel zu speichern? Das heisst für dann für die Datenaufbereitung kann Blockly, Python etc. verwendet werden?

Wenn ich Python verwende welches Binding wird dazu verwendet?

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

Re: Wetterstation mit seriellem Interface RS232

Beitrag von udo1toni »

Du musst das nicht zwingend mit JSON und MQTT erledigen, es ist aber naheliegend. Stell Dir vor, Du wendest Dich irgendwann enttäuscht von openHAB ab (soll nicht passieren, aber rein hypothetisch), dann möchtest Du nicht alle Scripte, die Du mal zur extra Anbindung von eigenen Dingen geschrieben hast, umständlich an das neue System anpassen. Wenn Du MQTT zur Anbindung nutzt, hast Du zu jedem anderen (ernstzunehmenden) System Kompatibilität. Und jede mir bekannte Hardware, die MQTT nutzt, verwendet in diesem Zusammenhang auch JSON um Daten blockweise zur Verfügung zu stellen.

In openHAB benötigst Du in diesem Fall nur das MQTT Binding sowie die JSONPATH Transformation.

Python selbst ist vollkommen unabhängig, Du könntest mit Python auch auf die REST API von openHAB zugreifen oder einen Webserver verwenden, aber das ist aller viel zu kompliziert. Der MQTT Zugriff ist innerhalb weniger Minuten implementiert, wenn Du auch nur ein wenig Ahnung von Python hast :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Norick
Beiträge: 253
Registriert: 31. Jan 2022 06:35
Answers: 0

Re: Wetterstation mit seriellem Interface RS232

Beitrag von Norick »

Vielen Dank für deine Antwort. Das sind doch gute Argumente für MQT und JSON. Ich werde versuchen dies so zu implementieren und melde mich dann...

Bis dahin vielen Dank für den tollen Support

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

Re: Wetterstation mit seriellem Interface RS232

Beitrag von udo1toni »

Immer gerne :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Norick
Beiträge: 253
Registriert: 31. Jan 2022 06:35
Answers: 0

Re: Wetterstation mit seriellem Interface RS232

Beitrag von Norick »

kurze Frage: ich habe zwar gesucht aber wo legst du ein neues json file (skript) an für die Programmierung?

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

Re: Wetterstation mit seriellem Interface RS232

Beitrag von udo1toni »

Gar nicht. Die UI erstellt die Scripte. Es ist nicht vorgesehen, die Script von Hand zu erstellen. Wenn Du das tust (also indem Du die Dateien manuell bearbeitest) musst Du openHAB herunterfahren und nach dem Bearbeiten wieder starten.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten