SMA Wechselrichter - brauche ein wenig Hilfe...für Modul

Begonnen von svenkoethe, 05 September 2013, 08:33:03

Vorheriges Thema - Nächstes Thema

svenkoethe

Hallo,

habe jetzt mal das tool SMA-Spot bei mir installiert und kann somit die Daten von SMA Wechselrichtern per Bluetooth mit dem PI abrufen.

Wenn ich jetzt über die Konsole oder FHEM Befehlszeile den Aufruf starte bekomme ich auch eine Ausgabe.
Wenn ich es jetzt Recht verstehe kann man mit dieser Ausgabe sicher etwas anfangen um ein Modul daraus zu erstellen.

Wie muss man das Grundsätzlich angehen ?

Die Idee:
-- Perl Aufruf von Smaspot der die u.a. Ausgabe erzuegt in Variable schreiben.
-- Text parsen auf die gesuchten Einträge
-- von jedem Treffer eine neue Variable erzeugen
soweit so gut.... ist alles logisch und sollte machbar sein...

Doch wie werden diese Variablen dann als Readings an FHEM übergeben ?


Hier die Ausgabe:

SMAspot V2.0.6
Yet another tool to read power production of SMA solar inverters
(c) 2012-2013, SBF (http://code.google.com/p/sma-spot)

Commandline Args: -v -u
Thu Sep  5 08:20:23 2013: INFO: Starting...
sunrise: 07:04
sunset : 20:18
Connecting to 00:80:25:25:B5:46 (1/10)
Initializing...
SMA netID=01
Serial Nr: 7EF59339 (2130023225)
BT Signal=67%
Logon OK
Local PC Time: 05/09/2013 08:20:25
Inverter Time: 05/09/2013 08:20:39
Time diff (s): -14
TZ offset (s): 7200
Device Name:      SB 4000TL-21 225
Device Class:     Solar Inverters
Device Type:      SB4000TL-21
Software Version: 02.54.02.R
Serial number:    2130023225
Device Status:      OK
GridRelay Status:      Closed
Energy Production:
EToday: 0.246kWh
ETotal: 3350.513kWh
Operation Time: 2812.67h
Feed-In Time  : 2694.42h
DC Spot Data:
String 1 Pdc:   0.340kW - Udc: 333.34V - Idc:  1.020A
String 2 Pdc:   0.107kW - Udc: 218.66V - Idc:  0.492A
AC Spot Data:
Phase 1 Pac :   0.407kW - Uac: 223.81V - Iac:  1.820A
Phase 2 Pac :   0.000kW - Uac:   0.00V - Iac:  0.000A
Phase 3 Pac :   0.000kW - Uac:   0.00V - Iac:  0.000A
Total Pac   :   0.407kW
Grid Freq. : 49.98Hz
Current Inverter Time: 05/09/2013 08:20:39
Inverter Wake-Up Time: 05/09/2013 06:44:10
Inverter Sleep Time  : 05/09/2013 08:20:42
Thu Sep  5 08:20:26 2013: INFO: Done.

rudolfkoenig

Schnelle Loesung:
- beliebigen dummy erstellen
- Perl Funktion in 99_myUtils.pm bauen, wo man SMAspot aufruft, Rueckgabewert analysiert, und diverse Werte per readingsSingleUpdate oder readingsBeginUpdate/readingsBulkUpdate/readingsEndUpdate dem dummy hinzufuegt.
- Funktionsaufruf mit dummy-Namen per at regelmaessig einplanen.
- Damit kann ein Benutzer die Werte anschauen, per notify reagieren, die Daten in FileLog/DbLog protokollieren und per SVG visualisieren.

Mittlere Loesung:
- contrib/00_TAHR.pm als beispiel nehmen, und die o.g. routine per InternalAt aufrufen.
- Vorteil fuer den Benutzer: einfacher anzulegen, Doku direkt dabei, Modul per FHEM update aktualisierbar.

Erweiterte Loesung:
- die Funktionalitaet von SMAspot in das Modul nachbauen,
- Vorteil fuer den Benutzer: SMAspot ist dann nicht mehr notwendig, d.h. auch NAS/Fritzbox Benutzer koennen das Modul einfach verwenden.

svenkoethe

Ja, ok das hab ich soweit kapiert...

Ich würde mich vorerst für die Variante 2 entscheiden, damit ich schnell ein Ergebnis habe,
würde mich aber bereiterklären das ganze über den Winter auf Variante 3 auszubauen (ich hoffe ich bekomme das hin).

Noch einige Fragen zur Modulerstellung selbst,da ich eigentlich sonst im php/java Bereich zu Hause bin:

- Darf ich funktionen anderer Module einfach mitbenutzen ?
-- Wenn ja - per use:modulxyz einfügen, oder einfach per c & p in das neue Modul einfügen -- was ist hier best practice?
--> Das use/include hätte für mich den Vorteil das ich bei Aktualisierungen/Verbesserungen dies nicht nocheinmal machen müsste.

- ist es angedacht eine / mehrere module in FHEM zu integrieren die irgendwann eine Sammlung/Bibliothek von Standarfunktionen bieten
(so wie z.B. das in 99_Utils bereits begonnen wurde ?)
--> Wenn ja, würde ich versuchen neue Funktionen möglichst offen zu halten um diese vielleicht weiter nutzen zu können.


rudolfkoenig

>  - Darf ich funktionen anderer Module einfach mitbenutzen ?

Duerfen ist falsch formuliert. Damit begibt man sich in eine Abhaengigkit vom anderen Modul, bzw dessen Maintainer, der auf dich bei Aenderungen keine Ruecksicht nimmt (es gibt nicht nur bugfixes). Falls die Gemeinsamkeit ueber wenige Zeilen hinausgeht, sollte man ueberlegen sie in eine weitere Datei auszulagern, z.Bsp. wie es mit DevIo/HttpUtils/TcpServerUtils/etc geschehen ist.

use ist notwendig, falls das andere Modul vorher (per define) nicht geladen wurde.

svenkoethe

Ich wollte die ersten Erfolge melden...


(siehe Anhang / see attachement)


...der erste Plot...


(siehe Anhang / see attachement)


...zum Vergleich die Ansicht im Portal...


(siehe Anhang / see attachement)

svenkoethe

Leider dauert die Erstellung eines Plots fast 30 Sekunden mache ich irgendwas falsch ?



# Created by FHEMWEB, 2013-06-27 11:07:53
set terminal png transparent size <SIZE> crop
set terminal size <SIZE>
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M"
set xlabel " "
set title '<TL>'
set grid xtics y2tics



set ylabel "PV Leistung in kW"

set ytics



#DbLog WR1:total_pac::
#DbLog WR1:string_1_pdc::
#DbLog WR1:string_2_pdc::



plot "<IN>" using 1:4 axes x1y1 title 'Gesamtleistung - AC (kW)' ls l0fill lw 0.5 with lines,\
     "<IN>" using 1:4 axes x1y1 title 'Leistung String 1 - DC (kW)' ls l1fill lw 0.5 with lines,\
     "<IN>" using 1:4 axes x1y1 title 'Leistung String 2 - DC (kW)' ls l2fill lw 0.5 with lines

 

rudolfkoenig

>  Leider dauert die Erstellung eines Plots fast 30 Sekunden mache ich irgendwas falsch ?

Ein FritzBox kann fuer ein komplexeres Wochen-Plot schon mal eine Minute benoetigen, ein aktueller Notebook unter eine Sekunde. Wie man es unter Link sieht, kann ein RPi mit falschen OS locker ein FB7270 ueberbieten :)

