Emailbenachrichtigung verbessern

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

zinnik
Beiträge: 174
Registriert: 7. Sep 2021 11:28
Answers: 0

Emailbenachrichtigung verbessern

Beitrag von zinnik »

Hallo

Ich hab mir eine Rule erstellt worauf ich benachrichtigt werde wenn der Topf der Pflanzen zu trocken ist.

Nun bekomme ich ich die Mail aber jede Stunde zwischen 6 und 23 Uhr. Kann man die Rule verbessern so das diese Email nur einmal verschickt wird.

Die Prüfung der Trockenheit sollte aber trotzdem in dem Zeitraum stattfinden oder besser noch den ganzen Tag über aber es soll nur einmal eine Mail versendet werden.

Ich nutze das mail Binding.

Code: Alles auswählen

rule "Email_Rhododendron"
when
    Time cron "0 0 6-23 * * ?"   // täglich zwischen 6-23 Uhr"0 0 6-23 * * ?"      Test Minuten nach der vollen Stunde"0 06 * * * ? *"
then

    logInfo("Bewässerung dynamisch Blumenbeet", "gestartet- geplante Startzeit 9 Uhr")
    if(BodenfeuchtesensorTopfpflanzen3_Bodenfeuchtigkeit.state instanceof Number)                    // enthält das Item einen gültigen Zahlenwert?
        if((BodenfeuchtesensorTopfpflanzen3_Bodenfeuchtigkeit.state as Number).floatValue >= 60)     // größer oder gleich 60?
            return;                                                                         // dann Rule abbrechen

    if(BodenfeuchtesensorTopfpflanzen3_Bodentemperatur.state instanceof Number)                      // enthält das Item einen gültigen Zahlenwert?
        if((BodenfeuchtesensorTopfpflanzen3_Bodentemperatur.state as Number).floatValue <= 1)        // kleiner oder gleich 1?
            return;                                                                         // dann Rule abbrechen

    val mailActions = getActions("mail","mail:smtp:Gmail_zinnik_sven_SMTP")
    val success = mailActions.sendMail("zinnik.sven@gmail.com", "Bodenfeuchtigkeit Rododendron", "Achtung !!! Die Pflanze brauch Wasser")

end

Lg Sven
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

Benutzeravatar
udo1toni
Beiträge: 13999
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Emailbenachrichtigung verbessern

Beitrag von udo1toni »

Die Frage ist erst mal, warum Du überhaupt so vorgehst.

Dich interessiert, ob die Bodenfeuchte unter 60 % ist. Es interessiert Dich nicht zu einem exakten Zeitpunkt, Du willst lediglich die Nachricht auf einen bestimmten Zeitraum begrenzen - und mutmaßlich spielt es eine untergeordnete Rolle, wann innerhalb des Zeitfensters die Mail versandt wird, also nicht zwingend zur vollen Stunde, sondern lediglich irgendwann zwischen 6 und 23 Uhr (wobei Du ja sogar schreibst, dass es am besten rund um die Uhr liefe)

Code: Alles auswählen

var Boolean bMailSent = false

rule "Email Rhododendron"
when
    Item BodenfeuchtesensorTopfpflanzen3_Bodenfeuchtigkeit changed
then
    if(bMailSent) {
        logDebug("mailPlant","dynamische Bewässerung: Mail wurde bereits versandt.")
        return;
    }
    if(!(newState instanceof Number)) {                                                            // newState enthält den aktuellen Status des triggernden Items
        logWarn("mailPlant","dynamische Bewässerung: Sensor liefert ungültigen Wert: {}",newState)
        return;
    }
    if((newState as Number).floatValue >= 60) {
        logDebug("mailPlant","dynamische Bewässerung: Bodenfeuchte ({}%) ausreichend.")
        return;
    }
    if(BodenfeuchtesensorTopfpflanzen3_Bodentemperatur.state instanceof Number) {                  // enthält das Item einen gültigen Zahlenwert?
        if((BodenfeuchtesensorTopfpflanzen3_Bodentemperatur.state as Number).floatValue <= 1) {    // kleiner oder gleich 1?
            logDebug("mailPlant","dynamische Bewässerung: Temperatur unter 1 °C.")
            return;                                                                                // dann Rule abbrechen
        }
    } else
        logWarn("mailPlant","dynamische Bewässerung: Temperatursensor liefert ungültigen Wert.")

    val mailActions = getActions("mail","mail:smtp:Gmail_zinnik_sven_SMTP")
    val success = mailActions.sendMail("zinnik.sven@gmail.com", "Bodenfeuchtigkeit Rhododendron", "Achtung !!! Die Pflanze brauch Wasser")
    bMailSent = true
end

rule "Mail-Marker zurücksetzen"
when
    Time cron "0 0 6 * * ?" // täglich um 6 Uhr
then
    bMailSent = false
end
Beide Rules müssen in einer gemeinsamen rules-Datei gespeichert sein, da sie auf die selbe globale Variable zugreifen. Man kann dazu natürlich auch ein Switch Item verwenden, dann können die Rules auch über die UI angelegt werden oder in unterschiedlichen Dateien gespeichert sein.

Die zweite Rule dient nur dazu, einen eventuell gesetzten Merker morgens um 6 Uhr zurückzusetzen - selbstverständlich geht auch ein anderer Zeitpunkt.
Die erste Rule triggert bei einer Wertänderung, prüft, ob bereits eine Mail gesendet wurde (über den Merker) und falls das nicht der Fall ist, werden die Werte geprüft wie gehabt (allerdings mit sinnvollen log-Meldungen).
Wird die MAil versandt, wird zusätzlich auch noch der Merker gesetzt, so dass die Rule bis zum nächsten Tag immer sofort beendet wird.
Die Debug-Meldungen werden lediglich ausgegeben, wenn der Log-Level für org.openhab.core.module.script.mailPlant auf DEBUG gesetzt wird. Liefert einer der Sensoren keinen gültigen Wert so wird dies mit einer Warnmeldung quittiert (nur, solange an diesem Tag noch keine Mail gesendet wurde)

Im Ergebnis bekommst Du maximal einmal am Tag eine Mail, falls die Bodenfeuchte unter 60 fällt, ansonsten wird nur bei aktivierten Debug-Modus bei jedem Trigger der Rule eine log-Meldung geschrieben, warum die Rule abgebrochen wurde.

Man könnte den Merker auch über eine Änderung der Bodenfeuchte über z.B. 65 % zurücksetzen, dann muss die Prüfung von bMailSent natürlich später innerhalb der Rule erfolgen. Es gibt dann nur noch eine Rule, aber auch nur noch eine Mail pro Trockenheit, nicht eine Mail pro Tag - da kommt es halt auch drauf an, wie oft Du Deine Mails checkst...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 174
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: Emailbenachrichtigung verbessern

Beitrag von zinnik »

Sorry dass ich mich nicht früher gemeldet habe. Hatte wenig >Zeit.

Du fragtest warum ich die Rule so geschrieben habe? Weil ich es einfach nicht besser kann. Hatte mir ein vorhanden Teil aus der bewässerungsrule genommen und versucht was daraus zu machen. Sorry
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

Benutzeravatar
udo1toni
Beiträge: 13999
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Emailbenachrichtigung verbessern

Beitrag von udo1toni »

Na, Du musst Dich nicht entschuldigen :)
Es ist aber für den reibungslosen Betrieb von openHAB nicht ganz unwichtig, zu verstehen, dass openHAB konsequent eventbasiert arbeitet, wo immer das möglich ist, sollte man also seine Rules auch entsprechend programmieren, also entweder auf Wertänderungen oder auf Befehle reagieren. Zeitsteuerung ist natürlich genauso möglich, sollte dann aber gezielt eingesetzt werden.
Hier wäre es ja nur so, dass die Rule einfach stumpf zu bestimmten Zeiten ausgeführt wird, um ein paar Werte miteinander zu verrechnen. Da aber die Uhrzeit bei der Berechnung kein Faktor ist, läuft die Rule eventuell sinnlos, weil sich z.B. Eingangswerte nicht geändert haben und somit auch das gleiche Ergebnis herauskommen wird, wie beim Durchlauf davor.
Aus dem gleichen Grund ist received update als Trigger mit Vorsicht zu genießen. Es gibt Beispiele, wo das der korrekte Trigger ist, z.B. für meine Klingeltaster, denn die werden ausschließlich als ON gemeldet, wenn die Taste gedrücktwird, es folgt aber kein OFF, wenn die Taste wieder losgelassen wird. changed fürde also nur ein einziges Mal nach einem Neustart triggern, dann nicht mehr. Die Alternative - das Item über eine Rule manuell zurückzusetzen - ist keine gute Lösung, weil sie ungleich mehr Code verlangt, als einfach den anderen Trigger zu verwenden :)
In den meisten Fällen wird man aber auf Wertänderungen warten, um dann erneut Berechnungen vorzunehmen
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 174
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: Emailbenachrichtigung verbessern

