Ich versuche per NC (oder Telnet falls möglich) den Status von einem EXSYS EX-6011 (https://www.exsys.it/wp-content/uploads/ex-6011.pdf) abzufragen.
Dieser liefert auf dem Port 100 jeweils 8-Bits zurück. Die ersten 4 sind für den Status der Outputs, die anderen für den Status der Inputs Ports.
Ich experimentiere aktuelle mit dem Befehl "nc -n 192.168.XXX.XXX 100 -w 1". Da dieser mir den gewünschten Output liefert, und anders als beim Telnet nach 1 Sekunde die Verbindung auch wieder schliesst.
Soweit so gut, jedoch funktioniert dieser Befehl per Shell auf dem Tinkerboard normal, aber sobald ich ihn über die Homematic Script Engine probiere, scheint es nicht zu funktionieren.
Hier ist das aktuelle Script:
Code: Alles auswählen
var IP = "192.168.XXX.XXX";
var PORT = "100";
var Position = "4";
! Position 0-3 == Output
! Position 4 == Input 1
! Position 5 == Input 2
! Poisiton 6 == Input 3
! Position 7 == Input 4
var Befehl = "nc -v -n "#IP#" "#PORT#" -w 1";
var Info;
var StdErr;
WriteLine(Befehl); ! Vollständigen Befehl ausgeben
system.Exec(Befehl, &Info, &StdErr); ! Befehl ausführen
WriteLine(Info); ! Ergebnis ausgeben
WriteLine(StdErr); ! Fehler ausgeben
var Resultat = Info.Substr(Position, 1); ! Das Bit von der korrekten Position extrahieren
WriteLine("Resultat:"#Resultat); ! Bit ausgeben
nc -n 192.168.250.XXX.XXX -w 1
null
Erwartetes Ergebnis:
nc -n 192.168.250.XXX.XXX -w 1
11110111
Resultat:0
Ich habe es auch versucht über eine File Redirection ins /tmp/test.txt zu lösen, in der Shell, werden die 8 Bits korrekt ins File geschrieben, über die Homematic Script Enginen bleibt es erneut leer.
Was mich auch stört, ist wie schnell das Ergebnis "null" kommt, da ich beim nc einen Timeout von 1 Sekunde gesetzt habe (-w 1).
Ich bin mir nicht ganz sicher was für eine Art Problem das ist, denn ich benutze nc Ebenfalls um ein sr201 Netzwerk Relay zu schalten (jedoch per UDP), also der NC-Befehl an sich funktioniert aus der Scripting Engine.
Irgendjemand hiermit Erfahrungen gemacht?
MfG
Fabian