Rule Counter/Erinnerung nach mehreren Tagen (Neustart sicher)

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
meefischli
Beiträge: 5
Registriert: 9. Mai 2020 06:35
Answers: 0

Rule Counter/Erinnerung nach mehreren Tagen (Neustart sicher)

Beitrag von meefischli »

Hallo zusammen,

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>
Rule:

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
Bin gespannt was ihr sagt und danke im voraus!
Alex

ThomasW
Beiträge: 33
Registriert: 9. Jan 2021 16:12
Answers: 1

Re: Rule Counter/Erinnerung nach mehreren Tagen (Neustart sicher)

Beitrag von ThomasW »

Hey,

dein Projekt sieht sehr groß aus bei 50 Pflanzen jeweils 2 Schalter das wird sicher unübersichtlich.
Würde es nicht reichen einen Schalter zu haben OFF= Pflanze muss gegossen werden ON= Counter läuft nicht gießen?
Das würde sich auch in einer GUI deutlich schöner darstellen lassen.

Die Lösung mit dem Counter finde ich gut so bleibt dir der Wert immer erhalten.
Wenn du die Rule noch etwas dynamischer gestaltest so das sie alle Counter von deinen Pflanzen durchläuft z.b. mithilfe einer gruppe sollte das auch nicht viel aufwand sein.

Ein Vorschlag noch wenn du verschiedene Zeiten hast würde ich mir diese ebenfalls in ein Item schreiben mit welchem du dann vergleichen kannst ob der jeweilige Counter abgelaufen ist.

Code: Alles auswählen

