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.

Rollläden an Relais über Domiq positionieren

Hard- und Softwarefragen rund Domiq-Module fürs LCN-System
Benutzeravatar

Themenersteller
Beleuchtfix
Administrator
Administrator
Beiträge: 5294
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

Beitragvon Beleuchtfix » Mi 10. Jul 2013, 19:27

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]
Dateianhänge
522681Foto.PNG
522681Foto.PNG (36.49 KiB) 3452 mal betrachtet


koboldo
Fleißiges Mitglied
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

Beitragvon koboldo » Mo 22. Jul 2013, 11:20

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

Benutzeravatar

Themenersteller
Beleuchtfix
Administrator
Administrator
Beiträge: 5294
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

Beitragvon Beleuchtfix » Mo 22. Jul 2013, 12:00

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 :P

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
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

Beitragvon koboldo » Mo 22. Jul 2013, 12:18

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 ;)

Benutzeravatar

Themenersteller
Beleuchtfix
Administrator
Administrator
Beiträge: 5294
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

Beitragvon Beleuchtfix » Mo 22. Jul 2013, 12:50

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


koboldo
Fleißiges Mitglied
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

Beitragvon koboldo » Mo 22. Jul 2013, 13:19

Ich hänge gedanklich irgendwie immer noch an der Zeile:

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

Benutzeravatar

Themenersteller
Beleuchtfix
Administrator
Administrator
Beiträge: 5294
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

Beitragvon Beleuchtfix » Mo 22. Jul 2013, 16:40

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


koboldo
Fleißiges Mitglied
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

Beitragvon koboldo » Mo 22. Jul 2013, 16:50

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


koboldo
Fleißiges Mitglied
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

Beitragvon koboldo » Di 23. Jul 2013, 06:02

Hallo Florian,
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:58


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
Dateianhänge
524501code.JPG
524501code.JPG (48.51 KiB) 3452 mal betrachtet

Benutzeravatar

Themenersteller
Beleuchtfix
Administrator
Administrator
Beiträge: 5294
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

Beitragvon Beleuchtfix » Di 23. Jul 2013, 08:58

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 ...


Zurück zu „Domiq-Module - DOMIQ Sp. z o.o.“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 28 Gäste