Energieberichte

Hallo Pitti,

erst einmal vielen Dank für das tolle Skript.

War mal so frei und habe noch eine Kostenberechnung mit eingefügt und das ganze dann ein wenig aufgeräumt und in zwei Instanzen gepackt. Den Timer lasse ich auch gleich per Skript erstellen.

Gruß
Mike

Wenn es jemand gebrauchen kann. Anbei das angepasste Skript:

<? 
#########################################################################################################################################################################
# Scriptbezeichnung: HM.Consumption.ips.php
# Version:    1.0
# Author:    Heiko Wilknitz
# Anpasser:	 Mike Zerfas 
#            Skript wurde durch Kostenrechnung erweitert und es wurden noch zusätzlich 2 Instanzen zur besseren Übersicht
#            hinzugefügt. Des Weiteren wurde noch die Funktion für den Timer hinzugefügt
#
#
#
#            Auswertung und Hochrechnung des Stromverbrauches
#
# ----------------------------- KONFIGURATION ---------------------------------------------------------------------------------------------------------------------------
#
# Anzahl Nachkommastellen bei Ergebnissen
$roundTo			= 2; //Anzahl Nachkommastellen bei Ergebnissen
$kosten	 			= GetValue(41930 /*[Energie\Strom\Strompreis]*/); // Floatvariable mit dem Preis pro kWh 
#
# ----------------------------------- 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); // oder alternativ einfach die ID angeben

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

//Kosteninstanzen anlegen
$enerCostID 		= GetOrCreateDummyByName($parentID, "Energiekostenberichte"); 
$lastCostID 		= GetOrCreateDummyByName($enerCostID, "Kosten Zuletzt");
$currCostID 		= GetOrCreateDummyByName($enerCostID, "Kosten Aktuell"); 
$consCostID 		= GetOrCreateDummyByName($enerCostID, "Hochrechnung Kosten");  

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

// Verbrauchsvariablen anlegen bzw. auslesen
$lastYearID     	= CreateVariableByName($lastID, 'Letztes Jahr'); 
$lastMonthID    	= CreateVariableByName($lastID, 'Letzter Monat'); 
$lastWeekID     	= CreateVariableByName($lastID, 'Letzte Woche'); 
$lastDayID      	= CreateVariableByName($lastID, 'Letzter Tag'); 

$currYearID     	= CreateVariableByName($currID, 'Aktuelles Jahr'); 
$currMonthID    	= CreateVariableByName($currID, 'Aktueller Monat'); 
$currWeekID    	 	= CreateVariableByName($currID, 'Aktuelle Woche'); 
$currDayID      	= CreateVariableByName($currID, 'Aktueller Tag'); 

$consYearID     	= CreateVariableByName($consID, 'Jahr'); 
$consMonthID    	= CreateVariableByName($consID, 'Monat'); 
$consWeekID     	= CreateVariableByName($consID, 'Woche'); 
$consDayID      	= CreateVariableByName($consID, 'Tag'); 

// Kostenvariablen anlegen bzw. auslesen
$lastYearCostID     = CreateVariableByNameCost($lastCostID, 'Letztes Jahr'); 
$lastMonthCostID    = CreateVariableByNameCost($lastCostID, 'Letzter Monat'); 
$lastWeekCostID     = CreateVariableByNameCost($lastCostID, 'Letzte Woche'); 
$lastDayCostID      = CreateVariableByNameCost($lastCostID, 'Letzter Tag'); 

$currYearCostID     = CreateVariableByNameCost($currCostID, 'Aktuelles Jahr'); 
$currMonthCostID    = CreateVariableByNameCost($currCostID, 'Aktueller Monat'); 
$currWeekCostID     = CreateVariableByNameCost($currCostID, 'Aktuelle Woche'); 
$currDayCostID      = CreateVariableByNameCost($currCostID, 'Aktueller Tag'); 

$consYearCostID     = CreateVariableByNameCost($consCostID, 'Jahr'); 
$consMonthCostID    = CreateVariableByNameCost($consCostID, 'Monat'); 
$consWeekCostID     = CreateVariableByNameCost($consCostID, 'Woche'); 
$consDayCostID      = CreateVariableByNameCost($consCostID, 'Tag'); 


// -------------------------- 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, 2);
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, 2);
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, 2);
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, 2);
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 $roundTo;
    $consumption = 0;
    foreach($values as $value) {
        //echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Avg'] . PHP_EOL; 
        $consumption += $value['Avg'];
    }
    return round($consumption, $roundTo);
}     

// Funktion um Verbauchsvariablen erstellen falls nicht vorhanden und ID entsprechend zuordnen 
function CreateVariableByName($id, $name) 
{ 
    $vid = @IPS_GetVariableIDByName($name, $id); 
    if($vid === false) { 
        $vid = IPS_CreateVariable(2); 
        IPS_SetParent($vid, $id); 
        IPS_SetName($vid, $name);
		IPS_SetVariableCustomProfile($vid, "~Power");
		IPS_SetIcon($vid, "Lightning"); 
    } 
    return $vid; 
}

// Funktion um Kostenvariablen erstellen falls nicht vorhanden und ID entsprechend zuordnen 
function CreateVariableByNameCost($id, $name) 
{ 
    $vid = @IPS_GetVariableIDByName($name, $id); 
    if($vid === false) { 
        $vid = IPS_CreateVariable(2); 
        IPS_SetParent($vid, $id); 
        IPS_SetName($vid, $name);
		IPS_SetVariableCustomProfile($vid, "Euro");
		IPS_SetIcon($vid, "Euro"); 
    } 
    return $vid; 
}
 
// Eine Funktion um ein Script im Script-Verzeichnis zu erzeugen 
// erstellt von hirschbrat, angepasst wgreipl 
function CreateScriptByName($scriptName, $parentId) 
{ 
    $scriptID = @IPS_GetScriptIDByName($scriptName, $parentId); 
    if ($scriptID == 0){ 
        $scriptID = IPS_CreateScript(0); 
        IPS_SetName($scriptID, $scriptName); 
        IPS_SetParent($scriptID, $parentId); 
    } 
    return $scriptID; 
} 

// Funktion um eine Dummy Instanz zu erzeugen
function GetOrCreateDummyByName($parentId, $Name)
{
    $objID = @IPS_GetObjectIDByName($Name, $parentId);
    if ($objID == 0)
    {
        $objID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
        IPS_SetParent($objID, $parentId);
        IPS_SetName($objID, $Name);
    }
    return $objID;
}

// 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_SetEventActive($eid, true);
    }
	return $eid;
} 
?>

Hallo zerfasm,

vielen Dank für die Erweiterung mit der Kostenberechnung. :slight_smile:
Du hast beim kopieren allerdings ein paar ungewollte Leerzeichen heringezaubert ab Zeile 81 treten bei „SetValue“ überall Leerzeichen bei der Variable $Kosten auf
Kleiner Tipp:

Setze das Script doch das nächste mal in einen php-Container ($Kosten - Fehler korrigiert):

<? 
################################################## ################################################## ################################################## ###################
# Scriptbezeichnung: HM.Consumption.ips.php
# Version: 1.0
# Author: Heiko Wilknitz
#
# Auswertung und Hochrechnung des Stromverbrauches
#
# ----------------------------- KONFIGURATION ---------------------------------------------------------------------------------------------------------------------------
#
# Anzahl Nachkommastellen bei Ergebnissen
$roundTo	= 2; //Anzahl Nachkommastellen bei Ergebnissen
$kosten	= GetValue(55395 /*[Energie\Strom\Strompreis]*/); // Floatvariable mit dem Preis pro kWh 
#
# ----------------------------------- 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); // oder alternativ einfach die ID angeben

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

//Kosteninstanzen anlegen
$enerCostID = GetOrCreateDummyByName($parentID, "Energiekostenberichte"); 
$lastCostID = GetOrCreateDummyByName($enerCostID, "Kosten Zuletzt");
$currCostID = GetOrCreateDummyByName($enerCostID, "Kosten Aktuell"); 
$consCostID = GetOrCreateDummyByName($enerCostID, "Hochrechnung Kosten"); 

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

// Verbrauchsvariablen anlegen bzw. auslesen
$lastYearID = CreateVariableByName($lastID, 'Letztes Jahr'); 
$lastMonthID = CreateVariableByName($lastID, 'Letzter Monat'); 
$lastWeekID = CreateVariableByName($lastID, 'Letzte Woche'); 
$lastDayID = CreateVariableByName($lastID, 'Letzter Tag'); 

