Hi,
es läuft jetzt bei mir mit Android und iPhone.
Vorrraussetzung beim iPhone/iPad WLAN Sync über iTunes (Mac) einschalten.
Dann habe ich in meine 99_myUtils folgendes eingefügt:
(Sollten wir auch in das Wiki übernehmen, da die dort beschriebenen CodeSnippets unvollständig sind.)
Meine Änderungen zum Wiki:
Ich lese mit qx(/usr/bin/ctlmgr_ctl r landevice settings/landevice/count); die Anzahl der zu prüfenden Geräte aus. (Vorher war dieses eine Konstante, die man evtl. im Betrieb bei neuen Geräten immer mal wieder anpassen musste.
und ich prüfe den Status mit: qx(/usr/bin/ctlmgr_ctl r landevice settings/landevice$number/speed , da hier ein Gerät schneller abgemeldet wird, wenn es den WlanBereich verlässt. (lanping geht nicht, da die Geräte zwar auf der Fritzbox angemeldet sind, aber im StandBy nicht auf ping reagieren.)
Prüfen auf active (wie in den alten Beispielen) war lange noch weiter aktiv, obwohl auf der WebOberfläche (der Fritzbox) das Gerät schon lange abgemeldet war.
sub right{
my ($string,$nr) = @_;
return substr $string, -$nr, $nr;
}
sub left{
my ($string,$nr) = @_;
return substr $string, 0, $nr;
}
# Perl trim function to remove whitespace from the start and end of the string
sub trim($)
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
# Left trim function to remove leading whitespace
sub ltrim($)
{
my $string = shift;
$string =~ s/^\s+//;
return $string;
}
# Right trim function to remove trailing whitespace
sub rtrim($)
{
my $string = shift;
$string =~ s/\s+$//;
return $string;
}
sub
FBWLanStat($@)
{
my $laenge = 0;
my $i = 0;
my $net_device1="";
my $dm_device ="";
my $attendance="Abwesend";
my $ret = "";
$laenge = @_;
if (($laenge % 2) ne 0){
$ret = "Anzahl Parameter nicht korrekt.";
return $ret;
}
for ($i=0;$i < $laenge;$i+=2){
$net_device1 = $_[$i];
$dm_device = $_[($i+1)];
my $myLength=length($net_device1);
my $number=0;
my $status=0;
my $net_device="";
my $net_device2="";
my $attendance="";
my $anzahl=0;
$anzahl=qx(/usr/bin/ctlmgr_ctl r landevice settings/landevice/count);
while($number <= $anzahl){
$net_device=qx(/usr/bin/ctlmgr_ctl r landevice settings/landevice$number/name);
$net_device2=substr($net_device, 0, $myLength);
if($net_device2 eq $net_device1){
$status=
qx(/usr/bin/ctlmgr_ctl r landevice settings/landevice$number/speed);
if ($status > 0) {last;}
}
$number++;
}
if ($status > 0) {$attendance="Anwesend";}else{$attendance="Abwesend";}
if(Value("$dm_device") ne $attendance){fhem "set $dm_device $attendance"}
}
}
1;
Anwendung:
#fhem.cfg
define iPad dummy
attr iPad icon icoHouse.png
attr iPad room WerIstZuHause
attr iPad setList Anwesend Abwesend
define AndroidTablet dummy
attr AndroidTablet icon icoHouse.png
attr AndroidTablet room WerIstZuHause
attr AndroidTablet setList Anwesend Abwesend
define WerDa notify WerDa {FBWLanStat( "iPadAndreas", "iPad","android","AndroidTablet")}
define SucheLan at +*00:00:10 trigger WerDa
# setzen kommt nach Hause
define AndreasComingHome dummy
attr AndreasComingHome room WerIstZuHause
define ComingHomeAndreas notify puck { if (Value ("iPad") eq "Anwesend" && OldValue ("iPad") eq "Abwesend" && Value("s_Daemmerung") eq "on") {fhem ("set AndreasComingHome on") }}
# Aktion: (zB schalten einer Deckenlampe in der Diele)
define ComingHomeASetL notify AndreasComingHome:on {fhem ("set EG.L.d.Decke on-for-timer 180;;set AndreasComingHome off") }
Gruss Andreas