SolarEdge Wechselrichter: Unterschied zwischen den Versionen

Aus FHEMWiki
Zur Navigation springen Zur Suche springen
(Erschaffung)
 
K (→‎ModbusAttr Device in FHEM: Link auf Sunspec gelöscht)
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 39: Zeile 39:
<code> attr SolarEdge dev-h-defPoll 1 </code>
<code> attr SolarEdge dev-h-defPoll 1 </code>


Mehr Daten sind im [https://www.solaredge.com/sites/default/files/application_note_use_of_se_components_in_agricultural_environments_de.pdf/ Sunspec Protokoll] zu finden
Mehr Daten sind im Sunspec Protokoll [2] zu finden


=== List von Device Solaredge in FHEM ===
=== List von Device Solaredge in FHEM ===
Zeile 101: Zeile 101:
Zur Verwendung der "at"s werden Dummys benötigt
Zur Verwendung der "at"s werden Dummys benötigt


<code> define pv_energyday_log dummy </code>
<pre>
 
define pv_energyday_log dummy
dum_pv_energyday_log /r
define dum_pv_energyday_log dummy
dum_pv_energyday_read
define dum_pv_energyday_read dummy
 
define dum_pv_energymonth_log dummy
dum_pv_energymonth_log
define dum_pv_energymonth_read dummy
 
define dum_pv_energytoday dummy
dum_pv_energymonth_read
define dum_pv_energytomonth dummy
 
define dum_pv_energytoweek dummy
dum_pv_energytoday
define dum_pv_energytoyear dummy
 
define dum_pv_energyweek_log dummy
dum_pv_energytomonth
define dum_pv_energyweek_read dummy
 
define dum_pv_energyyear_log dummy
dum_pv_energytoweek
define dum_pv_energyyear_read dummy
 
define dum_pvdcpower dummy
dum_pv_energytoyear
define dum_pvdcvolt dummy
 
define dum_pvenergy dummy
dum_pv_energyweek_log
define dum_pvloss dummy
 
define dum_pvpower dummy </pre>
dum_pv_energyweek_read
 
dum_pv_energyyear_log
 
dum_pv_energyyear_read
 
dum_pvdcpower
 
dum_pvdcvolt
 
dum_pvenergy
 
dum_pvloss
 
dum_pvpower


=== at Devices in FHEM ===
=== at Devices in FHEM ===
Zeile 269: Zeile 254:
== Links ==
== Links ==
# Solaredge: [https://www.solaredge.com/sites/default/files/se-inverter-installation-guide-de.pdf Installationsanleitung]
# Solaredge: [https://www.solaredge.com/sites/default/files/se-inverter-installation-guide-de.pdf Installationsanleitung]
# Solaredge: [https://www.solaredge.com/sites/default/files/application_note_use_of_se_components_in_agricultural_environments_de.pdf/ Sunspec Protokoll]
# Solaredge: [https://www.solaredge.com/sites/default/files/sunspec-implementation-technical-note-de.pdf Sunspec Protokoll]

Version vom 18. Februar 2018, 21:47 Uhr


SolarEdge Wechselrichter
SolarEdge SE10k
Allgemein
Protokoll Modubus TCP
Typ Wechselrichter
Kategorie Energieverbrauchsmessung
Technische Details
Kommunikation Ethernet TCP
Kanäle 1 (bidiektional)
Betriebsspannung 750V DC; 230V 3xAC
Leistungsaufnahme Eigenverbrauch 2% (geschätzt)
Versorgung 230V~ 3xAC
Abmessungen 317x512x214 (mm)
Sonstiges
Modulname ModbusAttr
Hersteller Solaredge


SE10k von Solaredge in FHEM einbinden

Dieser Artikel beschreibt die Einbindung eines Solaredgewechselrichters SE10k in ein FHEM System über eine Ethernetverbindung mit Hilfe des Moduls ModbusAttr.


Vorbedingungen

FHEM läuft und hat genügend Platz für Modifikationen und Logfiles (ca. 100 MByte / Jahr).

Am Wechselrichter

Im zugehörigen Menu ist bereits der Port 503 eingestellt. Trotzdem muss dieser noch einmal aktiviert werden, da sonst Modbus TCP nicht aktiv wird. Hilfe da zu bietet die Installationsanleitung [1].

ModbusAttr Device in FHEM

in FHEM wird ein ModbusAttr angelegt

define SolarEdge ModbusAttr 1 30 192.168.178.36 TCP

danach alle Attribute aus dem unten stehenden list nach dem Verfahren: attr SolarEdge dev-h-defPoll 1

Mehr Daten sind im Sunspec Protokoll [2] zu finden

List von Device Solaredge in FHEM

Internals:
   BUSY       0
   DEF        1 30 192.168.178.36 TCP
   DEST       192.168.178.36:502
   DeviceName 192.168.178.36:502
   FD         86
   INTERVAL   30
   IODev      KeSolarEdge
   LASTOPEN   1514309396.43558
   MODBUSID   1
   ModuleVersion 3.7.0 - 20.8.2017
   NAME       KeSolarEdge
   NOTIFYDEV  global
   NR         363
   NTFY_ORDER 50-KeSolarEdge
   PARTIAL    
   PROTOCOL   TCP
   REQUESTHEX 00c60000000601039c8f0001
   STATE      opened
   TRIGGERTIME 1514313544.27135
   TRIGGERTIME_FMT 2017-12-26 19:39:04
   TYPE       ModbusAttr
   devioLoglevel 3
   nextOpenDelay 60
Attributes:
   dev-h-defPoll 1
   dev-h-defShowGet 1
   enableControlSet 1
   maxTimeoutsToReconnect 3
   obj-h40079-expr $val / 10
   obj-h40079-reading AC-Volt-A
   obj-h40082-reading AC-Volt-Scale
   obj-h40082-unpack s>
   obj-h40083-reading AC-Power
   obj-h40084-reading AC-Power-Scale
   obj-h40084-unpack s>
   obj-h40093-len 2
   obj-h40093-reading AC-Energy
   obj-h40093-unpack l>
   obj-h40095-reading AC-Energy-Scale
   obj-h40096-reading DC-Current
   obj-h40097-reading DC-Current-Scale
   obj-h40097-unpack s>
   obj-h40098-reading DC-Voltage
   obj-h40099-reading DC-Voltage-Scale
   obj-h40099-unpack s>
   obj-h40100-reading DC-Power
   obj-h40101-reading DC-Power-Scale
   obj-h40101-unpack s>
   obj-h40103-reading HeatSinkTemp
   obj-h40103-unpack s>
   obj-h40107-reading Status

Dummys anlegen

Zur Verwendung der "at"s werden Dummys benötigt

define pv_energyday_log dummy
define dum_pv_energyday_log dummy 
define dum_pv_energyday_read dummy 
define dum_pv_energymonth_log dummy 
define dum_pv_energymonth_read dummy
define dum_pv_energytoday dummy
define dum_pv_energytomonth dummy
define dum_pv_energytoweek dummy
define dum_pv_energytoyear dummy
define dum_pv_energyweek_log dummy
define dum_pv_energyweek_read dummy
define dum_pv_energyyear_log dummy
define dum_pv_energyyear_read dummy
define dum_pvdcpower dummy
define dum_pvdcvolt dummy
define dum_pvenergy dummy
define dum_pvloss dummy
define dum_pvpower dummy 

at Devices in FHEM

Auslesen der Daten, da das ModbusAttr nicht immer geht:

at_solaredge

+*00:20:00 {
  if (Value("KeSolarEdge") eq "opened") {
    my $ACEnergy = fhem ("get KeSolarEdge AC-Energy");
    my $ACEnergyScale = fhem ("get KeSolarEdge AC-Energy-Scale");
    my $ACE = 0;
	my $day = Value("dum_pv_energyday_read");
	my $week = Value("dum_pv_energyweek_read");
	my $month = Value("dum_pv_energymonth_read");
	my $year = Value("dum_pv_energyyear_read");
    if (($ACEnergy ne "No Data") and ($ACEnergyScale ne "No FD")) {
      my $ACE = $ACEnergy * (10 ** $ACEnergyScale);
	  if ($ACE > 0) {
        fhem ("set dum_pvenergy " . $ACE);
        fhem ("set dum_pv_energytoday " . ($ACE - $day));
        fhem ("set dum_pv_energytoweek " . ($ACE - $week));
        fhem ("set dum_pv_energytomonth " . ($ACE - $month));
        fhem ("set dum_pv_energytoyear " . ($ACE - $year));
	  }
    }
    #Log 1, "at_Solaredge: PV-Energy " . $ACE . "\n";
    my $ACPower = fhem ("get KeSolarEdge AC-Power");
    my $ACPowerScale = fhem ("get KeSolarEdge AC-Power-Scale");
    my $ACP = 0;
    my $DCP = 0;
    if (($ACPower ne "No FD") and ($ACPower ne "No Data") and ($ACPowerScale ne "No FD")) { 
      $ACP = $ACPower * (10 ** $ACPowerScale);
      fhem ("set dum_pvpower " . $ACP);
      #Log 1, "at_Solaredge: PV-Power " . $ACP . "\n";
      my $DCPower = fhem ("get KeSolarEdge DC-Power");
      my $DCPowerScale = fhem ("get KeSolarEdge DC-Power-Scale");
      if (($DCPower ne "no FD") and ($DCPowerScale ne "no FD")) {
        $DCP = $DCPower * (10 ** $DCPowerScale);
        if ($DCP != 0) {
          fhem ("set dum_pvdcpower " . $DCP);
          fhem ("set dum_pvloss " . sprintf("%.1f", ($DCP - $ACP)));
        }
      }
    }
    my $DCVoltage = fhem ("get KeSolarEdge DC-Voltage");
    my $DCVoltageScale = fhem ("get KeSolarEdge DC-Voltage-Scale");
    my $DCV = 0;
    if (($DCVoltage ne "no FD") and ($DCVoltage ne "No Data") and ($DCVoltageScale ne "no FD")) {
      $DCV = $DCVoltage * (10 ** $DCVoltageScale);
      fhem ("set dum_pvdcvolt " . $DCV);
    }
    my $Status = fhem ("get KeSolarEdge Status");
    if ($Status ne "no FD") {
      if ($Status == 2) {
        fhem ("modify at_solaredge +*00:20:00");
      }
      else {
        fhem ("modify at_solaredge +*00:01:00");
      }
    } 
  }
  else {
    Log 1, Value("KeSolarEdge");
    fhem ("modify at_solaredge +*00:01:00");
  }
}

und eines um die Werte täglich zurück zu setzen

at_midnight

*24:00 {
# Abspeichern der täglichen, wöchentlichen und monatlichen Werte
  use Time::Local;
  my ($Psec,$Pmin,$Phour,$Pmday,$Pmonth,$Pyear,$Pwday,$Pyday,$Pisdst) = localtime();
  if(Value("KeSolarEdge") eq "opened") {
  	my $pvenergy = fhem("get KeSolarEdge AC-Energy");
    Log 5, "at_midnight AC-Energy" . " " . $pvenergy;
    if ($pvenergy ne "No FD") {
      my $pvet = Value("dum_pv_energyday_read");
      #Log 5, "at_midnight dum_pv_energyday_read " . $pvet;
      fhem ("set dum_pv_energyday_log " . ($pvenergy - $pvet));
      #Log 5, "at_midnight dum_pv_energyday" . " " . $pvenergy;
      fhem ("set dum_pv_energyday_read " . $pvenergy);
      #Log 5, "at_midnight dum_pv_energyday_read" . " " . $pvenergy;
      fhem ("modify at_midnight *24:00");
      if ($Pwday == 1) {
	    my $pvet = Value("dum_pv_energyweek_read");
        fhem ("set dum_pv_energyweek_log " . ($pvenergy - $pvet));
        fhem ("set dum_pv_energyweek_read " . $pvenergy);
	  }
      if ($Pmday == 1) {
	    my $pvet = Value("dum_pv_energymonth_read");
        fhem ("set dum_pv_energymonth_log " . ($pvenergy - $pvet));
        fhem ("set dum_pv_energymonth_read " . $pvenergy);
      }
      if ($Pyday == 1) {
	    my $pvet = Value("dum_pv_energyyear_read");
        fhem ("set dum_pv_energyyear_log " . ($pvenergy - $pvet));
        fhem ("set dum_pv_energyyear_read " . $pvenergy);
      }
    }
	else {
	  fhem ("modify at_midnight +00:01");
	  Log 2, "at_midnight Solaredge  AC-Energy No FD"
    }
  }
  else {
    fhem ("modify at_midnight +00:01");
	Log 2, "at_midnight Solaredge not opened"
  }
}

Log

Das ModbusDevice legt sich ein eigenes Log an. Um aber übersichtliche Grafiken zu bekommen werden die Daten des Dummy benötigt. Hier hilft ein Logfile

define FileLog_KePv Filelog %L/pv-%Y.log dum_pv*.*

Grafiken

Todo: Beschreibungen zu SVG hinterlegen


Links

  1. Solaredge: Installationsanleitung
  2. Solaredge: Sunspec Protokoll