Beitrag von zinnik »

Danke Udo für deine tollen Beiträge und Erklärungen würde dir gerne mal ein *Bierchen* spendieren.

Lg sven
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

zinnik
Beiträge: 174
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: Emailbenachrichtigung verbessern

Beitrag von zinnik »

Hallo hab noch mal ne <Frage zu einer anderen einfachen <Rule

wenn ich diese Rule über die UI starte und erstelle läuft sie einwandfrei.

Aber wenn ich sie im rules Ordner erstelle startet sie nicht Irgendwas funktioniert nicht am "when" Befehl.

UI Rule:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: Bewaesserung_1_STATE
      command: ON
    type: core.ItemCommandTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: >-
        val mailActions = getActions("mail","mail:smtp:Gmail_zinnik_sven_SMTP")

        val success = mailActions.sendMail("zinnik.sven@gmail.com", "Blumenbeet Bewaesserung gestartet", "Die Bewaesserung von Blumenbeet ist gestartet")
    type: script.ScriptAction
Rule über Rules Ordner DSL

Code: Alles auswählen

rule "Email Bewässerung Blumenbeet neu"
when
    Item Bewaesserung_1_STATE received command [ON]  // Wenn ich normale Klammern(ON) nutze geht es auch nicht. Ich glaube nur bei "changed" geh es aber dann bekomme ich auch bei dem "OFF) eine Meldung
then
    val mailActions = getActions("mail","mail:smtp:Gmail_zinnik_sven_SMTP")
val success = mailActions.sendMail("zinnik.sven@gmail.com", "Bewaesserung Blumenbeet gestartet", "Die Bewaesserung von Blumenbeet ist gestartet")
end
Hat da jemand eine Idee?

Lg Sven
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

Benutzeravatar
udo1toni
Beiträge: 13999
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Emailbenachrichtigung verbessern

Beitrag von udo1toni »

Der trigger muss ohne Klammern geschrieben werden.

Code: Alles auswählen

rule "Email Bewässerung Blumenbeet neu"
when
    Item Bewaesserung_1_STATE received command ON
then
    val mailActions = getActions("mail","mail:smtp:Gmail_zinnik_sven_SMTP")
    val success = mailActions.sendMail("zinnik.sven@gmail.com", "Bewaesserung Blumenbeet gestartet", "Die Bewaesserung von Blumenbeet ist gestartet")
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 174
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: Emailbenachrichtigung verbessern

Beitrag von zinnik »

udo1toni hat geschrieben: 30. Jun 2023 07:52 Der trigger muss ohne Klammern geschrieben werden.

Code: Alles auswählen

rule "Email Bewässerung Blumenbeet neu"
when
    Item Bewaesserung_1_STATE received command ON
then
    val mailActions = getActions("mail","mail:smtp:Gmail_zinnik_sven_SMTP")
    val success = mailActions.sendMail("zinnik.sven@gmail.com", "Bewaesserung Blumenbeet gestartet", "Die Bewaesserung von Blumenbeet ist gestartet")
end
Das funktioniert leider nicht. komisch
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

Benutzeravatar
udo1toni
Beiträge: 13999
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Emailbenachrichtigung verbessern

Beitrag von udo1toni »

Doch, das funktioniert, sofern Du nicht weitere Fehler in der Datei hast, die verhindern, dass openHAB die Datei abarbeitet.

Punkt 1: Speicherort korrekt? Speicherort ist exakt $OPENHAB_CONF/rules/ (z.B. auf einem Pi mit Standard Installation /etc/openhab/rules/, nicht in einem weiteren Unterordner)
Punkt 2: Dateiendung korrekt? Der Dateiname endet zwingend auf .rules (Groß/Kleinschreibung beachten)
Punkt 3: Irgendwelche Fehlermeldungen in openhab.log? Dort muss nach jedem Speichern der Datei sowie beim Neustart von openHAB eine Meldung der Art Loading model 'my.rules' wobei hier my.rules der Dateiname ist. Wenn da irgendwas vonwegen therefor ignoring it steht, weißt Du, dass die Datei zwar gelesen wurde, aber so fehlerhaft ist, dass openHAB sie sicherheitshalber ignoriert.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 174
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: Emailbenachrichtigung verbessern

Beitrag von zinnik »

Achso weitere Fehler in der Datei ja das stimmt hab die anderen email benachrichtigungen nicht angepasst. Probier ich dann gleich aus. Bin jetzt mal deinem Rat gefolgt und habe eine Datei für mehrere Rules der gleichen Art angelegt.

Lg sven
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

Antworten