$currYearID = CreateVariableByName($currID, 'Aktuelles Jahr'); 
$currMonthID = CreateVariableByName($currID, 'Aktueller Monat'); 
$currWeekID = CreateVariableByName($currID, 'Aktuelle Woche'); 
$currDayID = CreateVariableByName($currID, 'Aktueller Tag'); 

$consYearID = CreateVariableByName($consID, 'Hochrechnung Jahr'); 
$consMonthID = CreateVariableByName($consID, 'Hochrechnung Monat'); 
$consWeekID = CreateVariableByName($consID, 'Hochrechnung Woche'); 
$consDayID = CreateVariableByName($consID, 'Hochrechnung Tag'); 

// Kostenvariablen anlegen bzw. auslesen
$lastYearCostID = CreateVariableByNameCost($lastCostID, 'Letztes Jahr'); 
$lastMonthCostID = CreateVariableByNameCost($lastCostID, 'Letzter Monat'); 
$lastWeekCostID = CreateVariableByNameCost($lastCostID, 'Letzte Woche'); 
$lastDayCostID = CreateVariableByNameCost($lastCostID, 'Letzter Tag'); 

$currYearCostID = CreateVariableByNameCost($currCostID, 'Aktuelles Jahr'); 
$currMonthCostID = CreateVariableByNameCost($currCostID, 'Aktueller Monat'); 
$currWeekCostID = CreateVariableByNameCost($currCostID, 'Aktuelle Woche'); 
$currDayCostID = CreateVariableByNameCost($currCostID, 'Aktueller Tag'); 

$consYearCostID = CreateVariableByNameCost($consCostID, 'Hochrechnung Jahr'); 
$consMonthCostID = CreateVariableByNameCost($consCostID, 'Hochrechnung Monat'); 
$consWeekCostID = CreateVariableByNameCost($consCostID, 'Hochrechnung Woche'); 
$consDayCostID = CreateVariableByNameCost($consCostID, 'Hochrechnung Tag'); 


// -------------------------- 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, 2);
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, 2);
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, 2);
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, 2);
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 $roundTo;
$consumption = 0;
foreach($values as $value) {
//echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Avg'] . PHP_EOL; 
$consumption += $value['Avg'];
}
return round($consumption, $roundTo);
} 

// Funktion um Verbauchsvariablen erstellen falls nicht vorhanden und ID entsprechend zuordnen 
function CreateVariableByName($id, $name) 
{ 
$vid = @IPS_GetVariableIDByName($name, $id); 
if($vid === false) { 
$vid = IPS_CreateVariable(2); 
IPS_SetParent($vid, $id); 
IPS_SetName($vid, $name);
IPS_SetVariableCustomProfile($vid, "~Power");
IPS_SetIcon($vid, "Lightning"); 
} 
return $vid; 
}

// Funktion um Kostenvariablen erstellen falls nicht vorhanden und ID entsprechend zuordnen 
function CreateVariableByNameCost($id, $name) 
{ 
$vid = @IPS_GetVariableIDByName($name, $id); 
if($vid === false) { 
$vid = IPS_CreateVariable(2); 
IPS_SetParent($vid, $id); 
IPS_SetName($vid, $name);
IPS_SetVariableCustomProfile($vid, "Euro");
IPS_SetIcon($vid, "Euro"); 
} 
return $vid; 
}

// Eine Funktion um ein Script im Script-Verzeichnis zu erzeugen 
// erstellt von hirschbrat, angepasst wgreipl 
function CreateScriptByName($scriptName, $parentId) 
{ 
$scriptID = @IPS_GetScriptIDByName($scriptName, $parentId); 
if ($scriptID == 0){ 
$scriptID = IPS_CreateScript(0); 
IPS_SetName($scriptID, $scriptName); 
IPS_SetParent($scriptID, $parentId); 
} 
return $scriptID; 
} 

// Funktion um eine Dummy Instanz zu erzeugen
function GetOrCreateDummyByName($parentId, $Name)
{
$objID = @IPS_GetObjectIDByName($Name, $parentId);
if ($objID == 0)
{
$objID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetParent($objID, $parentId);
IPS_SetName($objID, $Name);
}
return $objID;
}

// 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_SetEventActive($eid, true);
}
return $eid;
} 
?>

Macht es etwas übersichtlicher. :wink:

Viele Grüße,

Burkhard

Hallo Burkhardt,

