Seite 1 von 1

#1 Rollläden an Ausgängen über Domiq positionieren

Verfasst: Fr 29. Mär 2013, 19:35
von Beleuchtfix
Im LCN System ist keine Möglichkeit vorgesehen, Rollläden über Ausgänge zu positionieren. Mit folgenden Funktionen und Events ist es möglich, eine Positionierung relativ genau zu steuern.

Inzwischen gibt es ein zweites Modul, dass Rollläden an Relais positioniert.

Die Hauptfunktionen sind universell und können für alle Rollläden gleichzeitig genommen werden. Einige Events und Hilfsfunktionen müssen aber für jeden Rollladen einzeln angelegt werden.

Zunächst bestimmt man Laufzeiten des Rollladens getrennt für auf und ab (Beispielhaft für Modul 91 und 121) und trägt sie in die Datei user.lua (Domiq im Tab Logic)ein. Alle Werte werden in Millisekunden angegeben.

Code: Alles auswählen

-- Laufzeiten der Rollläden
set ('t_auf.91',15000)  --SZ
set ('t_ab.91',14500)

set ('t_auf.121',15900) --Bibl.
set ('t_ab.121',15000)
Das LCN Modul muss als Motorschalter mit Zeitbegrenzung eingestellt sein. Die Endlagen werden immer über auf oder ab Befehl angefahren, wenn der Modulausgang noch 2% ist, ist die Endlage erreicht und der Rollladen definiert in der Endlage. Bei Zwischenpositionen erfolgt nach der errechneten Fahrzeit ein Stop Befehl. Ist die Ausgangslage nicht bekannt (z.B. wurde der Rollladen nicht positioniert sonder von Hand gesteuert) dann wird über Endlage, die der gewünschten Position am nahesten liegt, gefahren. Ist die Position zu ungenau, kann man auch ein Fahren über die Endlagen erzwingen.

Die Position kann z.B. in Remote angezeigt werden.

Der eigentlich Einstieg geht immer über die nachfolgende Funktion, Übergabewerte sind die Modulnummer, die gewünschte Position (0=offen, 100 = geschlossen) und ein Zwangssteuerungswert (0= normal, 1 = Fahrt über die Endlagen)

Code: Alles auswählen

function roll_pos(mod,pos,force) -- position 100 = geschlossen, 0 = offen, modul , Zwangssteuerung über Endlage
	local t_auf = get('t_auf.'..mod)
	local t_ab = get('t_auf.'..mod)
	local position = get ('VAR.roll_position.'..mod)
	local oben = get('LCN.output.0.'..mod..'.1')
	local unten = get('LCN.output.0.'..mod..'.2')
	local position_alt = get ('VAR.roll_position.'..mod)
	local b = type(position_alt)
	if (b ~= 'number' or force > 0) then
		position_alt = 'n/a'
	end 
	if (oben == 2 ) then
		position_alt = 0
		roll_pos_absolut(mod,pos)
		set ('VAR.roll_position.'..mod,pos)
	elseif unten == 2 then
		position_alt = 100
		roll_pos_absolut(mod,pos)
		set ('VAR.roll_position.'..mod,pos)
	elseif position_alt == "n/a" then
		roll_pos_absolut(mod,pos)
	else -- Zwischenposition direkt anfahren
		relpos = pos - position_alt
		if relpos >0 then 
			delay_ab = ((t_ab/100)*(relpos))	
			command ('C.LCN.output.0.'..mod..'.2=100')
			command ('DELAY.'..delay_ab..'ms.C.LCN.output.0.'..mod..'.2=0')
			set ('VAR.roll_position.'..mod,pos)			
		elseif relpos = 96 then 
		command ('C.LCN.output.0.'..mod..'.2=100')
	elseif pos =40 then
		-- über unteren Stop
		command ('C.LCN.output.0.'..mod..'.2=100')
		command ('DELAY.'..(t_ab+1000)..'ms.C.LCN.output.0.'..mod..'.1=100') -- unten
		command ('DELAY.'..(t_ab+1000+delay_auf)..'ms.C.LCN.output.0.'..mod..'.1=0')
	else -- über oberen Stop
		command ('C.LCN.output.0.'..mod..'.1=100')
		command ('DELAY.'..(t_auf+1000)..'ms.C.LCN.output.0.'..mod..'.2=100') -- unten
		command ('DELAY.'..(t_auf+1000+delay_ab)..'ms.C.LCN.output.0.'..mod..'.2=0')
	end
	command ('DELAY.'..(t_auf*1.5)..'ms.C.LOGIC=roll_set_value('..mod..','..pos..')')
end
Funktion gibt die Position aus und schreibt sie in eine Variable.

Code: Alles auswählen

function roll_set_value(mod,pos)
	set ('VAR.roll_position.'..mod,pos) 
	local textvalue = tostring(pos)..'%'
	set ('VAR.roll_position.text.'..mod,textvalue)
