RCP Scripting
- RCP Scripting | SRCP Scripting (en)
- Rocrail Client Protocol (RCP)
Die einzige Neuerung zum Thema 'Scripting' ist: Es ist jetzt dokumentiert. Rocrail scripting gibt es schon seit den Anfängen des Projektes.
HowTo
Es sind nur wenige Schritte nötig, um ein Script auszuführen. Der Artikel beschreibt die notwendigen Schritte.
- Scripte werden aktiviert durch Aktionen vom Typ "External"
- Das Protokoll ist das Gleiche, das alle Clients benutzen, um mit dem Server zu kommunizieren
Man kann ein Script auch per Kommandozeilen Parameter aus einem anderen Programm aktivieren.
Python
Beispiel
Ein Beispiel, wie mit einem externen Python Script ein 'Power on' realisiert wird, könnte so aussehen:
#!/usr/bin/python # Rocrail XML script example: Power ON. from socket import * # Subroutine for adding the XML-Header and send it to the server def sendMsg( s, xmlType, xmlMsg ): buffer = "<xmlh><xml size=\"%d\" name=\"%s\"/></xmlh>%s" %(len(xmlMsg), xmlType, xmlMsg) s.send(buffer.encode()) # Create the server connection s = socket(AF_INET, SOCK_STREAM) s.connect(('localhost', 8051)) # Compose the power on command and send it rrMsg = "<sys cmd=\"go\"/>" sendMsg( s, "sys", rrMsg ) # Close server connection s.close()
Der Sourcecode wird einfach in einen beliebigen Texteditor per Copy/Paste eingefügt. Danach das File mit der Endung ".py" abspeichern.
(Auf Linux Systemen muss das Script jetzt noch ausführbar gemacht werden. Der Befehl dazu lautet: "chmod +x <NameDesScript>.py
")
Server trace
Die Fehlermeldungen beim Schließen der Verbindung sind normal und können unbeachtet bleiben.
20110515.150347.205 r9999I cconmngr OClntCon 0354 client connect count: 18 20110515.150347.206 r9999I cmdrB730 OClntCon 0209 cmdReader started for:127.0.0.1. 20110515.150347.206 r9999I infwB730 OClntCon 0104 infoWriter started for:127.0.0.1. 20110515.150348.206 r9999c cmdrB730 OVirtual 0324 Power ON 20110515.150348.207 r9999I cmdrB730 OControl 0826 State event from=vcs-1 20110515.150348.207 r9999I cmdrB730 OModel 1704 informing 1 listeners of a system event... (Ignore the errors:) 20110515.150348.209 r8030E infwB730 OSocket 0626 send() failed [32] [Broken pipe] 20110515.150348.209 r9999E infwB730 OSocket 0630 Connection broken! 20110515.150348.217 r9999E cmdrB730 OSocket 0685 Socket 0x00000000 error 88 20110515.150348.217 r9999I cmdrB730 OClntCon 0322 Server ended. 20110515.150348.220 r9999I infwB730 OClntCon 0172 InfoService ended.