funkbefehle aus getriggerten script brechen ab

ich habe folgendes problem:

ich habe ein fs20 dummygerät eingerichtet, das auf meine fs20 fb reagiert. es haben keine anderen geräe diese adresse. auf die statusvariable habe ich ein script gelegt, das rollos hoch (scriptname: alle_hoch, trigger: onvalue True) bzw. runter (scriptname alle_runter, trigger: onvalue False) fährt.

der inhalt von hoch ist:

FS20_SwitchMode(11111, True);
FS20_SwitchMode(22222, True);

runter dann analog:

FS20_SwitchMode(11111, False);
FS20_SwitchMode(22222, False);

das kuriose ist aber, wenn ich nun die entsprechende taste auf der fb drücke, dann beginnen die rollos herunterzufahren, brechen aber nach ca. 1 sekunde ab.

könnt ihr mir sagen, wo ich den fehler habe, oder was ich anders gestalten muß. vielleicht sogar, warum dem so ist?

danke für eure hilfe :).

p.s.: ipsymcon ist eine aktuelle version, wurde erst vor ein paar tagen frisch heruntergeladen und installiert.

Benutzt du ein Tastenpaar, also mit eindeutiger TRUE/FALSE Erkennung, oder nur eine Taste per SWAP ? Bei der zweiten Variante kommt es mal vor, dass ein Befehl mit den Billigteilen FS20FB ein Befeh zweimal gesendet wird.

Andere Möglichkeit: Dein Aktor hat ein Timer von 1s programmiert (intern)

Franz

hi guyabano,

danke für deine schnelle hilfe. ich habe ein tastenpaar, kein swap. beim timer steht eine 0 drin.

habt ihr das verhalten nicht, wenn ihr scripte über trigger laufen lasst?

Also ‚Dummy‘ versteh ich hier richtig, dass physisch kein Aktor verhanden ist ?

Du hast ja ein Skript angelegt per Abfrage

IF $statusvariable_Trigger TRUE
{
FS20_SwitchMode(xxxxx, TRUE);

}

IF $statusvariable_Trigger FALSE
{
FS20_SwitchMode(xxxxx, FALSE);

}

Und das Skript triggerst du ja OnChange $statusvariable_Trigger

Falls du das so hast, müsste es eigentlich klappen?

Versteh ich nicht! Ist doch banal

mfG Franz

dummy hast du richtig verstanden. das gerät existiert nicht (sonst würde ja ein gerät schalten, das ist nicht gewünscht, es sollen über das script alle geräte auf einmal geschaltet werden).

ich habe es noch einfacher, ich habe 2 getrennte scripte (ohne abfrage if usw.).

das eine wird bei onvalue true das andere bei onvalue false gestartet.

die fangen ja auch wirklich an sich zu bewegen, nur wie gesagt, nach kurzer zeit stoppen die wieder alle, so als wenn nochmal der befehl gesendet wurde.

ich versuche mal mit dem fs20 tester addin zu kontrollieren ob der funkbefehl nochmal kam und dann über die logfiles ob der befehl von der fb oder vom ips kam. kann man in den logs auch sehen ob der befehl vom ips kam oder von der fb?

wie hast du das mit der dummy aktor(instanz) gemacht?
woran erkennst du das nach 1 sek. der andere status kommt?

die befehle werden ja alle 3 mal gesendet. aber halt innerhalb weniger millisekunden. bei 1 sek ist was faul und du müsstet es mit dem fs20testad-on sehen können.

nur wenn der empfänger mehrere eingangskanäle hat und du ips und deine fb auf jeweils einen anderen gelegt hast. grübel…war das so möglich??

Hallo pleibling,

Kann es sein, dass der FS20-Befehl die Variable ändert? Ändert sich denn die Variable des Dummygeräts?

Ansonsten mache ich es so, wie Franz beschrieben hat. Alles in ein Skript packen und dann per onchange triggern.

Ich hatte wohl schon mal das Problem, dass mehrere FS20 Befehle nacheinander nicht liefen. Ein Befehl wurde dann übersprungen (nachdem es wochenlang immer funktionierte). Habe dann einfach ein IPS_Sleep() eingefügt, seitden läuft es wieder, dürfte bei Dir aber nicht der Grund sein.

Allerdings finde ich Deine Rollos etwas komisch. Das Du mit
FS20_SwitchMode(xxxxx, TRUE);
den Rolladen hoch und mit
FS20_SwitchMode(xxxxx, FALSE);
runterfahren kannst habe ich noch nie (als Schalter) gesehen. Meist lauen die Rolladen mit Tastern, oder mit zwei unterschiedlichen Schaltern. Dann würde Rollade hoch so aussehen:
FS20_SwitchMode(xxxxx, FALSE);
IPS_Sleep(300);
FS20_SwitchMode(yyyyy, TRUE);

