Anfängerprobleme: Waschmaschine Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
jnnsfnk
Beiträge: 5
Registriert: 13. Mai 2020 15:33
Answers: 0

Anfängerprobleme: Waschmaschine Rule

Beitrag von jnnsfnk »

Hallo zusammen,

mit dem Einzug in die neue Wohnung ist auch das Projekt "Smart Home" gestartet.
Ich habe einige Shellys in der Wohnung verbaut und auch erfolgreich in OpenHAB eingebunden.
Jeweils einer ist an der Waschmaschine und am Trockner zur Leistungsmessung verbaut. Darüber möchte ich nun den Status bestimmen.
Dazu bin ich einer Online-Anleitung gefolgt, aber bisher funktioniert es leider noch nicht. Ich habe nun verschiedene Anleitungen gelesen und einige Dinge ausprobiert, bin aber leider noch nicht erfolgreich gewesen.
Ich habe folgende Dateien erstellt:

household-devices.items

Code: Alles auswählen

// Waschmaschine mit Leistungsmessung

Number        C_LaundryRoom_Washingmachine_SIGNAL_STRENTH    "Waschmaschine - Signal Strength"                        (C, C_LaundryRoom)          {channel="shelly:shelly1pm:e5b994:device#wifiSignal"}
Number:Power  C_LaundryRoom_Washingmachine_POWER             "Waschmaschine - Leistung"                               (C, C_LaundryRoom)          {channel="shelly:shelly1pm:e5b994:meter#currentWatts"}

Number        C_LaundryRoom_Washingmachine_OPSTATE           "Waschmaschine - Status [MAP(household-devices.map):%s]" (C, C_LaundryRoom)


// Trockner mit Leistungsmessung

Number        C_LaundryRoom_Dryer_SIGNAL_STRENTH             "Trockner - Signal Strength"                             (C, C_LaundryRoom)               {channel="shelly:shelly1pm:68c63afae26f:device#wifiSignal"}
Number:Power  C_LaundryRoom_Dryer_POWER                      "Trockner - Leistung"                                    (C, C_LaundryRoom)               {channel="shelly:shelly1pm:68c63afae26f:meter#currentWatts"}

Number        C_LaundryRoom_Dryer_OPSTATE                    "Trockner - Status [MAP(household-devices.map):%s]"      (C, C_LaundryRoom)
household-devices.rules

Code: Alles auswählen

val Number MODE_OFF = 0
val Number MODE_STANDBY = 1
val Number MODE_ACTIVE = 2
val Number MODE_FINISHED = 3

rule "Washingmachine Consumption State Machine"
when
    Item C_LaundryRoom_Washingmachine_POWER changed
then
    if (C_LaundryRoom_Washingmachine_POWER.state < 0.2) {
        C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(MODE_OFF)
        logInfo("INFO","Waschmaschine: MODE_OFF")
    }
    else if (C_LaundryRoom_Washingmachine_POWER.state > 5) {
        C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(MODE_ACTIVE)
        logInfo("INFO","Waschmaschine: MODE_ACTIVE")
    }
    else if (C_LaundryRoom_Washingmachine_POWER.state < 5) {
        if (C_LaundryRoom_Washingmachine_OPSTATE.state == MODE_OFF) {
            C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(MODE_STANDBY)
            logInfo("INFO","Waschmaschine: MODE_STANDBY")
        }
        else if (C_LaundryRoom_Washingmachine_OPSTATE.state == MODE_ACTIVE) {
            C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(MODE_FINISHED)
            logInfo("INFO","Waschmaschine: MODE_FINISHED")
        }
    }
end
household-devices.map

Code: Alles auswählen

0=Aus
1=Standby
2=Aktiv
3=Fertig
-=Unbekannt
NULL=Test
In der Basic UI wird mir die aktuelle Leistung und die Signalstärke korrekt angezeigt.
Der Statuts wird allerdings als Unbekannt angezeigt.

Ich würde mich super freuen, wenn ihr mir hier weiterhelfen könntet!
Vielen Dank!

Freundliche Grüße
jnnsfnk

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Anfängerprobleme: Waschmaschine Rule

