Hauptmenü

Solarlog 200

Begonnen von ma7ja5, 30 Juni 2013, 19:38:38

Vorheriges Thema - Nächstes Thema

ma7ja5

Hallo,

anbei ein Modul für den Solarlog 200.
Je nach Wechselrichterkonfiguration muss die REGEXP angepasst werden.
Das Modul fragt die Javascript-Konstanten mittels http get ab und wertet sie aus.

Gruß
Manfred

Tobias

sollte zumindest ins fhem Repository ins Contrib Verzeichnis
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Olga123

Hallo Manfred,

aber wie sieht der "define" aus bzw. hast du ein kleines Bsp. mit Plot für mich?

Gruss

FHEM anfänger!

ma7ja5

Hallo,
siehe unten das Define und im Anhang der Plot.
-----------------------------------------------------------------
define PV Solarlog 192.168.xxx.yyy 300
attr PV delay 300
attr PV room Photovoltaik

define FileLog_PV FileLog ./log/PV-%Y.log PV:*
attr FileLog_PV room Unsorted

define wl_FileLog_PV_1 weblink fileplot FileLog_PV:wl_FileLog_PV_1:CURRENT
attr wl_FileLog_PV_1 room Photovoltaik
-------------------------------------------------------------------

Olga123

Super Danke,

kannst du noch schnell die Plot Datei "wl_FileLog_PV_1" anhängen?

Gruss und Danke

Mark

ma7ja5

# Created by FHEMWEB, 2013-07-10 20:08:13
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Photovoltaik'
set ytics
set y2tics
set grid ytics
set ylabel "Leistung"
set y2label "Ertrag "
set yrange [0:10000]
set y2range [0:75000]

#FileLog 7:PV.Pac\x3a::
#FileLog 4:PV.Pac\x3a::

plot "<IN>" using 1:2 axes x1y2 title 'Ertrag (Wh)' ls l1fill lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Leistung (W)' ls l0 lw 1 with lines

MacReiner

Hallo zusammen,

ich habe mir erlaubt, deinen Code bei mir einzubauen. Meine Hardware sieht allerdings etwas anders aus: Statt Kako habe ich Fronius IG60 und IG40 mit einer RS485 Schnittstelle im Einsatz.
Mein SolarLog ist der 400.
Die aktuelle Anzeige in FHEM klappt gut (momentaner Ertrag und Tagesertrag)
Das Diagramm wird auch dargestellt, es kommen aber keine Einträge (Ertragslinien).

Dummerweise werden die vergangenen Tage im SolarLog gelöscht bzw. werden unsinnige Werte angezeigt.

Auf www.macreiner.de könnt ihr das bewundern ;-)

Leider habe ich nicht so viel Wissen, um das Ganze auf meine Konstellation anpassen zu können.

Vielleicht kann sich ein Wissender mal äussern, ob das zu lösen ist...

Danke
Reiner
viele Grüße
Reiner

Reinemann67

Super - nun habe ich es auch geschafft, das Script auf meine zwei Wechselrichter anzupassen. Die Daten kommen von einem Solarlog 1000.  Die Peak Werte waren schon mit dem vorhandenem Script ok, aber der Tagesertrag passte nicht.

Die Lösung war möglich, nachdem ich einfach mal http://192.168.xy.120/pc.js?min0 in meinen Browser eingab und in der letzten Zeile
da[dx++]="18.10.13|0;0|0;4"   (Werte von heute früh 8:05)
die Erträge beider Wechselrichter identifizieren konnte. Das Script liest diese sogar schon ein, nur die Addition und Übergabe an die Log-Datei musste angepasst werden. Das konnte ich dann mit meinen bescheidenen Perl-Kenntnissen dann auch schaffen.

Vielen Dank für die Vorarbeit.

extraem

Hallo

ich habe das Modul gerade inst. und nach der Anleitung eingerichtet bekomme aber keinen Ertrag ob die PAC richtig ausgelesen wird weiß ich nicht da es dazu jetzt schon zu spät ist

Im Filelog steht 2013-12-28_17:56:29 PV Pac: 0 W, Ertrag: 0 Wh

Und im fhem Log mid verbose 5 das