Falls das weniger Daten sind, dann poste diese hier, damit ich es anschauen kann.

svenkoethe

Das Plot-Problem ist gelöst...

Für alle die DbLog verwenden und ebenfalls Probleme mit den Ladezeiten der Plot#s haben:

In der Anleitung zum DbLog (Erstellung der Tabellen) bzw. in dem Vorkonfigurierten .sql File sind sämtliche Datenbankfelder NICHT indiziert !

Ich habe einen kombinierten Index über die Felder DEVICE,TIMESTAMP und READING in der Datenbanktabelle 'history' erstellt.

Die Erzeugung von Plots dauert jetzt nur noch zwischen 0,5 und 1 Sekunden.

... vielleicht hilft es ja jemandem weiter ...

Screenshot aus phpMyAdmin:

(siehe Anhang / see attachement)

heiko

Hallo Sven,

das sieht doch sehr gut aus. Ich habe auch SMA-Spot bei mir zu laufen. Allerdings ist FHEM für mich noch Neuland.
In Perl muss ich mich noch ein wenig einlesen. Bisher habe ich viele Dinge mit AutoIt programmiert.
Könntest du dein Modul für SMA-Spot hier posten?

Beste Grüße
Heiko

thoweiss


svenkoethe

Leider habe ich aktuell keine/wenig Zeit für die Weierentwicklung.