if (virtual_1_currentCounter == 4 
ersetzen durch

Code: Alles auswählen

if (virtual_1_currentCounter == PflanzeTrockenzeit 
OH3 auf RPI4,
Heizungssteuerung: Fritz DECT,
Zigbee: Conbee2 über Phoscon-GW: Aqara Opple Schalter, Aqara Temperatursensoren, Aqara Fenstersensoren, Aqara Aktoren, IKEA Lichter
Astro Binding
DWDUnwetter Binding
OpenWeatherMap Binding
FritzBox TR 064 Binding
iRobot Binding
Telegramm Binding für Benachrichtigungen und Steuerung von unterwegs
Rolladensteuerung: Rademacher DuoFern über HTTP Binding

meefischli
Beiträge: 5
Registriert: 9. Mai 2020 06:35
Answers: 0

Re: Rule Counter/Erinnerung nach mehreren Tagen (Neustart sicher)

Beitrag von meefischli »

Hallo Thomas,
das verwenden von nur einem Switch macht auf jeden Fall Sinn – Danke! Das macht es schon schlanker. Ich habe mit Gruppen noch nicht all zu viel gemacht, werde ich mir aber auf jeden Fall mal anschauen und versuchen umzusetzen. Hier dürfte ich richtig aufgehoben sein wenn ich das so überfliege: https://community.openhab.org/t/design- ... ules/20512

ThomasW
Beiträge: 33
Registriert: 9. Jan 2021 16:12
Answers: 1

Re: Rule Counter/Erinnerung nach mehreren Tagen (Neustart sicher)

Beitrag von ThomasW »

Ich habe da mal auf die schnelle was gebastelt

Items:

Code: Alles auswählen

Group   gCounter                "Counter gruppe"     
Group   gTrockenzeit            "Trocknungszeit"             
Group   gSwTrockenzeit          "Schalter"         
Number  Pflanze1_counter        "Pflanze 1 counter"       (gCounter)
Number  Pflanze1_trockenzeit    "Pflanze 1 Zeit"        (gTrockenzeit)
Switch  Pflanze1_sw_trockenzeit  "Pflanze 1 schalter"       (gSwTrockenzeit)
und die rule dazu:

Code: Alles auswählen

rule "Pflanze 1 Counter"

when

    Time cron "0 40 18 1/1 * ? *" 

then

     gCounter.members.forEach[ i | 
     val pflanze = i.name.split("_").get(0)
     var trockenzeit = gTrockenzeit.members.filter[j|j.name.contains(pflanze)].head
     var schalter = gSwTrockenzeit.members.filter[j|j.name.contains(pflanze)].head
     var c = i.state as Number
     var t = trockenzeit.state as Number
     if(schalter.state == ON && c < t){
         i.postUpdate(c+1)
         }
      else if(schalter.state == ON && c == t){
      //sendNotification("asdf@asdf.com", "--> "+ pflanze +" will Wasser")
      schalter.sendCommand(OFF)
      i.postUpdate(0)
      }   
     ]
 end
du musst nur alle deine Pflanzen entsprechend der Vorlage Pflanze1 anlegen und in die Gruppen einsortieren habe mir gedacht eine einstellbare trockenzeit für die Pflanzen könnte sinvoll sein
OH3 auf RPI4,
Heizungssteuerung: Fritz DECT,
Zigbee: Conbee2 über Phoscon-GW: Aqara Opple Schalter, Aqara Temperatursensoren, Aqara Fenstersensoren, Aqara Aktoren, IKEA Lichter
Astro Binding
DWDUnwetter Binding
OpenWeatherMap Binding
FritzBox TR 064 Binding
iRobot Binding
Telegramm Binding für Benachrichtigungen und Steuerung von unterwegs
Rolladensteuerung: Rademacher DuoFern über HTTP Binding

meefischli
Beiträge: 5
Registriert: 9. Mai 2020 06:35
Answers: 0

Re: Rule Counter/Erinnerung nach mehreren Tagen (Neustart sicher)

Beitrag von meefischli »

Hallo Thomas,

sehr cool, vielen Dank! Das schaut jetzt so übersichtlich aus :) Ich werde Testen und dir berichten. Eine Frage noch vorab, den Wert für die jeweilige *_trockenzeit vergebe ich mit einer Rule bei einem Systemstart oder gibt es auch etwas clevereres zB. einen default Wert am Item?

VG

ThomasW
Beiträge: 33
Registriert: 9. Jan 2021 16:12
Answers: 1

Re: Rule Counter/Erinnerung nach mehreren Tagen (Neustart sicher)

Beitrag von ThomasW »

Ich würde mir dafür eine Sitemap erstellen so das ich den jederzeit anpassen kann.
Und den wert dann über persistens speichern zum wiederherstellen beim neustart
OH3 auf RPI4,
Heizungssteuerung: Fritz DECT,
Zigbee: Conbee2 über Phoscon-GW: Aqara Opple Schalter, Aqara Temperatursensoren, Aqara Fenstersensoren, Aqara Aktoren, IKEA Lichter
Astro Binding
DWDUnwetter Binding
OpenWeatherMap Binding
FritzBox TR 064 Binding
iRobot Binding
Telegramm Binding für Benachrichtigungen und Steuerung von unterwegs
Rolladensteuerung: Rademacher DuoFern über HTTP Binding

meefischli
Beiträge: 5
Registriert: 9. Mai 2020 06:35
Answers: 0

Re: Rule Counter/Erinnerung nach mehreren Tagen (Neustart sicher)

Beitrag von meefischli »

Ich sehe schon, ich denke zu kompliziert… 

meefischli
Beiträge: 5
Registriert: 9. Mai 2020 06:35
Answers: 0

Re: Rule Counter/Erinnerung nach mehreren Tagen (Neustart sicher)

Beitrag von meefischli »

Abend Thomas,
habe die ersten 20 Pflanzen eingefügt, funktioniert 1A und gelernt habe ich auch noch etwas - Danke noch mal!
vg

ThomasW
Beiträge: 33
Registriert: 9. Jan 2021 16:12
Answers: 1

Re: Rule Counter/Erinnerung nach mehreren Tagen (Neustart sicher)

Beitrag von ThomasW »

Kein Problem so komme ich auch ein wenig zum lernen (bin auch noch nicht so lange mit OH beschäftigt und habe länger nicht programmiert)
Danke für deine Rückmeldung freut mich das es klappt.
vg
OH3 auf RPI4,
Heizungssteuerung: Fritz DECT,
Zigbee: Conbee2 über Phoscon-GW: Aqara Opple Schalter, Aqara Temperatursensoren, Aqara Fenstersensoren, Aqara Aktoren, IKEA Lichter
Astro Binding
DWDUnwetter Binding
OpenWeatherMap Binding
FritzBox TR 064 Binding
iRobot Binding
Telegramm Binding für Benachrichtigungen und Steuerung von unterwegs
Rolladensteuerung: Rademacher DuoFern über HTTP Binding

Antworten