Rolladensteuerung

Fragen, Antworten, Fertige Projekte
Benutzeravatar
Gast64
Aktiver
Beiträge: 50
Registriert: 28. Dez 2019, 22:14

Rolladensteuerung

Beitrag von Gast64 »

Hallo _Cyber_,
Hier mal Dein Code etwas formatierter, weil, bei "letscontrolit" ist bei mir kein BBCode erlaubt.

Code: Alles auswählen

on ControlZ3 do					// Zimmer 3
//control?cmd=event,ControlZ3=0
Let,4,%eventvalue%				// var4 neue position
if [VAR#4] > 0 and [VAR#4] < 100		// Abfrage ob im gültigen Bereich
//open/close percent
Let,5,(20/100)*[VAR#4]				// Var5 ="Höhe" in sekunden
Let,6,(20/100)*[Z3#S]				// Var6 =aktuelle Pos. in Dev. Z3#S
if [VAR#6] > [VAR#5]				// dann öffnen
// open a bit
Let,7,[VAR#6]-[VAR#5]				// Var7= Laufzeit
logentry,Z3_o_secs=[VAR#7]			// 
delay,250						// Wozu Verzögerung?
LongPulse,2,0,[VAR#7] //PWR			// Relais 1 Power für Laufzeit einschalten
LongPulse,26,0,[VAR#7]				// Jalousie 1  einschalten mit Relais 2 (hoch)
gpio,25,1						// Relais 3 bleibt aus Jal nach oben für Laufzeit
LongPulse,33,0,[VAR#7]				// Jalousie 2  einschalten mit Relais 4 (hoch)
gpio,32,1						// Relais 5 bleibt aus Jal nach oben für Laufzeit
endif
if [VAR#6] < [VAR#5]				// schließen
//close a bit
Let,7,[VAR#5]-[VAR#6]				// Var7= Laufzeit
logentry,Z3_c_secs=[VAR#7]			
delay,250
LongPulse,2,0,[VAR#7] //PWR			// Relais 1 Power für Laufzeit einschalten
LongPulse,26,0,[VAR#7]				// Jalousie 1  einschalten mit Relais 2 (hoch)
LongPulse,25,0,[VAR#7]				// Jalousie 1  Richtung nach unten mit Relais 3
LongPulse,33,0,[VAR#7]				// Jalousie 2  einschalten mit Relais 4 (hoch)
LongPulse,25,0,[VAR#7]				// Jalousie 2  Richtung nach unten mit Relais 5
LongPulse,32,0,[VAR#7]
endif
else
if [VAR#4] = 0					// wenn <=0 odr >=100
logentry,Z3_o_comp
delay,250
LongPulse,2,0,20 //PWR				// Relais 1 Power einschalten
LongPulse,26,0,20				// Jalousie 1 komplett hoch
gpio,25,1
LongPulse,33,0,20				// Jalousie 2 komplett hoch
gpio,32,1							
endif
if [VAR#4] = 100				// Poition 100 = geschlossen
logentry,Z3_c_comp
delay,250
LongPulse,2,0,20 //PWR				// Alles runter
LongPulse,26,0,20
LongPulse,25,0,20
LongPulse,33,0,20
LongPulse,32,0,20
endif
if [VAR#4] = 101				// Für besondere Zwecke
//special state
endif
if [VAR#4] = 102				// Für besondere Zwecke
//special state
endif
if [VAR#4] = 103				// Für besondere Zwecke
//special state
endif
endif
TaskValueSet,4,3,[VAR#4]			// Dev. Z3#S aktuelle Position
endon
Hier mal ein Rolladen bei mir. Werde es auch mal mit Variablen machen, was das Ganze natürlich mächtig verkürzen wird

Code: Alles auswählen

on BefJalLinks do					// control?cmd=event,BefJalLinks=0
  TaskValueSet 11,1,%eventvalue%       			// Gewünschte Position
  if [JalPos#istlinks] >%eventvalue%       		// Abfrage: Wenn hoch 
    TaskValueSet 11,1,[JalPos#istlinks]-%eventvalue%	// dann aktuelle Position - neue Position = Neue Laufzeit in Dev 11,1
    Longpulse,16,1,[Bef_JalPos#blinks] 			// Relais 1   Nach oben Laufzeit von Dev. 11,1
  endif
  if [JalPos#istlinks] <%eventvalue%			// Das gleiche nach unten
    TaskValueSet 11,1,%eventvalue%-[JalPos#istlinks]
    Longpulse,5,1,[Bef_JalPos#blinks] 			// Relais 2    			
  endif
  if %eventvalue% =0					// Wenn Pos 0 dann 25s nach oben (damit wieder definierte 0-Position
	Longpulse,16,1,25
  endif
  TaskValueSet 12,1,%eventvalue%			// Dev 12,1 jetzt aktuelle Position  (JalPos#istlinks)
endon
Gruß Martin
Zuletzt geändert von Gast64 am 7. Apr 2021, 11:02, insgesamt 1-mal geändert.
Asus Laptop -- N751JX -- i7-4720HQ -- 16GB RAM -- 250 GB SDD -- 1TB und 2 TB HDD -- Win10 Pro ver: 2004
_Cyber_

Re: Rolladensteuerung

Beitrag von _Cyber_ »

ja, die rules die du von mir hattest sind inzwischen recht alt. hab sie mehrmals überarbeitet und in eine art von "funktionen" gegossen.
espeasy macht das alles über events.

also, zB ein raum mit zwei rolladen schaut bei mir so aus:

pro raum ein dummy device mit 4 values: Raum gesamt %, Rolladen 1 %, Rolladen 2 %, Motor (ein/aus, irgendeiner von den beiden)

Code: Alles auswählen

on ControlZ1 do
 //control?cmd=event,ControlZ1=0
 //event,ControlZ1R=%eventvalue%
 //event,ControlZ1L=%eventvalue%
 Let,5,2  // Taskvalue Device
 Let,6,2  // Taskvalue Variable
 Let,7,=[Z1#SL] // Current shutter state
 Let,8,30 // Timer Seconds requested VAR Number
 Let,9,31 // Timer shutter direction VAR Number
 Let,10,35 // timershared shutter VAR Number
 Let,11,34 // shutter syssec_d start
 event,ControlShutter=%eventvalue%,22,23,18
 Let,5,2
 Let,6,3
 Let,7,=[Z1#SR]
 Let,8,35
 Let,9,36
 Let,10,30
 Let,11,39
 event,ControlShutter=%eventvalue%,33,32,18
endon
ControlShutter hat als argumente: ziel-prozent, GPIO1,GPIO2,Laufzeit

Code: Alles auswählen

on ControlShutter do
 //control?cmd=event,ControlShutter=0
 // control shutter, in percent.
 if %eventvalue1% >= 0 and %eventvalue1% <= 100 and [INT#%v8%] = 0
  //open/close percent / complete
  Let,12,%eventvalue4%
  Let,13,(%eventvalue4%/100)*%eventvalue1%
  Let,14,(%eventvalue4%/100)*[VAR#7]
  if %eventvalue1% = 0 or [VAR#14] > [VAR#13]
   //open a bit / complete
   if %eventvalue1% != 0
    Let,12,[VAR#14]-[VAR#13]
   endif
   logentry,"GPIO=%eventvalue2%,%eventvalue3%_open_secs=[VAR#12]"
  elseif %eventvalue1% = 100 or [VAR#14] < [VAR#13]
   //close a bit / complete
   if %eventvalue1% != 100
    Let,12,[VAR#13]-[VAR#14]
   endif
   logentry,"GPIO=%eventvalue2%,%eventvalue3%_close_secs=[VAR#12]"
  else
   logentry,"something went wrong. VAR#13=[VAR#13] VAR#14=[VAR#14]"
  endif
  if [INT#12] > 0
   gpio,2,0
   TimerSet,8,[INT#12]
   TaskValueSet,[INT#5],4,1
   //delay,250
   LongPulse,%eventvalue2%,0,[INT#12]
   if %eventvalue1% = 0 or [VAR#14] > [VAR#13]
    LongPulse,%eventvalue3%,0,[INT#12]
    Let,%v9%,-1
   elseif %eventvalue1% = 100 or [VAR#14] < [VAR#13]
    gpio,%eventvalue3%,1
    Let,%v9%,1
   else
    logentry,"something went wrong. VAR#13=[VAR#13] VAR#14=[VAR#14]"
   endif
   Let,%v8%,[INT#12]
   //monitor gpio,%eventvalue2%
   Let,%v11%,%syssec_d%
   if [INT#%v10%] > [INT#12] or [INT#15] > [INT#12]
    logentry,"TimerIDX 5 already set to [INT#%v10%] or [INT#15]"
   else
    Let,15,[INT#12]
    Let,16,%syssec_d%
    loopTimerSet_ms,5,1000,[INT#12]
   endif
  else
   logentry,"GPIO=%eventvalue2%,%eventvalue3% drive_secs below 1, nothing to do"
   TaskValueSet,[INT#5],[INT#6],%eventvalue1%
  endif
 elseif %eventvalue1% >= 0 and %eventvalue1% <= 100 and [INT#%v8%] != 0
  logentry,"GPIO=%eventvalue2%,%eventvalue3% currently active, need stop first!"
 elseif %eventvalue1% = 101
  //stop shutter
  logentry,"GPIO=%eventvalue2%,%eventvalue3%_stop"
  LongPulse,%eventvalue3%,0,0
  LongPulse,%eventvalue2%,0,0
  Let,%v8%,0
 elseif %eventvalue1% = 102
  //slittingTOP
 elseif %eventvalue1% = 103
  //slittingALL
 endif
endon
in dem event ersetze ich recht viele variablennummern mit den vor dem aufruf des events gesetzten nummer. Das ist eine ziemliche Denksportaufgabe da dahinterzukommen wie es funktioniert - auch jedes mal für mich wenn ich neu draufschaue. Ich glaube das solltest dir nicht antun.

mein problem ist nun, dass die rules "zu lange" zum abhandeln brauchen. zB wenn ich alle rolläden gleichzeitig fahre ist das relaypulse mit 28 sekunden dann schon 7 sekunden lang fertig, dann erst ist der ESP mit dem abhandeln der aufgestauten events so weit, dass er das auch alles richtig "nachberechnet" hat.

Wie hast du das generell? für jeden Rolladen einen esp8266, oder hast du mehrere rolladen auf einem? Wie schaut die konfiguration der dummydevices aus?

Danke!

LG
Benutzeravatar
Gast64
Aktiver
Beiträge: 50
Registriert: 28. Dez 2019, 22:14

Re: Rolladensteuerung

Beitrag von Gast64 »

Nun habe ich mich aber eben gewundert. Wollte eine Kleinigkeit ändern. Da sehe ich, ist ja gar nicht mein Text.
OK. Antwort kam schneller als erwartet.
Ich habe ursprünglich einen ESP8266 für 3 Rollläden gehabt. Habe dann auf ESP32 gewechselt (bin noch dabei).
Deshalb Zeichnungen noch im Zwischenstädium.
Dieser läuft aber mit Multiplexern (PCF8574). Da muß dann vor gpio und longpulse das "pcf". Hätte es jetzt nicht übersichtlicher gemacht.
Ich glaube das solltest dir nicht antun.
Mache ich leider auch gerne, mir Sachen anzutun, welche ich hinterher bereue.

Hir mal mein Prinzipschaltplan.
Also momentan laufen 3 Stück immer noch auf einem ESP2866. Im Bild wären das Relais 1 bis 6. Relais 7/8 sind für das Gartentor und Beleuchtung.
ESP8266 Nummer 1
ESP8266 Nummer 1
Dummydevice 11,1 bis 3 sind nur Zwischenspeicher. Hatte Anfangs gänzlich ohne Variablen gearbeitet.
Dummydevice 12,1 bis 3 sind die aktuellen Positionen. Diese werden regelmäßig zur Homematic (Raspberrymatic) geschickt und bei Neustart des ESP,
was Anfangs manchmal im Tages-, oder auch Stundentakt passierte, wieder zurück geschrieben. Brauche ich eigentlich nicht mehr.
Wenn ich 3 Läden gleichzeitig fahre (ein Raum) dann habe ich zwischen den Starts der 3 Motoren max ein halbe Sekunde.
Ich schalte ja auch pro Rollladen nur ein Relais .
Asus Laptop -- N751JX -- i7-4720HQ -- 16GB RAM -- 250 GB SDD -- 1TB und 2 TB HDD -- Win10 Pro ver: 2004
Benutzeravatar
Gast64
Aktiver
Beiträge: 50
Registriert: 28. Dez 2019, 22:14

Re: Rolladensteuerung

Beitrag von Gast64 »

Hier noch ein paar zusammengefasste Sachen. Grundlage ist das aus dem letzten Beitrag.

Morgens (Sonnenaufgang plus eine halbe Stunde) alles hoch. Da steuere ich die Relais direkt an und setze nur die Dummys "JalPos#istlinks, JalPos#istmitte, JalPos#istrechts" (12,1 bis 3)
und noch eines (10,1), das ist für andere Zwecke und erstmal nicht relevant.
Das startet natürlich Verzögerungsfrei.

Code: Alles auswählen

on JalousieMorgen do
	longpulse, 16,1,25
	longpulse,13,1,25
	longpulse,14,1,25   
	TaskValueSet,12,1,0
	TaskValueSet,12,2,0
	TaskValueSet,12,3,0
	TaskValueSet,10,1,0
endon
Dann habe ich noch das schließen mit Lichtschlitzen. Das ist kurz vor zu, aber die Lichtschlitze bleiben offen.
Das läuft mit der 0,5s - Verzögerung

Code: Alles auswählen

on abwesenheit do
	event BefJalLinks=16
	event BefJalMitte=16
	event BefJalRechts=16
endon
Asus Laptop -- N751JX -- i7-4720HQ -- 16GB RAM -- 250 GB SDD -- 1TB und 2 TB HDD -- Win10 Pro ver: 2004
_Cyber_

Re: Rolladensteuerung

Beitrag von _Cyber_ »

jetz hab ich dein prinzip verstanden.

Bei deiner logik schickst du die rolläden los, und wenn das pulse fertig ist ist's erledigt. Damit kannst du sie aber auch nie stoppen, bzw. wenn du sie stopps weisst du nicht mehr, wo sie sind.
das hätte ich mit der vielen zählerei in meinem code versucht abzudecken.

mein wunschendzustand ist, dass ich die 230V-taster die ich in jedem raum (für jeden rolladen, rauf und runter) habe dazu verwende, um einen weiteren ESP8266 mittels gpios zu schalten. der wiederrum schickt dann dem aktuellen ESP32, an dem die rolläden hängen, das rauf / runter / stop signal.

damit brauch ich die möglichkeit des stoppens am ESP, und das wiederrum erfordert dass ich beim stoppen weiß, wie lange der rolladen schon gefahren ist.

da du gefragt hast, für was die 250ms delay im code sind, und weil ich es bei dir "gefährlich" sehe: zumindest die motoren von mir (somfy irgendwas) haben extra erwähnt, dass man nicht instantan richtungwechseln darf, sondern da eine gewisse zeit dazwischen lassen muss. schaltet man direkt um geht die elektronik im rolladen kaputt.
inzwischen hab ich das in meinem code so gelöst, dass ich, wenn ein rolladen in bewegung ist, zuerst das "stopp" erforderlich ist, bevor er die andere richtung schalten darf. genau das hatte ich vorher (auch unureichend) mit dem delay gelöst.

LG
Benutzeravatar
Gast64
Aktiver
Beiträge: 50
Registriert: 28. Dez 2019, 22:14

Re: Rolladensteuerung

Beitrag von Gast64 »

Morgen,
bevor ich nun mal meinem 2. Hobby nachgehen muß, (Nebenjob bei Obi) kurz das Folgende:
Stop ist natürlich jederzeit möglich, mit Handy oder einer der fernbedienungen, die, dank Homematic überall rumliegen.
on Stop do
gpio,5,0
gpio,16,0
gpio,4,0
gpio,14,0
gpio,13,0
gpio,15,0
endon
Dann ist natürlich die Positionsbestimmung hinfällig, aber da ich nur konkrete Positionen anfahre, kommt ein Stop kaum vor, eigentlich nur,
wenn meine Frau wieder mal alle Tasten mit einmal drückt. Dann fahre ich einmal komplett zu oder auf und der Zustand stimmt wieder.
Ich überlege gerade, das könnte ich automatisieren. Stop-Vorgang speichern und vor jeder neuen Fahrt abfragen. Wenn Stop betätigt,
dann erst "Nullen" und dann die neue gewünschte Position.

Das Andere, die 250ms, da glaube ich, die nicht ganz so flotte Abarbeitung der Befehle und die Umschaltzeiten der Relais scheinen bei mir
auszureichen.
Womit bedienst Du eigentlich die Rollläden?
Gruß
Martin
Asus Laptop -- N751JX -- i7-4720HQ -- 16GB RAM -- 250 GB SDD -- 1TB und 2 TB HDD -- Win10 Pro ver: 2004
_Cyber_

Re: Rolladensteuerung

Beitrag von _Cyber_ »

ich bediene die rolläden mit dem ESP32 (mit espeasy) + Relays - der wiederrum wird mit einer selbstgebauten php webgui mit den entsprechenden events per HTTP bedient.

da ich beim Hausbau noch nicht auf Rolladenautomatisierung gedacht hatte, hab ich in jedem raum auch für jeden rolladen taster, die auch die 230V anliegen und schalten können. den strom zu diesen tastern trenne ich aktuell per powerrelais, sobald der ESP32 an der reihe ist, damit nicht doppelt geschalten werden kann.
später soll jeder der taster dann nur noch einen ESP8266 bedienen, der die entsprechenden events auf den ESP32 schickt. damit wäre dann auch doppelt drücken für "ganz zu", dreifach drücken für "raum zu" oder 4-fach drücken für "alle zu" ohne handy, per taster, möglich. :-)

das dauert aber bestimmt noch bis ich dafür zeit habe. :D
Benutzeravatar
Gast64
Aktiver
Beiträge: 50
Registriert: 28. Dez 2019, 22:14

Re: Rolladensteuerung

Beitrag von Gast64 »

Gerade letztens habe ich noch was Anderes entdeckt.
Der Shelly 2.5. Den kleineren Bruder habe ich hier schon mal etwas beschrieben.
Beschreibung Shelly 1

Hier der Shelly2.5
Shelly2.5_2.jpg
Schön klein. Passt fast in jede Schalterdose hinter den Taster.
Schön klein. Passt fast in jede Schalterdose hinter den Taster.
Komplette Beschreibung auf der Seite: https://shelly-api-docs.shelly.cloud/#shelly2-5
Hat die komplette Rollladensteuerung drin mit Anschluß für 2 Taster. Mit Leistungsmessung und Blockierungserkennung.
Mit allem drum und dran. Drinnen ist ein ESP. Der kann per App, mit oder ohne Cloud, als AP, oder nur im eigenen WLAN
gesteuert werden. Per http (wie Du es ja machst), Mqtt-kompatibel. Man kann sie auch miteinander verknüpfen.
Z.B.: Wenn Taster von Nr.1 sagt "30%" , dann Nummer 2 auch 30%. Hat eine umfangreiche API-Schnittstelle.
Ist auch auf genannter Webseite ausführlichst beschrieben. Gibt es überall zu kaufen. Auch in Deutschlandd bei
bekannten Händlern. Kein China-Händler oder Chinaserver notwendig. Serielle Schnittstelle ist nach außen geführt. Kannst auch eigene
Firmware drauf machen. Kostetr ca. 20€.
Im einfachsten Fall Taster abklemmen, Shelly in die Dose, abgehende Adern anklemmen, Taster an den Shelly anschließen.
Tastereingänge können auch unabhängig anderweitig genutzt werden. Normaler Schalterbetrieb (2 Kanäle) oder Rollladenbetrieb
wählbar.
Das nur mal so nebenbei bemerkt.
Asus Laptop -- N751JX -- i7-4720HQ -- 16GB RAM -- 250 GB SDD -- 1TB und 2 TB HDD -- Win10 Pro ver: 2004
_Cyber_

Re: Rolladensteuerung

Beitrag von _Cyber_ »

dafür sind meine Schalterdosen leider nicht tief genug - dadurch dass ich in den Räumen zwei Rollos auf einem Taster habe müsste ich zwei shelly's + den Taster in die dose bringen - das geht sich nicht aus.
Ich hab stattdessen die Kabel in den Hauptverteiler weitergezogen, dafür hatte ich platz. :-)
Benutzeravatar
Gast64
Aktiver
Beiträge: 50
Registriert: 28. Dez 2019, 22:14

Re: Rolladensteuerung

Beitrag von Gast64 »

Im Verteiler ist ja noch besser. Für solche Fälle schmeisse ich meinen Drucker (3D) an und mache passende Halter bzw komplettes Gehäuse, wo ich die Dinger einbaue. :D
Hängt natürlich vom Gesamtaufbau ab. Sollte ja auch nur eine Randbemerkung sein für zukünftige Aufgaben. Bin gerade am Überlegen und testen, wegen
Positionsfeststellung bei meiner Version.
Schönen Abend
Asus Laptop -- N751JX -- i7-4720HQ -- 16GB RAM -- 250 GB SDD -- 1TB und 2 TB HDD -- Win10 Pro ver: 2004
Antworten