Energieberichte

Hallo Mike und alle Anderen,

Wir sollten hier mal ein wenig Ordnung reinbringen. Ich hab ja nicht mitgezählt, aber ich glaube, inzwischen sind 6 verschiedene Versionen von pitti’s script hier erwähnt. Wenn da mal einer später darauf zurückgreifen will, weiß er nicht mehr, welche Version er nehmen soll.

Ich finde eigendlich, wir sollten die letzte Version von drapple als aktuelle behalten und den Rest mal reinigen (entfernen). Dazu müßten wir dann mal die Versions-Nummer aktualisieren und immer, wenn einer eine Optimierung einpflegt sich auch im HEader des Scriptes einschreiben. Nur der Übersicht wegen.

Wobei ich mit der Lösung der eindeutigen ID noch nicht so glücklich bin.Wie gesagt, wenn die betroffene Instanz mal neu angelegt werden muß muß man immer daran denken, auch alle zugehörigen Scripte zu ändern und das sind bei mir alleine für den Stromzähler schon sechs Stück. Wenn alle das mit dem „IPS_SetIdent“ verinnerlicht haben, vielleicht sollten wir das dann wieder integrieren.

Drapple, wie siehst Du das?

Achja, ich würde pitti’s Version als Original auch noch drin lassen. So kann man später immer mal sehen, was sich so im Laufe der Zeit mit den verschiedenen Ideen entwickeln läßt.

Hier nochmal ein gaaaaanz großes DANKE an pitti, der das hier erst mit seinem Ursprungsscript ermöglicht hat.

Viele Grüße,

Burkhard

Hallo Drapple,

das Euro Variable Profil wird nicht richtig erstellt. Bei beiden Profilen wird $vpname verwendet. Der Bereich müsste bestimmt so aussehen:

# *********************************  Variable Profil erstellen ***********************
    
     $vpname="KWh";
    // Variable Profil erstellen
    if (!IPS_VariableProfileExists($vpname)) // Wenn das Provil noch nicht Exestiert dann lege es an:
    {
    IPS_CreateVariableProfile($vpname, 2); // Variabelprofil erstellen
    #IPS_SetVariableProfileIcon($vpname,"Intensity"); // Variabelprofil Icon zuweisen
    IPS_SetVariableProfileText($vpname,""," KWh");
    IPS_SetVariableProfileValues($vpname, 0, 0,0 ); //Der Befehl setzt den MinimalWert, MaximalWert und die Schrittweite eines Variablenprofils mit Namen ProfilName.
    IPS_SetVariableProfileDigits($vpname, 3);
} // Variabelprofil anlegen

     $vpname2="Euro";
    // Variable Profil erstellen
    if (!IPS_VariableProfileExists($vpname2)) // Wenn das Provil noch nicht Exestiert dann lege es an:
    {
    IPS_CreateVariableProfile($vpname2, 2); // Variabelprofil erstellen
    #IPS_SetVariableProfileIcon($vpname,"Euro"); // Variabelprofil Icon zuweisen
    IPS_SetVariableProfileText($vpname2,""," €");
    IPS_SetVariableProfileValues($vpname2, 0, 0,0 ); //Der Befehl setzt den MinimalWert, MaximalWert und die Schrittweite eines Variablenprofils mit Namen ProfilName.
    IPS_SetVariableProfileDigits($vpname2, 2);
} // Variabelprofil anlegen

LG Tom

@ Burki24 ich melde mich die Tage bei dir…

@ 47timloe schau auf Seite 4 neues Update vom Script bitte testen und mir eine Rückmeldung geben…

Läuft.

LG Tom

Hallo zusammen,

ich habe noch einmal ein Update von dem Skript hoch geladen.

Folgende Änderungen habe ich noch mit eingebaut:

  1. Das Logging der Variblen Tag, Woche, Monat und Jahr kann nun im Konfigurationsbereich aktiviert oder deaktiviert
    werden
  2. Da mir persönlich das nicht gefällt, dass die Instanzen mit den Variablen unter einer Kategorie angeordnet werden,
    habe ich nun auch noch eine Auswahl im Konfigurationsteil mit eingebaut, wo man auswählen kann, ob alles unter
    einer Kategorie angeordnet wird oder unter einer weiteren Instanz. Ich bevorzuge letzteres, da ich dieses dann
    einfacher verlinken kann.
  3. Da das Skript beim ersten Ausführen unter Umständen länger als 30 Sekunden dauert, habe ich auch noch eine Unterdrückung der
    Fehlermeldung bzw. Warnmeldung mit eingbaut.
  4. Da ich nicht mag, wenn die geloggten Variablen im Webfront als Graph sichtbar sind, habe ich hier auch noch eine
    Auswahl mit eingebaut, wo man dieses im Konfigurationsbereich auswählen kann.

