?
//hiermit wird ermittelt, welche Laufzeiten binnen eines bestimmten Zeitraums im Modus true (AN) gelaufen sind
//Hier: aktueller Tag
//nur hier ändern:
$archiveID = 31701; // Archive-Handler-ID eintragen
$objectID=58346; //ID geloggte an/aus Variable
$StdOderMin=2; //hier gewünschte Ausgabe: in Minuten=1 oder in Stunden=2
$Ausgabe=51825; //hier VariablenID eintragen, in der ermittelte Zeit abgespeichert werden soll
//ab hier nichts mehr ändern
$ende = time(); // JETZT
$start_aktTag = strtotime(date("d.m.Y")." 00:00:01");//Aktueller Tag von 0:00:01 bis jetzt
$buffer = AC_GetLoggedValues($archiveID, $objectID, $start_aktTag, $ende, 0);
$anzahl = count($buffer);
$Laufzeit=0;
$LaufzeitSumme=0;
$letzterTS=0;
if ($anzahl>0){
for ($y=0;$y<$anzahl;$y++)
{
$wert = $buffer[$anzahl-1-$y];
$TS = $wert["TimeStamp"];
$value = $wert["Value"];
If($value==1){ //wenn Wert=true
$TStrue=$TS; //setzt timestamp des true-Wertes auf $TStrue
}
If($value!=1 AND $y>0){ //wenn Wert=false und false nicht erster Tageswert
$Laufzeit=$TS-$TStrue; //errechnet Laufzeit zwischen letztem true und aktuellem false
$LaufzeitSumme=intval($LaufzeitSumme) + intval($Laufzeit); //addiert alle true-Laufzeiten
}
}
}
//wennn letzer geloggter Wert =true dann minuten noch zählen bis jetzt()
If($value==1){
$letzterTS=time()-$TS;
}
//Ausgabe der ermittelten Zeit in $Ausgabe
if ($StdOderMin==2){
setvalue($Ausgabe /*[Messwerte\Strom\rohe Zählerdaten\Heizungszähler\Laufzeit heute]*/,(round($LaufzeitSumme/60/60,1)+round($letzterTS/60/60,0)));
}
else {
setvalue($Ausgabe /*[Messwerte\Strom\rohe Zählerdaten\Heizungszähler\Laufzeit heute]*/,(round($LaufzeitSumme/60,1)+round($letzterTS/60,0)));
}
?>
Habe mit ein paar Kommentaren versucht, die paar Codezeilen etwas verständlich zu machen.
Voraussetzungen:
dein an/aus Wert sollte natürlich zunächst geloggt sein :rolleyes: also Boolean true/false
die Variable, wohin die Ausgabe des ermittelten Wertes erfolgt, logischerweise auch vorher anlegen und ID oben rein.
Ich hoffe, es klappt bei Dir, bei mir läuft’s jedenfalls
Probiers halt mal aus und melde Dich kurz.
perfekt
Hab gerade dein Script getestet und muss sagen das es funktioniert - tolle Arbeit!!!
Mit diesem Script werden die Tagesstunden der Boolean Variable errechnet, sprich wenn ich die Jahresstunden errechnen möchte müsste ich dies im Script von Tag auf Jahr ändern?
…auch wenn es im Gegensatz dazu, was andere hier programmiertechnisch auf die Beine stellen, eher in der in der Kategorie Kinderkram einzuordnen ist freut es mich, dass es bei Dir läuft
in Minuten? Stunden? Wie kommst du auf ein Jahr?
hast Du ein Profil bei der Variable ausgewählt?
gib mir mal bitte einen Auszug deiner geloggten Variablen.
Gib mir da mal bitte noch ein paar Infos, versuche es dann mal nachzustellen.
Ich zähle die Betriebsstunden jedes mal, wenn der Wert sich ändert, also wenn der Kompressor ausschaltet, schreibe ich die Zeit in eine Variable, die ich dann auch logge als Zähler: