Schaltbare Steckdose zweimal einschalten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
MyHome68
Beiträge: 24
Registriert: 8. Mär 2017 20:05
Answers: 0

Schaltbare Steckdose zweimal einschalten

Beitrag von MyHome68 »

Hallo zusammen,
durch meine PV Anlage, möchte ich meinen erzeugten Strom auch selbst nutzen. Daher beabsichtige ich meinen Geschirrspüler erst am Tage einzuschalten. Damit das funktioniert, muss ich den GS erst einmal kurz einschalten, um das Programm auszuwählen. Dafür habe ich an eine Zeit von 10 Sekunden gedacht. Danach soll er wieder abschalten und erst um 12:00 Uhr einschalten. Abschaltung dann um 14:30 Uhr. Ich habe dazu eine schaltbare Steckdose und einen Taster (Funk-Wandsender mit Display HM-PB-4Dis-WM) von Homematic. Diese sind beide über die Homematic CCU2 gekoppelt. In meiner Programmierung, schaltet die Steckdose zur eingestellten Zeit andauernd ein und aus, was natürlich so nicht gewollt und auch sicherlich nicht gut für den Geschirrspüler ist. Wichtig zu sagen ist noch, dass der GS nicht jeden Tag spülen soll, sondern nur wenn über die Taste des Display's die Steckdose erneut eingeschalten wurde (für 10 Sekunden).

Item:
...
Switch SteckdoseGS "Steckdose GS" {channel="homematic:HM-LC-Sw1-Pl-DN-R1:NEQ1532814:QEQ0464010:1#STATE"}
Switch MSteckdoseGS "Merker GS"

Rules:
var MSteckdoseGS
var SteckdoseGS

rule "Geschirrspüler Vorwahl"
when
Item SteckdoseGS changed from OFF to ON
then
if (MSteckdoseGS != OFF)
sendCommand(MSteckdoseGS, ON)
createTimer(now.plusSeconds(10)) [| sendCommand(SteckdoseGS, OFF) ]
end


rule "Geschirrspüler_An"
when
Time cron "* 00 12 * * ?"
then
if (MSteckdoseGS != ON && SteckdoseGS != OFF)
sendCommand(SteckdoseGS, ON)
end

rule "Geschirrspüler_Aus"
when
Time cron "* 30 14 * * ?"
then
if (MSteckdoseGS != ON && SteckdoseGS != ON)
sendCommand(SteckdoseGS, OFF)
sendCommand(MSteckdoseGS, OFF)
end

Vielleicht kann mir jemand auf die Sprünge helfen.
Gruß Daniel

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Schaltbare Steckdose zweimal einschalten

Beitrag von violine21 »

MyHome68 hat geschrieben: 27. Feb 2020 18:25 Hallo zusammen,
durch meine PV Anlage, möchte ich meinen erzeugten Strom auch selbst nutzen.
Hallo,
damit habe ich mich auch auseinander gesetzt.
Mein Geschirrspüler ist von MIELE und nicht Smarthome-fähig.
Da hatte ich folgende Idee. Normal wird der Geschirrspüler eingeschaltet, das Programm ausgewählt und zuletzt per Start-Taster gestartet.
Ich habe ihm einen Shelly "eingepflanzt", der den Start-Taster überbrückt.
Damit können wir dann alles fertig vorbereiten und OpenHAB sagt dann dem Shelly, wann der passende Moment ist.
Scheint keine Sonne, kann man den Geschirrspüler immer noch einfach von Hand per Start-Taster starten.

Allerdings setzt das einen chirurgischen Eingriff in das Gerät vorraus.

VG André

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

Re: Schaltbare Steckdose zweimal einschalten

Beitrag von udo1toni »

Also erstmal:
Warum legst Du globale Variablen an, die identisch zu Items sind? Das MUSS ja Probleme ergeben!
Dann Der Vergleich. Hast Du verstanden, was Du da vergleichst? != bedeutet nicht gleich. Deine gesamte Logik ist verkehrt.

Die Rules sollten eher so aussehen:

Code: Alles auswählen

rule "Geschirrspüler Vorwahl"
when
    Item SteckdoseGS changed from OFF to ON                    // Triggert bei jedem Einschalten (auch um 12 Uhr)
then
    if(MSteckdoseGS.state != ON) {                             // nur falls der Merker nicht ON ist
        MSteckdoseGS.postUpdate(ON)                            // Merker auf ON setzen
        createTimer(now.plusSeconds(10), [ |                   // Und Ausschalttimer starten
            SteckdoseGS.sendCommand(OFF)
        ] )
    }
end

rule "Geschirrspüler_An"
when
    Time cron "0 0 12 * * ?"                                   // täglich 12:00:00 Uhr
then
    if(MSteckdoseGS.state == ON && SteckdoseGS.state != ON)    // Falls Merker ON und Steckdose nicht ON
        SteckdoseGS.sendCommand(ON)                            // Steckdose einschalten
end

rule "Geschirrspüler_Aus"
when
    Time cron "0 30 14 * * ?"                                  // täglich 14:30:00 Uhr
then
    if(MSteckdoseGS.state == ON && SteckdoseGS.state != OFF) { // Falls Merker ON und Steckdose nicht OFF
        SteckdoseGS.sendCommand(OFF)                           // Steckdose ausschalten
        MSteckdoseGS.postUpdate(OFF)                           // Merker auf OFF setzen
    }
end
Kurze Erläuterungen:
MSteckdoseGS ist ein ungebundenes Item, welches nur einen Status hält, aber keinen Befehl sendet. Entsprechend sollte auch nur der Status gesetzt werden. (Item.postUpdate())
Wenn man den Status eines Items nutzen möchte, muss man auch auf den Status zugreifen, nicht auf das Item selbst. (Item.state)
Die Methode Item.sendCommand(Value) ist sicherer als die Action sendCommand(String, String) (gleiches gilt für postUpdate()).
Time cron läuft sekundengenau. Ein * steht für "beliebiger Wert". Du möchtest die Rules nicht jeweils sechzig mal starten, sondern jeweils einmal.
Wenn man eine bedingte Verzweigung auf mehrere Befehle wirken lassen will, müssen diese in geschweiften Klammern stehen.
Das ständige Ein- und Ausschalten kam vom Zusammenspiel der ersten und der zweiten Rule, die eine schaltete 60 Sekunden lang einmal pro Sekunde die Steckdose ein, die andere Rule erzeugte jedesmal einen Ausschalttimer.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

MyHome68
Beiträge: 24
Registriert: 8. Mär 2017 20:05
Answers: 0

Re: Schaltbare Steckdose zweimal einschalten

Beitrag von MyHome68 »

Hallo,
erst einmal vielen Dank für Eure Unterstützung. Leider habe ich im Moment kaum Zeit für irgendwas, aber ich probiere das unbedingt aus und melde mich dann wieder.
Gruß Daniel

MyHome68
Beiträge: 24
Registriert: 8. Mär 2017 20:05
Answers: 0

Re: Schaltbare Steckdose zweimal einschalten

Beitrag von MyHome68 »

Klasse, es funktioniert genau so wie ich es mir voergestellt habe. Danke udo1toni. Ich hab noch viel zu lernen.

Gruß Daniel

Antworten