Bin kein PHP Profi, aber bei mir läuft das so ganz gut und ohne Probleme. Daher bitte Nachsicht, wenn es nicht der beste Code ist. Habe das auch alles nur hier durch das super Forum gelernt. Auch hier nochmals meinen besten Dank an das tolle Forum.

Soll lediglich als Anregung bzw. vielleicht für den ein oder anderen als Verbesserung dienen. Hoffe die eingebauten Features kann der ein oder andere gebrauchen.

Gruß
Mike

<? 
#include('globalfunction.ips.php');
#########################################################################################################################################################################
# Scriptbezeichnung: HM.Consumption.ips.php
# Version: 1.2
# Author: Heiko Wilknitz
# Anpassung by Zerfasm & Drapple  
#
# Auswertung und Hochrechnung des Stromverbrauches
# Nochamls vielen Dank an Pitti der den Ursprung für dieses Skript gelegt hat!

// ----------------------------- KONFIGURATION --------------------------------------------------------------------------------------------------------------------------

// Anzahl Nachkommastellen bei Ergebnissen
$roundTo2   = 2; //Anzahl Nachkommastellen bei Ergebnissen
$roundTo3   = 3; //Anzahl Nachkommastellen bei Ergebnissen
$kosten    	= GetValue(41930 /*[Energie\Strom\Strompreis]*/); //Floatvariable mit dem Preis pro kWh 

//Logging einstellen
$logDay		= false; //Logging für Tag einstellen
$logWeek	= false; //Logging für Woche einstellen
$logMonth	= false; //Logging für Monat einstellen
$logYear	= false; //Logging für Jahr einstellen
$logVisual	= false; //Anzeige der Variable in der Visualisierung im Webfront deaktiveren oder aktivieren

//Auswahl ob Instanzen mit den Variablen unter einer Kategorie oder einer weiteren Instanz angeordnet werden sollen
$category = false;

//Wenn das Skript die max. Zeit von 30 Sekunden beim ersten ausführen überschreitet, kann mit der nächsten Zeile die Fehlermeldung verhindert werden
set_time_limit (60); //Hier kann die Zeit in Sekunden angegeben werden

// ----------------------------------- ID´s -----------------------------------------------------------------------------------------------------------------------------
$parentID 	= IPS_GetObject($_IPS['SELF']); 
$parentID 	= $parentID['ParentID'];

//ID des ArchiveHandler ermitteln 
$instances 	= IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}'); 
$archiveID 	= $instances[0]; 

// Verbrauchszähler
$valueID 	= IPS_GetObjectIDByIdent("ENERGY_COUNTER_TOTAL", $parentID); //Wenn ObjektID verwendet werden soll
//$valueID 	= 16068 /*[Energie\Strom\Spülmaschine\Powermeter\Spülmaschine\Verbrauch Total]*/; //Wenn VariablenID verwendet werden soll


// -------------------------- VARIABLENPROFIL ERSTELLEN -----------------------------------------------------------------------------------------------------------------
// Profilname kWh    
$vpname="kWh";
if (!IPS_VariableProfileExists($vpname)) //Wenn das Provil noch nicht Exestiert dann lege es an:
{
    IPS_CreateVariableProfile($vpname, 2); //Variabelprofil erstellen
    IPS_SetVariableProfileIcon($vpname,"Lightning"); //Variabelprofil Icon zuweisen
    IPS_SetVariableProfileText($vpname,""," kWh"); //Suffix setzen
    IPS_SetVariableProfileValues($vpname, 0, 0,0 ); //Der Befehl setzt den MinimalWert, MaximalWert und die Schrittweite eines Variablenprofils mit Namen ProfilName.
    IPS_SetVariableProfileDigits($vpname, $roundTo2); //Anzahl Nachkommastellen, in diesem Fall 2
}

// Profilname"Euro"
$vpname2="Euro";
if (!IPS_VariableProfileExists($vpname2)) //Wenn das Provil noch nicht Exestiert dann lege es an:
{
	IPS_CreateVariableProfile($vpname2, 2); //Variabelprofil erstellen
	IPS_SetVariableProfileIcon($vpname2,"Euro"); //Variabelprofil Icon zuweisen
	IPS_SetVariableProfileText($vpname2,""," €"); //Suffix setzen
	IPS_SetVariableProfileValues($vpname2, 0, 0,0 ); //Der Befehl setzt den MinimalWert, MaximalWert und die Schrittweite eines Variablenprofils mit Namen ProfilName.
	IPS_SetVariableProfileDigits($vpname2, $roundTo2); //Anzahl Nachkommastellen, in diesem Fall 2
} 

// -------------------------- AUSWAHL OB KATEGORIEN ODER INSTANZEN ERSTELLEN --------------------------------------------------------------------------------------------

If ($category == true)
{
	$enerID = GetorCreatecategory("Energieverbrauchsberichte",$parentID);
	$enerCostID = GetorCreatecategory("Energiekostenberichte",$parentID);
}
else
{
	$enerID = GetorCreateInstanz("Energieverbrauchsberichte","dummy",$parentID);
	$enerCostID = GetorCreateInstanz("Energiekostenberichte","dummy",$parentID);
}

// -------------------------- INSTANZEN ERSTELLEN -----------------------------------------------------------------------------------------------------------------------
// Verbrauchsinstanzen anlegen
$lastID = GetOrCreateInstanz("Verbrauch Zuletzt","dummy",$enerID);
$currID = GetOrCreateInstanz("Verbrauch Aktuell","dummy",$enerID); 
$consID = GetOrCreateInstanz("Hochrechnung Verbrauch","dummy",$enerID); 

// Kosteninstanzen anlegen
$lastCostID = GetOrCreateInstanz("Kosten Zuletzt","dummy",$enerCostID);
$currCostID = GetOrCreateInstanz("Kosten Aktuell","dummy",$enerCostID); 
$consCostID = GetOrCreateInstanz("Hochrechnung Kosten","dummy",$enerCostID); 


// -------------------------- VARIABLEN ERSTELLEN -----------------------------------------------------------------------------------------------------------------------

// Verbrauchsvariablen anlegen bzw. auslesen
$lastDayID 	= GetOrCreateVariable('Letzter Tag',2,"POWER_CONSUMPTION_LAST_DAY",$vpname,"",$logDay,$lastID,"1",$logVisual); 
$lastWeekID = GetOrCreateVariable('Letzte Woche',2,"POWER_CONSUMPTION_LAST_WEEK",$vpname,"",$logWeek,$lastID,"2",$logVisual); 
$lastMonthID = GetOrCreateVariable('Letzter Monat',2,"POWER_CONSUMPTION_LAST_MONTH",$vpname,"",$logMonth,$lastID,"3",$logVisual); 
$lastYearID = GetOrCreateVariable('Letztes Jahr',2,"POWER_CONSUMPTION_LAST_YEAR",$vpname,"",$logYear,$lastID,"4",$logVisual); 

$currDayID 	= GetOrCreateVariable('Aktueller Tag',2,"POWER_CONSUMPTION_ACTUAL_DAY",$vpname,"",$logDay,$currID,"1",$logVisual);
$currWeekID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_CONSUMPTION_ACTUAL_WEEK",$vpname,"",$logWeek,$currID,"2",$logVisual);
$currMonthID = GetOrCreateVariable('Aktueller Monat',2,"POWER_CONSUMPTION_ACTUAL_MONTH",$vpname,"",$logMonth,$currID,"3",$logVisual);
$currYearID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_CONSUMPTION_ACTUAL_YEAR",$vpname,"",$logYear,$currID,"4",$logVisual);

$consDayID 	= GetOrCreateVariable('Tag',2,"POWER_CONSUMPTION_EXTRAPOLATION_DAY",$vpname,"",$logDay,$consID,"1",$logVisual);
$consWeekID = GetOrCreateVariable('Woche',2,"POWER_CONSUMPTION_EXTRAPOLATION_WEEK",$vpname,"",$logWeek,$consID,"2",$logVisual);
$consMonthID = GetOrCreateVariable('Monat',2,"POWER_CONSUMPTION_EXTRAPOLATION_MONTH",$vpname,"",$logMonth,$consID,"3",$logVisual);
$consYearID = GetOrCreateVariable('Jahr',2,"POWER_CONSUMPTION_EXTRAPOLATION_YEAR",$vpname,"",$logYear,$consID,"4",$logVisual);

