Neu: 77_SMAEM - Modul für SMA Energie Meter. Alternative zum Sunny Home Manager.

Begonnen von Volker Kettenbach, 30 März 2016, 12:42:05

Vorheriges Thema - Nächstes Thema

mkoerner

Hallo Heiko,

ich habe nun alle DbRep mit (Beispiel)
set Rep.SMAEM.Bezug.Jahr
noch mal gestartet. Jetzt sind auch alle grün.
Meine Energiebilanz sieht nun auch besser aus, bis auf den Umstand, daß keine PV-Erzeugung drin steht.
Was mir aufgefallen ist in der setDumEnergy:
Bei PVDay/PVMonth/PVYear steht:
CommandSet(undef,"Rep.SMAEM.Einspeisung.heute sumValue");
Für
Rep.SMAEM.Erzeugung.heute
steht aber nichts drin. Ist das korrekt?

Gruß

M

DS_Starter

Zitat
Bei PVDay/PVMonth/PVYear steht:
Code: [Auswählen]

CommandSet(undef,"Rep.SMAEM.Einspeisung.heute sumValue");

Für
Code: [Auswählen]

Rep.SMAEM.Erzeugung.heute

steht aber nichts drin. Ist das korrekt?


Ich finde die von die zitierten Stellen so nicht.

Hier nochmal meine Sub zusammengefasst:


############################################################################################################
########   Setzen von Werten in Dum.Energy
########   UserExitFn in Rep.STP5000.Erzeugung.heute, Rep.SMAEM.Einspeisung.heute, Rep.SMAEM.Bezug.heute       
############################################################################################################
sub setDumEnergy {
my ($name,$reading,$value) = @_;
my $hash   = $defs{$name};

if ($name =~ m/Rep.*heute/) {
   # Werte aktueller Tag
   if ($reading =~ m/STP_5000__etoday__DIFF/) {
     # Erzeugung aktueller Tag
CommandSetReading(undef, "Dum.Energy PVDay ".(looks_like_number($value)?sprintf('%.1f',$value):0.0));
# starten Report Eispeisung aktueller Tag
CommandSet(undef,"Rep.SMAEM.Einspeisung.heute sumValue");
   }
   if ($reading =~ m/SMA_Energymeter__Einspeisung_WirkP_Zaehler_Diff__SUM/) {
     # Eispeisung aktueller Tag
CommandSetReading(undef, "Dum.Energy GridFeedInDay ".(looks_like_number($value)?sprintf('%.1f',$value):0.0));
# starten Report Bezug aktueller Tag
CommandSet(undef,"Rep.SMAEM.Bezug.heute sumValue");
   }
   if ($reading =~ m/SMA_Energymeter__Bezug_WirkP_Zaehler_Diff__SUM/) {
     # Bezug aktueller Tag
CommandSetReading(undef, "Dum.Energy GridConsumptionDay ".(looks_like_number($value)?sprintf('%.1f',$value):0.0));
     
# Eigenverbrauchsquote aktueller Tag
     my $pvday     = ReadingsVal("Dum.Energy", "PVDay", 0);
     my $feedinday = ReadingsVal("Dum.Energy", "GridFeedInDay", 0);
     my $sqday     = ($pvday - $feedinday) / $pvday * 100 if($pvday > 0);
     CommandSetReading(undef, "Dum.Energy SelfConsumptionQuoteDay ".sprintf('%.0f',$sqday)) if($sqday);

     # Autarkiequote aktueller Tag
     my $consumday = ReadingsVal("Dum.Energy", "GridConsumptionDay", 0);
     my $aqday     = ($pvday - $feedinday) / ($pvday - $feedinday + $consumday) * 100 if($pvday > 0);
     CommandSetReading(undef, "Dum.Energy AutarkyQuoteDay ".sprintf('%.0f',$aqday)) if ($aqday);

# Verbrauch aktueller Tag
my $tcday = $pvday - $feedinday + $consumday;
CommandSetReading(undef, "Dum.Energy TotalConsumptionDay ".sprintf('%.1f',$tcday)) if ($tcday);
   }
}

if ($name =~ m/Rep.*Monat/) {
   # Werte aktueller Monat
   if ($reading =~ m/STP_5000__etotal__DIFF/) {
     # Erzeugung aktueller Monat
CommandSetReading(undef, "Dum.Energy PVMonth ".(looks_like_number($value)?sprintf('%.1f',$value):0.0));
# starten Report Eispeisung aktueller Monat
CommandSet(undef,"Rep.SMAEM.Einspeisung.Monat sumValue");
   }
   if ($reading =~ m/SMA_Energymeter__Einspeisung_WirkP_Zaehler_Diff__SUM/) {
     # Eispeisung aktueller Monat
CommandSetReading(undef, "Dum.Energy GridFeedInMonth ".(looks_like_number($value)?sprintf('%.1f',$value):0.0));
# starten Report Bezug aktueller Monat
CommandSet(undef,"Rep.SMAEM.Bezug.Monat sumValue");
   }
   if ($reading =~ m/SMA_Energymeter__Bezug_WirkP_Zaehler_Diff__SUM/) {
     # Bezug aktueller Monat
CommandSetReading(undef, "Dum.Energy GridConsumptionMonth ".(looks_like_number($value)?sprintf('%.1f',$value):0.0));
     
# Eigenverbrauchsquote Monat
     my $pvmonth     = ReadingsVal("Dum.Energy", "PVMonth", 0);
     my $feedinmonth = ReadingsVal("Dum.Energy", "GridFeedInMonth", 0);
     my $sqmonth     = ($pvmonth - $feedinmonth) / $pvmonth * 100 if($pvmonth > 0);
     CommandSetReading(undef, "Dum.Energy SelfConsumptionQuoteMonth ".sprintf('%.0f',$sqmonth)) if($sqmonth);

     # Autarkiequote Monat
     my $consummonth = ReadingsVal("Dum.Energy", "GridConsumptionMonth", 0);
     my $aqmonth     = ($pvmonth - $feedinmonth) / ($pvmonth - $feedinmonth + $consummonth) * 100 if($pvmonth > 0);
     CommandSetReading(undef, "Dum.Energy AutarkyQuoteMonth ".sprintf('%.0f',$aqmonth)) if ($aqmonth);

# Verbrauch aktueller Monat
my $tcmonth = $pvmonth - $feedinmonth + $consummonth;
CommandSetReading(undef, "Dum.Energy TotalConsumptionMonth ".sprintf('%.1f',$tcmonth)) if ($tcmonth);
   }
}

if ($name =~ m/Rep.*Jahr/) {
   # Werte aktuelles Jahr
   if ($reading =~ m/STP_5000__etotal__DIFF/) {
     # Erzeugung aktueller Monat
CommandSetReading(undef, "Dum.Energy PVYear ".(looks_like_number($value)?sprintf('%.1f',$value):0.0));
# starten Report Eispeisung aktuelles Jahr
CommandSet(undef,"Rep.SMAEM.Einspeisung.Jahr sumValue");
   }
   if ($reading =~ m/SMA_Energymeter__Einspeisung_WirkP_Zaehler_Diff__SUM/) {
     # Eispeisung aktuelles Jahr
CommandSetReading(undef, "Dum.Energy GridFeedInYear ".(looks_like_number($value)?sprintf('%.1f',$value):0.0));
# starten Report Bezug aktuelles Jahr
CommandSet(undef,"Rep.SMAEM.Bezug.Jahr sumValue");
   }
   if ($reading =~ m/SMA_Energymeter__Bezug_WirkP_Zaehler_Diff__SUM/) {
     # Bezug aktuelles Jahr
CommandSetReading(undef, "Dum.Energy GridConsumptionYear ".(looks_like_number($value)?sprintf('%.1f',$value):0.0));
     
# Eigenverbrauchsquote Jahr
     my $pvyear     = ReadingsVal("Dum.Energy", "PVYear", 0);
     my $feedinyear = ReadingsVal("Dum.Energy", "GridFeedInYear", 0);
     my $sqyear     = ($pvyear - $feedinyear) / $pvyear * 100 if($pvyear > 0);
     CommandSetReading(undef, "Dum.Energy SelfConsumptionQuoteYear ".sprintf('%.0f',$sqyear)) if($sqyear);

     # Autarkiequote Jahr
     my $consumyear = ReadingsVal("Dum.Energy", "GridConsumptionYear", 0);
     my $aqyear     = ($pvyear - $feedinyear) / ($pvyear - $feedinyear + $consumyear) * 100 if($pvyear > 0);
     CommandSetReading(undef, "Dum.Energy AutarkyQuoteYear ".sprintf('%.0f',$aqyear)) if ($aqyear);

# Verbrauch aktueller Jahr
my $tcyear = $pvyear - $feedinyear + $consumyear;
CommandSetReading(undef, "Dum.Energy TotalConsumptionYear ".sprintf('%.1f',$tcyear)) if ($tcyear);
   }
}

return;
}

ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

mkoerner

Hallo Heiko,

