FHZ1300 WLAN per Script auf aktuellen PC umschalten

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

Antworten
gwanjek
Beiträge: 76
Registriert: 18.12.2006, 17:32
Wohnort: Ostseeküste

FHZ1300 WLAN per Script auf aktuellen PC umschalten

Beitrag von gwanjek » 20.02.2007, 23:52

Hallo,
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;
?>


gwanjek
Beiträge: 76
Registriert: 18.12.2006, 17:32
Wohnort: Ostseeküste

Beitrag von gwanjek » 21.02.2007, 09:50

Ein Hinweis noch zum Reset ($rebootNow):

Es ist offenbar (zumindest bei meinem Modul) egal, was dort für ein Wert angegeben wird. Auch bei $rebootNow=0 wird immer ein Reset durchgeführt. Nur wenn der ganze 21er-Parameter fehlt, entspricht das Verhalten dem der reinen IP-Änderung in der Weboberfläche.

Notwendig wird so ein Reset jedoch, sobald ein PC "die Kommunikation gewaltsam an sich reißen soll, obwohl die noch mit einem anderne PC aktiv ist".

Sicher ist das eine eher unschöne Lösung und sollte wohl nur im Notfall gebraucht werden, wenn der andere PC grad unerreichbar weit weg ist oder so... Der sauberer Knopf im je-Etagen-Bildschirm zur Umschaltung / Aktivierung braucht wohl doch noch etwas mehr Unterstützung... Obwohl er so wirklich schon mal realisierbar wäre.

Gruß Gerd

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“