Modul für EM1010

Hallo Tommi,

kannst Du mir das nochmal erklären, habe ich nicht ganz verstanden. Zuletzt habe ich mit den Pulses_total gerechnet, dass geht aber jetzt nicht mehr da der Wert bei einer Falschübertragung auf Grund deiner Logik falsch wäre, richtig ?

Welche variable muss ich denn jetzt loggen um den Stromverbrauch, halbwegs richtig, anzuzeigen ?:o

Das Script ist simpel, nicht das Problem :slight_smile:
Und oben haben ich die kompletten Scripta geposted (es sind zwei). Es ist jeweils nur ein Einzeiler.

Naja, die Idee war, dass ich gerne einen Gesamttageswert hätte, also den Verbrauch den ich an einem Kalendertag verbraucht habe.
Wenn das so ist, wie weiter oben beschrieben, dass der Daily_Sum ein gleitender Durchschnitt ist, dann sollte doch immer um 23:59:59 der Verbrauch des Kalendertages drin sein.

Gleichzeitig habe ich verstanden, dass ich, wenn ich konsequent die 5min Werte aufaddiere auf denselben Wert kommen sollte.

Wo also ist mein Denkfehler?

Gerne lasse ich mir auch was Einfacheres aufzeigen und bin peinlich berührt, wenn das schon so irgendwo direkt abgegriffen werden kann.

Mic

irgendwie steig ich nicht durch, was du da machst. Aber heute iszt auch Samstag… :wink:

hier mal ein Beispiel, wie man die Monatssumme aus einer Zähler-Var ausliest (Taggessumme wäre dann statt „3“ die „1“ in dem AC_GetAggregatedValues-Parameter):

$AH                                         = 58669 /*[Archive Handler]*/ ;
$ts                                         = mktime(0,0,0, date("m", time()), date("d", time())-1, date("Y",time()));
$te                                        = mktime(23,59,59, date("m", time()), date("d", time())-1, date("Y",time()));
echo date("d.m.Y H:i", $ts)."
";
echo date("d.m.Y H:i", $te)."
";
        
$Zentraleinspeisung_ID                = 12130 /*[Smart Metering\IPS EKM-868\EKM-868 I Hausverteilung\EKM-868 #01 Zentraleinspeisung\Energieverbrauch]*/ ;

$Zentral_Array                  = AC_GetAggregatedValues($AH, $Zentraleinspeisung_ID, 1, $ts, $te, 100);
$Zentral_Array[0]['humanDate']  = date("d.m.Y H:i:s", $Zentral_Array[0]['LastTime']);

print_r($Zentral_Array);

da Du sowieso mit HC’s arbeitest, bietet es sich an, eine einzige variable zu nutzen und daraus die jeweils benötigten Verdichtungslevel auszulesen.

z.B. so:

// Power actual Year
   $HC_Data                                           = array();
   $Cent_array    = AC_GetAggregatedValues($CfgDaten["ArchiveHandlerId"], 12130 /*[Smart Metering\IPS EKM-868\EKM-868 I Hausverteilung\EKM-868 #01 Zentraleinspeisung\Energieverbrauch]*/ , 3, $CfgDaten["StartTime"],$CfgDaten["EndTime"], 13);
   $OG_array    = AC_GetAggregatedValues($CfgDaten["ArchiveHandlerId"], 13483 /*[Smart Metering\IPS EKM-868\EKM-868 I Hausverteilung\EKM-868 #02 Licht_Strom oben\Energieverbrauch]*/  , 3, $CfgDaten["StartTime"],$CfgDaten["EndTime"], 13);
   $MG_array    = AC_GetAggregatedValues($CfgDaten["ArchiveHandlerId"], 21446 /*[Smart Metering\IPS EKM-868\EKM-868 I Hausverteilung\EKM-868 #03 Licht_Stom mitte\Energieverbrauch]*/ , 3, $CfgDaten["StartTime"],$CfgDaten["EndTime"], 13);
   $UG_array    = AC_GetAggregatedValues($CfgDaten["ArchiveHandlerId"], 33424 /*[Smart Metering\IPS EKM-868\EKM-868 I Hausverteilung\EKM-868 #04 Licht_Strom unten\Energieverbrauch]*/ , 3, $CfgDaten["StartTime"],$CfgDaten["EndTime"], 13);


    for($i=0;$i<count($Cent_array);$i++)
    {
       // Sonstiges
       $HC_Cent[$i]['Value']          = round($Cent_array[$i]['Avg'] - ($OG_array[$i]['Avg'] + $MG_array[$i]['Avg'] + $UG_array[$i]['Avg']), 1);
        $HC_Cent[$i]['TimeStamp']  = $Cent_array[$i]['TimeStamp'];
        $HC_Cent[$i]['human_Date'] = date("d.m.Y H:i", $HC_Cent[$i]['TimeStamp']);
        
        // OG
       $HC_OG[$i]['Value']          = round($OG_array[$i]['Avg'], 1);
        $HC_OG[$i]['TimeStamp']  = $OG_array[$i]['TimeStamp'];
        $HC_OG[$i]['human_Date'] = date("d.m.Y H:i", $HC_OG[$i]['TimeStamp']);
        
        // MG
       $HC_MG[$i]['Value']          = round($MG_array[$i]['Avg'], 1);
        $HC_MG[$i]['TimeStamp']  = $MG_array[$i]['TimeStamp'];
        $HC_MG[$i]['human_Date'] = date("d.m.Y H:i", $HC_MG[$i]['TimeStamp']);

        // UG
       $HC_UG[$i]['Value']          = round($UG_array[$i]['Avg'], 1);
        $HC_UG[$i]['TimeStamp']  = $UG_array[$i]['TimeStamp'];
        $HC_UG[$i]['human_Date'] = date("d.m.Y H:i", $HC_UG[$i]['TimeStamp']);
    }
    $HC_OG      = array_reverse($HC_OG);
    $HC_MG      = array_reverse($HC_MG);
    $HC_UG      = array_reverse($HC_UG);
    $HC_Cent      = array_reverse($HC_Cent);

dem HighChart führt man die Daten dann so zu (Beispiel: 1 Series mit Daten des OG-Arrays):

