@mr_command:
Version: V2.2 05.06.12 (automatisches hidden und logging hinzu)
<?
################################################################################
# Dieses Skript errechnet alle Verbrauchsdaten inkl. Eigenverbrauch auf Basis #
# eines Zukaufs-, eines Verkaufs- und eines Ertragzählers. #
# Bitte wie unten beschrieben die Punkte 1-4 beachten #
# Dieses Skript legt 14 Variable und 2 VariableProfile an. #
# V2.2 05.06.12 Ise #
################################################################################
/* 1. Variable anpassen
2. Skript ausführen
3. der neu angelegten Variable "Zeitraum" ein Skript mit folgendem Inhalt
zuweisen: SetValue($IPS_VARIABLE, $IPS_VALUE);
4. diesem Skript ein Ereigniss hinzufügen "bei Aktualisierung der Variablen
"Zeitraum" , und alle 60 sec.
Die Zähler würde ich alle 60sec. aktualisieren.
*/
//ID des Archive Handler (bitte anpassen)
$Archive_Handler = 11461 /*[Archive Handler]*/;
//ID´s der Rohdaten (bitte anpassen)
$roh_pv_w = GetValueFloat(51791 /*[Geräte\Sensoren\PV 4,2 KW\Leistung]*/); //Rohwert PV-Leistung [W] logging
$roh_pv_kw = GetValueInteger(59484 /*[Geräte\Sensoren\PV 4,2 KW\Ertrag]*/); //Rohwert PV-Ertrag [kW] logging
$imp_ertrag = 1/2000; //1/ Imp /KWh
$roh_ver_w = GetValueFloat(17999 /*[Geräte\Sensoren\Strom\Leistung / min]*/); //Rohwert Verkauf-Leistung [W] logging
$roh_ver_kw = GetValueInteger(52343 /*[Geräte\Sensoren\Strom\Verkauf]*/); //Rohwert Verkauf [kW] logging
$imp_verkauf = 1/1000; //1/ Imp /KWh
$roh_zuk_w = GetValueFloat(17999 /*[Geräte\Sensoren\Strom\Leistung / min]*/); //Rohwert Zukauf-Leistung [W] logging
$roh_zuk_kw = GetValueInteger(52343 /*[Geräte\Sensoren\Strom\Zukauf]*/); //Rohwert Zukauf [kW] logging
$imp_zukauf = 1/1000; //1/ Imp /KWh
//Kategorie in der die neuen Variablen erstellt werden sollen (bitte anpassen)
$kategorie = 49728 /*[Variable\Energie\Strom]*/;
################################################################################
//ab hier bitte nichts ändern
################################################################################
//ausführen nur bei Handstart
if ($_IPS['SENDER']==="Execute")
{
//Variablenprofile anlegen
if (!IPS_VariableProfileExists("Zeitraum"))
{
IPS_CreateVariableProfile("Zeitraum",1);
IPS_SetVariableProfileValues("Zeitraum", 0, 4,1);
IPS_SetVariableProfileAssociation("Zeitraum", 0, "Stunde", "", 0xFFFFFF);
IPS_SetVariableProfileAssociation("Zeitraum", 1, "Tag", "", 0xFFFFFF);
IPS_SetVariableProfileAssociation("Zeitraum", 2, "Woche", "", 0xFFFFFF);
IPS_SetVariableProfileAssociation("Zeitraum", 3, "Monat", "", 0xFFFFFF);
IPS_SetVariableProfileAssociation("Zeitraum", 4, "Jahr", "", 0xFFFFFF);
}
if (!IPS_VariableProfileExists("Prozent"))
{
IPS_CreateVariableProfile("Prozent",2);
IPS_SetVariableProfileDigits("Prozent",1);
IPS_SetVariableProfileValues("Prozent", 0, 100, 0.1);
IPS_SetVariableProfileText("Prozent","","%");
}
//Variable anlegen
$vid = CreateVariableByName($kategorie,"Ertrag_alt",1,"",true,false);
$vid = CreateVariableByName($kategorie,"Verkauf_alt",1,"",true,false);
$vid = CreateVariableByName($kategorie,"Zukauf_alt",1,"",true,false);
$vid = CreateVariableByName($kategorie,"Ertrag_ges",2,"~Electricity",false,True);
$vid = CreateVariableByName($kategorie,"Verbrauch_ges",2,"~Electricity",false,True);
$vid = CreateVariableByName($kategorie,"Verkauf_ges",2,"~Electricity",false,True);
$vid = CreateVariableByName($kategorie,"Zukauf_ges",2,"~Electricity",false,True);
$vid = CreateVariableByName($kategorie,"Delta",2,"~Watt.14490",false,false);
$vid = CreateVariableByName($kategorie,"Zeitraum",1,"Zeitraum",false,false);
$vid = CreateVariableByName($kategorie,"Zukauf",2,"~Electricity",false,false);
$vid = CreateVariableByName($kategorie,"Verbrauch",2,"~Electricity",false,false);
$vid = CreateVariableByName($kategorie,"Verkauf",2,"~Electricity",false,false);
$vid = CreateVariableByName($kategorie,"Ertrag",2,"~Electricity",false,false);
$vid = CreateVariableByName($kategorie,"Eigenverbrauch",2,"Prozent",false,false);
}
else
{
//ab hier nur bei Auslösung durch Ereigniss
//Definition
$zeitraum = GetValueInteger(@IPS_GetVariableIDByName ("Zeitraum", $kategorie));;
$roh_pv_kw_alt = GetValueInteger(@IPS_GetVariableIDByName ("Ertrag_alt", $kategorie)); //Rohwert alt PV-Ertrag [kW]
$roh_ver_kw_alt = GetValueInteger(@IPS_GetVariableIDByName ("Verbrauch_alt", $kategorie));//Rohwert alt Verkauf [kW]
$roh_zuk_kw_alt = GetValueInteger(@IPS_GetVariableIDByName ("Zukauf_alt", $kategorie));//Rohwert alt Zukauf [kW]
$PV_Ertrag = GetValueFloat(@IPS_GetVariableIDByName ("Ertrag_ges", $kategorie));
$Verbrauch = GetValueFloat(@IPS_GetVariableIDByName ("Verbrauch_ges", $kategorie));
$Einspeisung = GetValueFloat(@IPS_GetVariableIDByName ("Verkauf_ges", $kategorie));
$Zukauf = GetValueFloat(@IPS_GetVariableIDByName ("Zukauf_ges", $kategorie));
//Berechnung
// PV-Ertrag
$delta_roh_pv_kw = ($roh_pv_kw - $roh_pv_kw_alt) * $imp_ertrag;
if ($delta_roh_pv_kw > 0)
{
SetValueFloat(@IPS_GetVariableIDByName ("Ertrag_ges", $kategorie),$PV_Ertrag +$delta_roh_pv_kw);
}
SetValueInteger(@IPS_GetVariableIDByName ("Ertrag_alt", $kategorie),$roh_pv_kw);
// Verkauf
$delta_roh_ver_kw = ($roh_ver_kw - $roh_ver_kw_alt) * $imp_verkauf;
if ($delta_roh_ver_kw > 0)
{
SetValueFloat(@IPS_GetVariableIDByName ("Verkauf_ges", $kategorie),$Einspeisung +$delta_roh_ver_kw);
}
SetValueInteger(@IPS_GetVariableIDByName ("Verkauf_alt", $kategorie),$roh_ver_kw);
// Zukauf
$delta_roh_zuk_kw = ($roh_zuk_kw - $roh_zuk_kw_alt) * $imp_zukauf;
if ($delta_roh_zuk_kw > 0)
{
SetValueFloat(@IPS_GetVariableIDByName ("Zukauf_ges", $kategorie),$Zukauf +$delta_roh_zuk_kw);
}
SetValueInteger(@IPS_GetVariableIDByName ("Zukauf_alt", $kategorie),$roh_zuk_kw);
//Verbrauch
$delta_kw = $delta_roh_pv_kw - $delta_roh_ver_kw + $delta_roh_zuk_kw
{
SetValueFloat(@IPS_GetVariableIDByName ("Zukauf_ges", $kategorie),$Zukauf+$delta_kw);
}
//Leistungsdelta
SetValueFloat(@IPS_GetVariableIDByName ("Delta", $kategorie),$roh_pv_w - $roh_ver_w + $roh_zuk_w);
//Daten aus Datenbank lesen
$Zukauf = AC_GetAggregatedValues($Archive_Handler,@IPS_GetVariableIDByName ("Zukauf_ges", $kategorie),$zeitraum,0,0,0);
SetValueFloat(@IPS_GetVariableIDByName ("Zukauf", $kategorie),$Zukauf[0]['Avg']);
$Verbrauch=AC_GetAggregatedValues($Archive_Handler,@IPS_GetVariableIDByName ("Verbrauch_ges", $kategorie),$zeitraum,0,0,0);
SetValueFloat(@IPS_GetVariableIDByName ("Verbrauch", $kategorie),$Verbrauch[0]['Avg']);
$Verkauf=AC_GetAggregatedValues($Archive_Handler,@IPS_GetVariableIDByName ("Verkauf_ges", $kategorie),$zeitraum,0,0,0);
SetValueFloat(@IPS_GetVariableIDByName ("Verkauf", $kategorie),$Verkauf[0]['Avg']);
$Ertrag=AC_GetAggregatedValues($Archive_Handler,@IPS_GetVariableIDByName ("Ertrag_ges", $kategorie),$zeitraum,0,0,0);
SetValueFloat(@IPS_GetVariableIDByName ("Ertrag", $kategorie),$Ertrag[0]['Avg']);
$eigenverbrauch = $Ertrag[0]['Avg'] - $Verkauf[0]['Avg'];
SetValueFloat(@IPS_GetVariableIDByName ("Eigenverbrauch", $kategorie),(100 *$eigenverbrauch) / $Ertrag[0]['Avg']);
}
//Funktionen
function CreateVariableByName($kategorie ,$name, $type, $profil, $hidden, $log)
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $kategorie);
if($vid===false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $kategorie);
IPS_SetName($vid, $name);
IPS_SetVariableCustomProfile($vid, $profil);
IPS_SetInfo($vid, "This Variable was created by Script #$IPS_SELF");
IPS_SetHidden($vid, $hidden);
AC_SetLoggingStatus($Archive_Handler,$vid,$log);
}
return $vid;
}
?>