und runter ginge es dann mit
FS20_SwitchMode(yyyyy, FALSE);
IPS_Sleep(300);
FS20_SwitchMode(xxxxx, TRUE);

Ich wünsche einen schönen Abend.

Christoph.

hi christoph, auch danke für deine hilfe. den schalter realisiere ich über fs20 markisensteuerungen.

klappt prima. die fährt ca. eine minute runter, sollte rollo früher unten sein (was immer so ist), schaltet die endabschaltung aus.

mit dem sleep befehl werde ich mal testen, vielleicht sind das wirklich zu viele befehle direkt hintereinander (ca. 9 rollos an 7 markisensteuerungen).

ich werde auch mal testen, was passiert wenn man nur ein gerät geschaltet wird.

also ich hab bisher 5 FS20MS am laufen. Wenn du die Befehle hintereinander aus EINEM Script rausschiebst, gehen alle Rolos brav nacheinander runter oder hoch. Ich hab dann mal getestet, ob es geht jeden Rollo in EIN Script zu packen und dieses „rollozugeordnete“ Script durch ein weiteres Script aufzurufen. Also 5 Scriptaufrufe hintereinander in einem Script. Das klappt auch, dann bewegen sich alle (quasi) gleichzeitig.

hm, dann wird es also nicht an der menge der befehle gehangen haben.

gestern bin ich leider nicht zum testen gekommen, da ich noch nach lampen schauen mußte und noch ein bisschen das netzwerk erweitern mußte (strippen ziehen und dosen setzen).

werde versuchen heute abend mal danach zu sehen.

danke auf jeden fall an euch dreien für eure hilfe :).

so, habe endlich mal wieder zeit gefunden.

es scheint so, als wenn wirklich das script doppelt gestartet wird. aber die dummy variable ist keine variable der geschalteten variable (sonst würde das script ja auch endlos laufen).

ich habe mal das log angehangen.

was kann das sein?

Das Script kann ja nur so schnell zweimal hintereinander gestartet werden, wenn entweder die FB den Befehl zweimal sendet (was ja oft vorkommt bei den FS20 Teilen) oder die Statusvariable nochmal irgenwo in einem Script den Triggerwert annimmt.
Wenn du Den Fehler nicht gleich findest kannst Du das Script ja einfach gegen ein zweites triggern schützen in dem Du eine Variable am anfang abfragst, die den wert an = return und script verlassen oder false = script bearbeiten hat.

Gruß Thomas

Hallo pleibling,

starte doch mal den FS20 Tester und drücke dann die Fernbedienungstaste. Dann siehst Du, welche Geräte geschaltet werden.

Testweise könntest Du für den Taster auch mal eine andere FB benutzen und ggf. die Rolladen nacheinander in das Script aufnehmen (ich gehe mal einfach davon aus, dass es mit einer Rollade klappt).

Eine Entwarnung habe ich auch noch. Mein Problem, dass Geräte nicht schalten, wenn ich mehrere Befehle hintereinander packe hing damit zusammen, dass ich die Schaltung mit FS20-ST aufgebaut hatte und dann später zwei Geräte mit einem 4fach-Schalter zusammengafasst hatte. Hier dürfen die Befehle nicht zu schnell hintereinander kommen.

Zwei Fragen an die Profis hätte ich noch. Was bedeutet die ExecuteThreadID in LOG?

Wann genau schaltet der Trigger OnValue? Immer wenn die Variable gesetzt wird, oder nur wenn der Wert auf den eingestellten wechselt?

Ich wünsche einen schönen Tag.

Christoph.

Hallo Christoph,

Wann genau schaltet der Trigger OnValue? Immer wenn die Variable gesetzt wird, oder nur wenn der Wert auf den eingestellten wechselt?

http://www.ipsymcon.de/~hjh/HelpStudio/html/IPS-Manual/Events.html

hm. also laut fs20 tester addin wird der befehl nciht doppelt gesendet. würde mich auch wundern, denn sonst müßte ja alle befehle abbrechen (der 2. befehl unterbricht ja den aktuellen vorgang).

ich habe auch mal alle, ausser dem ersten befehl rausgenommen, das rollo bricht trotzdem ab.

wenn ich alles wieder reinmache und starte die scripte über das execute, dann funktionieren die scripte einwandfrei. der funkbefehl wird auch nicht doppelt gesendet und tritt nur beim triggern auf, langsam bin ich ratlos?!?

Hi,

2Rainer: leider steht in der Anleitung nicht, ob onValue ausgeführt wird, wenn der Wert auf den Eingestellten wechselt, oder ob er auch ausgeführt wird, wenn er auf dem eingestellten Wert bereits steht und die Variable nochmals auf den Wert gestellt wird.

Aber zum Problem: Wenn das Script per Execute läuft, aber mit der Triggervariable nicht funktioniert, dann würde ich die Variable löschen, die Instanz des Schalters auch löschen.

