Und falls jemand doch noch Lust auf Weihnachtsdüfte aus der Dose bekommt, hier nochmal mein kleines Script zur Steuerung des Sprühers mit Berechnung und Zurücksetzung des Verbrauchszählers.
Evtl. könnte man die Raumgröße oder Volumen noch mit in die Berechnung der Sprühstöße einbeziehen.
PHP-Code:
<?
// Bedienung: zum Zurücksetzen des Füllstandszähler nach Tausch der Dose die beiden oberen Tasten am
// Modul drücken (LED 4 & 8 leuchten) und Abschaltung der Kanäle abwarten.
// ---------------- Config ------------------
$Instance = 21835 /*[HomeMatic\8 Kanalschalter Düfte\8 Kanalschalter Duft Bad\Duft Bad Kanal 01]*/;
$ID_Inhalt = 29935 /*[HomeMatic\8 Kanalschalter Düfte\8 Kanalschalter Duft Bad\Duft Bad\Inhalt]*/;
$ID_State_K4 = 49315 /*[HomeMatic\8 Kanalschalter Düfte\8 Kanalschalter Duft Bad\Kanal 04\STATE]*/;
$ID_State_K8 = 33847 /*[HomeMatic\8 Kanalschalter Düfte\8 Kanalschalter Duft Bad\Kanal 08\STATE]*/;
$Modus = GetValueString(47575 /*[Programme\Modus\Modus]*/);
$Nachtmodus = GetValueBoolean(22306 /*[Programme\Modus\Nachtmodus]*/);
$Fenster = GetValueInteger(24266 /*[HomeMatic\Fensterkontakte\Fensterkontakt Bad\Fensterkontakt Bad\STATE]*/);
//--- ab hier nichts mehr ändern ------------------------------------------------------------------------
// --- zum schnellen anlegen der Ereignisse einmal Script direkt ausführen ---
if ($_IPS['SENDER'] == "Execute"){
if (count(IPS_GetScriptEventList($_IPS['SELF'])) == 0){ // wenn keine Ereignisse zugewiesen
$eid = IPS_CreateEvent(0); //Ausgelöstes Ereignis
IPS_SetEventTrigger($eid, 1, $ID_State_K4); // bei Variablenänderung
IPS_SetParent($eid, $_IPS['SELF']); //Ereignis zuordnen
IPS_SetEventActive($eid, true); // Ereignis aktivieren
$eid = IPS_CreateEvent(0); //Ausgelöstes Ereignis
IPS_SetEventTrigger($eid, 1, $ID_State_K8); // bei Variablenänderung
IPS_SetParent($eid, $_IPS['SELF']); //Ereignis zuordnen
IPS_SetEventActive($eid, true); //Ereignis aktivieren
$eid = IPS_CreateEvent(1); //Zyklisches Ereignis
IPS_SetEventCyclic($eid,0,0,0,2,2,30); //alle 30 min.
IPS_SetParent($eid, $_IPS['SELF']); //Ereignis zuordnen
IPS_SetEventActive($eid, true); // Ereignis aktivieren
return;
}
}
// --- zurücksetzen des Verbrauchszählers ---
if ($_IPS['SENDER'] == "Variable"){
if (($_IPS['VARIABLE'] == $ID_State_K4) or ($_IPS['VARIABLE'] == $ID_State_K8)){
if ((GetValueBoolean($ID_State_K4) == true) and (GetValueBoolean($ID_State_K8) == true)){
SetValueFloat($ID_Inhalt,100);
HM_WriteValueBoolean(IPS_GetParent($ID_State_K4),"STATE",false);
HM_WriteValueBoolean(IPS_GetParent($ID_State_K8),"STATE",false);
}
return;
}
}
//-----------------------------------------------------------------------
// --- Bedingungen für nicht sprühen bei TimerEvent (zeitl. Steuerung) ---
if ($_IPS['SENDER'] == "TimerEvent"){
if ($Fenster != 0) return;
if ($Nachtmodus == true) return;
if ($Modus == "Urlaub") return;
if ($Modus == "Abwesend") return;
}
// --------------------------------------
if ((GetValueFloat($ID_Inhalt)) > 0) { // falls noch was in der Dose ist ...
// Sprüher für 6 Sekunden einschalter
HM_WriteValueFloat($Instance ,"ON_TIME", 6);
HM_WriteValueBoolean($Instance ,"STATE",true);
// Berechnung der neuen Füllmenge in % (lt. Hersteller 2400 (2500 gemessen) Stöße pro Dose)
SetValueFloat($ID_Inhalt,(GetValueFloat($ID_Inhalt) - 0.04));
}
?>
Grüße v. Doc