KNX Taster triggert Skript

Möchtest du auf einer Variablen unterschiedlich auf true/false reagieren und anderen Code an deine RS232 schicken?

Ja genau.
Habe if / else nun eingebaut und das andere Ereignis else drin.
Aber irgendwie veschluckt es sich immer noch.

Idee:
Neben den Befehlen in if und else, polle ich die RS232 Schnittstelle aktiv in einem 5sec Ereignis - wenn sich da Kommandos begegnen, kann es sein, dass es zu Kollisionen kommt?
Falls ja, wie kann ich diese vermeiden?

VG

OK - das ist es eindeutig.
Wenn ich das Pollen über ein zyklisches Ereignis abstelle um die Stati des an der RS232 Schnittstelle hängenden Gerätes zu lesen, verschluckt es sich nicht mehr und die Befehle an die RS232 gehen klar durch.

So - nun also die Frage:

Wie kann ich die RS232 Befehle (Pollen Skript (all x secunden) der Stati und Befehle (ausgelöst durch einen Klick auf einen KNX Taster) klar separieren?

Die Frage ist eher, warum man in der aktuellen Zeit noch Statis vom KNX Bus „abfragen“ muss und warum man für diese Kommunikation noch auf RS232 setzt?

Du kannst mit Semaphore arbeiten, um Scripte gegenseitig zu sperren, um so eine Kollision zu vermeiden und die Antwort abzuwarten.

Aber vielleicht überdenkst du nochmal deinen Weg wie du mit dem KNX Bus kommunizierst?

An der Tatsache, dass das Gerät was ich auslesen möchte bzw. schalten möchte, von 2013 ist und 2014 EOL hatte und auch nur eine RS232 anbietet, und die Stati aktiv gepollt werden müssen, kann ich leider ja nichts ändern und über 5000EUR für eine neues KNX fähiges zu besorgen möchte ich dann doch nicht ausgeben.

Semaphore muss ich mir anschauen.

Die RS232 Kommunikation bezieht sich auf ein anderes Gerät wenn ich das richtig verstanden habe. Als Buszugriff wird vermutlich der X1 genommen.

Richtig:
KNX mit X1
RS232 mit einem komplett anderen Gerät aus 2013

Hmm - das geht nicht, da ich mir ja die Serielle IO exklusiv für den Befehl reservieren muss.

Kann ich das „Pollen“ Skript in dem „Befehls“ Skript für die Zeit des Ausführen letzten Skriptes „Pausieren“?

Hatte ich geschrieben => Semaphore
oder den Scripttimer sperren während der Zeit …

Sorry - stehe da auf dem Schlauch.

Situation:
ich habe ein „Hörendes (ausgelöstet) Ereignis“ (ID abc) auf einen KNX Wert (der Taster), welches mir bei True ein Skript ausführt und bei False ein anderes Skript.

Parallel dazu habe ich „zyklisches Ereignis“ (ID xyz) laufem welches mir alle 5sec einen Status einliesst.

Idee war nun im „Hörenden Ereignis“ (ID abc) einen Stopp / wait / pause an das „zyklische Ereignis“ ID xyz zu schicken und nach Ausführung im Hörenden Ereignis ID abc das zyklische Ereignis ID xyz wieder zu starten.

Ich glaube meine Anwendung von Semaphore im „Hörenden Ereignis“ ID abc ist aber falsch - oder?

<?php

IPS_SemaphoreEnter("Name vom zyklisches Ereignis", 3000);

if(GetValue(46559) == true)

      {$str = "\x05";

COMPort_SendText (14895,$str);

IPS_sleep(100);

$str1 = "\x02\x03\x03\x02\x80\x95\x00\x15\x03";

COMPort_SendText (14895,$str1);

IPS_sleep(100);

$str2 = "\x06";  

COMPort_SendText (14895,$str2); ;

      } else {

          $str = "\x05";

COMPort_SendText (14895,$str);

IPS_sleep(100);

$str3 = "\x02\x03\x03\x02\x80\x94\x00\x14\x03";

COMPort_SendText (14895,$str3);

IPS_sleep(100);

$str2 = "\x06";

COMPort_SendText (14895,$str2); ;}

 IPS_SemaphoreLeave("Name vom zyklisches Ereignis");

   

?>

Ich glaube ich habe es:
In dem „hörenden Ereignis“ schreibt man:

IPS_SetEventActive(51321,false);
SetValue(21051, "");
IPS_sleep(100);

Die ID 51321 ist dann das zyklische Ereignis.
Man löscht den Inhalt der Variable die den Status aus dem zyklischen Event ausguibt.
Man gibt den ganzen ein wenig Zeit