IP Check / Anwesenheit

Begonnen von erdbeerschaeler, 05. November 2015, 19:35:09

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

vicky

#15
Hallo,
ich habe weiter nachgeforscht.
In anderen Foren wird die FritzBox! per SOAP ausgelesen. Dabei gehen verschiedenste Befehle.
Ich habe nur einen Verfolgt.
Genau gesagt können die aktiven WLAN-Teilnehmer ausgelesen werden.
Das passiert mit eine PHP Datei.
Somit braucht man einen PHP-Server
Da fängt der gnaze Scheiß an zu hinken.
Ich hab einen Beckhoff CX1xxx. Darauf läuf nur der IIS ohne PHP. Noch.

Die Frage wäre nun, ob das Beispiel irgendwie weiterhilft, um das auf SPS-Ebene einzubinden.

Ich häng es mal in den Anhang.

Edit:
P.S. Dateianhänge gehen wohl immer noch nicht! Schade

Hier der PHP-Code zum testen:
Hier den Benutzer eintragen:    $login = "123456789"; //ggf. eintragen
Hier das Passwort eintragen:    $password = "123456789"; //ggf. eintragen
Hier die gesuchte IP eintragen: $handy = preg_match("/A.B.C.D/",$table); //IP Adresse vom Handy/Tablet usw.
<?
/*//////////////////////////////////////////////////////////////////////////////
Fritzbox Script Aktive WLan-Geräte                         
/*//////////////////////////////////////////////////////////////////////////////

//Definitionen//////////////////////////////////////////////////////////////////
$fritzboxIP = "fritz.box"; //falls umbenannt IP eintragen
$fritzboxPort = "49000"; //konstant
$login = "123456789"; //ggf. eintragen
$password = "123456789"; //ggf. eintragen
////////////////////////////////////////////////////////////////////////////////

$client = new SoapClient(
    null,
    array(
        'location'   => "http://".$fritzboxIP.":".$fritzboxPort."/upnp/control/wlanconfig1",
        'uri'        => "urn:dslforum-org:service:WLANConfiguration:1",
        'noroot'     => True,
        'login'      => $login,
        'password'   => $password
    )
);
//print_r($client);

$NumberOfHosts = $client->GetTotalAssociations();
echo "<pre>";
print_r($NumberOfHosts);
echo "</pre>";

//Ausgabe der angelegten Geräte
for ($i=0;$i<$NumberOfHosts;$i++)
    {
    $Host = $client->GetGenericAssociatedDeviceInfo(new SoapParam($i,'NewAssociatedDeviceIndex'));
//echo "<pre>";
//print_r($Host);
//echo "</pre>";
    $Hosts[] = $Host;

    }

/*Muster des Array://///////////////////////////////////////////////////////////
Array
(
    [NewAssociatedDeviceMACAddress] =>
    [NewAssociatedDeviceIPAddress] => *.*.*.*
    [NewAssociatedDeviceAuthState] => 0
    [NewX_AVM-DE_Speed] => 0
    [NewX_AVM-DE_SignalStrength] => 0
)

Struktur des Popup / Tabelle:

--------------------------------------------------------------------------------
|Übersicht WLan: [Anzahl]Aktive Geräte                                      |
--------------------------------------------------------------------------------
|  Nr    |     IPAddress       |    MACAddress    |    AUTHState           |
--------------------------------------------------------------------------------
|         |                            |                             |                                |
--------------------------------------------------------------------------------
/*//////////////////////////////////////////////////////////////////////////////

//Ausgabe der aktiven Geräte
for ($i=0;$i<$NumberOfHosts;$i++)
    {
    if($Hosts[$i]['NewAssociatedDeviceAuthState'] == 1)
          {
        $NewIPAddress     = $Hosts[$i]['NewAssociatedDeviceIPAddress'];
        $NewMACAddress    = $Hosts[$i]['NewAssociatedDeviceMACAddress'];
        $NewAuthState     = $Hosts[$i]['NewAssociatedDeviceAuthState'];
        $ActiveDevices[]  = $Hosts[$i]['NewAssociatedDeviceAuthState'];

        $table = '<tr><th>Nr.  </th><th>IPAddress        </th><th>MACAddress           </th><th>AUTHState</th></tr>';
echo "<pre>";
echo $table;
echo "</pre>";

$table = "$i    $NewIPAddress    $NewMACAddress    $NewAuthState";
echo "<pre>";
echo $table;
echo "</pre>";
}     
    }
//Beispiel Zeilenumbruch
//echo "{$table}<br />\n";

echo "<pre>";
echo "Anzahl Geraete: ";
echo(count($NumberOfHosts));
echo "</pre>";

$handy = preg_match("/A.B.C.D/",$table); //IP Adresse vom Handy/Tablet usw.

echo "<pre>";
echo($handy);
echo "</pre>";

?>


Was der Code dann zurückgiebt sieht so aus:
8
Nr.  IPAddress        MACAddress           AUTHState
1    123.456.789.1    00:1e:65:61:89:d0    1
Nr.  IPAddress        MACAddress           AUTHState
3    123.456.789.2    48:59:29:f2:4c:2b    1
Nr.  IPAddress        MACAddress           AUTHState
5    123.456.789.3    48:9d:24:8e:eb:6f    1

Anzahl Geraete: 1
1


Der original Code ist übrigens nicht von mir, sondern stammt von hier
https://www.symcon.de/forum/threads/25745-FritzBox-mit-SOAP-auslesen-und-steuern?p=259011#post259011
also gehört das Original dem Urheber.
Ich hoffe keine Rechte verletzt zu haben.
Da gibt's nen ganzen Thread zum Thema, allerdings im Zusammenhang mit anderen Gerätschaften. Dennoch...

linsenpago

Hallo!

Ich habe vor einiger Zeit mal telefonisch den Wago Support in Wien kontaktiert und genau nach so einer Funktion gefragt.

Der Herr am anderen Ende war von der Idee überzeugt und meinte, er schreibt mir was zusammen.

Herausgekommen ist das angehängte Projekt welches ich soeben erfolgreich in meine Steuerung integriert habe.

Wenn entweder das Smartphone meiner Frau oder von mir sich ins Wlan hängt, dann erkennt die Steuerung dass das Gerät da ist und somit Anwesend ist. Dann deaktiviere ich die Alarmfunktion.
Man muss natürlich den Geräten eine fixe IP im Netzwerk zuweisen.

Bin erst jetzt dazu gekommen es zu integrieren.
Aber vielleicht kann es ja noch jemand brauchen.. wenn ich das schaffe, dann ihr auch. ;-)

Achja es läuft auf einer Wago 750-880

LG und viel Spaß damit!!

[gelöscht durch Administrator]

vicky

Hallo linsenpago,
schöne Sache, daß Du das hinbekommen hast.

Ich habe mir das angeschaut. Wenn ich das richtig verstehe, sendest Du PINGs an die IP-Adressen.
Ist das richtig?

Frage an die Community:
Gibt es das ganze auch für Beckhoff-Hardware?

oder
mit welchem Baustein aus der "Network.lib" kann man PINGs senden und auswerten?



Danke vorab
Vicky

peewit

ping befehle werden von der oscat lib nicht unterstützt
man kann nur normale UDP und TCP Nachrichten verarbeiten die auf basis von IP-Adressen arbeiten

vicky

Ah ok,

Gibt es einen Ansatz für die Beckhoff-Hardware wie linsenpago in seinem Beispiel gemacht hat?

peewit

oscat erfordert die Installation des„TwinCAT TCP/IP Connection Server“
Benötigt somit die Bibliothek „TcpIp.Lib“(Standard.Lib; TcBase.Lib; TcSystem.Lib werden danach automatisch eingebunden )

Schau mal in der Doku von Beckhoff nach ob diese Bausteine dir das ermöglichen
Einen anderen Weg um Ethernet-Kommunikation frei zu programmieren gibt es nicht !