Vor einiger Zeit habe ich ein Script für die Positionierung von Rollläden an Ausgängen geschrieben, hier ein weiteres Modul, um Rollläden an Relais ohne BS4 zu positionieren.
Version vom 25.07.2013 
Das Script ist relativ ähnlich aufgebaut, allerdings ist jeder Abschnitt trotzdem anders geworden. 
Für jeden Rollladen wird der Zustand des Netzrelais überwacht, und bei einer Änderung etwas gerechnet. Dabei muss dann natürlich auch das Richtungsrelais ausgewertet werden. Das Richtungsrelais wird nach dem Stoppen auch abgeschaltet, wodurch man etwas Strom, sparen kann. Eine Steuerung von Außen wird erkannt, bei "Zwischenstellungen" wird die Position mit "n/a" ausgewertet, fährt der Rollladen lang genug (Laufzeit + eine Sicherheitsreserve) wird davon ausgegangen, dass er in der entsprechenden Endposition ist.
Beim Modul wird unter Ausgängen:Relais und Rollladen auf Relais eingestellt, zusätzlich sollte die Zeitbegrenzung aktiviert sein.
[code=cpp-qt]-- Laufzeiten der Rollläden
startzeit = {} -- Startzeit bei Rollladenstart
set ('t_auf.rel.121.3',5900) --an Relais Angabe in ms
set ('t_ab.rel.121.3',5000)
set ('t_auf.rel.240.1',27000) --OG Balkon
set ('t_ab.rel.240.1',25000)
[/code]
Hiermit wird das Netzrelais überwacht. Die Bezeichnung links ist Modul_Motor rechts Modul.Relais. Diese Funktion wird für jeden Rollladen einmal benötigt.
[code=cpp-qt]roll_rel_121_2_flag = use 'LCN.relay.0.121.3'
roll_rel_240_1_flag = use 'LCN.relay.0.240.1'
function roll_rel_121_2_flag:onchange(new) -- Relais 3
   roll_rel_na(121,2,3,new) --Modul, Motor, Relais, Relaisstatus
end 
function roll_rel_240_1_flag:onchange(new) -- Relais 1
   roll_rel_na(240,1,1,new) --Modul, Motor, Relais, Relaisstatus
end 
[/code]
Hier sind die Strings untergebracht, nach denen die Relais gesteuert werden. Ist z.B. das Richtungsrelais anders angeschlossen, kann man hier die Änderung eintragen.
[code=cpp-qt]-- Rollläden Relais String
down = {'11------';'--11----';'----11--';'------11'}
up = {'10------';'--10----';'----10--';'------10'}
stop = {'00------';'--00----';'----00--';'------00'} -- Richtungsrelais wird aus stromspargründen abgeschaltet
[/code]
Und die Bearbeitung, wenn sich das Relais ändert:
[code=cpp-qt]
function roll_rel_na(mod,motor,relay, new)  -- Bei Änderung des Power Relais
-- On, Zeit starten und n/a setzen
	local t_auf = get('t_auf.rel.'..mod..'.'..motor)
	local t_ab = get('t_ab.rel.'..mod..'.'..motor)
	local position = get ('VAR.roll_position_rel.'..mod..'.'..motor)
	local position_alt = position
	local richtung
	if (new == 1) then
      richtung = get('LCN.relay.0.'..mod..'.'..(relay + 1))
      startzeit[mod .. '.' .. motor] = systime()
--      print(startzeit[mod][motor])
	   set ('VAR.roll_position_rel.'..mod..'.'..motor,"n/a")
      set ('VAR.roll_start_rel.'..mod..'.'..motor,"n/a")
      set ('VAR.roll_position_rel.text.'..mod..'.'..motor,"n/a")
   elseif (new ==0) then
      local stopzeit = systime()
      if startzeit[mod .. '.' .. motor] then
         laufzeit = math.floor((stopzeit - startzeit[mod .. '.' .. motor])*1000) -- ms
         startzeit[mod .. '.' .. motor] = null
      else print('Fehler Startzeit')
      end
      -- Endlage?
      if richtung == 1 then -- ab
         if laufzeit > (t_ab + 2000)then
             set ('VAR.roll_position_rel.'..mod..'.'..motor,100)
             set ('VAR.roll_position_rel.text.'..mod..'.'..motor,"unten")
             --Richtungsrelais ausschalten
            value = stop[motor]
      		command ('C.LCN.relays.0.'..mod..'='..value)
         else  -- Zwischenposition
