Ich habe nun viele Youtube Videos angesehen und mich durch diverse Foren gewälzt.
Die wichtigste Entscheidung: ICH BRAUCH EINE TESTUMGEBUNG!
Hier mal ein paar Links:
https://www.youtube.com/watch?v=G2YY-HXGmrE
https://youtu.be/34yD15jmeEA?feature=shared
Restful: retrieve multiple values with one sensor - Configuration - Home Assistant Community
REST sensor with multiple attributes - #4 by davinci - Configuration - Home Assistant Community
RESTful - Home Assistant
RESTful Sensor - Home Assistant
Sensor entity | Home Assistant Developer Docs
Also schnell einen Pi aufgesetzt und dort gespielt.
Mit ein wenig Try-n-Error und genau die Fehlermeldungen in den Entwicklerwerkzeugen lesen habe ich jetzt ein grundsätzlich funktionierendes Setup:
Das funktioniert grundsätzlich mit allen Watercryst Biocat Systemen die mit der Watercryst Cloud sprechen - sprich eine App Funktion haben.
rest:
- resource: https://appapi.watercryst.com/v1/measurements/direct
scan_interval: 31
headers:
accept: application/json
x-api-key: [My API-KEY von Watercryst]
sensor:
- name: "Public Water Temperature"
value_template: '{{value_json["waterTemp"]}}'
device_class: temperature
unit_of_measurement: °C
- name: "Waterpressure to Building"
value_template: '{{value_json["pressure"]}}'
device_class: pressure
unit_of_measurement: bar
- name: "Last Water Tap Volume"
value_template: '{{value_json["lastWaterTapVolume"]}}'
device_class: water
unit_of_measurement: L
- name: "Last Water Tap Duration sec"
value_template: '{{value_json["lastWaterTapDuration"]}}'
- resource: https://appapi.watercryst.com/v1/statistics/cumulative/daily
scan_interval: 60
headers:
accept: application/json
x-api-key: [My API-KEY von Watercryst]
sensor:
- name: "Total Water Consumption Today"
device_class: water
unit_of_measurement: L
Jetzt bleibt nur noch ein “Problem”. Als ich noch mit RESTful Sensoren gespielt habe hatte ich immer wieder als Return Value unavailable. Im Log steht auch das gleiche, dass er zulange keine Antwort bekommen hat.
In Summe sind es zwei Abfragen:
- Aktueller Tageswasserbezug => kommt nur ein INT wert zurück
- Live Messungswerte => kommt ein Array zurück mit Druck, Temperatur, etc
Ich habe den Verdacht es lag auch daran, dass ich alle 20sek die Werte gezogen habe. Jedoch kam der Fehler deutlich häufiger wenn der Scan-Intervall bei beiden Sensoren gleich war. Ich denke mal das HA wirklich beide Werte dann zeitgleich abgefragt hat und es da vielleicht zu einem DoS gekommen ist.
Meine Frage:
Bekomme ich beide Sensoren irgendwie in einen Abfrage Zyklus hinein oder anders wie kann ich Sicherstellen, dass nicht beide gleichzeitig ausgelöst werden?
Habe jetzt den einen auf 31sek und den anderen auf 60 gestellt. Das bedeutet das spätestens 31*60 = 1860sek oder alle 31min eine Kollidierung entsteht. Habt ihr eine Idee wie ich das verhindern kann?
Update:
So für alle die vielleicht auch eine Watercryst Biocat Anlage haben. Hier mein finaler Code der alle verfügbaren Sensorwerte ausließt:
rest:
- resource: https://appapi.watercryst.com/v1/measurements/direct
scan_interval: 31
headers:
accept: application/json
x-api-key: [My API-Key]
sensor:
- name: "Public Water Temperature"
value_template: '{{value_json["waterTemp"]}}'
device_class: temperature
unit_of_measurement: °C
- name: "Waterpressure to Building"
value_template: '{{value_json["pressure"]}}'
device_class: pressure
unit_of_measurement: bar
- name: "Last Water Tap Volume"
value_template: '{{value_json["lastWaterTapVolume"]}}'
device_class: water
unit_of_measurement: L
- name: "Last Water Tap Duration sec"
value_template: '{{value_json["lastWaterTapDuration"]}}'
device_class: duration
unit_of_measurement: s
- resource: https://appapi.watercryst.com/v1/statistics/cumulative/daily
scan_interval: 60
headers:
accept: application/json
x-api-key: [My API-Key]
sensor:
- name: "Total Water Consumption Today"
device_class: water
unit_of_measurement: L
state_class: total
- resource: https://appapi.watercryst.com/v1/state
scan_interval: 13
headers:
accept: application/json
x-api-key: [My API-Key]
sensor:
- name: "Biocat Operation Mode"
value_template: '{{value_json["mode"]["name"]}}'
binary_sensor:
- name: "Biocat Water Treatment Online"
value_template: '{{value_json["online"]}}'
- name: "Biocat Microleakage Protection Absence Mode"
value_template: '{{value_json["waterProtection"]["absenceModeEnabled"]}}'
Mit dem Code werden alle Sensorwerte ausgelesen jedoch keine Funktionen wie Desinfektion, Wasserzufuhr schließen/öffnen/quittieren ausgelöst.
Der Wert “Total Water Consumption Today” kann im Energiedashboard direkt verwendet werden.
Soweit sinnvoll habe ich auch bereits die passenden Sensortypen und Einheiten definiert.
Jetzt wäre es noch cool, das irgendwie in eine Integration zu packen. Aber dafür bin ich (noch) zu blöd.
by HarryP: Zusammenführung Doppelpost (bitte “bearbeiten” Funktion nutzen)