zu dumm zum kombinieren

hallo,
ich schaff es einfach nicht…

ich habe eine FS20 Fernbedienung 1-Kanal. Also Eine Taste= 1 Kanal.

Ich funke ausschließlich ins IPS (via FHZ).

es ist einfach einen script auszulösen wenn ein ereignis eintritt. ich überwache also die Status Variable der FB.

Bei Variablenaktualisierung schalte ich dann das Licht ein wenns aus ist, und aus wenns ein ist. so weit so gut.

aber meine familie hat die angewohnheit die taste länger zu drücken. damit ändert sich die status variable nicht.
die data variable ändert sich dann auf 21 (von 18). aber ich schaffs einfach nicht um die burg,
das das verdammte licht einschaltet, egal ob man kurz oder lang drückt. denn wenn ich versuch zu kombinieren,
dann schaltet das licht ein aus und wieder aus wieder ein, es flackert und und und.

hiiiiiiiiiiiiiiiiiiiiiiiiiiilfe…

ich möchte doch nur das das licht ein schaltet, auch wenn man länger auf der taste bleibt. und nicht das es dann gleich 20 mal
ein/aus schaltet oder sich nicht mehr ausschalten läßt und und und…

hiiiiiiiiiiiiiiiiiiiiiiiilfe…

[i]ich will doch nur ein klares EIN, egal ob man die taste 0.1 sekunden 1 sekunde oder sogar 5 sekunden drückt.

und ein ebenso klares AUS, wenn das licht ein ist. egal wie lange die taste in einem Stück gedrückt gehalten bleibt[/i] :frowning:

Vielleicht kann mir da jemand einen scriptuellen tritt in den Hintern verpassen :o
danke im voraus

Du möchtest also bis fünf Sekunden langen oder kurzen drücken das sich der Status nicht ändert. Also entweder immer an oder immer aus bleibt. Dann mußt Du das Script verriegeln.
Einfach folgendes davor setzen.
Wobei ich das nicht so elegant finde. Ich würde einfach bei Dauerdrücken nichts machen. Ist eine Frager der Erziehung der Anwender.:smiley:


   $t1 = time() / 60*60;                        // aktuelle Zeit in Sekunden
   $t2 = IPS_GetUpdateTime("Taster_Data") / 60*60;  // Zeit der letzten Aktualisierung des Tasters
   if (($t1 - $t2) < 5) // es sind keine 5s seit der letzten Tastenbetätigung
   {
      return; // Licht ein aus Script nicht ausführen
   }

Hallo Ferengi,
Es sollte so sein wie es (ohne computer und ohne ips) mit einem stromstoßschalter ist. da kann man den taster betätigen so lange man will,
in den anderen schaltzustand geht der stromstoßschalter erst bei neuerlichem wieder-tasten.

soll heissen ich will mich nicht wenns nicht sein müßte an eine genaue regel von 5 sekunden halten müssen.
Deine Lösung ist aber auf jeden fall schon mal ein Ansatz, entspricht aber noch nicht so ganz meinen Vorstellungen!

PS:

…tja, so einfach ist das nicht. Da wurde schon so manches mal geflucht wenn sie eben etwas länger als 0.4 sekunden
am schalter blieben und das verdammte Licht sozusagen nicht anging. Erklär mal (m)einer Frau und 2 kleinen Kindern,
dass das licht nur angeht wenn sie den schalter „richtig“ drücken müssen… viel spaß :rolleyes:

Schönen Gruß aus dem Archiv der lösbaren Probleme :smiley:

Eintritt erhält man über das göttliche Orakel :wink:

Toni

also bei mir funst das nicht :mad:

ich habe die 1-kanal FB Data Variable mit verschiedenen varianten als ereignis-auslöser an das script gehängt.
bei variablenaktualsierung, bei änderung, auch bei bestimmten wert. einmal mit 18 und zweites mal mit 21 (also auch 2 ereignis-auslöser),
mit folgeereignisse bearbeiten -flag usw.

aber das verhalten ist grauenhaft! woran liegts :confused:

so viele antworten dieses forum auch hat, ohne fragen gehts nun mal nicht. zumal ich mit der suche nicht selten nicht fündig werde,
weil einfach die suchbegriffe erst so richtig klar werden, wenn man bereits weiß worums eigentlich geht und wie es geht.
nur so zur rechtfertigung :wink:

Ok… konkrete Frage… (evtl. an HJH)

bei V2. Wie muss man den script triggern, damit deine Last Bit Methode funktioniert?
Also so dass es egal ist ob man kleiner 0.4s oder länger drückt. Geht das auch wirklich mit einem 1-Kanal Modus Einzeltaster?

Wie gesagt, ich habe verschiedene Varianten getestet. der script wird schon öfters getriggert. Aber mir kommt vor das die Last Bit Abfrage hier nicht ganz eindeutig funktioiert? Wie kann ich das überprüfen? Integer ist ja 2 Byte. Mit der Funktion „… & 1“ erhalte ich also das 16 'te Bit der 2 Bytes, oder verstehe ich da noch was falsch?

Wo sind die Bytes eigentlich beschrieben die der Sender sendet? Und gibt es eine Möglichkeit die Variablen in IPS zu debuggen, sodass ich mir die Variablen evtl. auch in Hex oder Bitweise anschauen kann?

Wenn ich das richtig sehe möchtest du doch nur via IPS den zustand erfassen, oder? Das schalten passiert ja direkt …

Also on update auf die Data Variable ein scriptchen, dass den Zustand speichert …

SetValueBoolean („lampenstatus“, GetValueInteger(„RC_Data“) & 1 == 1)

Anti

mal ein Tipp für eine evtl. ganz andere Ursache:

Wenn Du einerseits per FB, aber auch per Designer eine Variable schaltest, diese geschaltete Variable aber eben zum Ansteuern der Anzeige im Designer dient, kann das ganz lustige Rückkoppeleffekte ergeben, erstrecht wenn dann die FB den Status ändert, der sich in Folge dann auch im Designer ändert, dort „onchange“ wiederum ein Script feuern läßt usw.

Noch lustiger wird es, wenn sich dann bei längerem Drücken nochmals der Wert als solcher ändert.

Lösung: Variablen entkoppeln, also nicht die gleiche Variable zur Anzeige des aktuellen Status, als auch als zu schaltende Variable wählen. Erst das Script führt die Umschaltung durch. Statusvariablen dagegen dienen nur und exklusiv zur Anzeige des Status.

Ob es die Ursache ist: Designer auf allen beteiligten Kisten erstmal ausschalten

Hallo Anti,

nein nicht ganz richtig. ich erfasse mit ips und schalte dann mit ips. das geht in meinem fall auch nicht anders. siehe hier

desweiteren habe ich in der V2 doch kein ON UPDATE. Bzw. kann ich da nur sagen:
Ereignis hinzufügen „Data Variable“ bei Variablenaktualiserung.
Ereignis hinzufügen „Status Variable“ bei Variablenaktualiserung. oder
Ereignis hinzufügen „Data Variable“ bei bei bestimmten Wert mit nachfolgebehandlung.

Jedoch klappt keine Kombination in jedem Fall. zumindest brings ich nicht zusammen. deshalb der entsprechende posting-titel.
Und damit meine ich, es geht wenn ich nur die Statusvariable der Fernbedienung überwache.
Und lediglich auf die kurzen (kleiner 0.4sekunden) drücker reagiere. Aber ich will eben gleichermassen reagieren wenn ich (wir)
den Taster einmal auch länger betätigen.

Bisher scheitert jede Variante. Entweder geht das Licht an bei kurzem Klick aber erst bei langem klick wieder aus.
Dann wieder anders… also echt wirr!!!

Also eignetlich klang die Lösung von HjH mit & 1 gut. Da ich es so verstehe, das wenn ich die Taste an der FB drücke, ca. 1000 mal gesendet wird, jedoch immer mit dem gleichen letzten bit. Welches sich auch erst bei dem nächsten erneuten Tastendruck wieder ändert - oder???

bei mir scheints so aber nicht zu sein :confused: :confused: :confused:

Hallo @gwanjek,
danke für den Tipp. Aber bei mir ist das derzeit nicht der Fall. Und ich arbeite nur mit dem einen script und der einen FB Variable und die wird nirgendwo sonst verwendet. Zumal ich auch „noch“ keine Designer Oberflächen habe.

klar, war ja auch nur ne Idee, weil das Fehlerbild evtl. ein ganz ähnliches ist, aber auf die Ursache dann muß man erstmal kommen. Erstrecht, wenn Fehler mal auftritt, mal nicht (Designer am PC an und Seite im Fokus oder nicht)

Gruß Gerd

Also wenn du sowieso über IPS schalten willst (andere Aktor adresse) würde ich aufjedenfall den 2 Kanal Modus verweden (sepparate ein und aus Taste) das kannst du in IPS (naja 1) bequem abfragen und trotzdem problemlos ein Toggeln mit einem Taster einrichten …

ich hab da sowas (script on update der data):

switch (GetValueInteger ("W_D_SW1_7"))  {
  case "19": // Hoch Dimmen
      volUp ();
      volUp ();
  break;
  case "20": // Runter Dimmen
      volDown ();
      volDown ();
  break;
  case "17": // Einschalten
       setVCR1();
  break;
  case "0": // Ausschalten
      setNET();
  break;
}

So nun packst beispielsweise einfach sowohl bei Einschalten als auch bei Hoch Dimmen dein „toggle Licht“ hin.

Aber hmm beim Dimmen hast das „Problem“ das es pro Dimmmeldung ausgeführt wird … in der tat wäre das wohl ein lustiges ein und ausgeschalte …

Also Ansatz: Zeit des Aufrufs speichern, und vergleichen … ist es vor als 1 Sek schon mal ausgeführt worden, dann nix machen …

Anti

das is es ja grade. ich habe nur die möglichkeit eines 1-kanal tasters.
also verstehe ich nicht warum HJH’s Methode bei mir nicht funst!?

lg, hinti

Also in kurzform was ich zu sagen versuchte:

Auch wenn du 2 Kanal mode verwendest kannst du das mit IPS so umbauen das es sich verhält wie ein 1 Kanal … Vorteil: Weisst sicher welcher Knopf gedrückt ist …

Was kommt denn im 1 Kanal Mode an bei IPS? Wie ich dich verstanden habe nur das gedrückt wurde (kurz/lang) und nicht welcher Zustand (ein / aus / hoch dimmen / runter dimmen) ?

Anti

Hallo Anti
soweit ich sehe kommt folgendes von der FB 1-Kanaltaste an:

immer kurz drücken wechselt die FB-Statusvariable, während in diesem Fall die Data Variable immer 18 ist.

Damit kann man super klar ein und ausschalten (sofern immer kurz gedrückt wird).

bei einem langen tastendrücker aber bleibt die Statusvariable unberührt und die Data Variable wechselt auf 21. (und bleibt auch 21 bei erneutem langen drücken).

dies sind die möglichkeiten die mir zur verfügung stehen!

also versuchte ich den script 2-fach zu triggern:

  1. Statusvariable bei Aktualisierung
  2. Datavariable bei Aktualisierung

geht aber nicht so gut, weil bei zweiten mal lang drücken die Datavariable unberührt bleibt.

Also blieb mir nur eine möglichkeit:
Datavariable bei bestimmten wert 21 mit nachfolgenden Ereignissen behandeln = True.

Aber das setzt eben voraus das die $LSB Methode zieht. Soll heißen:
Wenn ich nun dauerhaft auf der Taste bleibe und der script ca. 100 mal getriggert wird,
dann frage ich ja das letzte Bit ab, und wenn ich es richtig verstand, sollte es dann auch 100 mal durchgehend immer 0 sein!

aber ob es das wirklich ist vermag ich leider nicht zu testen :frowning:

Okay also ich würds so probieren (ohne die Schalter umzustellen :wink: )

On Data Update Triggern (und nur das)

$t1 = time() / 60*60;                        // aktuelle Zeit in Sekunden 
$t2 = GetValueInteger("SaveTime");    // 
SetValueInteger("SaveTime",$t1);
//Aktualisierung des Tasters 
if (($t1 - $t2) > 2) // es sind mindestens 2s seit der letzten Tastenbetätigung vergangen
{ 
 // Da uns ja egal ist ob gedimmt oder geschaltet wurde, an dieser Stelle einfach die Lampe toggeln 
}  

[edit]
P.s: Beachte kleine Codeänderung … :slight_smile:
Und : Kurze Funktionsbeschreibung: Kommt ein Tastendruck rein schalte Lampe um, da nach ignorieren bis min 2 Sek kein Tastendruck mehr kam, dannach von vorn …

Danke Anti,
einen ähnlichen Vorschlag habe ich von Ferengi auch bekommen (siehe hier)

Und ich werds auf jeden Fall auch so machen, da ich das gefühl habe mit der Last Bit Variante keinen erfolg zu haben.
Trotzdem würde ich mich freuen wenn sich HJH zum Beispiel noch mit meiner Frage befassen könnte,
warum bei mir dies Probleme macht! bzw. ob meine Theorie meiner letzten paar postings richtig ist,
und wie denn nun diese bits belegt sind von den FS20 sendern (Dokumente vorhanden?)

Lg Hinti

Ähnlich ja aber nicht gleich (hatte das gelesen und auch teils ausgeschlachtet g) … mein Ansatz verriegelt solange wie gedrückt wird und macht dann max 2 Sek später wieder auf.

Das Problem ist realtiv einfach, im 1 tasten Modus kriegst du ja kein Information ob rauf oder runter gedimmt wird, sondern nur dass gedimmt wird. Ne 21 in der Data bedeutet also das Bit 1 gesetzt ist. Somit geht die Lampe beim Dimmen immer an. Bei 18 hingegen ist es nicht gesetzt ergo Lampe aus wenn nicht gedimmt wird. (sofern man Bit 1 als Zustand nutzen möchte)

Die Statusvaribale wird in diesem Modus offensichtlich von IPS selbst gepflegt (toggelt bei Impuls). Und die Data hingegen nimmt nur den Status kurz oder lang gedrückt an. Wenn man da also onupdate geht (was nötig ist da ja bei kurz drücken da 18 steht und auch bleibt wenn jmd später noch mal kurz drückt) kriegt man jeden Druck mit auch wenn der Wert gleich bleibt. So dann musst nur noch deine Lampe umschalten und verhindern das beim Dimmen mehrfach hin und herschaltet, was eine kurze verrieglung (die mit jedem neuen Impuls wieder refreshet wird) erreicht.

Zack problem gelöst :slight_smile:

Ja so werd ichs auch lösen.
Aber onupdate habe ich nicht. In der V2 heisst das glaube ich „bei Variablenaktuallisierung“.

Ich glaube aber das die auch nur anspricht wenn sich der Status ändert. Aber ich hoffe ich täusche mich in diesem Punkt jetzt.

Außerdem habe ich glaube ich HJH’s Bitweises denken falsch verstanden… Ist es nun Ein Bit von den 16 Bits des integers,
oder ist es des rechte charakter der hexadezimalen zahl? was ich jetzt also wirklich eher vermute,
und auch vollkommen alles klärt wieso diese Variante nicht klappen kann!

Bit 1 bzw sogar Bit 0 ist gemeint damit ist nichtmal der Rechte Char der Hex Zahl sondern nur das erste Bit gemeint. In Dezimalzahlen heisst das gerade oder ungerade …

Anti