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