// Kostenvariablen anlegen bzw. auslesen
$lastDayCostID 	= GetOrCreateVariable('Letzter Tag',2,"POWER_COST_LAST_DAY", $vpname2,"",$logDay,$lastCostID,"1",$logVisual);
$lastWeekCostID = GetOrCreateVariable('Letzte Woche',2,"POWER_COST_LAST_WEEK", $vpname2,"",$logWeek,$lastCostID,"2",$logVisual);
$lastMonthCostID = GetOrCreateVariable('Letzter Monat',2,"POWER_COST_LAST_MONTH", $vpname2,"",$logMonth,$lastCostID,"3",$logVisual);
$lastYearCostID = GetOrCreateVariable('Letztes Jahr',2,"POWER_COST_LAST_YEAR", $vpname2,"",$logYear,$lastCostID,"4",$logVisual);

$currDayCostID 	= GetOrCreateVariable('Aktueller Tag',2,"POWER_COST_ACTUAL_DAY", $vpname2,"",$logDay, $currCostID,"1",$logVisual);
$currWeekCostID = GetOrCreateVariable('Aktuelle Woche',2,"POWER_COST_ACTUAL_WEEK", $vpname2,"",$logWeek, $currCostID,"2",$logVisual);
$currMonthCostID = GetOrCreateVariable('Aktueller Monat',2,"POWER_COST_ACTUAL_MONTH", $vpname2,"",$logMonth, $currCostID,"3",$logVisual);
$currYearCostID = GetOrCreateVariable('Aktuelles Jahr',2,"POWER_COST_ACTUAL_YEAR",$vpname2,"",$logYear,$currCostID,"4",$logVisual);

$consDayCostID 	= GetOrCreateVariable('Tag',2,"POWER_COST_EXTRAPOLATION_DAY",$vpname2,"",$logDay,$consCostID,"1",$logVisual);
$consWeekCostID = GetOrCreateVariable('Woche',2,"POWER_COST_EXTRAPOLATION_WEEK",$vpname2,"",$logWeek,$consCostID,"2",$logVisual);
$consMonthCostID = GetOrCreateVariable('Monat',2,"POWER_COST_EXTRAPOLATION_MONTH",$vpname2,"",$logMonth,$consCostID,"3",$logVisual);
$consYearCostID = GetOrCreateVariable('Jahr',2,"POWER_COST_EXTRAPOLATION_YEAR",$vpname2,"",$logYear,$consCostID,"4",$logVisual);


// -------------------------- LETZTE WERTE ------------------------------------------------------------------------------------------------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $valueID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($lastDayID, CalcConsumption($data));
SetValue($lastDayCostID,GetValue($lastDayID)*$kosten);

// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $valueID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0); 
SetValueFloat($lastWeekID, CalcConsumption($data));
SetValue($lastWeekCostID,GetValue($lastWeekID)*$kosten);

// LETZTER MONAT
$data = AC_GetAggregatedValues($archiveID, $valueID, 3 /* Monatlich */, strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0); 
SetValueFloat($lastMonthID, CalcConsumption($data));
SetValue($lastMonthCostID,GetValue($lastMonthID)*$kosten);

// LETZTES JAHR
$ly = date('Y', strtotime('-1 year'));
$data = AC_GetAggregatedValues($archiveID, $valueID, 4 /* Jährlich */, mktime(0, 0, 0, 1, 1, $ly), mktime(23, 59, 59, 12, 31, $ly), 0); 
SetValueFloat($lastYearID, CalcConsumption($data));
SetValue($lastYearCostID,GetValue($lastYearID)*$kosten);


// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $valueID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumption($data);
SetValueFloat($currDayID, $dataDay);
SetValue($currDayCostID,GetValue($currDayID)*$kosten);

// WOCHE
$data = AC_GetAggregatedValues($archiveID, $valueID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0); 
$dataWeek = CalcConsumption($data);
SetValueFloat($currWeekID, $dataWeek);
SetValue($currWeekCostID,GetValue($currWeekID)*$kosten);

// MONAT
$data = AC_GetAggregatedValues($archiveID, $valueID, 3 /* Monatlich */, strtotime("first day of this month 00:00"), strtotime("now"), 0);
$dataMonth = CalcConsumption($data);
SetValueFloat($currMonthID, $dataMonth);
SetValue($currMonthCostID,GetValue($currMonthID)*$kosten);

// JAHR
$data = AC_GetAggregatedValues($archiveID, $valueID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0); 
$dataYear = CalcConsumption($data);
SetValueFloat($currYearID, $dataYear);
SetValue($currYearCostID,GetValue($currYearID)*$kosten);


// ------------------------- HOCHRECHNUNG -------------------------------------------------------------------------------------------------------------------------------
// TAG
$diff = strtotime('now') - strtotime('today');
$full = 60*60*24; // 24h
$data = round($dataDay*$full/$diff, $roundTo2);
SetValueFloat($consDayID, $data);
SetValue($consDayCostID,GetValue($consDayID)*$kosten);

// WOCHE
$diff = strtotime('now') - strtotime('last monday', strtotime('tomorrow'));
$full = 60*60*24*7; // 7 Tage
$data = round($dataWeek*$full/$diff, $roundTo2);
SetValueFloat($consWeekID, $data);
SetValue($consWeekCostID,GetValue($consWeekID)*$kosten);

// MONAT
$diff = strtotime('now') - strtotime('first day of this month 00:00');
$full = 60*60*24*date('t'); // 1 Monat
$data = round($dataMonth*$full/$diff, $roundTo2);
SetValueFloat($consMonthID, $data);
SetValue($consMonthCostID,GetValue($consMonthID)*$kosten);

// JAHR
$diff = strtotime('now') - strtotime('first day of January');
$full = 60*60*24*365; // 1 Jahr
$data = round($dataYear*$full/$diff, $roundTo2);
SetValueFloat($consYearID, $data);
SetValue($consYearCostID,GetValue($consYearID)*$kosten);


// ------------------------- TIMER ERSTELLEN ----------------------------------------------------------------------------------------------------------------------------
SetTimerByName($_IPS['SELF'], "Täglich alle Stunde");


// ------------------------- FUNKTIONEN ---------------------------------------------------------------------------------------------------------------------------------
// Funktion zum addieren der Zählerwerte 
function CalcConsumption($values) 
{
	global $roundTo2;
	$consumption = 0;
	foreach($values as $value) 
	{
			$consumption += $value['Avg'];
	}
	return round($consumption, $roundTo2);
} 
	
// Funktion um einen Timer zu erzeugen
function SetTimerByName($parentID, $name) 
{
	Global ${$_IPS['SELF']};
	$eid = @IPS_GetEventIDByName($name, $parentID);
	if($eid === false) 
{
	$eid = IPS_CreateEvent(1);
	IPS_SetParent($eid, $parentID);
	IPS_SetName($eid, $name);
	
	IPS_SetEventCyclic($eid, 2 /* Täglich */, 1 /* Jeden Tag */, 0, 0, 3 /* Stündlich */, 1 /* Alle Stunden */);
	IPS_SetEventCyclicTimeFrom($eid, 0, 1, 0); //Ab 00:01 stündlich starten
	IPS_SetEventActive($eid, true);
}
	return $eid;
} 


