Seite 4 von 5

Re: Smarte Kaffee Maschine

Verfasst: 22. Aug 2022 01:14
von mad-mike
Die Rule ist zwingend auf den echten Status der Lampe angewiesen.
Wenn das Bord nicht lesbar ist, musst Du dafür sorgen, dass das Item den Status anhand des zuletzt gesendeten Befehls speichert. Natürlich darfst Du dann das Bord keinesfalls unabhängig von openHAB steuern,
Sobald ich dort "Write / Read" markiere, wechselt das Item von OFF zu Undef.
Wie sieht denn die Rule nun tatsächlich aus?
So:

Code: Alles auswählen

// Globale Variablen zu Beginn der Datei definieren!
var Timer tOutLamp = null                                                       // Timer für Außenlampen Meldung

rule "X Gartenlampe"
when
    Item HTTPURLThing_km1 changed
then
    tOutLamp?.cancel                                                            // beende bestehende Timer
    if(HTTPURLThing_km1.state !== OFF)                                          // Lampe an?
        tOutLamp = createTimer(now.plusMinutes(30), [|                           // Erstelle Timer
            sendBroadcastNotification("Lampe noch an ")                         // Gib Meldung aus
            tOutLamp.reschedule(now.plusMinutes(30))                             // Plane Timer erneut
        ])
end
Von der Sache, hat es so gearbeitet, wie gewünscht. Wenn du sagst, das ist falsch, dann werde ich es wieder entfernen.

Aus irgendeinem Grund hatte sich der Timer vorgestern abend nicht gelöscht oder so. Habe die Ganze Nacht, alle 30 Min, Nachricht bekommen, das die Lampe noch an ist. :mrgreen: :lol:

Vorhin, im Garten, lief es wie gewünscht... Und Zweckmäßig, Nachricht Erhalten, -> Licht ausgeschaltet, und Kam auch keine Nachricht mehr. Perfekt.
Und ein Tipp, den ich nicht müde werde zu geben:
Ich ändere Die Item Namen dann Passend ab. Das heisst, das Item hat den Namen: Garten, Flutlicht klein.

So wird mir das auch in der Sitemap angezeigt. (also Alle Namen die ich vergebe, werden in der Sitemap korrekt angezeigt).

Nur in der Rule, muss ich dann halt:

Code: Alles auswählen

HTTPURLThing_km1
eingeben.

Den jeweiligen namen bzw, den Trigger Channel, kopiere ich mir direkt aus dem Item und füge diese dann in die Rule ein.

Re: Smarte Kaffee Maschine

Verfasst: 22. Aug 2022 04:45
von udo1toni
mad-mike hat geschrieben: 22. Aug 2022 01:14 Sobald ich dort "Write / Read" markiere, wechselt das Item von OFF zu Undef.
Nein, das ist der Channel. der spielt hier aber keine Rolle, der darf durchaus write only bleiben.
Du musst aber dafür sorgen, dass das Item den Status passend zum letzten gesendeten Befehl bekommt. Ich gehe davon aus, dass das Licht auch über openHAB geschaltet wird. Im Item definierst Du über die Metadaten autoupdate = true. Danach sollte der Status des Items immer dem letzten Befehl folgen, also auf ON oder OFF wechseln. Der Vergleich prüft genau das ab, ob der Status von OFF abweicht oder nicht. Und da könnte auch der Fehler liegen, wenn nämlich der Status NULL oder UNDEV ist, ist er ebenfalls von OFF verschieden, dann käme die Nachricht ebenfalls.
Nun ist die Frage, was schlimmer ist: Eine Nachricht, die Dir sagt, das Licht sei noch an, obwohl das nicht der Fall ist, oder keine Nachricht, obwohl das Licht an ist - deshalb die Prüfung in dieser Form. Man könnte auch if(... == ON) prüfen, aber dann bekommst Du nicht mit, wenn ein Fehler vorliegt, wegen dem die Rule nie Alarm schlägt.
mad-mike hat geschrieben: 22. Aug 2022 01:14 Aus irgendeinem Grund hatte sich der Timer vorgestern abend nicht gelöscht oder so. Habe die Ganze Nacht, alle 30 Min, Nachricht bekommen, das die Lampe noch an ist. :mrgreen: :lol:
Ja, siehe oben. Am einfachsten wird man das los, indem man das Licht gezielt einmal ein- und wieder ausschaltet. Die Rule löscht zuverlässig den Timer weg, bei jedem Schaltvorgang (bzw. wenn sich der Zustand des Items ändert).
mad-mike hat geschrieben: 22. Aug 2022 01:14 Ich ändere Die Item Namen dann Passend ab. Das heisst, das Item hat den Namen: Garten, Flutlicht klein.

So wird mir das auch in der Sitemap angezeigt. (also Alle Namen die ich vergebe, werden in der Sitemap korrekt angezeigt).

Nur in der Rule, muss ich dann halt:

Code: Alles auswählen

HTTPURLThing_km1

eingeben.
Da bringst Du was durcheinander. Das ist nicht der Name des Items, sondern das Label. Das Label kannst Du immer nach eigenem Gusto beschriften.
Ich rede aber vom Namen des Items, auch dieser Name sollte nicht vom Channel oder gar Thing abhängen.

Stell Dir mal vor, Du hast eine Schaltsteckdose zum dazwischen stecken. Die Technologie ist Homematic (nur als Beispiel) und Du schaltest damit im Wohnzimmer eine Stehlampe.
Du nennst das Item Homematik_Zwischenstecker_3_Power_Switch. (Weil es ein Homematic Zwischenstecker ist, der dritte, den Du eingebunden hast...)
Jetzt stößt Du auf Sonoff Basic Module, die man mit einer alternativen Firmware bespielen kann. Die Module sind so kompakt, dass Du eines davon direkt in den Fuß der Leuchte einbauen kannst, womit der hässliche Klotz an der Wand endlich weg kann.
Du baust die Leuchte um.
Und weil Du diverse Regeln hast, in denen Du die Stehlampe schaltest, bist Du in einem Dilemma, denn entweder legst Du nun zusätzlich zum neuen Generic MQTT Thing für das Sonoff Basic noch ein neues Item MQTT_Sonoff_Basic_1_Power_Switch an und tauschst den Namen in allen Rules aus (und es sind eeeecht viele Rules...) oder Du verlinkst einfach das alte Item mit der neuen Hardware, aber der Name passt dann überhaupt nicht mehr.

Hättest Du mal auf meinen Ratschlag gehört und das Item GF_WZ_Stehlampe genannt...

Das ist nämlich einer der wichtigen Punkte in openHAB: die beiden Teile, Channel und Items, sind voneinander getrennt. Man kann jederzeit Verbindungen anders konfigurieren und muss nichts an den Abhängigkeiten anpassen.

Und wenn man die Itemnamen systematisch erstellt, muss man nicht mal zwingend nachschauen, wie das Item heißt, es reicht, zu wissen, dass das Wohnzimmer im Erdgeschoss ist (GF = Ground Floor) und als WZ in allen Itemnamen auftaucht. Da die Stehlampe im Wohnzimmer steht, ist der Name dann einfach herzuleiten. Auch das Semantic Model kann da äußerst hilfreich sein.

Ich habe meine Itemnamen auch mal an der Hardware ausgerichtet und bin schon sehr lange davon abgekommen, es ist einfach komplett unlogisch, so vorzugehen. Dass openHAB die Namen aus den Things generiert, ist da kein Widerspruch, schließlich weiß openHAB es nicht besser.

Re: Smarte Kaffee Maschine

Verfasst: 27. Sep 2022 20:54
von mad-mike
Moin.

Eine Idee noch zu meiner Kaffee maschine:
:)


Ich möchte die Shelly Steckdose überwachen und abschalten wenn:

Steckdose aktiv und 30 Minuten der Wert "Leistung" nicht über 25 Watt geht...

Ich weiss nur nicht, Was ich da als Trigger nehmen könnte...

""Leistung changed"" und ein Timer starten?


Danke und Gruss

Re: Smarte Kaffee Maschine

Verfasst: 27. Sep 2022 22:30
von mad-mike

Code: Alles auswählen

