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
[edit]Link zu Rollläden an Relais[/edit]