im Prinzip geht es um die Stelle:
   if ($reading =~ m/STP_5000__etoday__DIFF/) {
     # Erzeugung aktueller Tag
CommandSetReading(undef, "Dum.Energy PVDay ".(looks_like_number($value)?sprintf('%.1f',$value):0.0));
# starten Report Eispeisung aktueller Tag
CommandSet(undef,"Rep.SMAEM.Einspeisung.heute sumValue");
   }

Beschrieben ist es mit
ZitatErzeugung aktueller Tag
. Geschrieben wird aber
ZitatCommandSet(undef,"Rep.SMAEM.Einspeisung.heute sumValue");
.
Ein Schreiben von
ZitatCommandSet(undef,"Rep.SMAEM.Erzeugung.heute sumValue");
fehlt, obwol das entsprechende DbRep definiert ist.

DS_Starter

Hallo M,

die Beschreibung:

ZitatErzeugung aktueller Tag

bezieht sich auf die nächste Zeile die den übertragenen Wert $value des Reading STP_5000__etoday__DIFF setzt:


CommandSetReading(undef, "Dum.Energy PVDay ".(looks_like_number($value)?sprintf('%.1f',$value):0.0));


Der nächste Schritt ist dann die Berechnung Einspeisung aktueller Tag:


CommandSet(undef,"Rep.SMAEM.Einspeisung.heute sumValue");


Deine andere Frage ....

Zitat
Ein Schreiben von
Zitat

    CommandSet(undef,"Rep.SMAEM.Erzeugung.heute sumValue");

fehlt, obwol das entsprechende DbRep definiert ist.

Bei mir bzw. meiner Beschreibung gibt es ein "Rep.SMAEM.Erzeugung.heute" auch nicht, sondern es ist ein "Rep.STP5000.Erzeugung.heute".
Diese Berechnung wird durch ein AT angetriggert und ist der Anfang der Gesamtkette.


defmod recalc_Dum.Energy.Quoten.heute at +*00:30:00 {fhem ("set Rep.STP5000.Erzeugung.heute diffValue") }
attr recalc_Dum.Energy.Quoten.heute disable 0
attr recalc_Dum.Energy.Quoten.heute group SMA Energy Meter Auswertung
attr recalc_Dum.Energy.Quoten.heute room Energie


Nun sind Namen Schall und Rauch, aber weiter oben hatte ich schon darauf hingewiesen, dass die ganzen Reps für die Erzeugungswerte sich auf den Wechselrichter beziehen und nicht auf den SMAEM !
Du hast leider alle Reps mit Rep.SMEM.... benannt was die Unterscheidung nicht einfach macht.


LG,
Heiko

ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

mkoerner

Hallo Heiko,

danke für die Erklärung.
Ja ich habe die alle mit Rep.SMAEM benannt. Sie beziehen sich aber trotzdem auf den Wechselrichter, so wie bei Dir beschrieben.
Ich muß dann wohl nochmal nachsehen, ob ich iregndwo einen Tippfehler drin habe.

Dnake

M

Volker Kettenbach

Sollte da noch was kommen, dann bitte in einem eigenen Thread, da es sich um ein anderes Modul handelt.

Danke!

Michael

Moin Volker Kettenbach

Ich bekomme seid einiger Zeit keine Daten mehr vom Energiemeter.

- Dem Beitrag #395 habe ich schon Versucht, ohne Erfolg.
- Mit tcpdump komme ich auch nicht weiter. s.h. Anhang
- Das Device schon mehrfach neu angelegt.
- Das Energiemeter ist unter seiner IP Aufrufbar
- Netzwerkaufbau PV Anlage -> Switch:Netgear GS108 -> Switch:Netgear GS116Ev2 -> Fritzbox 7590 <- Fhem Pi
- libio-socket-multicast-perl die neuste Version vorhanden.
- Vorm Neustart cacheSMAEM gelöscht
- Habe jetzt ein Hinweis im Log >>> 2018.03.18 18:40:11 3: SMAEM mySMAEM - Closing multicast

Mir fällt nichts mehr ein.  ::)
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP

DS_Starter

Hallo Michael,

ich bin zwar nicht Volker, antworte aber trotzdem mal.

Die Meldung "Closing multicast" kommt wenn FHEM gestoppt wird oder aber auch wenn "rereadcfg" ausgeführt wird. Vermutlich kommt bei dir der Eintrag von Letzterem.

Nun kenne ich den Switch Netgear GS116Ev2 nicht, habe aber gelesen dass es ein managed Switch ist.
Hast du vielleicht Multicast ausgeschlossen ?
Das Modul funktioniert über Multicast bzw. der Meter verschickt seine Daten darüber.

Ich würde an dieser Stelle ansetzen. Über tcpdump müssen Pakete erkennbar sein, sonst wird das Modul auch nichts rausbringen.
Übermittelt der Meter seine Daten an den Sunny Home Manager bzw. sind die Daten im SMA-Portal zu sehen ?

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Volker Kettenbach

Zitat von: Michael am 18 März 2018, 18:07:42

- Netzwerkaufbau PV Anlage -> Switch:Netgear GS108 -> Switch:Netgear GS116Ev2 -> Fritzbox 7590 <- Fhem Pi


Heisst das, dass die Fritzbox zwischen Pi und Switch Infrastruktur hängt?
Ich bezweifele, dass ein solches consumer Produkt korrekt Multicast verarbeitet. Nimm das auf jeden Fall raus.

Zudem ist auch der GS108 sehr verdächtig. Evtl. Leitet er Multicast als Broadcast weiter. Dann würde es gehen. Oder er blockt es. Oder er macht zufällig irgendwelchen Unsinn, wie die meisten consumer Produkte.

Ich habe einige Netgear GS108T und GS110TP. Die arbeiten korrekt was Multicast angeht.

Wenn Du Infrastruktur betreibst, die sehr zuverlässig laufen soll, kannst Du das alles knicken.
Da solltest Du Dir z.B einen gebrauchten Cisco 2960 oder 2970 oder 3570 kaufen.

Michael

Moin

Vielen Dank für eure Antworten.

@DS_Starter
ZitatHast du vielleicht Multicast ausgeschlossen ?
Nein.
Anlage 1

Zitat... sind die Daten im SMA-Portal zu sehen ?
Ja, Keinerlei Meldungen im Anlagenlogbuch alles OK.
Anlage 2

@Volker Kettenbach
ZitatHeisst das, dass die Fritzbox zwischen Pi und Switch Infrastruktur hängt?
Ja.
Die Switch Infastruktur belegt Port 2 der Fritzbox und der Pi Port 3.

@all
- Wenn ich den Switch:Netgear GS116Ev2 Neustarte bekomme ich einmalig Werte.
   Anlage 3
- Ich habe auch dieses Problem erst mit der Version 3.1.0
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP

DS_Starter

Hallo Michael,

ZitatIch habe auch dieses Problem erst mit der Version 3.1.0
Daran wird es m.M. nach nicht liegen denn diese Version unterscheidet sich von der vorherigen nur dadurch dass beim Start des Moduls mehr Ausgaben im Log erfolgen ob der Socket geöffnet wurde. Wenn du die vorherige nicht mehr hast, kann ich sie dir gerne zur Verfügung stellen zum Vergleich.

ZitatWenn ich den Switch:Netgear GS116Ev2 Neustarte bekomme ich einmalig Werte.
Das macht mich eher stutzig. Evtl. ein Defekt ? Kannst du den Switch als mögliche Fehlerquelle mal eliminieren ?

Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Volker Kettenbach

Theorie: Der Switch leitet kurz weiter, bis er die config hat, die dies verhindert.

stixif

hallo,
wollte mich hier kurz einklinken!
habe mein Netzwerk umgestellt auf Router mit LEDE (OpenWRT)
das Vlan läuft soweit sehr gut...
nur die Daten vom Energy-Meter bekomm ich nicht mehr...

kennt sich hier irgendwer evtl mit der Kombi und LEDE (OpenWRT) aus?!?

Rpi 3B + FHEM + Eltako FAM14 + Homematic

DS_Starter

Zitatkennt sich hier irgendwer evtl mit der Kombi und LEDE (OpenWRT) aus?!?

Nicht im speziellen, aber du musst immer darauf achten dass deine verwendete Infrastruktur Multicastpakete an deinen FHEM-Server weiterleitet und nicht blockt.
Es wird der Port UDP/9522 verwendet.

Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Volker Kettenbach

Siehe https://wiki.openwrt.org/de/doc/howto/udp_multicast

Letzter Absatz

Multicast-Weiterleitung

With IGMP snooping, multicast forwarding is disabled for bridges. One pure bridge solution is to disable multicast_snooping.

Add the following in /etc/rc.local

echo "0" > /sys/devices/virtual/net/br-lan/bridge/multicast_snooping
Replace br-lan with your actual bridge interface, sometimes also called br0.
This will forward all multicast packets to all ports on your bridge, making igmpproxy or udpxy unnecessary. In large networks, this may not be desirable.