SolarView: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Infobox Modul eingefügt; Gliederungsebenen angepasst)
K (Infobox angepasst)
Zeile 3: Zeile 3:
|ModType=contrib
|ModType=contrib
<!--|ModFTopic=12345 -->
<!--|ModFTopic=12345 -->
|ModCmdRef=ContribModul
|ModCmdRef=SolarView
<!--|ModForumArea=Contrib-->
<!--|ModForumArea=Contrib-->
|ModTechName=70_SolarView.pm
|ModTechName=70_SolarView.pm

Version vom 3. Februar 2015, 15:22 Uhr

SolarView
Zweck / Funktion
Anbindung der Wechselrichter-Auswertungssoftware SolarView an Fhem
Allgemein
Typ Contrib
Details
Dokumentation siehe Forum
Modulname 70_SolarView.pm
Ersteller fhem AT toben DOT net
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!

Einleitung

SolarView ist ein Tool zur Datenerfassung und -logging für Photovoltaikanlagen, welches auf einer AVM Fritz!Box läuft. Von Vorteil ist dass das Tool viele Wechselrichterhersteller unterstützt und dadurch ein einheitliches Interface auf die verschiedenen Wechselrichter für Fhem bietet. Mit dem hier beschriebenen Fhem-Modul können die aktuellen Leistungswerte ausgelesen und in Fhem zur Verfügung gestellt werden, um dann z.B. einen Verbraucher abhängig von der momentanen Stromproduktion zu schalten. Hinweis: Unter NT5000 ist das Auslesen und Darstellen speziell für einen Sunways Wechselrichter beschrieben.

Voraussetzung

SolarView (SV) muss mit aktiviertem TCP-Server gestartet werden. Hierzu ist der Parameter -TCP mit einer Portnummer zum SV Startskript start.sh hinzuzufügen, also zum Beispiel "-TCP 15000". Genaueres findet sich in der SV Dokumentation. Die Fritz!Box auf der SV läuft muss natürlich über das Netzwerk vom Fhem Server erreichbar sein (bei mir läuft beides auf der gleichen Box). Das Modul 70_SolarView.pm ist im contrib Verzeichnis zu finden und muss in das Fhem Verzeichnis kopiert werden um es benutzen zu können.

Benutzung

Die Definition eines SolarView Devices erfolgt mit dem Befehl:

define <name> SolarView <host> <port> [wr<i> wr...] [<interval> [<timeout>]]

wobei <host> der Hostname der Fritz!Box und <port> der angegebene TCP Port von SV ist. Die Leistungswerte werden dann alle <interval> Sekunden ausgelesen (default: 300). Wenn <interval> auf 0 gesetzt wird, werden die Werte nur bei einem get frisch ausgelesen. <timeout> gibt an wann ein Verbindungsaufbau mit SV abgebrochen wird (default: 4 Sekunden). Die Parameter wr<i&gt geben die Nummer(n) der auszulesenden Wechselrichter an. Wenn kein solcher Parameter angegeben ist, werden die Summenwerte aller Wechselrichter ausgelesen. Wenn mehr als ein Wechselrichter angegeben ist, werden den Namen der Werte (s.u.) die entsprechende Nummer vorangestellt, z.B. 'wr2_currentPower'.

Mit get <name> [wr<i>_]<key> können die Werte in Fhem gelesen werden, wobei <key> die Bezeichner currentPower, totalEnergy, totalEnergyDay, totalEnergyMonth, totalEnergyYear, UDC, UDCB, UDCC, IDC, IDCB, IDCC, gridVoltage, gridCurrent, temperature annehmen kann. (Die Temperatur wird wohl nicht von allen Wechselrichtern zur Verfügung gestellt.) Auch ist ein Zugriff über ReadingsVal natürlich möglich.

Beispiel

Eine Lüftunganlage soll über eine FS20 Steckdose (stLueftung) jeden Mittag um 12 Uhr für 1024 Sekunden angeschalten werden, aber nur wenn der erste Wechselrichter grade über 800 Watt Energie produziert:

define sv SolarView fritz.box 15000 wr1 60

define atLueftungIfPower at *12:00 {\
  if (ReadingsVal('sv','currentPower',0) > 800) {\
    fhem('set stLueftung on-for-timer 1024');;\ 
  }\
}

Alternativ zu einer rein zeitgesteuerten Aktion kann man sich auch von den Messungen triggern lassen. Als Beispiel wird hier eingeschaltet sobald mehr als 1500 Watt da sind, und abgeschaltet sobald nach 16 Uhr die Produktion unter 500 Watt sinkt. Hierzu registriert man sich für den currentPower Event und definiert ein entsprechendes notify.

 attr sv event-on-change-reading currentPower
 
 define notifyLueftungIfPower notify sv:currentPower.* {\
   if ($hour >= 16) {\
     if (ReadingsVal('sv','currentPower',0) < 500) {\
       fhem('set stLueftung off') unless ($value{stLueftung} eq 'off');;\
     }\
   } else {\
     if (ReadingsVal('sv','currentPower',0) > 1500) {\
       fhem('set stLueftung on') unless ($value{stLueftung} eq 'on');;\
     }\
   }\
 }

Plotten

Auch ein Plotten der Werte ist möglich. Hierzu abonniert man die entsprechenden Events, definiert sich ein Logfile und schreibt ein passendes gplot (Beispiel: solarview.gplot):

 attr sv event-on-change-reading currentPower,totalEnergyDay
 
 define log_sv FileLog /var/log/fhem-sv-%Y-%m-%d.log sv:(currentPower|totalEnergyDay).*
 
 define plot_sv weblink fileplot log_sv:solarview:CURRENT
Plot sv 14.png

Kontakt

Bei Problemen/Fragen bitte an Tobe, Mail: fhem AT toben DOT net, wenden.