Somfy RTS + CUXD => Homematic (ohne Aktor)
Moderator: Co-Administratoren
Re: Somfy RTS + CUXD => Homematic (ohne Aktor)
Hallo chka
bei mir stürzt er nicht mehr ab, was ich beobachtet habe, wenn zu viele befehle kommen das er 1 Rollo mal nicht ansteuert. 2 Befehle funktionieren Problemlos nur 3 innerhalb von ca.2 Sekunden klappen nicht. Befehle müssen dann erneut ausgeführt werden.
Abstürzte passieren wahrscheinlich nur mit nanoculs (Selbstbaucul).
Dank comtel2000 sind die Abstürze Geschichte.
Tinamausi
bei mir stürzt er nicht mehr ab, was ich beobachtet habe, wenn zu viele befehle kommen das er 1 Rollo mal nicht ansteuert. 2 Befehle funktionieren Problemlos nur 3 innerhalb von ca.2 Sekunden klappen nicht. Befehle müssen dann erneut ausgeführt werden.
Abstürzte passieren wahrscheinlich nur mit nanoculs (Selbstbaucul).
Dank comtel2000 sind die Abstürze Geschichte.
Tinamausi
Asustinker S mit RaspiMatic, CUX Version 2.2.0 mit 2 Selbstbau Cul (433/868 MHz), Raspi3 mit Display 7" und ioBroker
70 Kanäle in 36 Geräten und 51 CUxD-Kanäle in 17 CUxD-Geräten
70 Kanäle in 36 Geräten und 51 CUxD-Kanäle in 17 CUxD-Geräten
-
- Beiträge: 2484
- Registriert: 13.02.2012, 20:23
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 302 Mal
- Danksagung erhalten: 116 Mal
-
- Beiträge: 2484
- Registriert: 13.02.2012, 20:23
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 302 Mal
- Danksagung erhalten: 116 Mal
Re: Somfy RTS + CUXD => Homematic (ohne Aktor)
bei mir funktioniert es leider nicht,
beim ersten mal starten aus dem terminal bekomme ich folgenden Fehler:
Der Fehler kommt beim auslesen der variable, danach wird wohl doch noch in die variable ein wert geschrieben: bei mir ist es dann 1211,
starte ich jetzt wieder das script bricht er ab:
beim ersten mal starten aus dem terminal bekomme ich folgenden Fehler:
Die Line ist bei mir eine andere als im original, ich schalte noch ein Relais ansyntax error in expression "int(false)"
while executing
"expr int($remote_counter)"
invoked from within
"set remote_counter [expr int($remote_counter)]"
(file "/usr/local/addons/rollo/somfy.tcl" line 103)
Code: Alles auswählen
set remote_counter [expr int($remote_counter)]
starte ich jetzt wieder das script bricht er ab:
Code: Alles auswählen
process: '1211' not finished - sleep for 2 sec.
still busy -> abort
Re: Somfy RTS + CUXD => Homematic (ohne Aktor)
Hallo chka
ich habe das Skript ausgetauscht, die Zahl in der variabel sieht gut aus, sie wird dann wieder gelöscht.
Tinamausi
ich habe das Skript ausgetauscht, die Zahl in der variabel sieht gut aus, sie wird dann wieder gelöscht.
Tinamausi
Asustinker S mit RaspiMatic, CUX Version 2.2.0 mit 2 Selbstbau Cul (433/868 MHz), Raspi3 mit Display 7" und ioBroker
70 Kanäle in 36 Geräten und 51 CUxD-Kanäle in 17 CUxD-Geräten
70 Kanäle in 36 Geräten und 51 CUxD-Kanäle in 17 CUxD-Geräten
-
- Beiträge: 2484
- Registriert: 13.02.2012, 20:23
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 302 Mal
- Danksagung erhalten: 116 Mal
Re: Somfy RTS + CUXD => Homematic (ohne Aktor)
ich bekomme es nicht hin,
ich habe mir mal ein test Programm gebastelt aus den Änderungen.
Lösche ich den Inhalt der variable kommt der Fehler, danach wird einmal in die variable geschrieben.
Gelöscht wird leider nichts, beim erneuten ausführen;
ich habe mir mal ein test Programm gebastelt aus den Änderungen.
Lösche ich den Inhalt der variable kommt der Fehler, danach wird einmal in die variable geschrieben.
Gelöscht wird leider nichts, beim erneuten ausführen;
process: '5039' not finished - sleep for 2 sec.
still busy -> abort
Code: Alles auswählen
#!/bin/tclsh
load tclrega.so
proc rega_read {obj} {
set cmd "var value = dom.GetObject('$obj').Value();"
array set values [rega_script $cmd]
return $values(value)
}
# read previous pid
set somfy_pid [rega_read SOMFY_PID]
if {$somfy_pid != ""} {
puts "process: '$somfy_pid' not finished - sleep for 2 sec."
after 2000 { set state done }
vwait state
# try again
set somfy_pid [rega_read SOMFY_PID]
if {$somfy_pid != ""} {
puts "still busy -> abort"
exit 1
}
}
# update current pid
set somfy_pid [pid]
rega_script dom.GetObject('SOMFY_PID').State('$somfy_pid');
# free pid lock after 2000ms
after 2000 {
rega_script dom.GetObject('SOMFY_PID').State('');
set state done
}
incr remote_counter
rega_script dom.GetObject('CUxD.$device_name.SEND_CMD').State('Ys$device_remote_enc$device_cmd_hex$remote_counter_hex$device_remote_id');
rega_script dom.GetObject('$device_sysvar_name').State('$remote_counter');
vwait state
-
- Beiträge: 25
- Registriert: 21.02.2018, 10:53
- Danksagung erhalten: 2 Mal
Re: Somfy RTS + CUXD => Homematic (ohne Aktor)
@chka,chka hat geschrieben:ich bekomme es nicht hin,
ich habe mir mal ein test Programm gebastelt aus den Änderungen.
Lösche ich den Inhalt der variable kommt der Fehler, danach wird einmal in die variable geschrieben.
Gelöscht wird leider nichts, beim erneuten ausführen;
process: '5039' not finished - sleep for 2 sec.
still busy -> abort
die Systemvariable wird nur automatisch gelöscht, wenn das script ohne fehler bis zum ende durchläuft. Wenn einmal ein Problem aufgetreten ist, muss sie manuell resetet werden (Inhalt löschen)
Ich versuche das Script noch zu optimieren um ggf. auf die zusätzliche Variable zu verzichten.
-
- Beiträge: 2484
- Registriert: 13.02.2012, 20:23
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 302 Mal
- Danksagung erhalten: 116 Mal
Re: Somfy RTS + CUXD => Homematic (ohne Aktor)
Habe es eben noch mal mit deinem original script versucht, es funktioniert.
Habe in der Anpassung bei mir einen Fehler drin.
Was du bitte noch mal einarbeiten solltest, den Abbruch irgendwie zu umgehen. Da müssen mehr versuche möglich sein nicht nur einer nach 2000ms.
Wenn das script nicht nach der pause neu gestartet wird, müsste doch eine variable direkt im code reichen ohne den weg über die systemvariable gehen.
Aber der weg ist gut.
Habe in der Anpassung bei mir einen Fehler drin.
Was du bitte noch mal einarbeiten solltest, den Abbruch irgendwie zu umgehen. Da müssen mehr versuche möglich sein nicht nur einer nach 2000ms.
Wenn das script nicht nach der pause neu gestartet wird, müsste doch eine variable direkt im code reichen ohne den weg über die systemvariable gehen.
Aber der weg ist gut.
-
- Beiträge: 25
- Registriert: 21.02.2018, 10:53
- Danksagung erhalten: 2 Mal
Re: Somfy RTS + CUXD => Homematic (ohne Aktor)
die Anzahl der Versuche kann einfach erhöht werden, bringt aber nicht wirklich Vorteile. Der Verzögerungen stauen sich auf un legen evtl. das ganze System lahm. Bei der Variable kann man auf eine globale tcl env. ausweichen. Problem ist aber dann, dass der Reset auch nur über tcl script erfolgen kann.
btw. ein doppeltes Ausführen sollte immer soweit möglich in der CCU (Programm) verhindert werden.
Bei direkter Gerätesteuerung greift dann zur Not der Lock im script.
Kann das bestätigt werden, dass nur nanoCUL's betroffen sind? Evtl. gibt es eine elegantere Lösung in der CUL firmware?
btw. ein doppeltes Ausführen sollte immer soweit möglich in der CCU (Programm) verhindert werden.
Bei direkter Gerätesteuerung greift dann zur Not der Lock im script.
Kann das bestätigt werden, dass nur nanoCUL's betroffen sind? Evtl. gibt es eine elegantere Lösung in der CUL firmware?
Re: Somfy RTS + CUXD => Homematic (ohne Aktor)
Hallo,
ich komme leider nicht weiter. Vielleicht kann mir ein weiter helfen.
Wie beschrieben habe ich eine neue Systemvariable namens "SOMFY_PID" angelegt und das Script durch den neuen ausgetauscht. Doch leider funktioniert nichts. Wenn ich den Script wieder durch den alten austausche läuft alles.
mein aktueller funktionierender Skript:
und hier der neu eingefügte Skript der nicht funktioniert
wäre nett wenn mir jemand helfen würde.
Gruß
ich komme leider nicht weiter. Vielleicht kann mir ein weiter helfen.
Wie beschrieben habe ich eine neue Systemvariable namens "SOMFY_PID" angelegt und das Script durch den neuen ausgetauscht. Doch leider funktioniert nichts. Wenn ich den Script wieder durch den alten austausche läuft alles.
mein aktueller funktionierender Skript:
Code: Alles auswählen
#!/bin/tclsh
#tclsh /usr/local/addons/rollo/somfy.tcl CUX2801004:1 WohnGrF STOP A0 AA0001
#tclsh /usr/local/addons/rollo/somfy.tcl CUX4000001:1 WohnGrF $VALUE$ A0 AA0001
load tclrega.so
#set device_name "CUX4000001"
set device_name [lindex $argv 0]
set device_sysvar_name [lindex $argv 1]
set device_cmd [lindex $argv 2]
set device_remote_enc [lindex $argv 3]
set device_remote_id [lindex $argv 4]
# command-line for reading rolling counter sysvar
set cmd "var remote_counter = dom.GetObject(\"$device_sysvar_name\").Value();"
# read sysvar
array set values [rega_script $cmd ]
set remote_counter $values(remote_counter)
# convert to integer
set remote_counter [ expr int($remote_counter)]
#puts $remote_counter
# convert to HEX
set remote_counter_hex [ format %04X $remote_counter ]
#puts $remote_counter_hex
switch $device_cmd {
"OPEN" { set device_cmd_hex "20" }
"1000" { set device_cmd_hex "20" }
"CLOSE" { set device_cmd_hex "40" }
"0" { set device_cmd_hex "40" }
"PROG" { set device_cmd_hex "80" }
"MY" { set device_cmd_hex "10" }
"500" { set device_cmd_hex "10" }
"STOP" { set device_cmd_hex "11" }
default { puts "WRONG SOMFY COMMAND" }
}
set somfy_cmd "\"Ys$device_remote_enc$device_cmd_hex$remote_counter_hex$device_remote_id\""
puts $somfy_cmd
set cmd "dom.GetObject(\"CUxD.$device_name.SEND_CMD\").State($somfy_cmd);"
puts $cmd
#array set values [ rega_script $cmd ]
rega_script $cmd
#rega_script { dom.GetObject("CUxD.CUX4000001:1.SEND_CMD").State("YsA0200018ABCDEF");}
set remote_counter [ expr $remote_counter + 1 ]
puts $remote_counter
set cmd ""
append cmd "var i = dom.GetObject('$device_sysvar_name');"
append cmd "i.State('$remote_counter');"
array set values [rega_script $cmd ]
und hier der neu eingefügte Skript der nicht funktioniert
Code: Alles auswählen
#!/bin/tclsh
load tclrega.so
proc rega_read {obj} {
set cmd "var value = dom.GetObject('$obj').Value();"
array set values [rega_script $cmd]
return $values(value)
}
# read previous pid
set somfy_pid [rega_read SOMFY_PID]
if {$somfy_pid != ""} {
puts "process: '$somfy_pid' not finished - sleep for 2 sec."
after 2000 { set state done }
vwait state
# try again
set somfy_pid [rega_read SOMFY_PID]
if {$somfy_pid != ""} {
puts "still busy -> abort"
exit 1
}
}
# update current pid
set somfy_pid [pid]
rega_script dom.GetObject('SOMFY_PID').State('$somfy_pid');
# free pid lock after 2000ms
after 2000 {
rega_script dom.GetObject('SOMFY_PID').State('');
set state done
}
# get args
set device_name [lindex $argv 0]
set device_sysvar_name [lindex $argv 1]
set device_cmd [lindex $argv 2]
set device_remote_enc [lindex $argv 3]
set device_remote_id [lindex $argv 4]
# get rolling counter
set remote_counter [rega_read $device_sysvar_name]
# convert to hex
set remote_counter [expr int($remote_counter)]
set remote_counter_hex [format %04X $remote_counter]
switch $device_cmd {
"OPEN" { set device_cmd_hex "20" }
"1000" { set device_cmd_hex "20" }
"CLOSE" { set device_cmd_hex "40" }
"0" { set device_cmd_hex "40" }
"PROG" { set device_cmd_hex "80" }
"MY" { set device_cmd_hex "10" }
"500" { set device_cmd_hex "10" }
"STOP" { set device_cmd_hex "11" }
default {
puts "unknown command: $device_cmd"
exit 1
}
}
incr remote_counter
rega_script dom.GetObject('CUxD.$device_name.SEND_CMD').State('Ys$device_remote_enc$device_cmd_hex$remote_counter_hex$device_remote_id');
rega_script dom.GetObject('$device_sysvar_name').State('$remote_counter');
vwait state
wäre nett wenn mir jemand helfen würde.
Gruß
-
- Beiträge: 25
- Registriert: 21.02.2018, 10:53
- Danksagung erhalten: 2 Mal
Re: Somfy RTS + CUXD => Homematic (ohne Aktor)
Hallo,
nach dem Anlegen von SOMFY_PID ist der Inhalt: ??? und muss erst einmalig manuell gelöscht werden. Danach sollte das Script ohne Probleme laufen.
nach dem Anlegen von SOMFY_PID ist der Inhalt: ??? und muss erst einmalig manuell gelöscht werden. Danach sollte das Script ohne Probleme laufen.