Haushaltsgerät E-Mail sobald fertig

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
denni
Beiträge: 24
Registriert: 4. Sep 2019 15:25
Answers: 0

Haushaltsgerät E-Mail sobald fertig

Beitrag von denni »

Hallo zusammen,

ich habe ein Haushaltsgerät, dass folgende Leistungsaufnahme hat.

Bei Standby: 2 Watt
Während es läuft: > 10 Watt
Nach dem Durchlauf: 2 Watt

Ich möchte anhand der Daten feststellen können wann das Gerät fertig ist mit einem Programm.
Also wenn es einmal >10 Watt war und dann wieder 2 Watt erreicht hat.
Dazu verwende ich einen boolean merker. Siehe Code.

Code: Alles auswählen

var boolean merker = false

rule "Maschine war an"
when 
        Item KSonoffPow_Watt received update
then
        if (KSonoffPow_Watt.state > 10 ){
        merker = true
        }
        else{
        merker = false
        }
end

rule "E-Mail senden"
when
        Item KSonoffPow_Watt received update
then    
        if(merker == true && KSonoffPow_Watt.state < 10 ){
        sendMail("name@name.name", "Die Maschine ist fertig", "gesendet von deinem openhab")
        }

        merker = false

end
ich habe das system schon neu hochgefahren, weil ich gelesen habe, dass er die globale Variable sonst nicht initialisiert/declariert.
Aber leider funktioniert es nicht. Ich vermute dass ein Syntaxfehler das Problem ist.

Hat jemand einen Tipp was falsch sein könnte?

Vielen Dank.
Zuletzt geändert von denni am 24. Sep 2019 06:48, insgesamt 2-mal geändert.

hurra
Beiträge: 66
Registriert: 28. Aug 2019 10:52
Answers: 0

Re: Haushaltsgerät E-Mail sobald fertig

Beitrag von hurra »

Servus,

bei deinem Code kann ich dir leider als Anfänger auch nicht direkt weiterhelfen.
Ich verwende, wenn rules nicht funktionieren, immer eine loginfo:
logInfo("größer 10 Watt und Merker TRUE")
und schreibe das in einige positionen des Codes mit eindeutigen Beschreibungen. So kann ich im Log sehen, bis wohin die rule läuft und wo es vielleicht steht oder stockt.

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Haushaltsgerät E-Mail sobald fertig

Beitrag von sihui »

hurra hat geschrieben: 24. Sep 2019 06:43 logInfo("größer 10 Watt und Merker TRUE")
Wobei diese Syntax ggf. auch schon einen Fehler verursacht da ein Teil fehlt:

https://www.openhab.org/docs/configurat ... ng-actions

Code: Alles auswählen

logInfo("Garage", "This is a complete String")
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Haushaltsgerät E-Mail sobald fertig

Beitrag von peter-pan »

Bist du sicher, dass dein Pow auch richtig eingebunden ist ?

Probier mal deine Regel so abzuändern:

Code: Alles auswählen

var boolean merker = false

rule "Maschine war an"
when 
        Item KSonoffPow_Watt received update
then
        logInfo("Maschine","Rule triggert, Pow Leistung verändert sich auf: {}", KSonoffPow_Watt.state)  // Rule wurde getriggert
        if (KSonoffPow_Watt.state > 10 ){
            merker = true
            logInfo("Maschine","Merker verändert sich auf: {}", merker)                   // Variable wird auf true gesetzt
        }
        else{
            merker = false
            logInfo("Maschine","Merker verändert sich auf: {} Leistung ist: {}", merker,KSonoffPow_Watt.state )                   // Variable wird auf false gesetzt, eigentlich überflüssig, da false bereits gesetzt
        }
end
Evt. könntest du auch mal im when-Teil

Code: Alles auswählen

Item KSonoffPow_Watt changed
probieren.

Test sieht so aus ( mit received update):

Code: Alles auswählen

2019-09-24 10:38:57.500 [INFO ] [ipse.smarthome.model.script.Maschine] - Pow Leistung verändert sich auf: 11
2019-09-24 10:38:57.504 [INFO ] [ipse.smarthome.model.script.Maschine] - Merker verändert sich auf: true
2019-09-24 10:39:44.822 [INFO ] [ipse.smarthome.model.script.Maschine] - Pow Leistung verändert sich auf: 0
2019-09-24 10:39:44.835 [INFO ] [ipse.smarthome.model.script.Maschine] - Merker verändert sich auf: false, Leistung ist 0
Die Regel sollte so also funktionieren.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: Haushaltsgerät E-Mail sobald fertig

Beitrag von udo1toni »

Die erste Frage wäre, welchen Itemtyp Du verwendest. Also wie ist KSonoffPow_Watt exakt definiert.

Deine Rules sind so auch nicht so ganz günstig. Dein Boolean wird nämlich zurückgesetzt, sobald der Verbrauch geringer als über 10 Watt ist, nicht erst, wenn der Verbrauch auf 2 Watt gesunken ist.
Abgesehen davon brauchst Du nur eine Rule, schließlich werden beide Rules durch den selben Trigger angestoßen.

Gesetzt den Fall, KSonoffPow_Watt ist als Number definiert (und nicht z.B. Number:Power), sollte eine passende Rule so aussehen:

Code: Alles auswählen

// globale Variablen werden immer zu Beginn der Datei definiert!
var Boolean bMerker = false                 // Primitives vermeiden