// Power OG
    $serie                                                             = array(    //"Id"=>12130,
                                                                                    "Data" => $HC_OG,

und wenn man es ganz simpel machen will (z.B. mit HC-Bordmitteln), spart man sich den oben geposteten Array-Kram und konfiguriert das HC-Config-Script wie folgt:

// Serienübergreifende Einstellung für das Laden von Werten
	$CfgDaten["AggregatedValues"]["HourValues"] 			= -1;      // ist der Zeitraum größer als X Tage werden Stundenwerte geladen
	$CfgDaten["AggregatedValues"]["DayValues"] 			= 0;       // ist der Zeitraum größer als X Tage werden Tageswerte geladen
	$CfgDaten["AggregatedValues"]["WeekValues"] 			= -1;      // ist der Zeitraum größer als X Tage werden Wochenwerte geladen
	$CfgDaten["AggregatedValues"]["MonthValues"] 		= -1;      // ist der Zeitraum größer als X Tage werden Monatswerte geladen
	$CfgDaten["AggregatedValues"]["YearValues"] 			= -1;      	// ist der Zeitraum größer als X Tage werden Jahreswerte geladen
	$CfgDaten["AggregatedValues"]["NoLoggedValues"] 	= -1; 	// ist der Zeitraum größer als X Tage werden keine Boolean Werte mehr geladen, diese werden zuvor immer als Einzelwerte geladen	$CfgDaten["AggregatedValues"]["MixedMode"] = false;     // alle Zeitraumbedingungen werden kombiniert
	$CfgDaten["AggregatedValues"]["MixedMode"] 			= false;

und

// Power Sonstige
	$serie 															= array(	"Id"=>12130,
																					//"Data" => $HC_Cent,

Id => ID der Stromzähler-Variable (als Zähler-Variable konfiguriert)

Hallo ,

Ich mußte mich für ein Kriterium entscheiden, was einen Vergleich und damit die Erkennung einer Fehlübertragung (oder meine Vermutung: Fehlerhafte Berechnung schon im Gerät) zuläßt. Bisher wurden die gelieferten Summenwerte als zeitweise fehlerhaft gemeldet. Man erkennt dann auch die fehlerhafte Werte der Pulses_Total bis intern nach ca. 1h eine neue Aggregation stattfindet und dann die Summen neu berechnet werden. Dann kommen auch wieder vernünftige Daten raus.
Für die pulses_total macht es kein Unterschied zur alten Version, auch dort wurden immer alle Werte registriert. Wenn ich den fehlerhaften Wert nicht speichern würde, hätte man nach kurzer Zeit gar keine gültigen Werte Werte mehr, weil dann sowohl die Fehler als auch die richtigen Werte aus dem Fenster laufen.
Rein theoretisch könnte man nun nur die 5min pulses aufaddieren, hätte dann aber ggfls eine Lücke bei einem fehlerhaften Satz und damit eine falsche Endsumme.

Wenn jemand eine bessere Idee hat, lasst es mich wissen.

Tommi

Hallo Raketenschnecke,

mir geht es nicht um Highcharts, die habe ich nur genommen, um mein Problem zu visualisieren.

Mich interessiert eine Tagessumme auf auf Kalendertag Basis.
Ich verstehe nicht, warum das unterschiedliche Werte sind.

Mic

das ist mir schon klar, nur wenn du nicht den kompletten Weg aufzeigst, wie die Werte von var a zu Var b kommen, wird es schwierig, den Fehler zu finden (wenn es denn einen gibt).
Deswegen versuche ich zu erklären, dass man Tageswerte auch aus der selben (Ursprungs-)Var holen kann und habe dies mit einem praktischen Beispiel illustriert.

Hi Raketenschnecke,
irgendwie reden wir aneinander vorbei.

Aber das habe ich doch (versucht). :o

Du arbeitest mit einem EKM und ich mit dem hier beschriebenen EM 1010 Modul.
Vielleicht liegt da der Hase ja begraben.

Wenn ich das in diesem Thread richtig verstanden habe ist in der Variablen Daily_Sum, die durch dieses Modul angelegt wird und wahrscheinlich so einfach vom EM1010 kommt, ein gleitender Durchschnitt.

Also habe ich nichts anderes gemacht, als eine eigene Variable anzulegen, die einmal am Tag, um 23:59 diesen gleitenden Durchschnitt übernimmt.

Damit sollte ich den Tageswert haben (so meine Vermutung).

Gleichzeitig summiere ich eine andere Variable auf, die auch von dem Modul automatisch angelegt wird.
Act_Power_5min Diese sollte alle Verbrauche der letzten 5min haben.

Nun die Fragen aller Fragen:
Müssten diese Werte um 23:59 nicht gleich sein?

Ja, aber ich habe ja doch noch ein Verständnisproblem, was genau in den, vom Modul angelegten, Variablenm drin ist und warum das so abweicht.

lt. Bedienungsanleitung des Em1010 gibt es keinen gleitenden Durchschnitt, schon gar nicht vom aktuellen Tag. Was dort aber regelmässig erwähnt wird, ist der „Durchschnitt letzter Tag“ oder „Summe letzter Tag“…

@Tommi

Kannst du mich bitte erhellen, was da für Werte drin stehen?

Ich will ja schon die richtige Aussagen treffen können aus dem Smartmetering nicht, dass ich am falschen Ende spare :stuck_out_tongue:

Ich kann zu den Daily*,hourly* Werten nur sagen, das es die originalen Werte sind, wie sie die das EM1010PC aggregiert und über USB ausgibt. Ich rechne an der Stelle nichts selber. Es sollte also theoretisch das Gleiche angezeigt werden wie auf dem Display. Es wrde schon öfters bemerkt. das dort die Tages-Aggregation nicht zwingend zu 0:00 erfolgt, in der Regel ist es irgendwann morgens. Auch die Stundenaggregation ist nicht um X:00 sondern eher zu X:45.

Tommi

Hallo,

Frage an die User die das Modul von Tommi benutzen.

Welche Variable lasst Ihr loggen um Euch den Stromverbrauch im WF als Grafik anzeigen zu lassen?

Ich habe die Energy_Total auf Zähler umgestellt und damit habe ich die korrekten Werte.

Danke MicF,

das habe ich auch und da habe ich heute mal wieder einen Ausresser 430kw :mad:

Im aktuellen verbrauch sehe ich den aber nicht.
ich hatte gehofft das die Ausreisser durch Tommis anpassung abgefangen werden.

@Tommi, kannst Du mir nochmal erklären welche Variable ich am besten Logge um diese Ausreisser nicht mehr zusehen?

Der Total Zählerwert wird als Indikator für einen Ausreisser genommen. Der geht also immer ungefiltert durch. Darauf kann man seine eigenen Berechnungen und Filter setzen.
Alle anderen Werte werden erst geschrieben, wenn die Differenz des Zählerwertes zum Vorwert <300 ist. Diese Bedingung ist aber auch erfüllt, wenn der Fehlerhafte Wert 2x hintereinander übertragen wird, wie ich es auch schon gesehen habe. Wenn ein Ausreisser erkannt wird, wird auch ein Logeintrag geschrieben.
Der verlässlichste Wert ist bisher immer der 5min Zähler gewesen. Wenn man den selber aufaddiert wird man aber nach einer gewissen Zeit feststellen, das die Summenwerte auseinander laufen, weil durch das obige Verfahren Datensätze verschluckt werden.
Für wirklich verlässliche Werte braucht man wohl ein besseres Verfahren (welches? Bin für Ideen offen) oder gleich einen anderen Empfänger

Tommi

Hallo Tommi,

danke für die Antwort, werde mal sehen wie ich das für mich am besten lösen kann.

Hallo MicF,

die Summe aller Act_Power_5min-Werte ist garantiert nie gleich dem Sum_daily_energy-Wert.

Dies liegt daran, dass der Act_Power_5min-Wert „gequantelt“ ist, d.h. ein Vielfaches von (bei mir z.B.) 160W5/60h ist.
Das EM1010 ermittelt alle 5 Minuten, wie oft sich der Stromzähler gedreht hat.
Pro Umdrehung sind es bei mir 160W
5/60h. Hat er sich also einmal gedreht, waren es 0,013kWh in den letzen 5 Minuten. Hat er sich 2x gedreht, dann waren es 2x0,013kWh. Tatsächlich könnten es aber auch fast 3 gewesen sein. Das weiss man in diesem Moment nicht !
Der Wert ist also quasi gerundet („gequantelt“) und relativ ungenau.
Addiert mal also 60 Minuten lang diesen gerundeten Wert auf, so addiert man auch 60/5 = 12 mal einen Fehler auf.

Quasi keinen Fehler (bis auf 0,013kWh bei mir) macht man allerdings, wenn man die Pulse eine Stunde lange zählt, und daraus die Stundenarbeit in kWh berechnet. Beim EM1010 ist dies dann der Sum_1Hour_Energy-Wert.

Ebenfalls quasi keinen Fehler (bis auf 0,013kWh) mach das Ding, wenn es den ganzen Tag die Pulse aufaddiert.

Hoffe, es kam anschaulich rüber.

klingt logisch.
Wie war das noch, wer viel misst, misst viel Mist.

Danke für die Erklärung.

Mic

Hallo,

kann ich die 2.6er EM1010.dll-Version (von tommys hoomepage) auch unter IP-Symcon 2.5 „installieren“ ?

Danke im Voraus.

Das wird nicht ohne weiteres funktionieren. Normalerweise werden beim Start die Versionen der Module geprüft. Ich müßte für 2.5 ein extra Binary machen. Evtl. recht auch schon das Ändern des Versionsstringes der DLL in einem Resourceneditor. Aber lohnt sich das noch? Ich dachte, die V2.6 steht kurz vor dem Release.

Tommi