lokale Anbindung SENEC Batterie an FHEM

Begonnen von cjung, 12 Januar 2020, 13:33:37

Vorheriges Thema - Nächstes Thema

xerion

Moin hat schon jemand von auch eine Möglichkeit gefunden den Speicher bzw. das Laden/Entladen zu steuern?
Um das EV PV Optimiert laden zu können wäre es am besten wenn man den Speicher auch übersteuern könnte, damit der Speicher nicht in das EV geladen wird.
Ich würde mich  freuen, wenn du meinen Einladungscode für Tibber, der Stromanbieter, der dir hilft, deinen Stromverbrauch zu verstehen und zu reduzieren, nutzt: https://invite.tibber.com/5fc08jbs. So bekommen wir beide 50 Euro und 100 % Ökostrom / https://geld-fuer-eauto.de/ref/334561880

ch.eick

So, wir kommen im Kostal Thread mit der Batterie Ansteuerung weiter, da ist sicher auch hier etwas von zugebrauchen.

z.B MinSOC, MaxSOC, 70% Regel mit Ladefenster
Anfragen bitte im anderen Thread stellen.

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

xerion

Zitat von: ch.eick am 23 Februar 2021, 13:10:04
So, wir kommen im Kostal Thread mit der Batterie Ansteuerung weiter, da ist sicher auch hier etwas von zugebrauchen.

z.B MinSOC, MaxSOC, 70% Regel mit Ladefenster
Anfragen bitte im anderen Thread stellen.

VG
   Christian

Hallo Christian,

ich habe jetzt nicht ganz aus dem Thread entnehmen können, wie das mit dem SENEC Speicher nun funktionieren soll?
Ich würde mich  freuen, wenn du meinen Einladungscode für Tibber, der Stromanbieter, der dir hilft, deinen Stromverbrauch zu verstehen und zu reduzieren, nutzt: https://invite.tibber.com/5fc08jbs. So bekommen wir beide 50 Euro und 100 % Ökostrom / https://geld-fuer-eauto.de/ref/334561880

PapaRiX

Ich habe jetzt auch mal ein wenig rumgeforscht und mittels Entwicklerconsole im Browser und Postman rumgespielt
Wenn die Infos schon bekannt sind, tut mir's leid, ich würde das gerne trotzdem mal zusammenstellen und sammeln.

im Photovoltaikforum gibt es interessante Hinweise im SENEC thread:
https://www.photovoltaikforum.com/thread/140602-senec-home-v3-hybrid-duo/

Es gibt eine debug Seite, die alle Variablen anzeigt:
http://192.168.xxx.YYY/Vars.html

Außerdem scheint bei:
http://192.168.xxx.YYY/display.html
einiges mehr an infos zu fließen als man angezeigt bekommt.

es gibt dort in lala.cgi die Anfrage:
{"DISPLAY":{"IMAGE":"","LEDS":""}}

