das nachfolgende Script ermöglicht ein direktes Umschalten eines FHZ1300 WLAN-Moduls auf verschiedene PCs mit installierter Software, direkt aus der Ansicht bzw. Makros heraus.
Damit entfällt bei Wechsel zwischen verschiedenen PCs das ständige lästige Umschalten der "Ziel-IP-Adresse" ("Manuelle Verbindungen:" / "Verbindung aufbauen zu IP Adresse:") in der Konfigurations-Webseite des WLAN-Moduls.
Andererseits werden dadurch aber auch interessante Konstellationen möglich:
- Software läuft auf verschiedenen PCs je Etage / Aktivieren per Knopf
- Umschaltung auf das Office z.B. per VPN (aber direkt, also ohne Remote Desktop Software)
- Umschaltung zwischen Entwicklungs- und "Produktions"-PC, z.B. für scharfe Tests
usw.
ABER: Es gibt im System immer zeitgleich nur EIN und NUR EIN PC-System, das aktiv mit dem WLAN-Modul kommuniziert. Dieses dort umzuschalten, darum geht es.
Anwendung bei mir: Arbeitszimmer, großer PC oder Laptop, irgendwo unterwegs im Haus oder auf Terasse etc... Die Software ist auf beiden Geräten installiert, auch die SPG-Datei ist identisch. Aber am WLAN-Modul muß jedes mal in dessen Konfiguration die Zieladresse des PCs umgeschaltet werden.
Nachfolgendes Script ist das Makro eines ZEICHEN-Objektes "switchPC", bei dem "Ausführung bei Änderung" eingeschaltet ist.
Erwartet wird auf Klick als Eingabe der letzte Teil einer Class-C-IP-Adresse (Annahme: WLAN-Modul und wechselnde PCs sind im gleichen Class-C-Netz), z.B. die "20" einer Adresse "192.168.1.20". Natürlich kann man das auch fest auf einen Knopf legen o.ä.
Eine Anpassung an andere Adressschemata, höherklassige Netze, DNS-Namen usw. ist einfach möglich durch Modifikation der Zuweisungen im "Declaration"-Bereich zu Beginn des Scripts.
Nach Umschaltung, die erfahrungsgemäß auch mal 30 Sekunden dauern kann (wohl je nach Last und Laune des WLAN-Moduls) erfolgt ein Kontroll-Output der alten und neuen IP-Adresse in ein anderes Zeichen-Objekt namens "viewAusgaben", welches aber mehr als eine Zeile hoch sein sollte (mehrzeilige Ausgabe).
Die dort angegebenen IP-Adressen werden von der wirklichen Konfigurationsseite des WLAN-Moduls vor und nach dem Umschaltversuch fernausgelesen. Dazu dient die Function "parse33". Die dort enthaltene RegEx mag zugegebenermaßen suboptimal sein, auf jeden Fall wäre sie jedoch bei Verwendung von DNS-Namen anzupassen.
Ist kein Kontroll-Output erwünscht, kann diese Function entfallen.
Tip für tiefergehendes Debug (siehe Print-Befehle): In ein Textfile (hier: "test.php") kopieren, dann direkt am Kommandopromt aufrufen: "php test.php". Dazu sollte natürlich das Verzeichnis, in dem die php.exe liegt, im Suchpfad des PCs eingetragen sein... Dazu müssen lediglich die erste und die letzte Code-Zeile auskommentiert werden (Übername von / Übergabe an ein Studio-Objekt) und in der Zeile "$myHostPC = $input;" händisch ein Zuweisungsziel eingetragen werden (wie ...="20" für das o.g. Beispiel).
Die Warnungen, die dann zu sehen sind, entstammen dem Webserver des FHZ-Moduls und besagen lediglich, das die automatische Weiterschaltung nach Login bzw. Parameter-Eintrag nicht geklappt hat (denn das Script ist ja kein Browser, soweit wollt ichs dann doch nicht treiben... ).
Erste Erfahrung: Ein "Wegschalten" also Ändern in eine andere IP als die eigene führt erst dann zum "Verbindungsabriß", wenn die Software gestoppt und neu gestartet wurde. Ein "Herschalten" also von Fremd-IP auf die eigene wechseln wirkt dagegen unmittelbar.
Achso:
Natürlich nicht vergessen, im Deklarations-Teil die Adressen und die Passworte ($mypassConf, $mypassWeb) anzupassen....
Have Fun
(and give feedback )
Gerd
Code: Alles auswählen
<?
$input=$switchPC;
ini_set( 'max_execution_time', 300);
//--- Declaration --------
$myNet = "192.168.1.";
$myHostFHZ = "7"; # myNet + myHostFHZ, z.B. "192.168.1." + "7" => "192.168.1.7"
$myHostPC = $input; # myNet + myHostPC, z.B. "192.168.1." + "20" => "192.168.1.20"
$myName = "FHZ+1300+PC+WLAN";
$vor = "www.avisaro.com";
$home = $myNet.$myHostFHZ;
$weiter = "www.avisaro.com";
$refresh = "60";
$komMode = "2"; # 1=RX, 2=TX, 3=Verbindung beenden
$ipTx = $myNet.$myHostPC;
$portTx = "901";
$portRx = "901";
$mypassConf = "passwort1";
$mypassWeb = "passwort2";
$useOfValues= "0"; # 0=User, 1=Default (=Firmware-LAN-Reset!)
$rebootNow = "0";
//--- Initialisation ---------
$baseurl1 = "http://".$home."/pass?a=".$mypassConf;
$baseurl2 = "http://".$home."/info";
$baseurl3 = "http://".$home."/setconfig?";
$baseurl3.= "11=".$myName;
$baseurl3.= "&1a=".$vor."&1b=".$home."&1c=".$weiter."&22=".$refresh;
$baseurl3.= "&31=".$komMode."&33=".$ipTx."&34=".$portTx."&32=".$portRx;
$baseurl3.= "&1d=".$mypassConf."&1e=".$mypassWeb."&12=".$useOfValues;
if ($rebootNow == "1") {$baseurl3.= "&21=".$rebootNow;}
//--- Do it -------------------
$data = "";
print "Login...";
$s = file_get_contents( $baseurl1 );
print "Let's read the parameter page.\n";
$s = file_get_contents( $baseurl2 );
$olddata = Parse33($s, 'Old Target Computer IP');
$s = file_get_contents( $baseurl3 );
print "Target computer should be changed now.\n";
print "Let's read the parameter page again.\n";
$s = file_get_contents( $baseurl2 );
$data = parse33($s, 'New Target Computer IP');
print "\n===============================================\n";
$data=$olddata."<<".$data;
echo $data;
#return(true);
// ---------------------------------------------------------------------------
function parse33( $s, $key)
{
$ret = "";
$a = explode( "\n", $s);
$a = preg_grep( '#name=\"33\"#U', $a);
$tag = 1;
foreach( $a as $line)
{
preg_match( "#name=\"33\" value=\"([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)#", $line, $m);
if(count($m)>0) $ret = $key.":".$m[1];
$tag++;
if( $tag > 1) break;
}
return( $ret);
}
$viewAusgaben=$data;
?>