versuch mal das hier.
hab ich für meine HM Geräte, läuft über Jahre gut und zählt fleißig wie oft die Flurbeleuchtung geschaltet, wieviel Strom verbraucht wurde und was es gekostet hat (Strompreis eintippen)
Das Script ist nicht von mir, hatte mal jemand ausm Forum gebaut
Das Script packst du in ein extra Verzeichnis.
Als Auslöser nimmst ein Ereignis, Variablenänderung (deine Bool) und dann dieses Script ausführen.
Ich würde meinen, dass alles automatisch erstellt wurde.
<?
$name_BetrSt = 'Betriebsdauer';
$name_Zyk = 'Schaltzyklen';
$name_Kost = 'Betriebskosten';
$name_lastOn= 'Letztmalig Geschaltet';
$name_Energie= 'Energieverbrauch';
$name_Config= 'Grunddaten';
if($IPS_SENDER == "Execute") // nur wenn bei "Ausführen"
{
# Variablenprofile anlegen
IPS_CreateVariableProfile('BetrStd_integer',1);
IPS_CreateVariableProfile('BetrStd_sec',1);
IPS_SetVariableProfileText('BetrStd_sec','',' sec');
IPS_CreateVariableProfile('BetrStd_kW',2);
IPS_CreateVariableProfile('Zyklen',1);
IPS_SetVariableProfileText('BetrStd_kW','',' kW');
IPS_SetVariableProfileDigits('BetrStd_kW',2);
IPS_CreateVariableProfile('BetrStd_Euro',2);
IPS_SetVariableProfileText('BetrStd_Euro','',' €');
IPS_SetVariableProfileDigits('BetrStd_Euro',2);
$ParentID = IPS_GetObject($IPS_SELF);
$ParentID = $ParentID['ParentID'];
IPS_SetHidden($IPS_SELF,true);
# DummyInstancen anlegen
getId($name_BetrSt);
getId($name_Zyk);
getId($name_Kost);
getId($name_lastOn);
getId($name_Energie);
getId($name_Config);
# Summenvariablen Anlegen
$MODID_Config = getId($name_Config);
$Strompreis = CreateVariableByName($MODID_Config, "Strompreis_in_Cent_pro_kWh", 1);
$Gesamtverbrauch = CreateVariableByName($ParentID, "Gesamtstromverbrauch d. überwachten Geräte", 'kW');
$Gesamtkosten = CreateVariableByName($ParentID, "Stromkosten d. überwachten Geräte", 'Euro');
echo "Erfolgreich eingerichtet";
}
if($IPS_SENDER == "Variable")
{
# überwachte variable und deren parent holen
$Variable = IPS_GetObject($IPS_VARIABLE);
$parentID = $Variable['ParentID'];
$VariableName= $Variable['ObjectName'];
$Parent = IPS_GetObject($parentID);
$ParentName = $Parent['ObjectName'];
# !!! gewünschtes Variablennamensschema auswählen !!!
$ObjectName = $ParentName; # -> erhält Name der übergeordneten Instanz der überwachten Variablen
# $ObjectName= $VariableName; # -> erhält Name der überwachten Variablen
# $ObjectName = $ParentName.'_'.$VariableName; #-> Kombination aus Instanz&Variablenname
if(($IPS_VALUE==True) OR ($IPS_VALUE <> 0)) { # Objekt wurde eingeschaltet, ggfls anpassen
# Dummyinstancen holen
$MODID_Zyk = getId($name_Zyk);
$MODID_last =getId($name_lastOn);
$MODID_Config = getId($name_Config);
# Variablen befüllen, bzw. bei erstmaligem Aufruf anlegen
CreateVariableByName($MODID_Config, 'Leistungsaufnahme in Watt: '.$ObjectName,1); #Leistungsaufnahme
$idSz = CreateVariableByName($MODID_Zyk, $ObjectName,'Zyklen'); #ON/OFF Zyklen
SetValue($idSz, GetValue($idSz)+1);
$idOn = CreateVariableByName($MODID_last, $ObjectName.'_On_Timestamp', 1); #ON_timestamp
SetValue($idOn,time());
$idOnString = CreateVariableByName($MODID_last, $ObjectName.'_On', 'Zeit');#timestamp letzter Einschaltzeitpunkt als String
SetValue($idOnString, date("H:i:s",GetValue($idOn)));
}
else { # Objekt wurde ausgeschaltet
$ParentID = IPS_GetObject($IPS_SELF);
$ParentID = $ParentID['ParentID'];
# Dummyinstancen holen
$MODID_last = getId($name_lastOn);
$MODID_BetrSt = getId($name_BetrSt);
$MODID_Kosten = getId($name_Kost);
$MODID_Energie = getId($name_Energie);
# Variablen beschreiben bzw. ber erstmaligem Aufruf anlegen
$MODID_Config = getId($name_Config);
$Id_Leistung = CreateVariableByName($MODID_Config, 'Leistungsaufnahme in Watt: '.$ObjectName,1); #Leistungsaufnahme
$Leistung = GetValue($Id_Leistung);
$Strompreis = IPS_GetVariableIDByName('Strompreis_in_Cent_pro_kWh', $MODID_Config);
$idOn = CreateVariableByName($MODID_last, $ObjectName."_On_Timestamp", 1);#timestamp letzter Einschaltzeitpunkt
$idOff = CreateVariableByName($MODID_last, $ObjectName.'_Off_Timestamp', 1); #ON_timestamp
SetValue($idOff,time());
$idOFFString = CreateVariableByName($MODID_last, $ObjectName.'_OFF', 'Zeit');#timestamp letzter Einschaltzeitpunkt als String
SetValue($idOFFString, date("H:i:s",GetValue($idOff)));
$idC = CreateVariableByName($MODID_BetrSt, $ObjectName."_Sekunden", 'sec');#Sekundenzähler
SetValue($idC, GetValue($idC)+ (time() - getValue($idOn)));
$idbh = CreateVariableByName($MODID_BetrSt, $ObjectName, 'Zeit');#Betriebsdauer als String
SetValue($idbh, date("z \T\a\g\e H:i:s", GetValue($idC)- 3600));
$idW = CreateVariableByName($MODID_Energie, $ObjectName, 'kW'); # Energieverbrauch in kWh
SetValueFloat($idW, GetValue($idC)/3600 * $Leistung/1000 );
$idEuro = CreateVariableByName($MODID_Kosten, $ObjectName, 'Euro'); #Kosten in Euro
SetValueFloat($idEuro, GetValueFloat($idW) *GetValue($Strompreis)/100 );
# Summenvariablen updaten
$IdkW = IPS_GetVariableIDByName("Gesamtstromverbrauch d. überwachten Geräte",$ParentID);
$IdKosten = IPS_GetVariableIDByName("Stromkosten d. überwachten Geräte",$ParentID);
$all_IdVerbrauch = IPS_GetChildrenIDs($MODID_Energie);
$all_IdKosten = IPS_GetChildrenIDs($MODID_Kosten);
$kW = 0.0;
foreach ($all_IdVerbrauch as &$Ids) {
$kW = $kW+GetValueFloat($Ids);
}
SetValueFloat($IdkW,$kW);
$Kosten = 0.0;
foreach ($all_IdKosten as &$Ids) {
$Kosten = $Kosten+GetValueFloat($Ids);
}
SetValueFloat($IdKosten,$Kosten);
}
}
function CreateVariableByName($id, $name, $type)
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid===false) {
$vartype = 1;
if ($type == 'Euro/kWh') $vartype = 2;
if ($type == 'Euro') $vartype = 2;
if ($type == 'kW') $vartype = 2;
if ($type == 'Zeit') $vartype = 3;
$vid = IPS_CreateVariable($vartype);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "This Variable was created by Script #$IPS_SELF");
if ($type == 'integer') IPS_SetVariableCustomProfile ($vid, "BetrStd_integer");
if ($type == 'sec') IPS_SetVariableCustomProfile ($vid, "BetrStd_sec");
if ($type == 'kW') IPS_SetVariableCustomProfile ($vid, "BetrStd_kW");
if ($type == 'Euro') IPS_SetVariableCustomProfile ($vid, "BetrStd_Euro");
if ($type == 'Zeit') IPS_SetVariableCustomProfile ($vid, "~String");
if (strpos($name,'Timestamp') >0) IPS_SetHidden($vid,true);
if (strpos($name,'Sekunden') >0) IPS_SetHidden($vid,true);
}
return $vid;
}
function getId($name) {
global $IPS_SELF;
$ParentID = IPS_GetObject($IPS_SELF);
$ParentID = $ParentID['ParentID'];
$ID = @IPS_GetObjectIDByName($name, $ParentID);
if ($ID == 0) {
$dummy=IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}"); #Betriebsstunden anlegen
IPS_ApplyChanges($dummy);
IPS_SetName($dummy,$name);
IPS_SetParent($dummy,$ParentID);
}
return $ID;
}
?>