sorry hab es versucht, wußte aber leider nicht wie es geht mit dem PHP Container. :expressionless::expressionless:
Denke jetzt weiß ich wie es geht.

Gruß
Mike

Erstmal Danke an den Ersteller und die Anpasser.

Eine Bitte. Als QMB bin ich etwas sensibilisiert, wenn man Dinge verändert aber dies nicht entsprechend kennzeichnet.
Es würde allen helfen, wenn Ihr zumindest im Kopftext einen Hinweis gebt, dass hier am Originalskript etwas verändert wurde.

Damit haben auch nachfolgende Nutzer die Chance, so etwas gleich zu erkennen.

LG
Andreas

Gesendet von iPad mit Tapatalk

Hallo Andreas,

habe da auch dran gedacht im Skript oben einen Hinweis zu machen, dass das Skript von mir angepasst wurde.
Habe mich aber nicht so recht gedraut. :slight_smile:

Werd ich beim nächsten Mal dann machen!

Gruß
Mike

Hallo Andreas,

als ehemals QMB gebe ich Dir recht, hier hätten wir darauf achten sollen, Sorry. Werde es in Zukunft mehr beherzigen.

Viele Grüße,

Burkhard

Vielen Dank für das Script :slight_smile:

Aber irgendwas stimmt bei mir nicht…

Wie soll die Zählervariable geloggt werden ? Standart oder als Zähler ?

Bei mir rechnet komisch:

Wo ist der Fehler ?

Hallo Drapple,

ich verwende für die Auswertung den Powermeter aus dem Homematic Extended Modul von Nall-Chan.
Die Variable wird als Zähler geloggt.

Gruß
Mike

Hallo Drapple,

bei mir läuft ein SDM630 und liefert die Werte für die Hochrechnung. Das Script liefert daraus eine korrekte Hochrechnung. Kommt bei Dir evtl. ein Falscher Wert an? Der Übergabe-Wert kommt bei mir aus einer Float-Variable. Anbei mal ein Screenshot der Hochrechnung:

Eventuell hast Du aber auch ein Problem mit dem Instanz-Ident. Das Script holt sich ja im Original den Wert über den Ident, nicht über die ObjektID.

// Verbrauchszähler 
$valueID = IPS_GetObjectIDByIdent("ENERGY_COUNTER_TOTAL", $parentID); // oder alternativ einfach die ID angeben 

P.S.: Ich hab mir Deinen Screenshot nochmal angesehen. Er scheint ja nur Probleme bei der Jahresberechnung zu haben, nicht aber bei den anderen Werten. Hast Du evtl. beim Script-kopieren einen Fehler unbemerkt eingebaut?
Schaue Dir mal nochmal folgenden Bereich an, ob da evtl. Unterschiede zu Deinem Script zu finden sind:

// ------------------------- 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, 2);
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, 2);
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, 2);
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, 2);
SetValueFloat($consYearID, $data);
SetValue($consYearCostID,GetValue($consYearID)*$kosten);

@ Mike: Vielleicht könntest Du Dein Script im Post 21 noch korrigieren, falls jemand das daraus kopiert und nicht die korrigierte Version nimmt.

Viele Grüße,

Burkhard

Hallo und Danke für das Script an alle Helferlein.

Irgendwie stehe ich grad auf dem Schlauch, das Script an sich läuft aber es kommen auch bei mir unrealistische Werte raus.
Da ich leider nur alle paar Monate mal zum Erweitern von IPS komme und deswegen immer wieder von vorn Anfange, scheitert es grad an diesem Script, welches ich eigentlich nur mal schnell in Betrieb nehmen wollte, weil auch ich sowas schon immer schön anzuschauen fand.

Deswegen für mich bitte nochmal vom Urschleim.


$roundTo = 2; //Anzahl Nachkommastellen bei Ergebnissen -selbsterklärend
$kosten = GetValue(11053 /[Hardware\Stromzähler\Preis kW\h]/); // Floatvariable mit dem Preis pro kWh - z.b. 0.25 Euro oder eher 25 Cent

----------------------------------- ID´s ------------------------------------------------------------------------------------------------------------------------------

$parentID = IPS_GetObject($_IPS[‚SELF‘]); — holt sich die ID der Instanz worunter ich das Script ausführe? Worunter starte ich das Script? hätte es ja gern außerhalb der Zähler, in meinem Script Ordner aber da läuft mal gleich gar nichts…
$parentID = $parentID[‚ParentID‘]; — schreibt die ID in die Variable

echo $parentID;

ID des ArchiveHandler ermitteln

$instances = IPS_GetInstanceListByModuleID(’{43192F0B-135B-4CE7-A0A7-1475603F3060}’); - ID vom ArchiveHandler, haut auch soweit hin…
$archiveID = $instances[0]; - schreibt die ID in die Variable

################################################## ################################################## ################################################## ###################

und nun klemmt es…

// Verbrauchszähler
//$valueID = IPS_GetObjectIDByIdent(„ENERGY_COUNTER_TOTAL“, $parentID); // oder alternativ einfach die ID angeben – was macht das? muss ich eine Variable anlegen welche „ENERGY_COUNTER_TOTAL“ benannt wird?
muss ich eine vorhandene Variable benutzen?
Ist „Verbrauchszähler“ eine extra Variable oder eine Variable vom Zähler? Wenn vom Zähler, welche Variable? der Aktuelle Verbrauch oder der Zählerstand, ich tipp mal auf Zählerstand? (die älteren Daten werden ja aus den ArchivHandler geholt?)
ich habe mehrere Varianten ausprobiert, komme leider zu keinem ordentlichen Ergebnis.
Entweder alles ist 0, oder der Tages-/ Monatsverbrauch ist viel zu hoch, außer die Jahreshochrechnung sah meist passend aus.


soooo, Outing zu Ende :wink:

P.S.: ich finde, sowas könnte auch direkt in IPS integriert sein, an solchen Berechnung ändert sich ja normal nichts, der Pflegeaufwand sollte ja dementsprechend klein sein.

So habe das Script umgebaut und alle Variablen einen eindeutigen Ident geben, Sortierung der Variablen usw…

Vielen Dank an zerfasm der meine Fehler beseitigt hat…

Update vom Script am 14.03.18 14 Uhr

<? 
#include('globalfunction.ips.php');
#########################################################################################################################################################################
# Scriptbezeichnung: HM.Consumption.ips.php
# Version: 1.1
# Author: Heiko Wilknitz
# Anpassung by Drapple & zerfasm
#
# Auswertung und Hochrechnung des Stromverbrauches
#
# ----------------------------- KONFIGURATION ---------------------------------------------------------------------------------------------------------------------------
#
# Anzahl Nachkommastellen bei Ergebnissen
$roundTo2   = 2; //Anzahl Nachkommastellen bei Ergebnissen
$roundTo3   = 3; //Anzahl Nachkommastellen bei Ergebnissen

$kosten    	= GetValue(52994 /*[Stromzaehler\Preis pro KWh]*/); //Floatvariable mit dem Preis pro kWh 
#
# ----------------------------------- 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 	= 48995 /*[Stromzaehler\modbus\Zaehlerstand\Zaehlerstand]*/; //Wenn VariablenID verwendet werden soll


// -------------------------- VARIABLENPROFIL ERSTELLEN -----------------------------------------------------------------------------------------------------------------
// Profilname kWh    
$vpname="KWh";
if (IPS_VariableProfileExists($vpname) ==false) //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($vpname,"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
} 

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

// Kosteninstanzen anlegen
$enerCostID = GetorCreatcategory( "Energiekostenberichte",$parentID); 
$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, "", true, $lastID, "1"); 
$lastWeekID = GetOrCreateVariable('Letzte Woche', 2, "POWER_CONSUMPTION_LAST_WEEK", $vpname, "", true, $lastID, "2"); 
$lastMonthID = GetOrCreateVariable('Letzter Monat', 2, "POWER_CONSUMPTION_LAST_MONTH", $vpname, "",true, $lastID, "3"); 
$lastYearID = GetOrCreateVariable('Letztes Jahr', 2, "POWER_CONSUMPTION_LAST_YEAR", $vpname, "", true, $lastID, "4"); 

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

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

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

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

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


// -------------------------- 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, 2);
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, 2);
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, 2);
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, 2);
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 ,$parent,$position ) // 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
*/
{
    $ObjId = @IPS_GetObjectIDByName($name , $parent);
    if ($ObjId === false)
    {
    	$ObjId = IPS_CreateVariable($vtyp);
        IPS_SetName($ObjId, $name); //Namen vergeben
        IPS_SetIdent($ObjId, $ident); //ObjectIdent vergeben
        IPS_SetParent($ObjId,$parent ); //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);
			IPS_ApplyChanges($modul_id);
		}// Ende Logging
		
		IPS_SetPosition($ObjId,$position);
    }
    return $ObjId;
}


// Erstellt eine Instanz, wenn diese noch nicht existiert
function GetOrCreateInstanz($name , $ityp, $parent ) //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 , $parent);
    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,$parent ); // Variable unter die Instantz verschieben
    }
    return $ObjId;
}


// Erstellt ein Script, wenn es noch nicht exestiert
function GetOrCreateScript($name , $parent, $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 , $parent);
    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,$parent ); //  Script unter das Parent verschieben
     }
    return $ObjId;
}


// Erstellt eine Kategorie, wenn diese noch nicht exestiert
function GetorCreatcategory($name,$parent)
#function GetorCreatcategory($name,$parent, $position, $hidden)
{
$LinkID = @IPS_GetObjectIDByName($name , $parent);
if ($LinkID === false)
{
	$LinkID = IPS_CreateCategory(); // Link anlegen
	IPS_SetName($LinkID, $name); // Link benennen
	IPS_SetParent($LinkID, $parent); // Link einsortieren unter dem Objekt mit der ID "12345"
	#if ($hidden ===true) IPS_SetHidden($LinkID,true);
	#IPS_SetPosition($LinkID,$position); //Position festlegen
}
	return $LinkID;
}

?>

So sieht es jetzt aus:

Hallo drapple,

besten dank, allerdings würde ich schon interessieren, wo letztendlich der FEhler lag, damit auch was lerne. Wäre super nett, wenn Du uns dies noch mitteilen könntest.

Viele Grüße,

Burkhard

Hallo BeLo,

den Preis gibst Du in Cent an.

Die Zählervariable ist die, die die kWh anzeigt. Der mußt Du nur mittels:

IPS_SetIdent(59017 /*[Hardware\Strom\SDM 630\Stromzähler]*/, "ENERGY_COUNTER_TOTAL");

einen Ident (hier: ENERGY_COUNTER_TOTAL) geben. Diese Idents werden IPS-Intern dann zur Erkennung genutzt. Allerdings benötigst Du dass nach der Optimierung von drapple nicht mehr.

Wenn ich es richtig verstanden habe, helfen allerdings die Idents dabei, wenn eine Instanz, aus welchem Grund auch immer, neu angelegt werden muß, und ich habe die ObjektID in meinen Scripten benutzt, muß ich alle auf diese Instanz zugreifenden Scripte anpassen. Bei der Ident wird das nicht benötigt, da ich der neuen ObjektID die alte Ident wiedergebe. Sollte ich hier falsch liegen, korrigiert mich bitte.

Viele Grüße,

Burkhard

Hi sorry, weil meine Zählervariable nicht auf Zähler geloggt hat…, jetzt geht es :wink:

Sorry musste das Script nochmal abändern, jetzt sollte alles passen…

Hallo Burkhard,

hab es in einen PHP Container verschoben. Nochmals sorry, wusste vorher nicht wie das geht mit dem PHP Container.
Wenn ich heute oder die Tage Zeit habe, vielleicht baue ich dann noch die Anpassung mit der Variablenprofilerstellung auch noch in mein Skript ein.

Gruß
Mike

Hallo Drapple,

bei dir werden laut Bild die Verbrauchswerte ebenfalls als Euro angezeigt. Sollten aber eigentlich kWh sein!

Gruß
Mike

Hi da war noch ein Fehler von mir drin, habe es korrigiert und das Script ausgetauscht, so sieht es jetzt aus:

stimmt nicht :stuck_out_tongue: , ich muss es in Euro angeben, in meinem Fall 0,253589

Ok soweit verstanden, war mir neu aber wie gesagt im Moment funktioniert einfach alles seit langem und da bin ich nicht mehr so im Stoff…

Mein Hauptproblem war wie bei drapple, die Variable als Zähler einzustellen… auch das war mir neu :smiley:

Jetzt sieht alles erstmal plausibel aus, Danke nochmal an alle Beteiligten.

Hallo BeLo,

verdammt, da haste mich ja eiskalt erwischt. Ich hab es auch als 0,30 € eingetragen. :o:o:o:o:o:D

Viele Grüße,

Burkhard