es geht um folgende Aufgabenstellung:
Ich habe Pflanzen die eine Trockenphase benötigen (ca. 4 Tage, kann sich von Pflanze zu Pflanze unterscheiden) bis sie wieder gegossen werden müssen. Die Trockenphase möchte ich mit einem Switch manuell setzen/starten. Nach einer definierten Anzahl von Tagen (in meiner aktuellen Umsetzung 4 Tage) soll ein Switch auf ON gesetzt werden.
Es soll auch eine Benachrichtigung erfolgen. Den Switch schalte ich wieder manuell auf OFF wenn ich die jeweilige Pflanze gegossen habe.
Das wäre ja mit dem Expire ja relativ einfach umgesetzt, allerdings möchte ich den Wert der vergangen Tage der Trockenphase auch bei einem Neustart vom System nicht verlieren, folgend meine aktuell Umsetzung. Die bis jetzt funktioniert, aber sehr aufwändig in der Konfiguration ist.
Folgende Dinge stören mich:
• Ich möchte mehrere Pflanzen (an die 50 Stück) damit im Blick haben.
• Es wird schnell unübersichtlich den richtigen Switch zu finden – wenn mal alle 50 Stück wählbar sind (Bedienung)
• Ich frage mich ob es nicht einen besseren Lösungsansatz gibt um das ganze zu realisieren
Eines noch vorne weg, ich bin Anfänger und Code schreiben ist aktuell mehr ein zusammen kopieren und anpassen (hoffe das wird besser;)
Zum Code, habe das mittels Counter umgesetzt der durch einen Cron ein mal am Tag den Wert um +1 hoch zählt. Nach 4 Tagen erfolgt die Benachrichtigung. Der Counter wird dann wieder auf 0 gesetzt. Die Counter werden in einer influxdb und mapdb persistiert.
Bin gespannt was ihr dazu sagt, vor allem zu anderen Lösungsansätzen.
Items:
Code: Alles auswählen
Switch virtual_1_Pflanze_1_StartTrockenphase "Pflanze 1 Trockenphase [%s]" <sun>
Switch virtual_1_Pflanze_1_Gegossen "Pflanze 1 Gießen [%s]" <water>
Number virtual_1_Pflanze_1_Counter "Pflanze 1 Counter [%d]" <time>
Code: Alles auswählen
var Number virtual_1_currentCounter = 0
rule "Pflanze 1 Counter"
when
Time cron "0 40 18 1/1 * ? *"
then
logInfo("Counter State: ", virtual_1_Pflanze_1_Counter.state.toString)
if (virtual_1_Pflanze_1_StartTrockenphase.state == OFF) {
return;
}
else if (virtual_1_Pflanze_1_Counter.state == NULL || virtual_1_Pflanze_1_Counter.state > 4) {
virtual_1_currentCounter = 0
virtual_1_Pflanze_1_Counter.postUpdate(0)
}
else (virtual_1_Pflanze_1_StartTrockenphase.state == ON) {
virtual_1_currentCounter = virtual_1_Pflanze_1_Counter.state as Number
logInfo("CurrentCounter: ", virtual_1_currentCounter.toString)
virtual_1_currentCounter = virtual_1_currentCounter + 1
virtual_1_Pflanze_1_Counter.postUpdate(virtual_1_currentCounter)
}
if (virtual_1_currentCounter == 4 && virtual_1_Pflanze_1_StartTrockenphase.state == ON) {
virtual_1_Pflanze_1_Gegossen.sendCommand(ON)
sendNotification("asdf@asdf.com", "--> 1 Pflnaze 1 will Wasser")
virtual_1_Pflanze_1_StartTrockenphase.sendCommand(OFF)
virtual_1_Pflanze_1_Counter.postUpdate(0)
}
end
Alex