var Timer tKaffeemaschine = null                                // Timer Kaffeemaschine

rule "Kaffeemaschine Teil3"
when
    Item shellyplugsb580c9192168178120_Leistung changed
then
    tKaffeemaschine?.cancel                                     // beende bestehende Timer
    if(shellyplugsb580c9192168178120_Leistung.state <= 25)      // Kleiner gleich 25
    tKaffeemaschine = createTimer(now.plusMinutes(30), [|        // Erstelle Timer
        sendBroadcastNotification("Kaffeemaschine Aus ")            // Gib Meldung aus
        shellyplugsb580c9192168178120_Betrieb.sendCommand(OFF)                     // Steckdose deaktivieren
            ])
end

Kann da einer mal drüber schauen? ich glaube es funktioniert, zumindest bei den ersten Tests...

Re: Smarte Kaffee Maschine

Verfasst: 28. Sep 2022 00:01
von udo1toni
Nahe dran. Meine Variante:

Code: Alles auswählen

var Timer tKaffeemaschine = null                                         // Timer Kaffeemaschine

rule "Kaffeemaschine Teil3"
when
    Item shellyplugsb580c9192168178120_Leistung changed
then
    if(!(newState instanceof Number))                                    // falls Status keine Zahl
        return;                                                          // Abbruch
    if((newState as Number).intValue < 25 && tKaffeemaschine === null) { // falls kleiner 25 und kein Timer gestartet
        tKaffeemaschine = createTimer(now.plusMinutes(30), [|            // Erstelle Timer
            sendBroadcastNotification("Kaffeemaschine Aus ")             // Gib Meldung aus
            shellyplugsb580c9192168178120_Betrieb.sendCommand(OFF)       // Steckdose deaktivieren
            tKaffeemaschine = null
        ])
    } else if((newState as Number).intValue > 25) {                      // falls größer 25
        tKaffeemaschine?.cancel                                          // Timer abbrechen
        tKaffeemaschine = null
    }
end
Der Timer darf nicht einfach abgebrochen werden, sondern nur, wenn die Leistung über 25 Watt steigt. Die Leistung wird immer leicht schwanken, und wenn es nur die zweite Nachkommastelle ist. Dementsprechend darf der Timer auch nur angelegt werden, wenn kein Timer existiert. Deshalb ist es in diesem Fall wichtig, am Ende des Timer Codes und beim Canceln die Variable auf null zu setzen, damit auf Identität mit null getestet werden kann (===)

Re: Smarte Kaffee Maschine

Verfasst: 29. Sep 2022 21:14
von mad-mike
Moin.

Danke dir.

Es wird ein Fehler ausgelöst, und zwar meckert er wegen:

Code: Alles auswählen

then
    if(!newState instanceof Number)
Dem !.

gut, habe ich rausgelöscht.

Nun passiert aber nix mehr...

Kann es sein, das der Zahlen wert vom Shelly wieder mit der ""Watt"" Endung ein Problem macht?

Re: Smarte Kaffee Maschine

Verfasst: 29. Sep 2022 23:18
von peter-pan
mad-mike hat geschrieben: 29. Sep 2022 21:14 Es wird ein Fehler ausgelöst, und zwar meckert er wegen:
Ich meine da gehört noch eine Klammerung dazu. Probier's mal so:

Code: Alles auswählen

 if(!(newState instanceof Number))
Das sollte dann klappen ;)

Re: Smarte Kaffee Maschine

Verfasst: 30. Sep 2022 01:43
von udo1toni
Genau... da fehlen Klammern. Nun ja, 0 Uhr...

Ich habe es oben korrigiert...

Re: Smarte Kaffee Maschine

Verfasst: 30. Sep 2022 13:00
von peter-pan
udo1toni hat geschrieben: 30. Sep 2022 01:43 Genau... da fehlen Klammern.
...Ich musste auch erst suchen und hab ein bisschen gegoogelt. Und hab es dann gefunden .... In einem Thread... von dir ;)

Re: Smarte Kaffee Maschine

Verfasst: 30. Sep 2022 15:32
von udo1toni
Ja klar, ich baue immer extra Fehler ein, damit ihr was zu suchen habt... :lol: