Register Variable und Parameter im Zielskript

Habe mich nach längerer Auszeit mal wieder daran begeben ein paar Dinge in der Steuerung anzupassen.

Dazu wollte ich zunächst die Daten der FHTs die IPS nicht ausliest auswerten.

Dazu habe ich dem FTDI eine RegisterVariable verpasst, die ja seit der neusten Version wohl „nur“ noch ein Skript aufrufen kann.

Das Skript macht derzeit eigentlich nichts, da ich gerade herausfinden wollte wie ich mitbekomme welche Registervariable denn das Skript aufgerufen hat.
Denn wenn ich meine zweite FHZ anschließe will ich nicht unbedingt 2 Skripte haben, die eigentlich das gleiche erledigen.

<?
	foreach ($argv as $key => $value)
	{
     IPS_LogMessage("tst", "Key: $key; Value: $value");
	}

?>

Allerdings kommt da nicht unbedingt das an Daten raus, was ich erwartet hätte. Zum einem fehlt häufiger der IPS_SENDER, zum anderen erkenne ich nicht wie ich unterscheiden könnte durch welche RegisterVariable das Skript aufgerufen wurde. Liegt hier ein Denkfehler meinerseits vor, oder geht das so nicht wie ich mir das vorstelle?

Zum einem fehlt häufiger der IPS_SENDER

Konvertier die Binärdaten mal lieber nach HEX. Dann hast du keine Probleme damit, dass irgendwelche Zeichen/Daten in der Meldungsansicht verschwinden.

zum anderen erkenne ich nicht wie ich unterscheiden könnte durch welche RegisterVariable das Skript aufgerufen wurde
Ich habe dir eine neue Version ins LiveUpdate hochgeladen. Dort hast du jetzt die $IPS_INSTANCE Variable dabei.

Tipp: Vergiss bitte die RegVar_Set/GetBuffer Funktionen nicht, wenn du etwas zwischenpuffern willst. http://www.ip-symcon.de/forum/53196-post59.html

paresy

PS: Hier meine Funktion…


 unset($_SERVER['argv']);
 unset($_SERVER['argc']);

 foreach ($_SERVER as $key => $value)
 {
  IPS_LogMessage(IPS_GetName($IPS_INSTANCE), "Key: $key; Value: $value");
 }

Output:


Datum/Zeit    Versender    Nachricht
10.02.2009 15:05:01    RegVarTest    Key: IPS_VALUE; Value: Blubber
10.02.2009 15:05:01    RegVarTest    Key: IPS_INSTANCE; Value: 42164
10.02.2009 15:05:01    RegVarTest    Key: IPS_SENDER; Value: RegisterVariable
10.02.2009 15:05:01    RegVarTest    Key: IPS_SELF; Value: 59797
10.02.2009 15:05:01    RegVarTest    Key: REQUEST_TIME; Value: 1234274701

Manchmal sieht man den Wald vor lauter Bäumen nicht…
Strings und Steuerzeichen, bei dem Gewusel was da so über den FTDI reinkommt.

Thx alot, funktioniert perfekt.

Kann leider in der Doku nichts dazu finden. Ist das der Buffer in dem die gerade empfangenen Daten stehen oder ein „extra“ Buffer in der ich mir wie praktisch in einer Variable eben schnell selber was reinschreiben kann?

Dazu hätte ich noch 2 Fragen.

  • Wozu das unset(), der Sinn erschließt sich mir nicht ganz…
  • Geh ich richtig in der Annahme, das es besser ist mit $_SERVER zu arbeiten anstatt mit $argv? Wenn ich auf die Werte zugreife verwende ich eh z.B. $IPS_VALUE, die Minifunktion diente mir nur dazu genau zu schauen, welche Infos man eigentlich bekommt.

Aber auch so hat mich das schon mal einen großen Schritt weitergebracht.

Kann leider in der Doku nichts dazu finden. Ist das der Buffer in dem die gerade empfangenen Daten stehen oder ein „extra“ Buffer in der ich mir wie praktisch in einer Variable eben schnell selber was reinschreiben kann?

Genau so ist es. Ist ein schöner Buffer nur für dich… damit du die IPS-Variablen nicht strapazieren musst… und den dadurch entsehenden Aufwand (Logging in Datei… Meldungen über SOAP ect…) vermeiden kannst.

Doku = RegisterVariable - IP-Symcon :: Automatisierungssoftware

Dazu hätte ich noch 2 Fragen.

  • Wozu das unset(), der Sinn erschließt sich mir nicht ganz…
  • Geh ich richtig in der Annahme, das es besser ist mit $_SERVER zu arbeiten anstatt mit $argv? Wenn ich auf die Werte zugreife verwende ich eh z.B. $IPS_VALUE, die Minifunktion diente mir nur dazu genau zu schauen, welche Infos man eigentlich bekommt.

Das $argv hat die Parameter mit &'s verbunden, was die Annzeige etwas unschöner macht. Deswegen die $_SERVER Variante. Da argv auch im $_SERVER Array drin ist - wir das aber garnicht wollen - lösche ich es vor der Anzeige weg.

paresy

Funktioniert alles bisher prima, danke für die Infos. Testen hat wie man sieht wieder etwas länger gedauert :rolleyes:

Und nur noch mal zur Zusammenfassung für mich: unset(), damit es schöner in der Ausgabe aussieht?

Lass das unset einfach weg… Dann wirst du den Unterschied ja sehen :slight_smile:

Im Prinzip ist es nur für die schönere Ausgabe. Ja.

paresy

Hallo,

habe eine Registervariable an der I/O Instanz „UDP Socket KNX“ gebunden.
Die Werte werden mir nach Verwendung des Scripts aus der Dokumentation auch angezeigt.
Besteht die Möglichkeit die dazugehörigen Gruppenadressen mit auszugeben, habe dazu nichts gefunden.

VG
Ralf

Du bekommst an der UDP Instanz den vollständigen KNX Datenstrom. Du musst die Gruppenadressen entsprechend der KNX Spezifikation dann selber dekodieren? Was möchtest du denn eigentlich machen?

paresy

Die Idee ist, anhand des KNX Datenstrom eine Protokollierung von bestimmten Gruppenadressen anhand
einer erstellten String Variable mit mehrere Gruppenadressen. Dieses soll zur Fehlersuche im KNX genutzt werden.
Ich wolte dieses nicht über das Logging der Variable machen, denn dieses soll ja nicht permanent laufen.
Gibt es eventuell ein Script wo die Gruppenadressen schon decodiert werden?

VG
Ralf

Du könntest ein PHP Modul erstellen, welches hinter dem KNX Splitter ist. Das erfordert aber einiges an PHP und SDK Know how :slight_smile:

paresy