2013.12.28 17:58:30 5: Solarlog_GetStatus
2013.12.28 17:58:30 5: PV: Data request
StatusCodes[0] = "Sending Parameters,Wait Sun/Grid,Checking Grid,Measuring Riso,DcDc Start,Inverter Start,Run,Recovery,Pause,Ground Fault,OTH Fault,Address Setting,Self Test,Self Test Fail,Sensor Test + Meas.Riso,Leak Fault,Waiting for manual reset,Internal Error E026,Internal Error E027,Internal Error E028,Internal Error E029,Internal Error E030,Sending Wind Table,Failed Sending table,UTH Fault,Remote OFF,Interlock Fail,Executing Autotest, , ,Waiting Sun,Temperature Fault,Fan Staucked,Int. Com. Fault,Slave Insertion,DC Switch Open,TRAS Switch Open,MASTER Exclusion,Auto Exclusion, , , ,Waiting, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Erasing Internal EEprom,Erasing External EEprom,Counting EEprom,Freeze,, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,  FehlerCodes[0] = " ,Sun Low W001,Input OC E001,Input UV W002,Input OV E002,Sun Low W001,No Parameters E003,Bulk OV E004,Comm.Error E005,Output OC E006,IGBT Sat E007,Bulk UV W011,Internal error E009,Grid Fail W003,Bulk Low E010,Ramp Fail E011,Dc/Dc Fail E012,Wrong Mode E013,Ground Fault ---,Over Temp. E014,Bulk Cap Fail E015,Inverter Fail E016,Start Timeout E017,Ground Fault E018,Degauss error ---,Ileak sens.fail E019,DcDc Fail E012,Self Test Error 1 E020,Self Test Error 2 E021,Self Test Error 3 E019,Self Test Error 4 E022,DC inj error E023,Grid OV W004,Grid UV W005,Grid OF W006,Grid UF W007,Z grid Hi W008,Internal error E024,Riso Low E025,Vref Error E026,Error Meas V E027,Error Meas F E028,Error Meas Z E029,Error Meas Ileak E030,Error Read V E031,Error Read I E032,Table fail W009,Fan Fail W010,UTH E033,Interlock fail E034,Remote Off E035,Vout Avg errror E036,Battery low W012,Clk fail W013,Input UC E037,Zero Power W014,Fan Stucked E038,DC Switch Open E039,Tras Switch Open E040,AC Switch Open E041,Bulk UV E042,Autoexclusion E043,Grid df/dt W015,Den switch Open W016,Jbox fail W017,DC Door Open E044,AC Door Open E045,Module Door Open E047,Fuse DC Fail W020,Liquid Cooler Fail E048,SPD AC protection open W018, da[dx++]="28.12.13|10568;6612"5;9;23;368;370;2"""";6""""""
2013.12.28 17:58:34 5: PV Pac: 0 W, Ertrag: 0 Wh


kann mir jemand sagen wo ich was ändern muss

Danke

Reinemann67

Versuche doch mal deine Werte durch Aufruf des Links (Posting vom 18.10.) abzurufen. In dem Ergebnis sollten Pac und Ertrag korrekt enthalten sein.  Da es unterschiedliche Solarlog Module gibt, sieht das Ergebnis auch untersciedlich aus.

Sind deine Werte da  korrekt ?

extraem

Hallo

wenn ich den Link aufrufe gibt es nur einen Eintrag mit PAC aber keinen mit Ertrag siehe Auszug aus der Ausgabe
Ich habe einen SolarLog 200 mit var Firmware = "2.8.2 Build 52"

var Pac=0
var aPdc=new Array(0,0,0)
var curStatusCode = new Array(1)
curStatusCode[0]=255
var curFehlerCode = new Array(1)
curFehlerCode[0]=0
var PacArr= [[0]];
var PdcArr= [[0,0,0]];
var sStrWIFI = 0
var sStrGPRS = 0
var tBsent = 1605493491
var tBrecv = 130455447
m[mi++]="02.01.14 16:50:00|0;0;0;6168;251;251;11"
m[mi++]="02.01.14 16:45:00|1;0;1;6168;251;251;11"
m[mi++]="02.01.14 16:40:00|2;1;2;6168;253;258;11"
m[mi++]="02.01.14 16:35:00|8;4;5;6168;300;331;11"
m[mi++]="02.01.14 16:30:00|15;8;8;6168;326;357;11"
m[mi++]="02.01.14 16:25:00|51;27;28;6163;356;381;11"
m[mi++]="02.01.14 16:20:00|86;45;47;6154;365;398;10"
m[mi++]="02.01.14 16:15:00|102;56;54;6142;371;402;10"
m[mi++]="02.01.14 16:10:00|134;70;74;6127;380;409;10"
m[mi++]="02.01.14 16:05:00|205;105;114;6110;390;420;10"
m[mi++]="02.01.14 16:00:00|249;128;137;6087;394;423;10"
m[mi++]="02.01.14 15:55:00|216;110;119;6061;390;420;10"
m[mi++]="02.01.14 15:50:00|225;115;124;6037;391;421;10"
m[mi++]="02.01.14 15:45:00|265;135;147;6013;395;425;10"
m[mi++]="02.01.14 15:40:00|367;187;201;5984;402;432;10"
m[mi++]="02.01.14 15:35:00|416;212;229;5947;404;435;10"
m[mi++]="02.01.14 15:30:00|417;214;228;5906;404;435;10"
m[mi++]="02.01.14 15:25:00|385;197;210;5864;402;433;10"
m[mi++]="02.01.14 15:20:00|320;164;175;5826;398;428;10"
m[mi++]="02.01.14 15:15:00|326;166;178;5795;398;428;10"
m[mi++]="02.01.14 15:10:00|330;168;182;5760;398;428;10"
m[mi++]="02.01.14 15:05:00|329;168;180;5728;398;428;10"
m[mi++]="02.01.14 15:00:00|326;167;178;5695;398;428;10"
m[mi++]="02.01.14 14:55:00|306;157;167;5661;397;427;10"
m[mi++]="02.01.14 14:50:00|263;135;145;5629;393;423;10"
m[mi++]="02.01.14 14:45:00|239;121;133;5602;391;421;10"
m[mi++]="02.01.14 14:40:00|262;134;145;5576;393;422;10"
m[mi++]="02.01.14 14:35:00|268;135;149;5548;390;419;10"
m[mi++]="02.01.14 14:30:00|260;134;143;5518;392;422;10"
m[mi++]="02.01.14 14:25:00|340;174;187;5490;397;428;10"
m[mi++]="02.01.14 14:20:00|401;204;220;5455;401;431;10"
m[mi++]="02.01.14 14:15:00|516;264;283;5415;405;436;11"
m[mi++]="02.01.14 14:10:00|523;269;285;5364;405;435;11"
m[mi++]="02.01.14 14:05:00|924;472;507;5313;415;446;11"
m[mi++]="02.01.14 14:00:00|1286;659;702;5225;421;453;11"
m[mi++]="02.01.14 13:55:00|1275;653;696;5107;422;453;11"
m[mi++]="02.01.14 13:50:00|1218;623;666;4990;421;453;11"
m[mi++]="02.01.14 13:45:00|1188;608;649;4880;421;453;11"
m[mi++]="02.01.14 13:40:00|1126;578;614;4773;421;452;11"
m[mi++]="02.01.14 13:35:00|1052;537;574;4670;419;451;11"
m[mi++]="02.01.14 13:30:00|906;464;494;4574;417;448;11"
m[mi++]="02.01.14 13:25:00|997;510;545;4490;419;450;11"
m[mi++]="02.01.14 13:20:00|1143;584;625;4399;421;453;11"
m[mi++]="02.01.14 13:15:00|1122;575;612;4294;421;453;11"
m[mi++]="02.01.14 13:10:00|1052;540;573;4192;421;452;11"
m[mi++]="02.01.14 13:05:00|1076;552;587;4096;421;453;11"
m[mi++]="02.01.14 13:00:00|1028;528;561;3997;421;452;10"
m[mi++]="02.01.14 12:55:00|913;467;499;3904;419;450;10"
m[mi++]="02.01.14 12:50:00|830;426;453;3820;419;449;10"
m[mi++]="02.01.14 12:45:00|943;483;515;3739;419;450;10"
m[mi++]="02.01.14 12:40:00|1045;535;571;3651;421;452;10"
m[mi++]="02.01.14 12:35:00|1060;542;579;3555;421;453;10"
m[mi++]="02.01.14 12:30:00|1087;557;594;3456;421;453;10"
m[mi++]="02.01.14 12:25:00|1042;533;570;3356;421;453;10"
m[mi++]="02.01.14 12:20:00|1040;532;568;3260;421;453;10"
m[mi++]="02.01.14 12:15:00|1015;519;555;3165;421;452;10"
m[mi++]="02.01.14 12:10:00|873;446;478;3072;418;449;10"
m[mi++]="02.01.14 12:05:00|837;431;456;2992;417;449;10"
m[mi++]="02.01.14 12:00:00|858;440;468;2914;417;449;10"
m[mi++]="02.01.14 11:55:00|904;461;496;2835;418;449;10"
m[mi++]="02.01.14 11:50:00|1002;511;547;2751;419;451;10"
m[mi++]="02.01.14 11:45:00|1191;609;651;2659;422;453;10"
m[mi++]="02.01.14 11:40:00|1403;718;766;2550;425;456;10"
m[mi++]="02.01.14 11:35:00|1535;784;840;2423;426;458;10"
m[mi++]="02.01.14 11:30:00|1590;812;871;2284;427;459;10"
m[mi++]="02.01.14 11:25:00|1204;615;659;2140;422;454;10"
m[mi++]="02.01.14 11:20:00|1455;745;795;2032;424;456;10"
m[mi++]="02.01.14 11:15:00|2255;1170;1209;1897;432;465;10"
m[mi++]="02.01.14 11:10:00|1611;832;873;1697;428;460;9"
m[mi++]="02.01.14 11:05:00|1648;850;899;1554;431;463;9"
m[mi++]="02.01.14 11:00:00|1821;936;991;1405;432;464;9"
m[mi++]="02.01.14 10:55:00|1596;820;869;1241;431;464;8"
m[mi++]="02.01.14 10:50:00|1162;596;633;1099;428;460;8"
m[mi++]="02.01.14 10:45:00|918;470;501;994;424;456;8"
m[mi++]="02.01.14 10:40:00|775;396;424;909;421;452;7"
m[mi++]="02.01.14 10:35:00|494;254;270;838;412;443;7"
m[mi++]="02.01.14 10:30:00|546;279;299;790;414;445;7"
m[mi++]="02.01.14 10:25:00|503;257;275;738;413;443;7"
m[mi++]="02.01.14 10:20:00|512;264;280;689;409;438;7"
m[mi++]="02.01.14 10:15:00|326;168;178;640;403;432;7"
m[mi++]="02.01.14 10:10:00|209;108;115;608;393;422;6"
m[mi++]="02.01.14 10:05:00|237;121;131;585;397;426;6"
m[mi++]="02.01.14 10:00:00|389;199;213;560;408;438;6"
m[mi++]="02.01.14 09:55:00|569;291;311;520;417;447;6"
m[mi++]="02.01.14 09:50:00|404;208;220;466;409;439;6"
m[mi++]="02.01.14 09:45:00|269;138;148;428;401;430;6"
m[mi++]="02.01.14 09:40:00|312;160;171;399;403;433;6"
m[mi++]="02.01.14 09:35:00|253;129;140;368;399;429;5"
m[mi++]="02.01.14 09:30:00|223;114;123;342;396;426;5"
m[mi++]="02.01.14 09:25:00|221;113;122;318;396;426;5"
m[mi++]="02.01.14 09:20:00|244;125;134;295;400;430;5"
m[mi++]="02.01.14 09:15:00|305;155;168;269;405;434;5"
m[mi++]="02.01.14 09:10:00|408;208;224;238;412;442;4"
m[mi++]="02.01.14 09:05:00|411;210;226;198;412;442;4"
m[mi++]="02.01.14 09:00:00|291;149;159;158;404;433;4"
m[mi++]="02.01.14 08:55:00|224;115;123;129;399;428;4"
m[mi++]="02.01.14 08:50:00|183;94;102;105;393;423;3"
m[mi++]="02.01.14 08:45:00|133;69;74;85;385;414;3"
m[mi++]="02.01.14 08:40:00|85;44;49;70;374;403;3"
m[mi++]="02.01.14 08:35:00|68;35;38;58;362;390;2"
m[mi++]="02.01.14 08:30:00|45;24;25;48;351;377;2"
m[mi++]="02.01.14 08:25:00|29;15;17;40;317;327;2"
m[mi++]="02.01.14 08:20:00|17;7;12;33;347;350;1"
m[mi++]="02.01.14 08:15:00|14;5;11;0;391;396;1"
m[mi++]="02.01.14 08:10:00|12;6;7;31;320;323;0"
da[dx++]="02.01.14|6168;2255"


Wo finde ich den Ertrag und wo muss ich dann was Eintragen
Ich habe leider keine Ahnung von Perl und RegExP

Danke

ph1959de

@extraem: Deine Ertragszeile sieht so ähnlich aus, wie bei mir. Leider ist (meine Meinung) das Modul noch etwas "speziell". Ich hab's auf die Schnelle für mich angepasst (ich hoffe ich bekomm's hier komplett hin; alle Änderungen im sub Solarlog_GetStatus):

Die RegExp:
my ($Pac2,$Pdc1,$Pdc2,$Earn,$Udc1,$Udc2,$Temp)=( $allines =~ /.+?m\[mi\+\+\]=.+?\|(.+?);(.+?);(.+?);(.+?);(.+?);(.+?);(.+?)\"/ );

Dementsprechend dann später:
$text= "Pac: $Pac2 W, Ertrag: $Earn Wh";

und zu guterletzt:
  if (!$hash->{LOCAL}){
            $hash->{CHANGED}[0] = $text;
            $hash->{STATE} = $text;
            $hash->{READINGS}{Pac}{TIME} = TimeNow();
            $hash->{READINGS}{Pac}{VAL} = $Pac2;
            $hash->{READINGS}{Ertrag}{TIME} = TimeNow();
            $hash->{READINGS}{Ertrag}{VAL} = $Earn;
            DoTrigger($name, undef) if($init_done);   
  }


Alles im Modul 88_Solarlog.pm zu ändern.

Vielleicht finde ich mal Zeit (und einen Weg) das zu generalisieren.

Gruß, Peter
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

extraem

Hallo ph1959de

danke für die Hilfe

ich habe jetzt noch diesen Teil auskommentiert und damit geht es jetzt anscheinend

# if ($Ertrag).
#  { }
# else
# { $Pac = 0;
#    $Ertrag = 0;
# }.


wenn ich die Daten mit dem Browser hole steht das im File
m[mi++]="03.01.14 11:30:00|2153;1184;1095;3303;449;480;11"

und das im Log vom fhem
2014-01-03_11:30:58 PV Pac: 2153 W, Ertrag: 3303 Wh

Weist du für was die anderen Daten in der Zeil sind

Danke

ph1959de

Wenn Du den Solarlog auch .csv erzeugen lässt, könntest Du da nachschauen.

Ich finde z.B. bei mir in der

min140102.csv
#Datum;Uhrzeit;WR;Pac;DaySum;Status;Error;Pdc1;Pdc2;Udc1;Udc2;Temp;Uac
...
02.01.14;12:00:00;1;350;570;1;0;194;170;301;196;21;236

passend dazu in min140102.js
...
m[mi++]="02.01.14 12:00:00|350;194;170;570;301;196;21"


Für Deine Situation auseinanderfieseln musste jetzt aber selbst.

Gruß, Peter


Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

Deinjo

Hallo zusammen,

erstmal vielen Dank an Manfred für das gute script zum auswerten des Solarlog.

Ich wollte das script nun für mich anpassen und haben dabei ein Problem mit der Änderung der Regexp.
An meinem Solarlog ist auch ein S0-Zähler angeschlossen. Von diesem möchte ich jetzt nicht den über 5min gemittelten Wert sondern einen aktuelln Wert.

In dem File vom Solarlog ist folgende Zeilen enthalten:
var PacArr= [[858], [1]];

Die "858" ist der aktuelle Verbrauchswert und "1" die aktuelle Solarleistung (gleiche wie in var Pac=1).

Beim auslesen der Zeile habe ich aber nun ein Problem (muss sagen, Perl ist neu für mich). Ich habe es mit folgender Zeile probiert:
my ($Verbrauch,$SolarPac) =( $allines =~ /.+?var PacArr= \[\[(.+?)\],\[(.+?)\]\]/ );

Leider sind immer beide Variablen leer.

Jemand eine Idee?

Danke und Gruß
Deinjo
rPi3, Jessie, FHEM 5.7
CUL, Homematic, WeMos, FritzDect, TableUI,...