--                      -- Off Zeit messen und Position berechnen.
         end
      else -- auf  
         if laufzeit > (t_auf + 2000)then
              set ('VAR.roll_position_rel.'..mod..'.'..motor,0)
              set ('VAR.roll_position_rel.text.'..mod..'.'..motor,"oben")
             --Richtungsrelais ausschalten
            value = stop[motor]
      		command ('C.LCN.relays.0.'..mod..'='..value)
         else  -- Zwischenposition
--                -- Off Zeit messen und Position berechnen.
         end
      end   
	end
end
[/code]
Jetzt kommt die eigentliche Steuerung
[code=cpp-qt]
-- Rollläden an Relais
function roll_rel_pos(mod,motor,pos,force) -- motor 1-4, position 100 = geschlossen, 0 = offen, modul , Zwangssteuerung über Endlage
	local t_auf = get('t_auf.rel.'..mod..'.'..motor)
	local t_ab = get('t_ab.rel.'..mod..'.'..motor)
	local position = get ('VAR.roll_position_rel.'..mod..'.'..motor)
	local position_alt = position
	local b = type(position_alt)
	if (b ~= 'number' or force > 0) then
		position_alt = 'n/a'
	end 
	if pos == 0 then  -- Bei Endlage immer bis zum Anschlag volle LAufzeit fahren
		position_alt = 100
		roll_rel_pos_absolut(mod,motor,pos)
		set ('VAR.roll_position_rel.'..mod..'.'..motor,pos)
	elseif pos == 100 then
		position_alt = 0
		roll_rel_pos_absolut(mod,motor,pos)
		set ('VAR.roll_position_rel.'..mod..'.'..motor,pos)
	elseif position_alt == "n/a" then
		roll_rel_pos_absolut(mod,motor,pos)
	else -- Zwischenposition direkt anfahren
		relpos = pos - position_alt
		if relpos >0 then 
			delay_ab = ((t_ab/100)*(relpos))	
			roll_rel_run(mod,motor,'down',pos)
-- 			command('DELAY.'..delay_ab..'ms.C.LOGIC=roll_rel_run('..mod..','..motor..',"stop",..'pos')')	
	 		command('DELAY.'..delay_ab..'ms.C.LOGIC=roll_rel_run('..mod..','..motor..',"stop",'..pos..')')
		elseif relpos = 96 then -- unten 
		roll_rel_run(mod,motor,'down',100)
		command('DELAY.'..delay_ab..'ms.C.LOGIC=roll_rel_run('..mod..','..motor..',"stop",100)')	
	elseif pos =40 then
		roll_rel_run(mod,motor,'down',100)
		command('DELAY.'..(t_ab+1000)..'ms.C.LOGIC=roll_rel_run('..mod..','..motor..',"up",'..pos..')')	 -- unten
		command('DELAY.'..(t_ab+1000+delay_auf)..'ms.C.LOGIC=roll_rel_run('..mod..','..motor..',"stop",'..pos..')')	 -- Position
	else -- über oberen Stop
		roll_rel_run(mod,motor,'up',0)
		command('DELAY.'..(t_auf+1000)..'ms.C.LOGIC=roll_rel_run('..mod..','..motor..',"down",'..pos..')')	 -- unten
		command('DELAY.'..(t_auf+1000+delay_ab)..'ms.C.LOGIC=roll_rel_run('..mod..','..motor..',"stop",'..pos..')')	 -- Position
	end
