Deye auslesen und Thing bei Sonnenauf- / untergang enabled / disablen

  • 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

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!