Interessant ist die Variable "IMAGE" (siehe auch http://192.168.xxx.YYY/Vars.html)
Diese gibt einen riesen Array mit 264 Werten zurück.
Leider konnte ich mich noch nicht weiter auf die Suche machen, weil ich nicht genau weiß, wie ich das n-te Element eines Arrays in JSON isolieren kann (hat einer von euch einen Tipp?) Ich könnte wetten, dass wir dort auch Infos wie Energiemengen herbekommen.

Wenn vielleicht einer von Euch mehr Ahnung zum HTTPMOD/Postman/JSON hat kommen wir vielleicht weiter...

Grüße,
Patrix

cjung

#64
Hallo Patrix,

Ich kann noch die Chartfunktion beitragen:

http://192.168.xxx.YYY/chart.html?ENERGY.GUI_BAT_DATA_POWER.0&ENERGY.GUI_GRID_POW.0&ENERGY.GUI_HOUSE_POW.0&ENERGY.GUI_INVERTER_POWER.0

Hast Du Dir die Statistik Variablen schonmal angesehen ? "{"STATISTIC":{"LIVE_BAT_CHARGE":"","LIVE_BAT_DISCHARGE":"","LIVE_GRID_EXPORT":"","LIVE_GRID_IMPORT":"","LIVE_HOUSE_CONS":"","LIVE_PV_GEN":""}}"
Das Display scheint nur die Bit Daten der Pixel zu übertragen. Die eigentlichen Wert bekommt man auch direkt. Man muss die nur aus hex in Dezimal umrechnen. Ein Beispiel für FHEM findest Du im ersten Posten dieses Threads.

Gruß
Christoph
Raspberry Pi 2 B
Funk: HM_CFG_USB2, HM-CFG-LAN 8*HM_CC_RT_DN, 3*HM-SEC-SD, 3*HM_TC_IT_WM_W_EU, 1*HM-LC-Dim1TPBU-FM,5*HM-SEC-SC-2, 1*HM-SEC-SCo
Wired: HMW: CFG-LAN, 8*LC_Bl1_DR, LC_Dim1L_DR

PapaRiX

Hey Christoph,

Ich nutze das Beispiel von Seite 1 selbst.

(habe eben auch nochmal beim Durchgehen des Threads gesehen, dass schon mal jemand auf den DISPLAY Knoten gestoßen ist   ;D )

Danke nochmal für den Hinweis auf den STATISTIC Knoten.
die Statistikwerte scheinen aber die Insgesamtwerte anzuzeigen. Ich habe noch die Hoffnung, dass irgendwo auch die Tageswerte stehen...

Grüße,
Patrix



cjung

Die Tageswerte hab ich jetzt noch nicht gesucht, aber Du könntest die Summenwerte nehmen und dann ein Diagram mit delta-d machen. Dann zeigt es jeweils die Tagenswerte an.
Raspberry Pi 2 B
Funk: HM_CFG_USB2, HM-CFG-LAN 8*HM_CC_RT_DN, 3*HM-SEC-SD, 3*HM_TC_IT_WM_W_EU, 1*HM-LC-Dim1TPBU-FM,5*HM-SEC-SC-2, 1*HM-SEC-SCo
Wired: HMW: CFG-LAN, 8*LC_Bl1_DR, LC_Dim1L_DR

PapaRiX

Das ist eine super Idee!

Ich schau mal, ob ich mit delta-d arbeite (muss mich da mal einlesen) oder ob ich mir einen dummy schaffe, der anhand der Gesamtwerte für jeden Kalendertag einen Wert ermittelt und in ein Log legt.

Doemy

Hallo zusammen,

hat jemand bereits eine Möglichkeit gefunden, um dem Speicher Befehle zu senden?

Vorallem wäre es interessant, die Einstellungen für das PEAK SHAVING zu ändern.
Die automatische Einstellung funktioniert bei mir überhaupt nicht, die letzten Tage waren sehr sonnig, Begrenzung hat angesprochen, PEAK Shaving hat aber nicht gegriffen. Habe es dann seit vorgestern auf manuell gestellt, funktioniert super.
Allerdings möchte ich an einem Regentag natürlich andere Einstellungen als ein einem Sonnentag.
Aber jeden Tag die Einstellungen manuell anpassen...  :o

Evtl. wäre es auch möglich, nur das laden des Batterie zu sperren und somit nicht das vorgegebenen PEAK SHAVING zu nutzen, sondern über eine solche Regelung "selbst zu basteln".

Gruß Thomas

xerion

Ich könnte noch die Links beisteuern, dort kann man sich jeweils den aktuellen und vorherigen Logs live anschauen.

http://192.168.yyy.xxx/log.html (Live vom Tag)

Die Historie der Logs kann man sich jeweils pro Tag unter http://192.168.yyy.xxx/log/YYYY/MM/DD.log (Historie pro Tag
Ich würde mich  freuen, wenn du meinen Einladungscode für Tibber, der Stromanbieter, der dir hilft, deinen Stromverbrauch zu verstehen und zu reduzieren, nutzt: https://invite.tibber.com/5fc08jbs. So bekommen wir beide 50 Euro und 100 % Ökostrom / https://geld-fuer-eauto.de/ref/334561880

PapaRiX

Nachdem ich momentan ein seltsames Verhalten bei meinem Speicher oder viel mehr dem Wechselrichter habe (ich bekomme alle paar Tage eine art Phantomleistung vom Dach angezeigt, ca 200W zu viel... auch Nachts) habe ich den Support angeschrieben und bei der Gelegenheit gleich nochmal angefragt, ob sie nicht eine MQTT-Schnittstelle bereitstellen können.
Wie zu erwarten ist das derzeit nicht geplant aber "der Vorschlag wurde an die Fachabteilung weitergereicht". Ich weiß, ich weiß... das ist das moderne "don't call us, we'll call you" aber man kann ja noch etwas träumen.  ;D

PapaRiX

#71
Kennt sich von Euch einer besser mit HTTPMOD aus?
ich möchte gerne die Leistungen der MPP Strings auslesen.
{"PV1":{"MPP_POWER": ""}}
Der JSON code sieht so aus:
{
    "PV1": {
        "MPP_POWER": [
            "fl_42AA0107",
            "fl_00000000",
            "fl_40CC0001"
        ]
    }
}


Das Ergebnis ist also ein array und ich habe es noch nicht geschafft einzelne elemente des Arrays zu isolieren.
hat einer eine Idee?

Danke,
Patrix

EDIT:
... und Frage selbt beantwortet  ;D
attr SENEC readingXXJSON PV1_MPP_POWER_Y

XX --> nummer des readings
Y --> Stelle des Arrays, fängt bei 0 an

Juergen27

Hallo Leute, nachdem unser Speicher nun stabil läuft und auch sauber Daten liefert, wollte ich mal meine Definition mit der Community teilen. Vielleicht kann der eine oder andere ein Reading gebrauchen:
defmod SENEC HTTPMOD http://192.168.178.XX/lala.cgi 30
attr SENEC enableControlSet 1
attr SENEC reading01JSON PV1_POWER_RATIO
attr SENEC reading01Name PV-Begrenzung
attr SENEC reading01OExpr {hex( (split ('_',$val,0 ))[1] )}
attr SENEC reading02JSON ENERGY_GUI_INVERTER_POWER
attr SENEC reading02Name PV-Erzeugung
attr SENEC reading02OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading03JSON ENERGY_GUI_BAT_DATA_FUEL_CHARGE
attr SENEC reading03Name AKKU-Beladung
attr SENEC reading03OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading04JSON ENERGY_GUI_BAT_DATA_POWER
attr SENEC reading04Name AKKU-Entnahme
attr SENEC reading04OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading05JSON ENERGY_GUI_HOUSE_POW
attr SENEC reading05Name Haus-Stromverbrauch
attr SENEC reading05OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading06JSON PM1OBJ1_P_TOTAL
attr SENEC reading06Name Netz-Einspeisung
attr SENEC reading06OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading07JSON STATISTIC_CURRENT_STATE
attr SENEC reading07Name PV-Status
attr SENEC reading07OExpr {hex( (split ('_',$val,0 ))[1] )}
attr SENEC reading08JSON BMS_VOLTAGE
attr SENEC reading08Name BatterieSpannung
attr SENEC reading08OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading09JSON BMS_CURRENT
attr SENEC reading09Name BatterieStrom
attr SENEC reading09OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading10JSON BMS_CYCLES
attr SENEC reading10Name BatterieZyklen
attr SENEC reading10OExpr {hex( (split ('_',$val,0 ))[1] )}
attr SENEC reading11JSON PV1_MPP_VOL
attr SENEC reading11Name ModulSpannung
attr SENEC reading11OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading12JSON PV1_MPP_CUR
attr SENEC reading12Name ModulStrom
attr SENEC reading12OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading13JSON PV1_MPP_POWER
attr SENEC reading13Name ModulLeistung
attr SENEC reading13OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading14JSON TEMPMEASURE_BATTERY_TEMP
attr SENEC reading14Name Temperatur_Batterie
attr SENEC reading14OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading15JSON TEMPMEASURE_CASE_TEMP
attr SENEC reading15Name Temperatur_Gehaeuse
attr SENEC reading15OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading16JSON TEMPMEASURE_MCU_TEMP
attr SENEC reading16Name Temperatur_Hardware
attr SENEC reading16OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC requestData {"PV1":{"POWER_RATIO":"","MPP_VOL":"","MPP_CUR":"","MPP_POWER":""},"ENERGY":{"GUI_HOUSE_POW":"","GUI_INVERTER_POWER":"","GUI_BAT_DATA_POWER":"","GUI_BAT_DATA_FUEL_CHARGE":"","STAT_STATE":""},"PM1OBJ1":{"P_TOTAL":""},"STATISTIC":{"CURRENT_STATE":""},"BMS":{"VOLTAGE":"","CURRENT":"","CYCLES":""},"TEMPMEASURE":{"BATTERY_TEMP":"","CASE_TEMP":"","MCU_TEMP":""}}
attr SENEC room zz_Basisdevices
attr SENEC showBody 1
attr SENEC userReadings ur_Akku_Laden:AKKU-Entnahme.*\
{if(ReadingsVal("SENEC","AKKU-Entnahme",0) > 0) {return ReadingsVal("SENEC","AKKU-Entnahme",0)} else {return 0}},\
ur_Akku_Entladen:AKKU-Entnahme.*\
{if(ReadingsVal("SENEC","AKKU-Entnahme",0) < 0) {return ReadingsVal("SENEC","AKKU-Entnahme",0) * -1} else {return 0}},\
ur_Netz_Einspeisung:Netz-Einspeisung.*\
{if(ReadingsVal("SENEC","Netz-Einspeisung",0) < 0) {return ReadingsVal("SENEC","Netz-Einspeisung",0) * -1} else {return 0}},\
ur_Netz_Bezug:Netz-Einspeisung.*\
{if(ReadingsVal("SENEC","Netz-Einspeisung",0) > 0) {return ReadingsVal("SENEC","Netz-Einspeisung",0)} else {return 0}},\
ur_EnergieNetzStd:ur_Netz_Einspeisung.*\
integral {ReadingsVal("SENEC","ur_Netz_Einspeisung",0)/3600},\
ur_TimeStampStatus:Netz-Einspeisung.*\
{SplitStr2Time_Short(ReadingsTimestamp("SENEC","ur_Netz_Einspeisung","2000-01-01 00:00:00"))},\
ur_SENECStatusText:Netz-Einspeisung.*\
{SENECStatusText(ReadingsVal("SENEC","PV-Status","13"))},\
ur_Modulleistung:Haus-Stromverbrauch.*\
{ReadingsVal("SENEC","ModulLeistung-1",0) + ReadingsVal("SENEC","ModulLeistung-2",0) + ReadingsVal("SENEC","ModulLeistung-3",0)},\
ur_Direktverbrauch:Haus-Stromverbrauch.*\
{ReadingsVal("SENEC","ur_Modulleistung",0) - ReadingsVal("SENEC","ur_Netz_Einspeisung",0) - ReadingsVal("SENEC","ur_Akku_Laden",0)},\
ur_EigenverbrauchBasis:Haus-Stromverbrauch.*\
{ReadingsVal("SENEC","ur_Direktverbrauch",0) + ReadingsVal("SENEC","ur_Netz_Einspeisung",0) + ReadingsVal("SENEC","ur_Akku_Laden",0)},\
ur_AutarkiegradBasis:Haus-Stromverbrauch.*\
{ReadingsVal("SENEC","ur_Direktverbrauch",0) + ReadingsVal("SENEC","ur_Netz_Bezug",0) + ReadingsVal("SENEC","ur_Akku_Entladen",0)},\
ur_AutarkieDirektverbrauch:Haus-Stromverbrauch.*\
{if(ReadingsVal("SENEC","ur_AutarkiegradBasis",0) > 0.1) {return sprintf("%.1f",ReadingsVal("SENEC","ur_Direktverbrauch",0)/ReadingsVal("SENEC","ur_AutarkiegradBasis",0)*100)} else {return 0}},\
ur_AutarkieAkkuEntnahme:Haus-Stromverbrauch.*\
{if(ReadingsVal("SENEC","ur_AutarkiegradBasis",0) > 0.1) {return sprintf("%.1f",ReadingsVal("SENEC","ur_Akku_Entladen",0)/ReadingsVal("SENEC","ur_AutarkiegradBasis",0)*100)} else {return 0}},\
ur_AutarkieNetzbezug:Haus-Stromverbrauch.*\
{if(ReadingsVal("SENEC","ur_AutarkiegradBasis",0) > 0.1) {return sprintf("%.1f",ReadingsVal("SENEC","ur_Netz_Bezug",0)/ReadingsVal("SENEC","ur_AutarkiegradBasis",0)*100)} else {return 0}},\
ur_AutarkieGrad:Haus-Stromverbrauch.*\
{ReadingsVal("SENEC","ur_AutarkieAkkuEntnahme",0) + ReadingsVal("SENEC","ur_AutarkieDirektverbrauch",0)},\
ur_EigenverbrauchDirektverbrauch:Haus-Stromverbrauch.*\
{if(ReadingsVal("SENEC","ur_EigenverbrauchBasis",0) > 0.1) {return sprintf("%.1f",ReadingsVal("SENEC","ur_Direktverbrauch",0)/ReadingsVal("SENEC","ur_EigenverbrauchBasis",0)*100)} else {return 0}},\
ur_EigenverbrauchAkkuLaden:Haus-Stromverbrauch.*\
{if(ReadingsVal("SENEC","ur_EigenverbrauchBasis",0) > 0.1) {return sprintf("%.1f",ReadingsVal("SENEC","ur_Akku_Laden",0)/ReadingsVal("SENEC","ur_EigenverbrauchBasis",0)*100)} else {return 0}},\
ur_EigenverbrauchNetzeinspeisung:Haus-Stromverbrauch.*\
{if(ReadingsVal("SENEC","ur_EigenverbrauchBasis",0) > 0.1) {return sprintf("%.1f",ReadingsVal("SENEC","ur_Netz_Einspeisung",0)/ReadingsVal("SENEC","ur_EigenverbrauchBasis",0)*100)} else {return 0}},\
ur_EigenverbrauchAnteil:Haus-Stromverbrauch.*\
{ReadingsVal("SENEC","ur_EigenverbrauchAkkuLaden",0) + ReadingsVal("SENEC","ur_EigenverbrauchDirektverbrauch",0)}

Zur Info: wir haben zwei Stränge (2x12 Module) auf der Garage und 4 Batterien im Speicher (SENEC.Home V3 hybrid). Bei einer anderen Ausstattung fallen ein paar Readings weg.
LG
Jürgen
Cubietruck 3.4.107 / Debian GNU/Linux 7.8 (wheezy), verschiedene Homematic und Somfy Komponenten

msome

#73
Guten Abend @Juergen27,
wärst du bitte so freundlich und würdest die beiden Routinen die in deiner Definition verwendet werden, noch bereitstellen?

Undefined subroutine &main::SENECStatusText
Undefined subroutine &main::SplitStr2Time_Short


HINWEIS 09. Aug 2021> ACHTUNG, der folgende Text über Readings und Pfade ist von der SW Version abhängig. Folgendes bezieht sich auf eine veraltete 0802 SW Version !

Btw - ich habe deine Definition mit einem Senec Home V3 Hybrid duo in Verwendung und bemerkt, dass es die PV1_MPP_VOL, CUR & POWER gar nicht (oder nicht mehr?) im lala gibt.

"PV1":{"POWER_RATIO":"u3_0000000B","MPP_VOL":"VARIABLE_NOT_FOUND","MPP_CUR":"VARIABLE_NOT_FOUND","MPP_POWER":"VARIABLE_NOT_FOUND"}

Bei mir stehen im PV1 nur Power, aber in einer anderen Struktur zur Verfügung:

  "PV1": {
    "POWER_RATIO": "u3_00000046",
    "MPP_INT": [
      "fl_00000000",
      "fl_00000000",
      "fl_43AC447B",
      "fl_00000000"
    ]
  }

Um das Problem zu lösen, habe ich den Request und die Auswertung dementsprechend angepasst.


attr SENEC requestData {"PV1":{"POWER_RATIO":"","MPP_INT":""},"ENERGY":{"GUI_HOUSE_POW":"","GUI_INVERTER_POWER":"","GUI_BAT_DATA_POWER":"","GUI_BAT_DATA_FUEL_CHARGE":"","STAT_STATE":""},"PM1OBJ1":{"P_TOTAL":""},"STATISTIC":{"CURRENT_STATE":""},"BMS":{"VOLTAGE":"","CURRENT":"","CYCLES":""},"TEMPMEASURE":{"BATTERY_TEMP":"","CASE_TEMP":"","MCU_TEMP":""}}

attr SENEC reading11JSON PV1_MPP_INT0
attr SENEC reading11Name Erzeugung MPP1
attr SENEC reading11OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading12JSON PV1_MPP_INT1
attr SENEC reading12Name Erzeugung MPP2
attr SENEC reading12OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}
attr SENEC reading13JSON PV1_MPP_INT2
attr SENEC reading13Name Erzeugung MPP3
attr SENEC reading13OExpr {sprintf("%.2f", unpack "f", pack "L", hex ((split('_',$val,0))[1]),0)}