end
Folgende Funktion ist für jeden Rollladen notwendig, da sie automatisch durch einen Event aufgerufen wird.

Code: Alles auswählen

function roll_91_flag:onchange(new) --SZ
	if (new == 'n/a') then
		set ('VAR.roll_posflag.91',1)
	else
		set ('VAR.roll_posflag.91',0)
	end
end 

function roll_121_flag:onchange(new) -- Bibl
	if (new == 'n/a') then
		set ('VAR.roll_posflag.121',1)
	else
		set ('VAR.roll_posflag.121',0)
	end
end 
Funktion die aufgerufen wird, wenn sich der Rollladen bewegt und damit die Position ungewiss ist.

Code: Alles auswählen

function roll_na(mod,motor) -- Position + Text speichern, 
	local x = get('LCN.output.0.'..mod..'.'..motor) 
	local value
	local textvalue
--	print ('Modul: '..mod..' Pos: '..x..' Motor: '..motor)
	if motor == 1 then -- auf
		if x == 2 then 
			value = 0
			textvalue = 'oben'
		else
			value = 'n/a'
			textvalue = 'n/a'
		end
	else -- motor 2 ab
		if x == 2 then 
			value = 100
			textvalue = 'unten'
		else
			value = 'n/a'
			textvalue = 'n/a'			
		end
	end
	-- speichern und Umwandlung Text
	set ('VAR.roll_position.'..mod,value)
	set ('VAR.roll_position.text.'..mod,textvalue)
	
end
Jetzt brauchen wir noch für jeden Rollladen 2 Events, die feststellen, ob der Motor in Betrieb ist.

Code: Alles auswählen

Beschreibung: SZ.Position1
Kanal: E.LCN.output.0.91.1
Befehl: 
	Name: C.LOGIC
	Wert: roll_na(91,1)

Beschreibung: SZ.Position2
Kanal: E.LCN.output.0.91.2
Befehl: 
	Name: C.LOGIC
	Wert: roll_na(91,2)
In Remote erzeugt man nun eine Taste mit z.B. folgendem Befehl:

Code: Alles auswählen

Label: Lüften
Befehl: 
	Name: C.LOGIC
	Wert: roll_pos(91,80,0) -- Fährt den Rollladen des Moduls 91 auf Position 80%

Zur Anzeige der Position erzeugt man ein Textfeld

Code: Alles auswählen

Kanal: VAR.roll_position.text.91
Jetzt viel Spaß mit euren Rollläden :)
Geändert: Link zu Rollläden an Relais

#2 RE: Rollläden an Ausgängen über Domiq positionieren

Verfasst: Sa 30. Mär 2013, 14:43
von Franky
Das ist perfekt! Super umgesetzt Florian. :thumbup:

Cool wäre es noch, hiermit Rolläden an Relaisausgängen ohne BS4 zu positionieren. :)

#3 RE: Rollläden an Ausgängen über Domiq positionieren

Verfasst: Sa 30. Mär 2013, 15:26
von Beleuchtfix
Darüber habe ich auch schon nachgedacht, ich habe aber nur einen einzigen Rollladen an einem Relais, der auch noch wenig benutzt wird. Dazu gibt es ein BS4, was ich inzwischen gegen eine LinHK Positionierung ausgetauscht habe. Also richtigen Druck habe ich momentan nicht. Ich lass das mal in meinem Kopf arbeiten, vielleicht kommt dann plötzlich eine Geistesblitz.

Gruß
Florian

#4 RE: Rollläden an Ausgängen über Domiq positionieren

Verfasst: So 31. Mär 2013, 11:12
von Matthias_@_Home
Genial :thumbup:

mit etwas Glück werde ich nächste Woche die frisch eingetroffene Wetterstation montieren und dann versuchen die Rolladenpositionierung für die Verschattung zu nutzen (ich hoffe, diese Funktion gibt es schon....)

Da in den Kinderzimmern (Mittagsschalf) ein manuell geschlossenes Rollo zwingend unten bleiben soll, kann man den o.g. Status doch sicher dazu nutzen ein Rollo von der Verschattung auszugrenzen oder?

Rollo geschlossen = keine Verschattung
Rollo offen oder in einer Position = Verschattung ....


Mfg
Matthias

#5 RE: Rollläden an Ausgängen über Domiq positionieren

Verfasst: So 31. Mär 2013, 12:48
von norden
Hallo Florian,

:thumbup: sieht klasse aus. Habe leider keine Rollläden, hätte das aber sonst sicher genutzt.

Österliche Grüße
Dieter

#6 RE: Rollläden an Ausgängen über Domiq positionieren

Verfasst: So 31. Mär 2013, 14:06
von Beleuchtfix
ich benutze für so etwas entweder dynamische Gruppen und Tastensperren.

Gruß
Florian