Beitrag von Darkwin101 »

Also dein Power item ist mit Einheit versehen du musst für einen Vergleich die Einheit abschneiden also (washingmaschinepower.state as Number).floatValue < 0.2 als Beispiel

Gesendet von meinem SM-G955F mit Tapatalk




jnnsfnk
Beiträge: 5
Registriert: 13. Mai 2020 15:33
Answers: 0

Re: Anfängerprobleme: Waschmaschine Rule

Beitrag von jnnsfnk »

Darkwin101 hat geschrieben: 25. Mai 2020 22:47 Also dein Power item ist mit Einheit versehen du musst für einen Vergleich die Einheit abschneiden also (washingmaschinepower.state as Number).floatValue < 0.2 als Beispiel

Gesendet von meinem SM-G955F mit Tapatalk
Vielen Dank für die Antwort!
Jetzt klappt es!
Zuletzt geändert von jnnsfnk am 26. Mai 2020 21:25, insgesamt 1-mal geändert.

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Anfängerprobleme: Waschmaschine Rule

Beitrag von Darkwin101 »

Vielleicht versucht du mal das ganze als 1.0 zu beschreiben du benötigst die Val am Anfang nicht du schreibst direkt die Zahlen in das postUpdate und der Rest sollte über die Map Transformation gehen diese ist hoffentlich installiert das kann ich aus deinem Text nicht entnehmen

Code: Alles auswählen

rule "Washingmachine Consumption State Machine"
when
    Item C_LaundryRoom_Washingmachine_POWER changed
then
    if ((C_LaundryRoom_Washingmachine_POWER.state as Number).floatValue < 0.2) {
        C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(1)
        logInfo("INFO","Waschmaschine: MODE_OFF")
    }
    else if ((C_LaundryRoom_Washingmachine_POWER.state as Number).floatValue > 5) {
        C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(2)
        logInfo("INFO","Waschmaschine: MODE_ACTIVE")
    }
    else if ((C_LaundryRoom_Washingmachine_POWER.state).floatValue < 5) {
        if ((C_LaundryRoom_Washingmachine_OPSTATE.state as Number) == 0) {
            C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(1)
            logInfo("INFO","Waschmaschine: MODE_STANDBY")
        }
        else if ((C_LaundryRoom_Washingmachine_OPSTATE.state as Number).floatValue == 2) {
            C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(MODE_FINISHED)
            logInfo("INFO","Waschmaschine: MODE_FINISHED")
        }
    }
end
Nur weil du oben die Zahlen als Val deklariert hast wird daraus nicht automatisch der Text es bleibt immernoch eine Zahl also beim Vergleichen musst du auch die Zahl Vergleichen

jnnsfnk
Beiträge: 5
Registriert: 13. Mai 2020 15:33
Answers: 0

Re: Anfängerprobleme: Waschmaschine Rule

Beitrag von jnnsfnk »

Darkwin101 hat geschrieben: 26. Mai 2020 21:06 Vielleicht versucht du mal das ganze als 1.0 zu beschreiben du benötigst die Val am Anfang nicht du schreibst direkt die Zahlen in das postUpdate und der Rest sollte über die Map Transformation gehen diese ist hoffentlich installiert das kann ich aus deinem Text nicht entnehmen

Code: Alles auswählen

rule "Washingmachine Consumption State Machine"
when
    Item C_LaundryRoom_Washingmachine_POWER changed
then
    if ((C_LaundryRoom_Washingmachine_POWER.state as Number).floatValue < 0.2) {
        C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(1)
        logInfo("INFO","Waschmaschine: MODE_OFF")
    }
    else if ((C_LaundryRoom_Washingmachine_POWER.state as Number).floatValue > 5) {
        C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(2)
        logInfo("INFO","Waschmaschine: MODE_ACTIVE")
    }
    else if ((C_LaundryRoom_Washingmachine_POWER.state).floatValue < 5) {
        if ((C_LaundryRoom_Washingmachine_OPSTATE.state as Number) == 0) {
            C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(1)
            logInfo("INFO","Waschmaschine: MODE_STANDBY")
        }
        else if ((C_LaundryRoom_Washingmachine_OPSTATE.state as Number).floatValue == 2) {
            C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(MODE_FINISHED)
            logInfo("INFO","Waschmaschine: MODE_FINISHED")
        }
    }
end
Nur weil du oben die Zahlen als Val deklariert hast wird daraus nicht automatisch der Text es bleibt immernoch eine Zahl also beim Vergleichen musst du auch die Zahl Vergleichen
Hatte zwischenzeitlich noch ein kleines Problem entdeckt, dass unabhängig von dem Code ist. Mit dem ersten Hinweis auf die unterschiedlichen Variablen funktioniert es nun! Danke! :)

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

Re: Anfängerprobleme: Waschmaschine Rule

Beitrag von peter-pan »

jnnsfnk hat geschrieben: 26. Mai 2020 20:58 Das habe ich jetzt probiert, hat allerdings leider noch keinen Erfolg gebracht. Gibts noch irgendwelche Probleme in dem Code?
.

Was hast du denn konkret probiert ? Hast du irgendwelche Logging-Informationen erhalten ? Wird/Wurde die Regel beim speichern auch akzeptiert. Triggert die Regel auch, wenn sich "C_LaundryRoom_Washingmachine_POWER" ändert ? Ist der Wert 0,2 Watt bzw. sind die anderen Werte wirklich realistisch ?

Ich könnte mir vorstellen, dass deine Rule garnicht angenommen wird und deshalb auch nicht abläuft.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

EmptySoft
Beiträge: 247
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: Anfängerprobleme: Waschmaschine Rule

Beitrag von EmptySoft »

und wenn die Waschmaschine fertig ist, kannst Du Dir via Telegramm eine Nachricht senden, dass die Wäsche zum aufhängen ist.
BYe
Harald

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

Re: Anfängerprobleme: Waschmaschine Rule

Beitrag von udo1toni »

Allerdings wäre es im vorliegenden Fall schon sinnvoll, ein paar Variablen zu verwenden:

Code: Alles auswählen

rule "Washingmachine Consumption State Machine"
when
    Item C_LaundryRoom_Washingmachine_POWER changed
then
    val power = C_LaundryRoom_Washingmachine_POWER.state as Number).floatValue
    var newMode = 0
    var message = "Waschmaschine: "
    if (power < 0.2) {
        message = message + "MODE_OFF"
    }
    else if (power > 5) {
        newMode = 2
        message = message + "MODE_ACTIVE"
    }
    else {         // zwischen 0.2 und 5
        val opState = C_LaundryRoom_Washingmachine_OPSTATE.state as Number
        if (opState == 0) {
            newMode = 1
            message = message + "MODE_STANDBY"
        }
        else if (opState == 2) {
            newMode = 3
            message = message + "MODE_FINISHED"
        }
    }
    if((C_LaundryRoom_Washingmachine_OPSTATE.state as Number) != newMode) {
        C_LaundryRoom_Washingmachine_OPSTATE.postUpdate(newMode)
    } else
        message = "Waschmaschine: Keine Änderung"
    logInfo("washer",message)
end
Die Zuweisung einer Wertes zu einer Variablen (oder auch einer Konstanten) ist sehr schnell. Der Vergleich einer Variablen gegen einen einfachen Wert ist sehr viel schneller, als bis zu drei mal den Status des Items zu erfragen und anschließend zu verarbeiten (Wandlung nach float). Wobei es natürlich nur um einstellige Millisekunden gehen wird :) aber trotzdem...
Die Rule testet außerdem, ob überhaupt eine Wertzuweisung nötig ist. Wenn in dem Fall kein logInfo ausgegeben werden soll (das ist sicher Geschmacksache) kann man natürlich das logInfo() auch in die bedingte Verzeigung ziehen und den else-Teil ersatzlos streichen.

Der erste String, welcher logInfo() übergeben wird, ist das Logger Name. INFO ist hier nicht sinnvoll, viel zu allgemein, außerdem wird INFO schon vorne in die Zeile geschrieben, wäre also unnötige Redundanz.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten