Hallo zusammen,
ich stehe vor der Herausforderung für mein Bewässerungsprojekt den Regensensor (Regen: ja/nein ohne Menge) auszuwerten und benötige hierzu eure Hilfe.
Ich möchte gern die Dauer der Regensensorvariable (True bei Regen) nach 24h wissen und diese Zeitdaten in Sekunden in eine Integervariable ausgeben.
Somit kann ich auswerten, ob der Eventtimer für die Bewässerung am Abend aktiv bleiben soll.
Ich würde mich freuen wenn mir hierbei jemand helfen könnte.
Vielen Dank.
Felix
Die Regenvar startet bei „true“ ein Script welches time(); und dessen Differenz bei false in eine Integervar schreibt und in einer zweiten Integervar die Summe der jeweiligen Scriptaufrufe, nach 24h kannst Du diese abrufen und wieder zurücksetzen.
hoep
12. Juni 2014 um 09:46
3
Hall REDBANDITO,
script stamm nicht von mir, funktioniert aber zuverlässig, ich werte damit ähnliche vorgänge aus:
function getLoggedValueDuration ($variableID, $tsStart, $tsEnd, $value)
{
$duration = 0;
$archiveHandlerID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}');
$archiveHandlerID = $archiveHandlerID[0];
$data = AC_GetLoggedValues($archiveHandlerID, $variableID, time(), time(), 1);
$openTs = count($data) > 0 ? $data[0]['TimeStamp'] : false;
$data = AC_GetLoggedValues($archiveHandlerID, $variableID, $tsStart, $tsEnd, 100000);
$isOpen = ($openTs !== false && count($data) > 0) ? ($openTs == $data[0]['TimeStamp']) : false;
if (count($data) == 100000)
{
return false;
}
if (count($data) > 0)
{
if ($data[count($data) - 1]['TimeStamp'] < $tsStart)
{
$delta = $tsStart - $data[count($data) - 1]['TimeStamp'];
$data[count($data) - 1]['TimeStamp'] = $tsStart;
$data[count($data) - 1]['Duration'] = max(0, $data[count($data) - 1]['Duration'] - $delta);
}
if ($data[0]['TimeStamp'] + $data[0]['Duration'] > $tsEnd || $isOpen)
{
$data[0]['Duration'] = $tsEnd - $data[0]['TimeStamp'];
}
for ($i = 0, $j = count($data); $i < $j; $i++)
{
if ($data[$i]['Value'] == $value)
{
$duration += $data[$i]['Duration'];
}
}
}
return $duration;
}
?>
Anwendungsbeispiel zeitdauer für boolsche variable mit wert = true:
$dauer = getLoggedValueDuration($m,$tsStart,$tsEnd,true);
Beste Grüße
hoep
1 „Gefällt mir“
gerdn
1. Dezember 2023 um 14:38
4
Hallo
Ich wollte mir das Skript zur Nutze machen da ich genau vor der Aufgabe stehe
An welcher Stelle muss ich es einsetzten bzw an welchen Positionen muss ich noch mein Variabelen ID‘s einsetzen ?
Danke
ralf
1. Dezember 2023 um 16:56
5
Das ist eine Funktion und der übergibst du als ersten Parameter deine VariablenID beim Aufruf:
$ergebnis = getLoggedValueDuration ($variableID, ...
Aber das grenzt schon an Leichenflederei nach 9 Jahren .
Du könntest auch einfach das Modul Betriebsstundenzähler aus dem Store nehmen.
gerdn
1. Dezember 2023 um 17:52
6
Zumindest kann man mir nicht vorwerfen ich hätte die Suche nicht benutzt;-) wenn ich was so altes finde …
Das Betriebsstunden Modul gibt leider nur ganze Stunden Werte aus, ich brauche aber für meine geplanten Folgefunktionen Minuten genau die Zeit
Ginge das einfacher?
ralf
1. Dezember 2023 um 18:03
7
Das konnte ich nicht glauben und habe mal kurz installiert, deine Aussage ist nur fast richtig. Die Anzeige aufgrund des Profils ist zwar Stunden, aber der Wert ist schon deutlich mehr aufgelöst
Aber du kannst doch die Funktion von oben nutzen
getLoggedValueDuration ($variableID, $tsStart, $tsEnd, $value)
die notwendigen Parameter sind och selbsterklärend oder was geht bei dir nicht?