Are you sure that this work over 100??? eg 192.168.1.101
I get no devices over 100 thats why i modify the argv.
Fritzbox WLAN Script SomeOneAtHome
Are you sure that this work over 100??? eg 192.168.1.101
I get no devices over 100 thats why i modify the argv.
Yeah! Works with an IPhone and IP .105 like a charm.
As I just found here https://bitbucket.org/kbr/fritzconnection/issues/15/different-services-of-same-type-not
the numbers of urn:dslforum-org:service:WLANConfiguration:
mean the different services 2,4GHz, 5Ghz and Guest Wifi.
Don´t know if its right but maybe thats the reason why @tehmilcho got errors.
urn:dslforum-org:service:WLANConfiguration:1
urn:dslforum-org:service:WLANConfiguration:2
urn:dslforum-org:service:WLANConfiguration:3
As i code my php script i found the different of this three are 1 0-99 2 100-199 3 200-255…
Thats why i explicit define argv in this three sections. Interesting thing is that my script also show LAN devices also.
So i don’t know the differ now between your modification and my script. My script is working completely with 5Ghz and 2,4Ghz. I don’t have any problems.
I dont´t use the wifi of the fritzbox but some accesspoints so i deactivated the wifi of the fritzbox.
Thats why I use the service:Hosts
part and not service:WLANConfiguration:
.
Another point was, with the hosts I don´t need an authentification.
I´m courious what your script via print_r($result); of an LAN device shows, especially
[NewAssociatedDeviceAuthState] =>
[NewX_AVM-DE_Speed] =>
[NewX_AVM-DE_SignalStrength] =>
Indeed. My error. Your script working. As well in the hole network. I have so many network devices… So then fritzbox show always not connected devices. The loop must go through many devices and this needs time. But i don’t have found another way yet.
<?php
if(empty($argv[1])){
die("Arguments missing.");
}
$uri = "urn:dslforum-org:service:Hosts:1";
$location = "http://fritz.box:49000/upnp/control/hosts";
$echo = 0;
$client = new SoapClient(
null,
array(
'location' => $location,
'uri' => $uri,
'noroot' => True,
'login' => "",//empty, not needed
'password' => ""//empty, not needed
)
);
$result = $client->GetGenericHostEntry(new SoapParam($argv[1],'NewIndex'));
//print_r($result);
echo $result['NewActive'];
?>
Thats it! This small script check if device is online or offline via MAC Adress. It’s cute and fast.
Defuq… 5GHz not working… -.-
quick checked, but throws error:
PHP Fatal error: Uncaught SoapFault exception: [s:Client] UPnPError in /home/pi/someOneAtHome_new.php:19
Stack trace:
#0 /home/pi/someOneAtHome_new.php(19): SoapClient->__call('GetGenericHostE...', Array)
#1 /home/pi/someOneAtHome_new.php(19): SoapClient->GetGenericHostEntry(Object(SoapParam))
#2 {main}
thrown in /home/pi/someOneAtHome_new.php on line 19
5GHz device?
No, but as far I can see you try to get the host entry by Index and not by IPAdress.
IPAdress is not important I search for MAC Adress. Will take a look later.
Oh, I see. Then i guess it must be GetSpecificHostEntry
and not GetGenericHostEntry
and NewMACAddress
and not NewIndex
But didnt work for me…
Is there a well document for this? Found only AVM and this is not specified enough.
I found only this https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/hostsSCPD.pdf
and nearly the same here http://www.wehavemorefun.de/fritzbox/HostsSCPD.xml
That will work now! Important! Not IP Address is needed. Argument must be a MACAddress.
#!/usr/bin/php
<?php
if(empty($argv[1])){
die("Arguments missing.");
}
$uri = "urn:dslforum-org:service:Hosts:1";
$location = "http://fritz.box:49000/upnp/control/hosts";
$echo = 0;
$client = new SoapClient(
null,
array(
'location' => $location,
'uri' => $uri,
'noroot' => True,
'login' => "",//empty, not needed
'password' => ""//empty, not needed
)
);
$result = $client->GetSpecificHostEntry(new SoapParam($argv[1],'NewMACAddress'));
//print_r($result);
echo $result['NewActive'];
?>
@Swen
For me MAC-Adress is better as IP-Adress because my phone have a problem when i give it always the same IP-Adress.
Great work!
This script is faster then with a for loop. MACAddress is the only way to get device info.
Yeah! Great work!
Hello,
i have read this Thread and find it cool, because i have the same problem with my phones and the ping presence…
I have create a phone-presence.php in the home directory and copy the last script (with MAC-Adress) in my php skript. I also add a Shell Sensor in pimatic with the command: /home/pi/phone-presence.php 34:E2:FD:68:16:72 1 0 (mac-adress for my phone).
But i always get this error in pimatic:
error [pimatic-shell-execute,ShellPresenceSensor]: Error getting attribute value mein-handy.presence: undefined
error [pimatic-shell-execute]: [ShellPresenceSensor#mein-handy] Error: Command failed: /bin/sh -c /home/pi/phone-presence.php 34:E2:FD:68:16:72 1 0
/bin/sh: 1: /home/pi/phone-presence.php: Permission denied
I run Pimatic as an unprivileged
but when i run the command in the shell sensor with “sudo bash” i get another error:
error [pimatic-shell-execute]: [ShellPresenceSensor#mein-handy] Error: Command failed: /bin/sh -c sudo bash /home/pi/phone-presence.php 34:E2:FD:68:16:72 1 0
/home/pi/phone-presence.php: Zeile 2: ?php: Datei oder Verzeichnis nicht gefunden
/home/pi/phone-presence.php: Zeile 3: Syntaxfehler beim unerwarteten Wort `$argv[1]'
/home/pi/phone-presence.php: Zeile 3: `if(empty($argv[1])){'
What i´m doing wrong? Can somebody help me?
Thank you
@Masterplayer
You don`t Need the “1 0” at the end. Please test it so:
/home/pi/phone-presence.php 34:E2:FD:68:16:72
And in an ssh bash you call it with the same command, without “sudo bash”.
Please look if you have php installed, I have to install it first:
ls /usr/bin/php
If there cames an error you may have to install php first.
There are many points:
-1 0 will be ignored
-please install php I will look to create python as my free time let me do this
Check this first please. If you have a problem withit let me know.