end
[/code]
Das Schalten der Relais und Abspeichern der Werte
[code=cpp-qt]
function roll_rel_run(mod,motor,_task,pos) --
   local position_text
	if _task == 'up' then
		value = up[motor]
	elseif _task == 'down' then 
		value = down[motor]
	elseif _task == 'stop'  then -- stop 
		value = stop[motor]
	end
	if value then
		command ('C.LCN.relays.0.'..mod..'='..value)
 		if _task == 'stop' then
-- 			command('DELAY.2000ms.C.set('VAR.roll_position_rel.'..mod..'.'..motor,pos)') --Wert abspeichern
			set('VAR.roll_position_rel.'..mod..'.'..motor,pos) --Wert abspeichern
      		if pos == 0 then 
      			position_text = 'oben'
				    set ('VAR.roll_position_rel.text.'..mod..'.'..motor,"n/a")
			elseif pos == 100 then
				position_text = 'unten'
			else
				position_text = pos
			end
			set ('VAR.roll_position_rel.text.'..mod..'.'..motor,position_text)			
		else
-- 			set ('VAR.roll_position_rel.'..mod..'.'..motor,"n/a") --Wert abspeichern
 		end 
	end
end
[/code]
Für die Anzeige in Remote erzeuge ich ein Labelfeld mit
[code=cpp-qt]VAR.roll_position_rel.text.240.1[/code]
Für die Positionierung einen Pushbutton mit C.LOGIC  und als Wert roll_rel_pos(240,1,80,0)
Wenn ich ein Fahrt über die Endlagen erzwingen will, dann einfach den Force Wert mit 1 angeben.
C.LOGIC  und als Wert roll_rel_pos(240,1,80,1)
In Remote nehme ich ein Langkommando mit Position erzwingen, das Kurz-Kommando für eine normale Fahrt.
[img]1[/img]
Ich wünsche Euch viel Spaß damit. Jetzt fehlt nur noch, auch Fahrten von außen auszuwerten und daraus eine Position zu errechnen.
Gruß
Florian
[edit]Neue Version vom 25.07.2013[/edit]
							Willkommen auf unserer neuen Forenplattform für das Bus-Profi Forum
Neue Felder für die persönlichen Daten
Man kann jetzt seine öffentlich einsehbare Daten genau bestimmen. Details findet ihr in in diesem Beitrag.
Durch die neue Forensoftware und die Portierung der Daten konnten die Passwörter aus dem alten Forum nicht übernommen werden, bitte lassen Sie sich ein neues Passwort über die Passwort vergessen Funktion zusenden. Sollte es zu Problemen kommen kontaktieren Sie das Bus-Profi Team per E-Mail.
	Neue Felder für die persönlichen Daten
Man kann jetzt seine öffentlich einsehbare Daten genau bestimmen. Details findet ihr in in diesem Beitrag.
Durch die neue Forensoftware und die Portierung der Daten konnten die Passwörter aus dem alten Forum nicht übernommen werden, bitte lassen Sie sich ein neues Passwort über die Passwort vergessen Funktion zusenden. Sollte es zu Problemen kommen kontaktieren Sie das Bus-Profi Team per E-Mail.
Rollläden an Relais über Domiq positionieren
- 
				
				
Beleuchtfix
 Themenersteller
- Administrator 
- Beiträge: 5302
- Registriert: Mi 10. Jan 2007, 18:49
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 16 Mal
- Kontaktdaten:
#1 Rollläden an Relais über Domiq positionieren
- Dateianhänge
- 
			
		
				- 522681Foto.PNG (36.49 KiB) 3909 mal betrachtet
 
- 
				
				koboldo
 
- Fleißiges Mitglied 
- Beiträge: 324
- Registriert: Do 16. Feb 2012, 15:50
- Hat sich bedankt: 7 Mal
#2 RE: Rollläden an Relais über Domiq positionieren
Hallo Florian,
gibt es hier schon Neuigkeiten ? :blush:
Wie funktioniert das überhaupt :blush:
Müsste ich lediglich deine Scripts in Logic reinkopieren und nur die Modulnamen und Rolladenlaufzeiten anpassen ?
Anschließend würde ich die funktion z.B. über einen Button in der Visu mit LOGIC.funktionsnahme aufrufen ?
Warum ist hier einmal _2 und rechts .3 ?
roll_rel_121_2_flag = use 'LCN.relay.0.121.3'
Gruß
Jörg
			
									
						gibt es hier schon Neuigkeiten ? :blush:
Wie funktioniert das überhaupt :blush:
Müsste ich lediglich deine Scripts in Logic reinkopieren und nur die Modulnamen und Rolladenlaufzeiten anpassen ?
Anschließend würde ich die funktion z.B. über einen Button in der Visu mit LOGIC.funktionsnahme aufrufen ?
Warum ist hier einmal _2 und rechts .3 ?
roll_rel_121_2_flag = use 'LCN.relay.0.121.3'
Gruß
Jörg
- 
				
				
Beleuchtfix
 Themenersteller
- Administrator 
- Beiträge: 5302
- Registriert: Mi 10. Jan 2007, 18:49
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 16 Mal
- Kontaktdaten:
#3 RE: Rollläden an Relais über Domiq positionieren
Hi Jörg,
Das Script habe ich bei mir zu Hause angepasst, so dass auch mehrere Rollläden gleichzeitig gehen sollten (ich habe aber nur einen an einem Relais). Nachdem bis jetzt noch keine Reaktion da war, habe ich noch kein Update vorgenommen.
Bei der Nummerierung spreche ich einmal von Motor (1-4) und dann von Relais.(1-8) Natürlich könnte man das Relais auch per Script berechnen, aber ich habe es direkt im Kopf berechnet
Eigentlich kannst du den gesamten Code in einem Rutsch nach Logik kopieren, du musst dann nur noch die Bedienelemente für Remote bzw. Display erstellen.
Ich schau mal, ob ich heute noch den aktuellen Code einspielen kann.
Viel Erfolg
Florian
			
									
						Das Script habe ich bei mir zu Hause angepasst, so dass auch mehrere Rollläden gleichzeitig gehen sollten (ich habe aber nur einen an einem Relais). Nachdem bis jetzt noch keine Reaktion da war, habe ich noch kein Update vorgenommen.
Bei der Nummerierung spreche ich einmal von Motor (1-4) und dann von Relais.(1-8) Natürlich könnte man das Relais auch per Script berechnen, aber ich habe es direkt im Kopf berechnet

Eigentlich kannst du den gesamten Code in einem Rutsch nach Logik kopieren, du musst dann nur noch die Bedienelemente für Remote bzw. Display erstellen.
Ich schau mal, ob ich heute noch den aktuellen Code einspielen kann.
Viel Erfolg
Florian
- 
				
				koboldo
 
- Fleißiges Mitglied 
- Beiträge: 324
- Registriert: Do 16. Feb 2012, 15:50
- Hat sich bedankt: 7 Mal
#4 RE: Rollläden an Relais über Domiq positionieren
Hallo Florian,
ich habe auch nur einen Rolladen pro Relais, dann hatte ich das falsch verstanden....
Es war also gemeint, das es nicht funktioniert wenn man 2 Rolläden parallel mit einem Relais steuert oder ?
Was ist mit den Laufzeiten ? Muss ich die einmal pro Rolladen messen ?
Sind das in deinem Fall 5900 = 5,9 sec ?
Bin erst am Anfang meiner Experimente, ich hoffe ich kann später auch mal etwas zurückgeben :rolleyes:
LG
Jörg
P.s:: Wäre super wenn du dein überarbeitetes Script posten könntest
			
									
						ich habe auch nur einen Rolladen pro Relais, dann hatte ich das falsch verstanden....
Es war also gemeint, das es nicht funktioniert wenn man 2 Rolläden parallel mit einem Relais steuert oder ?
Was ist mit den Laufzeiten ? Muss ich die einmal pro Rolladen messen ?
Sind das in deinem Fall 5900 = 5,9 sec ?
Bin erst am Anfang meiner Experimente, ich hoffe ich kann später auch mal etwas zurückgeben :rolleyes:
LG
Jörg
P.s:: Wäre super wenn du dein überarbeitetes Script posten könntest

- 
				
				
Beleuchtfix
 Themenersteller
- Administrator 
- Beiträge: 5302
- Registriert: Mi 10. Jan 2007, 18:49
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 16 Mal
- Kontaktdaten:
#5 RE: Rollläden an Relais über Domiq positionieren
Das Script ist oben aktualisiert. (Ne, es geht nicht um die Anzahl der Rollläden pro Relais, sondern wie viele überhaupt Rollläden an Relais  angeschlossen sind.) Das gleiche script wird von jedem Rollladen angesprochen, und da muss natürlich jedesmal eine andere Variable abgespeichert werden. Das hatte ich mir bei der Zeitmessung gespart, sollte jetzt aber gehen. Ansonsten  wieder melden. 
Ja, die Zeiten sind Millisekunden, und zwar getrennt für auf und ab. Übrigens ist das Script nur für Segment 0 ausgelegt, aber das dürfte wahrscheinlich nicht ein Problem sein.
Viel Erfolg
Florian
			
									
						
Ja, die Zeiten sind Millisekunden, und zwar getrennt für auf und ab. Übrigens ist das Script nur für Segment 0 ausgelegt, aber das dürfte wahrscheinlich nicht ein Problem sein.
Viel Erfolg
Florian
- 
				
				koboldo
 
- Fleißiges Mitglied 
- Beiträge: 324
- Registriert: Do 16. Feb 2012, 15:50
- Hat sich bedankt: 7 Mal
#6 RE: Rollläden an Relais über Domiq positionieren
Ich hänge gedanklich irgendwie immer noch an der Zeile:
Ich muss leider noch mal fragen....
Warum hast du hier 121_2 genommen und nicht 121_3 ?
Das roll_rel_121_2_flag ist doch nur eine Variable, die du dort gerade in dem Moment erstellst oder nicht ?
Gruß
Jörg
			
									
						Code: Alles auswählen
roll_rel_121_2_flag = use 'LCN.relay.0.121.3'
Ich muss leider noch mal fragen....
Warum hast du hier 121_2 genommen und nicht 121_3 ?
Das roll_rel_121_2_flag ist doch nur eine Variable, die du dort gerade in dem Moment erstellst oder nicht ?
Gruß
Jörg
- 
				
				
Beleuchtfix
 Themenersteller
- Administrator 
- Beiträge: 5302
- Registriert: Mi 10. Jan 2007, 18:49
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 16 Mal
- Kontaktdaten:
#7 RE: Rollläden an Relais über Domiq positionieren
Es sieht so aus, als ob deine Lösung auch geht. Grundsätzlich zu meinen Bezeichnungen:
roll_rel steht Für Rollladen an Relais, dann kommt das Modul und anschließend der Motor. Für den Motor 2 ist das Netzrelais die Nr. 3. öfters wird die passende Variable per String zusammengesetzt um sie abzufragen, deshalb habe ich da den Motor gewählt. Allerdings wird hier die Variable sonst nicht mehr benutzt, sondern sie startet selbst die entsprechende Funktion, da ist der Name egal.
Viel Erfolg
Florian
			
									
						roll_rel steht Für Rollladen an Relais, dann kommt das Modul und anschließend der Motor. Für den Motor 2 ist das Netzrelais die Nr. 3. öfters wird die passende Variable per String zusammengesetzt um sie abzufragen, deshalb habe ich da den Motor gewählt. Allerdings wird hier die Variable sonst nicht mehr benutzt, sondern sie startet selbst die entsprechende Funktion, da ist der Name egal.
Viel Erfolg
Florian
- 
				
				koboldo
 
- Fleißiges Mitglied 
- Beiträge: 324
- Registriert: Do 16. Feb 2012, 15:50
- Hat sich bedankt: 7 Mal
#8 RE: Rollläden an Relais über Domiq positionieren
Danke schon mal für Deine Hilfe :thumbup: 
Werde das heute abend vielleicht mal austesten....
Wie rufe ich denn dann das ganze aus der Visu auf ?
Einfach ein dein C.LOGIC.roll_rel_pos(240,1,80,0) ohne C. und mit meinen Modulnr. etc.
Also LOGIC.roll_rel_pos(19,3,80,0) bei einem Switch unter Befehl eingeben oder bei einem light und Channel ?
Gruß
Jörg
			
									
						Werde das heute abend vielleicht mal austesten....
Wie rufe ich denn dann das ganze aus der Visu auf ?
Einfach ein dein C.LOGIC.roll_rel_pos(240,1,80,0) ohne C. und mit meinen Modulnr. etc.
Also LOGIC.roll_rel_pos(19,3,80,0) bei einem Switch unter Befehl eingeben oder bei einem light und Channel ?
Gruß
Jörg
- 
				
				koboldo
 
- Fleißiges Mitglied 
- Beiträge: 324
- Registriert: Do 16. Feb 2012, 15:50
- Hat sich bedankt: 7 Mal
#9 RE: Rollläden an Relais über Domiq positionieren
Hallo Florian,
ich habe das mal soweit eingetragen und bekomme Fehlermeldungen.....
Im Anhang ist der entsprechende Code Ausschnitt...
Wobei auch noch die Frage offen ist, wie ich das in der Visu aufrufen kann ?
Gruß
Jörg
							ich habe das mal soweit eingetragen und bekomme Fehlermeldungen.....
Code: Alles auswählen
R: [string "-- *******************..."]:137: attempt to index global 'startzeit' (a nil value)
ERROR: [string "-- *******************..."]:130: attempt to index global 'startzeit' (a nil value)
ERROR: [string "-- *******************..."]:137: attempt to index global 'startzeit' (a nil value)
ERROR: [string "-- *******************..."]:130: attempt to index global 'startzeit' (a nil value)
ERROR: [string "-- *******************..."]:137: attempt to index global 'startzeit' (a nil value)
ERROR: [string "-- *******************..."]:130: attempt to index global 'startzeit' (a nil value)
ERROR: [string "-- *******************..."]:137: attempt to index global 'startzeit' (a nil value)
ERROR: [string "-- *******************..."]:130: attempt to index global 'startzeit' (a nil value)
ERROR: [string "-- *******************..."]:137: attempt to index global 'startzeit' (a nil value)
ERROR: [string "-- *******************..."]:137: attempt to index global 'startzeit' (a nil value)
ERROR: [string "-- *******************..."]:137: attempt to index global 'startzeit' (a nil value)
ERROR: [string "-- *******************..."]:137: attempt to index global 'startzeit' (a nil value)
INFO: SCRIPT RELOADED AT 04:58Im Anhang ist der entsprechende Code Ausschnitt...
Wobei auch noch die Frage offen ist, wie ich das in der Visu aufrufen kann ?
Gruß
Jörg
- Dateianhänge
- 
			
		
				- 524501code.JPG (48.51 KiB) 3909 mal betrachtet
 
- 
				
				
Beleuchtfix
 Themenersteller
- Administrator 
- Beiträge: 5302
- Registriert: Mi 10. Jan 2007, 18:49
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 16 Mal
- Kontaktdaten:
#10 RE: Rollläden an Relais über Domiq positionieren
Da fehlte noch eine Zeile, sorry:
[code=cpp-qt]startzeit = {} -- Startzeit bei Rollladenstart
[/code]
Viel Erfolg
Florian
(bin jetzt die nächsten 2 Tage nicht erreichbar ...
			
									
						[code=cpp-qt]startzeit = {} -- Startzeit bei Rollladenstart
[/code]
Viel Erfolg
Florian
(bin jetzt die nächsten 2 Tage nicht erreichbar ...
Zurück zu „Domiq-Module - DOMIQ Sp. z o.o.“
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


 Offizieller KNX Partner
  Offizieller KNX Partner 