Energieberichte

Hi eine Frage wo hast du die Vari auf Zähler geändert

direkt in der Variablen (doppelklick ?!)

Ok das kannte ich noch garnicht.
Hätte ich ohne dich nie gefunden danke!!!

Hallo zusammen, ich möchte das Thema noch mal hoch holen.

Aufgabe ist es eine Integervariable (Zähler) des Stromzählers hinsichtlich der Betriebskostenabrechnung für das gesamte Jahr auszugeben.

Mit folgendem Skript aus der Doku versuche ich das sicher zu stellen, jedoch gibt mir das Skript den falschen Wert aus.

Laut Archiv sind es 1622 kWh im Jahr 2022, in der Skriptausgabe sind es jedoch sportliche 386397 kWh.

Könnt ihr mir bitte bei der Fehlersuche behilflich sein?

Vielen Dank

Grüße,
Felix

<?php
$werte = AC_GetAggregatedValues(16223 /*[Archive]*/, 33428,4,mktime(0, 0, 0, 1, 1, 2022), mktime(23, 59, 12, 31, 2022), 0); 
foreach($werte as $wert) 
{
    echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Avg'] . PHP_EOL;
}
SetValue(45049, $wert['Avg']);
SetValue(35670,date("d.m.Y H:i:s", $wert['TimeStamp']));
?>

Hi habe heute Leider ne falsche Zahl eingegeben und hatte mal fix den 10 fachen Verbrauch. kann mir jemand sagen wo das modul die werte Speichert das ich den heutigen Tag löschen kann.

Hallo ich nutze das Script von @pitti schon länger ohne Probleme. Heute ist mir aufgefallen, das das Script nicht mehr funktioniert. Eigentlich habe ich bis auf Symcon Updates nichts geändert.
@pitti Kannst du Helfen?

Fehlermeldung:

Fatal error: Cannot redeclare CreateVariableByName() (previously declared in /mnt/data/symcon/scripts/System.Functions.ips.php:305) in /mnt/data/symcon/scripts/42063.ips.php on line 122

Zeile 122 lautet:

    return $vid;

Komplettes Script:

<? 
################################################################################
# Scriptbezeichnung: HM.Consumption.ips.php
# Version:	1.0
# Author:	Heiko Wilknitz
#
# Auswertung und Hochrechnung des Stromverbrauches
#
# ----------------------------- Konfigruration ---------------------------------
#
# Anzahl Nachkommastellen bei Ergebnissen
$roundTo=2;                //Anzahl Nachkommastellen bei Ergebnissen 
#
# ----------------------------------- 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 = 54161; 
//$valueID = IPS_GetObjectIDByIdent("Value", $parentID); 


// Variablen anlegen bzw. auslesen
$lastYearID		= CreateVariableByName($parentID, "Verbrauch letztes Jahr"); 
$lastMonthID    = CreateVariableByName($parentID, 'Verbrauch letzter Monat'); 
$lastWeekID     = CreateVariableByName($parentID, 'Verbrauch letzte Woche'); 
$lastDayID      = CreateVariableByName($parentID, 'Verbrauch letzter Tag'); 

$currYearID		= CreateVariableByName($parentID, "Verbrauch aktuelles Jahr"); 
$currMonthID    = CreateVariableByName($parentID, 'Verbrauch aktueller Monat'); 
$currWeekID     = CreateVariableByName($parentID, 'Verbrauch aktuelle Woche'); 
$currDayID      = CreateVariableByName($parentID, 'Verbrauch aktueller Tag'); 

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

// -------------------------- LETZTE WERTE -------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $valueID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0);  
SetValueFloat($lastDayID, CalcConsumption($data));
// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $valueID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0);  
SetValueFloat($lastWeekID, CalcConsumption($data));
// 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));
// 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));

// ------------------------- AKTUELL WERTE -------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $valueID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumption($data);
SetValueFloat($currDayID, $dataDay);
// WOCHE
$data = AC_GetAggregatedValues($archiveID, $valueID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0);  
$dataWeek = CalcConsumption($data);
SetValueFloat($currWeekID, $dataWeek);
// 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);
// JAHR
$data = AC_GetAggregatedValues($archiveID, $valueID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0);  
$dataYear = CalcConsumption($data);
SetValueFloat($currYearID, $dataYear);

// ------------------------- HOCHRECHNUNG --------------------------------------
// TAG
$diff = strtotime('now') - strtotime('today');
$full = 60*60*24; // 24h
$data = round($dataDay*$full/$diff, 2);
SetValueFloat($consDayID, $data);
// 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);
// 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);
// 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);


// 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);
}	 

// Variablen 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); 
	} 
    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; 
} 
?>

Ohje, das ist ja schon uralt :slight_smile:

Ich versuche mal zu helfen! Das Problem bekommst Du weil Du meine globale Script-Bibo (System.Functions.ips.php) nutzt. Dort sind schon alle Helper-Funktionen schon deklariert und werden dann in dem alten Script nochmal versucht zu deklarieren.

Vorgehen:

1.) im Energie-Script ab der Stelle function CreateVariableByName($id, $name) bis zum Ende des Scripts auskommentieren oder löschen, d.h. die Funktionen CreateVariableByName und CreateScriptByName müssen weg.

2.) im oberen Teil vom Energie-Script müssen die 12 Aufrufe …

$lastYearID		= CreateVariableByName($parentID, "Verbrauch letztes Jahr"); 

in

$lastYearID		= CreateVariableByName($parentID, "Verbrauch letztes Jahr", 2); 

abgeändert werden, also bei allen 12 Aufrufen muss ein Komma und die 2 hinzugefügt werden.

Das sollte Abhilfe schaffen … hoffe ich!

Gruß Heiko

PS: Ich werde nie wieder ein Script-Bibo zur Verfügung stellen … ich schwöre!!!

1 „Gefällt mir“

Danke, Läuft. Und bitte weitermachen :heart_eyes: :v: