Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl -w
- use strict;
- use HTTP::Tiny;
- my $settings = {
- iw => '/sbin/iw', #iw
- dev => 'wlan0', # your network device
- findMac => '88:dc:96:1f:b3:1a', # mac address to check
- awayAfter => 5000, # don't match if not seen for x milliseconds
- domoAddr => '192.168.0.111', # domoticz web address
- domoUser => 'testUser', # domoticz username
- domoPasswd => 'testPass', # domoticz password
- domoUserVar => 'autoWifi', # domoticz variable name
- domoVarID => 99, # domoticz variable id
- };
- my $networks = {};
- my $skeleton = {
- 'BSS' => '',
- 'SSID' => '',
- 'lastSeen' => '',
- 'signal' => ''
- };
- &scanWifi;
- &findMyNetwork;
- sub findMyNetwork{
- if(defined $networks->{$settings->{findMac}}){
- # network found
- if($networks->{$settings->{findMac}}->{lastSeen} < $settings->{awayAfter}){
- #wifi seems to be within reach.
- updateDomo(time);
- return;
- }
- }
- updateDomo(0);
- }
- sub updateDomo{
- my ($sendToDomo,$url, $varValue);
- $varValue = shift;
- $url = sprintf(
- 'http://%s:%s@%s/json.htm?type=command¶m=updateuservariable&idx=%s&vname=%s&vtype=0&vvalue=%s',
- $settings->{domoUser},
- $settings->{domoPasswd},
- $settings->{domoAddr},
- $settings->{domoVarID},
- $settings->{domoUserVar},
- $varValue
- );
- $sendToDomo = HTTP::Tiny->new->get($url);
- if($sendToDomo->{success}){
- print "Domo updated\n";
- }else{
- print "Domo failed to update\n";
- #printf("%s \n\n %s\n", $sendToDomo->{status}, $sendToDomo->{content});
- }
- }
- sub scanWifi{
- my ($network, $cmd);
- $cmd = sprintf('%s dev %s scan', $settings->{iw}, $settings->{dev});
- open(READ, $cmd, '-|') or die("couldn't open iw");
- foreach my $line (<READ>) {
- if($line =~ /^BSS ((?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2})/i){
- if(defined $network->{'BSS'}){
- $networks->{$network->{'BSS'}} = $network;
- }
- $network = { %$skeleton };
- $network->{'BSS'} = $1;
- }elsif ($line =~ /\sSSID: (.+)/) {
- $network->{'SSID'} = $1;
- }elsif ($line =~ /\slast seen: (\d+)/) {
- $network->{'lastSeen'} = $1;
- }elsif ($line =~ /\ssignal: (.+)/) {
- $network->{'signal'} = $1;
- }
- }
- $networks->{$network->{'SSID'}} = $network;
- close(READ);
- }
Advertisement
Add Comment
Please, Sign In to add comment