Ich denke, Du hast auch noch einen anderen Taster zur Hand (der jetzt z. B. eine Lampe korrekt steuert). Diese Variable einfach mal als Trigger benutzen (bitte die entspr. Triggervariable im Lichtskript löschen).

Danach sollte es dann funktionieren. Dann einen garantiert freien Code für den alten Taster suchen, einstellen und die Instanz wieder anlegen.

Ich wünche einen schönen Tag.

Christoph.

Hallo Christoph,

leider steht in der Anleitung nicht, ob onValue ausgeführt wird, wenn der Wert auf den Eingestellten wechselt, oder ob er auch ausgeführt wird, wenn er auf dem eingestellten Wert bereits steht und die Variable nochmals auf den Wert gestellt wird.

Ja es wird auch getriggert wenn der gleiche Wert nochmal auf die Variable gesetzt wird. z.B. wenn eine Variale auf true steht und an diese nochmal true gesendet wird.
Eine weitere Abfrage bei gleichem Wert der Variable erreicht man hier mit;


IPS_GetUpdateTime()

Gruß Thomas

Hallo,
nur mal ne Idee zum ursprünglichen Problem:

Ist das Dummy-Gerät evtl. ebenfalls ein MS-Instanz-Modul? Dann könnte ich das nachvollziehen, denn die müßen ja erst hinsichtlich der Zeiten zum hoch- und runterfahren im IPS angelernt werden. Neu zeigen sie genau das beschriebene Fehler-Verhalten: ca. 1sek bewegen, dann Schluß.

Ich meine mit dem Anlernen nicht den Timer im Gerät, um nach FB-Signal oder per Tiptaster dann anzuhalten (unabhängig von Endlagenschalter), sondern das Anlernen per Up- und Down-Taste, direkt in der IPS-Instanz. Allerdings benutze ich „FS20_SetPosition($id, abs($wert))“, keine Ahnung, ob das auch für den hier beschriebenen Befehl eine Rolle spielt.

Andere Ideen für die Gruppenschaltung:
Ich habe meinen Rolladen einfach nach Kochbuch eine zweite Adresse als Gruppenadresse gegönnt, also 3111=OG AZ, 3112=OG Gaube, beide hören auch auf 3144. Ähnliches im EG, dort im Adressraum 32xx. Insgesamt 8 Steuerungen im EG, 7 im OG. Vorteil: Ich kann beide Etagen-Gruppen auch völlig unabhängig per FB als Gruppe mit je einer Taste / Tastenpaar schalten (bei mir die beiden kleinen Paare oben an einer 10/20er-FB). Die Gruppenadresse wäre dann aus IPS-Sicht als „echtes“ Gerät ansteuerbar. Mach ich aber im IPS nicht so, allein schon wegen der unterschiedlichen Laufzeiten, und weil ich da was besseres habe, s.u. Wär aber sicher möglich, wenn man die längsten Zeiten der langsamsten Jalousie anlernen würde.

Für ein rein programmtechnisches Schalten würde ich nun kein Dummy-Gerät nehmen, sondern ein Script bauen, das alle betroffenen Steuerungen z.B. per separater „IPS_RunScript“-Befehle aufruft. Der Befehl soll das ja prozessparallel tun. So ein Gruppensteuerscript könnte dann wiederum einfach z.B. vom Designer-Taster-Objekt getriggert werden. Ganz ohne Dummy-Modul.

Sowas ähnliches mache ich erfolgreich bei meinen „zentralisierten Scripts“ für alle meine Schalter, Dimmer und seit kurzem nun auch bei allen Rolladen. Da nun aber an einigen Designer-Objekten die Möglichkeit fehlt, per Event direkt ein Script zu steuern (bei TrackBars gibts als Events z.B. nur Variablen), triggere ich eben auch immer eine Variable onUpdate am Script. Da kann ja glücklicherweise mehr als eine Triggervariable je Event zugewiesen werden. Klappt prima :slight_smile: …und ist dann wiederum so universell, dass das nicht nur vom Designer aus geht, sondern von überall her. Einfach einen neuen Variablenwert setzen, reicht dann als Auslöser…

Wenn nun aber das Einzel-MS-Steuerscript schon diese Variablentriggerung hat, muß ein Gruppenscript nichtmal mehr Tochter-Scriptaufrufe enthalten. Einzig das Setzen der Werte in den Zielposition-Variablen wäre dann noch nötig, der Rest klappt dann von allein. Also fOgAz.tPos=100 (Mnemonik: fensterObergeschossArbeitszimmer.targetPosition=100%) usw. (real: „$ret = SetValueInteger($pfx.“.tPos", $pos);" )

Das nur mal so als Ansätze. Vielleicht hilft es ja irgendwie weiter…

Gruß Gerd