rule "E-Mail bei Ende Maschine"
when 
    Item KSonoffPow_Watt received update    // changed wäre vermutlich genauso gut
then
    logDebug("machineEnd","Rule gestartet!")
    if(!(KSonoffPow_Watt.state instanceof Number)) {
        logWarn("machineEnd","KSonoffPow_Watt hat ungültigen Status! ({})",KSonoffPow_Watt.state)
        return;
    }
    val Number nPow = KSonoffPow_Watt.state as Number
    if(nPow > 10 && bMerker != true) {
        logDebug("machineEnd","Maschine gestartet!")
        bMerker = true
    } else if(nPow < 3 && bMerker != false) {
        logDebug("machineEnd","Maschine fertig!")
        bMerker = false
        sendMail("name@name.name", "Die Maschine ist fertig", "gesendet von Deinem openHAB")
    }
end
Wenn Du die Debug-Meldungen sehen möchtest, musst Du, während openHAB läuft, über die Karaf Konsole das logLevel für diese Rule erhöhen:

Code: Alles auswählen

openhabian@openhab2:~$ openhab-cli console

Logging in as openhab

                          __  _____    ____
  ____  ____  ___  ____  / / / /   |  / __ )
 / __ \/ __ \/ _ \/ __ \/ /_/ / /| | / __  |
/ /_/ / /_/ /  __/ / / / __  / ___ |/ /_/ /
\____/ .___/\___/_/ /_/_/ /_/_/  |_/_____/
    /_/                        2.5.0-SNAPSHOT
                               Build #1502

Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown openHAB.

openhab> bundle:list -s | grep script
139 x Active   x  80 x 0.11.0.201901111358    x org.eclipse.smarthome.model.script
140 x Active   x  80 x 0.11.0.201901111358    x org.eclipse.smarthome.model.script.ide
141 x Active   x  80 x 0.11.0.201901111358    x org.eclipse.smarthome.model.script.runtime
228 x Active   x  75 x 0.11.0.201901111358    x org.eclipse.smarthome.transform.javascript
openhab> log:set DEBUG org.eclipse.smarthome.model.script.machineEnd                        <<<<<<
openhab> log:list
Logger                                             │ Level
───────────────────────────────────────────────────┼──────
ROOT                                               │ WARN
javax.jmdns                                        │ ERROR
org.apache.karaf.jaas.modules.audit                │ INFO
org.apache.karaf.kar.internal.KarServiceImpl       │ ERROR
org.apache.karaf.shell.support                     │ OFF
org.apache.sshd                                    │ WARN
org.eclipse.lsp4j                                  │ OFF
org.eclipse.smarthome                              │ INFO
org.eclipse.smarthome.model.script                 │
org.eclipse.smarthome.model.script.machineEnd      │ DEBUG                     <<<<<<
org.jupnp                                          │ ERROR
org.openhab                                        │ INFO
org.ops4j.pax.url.mvn.internal.AetherBasedResolver │ ERROR
org.ops4j.pax.web.pax-web-runtime                  │ OFF
smarthome.event                                    │ INFO
smarthome.event.InboxUpdatedEvent                  │ ERROR
smarthome.event.ItemAddedEvent                     │ ERROR
smarthome.event.ItemRemovedEvent                   │ ERROR
smarthome.event.ItemStateEvent                     │ ERROR
smarthome.event.ThingAddedEvent                    │ ERROR
smarthome.event.ThingRemovedEvent                  │ ERROR
smarthome.event.ThingStatusInfoEvent               │ ERROR
openhab> logout
openhabian@openhab2:~$
Achtung! der eigentliche Befehl ist versionabhängig, weil sich der Pfad geändert hat. - seit OH2.5.0-M2, wenn ich mich richtig erinnere.
Aber auch bei richtig alten Versionen ist der Pfad ein anderer, weshalb ich hier direkt zeige, wie Du den korrekten Pfad bestimmst:

1. Schritt: Einloggen in die Karaf Konsole
2. Schritt: Suche nach allen Bundles, in deren Name das Wort script vorkommt.
3. Schritt; logging auf einen bestimmten Level setzen, mit dem vorher gefundenen Pfad (endet mit dem Wort script) und der Erweiterung um den vergebenen loggernamen (der erste String im log-Befehl) (Ich habe die Zeile oben mit <<<<<< markiert)
4. Schritt: Kontrolle, ob der Eintrag stimmt. (Ich habe die Zeile oben mit <<<<<< markiert)
5. Schritt logout.

Diese Änderungen sind unmittelbar gültig. Der Witz ist, dass Du das Logging nun nach Belieben ein- und ausschalten kannst, mehr noch, Du kannst bestimmen, welche Meldungen geloggt werden, keine (Level OFF), alle (Level DEBUG bzw. für openHAB-Komponenten gar TRACE), nur bestimmte (Level INFO, alles ab info, Level WARN, alles ab warn, Level ERROR, nur error Logs)

Es lohnt sich also, das Logging so einzubauen, da die Rule nicht mehr angefasst werden muss, um die Anzahl der Logg Meldungen zu verringern.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

denni
Beiträge: 24
Registriert: 4. Sep 2019 15:25
Answers: 0

Re: Haushaltsgerät E-Mail sobald fertig

Beitrag von denni »

Danke euch allen für die Tipps. Das Code Beispiel von Udo hat ans Ziel geführt.

Antworten