Hier der aktuelle Stand der bei mir seit ca. 2 Wochen stabil läuft...

SMASpot muss dafür lauffähig sein (zumindest der Abruf - das schreiben der Files / senden der Daten ist nicht notwendig.

Mit dieser Config:

define WR1 SMAUtils 00:80:25:25:B5:46 180
attr WR1 delay 180
attr WR1 group Wechselrichter
attr WR1 room Heizung
define PV_Plot SVG myDbLog:pv_ac:CURRENT
attr PV_Plot label "PV Leistung AC"
attr PV_Plot plotfunction WR1
attr PV_Plot room PV Anlage

define PV_Plot1 SVG myDbLog:pv_dc_p:CURRENT
attr PV_Plot1 label "PV Leistung DC"
attr PV_Plot1 plotfunction WR1
attr PV_Plot1 room PV Anlage

define PV_Plot2 SVG myDbLog:pv_dc:CURRENT
attr PV_Plot2 label "PV Leistung DC"
attr PV_Plot2 plotfunction WR1
attr PV_Plot2 room PV Anlage

define PV_Plot3 SVG myDbLog:pv_days:CURRENT
attr PV_Plot3 label "PV Tagesertrag"
attr PV_Plot3 plotfunction WR1
attr PV_Plot3 fixedrange month
attr PV_Plot3 room PV Anlage

define pvTimer at *23:59:20 {\
 my $day=ReadingsVal("WR1","etoday",0);;\
 Log 3, "PV Tagesertrag: $day";;\
 fhem("setreading WR1 e_day $day");;\
 }

define pvTimer2 at *00:00:20 setreading WR1 etoday 0



... sieht das Ganze dann bei mir so aus:

(siehe Anhang / see attachement)



thoweiss

Prima - Danke.

Dann werde ich nachher mal meinen WR mit FHEM verhäkeln ...


gruß,
Thorsten

thoweiss

So - es ist vollbracht.

Das Modul funktioniert prima.




John

Hallo Sven

zusammen mit Matthias habe ich ein Modul für einen Kostal-Wechselrichter erstellt.

Dort ist es uns gelungen einen Erwartungswert für den Tagesertrag zu ermitteln.

Sollte das für dich von Interesse sein, so findest du hier die Infos zum Thema:


Link

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

svenkoethe

Hallo John,

grundsätzlich ist die Idee ja nicht schlecht...
Aber Aufgrund der extrem vielen Variablen, die bei der Berechnung eines Anlagenwirkungsgrades
mitspielen kann ich das nicht mal so pauschal in ein Modul packen...

Nur mal ein paar Beispiele die sich bei jeder Anlage anders auswirken:

- Anzahl der MPP - Tracker
- Anzahl der Strings
- DC Leitungsverluste
- Modulwirkungsgrad / Modulkennlinie
- Modultemperatur
- Wechselrichterwirkungsgrad
- (Teil)- Verschattung
- Modulneigungswinkel ( Dachneigung)

... das sind jetzt nur mal die wichtigsten, da kommen
Noch weitere hinzu...

Berücksichtigt man all diese Faktoren, dann könnte man gerade mal
einen theoretischen Näherungswert je nach Einstrahlung / m^2 errechnen,
der würde aber niemals stimmen...