Das Posten dieser Skripte würde Dich sicher stark verunsichern (in etwa O-Ton Bundesinnereienminister)
Die sind nämlich eingebunden in verschiedene Parameterskripte, die ich sicher nicht erklären möchte, weil unendlich zeitaufwendig.
Nur mal ein kurzer Abriß:
Die RPC-Aufrufe mache ich in separaten Skripten, damit die Wirk-Skripte weiterarbeiten, wenn wg. fehlendem Connect ein JSON-Fehler auftritt.
Wie die Daten des/der anderen PC’s hinterlegt sind, hatte ich hier schon mal beschrieben.
JSON_TX.ips.php funktioniert dann im Prinzip so:
...
include_once "ObjIDsLAN.inc.php";
...
switch ($_IPS['SENDER']) { // woher aufgerufen ??
...
// ---- C. Skriptauslöser anderes Skript, ggf. Scheduler
case "RunScript": /* Wenn das Skript durch eine IPS_RunScript Funktionen ausgeführt wurde
*/
/* Aufruf wird normalerweise einfach an 'JSON/RX' des 'PcRX' durchgereicht
* Sonderfälle sind 'Cmd' =>
* dann ist hier der Postausgangskasten
*/
// POSTAUSGANG
// Test ob alle Parameter da
foreach (array ('PcRX', 'Cmd' ) as $Par) {
if ( ! (isset ($_IPS[$Par])))
die ("Mit RunScript wurde '$Par' nicht an JSON-TX übergeben!");
}
...
// $rpc = new JSONRPC ("http://user:password@'IP':'Port'/api/");
$rpc = new JSONRPC ("http://" . $LAN['Svr1']['Li'] . ':' . $LAN[$_IPS['PcRX']]['PW'] . '@' .
$LAN[$_IPS['PcRX']]['IP'] . ':' . $LAN[$_IPS['PcRX']]['Port'] . '/api/');
// sonst Aufruf mit Cmd
switch ($_IPS['Cmd']) {
case 'Sonderfälle' :
break;
default: // sende an Remote ObjID
$rpc -> IPS_RunScriptEx ($LAN[$_IPS['PcRX']]['ObjRX'], array_merge ($_IPS, array (// reiche Parameter durch
'PcTX' => PCname,
'GenDt' => time (), // an dem Datum generiert
'TRIG' => GetIdentPathByObjectID ($_IPS['TRIG']), // wurde ursprünglich aufgerufen von ....
'TRIG2' => GetIdentPathByObjectID ($_IPS['SELF']), // und transferiert von ....
'SEND2' => $_IPS['SENDER'])));
} // Ende Switch $_IPS['Cmd']
break; // Ende RunScript
....
Meine Spezialitäten mit „GetIdentPathByObjectID“ hatte ich mal hier beschrieben.
Auf dem ‚PcRX‘ wird per JSON ‚JSON_RX.ips.php‘ aufgerufen:
...
include_once "ObjIDsLAN.inc.php";
...
switch ($_IPS['SENDER']) { // woher aufgerufen ??
...
// ---- C. Skriptauslöser anderes Skript, ggf. Scheduler
case "RunScript": /* Wenn das Skript durch eine IPS_RunScript Funktionen ausgeführt wurde
*/
/* Aufruf in diesem Format:
IPS_RunScriptEx(PuIEreignis, array (
'Cmd' => 'GetBox', 'PutData', 'SetSkript', 'ActData', 'DtaData' (mand.)
'Act' => 'BLEscan/ACT' (opt. Identpfad:)
'PC' => PCname, // noch temporär
'PcTX' => PCnameSender
'PcRX' => PCnameEmpfänger
'GenDt' => an dem Datum generiert
'ObjTp' => LE = Bluetooth Low Energie
'Box' => optional $ID_der_remoten_Box,
'ParPac'=> als serialized array gepackte Parameter
'EAObj' => $ObjID
'TRIG' => $_IPS['SELF'],
));
*/
// POSTEINGANG
// Test ob alle Parameter da
foreach (array ('PcTX', 'Cmd') as $Par) {
if ( ! (isset ($_IPS[$Par])))
die ("Mit RunScript wurde '$Par' nicht an JSON-RX gesendet!");
}
if ( ! (isset ($LANListe[$_IPS['PcTX']])))
die ("Sende-PC " . $_IPS['PcTX'] . " nicht bekannt!"); //return; // erst mal
...
// sonst Aufruf mit Cmd
if (strpos ($LAN[PCname]['OS'], 'Linux'))
exec ('touch /tmp/JSON_RX-Cmd.tic');
switch ($_IPS['Cmd']) {
...
// Nur ein paar Beispiele:
case 'ActData' : // 'Act'-Skript wird der Box-Inhalt direkt zugestellt in 'ParPac'
if (isset ($_IPS['Act'])) {
IPS_RunScriptEx (GetObjectIDByIdentPath ($_IPS['Act']), array_merge ($_IPS, array (// reiche Parameter durch
'TRIG' => $_IPS['SELF'], // wurde aufgerufen von ....
'TRIG2' => $_IPS['TRIG'], // und vorher von ....
'SEND2' => $_IPS['SENDER'])));
} else {
}
break;
case 'BLE_Data' : // Raspis werden neue Daten direkt zugestellt in 'ParPac' (NOCH NICHT GETESTET)
break;
case 'SetSkript' : // ein Skript wird überschrieben (NOCH NICHT GETESTET)
break;
....
Das nur mal als Kurzabriß. Das komplette Skript ist noch viel komplizierter
Ich hoffe, das hilft Dir weiter.
Viele Grüße
Harald