Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:solar_inverters:deye

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
hardware:channels:solar_inverters:deye [2023/02/12 17:27] raptorsdshardware:channels:solar_inverters:deye [2023/07/30 11:35] (aktuell) – duplicates erhöht raptorsds
Zeile 1: Zeile 1:
-====== Einleitung ======+====== Deye Wechselrichter ====== 
 +==== Einleitung ====
  
 +In diesem Artikel geht es um Abfrage und Import von Daten der Wechselrichterreihe SUN300,SUN600,... von Deye und deren Clone (bsp. Bosswerk MI-300 MI600). 
  
-In diesem Bereich geht es um die Einbindung der Wechselrichterreihe SUN300,SUN600,... von Deye und deren Clone (bsp. Bosswerk MI-300 MI600) +Diese haben einen WLAN Controller integriert sowie eine Weboberfläche.
  
-Diese haben einen WLAN Controller intergriert sowie eine Weboberfläche .+<note important>Diese Wechselrichter haben eine bekannte Sicherheitslücke in der besagten WLAN-Implementierung.\\ 
 +Wer das WLAN nutzt sollte dringend die Firmware auf eine sicheren Stand updaten!\\ 
 +[[https://www.heise.de/news/Sicherheitsluecke-bei-Mikrowechselrichtern-von-Deye-Haendler-nicht-zustaendig-7483376.html|heise.de: Sicherheitslücke in Mikrowechselrichtern von Deye]]\\ 
 +[[https://asarah.de/blogs/news/firmware-update-zur-sicherheit-von-deye-mikrowechselrichtern|asarah.de: So aktualisieren Sie Ihren DEYE Mikrowechselrichter]]</note>
  
 +<note tip>Die Sicherheitslücke sind ab der version 1.53 geschlossen diese wird auch automatisch Verteilt\\
 +Die Neuste Version ist 1.57 in dieser soll der "no Web-Interface" Bug nach Start des WR behoben worden sein</note>
  
-Vielen Dank für DR_NI auf github für seinen Abfragescript sowie die Hilfen und Anpassungen 
  
-==== Einbindung ====+Vielen Dank an [[https://github.com/dr-ni|DR_NI auf github]] für sein Abfragescript sowie die Hilfen und Anpassungen.
  
 +==== Lösungen ====
  
 Zur Einbindung gibt es 2 Möglichkeiten  Zur Einbindung gibt es 2 Möglichkeiten 
  
-1. Einbindung über die Cloud-API (Solarman APP)  wieder zurück an die Volkszählerdatenbank oder Middle-in-the-Man Datenabgriff+  - über die Cloud-API (Solarman APP) wieder zurück an Volkszähler oder Middle-in-the-Man Datenabgriff 
 +  - Abfrage der Daten der Weboberfläche ( Vorteil: kein Internetverbindung nötig ; Nachteil: langsame Aktualsierungsrate => 2min)
  
-//nicht Thema dieser Seite//+Die zweite Lösung wird im Folgenden beschrieben.
  
-2. Einbindung der Daten der Weboberfläche ( Vorteil: kein Internetverbindung nötig ; Nachteil: langsame Aktualsierungsrate => 2min) 
  
-siehe Anleitung 
  
-=== START ===+==== Schritt für Schritt ====
  
-1. Wechselrichter über die Weboberfläche ins Netzwerk einbinden  +==== Vorbereitung ==== 
-AP = AP_XXXXXX + 
-PW = 12345678 +  * Wechselrichter über die Weboberfläche ins Netzwerk einbinden 
-admin/admin+ 
 +   AP = AP_XXXXXX 
 +   PW = 12345678 
 +   admin/admin 
 + 
 +<note tip>Danach z.B die Internetverbindung des Wechselrichters am Router auf gesperrt setzen.\\ 
 +Zusätzlich sollte, wenn möglich, eine feste IP für den Wechselrichter festgelegt werden.</note> 
 + 
 +  * Abfragescript installieren
  
-danach z.B die Internetverbindung des Wechselrichters über die Fritzbox auf gesperrt setzen 
-zusätzlich sollte wenn möglich z.B eine feste IP für den Wechselrichter festgelegt werden 
-    
-2. Abfragescript von Github laden 
    git clone https://github.com/dr-ni/mi600.git    git clone https://github.com/dr-ni/mi600.git
-Verzeichniss wechsel+ 
 +  * Verzeichnis wechseln 
    cd mi600    cd mi600
-Installation starten 
-   make install 
-Test einer Abfrage (IP-Adresse und Zugangsdaten admin/admin an seinen Wechselrrichter anpassen) 
-   mi600 [IP-Wechselrichter] admin admin webdata_today_e  
  
-3.Sendescript Datei erstellen  +  * Installation starten
-  nano auslesen +
-4.darin folgenden Inhalt hinzufügen+
  
-  #!/bin/bash +   sudo make install
-  # set -e beendet den script wenn WR nicht erreichbar ist +
-  set -e +
-  #Dieser Bereich zeigt die Logindaten +
-  host_pv="192.xxx.xxx.xxx" +
-  user="admin" +
-  password="admin" +
-  UUID1="7680efc0-xxx-xxxx-xxxx-xxxxxxx" +
-  #UUID2="" +
-  host_db="192.xxx.xxx.xxx" +
-  ACTUAL="" +
-  ACTUAL_NUM="" +
-  #Dieser Bereich startet die Abfrage +
-  #TOTAL=$(/usr/local/bin/mi600 $host $user $password webdata_total_e) +
-  DAY=$(/usr/local/bin/mi600 $host_pv $user $password webdata_today_e) +
-  ACTUAL=$(/usr/local/bin/mi600 $host_pv $user $password webdata_now_p) +
-  #Entfernung von Leerzeichen +
-  ACTUAL_NUM=$(($ACTUAL)) +
-  #Senden der Daten An Datenbank +
-  wget -O - -q "http://"$host_db"/middleware/data/"$UUID1".json?operation=add&value="$ACTUAL_NUM"" +
-  #wget -O - -q "http://"$host_db"/middleware/data/"$UUID2".json?operation=add&value"$DAY"" +
-  #Anzeige der Werte in Konsole für Debug +
-  #echo 'Today:'$DAY +
-  #echo 'ACTUAL:'$ACTUAL_NUM +
-  +
  
-**! Hinweise !**+  Test einer Abfrage (IP-Adresse und Zugangsdaten admin/admin an seinen Wechselrichter anpassen)
  
-Bitte IP Adressen , Wechselrichter Zugangsdaten , UUID an deine Gegebenheiten anpassen+   mi600 IP-Wechselrichter Nutzer Passwort webdata_today_e 
  
-Dieser Script sendet nur die aktuelle Leistung an die DB , bereits vorbereitet ist alternativ/zusätzlich der Tageszählerstand 
  
-Zeilen mit "#" sind Auskommentiert und können bei Bedarf genutzt werden zum Debug oder einen Zweiten Kanal hinzuzufügen 
  
 +==== Möglichkeit 1 CRON ====
  
 +  * Sendescript Datei erstellen
 +  - Manuelle erstellen <code> nano auslesen.sh </code>
 +  - alternativ git clone <code>git clone https://github.com/RaptorSDS/VZ_deye_script.git </code>
 +   
 +   
 +  * darin folgenden Inhalt hinzufügen/editieren
  
-5Datei Speichern und ausführbar machen  +<code base bash | auslesen.sh> 
-  chmod +x auslesen+#!/bin/bash 
 +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
 + 
 +set -e 
 + 
 + 
 + 
 +host_pv="192.168.xxxx" 
 +user="admin" 
 +password="admin" 
 +UUID1="768xxxx" 
 +UUID2="d69xxxx" 
 +UUID3="" 
 +host_db="192.168.xxx" 
 +TOTAL="" 
 +TOTAL_NUM="" 
 +DAY="" 
 +DAY_NUM="" 
 +ACTUAL="" 
 +ACTUAL_NUM="" 
 + 
 + 
 +#request value  
 +ACTUAL=$(/usr/local/bin/mi600 $host_pv $user $password webdata_now_p) 
 +#remove Zero in Front 
 +ACTUAL_NUM=$(($ACTUAL)) 
 + 
 + 
 +#send database 
 +wget -O - -q "http://"$host_db"/middleware/data/"$UUID1".json?operation=add&value="$ACTUAL_NUM"" 
 + 
 + 
 + 
 +#request value TOTAL 
 +TOTAL=$(/usr/local/bin/mi600 $host_pv $user $password webdata_total_e) 
 + 
 +#Remove end SPACE-Char 
 +TOTAL_NUM=$(echo $TOTAL | sed 's/[[:space:]]*$//'
 + 
 +#check if non ZERO 
 +if [ $TOTAL_NUM != "0.0" ] || [ $TOTAL_NUM != "0" ]; then 
 +#Send to DB 
 +  wget -O - -q "http://"$host_db"/middleware/data/"$UUID2".json?operation=add&value="$TOTAL_NUM"" 
 +fi 
 + 
 + 
 +#DAY ENERGY 
 +#DAY=$(/usr/local/bin/mi600 $host_pv $user $password webdata_today_e) 
 +#DAY_NUM=$(echo $DAY | sed 's/[[:space:]]*$//'
 +#wget -O - -q "http://"$host_db"/middleware/data/"$UUID3".json?operation=add&value="$DAY_NUM"" 
 + 
 +#debug for console 
 +#echo 'Today:'$DAY_NUM 
 +#echo 'ACTUAL:'$ACTUAL_NUM 
 +#echo 'TOTAL:'$TOTAL_NUM 
 +</code>
      
-6. Datei zu CRON hinzufügen  
  
-**! Hinweis !**+<note>Bitte IP Adressen, Wechselrichter Zugangsdaten, UUID an deine Gegebenheiten anpassen. 
 +Für den Kanal Leistung kann Auflösung "1" genommen werden </note> 
 + 
 +Dieses Script sendet nur die aktuelle Leistung an die Middleware, bereits vorbereitet ist alternativ/zusätzlich der Zählerstand. Augrund der langsamen Daten ist eine Zählerstand nicht gut darstellbar\\ 
 +Zeilen mit "#" sind auskommentiert und können bei Bedarf genutzt werden für Debug oder um einen zweiten Kanal hinzuzufügen. 
 + 
 +  Datei Speichern und ausführbar machen 
 + 
 +   chmod +x auslesen.sh 
 + 
 +  Datei zu CRON hinzufügen (hier als Beispiel Raspberry Pi mit 5 minuten Intervall) 
 + 
 +<code>*/5 * * * * /bin/bash /home/pi/auslesen.sh</code> 
 + 
 +Die Weboberfläche hat eine sehr langsame Aktualisierungsrate daher sollte der Cronjob nur alle 3 oder 5 Minuten laufen. 
 + 
 + 
 +==== Möglichkeit 2 VZlogger mit Exec ==== 
 + 
 +Nachteile Vzlogger darf nicht als root laufen --> umstellung vzlogger siehe [[software:controller:vzlogger|vzlogger]] "vzlogger als anderer Benutzer ausführen" 
 + 
 + 
 +  * Sendescript Datei erstellen 
 +  - Manuelle erstellen <code> nano deye_read_exec.sh </code> 
 +  - alternativ git clone <code>git clone https://github.com/RaptorSDS/VZ_deye_script.git </code> 
 +    
 +    
 + 
 +  * darin folgenden Inhalt hinzufügen/editieren 
 + 
 +<code base bash | deye_read_exec.sh.sh> 
 + 
 +#!/bin/bash 
 +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
 + 
 +#set -e / set -u stop scripts if something is wrong 
 +set -e 
 +set -u 
 + 
 +# Script: deye_read_exec.sh 
 +# Author: Tobias Baumann aka RaptorSDS 
 +# License: MIT 
 +# with help of OpenAI GPT-3.5 and VZlogger Group 
 +# idee by script for KOSTAL_Pico JSON VZlogger exec 
 + 
 +# Function to display script usage 
 +usage() { 
 +  echo "Usage: $0 <hostname> <reading1> <reading2> ..." 
 +  exit 1 
 +
 + 
 +# Validate required arguments 
 +if [ "$#" -lt 2 ]; then 
 +  usage 
 +fi 
 + 
 +# Extract hostname 
 +HOSTNAME="$1" 
 +shift 
 + 
 +# Extract readings 
 +READINGS="$*" 
 + 
 +user="admin" 
 +password="admin" 
 + 
 +# Request values based on input readings 
 +for READING in $READINGS; do 
 +  if [ "$READING" == "ACTUAL" ]; then 
 +    ACTUAL=$(/usr/local/bin/mi600 "$HOSTNAME" "$user" "$password" webdata_now_p) 
 +    #Remove end SPACE-Char 
 +    ACTUAL_NUM=$(($ACTUAL)) 
 +    OUTPUT="$ACTUAL_NUM" 
 +    printf "%s = %s\n" "$READING" "$OUTPUT" 
 +  elif [ "$READING" == "TOTAL" ]; then 
 +    TOTAL=$(/usr/local/bin/mi600 "$HOSTNAME" "$user" "$password" webdata_total_e) 
 +    ##Remove end SPACE-Char 
 +    TOTAL_NUM=$(echo "$TOTAL" | sed 's/[[:space:]]*$//'
 +    OUTPUT="$TOTAL_NUM" 
 +    if [ $TOTAL_NUM == "0.0" ] || [ $TOTAL_NUM == "0" ] ; then 
 +      printf "%s = %s\n" "undefine" "$OUTPUT" 
 +    else 
 +      printf "%s = %s\n" "$READING" "$OUTPUT" 
 +    fi 
 +  elif [ "$READING" == "DAY" ]; then 
 +    DAY=$(/usr/local/bin/mi600 "$HOSTNAME" "$user" "$password" webdata_today_e) 
 +    ##Remove end SPACE-Char 
 +    DAY_NUM=$(echo "$DAY" | sed 's/[[:space:]]*$//'
 +    OUTPUT="$DAY_NUM" 
 +    printf "%s = %s\n" "$READING" "$OUTPUT" 
 +  else 
 +    echo "Invalid reading: $READING" 
 +  fi 
 +done 
 +</code> 
 + 
 +<note> 
 +Bitte Zugangsdaten, an deine Gegebenheiten anpassen.  
 +</note> 
 +<note> 
 +Der Script hat folgende Config  xx.sh hostname reading1 reading2 ... / Reading dürfen sein DAY , TOTAL, ACTUAL 
 +</note> 
 + 
 + 
 +  * speichern und ausführbar machen  
 +<code> sudo chmod +x deye_read_exec.sh </code> 
 + 
 + 
 +  * man kann nun zb nach /etc/deye/ kopiernen oder ander gut erkennbare Orte 
 + 
 + 
 +  Kanal Erstellen im Fronend 
 + 
 + 
 +  vzlogger.conf editieren oder erstellen mit folgendem Inhalt 
  
-CRON unterstützt keine Dateiendungen bitte Datei **nicht** mit .sh erzeugen +<code> 
 +    { 
 +      "enabled": true, 
 +      "allowskip": true, 
 +      "interval": 240, 
 +      "aggtime": -1, 
 +      "aggfixedinterval": false, 
 +      "channels":
 +        { 
 +          "api": "volkszaehler", 
 +          "uuid": "7680efc0-xxx", 
 +          "identifier": "ACTUAL", 
 +          "middleware": "http://localhost/middleware.php", 
 +          "aggmode": "avg", 
 +          "duplicates":
 +        }, 
 +        { 
 +          "api": "volkszaehler", 
 +          "uuid": "d69e8d40-xx", 
 +          "identifier": "TOTAL", 
 +          "middleware": "http://localhost/middleware.php", 
 +          "aggmode": "none", 
 +          "duplicates": 43200 
 +        } 
 +      ], 
 +      "protocol": "exec", 
 +      "command": "/etc/deye/deye_read_exec.sh 192.168.xxxx ACTUAL TOTAL", 
 +      "format": "$i = $v" 
 +    } 
 +</code> 
 +<note important>Der Inverter wird nun alle 240s gelesen , ACTUAL und TOTAL an die DB Übergeben , TOTAL wird auf Duplicate getestet und nur spätesten wenn kein neuer Wert vorhanden ist alle 43200s (12h) neu übernommen</note>
  
-Die Weboberfläche hat eine sehr langsame Aktualsierung somit sollte der Cron Job z.B alle 3 Minuten oder alle 5 Minuten laufen  
-//Alternativ//  
-Könnte der Tageszähler ausgewertet werden  
-  
  
 +  * vzlogger neu starten 
hardware/channels/solar_inverters/deye.1676219241.txt.gz · Zuletzt geändert: von raptorsds