Danke.
FHEM auf ODROID-C4 & FHEM auf Raspberry 3B+
IO: HMUARTLGW (wired), Velux KLF200, DuoFernStick, DeConz, HMUSB-2, JeeLink, ModBus, RS232, WiFi,
Geräte: so ziemlich alles was es an Geräten von HM gibt, PCA301, SDM630M, Hue Lampen & Steckdosen

Juergen27

Hallo msome,

anbei die beiden Funktionen.

SENECStatusText übersetzt die Nummer in den Statustext. Es gibt noch mehr, aber ich habe mir nur die gängigsten rausgesucht und verwendet. Die Liste lässt sich im Code einfach erweitern.
# ************
# SENECStatusText
# übersetzt Statusnummer in lesbaren Text
# {SENECStatusText($)}
# *************

sub SENECStatusText($)

{

my ($StatusNr) = @_;
my $StatusText = "nicht definiert";

my %Status = (
    18 => 'Netz + Entladen',
    17 => 'PV + Entladen',
    16 => 'Entladen',
    15 => 'Akku leer',
    14 => 'Laden',
    54 => 'Ladeschlussphase',
    13 => 'Akku voll',
    21 => 'Ladeschlussphase'
);
if (exists $Status{$StatusNr})
{
$StatusText = $Status{$StatusNr};
} else
{
$StatusText = "Nicht definiert: ". $StatusNr;
}
return $StatusText;
}
# end sub SENECStatusText()


