Warte bis Rollo geschlossen ist.

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Geko
Beiträge: 14
Registriert: 5. Jan 2020 18:47
Answers: 0

Warte bis Rollo geschlossen ist.

Beitrag von Geko »

Hallo,
leider stehe ich wieder vor einem Problem.
Ich möchte anhand der Sauna Temperatur ein Rollo herunterfahren.
Beim Sonnenuntergang funktioniert da Ganze ja ganz gut, da es ja nur einmal geschaltet wird.
Da sich die Sauna Temperatur aber ständig ändert, dachte ich es reicht ein Timer von 30 sec. der wartet bis das Rollo unten ist.
Dem ist leider nicht so, irgenwie geht es bei jeder Temperaturänderung auf und zu.

Unsere Rollos funktionieren leider nach dem AUF / STOP / ZU / STOP Prinzip.

Die Doppelte (ON) Steuerung habe ich in dem Fall, das dass Rollo evtl. beim ersten Mal nach oben fahren würde, falls es vorher z.b. halb geschlossen war.


Code: Alles auswählen

Stiemap:
Switch item=Sauna_Automatik label="Sauna Automatik" mappings=[0="AUS", 1="Nur Licht" , 2="Nur Musik" ,3="Licht & Musik"]

Das Rollo soll aber immer gesteuert werden !

Code: Alles auswählen

Rules:
var Timer Warte 

rule "Sauna Automatik"
when
Item SaunaTemp received update
then
  if ((SaunaTemp.state >= 55) && (SaunaTemp.state <= 99 )) {
  if((Sauna_Automatik.state == 1) || (Sauna_Automatik.state == 3)) {
          var State = SaunaTemp.state as DecimalType
          if ((State >= 55) && (State < 59.9)) {sendCommand(schelly_rgb_fullcolor,"white")  SaunaState.sendCommand (0)}
          if ((State >= 60) && (State < 65.9)) {sendCommand(schelly_rgb_fullcolor,"blue")   SaunaState.sendCommand (1)}
          if ((State >= 65) && (State < 70.9)) {sendCommand(schelly_rgb_fullcolor,"yellow") SaunaState.sendCommand (2)}
          if ((State >= 70) && (State < 75.9)) {sendCommand(schelly_rgb_fullcolor,"green")  SaunaState.sendCommand (3)}
          if ((State >= 75) && (State < 99.9)) {sendCommand(schelly_rgb_fullcolor,"red")    SaunaState.sendCommand (4)}
  }
  
    if((Sauna_Automatik.state == 2) || (Sauna_Automatik.state == 3)) {
      if (SaunaTemp.state >= 65) {
        if (SCLX79_Z2_Power.state !=(ON)) {
          SCLX79_Z2_Power.sendCommand(ON) {
            if (SCLX79_Z2_InputSource.state !=(38))
            SCLX79_Z2_InputSource.sendCommand(38)
            SCLX79_Z2_Volume.sendCommand(15)}
            if (SaunaTemp.state < 50) {
              if (SCLX79_Z2_Power.state !=(OFF))
              SCLX79_Z2_Power.sendCommand(OFF)
              }}}}
              
// Ab hier ist mein Problem!!

if((SaunaTemp.state >= 70) && (Sauna_Automatik.state >= 1)){
			if  (Rollo_FlurHinten_c.state == OPEN) 
			Rollo_Flur_Hinten.sendCommand(ON)}
			Warte = createTimer(now.plusSeconds(30)) [|
			if (Rollo_FlurHinten_c.state == OPEN) 
			Rollo_Flur_Hinten.sendCommand(ON)]
  }
end 

Vielen Dank!

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

Re: Warte bis Rollo geschlossen ist.

Beitrag von Darkwin101 »

Wenn ich dich richtig verstehe ist es so das nun das Rollo immer alle Befehle bekommt und dadurch sich ein Jojo Effekt einstellt ich würde das ganze mit einer Hilfsvariable lösen die nachdem zweiten Befehl gesetzt wird.

Code: Alles auswählen

var Timer Warte = null
var Integer Hilfsvariable = 0

if((SaunaTemp.state >= 70) && (Sauna_Automatik.state >= 1) && (Hilfsvariable == 0) && (Warte === null)){
			if  (Rollo_FlurHinten_c.state == OPEN) 
			Rollo_Flur_Hinten.sendCommand(ON)}
			Warte = createTimer(now.plusSeconds(30)) [|
			if (Rollo_FlurHinten_c.state == OPEN) 
			Rollo_Flur_Hinten.sendCommand(ON)
			Hilfsvariable =1
			Warte = null]
  }
  if (Sauna_Automatik.state == 0) {Hilfsvariable = 0}
Mit der Abfrage Syntax des Timers bin ich mir nicht ganz Sicher das soll verhindern das wenn der Timer Läuft und die Hilfsvariable noch nicht gesetzt ist die Rule nochmal ausgeführt wird

Geko
Beiträge: 14
Registriert: 5. Jan 2020 18:47
Answers: 0

Re: Warte bis Rollo geschlossen ist.

Beitrag von Geko »

Super vielen Dank!
Gute Idee mit der Hilfsvariable! :D

Ich musste nur eine Klammer versetzten jetzt funktioniert es!

