Viessmann API mit OH3 auf RPi

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
chrisfetz
Beiträge: 16
Registriert: 12. Mär 2021 14:00

Re: Viessmann API mit OH3 auf RPi

Beitrag von chrisfetz »

Aaalso.
Nach dem ewig drehenden Donut war die Webseite irgendwann so verklemmt, dass ich kurzerhand den service neu gestartet habe. Und nun zeigen die Numbers alle Zahlen.
Unschöner Eindruck des Systems....
Auf jeden Fall vielen Dank fürs begleiten soweit.
Jetzt setze ich wohl am Besten die Influxdb nochmal zurück und schalte dann erst die Persistence wieder scharf.

Schönen Gruß,
Christoph

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

Re: Viessmann API mit OH3 auf RPi

Beitrag von udo1toni »

Hm. Also, gewöhnlich klemmt es nur, wenn man in den *.things Dateien editiert, nicht aber, wenn man in den *.items Dateien etwas ändert.

Kann sein, dass Du einfach Pech hattest und das System sich an irgendwas verschluckt hat.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Viessmann API mit OH3 auf RPi

Beitrag von nw378 »

Das "Klemmen" hatte ich auch mal bei der Umstellung auf JSON. Nach einem Programmierfehler/-versuch (hatte versucht, eine Dezimalzahl in eine Ganzzahl zu wandeln), nahm das Item keine Werte mehr an.
Nach dem Neustart von OH klappte es aber wieder.

Wo hier die Cracks vertreten sind: weiß jemand, wie man aus openhab die Zeit an die Viessmann sendet?

In einem fhem Forum habe ich dies gefunden:

Code: Alles auswählen

vclient -h localhost:3002 -c "unit off,setSystemTime `date "+%C %y %m %d 0%u %H %M %S"`,unit on"`
Aber was muss anstelle der Parameter in einer OH Regel stehen?
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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

Re: Viessmann API mit OH3 auf RPi

Beitrag von udo1toni »

Na, Du musst halt die Uhrzeit entsprechend zusammenstückeln. Warum meint immer jeder, sein eigenes Süppchen kochen zu müssen? Wozu gibt es offene Standards? Also, man kann die Uhrzeit mit Doppelpunten schreiben, das Datum mit Strichen usw, warum jetzt dort mit Leerzeichen, und vermutlich vollkommen ohne Not, denn der vclient ist ja nicht von Viessmann (und selbst wenn...)?

Vermutlich wird es am einfachsten sein, einen entsprechenden String über eine Variable zu bauen und anschließend en bloc mit dem Kommando zu senden.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Viessmann API mit OH3 auf RPi

Beitrag von nw378 »

Das Zusammenstückeln wäre kein Problem. Warum hier kein Standard genutzt wird, weiß ich auch nicht.

%y - Jahr
%m - Monat
%d - Tag
%H - Stunde
%M - Minute
%S - Sekunden

bleiben noch %C und 0%u.
Leider finde ich nirgends, was diese beiden Parameter bedeuten
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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

Re: Viessmann API mit OH3 auf RPi

Beitrag von udo1toni »

ok. Nach etwas überlegen und die Zeile anstarren...
Der letzte Backtick ist zu viel.

Code: Alles auswählen

vclient -h localhost:3002 -c "unit off,setSystemTime `date "+%C %y %m %d 0%u %H %M %S"`,unit on"
Das ist eine Einzeiler. Dieser Teil: `date "+%C %y %m %d 0%u %H %M %S"` ist die Anweisung, den Befehl date auszuführen, mit dem übergebenen Format, und die Ausgabe als String in den restlichen String zu integrieren. Es entsteht also folgender String:

Code: Alles auswählen

unit off,setSystemTime 20 22 12 02 05 15 04 10,unit on
Die 5 ist der aktuelle Wochentag, also Freitag. Der String wird dann mit vclient an den localhost port 3002 als Command geschickt.
das heißt, Du kannst die Zeile 1:1 so nehmen und von openHAB aus senden, unter der Voraussetzung, dass vclient auf dem openHAB System eingerichtet ist. Die Zeit kommt dann halt nicht aus openHAB, sondern vom System. Die Systemuhr sollte per ntp gestellt sein und die Zeitzone sollte Europe/Berlin sein.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Viessmann API mit OH3 auf RPi

Beitrag von nw378 »

So, noch einen (riesigen) Schritt weiter an der Lösung. Die neueste Version von vcontrold setzt auf ISO 8601, ergo muss der Befehl wie folgt aussehen:

Code: Alles auswählen

vclient -h 192.168.178.60:3002 -c "setSystemTime `date "+%FT%H:%M:%S%z"`"
Über Putty auf der Eingabeebene klappt das auch. Rückmeldung OK. :D
setSystemTime 2022-12-03T11:17:27+0100:
OK
Letzte Hürde: die ganzen Anführungszeichen und Hochkommata. Wenn ich nur die Anführungszeichen escape \" bekomme ich einen Fehler als Rückmeldung.

Code: Alles auswählen

Thing exec:command:Heizung_time     [command="vclient -h 192.168.178.60:3002 -c \"setSystemTime \`date \"+%FT%H:%M:%S%z\"\`\""]
Escape ich auch die Hochkommata \` hagelt es Fehlermeldungen im Log:
2022-12-03 11:37:25.218 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'exec.things' has errors, therefore ignoring it: [14,130]: Character d is neither a decimal digit number, decimal point, nor "e" notation exponential mark.
[14,77]: mismatched character '`' expecting set null
[14,135]: mismatched input '\' expecting ']'
[14,136]: mismatched character '`' expecting set null
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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

Re: Viessmann API mit OH3 auf RPi

Beitrag von udo1toni »

Aaaaalsooo...

Das da `ist ein Backtick, der Frankophile sagt Accent grave dazu, aber es steht hier ohne Vokal und wir bewegen uns im Programmierumfeld. Backticks müssen nicht escaped werden.
Das da ' ist ein (gerades) Apostroph, ich bin mir nicht sicher, ob es im englischen (vor allem beim Programmieren) auch so heißt. Aber der Einfachheit halber spricht man auch vom einfachen (geraden) Anführungszeichen.
Das da " ist das Zeichen für Zoll. Auch die Amis und die Briten verwenden geschwungene double quotes. Anführungszeichen stehen im Deutschen unten und oben. Word z.B. ersetzt das " automatisch durch „ und “, genau wie mein iPad - welches das sogar für die einfache Version macht. Umgangssprachlich ist es ein (doppeltes) Anführungszeichen.

Sowohl " als auch ' werden verwendet, um beliebige Zeichenketten zu einem String zusammenzufassen. Die korrekte Definition wäre also am ehesten:

Code: Alles auswählen

Thing exec:command:Heizung_time     [command="vclient -h 192.168.178.60:3002 -c 'setSystemTime `date \"+%FT%H:%M:%S%z\"`'"]
Beim übergeben der Zeichenkette an die Kommandozeile wird openHAB das Escape-Zeichen jeweils entfernen, aber das doppelte Anführungszeichen stehen lassen. Die einfachen Anführungszeichen interessieren openHAB nicht, denn sie sind Teil einer Zeichenkette, die von doppelten Anführungszeichen eingeschlossen ist. Braucht man also einfache Anführungszeichen, umschließt man die Zeichenkette mit der doppelten Ausführung, braucht man doppelte, umschließt man die Zeichenkette mit einfachen Anführungszeichen.

Man könnte das ganze auch komplett escapen, dann müsste man halt die Anführungszeichen um das Format von date doppelt escapen. Das erste Escape-Zeichen wird dann von openHAB entfernt, das zweite Escape-Zeichen wird von der bash entfernt. Die Variante mit einfachen Anführungszeichen erscheint mir aber deutlich einfacher.

Eine zweite Variante: Schreib den Befehl in eine Batch-Datei und lasse diese Datei ausführen, damit ersparst Du Dir das ganze Escapen:

Code: Alles auswählen

#!/bin/bash
vclient -h 192.168.178.60:3002 -c 'setSystemTime `date "+%FT%H:%M:%S%z"`'
Die Datei legst Du als setvisclock.sh irgendwo ins Dateisystem (NICHT! in /etc/openhab/scripts/) und machst sie ausführbar. (chmod 755)
Anschließend musst Du in openHAB nur noch setvisclock.sh aufrufen (natürlich mit vollständigem Pfad...)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Viessmann API mit OH3 auf RPi

Beitrag von nw378 »

Ich habe den Weg über die Bash-Datei gewählt.
Die accents graves und accents circonflexes haben mir schon zu Schulzeiten nicht geschmeckt :lol:

Udo, wie immer vielen Dank für Deine ausführlichen Erklärungen!
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

chrisfetz
Beiträge: 16
Registriert: 12. Mär 2021 14:00

Re: Viessmann API mit OH3 auf RPi

Beitrag von chrisfetz »

Servus,

Werte setzen ist bei mir auch noch eine Baustelle aber da arbeite ich mich auch gerade erst in die Arbeitsweise von openhab ein.
Ein Problem, wo ich derzeicht nicht weiter komme: ich habe influxdb zur persistenz eingerichtet. Dort landen auch Messwerte drin, ich sehe das in der influx-Konsole. Leider zeigt mir openhab überhaupt keine Kurven dazu unter "Analyze" und hinter dem Wert hinterlegt.

Derzeitiger Stand:
influxdb 1.8
Persistence settings ausgefüllt
default persistence: influxdb

services/influxdb.cfg vorhanden
persistence/influxdb.persist:

Code: Alles auswählen

Strategies {
    default = everyChange
}

Items {
    Influx*   : strategy = everyChange 
}
items/heizung.items:

Code: Alles auswählen

Group Influx (ALL)
Group Heizung (ALL)

Number Aussentemperatur "Außentemperatur [%.1f °C]" <temperature> (Heizung,Influx) {channel="exec:command:getHeizungsdaten:output"[profile="transform:JSONPATH",function="$..[?(@.command=='getTempA')].value"] }
Number Warmwassertemperatur "Wassertemperatur [%.1f °C]" <temperature> (Heizung,Influx) {channel="exec:command:getHeizungsdaten:output" [profile="transform:JSONPATH",function="$..[?(@.command=='getTempWWist')].value"] }
Number Kesseltemperatur "Kesseltemperatur [%.1f °C]" <temperature> (Heizung,Influx) {channel="exec:command:getHeizungsdaten:output"[profile="transform:JSONPATH",function="$..[?(@.command=='getTempKist')].value"]}
Number Sollraumtemperatur "Raumtemperatur Soll [%.1f °C]" <temperature> (Heizung,Influx) {channel="exec:command:getHeizungsdaten:output"[profile="transform:JSONPATH",function="$..[?(@.command=='getVitoTempRaumNorSoll')].value"]}
Irgendeine Idee, wo der Fehler sein kann? Im openhab.log taucht nichts einschlägiges auf, in der influx-Konsole sehe ich Messwerte, wo kann der Fehler sein?

Schönen Gruß,
Christoph

Antworten