// ------------------------- IPS GRUNFUNKTIONEN -------------------------------------------------------------------------------------------------------------------------
// Erstellt eine Variable, wenn diese noch nicht existiert
function GetOrCreateVariable($name, $vtyp, $ident, $profil, $ascript, $log, $parentID, $position, $logVisual) // erstellt eine Variable, wenn es noch nicht exestiert
/* 
Wert 1 = Name
Wert 2 = Variablentyp
Wert 3 = Variablen-Ident 
Wert 4 = Variablenprofil 
Wert 5 = ScriptID 
Wert 6 = Logging der Daten (True/False)
Wert 7 = Übergeordnete Instanz, wo die Variable angelegt werden soll 
Wert 8 = Reihenfolge / Sortierung der Variablen
Wert 9 = Anzeige der Variable in der Visualisierung im Webfront deaktiveren oder aktivieren
*/
{
    $ObjId = @IPS_GetObjectIDByName($name, $parentID);
    if ($ObjId === false)
    {
    	$ObjId = IPS_CreateVariable($vtyp);
        IPS_SetName($ObjId, $name); //Namen vergeben
        IPS_SetIdent($ObjId, $ident); //ObjectIdent vergeben
        IPS_SetParent($ObjId, $parentID); //Variable unter die Instantz verschieben
        @IPS_SetVariableCustomProfile($ObjId, $profil); //Variablen-Profil zuordnen
        @IPS_SetVariableCustomAction($ObjId, $ascript); //Verknüpft das Script mit der Variable als Actionscript

		// Archive Control ID herrausfinden
		foreach(IPS_GetInstanceList ( ) as $m_id) //Durchsucht alle Instanzen und gibt die InstanzID an $i_id weiter
		{
			$typ = IPS_GetInstance($m_id)['ModuleInfo']['ModuleName']; //Fragt die Instanzen nach den Modulnamen ab
			if ($typ =="Archive Control") $modul_id = $m_id; //Wenn die Instanz den Modulnamen "Archive Control" hat, dann schreibe die ID in $modul_id
		}
		
		$logging = AC_GetLoggingStatus($modul_id,$ObjId);
		if ($logging != 1)
		{
			AC_SetLoggingStatus($modul_id, $ObjId, $log);
			AC_SetGraphStatus($modul_id, $ObjId, $logVisual);
			IPS_ApplyChanges($modul_id);
		}// Ende Logging
		
		IPS_SetPosition($ObjId, $position);
    }
    return $ObjId;
}

// Erstellt eine Instanz, wenn diese noch nicht existiert
function GetOrCreateInstanz($name, $ityp, $parentID) //erstellt eine Variable, wenn diese noch nicht exestiert
/*
Wert 1 = Name
Wert 2 = Instanztyp 
Wert 3 = Übergeordnete Instanz, wo die Instanz angelegt werden soll
*/
{
    $ObjId = @IPS_GetObjectIDByName($name, $parentID);
    if ($ObjId === false)
    {
    	if ($ityp == "dummy") $ityp='{485D0419-BE97-4548-AA9C-C083EB82E61E}';
        $ObjId = IPS_CreateInstance($ityp);
        IPS_SetName($ObjId, $name); // Namen vergeben
        IPS_SetParent($ObjId, $parentID); // Variable unter die Instantz verschieben
    }
    return $ObjId;
}

// Erstellt ein Script, wenn es noch nicht exestiert
function GetOrCreateScript($name, $parentID, $data, $hidden) 
/*
Wert 1 = Name
Wert 2 = Übergeordnete Instanz, wo das Script angelegt werden soll
Wert 3 = Ist das, was ins Script geschrieben wird
Wert 4 = Ob das Script sichtbar sein soll (true, false)
*/
{
    $ObjId = @IPS_GetObjectIDByName($name, $parentID);
    if ($ObjId === false)
    {
         $ObjId = IPS_CreateScript(0);
        IPS_SetName($ObjId, $name);
        IPS_SetScriptContent($ObjId, "$data"); // Der Text was ins Script geschrieben wird
        IPS_SetHidden($ObjId, $hidden); // Setzt Script auf nicht sichtbar
        IPS_SetParent($ObjId, $parentID); //  Script unter das Parent verschieben
     }
    return $ObjId;
}

// Erstellt eine Kategorie, wenn diese noch nicht exestiert
function GetorCreatecategory($name, $parentID)
#function GetorCreatcategory($name,$parent, $position, $hidden)
{
$LinkID = @IPS_GetObjectIDByName($name, $parentID);
if ($LinkID === false)
{
	$LinkID = IPS_CreateCategory(); // Link anlegen
	IPS_SetName($LinkID, $name); // Link benennen
	IPS_SetParent($LinkID, $parentID); // Link einsortieren unter dem Objekt mit der ID "12345 /*[Webfront\Tablet\EG\Energieberichte\Übersicht\Kosten\Hochrechnung\Hochrechnung Kosten pro Jahr\Waschmaschine]*/"
	#if ($hidden ===true) IPS_SetHidden($LinkID,true);
	#IPS_SetPosition($LinkID,$position); //Position festlegen
}
	return $LinkID;
}
?>

Hallo Drapple,

kannst Dich gerne jederzeit melden. Erstmal vielen Dank:


// Verbrauchszähler
#$valueID     = IPS_GetObjectIDByIdent("ENERGY_COUNTER_TOTAL", $parentID); //Wenn ObjektID verwendet werden soll
$valueID     = 48995 /*[Stromzaehler\modbus\Zaehlerstand\Zaehlerstand]*/; //Wenn VariablenID verwendet werden soll