Code: Alles auswählen

 if((SaunaTemp.state >= 70) && (Sauna_Automatik.state >= 1) && (Hilfsvariable == 0) && (Warte === null)){
			if  (Rollo_FlurHinten_c.state == OPEN) 
			Rollo_Flur_Hinten.sendCommand(ON)
			Warte = createTimer(now.plusSeconds(30)) [|
			if (Rollo_FlurHinten_c.state == OPEN) 
			Rollo_Flur_Hinten.sendCommand(ON)
			Hilfsvariable =1
			Warte = null]
  }
  if (Rollo_FlurHinten_c.state == CLOSED) {Hilfsvariable = 0}             
  }


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

Re: Warte bis Rollo geschlossen ist.

Beitrag von udo1toni »

Aber...

Nur so am Rande...

1. Die Variable Warte im Code (der Name ist etwas unglücklich...) muss als globale Variable definiert sein, also außerhalb jeder Rule und zu Beginn der Datei, in der sie verwendet wird.
2. Einen Rollladen steuert man über ein Rollershutter Item. Mag sein, dass Deine Hardware das nicht direkt unterstützt (dann mein Mitleid ;) ), aber Du solltest dann lieber ein Proxy Item anlegen, welches mittels Rules die Steuerung so umsetzt. Du hast dann ein Item, welches mindestens über seinen Status die Information offen (0) und geschlossen (100) liefert, sowie auf die Befehle UP,DOWN,STOP reagieren kann. Dann kannst Du in Deiner Rule dieses Proxy Item ansteuern, in der Form

Code: Alles auswählen

if((ProxyRollladen.state as Number) != 100) ProxyRollladen.sendCommand(DOWN)
Das Proxy Item kümmert sich dann darum, dass der Rollladen entsprechend gesteuert wird.

Warum so? Weil Du vielleicht den Rollladen auch an anderer Stelle steuern möchtest. Du solltest also die Steuerlogik so auslagern, dass Du sie nur einmal brauchst.

Wenn Du Dinge steuerst, schau immer nach, ob sie nicht vielleicht schon ihr Soll erreicht haben. Falls es sich um Dinge handelt, die einige Zeit brauchen um ein Soll zu erreichen, musst Du die Prüfung so auslegen, dass sie eventuell gesendete Befehle berücksichtigt, also in der Form
"Falls der Rollladen nicht geschlossen ist und in den letzten 30 Sekunden noch keinen Befehl zum Schließen erhalten hat, sende den Schließbefehl".

Dein Rule triggert auf received update, es wäre sinnvoller, auf changed zu triggern.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Geko
Beiträge: 14
Registriert: 5. Jan 2020 18:47
Answers: 0

Re: Warte bis Rollo geschlossen ist.

Beitrag von Geko »

Hallo Udo1toni,
Danke für dein Mitleid ! :? :)
Klingt Logisch mit dem Proxy, nur sprengt mir das als Anfänger noch den Kopf :!:
Ich habe leider (noch) keine Ahnung wie ich das für mehrere Rollos machen soll.

Gibt es irgendwo Beispiele dafür? :roll:

Danke!
Zuletzt geändert von Geko am 31. Mär 2020 11:02, insgesamt 1-mal geändert.

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

Re: Warte bis Rollo geschlossen ist.

Beitrag von udo1toni »

Was nutzt Du für Hardware?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Geko
Beiträge: 14
Registriert: 5. Jan 2020 18:47
Answers: 0

Re: Warte bis Rollo geschlossen ist.

Beitrag von Geko »

Hallo Udo,
die Rolladenmotoren sind von Jarolift, diese sind Funkgesteuert, und verrichten ihren Dienst schon viele Jahre.
Zu dieser Zeit hatte ich noch nicht an ein System wie OpenHab gedacht.
Die Motoren haben aber ein verschlüsseltes Funkprotokoll welches sich ständig ändert, so sagt es der Hersteller.
Da es mich aber schon immer genervt hat, das diese nur nach einer festen Uhrzeit gesteuert werden können, habe ich nach einer günstigen Lösung gesucht, diese etwas smarter zu machen.
Dazu habe ich in die Rolladenkästen jeweils ein mit Tasmota geflashten Sonoff Basic gepackt,
da ich dort von den Motoren die 230V und die beiden Kabel für den Taster anzapfen kann.
Die Sonoff's habe ich auf Potentialfreies schalten umgerüstet, und nutze einen Magnetkontakt als Switch2 an den GPIO Pins, um zu Kontrollieren, ob das Rollo geschlossen ist.

Etwas besseres ist mir leider nicht eingefallen.

Grüße

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

Re: Warte bis Rollo geschlossen ist.

Beitrag von udo1toni »

Die Bedienung über die Wandtaster ist aber immer mit fester Richtung, oder? Eine andere Variante wäre dann, einen Taster so umzubauen, dass openHAB tatsächlich die Tasten "drücken" kann, vorzugsweise jeweils über einen Transistor oder ein DIL Reed Relais. Dann hättest Du zumindest nicht das Problem mit der Richtung.
Mit nur einem Taster ist die Tastenfolge ja vermutlich Richtung1 - Stopp - Richtung 2 - Stopp - ... wobei das Stopp natürlich auch durch Erreichen der Endlage oben oder unten ausgelöst werden kann.
Man könnte versuchen, eine entsprechende Rule im Sonoff zu hinterlegen, aber die ist auch nicht eben trivial, wenn sie vernünftig arbeiten soll.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Geko
Beiträge: 14
Registriert: 5. Jan 2020 18:47
Answers: 0

Re: Warte bis Rollo geschlossen ist.

Beitrag von Geko »

Genau richtig.
Am Taster geht leider nur AUF /STOP /ZU /STOP usw.
Endlagen sind im Motor gespeichert.

Antworten