Es gab hier irgendwann mal ein Thread zur Verbrauchsdatenauswertung, finde ihn aber gerade nicht mehr.
Habe dir mal das auf den Wasserzähler abgeänderte Script angehängt, das ursprünglich für den Stromverbrauch war.
Vielleicht hilft dir das weiter.
VG,
Doc
#########################################################################################################################################################################
# Version: 1.2
# Author: Heiko Wilknitz
# Anpassung by Zerfasm & Drapple
# 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 = 4; //Anzahl Nachkommastellen bei Ergebnissen
//$kosten = GetValue(28299); //Floatvariable mit dem Preis pro kWh (Vergütung)
//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 = true;
//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];
// Zähler
//$valueID = IPS_GetObjectIDByIdent("ENERGY_COUNTER_TOTAL", $parentID); //Wenn ObjektID verwendet werden soll
$valueID = 42321; //Wenn VariablenID verwendet werden soll
// -------------------------- VARIABLENPROFIL ERSTELLEN -----------------------------------------------------------------------------------------------------------------
// Profilname kWh
$vpname="Wasserzaehler";
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,""," m³"); //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, $roundTo3); //Anzahl Nachkommastellen, in diesem Fall 3
}
// -------------------------- AUSWAHL OB KATEGORIEN ODER INSTANZEN ERSTELLEN --------------------------------------------------------------------------------------------
If ($category == true)
{
$enerID = GetorCreatecategory("Wasserzählerberichte",$parentID);
// $enerCostID = GetorCreatecategory("Energieeinspeisungsvergütung",$parentID);
}
else
{
$enerID = GetorCreateInstanz("Wasserzählerberichte","dummy",$parentID);
// $enerCostID = GetorCreateInstanz("Energieeinspeisungsvergütung","dummy",$parentID);
}
// -------------------------- INSTANZEN ERSTELLEN -----------------------------------------------------------------------------------------------------------------------
// Verbrauchsinstanzen anlegen
$lastID = GetOrCreateInstanz("Verbrauch Zuletzt","dummy",$enerID);
$currID = GetOrCreateInstanz("Verbrauch Aktuell","dummy",$enerID);
$consID = GetOrCreateInstanz("Hochrechnung Verbrauch","dummy",$enerID);
// -------------------------- 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);
// -------------------------- 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, $roundTo3);
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, $roundTo3);
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, $roundTo3);
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, $roundTo3);
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 $roundTo3;
$consumption = 0;
foreach($values as $value)
{
$consumption += $value['Avg'];
}
return round($consumption, $roundTo3);
}
// 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;
}