Hallo in die Runde
unabhängig von meinem anderen Beitrag zum Thema Deye hier eine Möglichkeit die Werte der Deye WR auszulesen und in OH zu nutzen
Dabei werden die Werte über ein JSON eingelesen. Nachts laufen die WR ja nicht, also werden die Things per Rule disabled bzw. enabled
Teile der verwendeten Scripte wurden aus diversen Beiträgen in zwei Foren kopiert und für meine Bedürfnisse angepasst
Fangen wir mit dem Auslesen des WR an.
Genutzt wird ein Bash Script
Display Spoiler
#!/bin/bash
#
# Einfaches script um die aktuelle Stromproduktion des Deye Wechselrichters über den internen Webserver auszulesen
# Der Wert findet sich in der Webseite <deye_ip>/status.html und die Variable ist webdata_now_p
# In der Webseite sind auch weitere Variablen, siehe Browser -> Seitenquelltext anzeigen
# Das script nutzt curl, es ginge aber auch mit wget
# IP Adresse und Zugangsdaten sind als Demo, bei Bedarf entsprechend ändern...
host="<IP-DES-WECHSELRICHTERS>"
user="<USERNAME>"
password="<PASSWORD>"
[definition='1','0']log[/definition]="/<ABLAGEPFAD>/deye.json"
ping -c3 "$host" > /dev/null 2>&1
if [ $? != 0 ]
then
echo "$host not available"
exit 1
fi
# 3 Versuche Datenabfrage
for i in 1 2 3
do
cp=$(curl -s -u "$user:$password" "$host"/status.html | grep "webdata_now_p = " | awk -F '"' '{print $2}')
cpe=$(curl -s -u "$user:$password" "$host"/status.html | grep "webdata_today_e = " | awk -F '"' '{print $2}')
cpt=$(curl -s -u "$user:$password" "$host"/status.html | grep "webdata_total_e = " | awk -F '"' '{print $2}')
if [ "$cp" != "" ]
then
DATETIME=`date "+%d.%m.%Y %H:%M"`
JSONInhalt="{\"name\": \"WECHSELRICHTER\",\"ablese\": \""$DATETIME"\",\"value\": "$cp",\"today\": "$cpe",\"total\": "$cpt"}"
echo "$JSONInhalt" >"$[definition='1','0']log[/definition]"
exit 0
fi
sleep 3
done
# Wenn Abfrage nicht erfolgreich war
echo Datenabfrage nicht erfolgreich
Das lassen wir per CRON-Job laufen.
Nun zu OH:
Wir benötigen das Binding HTTP und JSONPATH unfd richten uns ein Thing ein
Display Spoiler
UID: http:url:Wechselrichter_auslesen
label: Wechselrichter auslesen
thingTypeUID: http:url
configuration:
authMode: BASIC
ignoreSSLErrors: false
baseURL: http://192.168.1.61/spike/deye3.json
delay: 0
stateMethod: GET
refresh: 2
commandMethod: GET
timeout: 3000
bufferSize: 2048
channels:
- id: Wechselrichter_Datum
channelTypeUID: http:string
label: Wechselrichter_Datum
description: ""
configuration:
mode: READONLY
stateTransformation: jsonpath:$.ablese
- id: Wechselrichter_value
channelTypeUID: http:string
label: Wechselrichter_value
description: null
configuration:
mode: READONLY
stateTransformation: jsonpath:$.value
- id: Wechselrichter_today
channelTypeUID: http:string
label: Wechselrichter_today
description: null
configuration:
mode: READONLY
stateTransformation: jsonpath:$.today
- id: Wechselrichter_total
channelTypeUID: http:string
label: Wechselrichter_total
description: null
configuration:
mode: READONLY
stateTransformation: jsonpath:$.total
Damit im Fehlerlog nicht unnützt Fehler auflaufen nach Sonnenuntergang disable ich dasThing mit dem Sonnenuntergang und schalte es nach Sonnenaufgang wieder ein
Benötigt wird das Astro Binding
Display Spoiler
rule "wechselrichter Abfrage aus"
when
//Hier das richtige Item eintragen
Channel "astro:sun:527fd26ba9:set#event" triggered START
then
var headers = new java.util.HashMap();
headers.put("Authorization", "<NAME bei der TOKENERSTELLUNG>" + "<TOKEN>");
sendHttpPutRequest("http://<IP-VON-OPENHAB>:8080/rest/things/http:url:Wechselrichter1_auslesen/enable", "text/plain", 'false', headers, 5000);
end
rule "wechselrichter Abfrage an"
when
//Hier das richtige Item eintragen
Channel "astro:sun:527fd26ba9:rise#event" triggered START
then
var headers = new java.util.HashMap();
headers.put("Authorization", "<NAME bei der TOKENERSTELLUNG>" + "<TOKEN>");
sendHttpPutRequest("http://<IP-VON-OPENHAB>:8080/rest/things/http:url:Wechselrichter1_auslesen/enable", "text/plain", 'true', headers, 5000);
end
Jetzt kann man die Werte des Wechselrichters weiter verarbeiten
Viel Spaß beim nachbauen