SplitStr2Time_Short() zieht nur die Uhrzeit aus dem Timestamp.
# SplitStr2Time_Short($)
# Zerlegt einen TimeStamp (String) in die Einzelteile und formatiert die Uhrzeit
# 2018-12-12 21:36:13
# {SplitStr2Time_Short("2018-12-01 21:36:13")}

sub SplitStr2Time_Short($)
{
my ($String) = @_;

# my $Datumstring = "01.01.2001";

my @teil = split(" ",$String);
my @zeit = split(":",@teil[1]);
my $zeitstring = sprintf("%02d:%02d", $zeit[0], $zeit[1]);

return($zeitstring);
}
# end sub SplitStr2Time_Short()


Bei mir kommen die Werte für MPP getrennt für jeden der beiden Solarpanelstränge. Hast Du schon mal die Variablen die Dein Senec liefert ausgelesen (IP-Adresse vom Senec Speicher xxx.xxx.xxx.xxx/vars.html)? In meiner Variable MPP_AVAIL habe ich 2 stehen, ohne Deine Anlage zu kennen, tippe ich drauf, dasss es nur ein Strang ist und die Werte deshalb nur in einer Variablen auftauchen.

Gruss Jürgen

Cubietruck 3.4.107 / Debian GNU/Linux 7.8 (wheezy), verschiedene Homematic und Somfy Komponenten