Für mich sehr schöne, perfekte Lösung. ;):smiley:

Viele Grüße,

Burkhard

Kleine Frage/Anregung. Wäre es eventuell auch möglich den Durchschnittsverbrauch mit einzubauen? Durchschnitt der letzten X Tage, X Monate, X Jahre - wobei es gut wäre wenn sich X dann jeder selbst anpassen könnte. Das am besten gleich für Verbrauch und Kosten. Würde mich freuen!

Tom

Hallo timloe,

leider bin ich beruflich z.Z. sehr viel unterwegs und habe somit leider nicht die Zeit.
Vielleicht kannst du das ja mit Hilfe des Forums hier selbst mit einbauen. Gibt dazu ja einige Beispiele im Forum hier.

Gruß
Mike

meine Werte sind alle um den Faktor 1000 zu gross, das liegt wohl an den Impulsen: 1000 / kwh (nutze einen EKM868)
wo kann man am geschicktesten einmalig im Skript runterrechnen.

Hast du in der Variablen „Current“ beim EKM nicht die aktuelle Wattzahl ? Oder ist die schon falsch ?
Einfachste Aenderung waere in der Funktion

function CalcConsumption($values,$zeitraum = "?")  

am Ende den Wert „$consumption“ durch 1000 teilen.

hab ich auch schon probiert, da kommen gan komische werte raus. aber ich werd noch mal etwas tüfteln

Danke Dir für die Antwort. Eventuell hätte ja jemand etwas passendes als Ansatz?

Tom

Hallo zusammen,

ich bin aktuell dabei s0 zähler bei mir zu installieren. Der Stromvebrauch funktioniert auch soweit, er wird mir in einer variable in Kwh ausgegeben. Ich habe nun das aktuelle script aus einem der letzten beiträge hergenommen.

Leider habe ich völlig unrealistische Zahlen ( Siehe screenshot), der Tagesverbauch stimmt meist noch, ab dem Wochenverbrauch wird es dann murks.I Script selbst habe ich nur die variable des Zählers und der Kosten geändert, sowie das logging aktiviert.

Fehlt mir noch etwas oder habe ich was falsch gemacht ?

gruß Julien

Ich habe das selbe Problem…:confused:
Hat jemand eine Lösung gefunden?
Gruss saschild

Hy alle zusammen,

kann mir einer erklären was ich genau in dem Script unter Konfigzration einsetzen bzw. ändern muss.
Habe einen Homematic Stromzähler, und einige Homematic Steckdosen mit Verbrauchsmessung.
Bin erst seit 4 Tagen dabei und lese mich gerade in php ein.

Nur weiß ich nicht wie und was ich überall eintragen muss.

Grüße

Jörg

Nur mal als Anregung die Darstellung in meinem System:
Datenerfassung durch HM-ES-PMSw1-Pl {POWERMETER}
Abspeicherung der Daten in serialized arrays.
Berechnung hat noch Fehler, wie z.B. die Sprünge am Mo 08. bei der Waschmaschine zeigen.

Was kommen denn bei mir für werte an?

Bei mir wird mit Firefox nach „Angehängte Grafiken“ ein Screenshot dargestellt (ist eine PNG-Grafik, 19,42 KB (19.884 Byte), 200px × 112px)
Hatte die Msg auf meinem Desktop erstellt und bin jetzt auf dem Laptop und sehe den Screenshot.

Hat noch jemand Probleme mit der Darstellung?

Viele Grüsse
Harald

Hallo und Guten Morgen,

ich habe da eine Frage an euch:
Was muss geändert werden, wenn man wie Ihr keine HM Komponenten hat sondern einen KNX Aktor mit Stromzählerfunktion?

Oder muss ich dem Skript nur die ID des jeweiligen Kanals und die des zugehörigen Archivhandlers mitteilen?

Danke und lg
Christian

Leider habe ich völlig unrealistische Zahlen ( Siehe screenshot),

Axel37 hab ich auch schon probiert, da kommen gan komische werte raus. aber ich werd noch mal etwas tüfteln

ich stosse täglich (00:10 uhr) eine Reaggregation an,
habe mal bei einem neu installierten Zähler nachgestellt und es funzt nach ein paar Tagen stimmen die Werte.
achja und die Vari muss auf Zähler stehen