Fehleranzeige verbessert, Darstellung in Readings, Dokumentation angepasst

This commit is contained in:
Marko Oldenburg 2015-08-31 06:35:12 +02:00
parent a3e2ca5106
commit c34c42660d
2 changed files with 203 additions and 130 deletions

View File

@ -33,7 +33,7 @@ use Time::HiRes qw(gettimeofday);
use HttpUtils; use HttpUtils;
my $version = "0.5.3"; my $version = "0.5.4";
@ -151,7 +151,7 @@ sub AMAD_GetUpdateTimer($)
my ($hash) = @_; my ($hash) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
AMAD_RetrieveAutomagicInfo($hash) if (ReadingsVal($name,"deviceState","online") eq "online" && $hash->{STATE} ne "disabled"); AMAD_RetrieveAutomagicInfo($hash) if (ReadingsVal($name,"deviceState","online") eq "online" && $hash->{STATE} ne "disabled"); # deviceState muß von Hand online/offline gesetzt werden z.B. über RESIDENZ Modul
InternalTimer(gettimeofday()+$hash->{INTERVAL}, "AMAD_GetUpdateTimer", $hash, 1); InternalTimer(gettimeofday()+$hash->{INTERVAL}, "AMAD_GetUpdateTimer", $hash, 1);
Log3 $name, 4, "AMAD ($name) - Call AMAD_GetUpdateTimer"; Log3 $name, 4, "AMAD ($name) - Call AMAD_GetUpdateTimer";
@ -178,7 +178,7 @@ sub AMAD_Set($$@)
$list .= "openURL "; $list .= "openURL ";
$list .= "openApp:$apps " if (AttrVal("$name","setOpenApp","none") ne "none"); $list .= "openApp:$apps " if (AttrVal("$name","setOpenApp","none") ne "none");
$list .= "nextAlarmTime:time "; $list .= "nextAlarmTime:time ";
$list .= "statusRequest:noArg "; $list .= "stateRequest:noArg ";
$list .= "system:reboot " if (AttrVal("$name","root","none") ne "none"); $list .= "system:reboot " if (AttrVal("$name","root","none") ne "none");
@ -195,11 +195,11 @@ sub AMAD_Set($$@)
|| lc $cmd eq 'openapp' || lc $cmd eq 'openapp'
|| lc $cmd eq 'nextalarmtime' || lc $cmd eq 'nextalarmtime'
|| lc $cmd eq 'system' || lc $cmd eq 'system'
|| lc $cmd eq 'statusrequest') { || lc $cmd eq 'staterequest') {
Log3 $name, 5, "AMAD ($name) - set $name $cmd ".join(" ", @val); Log3 $name, 5, "AMAD ($name) - set $name $cmd ".join(" ", @val);
return AMAD_SelectSetCmd ($hash, $cmd, @val) if (@val) return AMAD_SelectSetCmd ($hash, $cmd, @val) if (@val)
|| (lc $cmd eq 'statusrequest'); || (lc $cmd eq 'staterequest');
} }
return "Unknown argument $cmd, bearword as argument or wrong parameter(s), choose one of $list"; return "Unknown argument $cmd, bearword as argument or wrong parameter(s), choose one of $list";
@ -213,7 +213,7 @@ sub AMAD_RetrieveAutomagicInfo($)
my $port = $hash->{PORT}; my $port = $hash->{PORT};
my $fhemip = AttrVal("$name","fhemServerIP","none"); my $fhemip = AttrVal("$name","fhemServerIP","none");
my $url = "http://" . $host . ":" . $port . "/fhem-amad/deviceInfo/"; my $url = "http://" . $host . ":" . $port . "/fhem-amad/deviceInfo/"; # Path muß so im Automagic als http request Trigger drin stehen
HttpUtils_NonblockingGet( HttpUtils_NonblockingGet(
{ {
@ -243,6 +243,8 @@ sub AMAD_RetrieveAutomagicInfoFinished($$$)
if ($err ne "") if ($err ne "")
{ {
$hash->{STATE} = $err if ($hash->{STATE} ne "initialized"); $hash->{STATE} = $err if ($hash->{STATE} ne "initialized");
readingsSingleUpdate ($hash,"lastStateRequestError",$err,1);
readingsSingleUpdate ($hash,"lastStateRequestState","stateRequest_error",1);
Log3 $name, 5, "AMAD ($name) - AMAD_RetrieveAutomagicInfoFinished: error while requesting AutomagicInfo: $err"; Log3 $name, 5, "AMAD ($name) - AMAD_RetrieveAutomagicInfoFinished: error while requesting AutomagicInfo: $err";
return; return;
} }
@ -250,11 +252,24 @@ sub AMAD_RetrieveAutomagicInfoFinished($$$)
if($data eq "" and exists($param->{code})) if($data eq "" and exists($param->{code}))
{ {
$hash->{STATE} = $param if ($hash->{STATE} ne "initialized"); $hash->{STATE} = $param->{code} if ($hash->{STATE} ne "initialized");
if ($param->{code} ne 200) {
readingsSingleUpdate ($hash,"lastStateRequestError",$param->{code},1);
} else {
readingsSingleUpdate ($hash,"lastStateRequestState","stateRequest_done",1);
}
Log3 $name, 5, "AMAD ($name) - AMAD_RetrieveAutomagicInfoFinished: received http code ".$param->{code}." without any data after requesting AMAD AutomagicInfo"; Log3 $name, 5, "AMAD ($name) - AMAD_RetrieveAutomagicInfoFinished: received http code ".$param->{code}." without any data after requesting AMAD AutomagicInfo";
return; return;
} }
if ($data eq "") {
readingsSingleUpdate ($hash,"lastStateRequestState","stateRequest_error",1);
} else {
readingsSingleUpdate ($hash,"lastStateRequestState","stateRequest_done",1);
}
$hash->{STATE} = "active" if ($hash->{STATE} eq "initialized" || $hash->{STATE} ne "active"); $hash->{STATE} = "active" if ($hash->{STATE} eq "initialized" || $hash->{STATE} ne "active");
my @valuestring = split('@@@@', $data); my @valuestring = split('@@@@', $data);
@ -314,15 +329,15 @@ sub AMAD_HTTP_POSTerrorHandling($$$)
{ {
my ( $param, $err, $data ) = @_; my ( $param, $err, $data ) = @_;
my $hash = $param->{hash}; my $hash = $param->{hash};
# my $doTrigger = $param->{doTrigger};
my $name = $hash->{NAME}; my $name = $hash->{NAME};
# my $host = $hash->{HOST};
if (defined($err)) { if (defined($err)) {
if ($err ne "") if ($err ne "")
{ {
$hash->{STATE} = $err if ($hash->{STATE} ne "initialized"); $hash->{STATE} = $err if ($hash->{STATE} ne "initialized");
readingsSingleUpdate ($hash,"lastSetCommandError",$err,1);
readingsSingleUpdate ($hash,"lastSetCommandState","cmd_error",1);
Log3 $name, 5, "AMAD ($name) - AMAD_HTTP_POST: error while send SetCommand: $err"; Log3 $name, 5, "AMAD ($name) - AMAD_HTTP_POST: error while send SetCommand: $err";
return; return;
} }
@ -330,11 +345,20 @@ sub AMAD_HTTP_POSTerrorHandling($$$)
if($data eq "" and exists($param->{code})) if($data eq "" and exists($param->{code}))
{ {
$hash->{STATE} = $param if ($hash->{STATE} ne "initialized"); $hash->{STATE} = $param->{code} if ($hash->{STATE} ne "initialized");
Log3 $name, 5, "AMAD ($name) - AMAD_HTTP_POST: received http code ".$param->{code}." without any data after send SetCommand";
return; if ($param->{code} ne 200) {
readingsSingleUpdate ($hash,"lastSetCommandError",$param->{code},1);
} else {
readingsSingleUpdate ($hash,"lastSetCommandState","cmd_done",1);
}
Log3 $name, 5, "AMAD ($name) - AMAD_HTTP_POST: received http code ".$param->{code}." without any data after send SetCommand";
return;
} }
readingsSingleUpdate ($hash,"lastSetCommandState","cmd_done",1);
return undef; return undef;
} }
@ -455,7 +479,7 @@ sub AMAD_SelectSetCmd($$@)
return AMAD_HTTP_POST ($hash,$url); return AMAD_HTTP_POST ($hash,$url);
} }
elsif (lc $cmd eq 'statusrequest') { elsif (lc $cmd eq 'staterequest') {
AMAD_GetUpdateLocal($hash); AMAD_GetUpdateLocal($hash);
return undef; return undef;
} }
@ -585,6 +609,10 @@ sub AMAD_SelectSetCmd($$@)
<li>currentMusicTrack - </li> <li>currentMusicTrack - </li>
<li>deviceState - Status des Androidger&auml;tes, muss selbst mit setreading gesetzt werden z.B. &uuml;ber die Anwesenheitskontrolle.<br> <li>deviceState - Status des Androidger&auml;tes, muss selbst mit setreading gesetzt werden z.B. &uuml;ber die Anwesenheitskontrolle.<br>
Ist Offline gesetzt, wird der Intervall zum Informationsabruf aus gesetzt.</li> Ist Offline gesetzt, wird der Intervall zum Informationsabruf aus gesetzt.</li>
<li>lastSetCommandError - letzte Fehlermeldung vom set Befehl</li>
<li>lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet</li>
<li>lastStateRequestError - letzte Fehlermeldung vom stateRequest Befehl</li>
<li>lastStateRequestState - letzter Status vom stateRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet</li>
<li>nextAlarmDay - aktiver Alarmtag</li> <li>nextAlarmDay - aktiver Alarmtag</li>
<li>nextAlarmTime - aktive Alarmzeit</li> <li>nextAlarmTime - aktive Alarmzeit</li>
<li>powerLevel - Status der Batterie in %</li> <li>powerLevel - Status der Batterie in %</li>
@ -608,7 +636,7 @@ sub AMAD_SelectSetCmd($$@)
<li>mediaPlayer - steuert den Standard Mediaplayer. play, stop, Titel z&uuml;r&uuml;ck, Titel vor.</li> <li>mediaPlayer - steuert den Standard Mediaplayer. play, stop, Titel z&uuml;r&uuml;ck, Titel vor.</li>
<li>nextAlarmTime - setzt die Alarmzeit. Geht aber nur innerhalb der n&auml;chsten 24Std.</li> <li>nextAlarmTime - setzt die Alarmzeit. Geht aber nur innerhalb der n&auml;chsten 24Std.</li>
<li>openURL - &ouml;ffnet eine URL im Standardbrowser</li> <li>openURL - &ouml;ffnet eine URL im Standardbrowser</li>
<li>screen - setzt den Bildschirm on/off mit Sperre</li> <li>screen - setzt den Bildschirm on/off mit Sperre, in den Automagic Einstellungen muss "Admin Funktion" gesetzt werden sonst funktioniert "Screen off" nicht.</li>
<li>screenMsg - versendet eine Bildschirmnachricht</li> <li>screenMsg - versendet eine Bildschirmnachricht</li>
<li>statusRequest - Fordert einen neuen Statusreport beim Device an</li> <li>statusRequest - Fordert einen neuen Statusreport beim Device an</li>
<li>ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird</li> <li>ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird</li>
@ -624,7 +652,7 @@ sub AMAD_SelectSetCmd($$@)
SetzeSystemeinstellung:System und macht einen Haken bei "Ich habe die Einstellungen &uuml;berpr&uuml;ft, ich weiss was ich tue". SetzeSystemeinstellung:System und macht einen Haken bei "Ich habe die Einstellungen &uuml;berpr&uuml;ft, ich weiss was ich tue".
<li>screenFullscreen - Schaltet den Vollbildmodus on/off. <b>Attribut setFullscreen</b></li> <li>screenFullscreen - Schaltet den Vollbildmodus on/off. <b>Attribut setFullscreen</b></li>
<li>screenOrientation - Schaltet die Bildschirmausrichtung Auto/Landscape/Portait. <b>Attribut setScreenOrientation</b></li> <li>screenOrientation - Schaltet die Bildschirmausrichtung Auto/Landscape/Portait. <b>Attribut setScreenOrientation</b></li>
<li>system - setzt Systembefehle ab (nur bei gerootetet Ger&auml;en). Reboot <b>Attribut root</b></li> <li>system - setzt Systembefehle ab (nur bei gerootetet Ger&auml;en). Reboot <b>Attribut root</b>, in den Automagic Einstellungen muss "Root Funktion" gesetzt werden</li>
Um openApp verwenden zu k&ouml;nnen, muss als Attribut ein, oder durch Komma getrennt, mehrere App Namen gesetzt werden. Der App Name ist frei w&auml;hlbar und nur zur Wiedererkennung notwendig. Um openApp verwenden zu k&ouml;nnen, muss als Attribut ein, oder durch Komma getrennt, mehrere App Namen gesetzt werden. Der App Name ist frei w&auml;hlbar und nur zur Wiedererkennung notwendig.
Der selbe App Name mu&szlig; im Flow SetCommands auf der linken Seite unterhalb der Raute Expression:"openApp" in einen der 5 Str&auml;nge (eine App pro Strang) in beide Rauten eingetragen werden. Danach wird Der selbe App Name mu&szlig; im Flow SetCommands auf der linken Seite unterhalb der Raute Expression:"openApp" in einen der 5 Str&auml;nge (eine App pro Strang) in beide Rauten eingetragen werden. Danach wird
in das in das

275
README.md
View File

@ -1,115 +1,160 @@
#AMAD - Automagic Android Device <h3>AMAD - Automagic Android Device</h3>
<ul>
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. Im Auslieferiungszustand werden folgende Zustände dargestellt: <u><b>AMAD - Automagic Android Device</b></u>
Dieses Modul liefert, <b><u>in Verbindung mit der Android APP Automagic</u></b>, diverse Informationen von Android Ger&auml;ten.
- Standardlautstärke Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.
- Status des Androidgerätes - Online/Offline Im Auslieferiungszustand werden folgende Zust&auml;nde dargestellt:
- nächste Alarmzeit <ul>
- nächster Alarmtag <li>Zustand von Automagic auf dem Ger&auml;t</li>
- Ladestatus - Netztei angeschlossen / nicht angeschlossen <li>aktuell abgespieltes Musikalbum des verwendeten Mediaplayers</li>
- Batteriestatus in % <li>aktuell abgespielter Musikinterpret des verwendeten Mediaplayers</li>
- Bildschirmhelligkeit <li>aktuell abgespielter Musiktitel des verwendeten Mediaplayers</li>
- Bildschirnstatus An/Aus <li>Status des Androidger&auml;tes - Online/Offline</li>
- Media Lautstärke des Lautsprechers am Gerät <li>n&auml;chster Alarmtag</li>
- Media Lautstärke des Bluetooth Lautsprechers <li>n&auml;chste Alarmzeit</li>
- Zustand von Automagic auf dem Gerät <li>Batteriestatus in %</li>
<li>Ladestatus - Netztei angeschlossen / nicht angeschlossen</li>
<li>Bildschirnstatus An/Aus</li>
Als Extra können noch aktueller Titel, Interpret und Album des verwendeten Mediaplayers angezeigt werden. <li>Bildschirmhelligkeit</li>
Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich einer kleinen Anpassung des "Information" Flows <li>Vollbildmodus An/Aus</li>
<li>Bildschirmausrichtung Auto/Landscape/Portrait</li>
Das Modul gibt Dir auch die Möglichkeit Deine Androidgeräte zu steuern. So können folgende Aktionen durchgeführt werden. <li>Standardlautst&auml;rke</li>
<li>Media Lautst&auml;rke des Lautsprechers am Ger&auml;t</li>
- Medienlautstärke regeln <li>Media Lautst&auml;rke des Bluetooth Lautsprechers</li>
- nächste Alarmzeit setzen </ul>
- Bildschirmhelligkeit einstellen <br>
- Bildschirm An/Aus machen Mit etwas Einarbeitung k&ouml;nnen jegliche Informationen welche Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich
- Mediaplayer steuern (Play, Stop, nächster Titel, vorheriger Titel) einer kleinen Anpassung des "Information" Flows
- eine URL im Browser öffnen <br><br>
- eine Nachricht senden welche am Bildschirm angezeigt wird Das Modul gibt Dir auch die M&ouml;glichkeit Deine Androidger&auml;te zu steuern. So k&ouml;nnen folgende Aktionen durchgef&uuml;hrt werden.
- eine Nachricht senden welche angesagt wird (TTS) <ul>
<li>Status des Ger&auml;tes (Online,Offline)</li>
<li>Mediaplayer steuern (Play, Stop, n&auml;chster Titel, vorheriger Titel)</li>
Für all diese Aktionen und Informationen wird auf dem Androidgerät Automagic und ein so genannter Flow benötigt. Die App müßt Ihr Euch besorgen, die Flows bekommt Ihr von mir zusammen mit dem AMAD Modul. <li>n&auml;chste Alarmzeit setzen</li>
<li>eine App auf dem Ger&auml;t &ouml;ffnen</li>
Wie genau verwendet man nun AMAD? <li>eine URL im Browser &ouml;ffnen</li>
<li>Bildschirm An/Aus machen</li>
Installiert Euch die App "Automagic Premium" aus dem App Store oder die Testversion von hier <li>Bildschirmhelligkeit einstellen</li>
ladet Euch das AMAD Modul und die Flowfiles von GitHub runter <li>Vollbildmodus einschalten</li>
installiert die zwei Flows und aktiviert erstmal nur den "Information" Flow, eventuell bei den FlowUpdates mal schauen ob es was neueres gibt und den entsprechenden Flow auf dem Gerät löschen und den neuen Flow von GitHub installieren <li>eine Nachricht senden welche am Bildschirm angezeigt wird</li>
kopiert die Moduldatei 74_AMAD.pm nach $FHEMPATH/FHEM. Geht auf die FHEM Frontendseite und gebt dort in der Kommandozeile reload 74_AMAD.pm ein <li>Bildschirmausrichtung einstellen (Auto,Landscape,Portrait)</li>
<li>neuen Statusreport des Ger&auml;tes anfordern</li>
<li>Systembefehle setzen (Reboot)</li>
Nun müsst Ihr nur noch ein Device in FHEM anlegen. <li>eine Nachricht senden welche <b>angesagt</b> wird (TTS)</li>
<li>Medienlautst&auml;rke regeln</li>
Define </ul>
<br><br>
define name AMAD ip-adresse port interval F&uuml;r all diese Aktionen und Informationen wird auf dem Androidger&auml;t Automagic und ein so genannter Flow ben&ouml;tigt. Die App m&uuml;&szlig;t
Ihr Euch besorgen, die Flows bekommt Ihr von mir zusammen mit dem AMAD Modul.
Beispiel: <br><br>
<b>Wie genau verwendet man nun AMAD?</b>
define WandTabletWohnzimmer AMAD 192.168.0.23 8090 180 <ul>
<li>Installiert Euch die App "Automagic Premium" aus dem App Store oder die Testversion von <a href="https://automagic4android.com/de/testversion">hier</a></li>
Diese Anweisung erstellt ein neues AMAD-Device. Die Parameter IP-ADRESSE und PORT legen die IP Adresse des Android Gerätes sowie den, in den Flows des Trigger HTTP Request, angegebenen Port fest. <li>ladet Euch das AMAD Modul und die Flowfiles von <a href="https://github.com/LeonGaultier/fhem-AMAD">GitHub</a> runter</li>
INTERVAL ist der Zeitabstand in dem ein erneuter Informationsabruf stattfinden soll. Alle x Sekunden. Bei mir hat sich 180 gut bewährt, also alle 3 Minuten <li>installiert die zwei Flows und aktiviert erstmal nur den "Information" Flow, eventuell bei den <a href="https://github.com/LeonGaultier/fhem-AMAD/tree/master/Flow_Updates">
Bitte gebt für sofortige Erfolge als Port 8090 ein, das ist der Port der in den mitgelieferten Automagic Flows als Trigger Port eingetragen ist. FlowUpdates</a> mal schauen ob es was neueres gibt und den entsprechenden Flow auf dem Ger&auml;t l&ouml;schen und den neuen Flow von GitHub installieren</li>
Dieser kann später mit Erfahrung auch geändert werden <li>kopiert die Moduldatei 74_AMAD.pm nach $FHEMPATH/FHEM. Geht auf die FHEM Frontendseite und gebt dort in der Kommandozeile <i>reload 74_AMAD.pm</i> ein</li>
</ul>
<br>
Fertig! Nach anlegen des Devices sollten bereits die ersten Readings reinkommen. Nun m&uuml;sst Ihr nur noch ein Device in FHEM anlegen.
<br><br>
Readings: <a name="AMADdefine"></a>
<b>Define</b>
- volume - Lautstärkewert welcher über "set volume" gesetzt wurde. <ul><br>
- deviceState - Status des Androidgerätes, muss selbst mit setreading gesetzt werden z.B. über die Anwesenheitskontrolle. <code>define &lt;name&gt; AMAD &lt;IP-ADRESSE&gt; &lt;PORT&gt; &lt;INTERVAL&gt;</code>
Ist Offline gesetzt, wird der Intervall zum Informationsabruf aus gesetzt. <br><br>
- nextAlarmDay - aktiver Alarmtag Beispiel:
- nextAlarmTime - aktive Alarmzeit <ul><br>
- powerLevel - Status der Batterie in % <code>define WandTabletWohnzimmer AMAD 192.168.0.23 8090 180</code><br>
- powerPlugged - Netzteil angeschlossen? 0=NEIN, 2=JA </ul>
- screenBrightness - Bildschirmhelligkeit von 0-255 <br>
- volumeMusikBluetooth - Media Lautstärke von angeschlossenden Bluetooth Lautsprechern Diese Anweisung erstellt ein neues AMAD-Device. Die Parameter IP-ADRESSE und PORT legen die IP Adresse des Android Ger&auml;tes
- volumeMusikSpeaker - Media Lautstärke der internen Lautsprecher sowie den, in den Flows des Trigger HTTP Request, angegebenen Port fest.<br>INTERVAL ist der Zeitabstand in dem ein erneuter Informationsabruf stattfinden soll. Alle x Sekunden.
- screen - Bildschirm An oderAus Bei mir hat sich 180 gut bew&auml;hrt, also alle 3 Minuten<br>
- automagicState - Statusmeldungen von der AutomagicApp <u><b>Bitte gebt f&uuml;r sofortige Erfolge als Port 8090 ein, das ist der Port der in den mitgelieferten Automagic Flows als Trigger Port eingetragen ist.<br>
Dieser kann sp&auml;ter mit Erfahrung auch ge&auml;ndert werden</b></u>
Die Readings volumeMusikBluetooth und volumeMusikSpeaker spiegeln die jeweilige Medialautstärke der angeschlossenden Bluetoothlautsprechern oder der internen Lautsprecher wieder. </ul>
Sofern man die jeweiligen Lautstärken ausschließlich über den Set Befehl setzt, wird eine der beiden immer mit dem volume Reading über ein stimmen. <br><br>
Fertig! Nach anlegen des Devices sollten bereits die ersten Readings reinkommen.
Die Readings "currentMusicAlbum", "currentMusicArtist", "currentMusicTrack" werden nicht vom Modul AMAD gesteuert, sondern ausschließlich vom Automagic Flow. Hierfür ist es notwendig das der Flow entsprechend Deiner Netzwerkumgebung und Deines Androidgerätes angepasst wird. <br><br>
Öffne den Flow SetCommands und folge dem Strang welcher ganz ganz links aussen lang geht. Dieser trifft auf eine Raute. Die Raute symbolisiert eine Bedingung. Es wird gefragt, ob ein bestimmtes WLan Netz vorhanden ist. Tragt bitte hier Euren Router oder Access Point ein. Als nächstes folgt Ihr dem Strang weiter und trifft auf 3 Rechtecke. <a name="AMADreadings"></a>
In jedem der 3 Rechtecke ist ein Befehl zum setzen eines der drei Readings eingetragen. Ihr müsst lediglich in allen drein die IP Eures FHEM Servers eintragen, sowie den korrekte DeviceNamen welchen Ihr in FHEM für dieses Androidgerät angegeben habt. <b>Readings</b>
<ul>
Das Reading automagicState muss explizit aktiviert werden. Hierfür geht Ihr in den Flow Information und dann ganz nach rechts. Dort steht eine einsame Raute (Bedingung) ohne Anbuindung an das Rechteck mit der Pause. Drückt auf das Rechteck mit der Pause und zieht das Plus bis runter auf die Raute. Nun habt Ihr eine Verbindung. Ab der Android 5.x Version setzt Ihr unter Einstellungen:Ton&Benachrichtigungen:Benachrichtigungszugriff ein Haken bei Automagic. Leider kann ich nicht sagen wie es sich bei Versionen der 4.xer Reihe verhält. <li>automagicState - Statusmeldungen von der AutomagicApp</li>
<li>currentMusicAlbum - </li>
<li>currentMusicArtist - </li>
Set: <li>currentMusicTrack - </li>
<li>deviceState - Status des Androidger&auml;tes, muss selbst mit setreading gesetzt werden z.B. &uuml;ber die Anwesenheitskontrolle.<br>
- volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher Ist Offline gesetzt, wird der Intervall zum Informationsabruf aus gesetzt.</li>
- deviceState - setzt den Device Status Online/Offline. Siehe Readings <li>lastSetCommandError - letzte Fehlermeldung vom set Befehl</li>
- mediaPlayer - steuert den Standard Mediaplayer. play, stop, Titel zürück, Titel vor. <li>lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet</li>
- nextAlarmTime - setzt die Alarmzeit. Geht aber nur innerhalb der nächsten 24Std. <li>lastStateRequestError - letzte Fehlermeldung vom stateRequest Befehl</li>
- openURL - öffnet eine URL im Standardbrowser <li>lastStateRequestState - letzter Status vom stateRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet</li>
- screen - setzt den Bildschirm auf AN oder AUS mit Sperre <li>nextAlarmDay - aktiver Alarmtag</li>
- screenBrightness - setzt die Bildschirmhelligkeit, von 0-255 <li>nextAlarmTime - aktive Alarmzeit</li>
- screenMsg - versendet eine Bildschirmnachricht <li>powerLevel - Status der Batterie in %</li>
- ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird <li>powerPlugged - Netzteil angeschlossen? 0=NEIN, 2=JA</li>
<li>screen - Bildschirm An oderAus</li>
Wenn Ihr das "set screenBrightness" verwenden wollt, muss eine kleine Anpassung im Flow SetCommand vorgenommen werden. Öffnet die Aktion (eines der Vierecke ganz ganz unten) SetzeSystemeinstellung:System und macht einen Haken bei "Ich habe die Einstellungen überprüft, ich weiss was ich tue". <li>screenBrightness - Bildschirmhelligkeit von 0-255</li>
<li>screenFullscreen - Vollbildmodus (On,Off)</li>
<li>screenOrientation - Bildschirmausrichtung (Auto,Landscape,Portrait)</li>
<li>volume - Lautst&auml;rkewert welcher &uuml;ber "set volume" gesetzt wurde.</li>
Anwendungsbeispiele: <li>volumeMusikBluetooth - Media Lautst&auml;rke von angeschlossenden Bluetooth Lautsprechern</li>
<li>volumeMusikSpeaker - Media Lautst&auml;rke der internen Lautsprecher</li>
Ich habe die Ladegeräte für meine Androidgeräte an Funkschaltsteckdosen. ein DOIF schaltet bei unter 30% die Steckdose ein und bei über 90% wieder aus. Morgens lasse ich mich über mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das abspielen stoppe ich dann von Hand. Danach erfolgt noch eine Ansage wie das Wetter gerade ist und wird. <br>
Mein 10" Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch runter gesetzt wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert. Die Readings volumeMusikBluetooth und volumeMusikSpeaker spiegeln die jeweilige Medialautst&auml;rke der angeschlossenden Bluetoothlautsprechern oder der internen Lautsprecher wieder.<br>
Sofern man die jeweiligen Lautst&auml;rken ausschlie&szlig;lich &uuml;ber den Set Befehl setzt, wird eine der beiden immer mit dem "volume" Reading &uuml;ber ein stimmen.<br><br>
</ul>
<br><br>
Und zu guter letzt möchte ich mich noch bedanken. <a name="AMADset"></a>
<b>Set</b>
Der größte Dank geht an meinen Mentor Andre (justme1968), er hat mir mit hilfreichen Tips geholfen Perlcode zu verstehen und Spaß am programmieren zu haben. <ul>
<li>deviceState - setzt den Device Status Online/Offline. Siehe Readings</li>
Auch möchte ich mich bei Jens bedanken (jensb) welcher mir ebenfalls mit hilfreichen Tips bei meinen aller ersten Gehversuchen beim Perlcode schreiben unterstützt hat. <li>mediaPlayer - steuert den Standard Mediaplayer. play, stop, Titel z&uuml;r&uuml;ck, Titel vor.</li>
<li>nextAlarmTime - setzt die Alarmzeit. Geht aber nur innerhalb der n&auml;chsten 24Std.</li>
So und nun noch ein besonderer Dank an pah (Prof. Dr. Peter Henning ), ohne seine Aussage "Keine Ahnung hatten wir alle mal, das ist keine Ausrede" hätte ich bestimmt nicht angefangen Interesse an Modulentwicklung zu zeigen :-) <li>openURL - &ouml;ffnet eine URL im Standardbrowser</li>
<li>screen - setzt den Bildschirm on/off mit Sperre, in den Automagic Einstellungen muss "Admin Funktion" gesetzt werden sonst funktioniert "Screen off" nicht.</li>
<li>screenMsg - versendet eine Bildschirmnachricht</li>
<li>statusRequest - Fordert einen neuen Statusreport beim Device an</li>
<li>ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird</li>
<li>volume - setzt die Medialautst&auml;rke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher</li>
</ul>
<br>
<b>Set abh&auml;ngig von gesetzten Attributen</b>
<ul>
<li>mediaPlayer - steuert den Standard Mediaplayer. play, stop, Titel z&uuml;r&uuml;ck, Titel vor. <b>Attribut fhemServerIP</b></li>
<li>openApp - &ouml;ffnet eine ausgew&auml;hlte App. <b>Attribut setOpenApp</b></li>
<li>screenBrightness - setzt die Bildschirmhelligkeit, von 0-255 <b>Attribut setScreenBrightness</b></li>
Wenn Ihr das "set screenBrightness" verwenden wollt, muss eine kleine Anpassung im Flow SetCommand vorgenommen werden. &Ouml;ffnet die Aktion (eines der Vierecke ganz ganz unten)
SetzeSystemeinstellung:System und macht einen Haken bei "Ich habe die Einstellungen &uuml;berpr&uuml;ft, ich weiss was ich tue".
<li>screenFullscreen - Schaltet den Vollbildmodus on/off. <b>Attribut setFullscreen</b></li>
<li>screenOrientation - Schaltet die Bildschirmausrichtung Auto/Landscape/Portait. <b>Attribut setScreenOrientation</b></li>
<li>system - setzt Systembefehle ab (nur bei gerootetet Ger&auml;en). Reboot <b>Attribut root</b>, in den Automagic Einstellungen muss "Root Funktion" gesetzt werden</li>
Um openApp verwenden zu k&ouml;nnen, muss als Attribut ein, oder durch Komma getrennt, mehrere App Namen gesetzt werden. Der App Name ist frei w&auml;hlbar und nur zur Wiedererkennung notwendig.
Der selbe App Name mu&szlig; im Flow SetCommands auf der linken Seite unterhalb der Raute Expression:"openApp" in einen der 5 Str&auml;nge (eine App pro Strang) in beide Rauten eingetragen werden. Danach wird
in das
Viereck die App ausgew&auml;lt welche durch den Attribut App Namen gestartet werden soll.
</ul>
<br><br>
<a name="AMADstate"></a>
<b>STATE</b>
<ul>
<li>initialized - Ist der Status kurz nach einem define..</li>
<li>activ - Das Modul ist im aktiven Status.</li>
</ul>
<br><br><br>
<u><b>Anwendungsbeispiele:</b></u>
<ul><br>
Ich habe die Ladeger&auml;te f&uuml;r meine Androidger&auml;te an Funkschaltsteckdosen. ein DOIF schaltet bei unter 30% die Steckdose ein und bei &uuml;ber 90% wieder aus. Morgens lasse ich mich
&uuml;ber mein Tablet im Schlafzimmer mit Musik wecken. Verwendet wird hierzu der wakeuptimer des RESIDENTS Modules. Das abspielen stoppe ich dann von Hand. Danach erfolgt noch eine
Ansage wie das Wetter gerade ist und wird.<br>
Mein 10" Tablet im Wohnzimmer ist Mediaplayer f&uuml;r das Wohnzimmer mit Bluetoothlautsprechern. Die Lautst&auml;rke wird automatisch runter gesetzt wenn die Fritzbox einen Anruf auf das
Wohnzimmer Handger&auml;t signalisiert.
</ul>
<br><br><br>
<b><u>Und zu guter letzt m&ouml;chte ich mich noch bedanken.</u><br>
Der gr&ouml;&szlig;te Dank geht an meinen Mentor Andre (justme1968), er hat mir mit hilfreichen Tips geholfen Perlcode zu verstehen und Spa&szlig; am programmieren zu haben.<br>
Auch m&ouml;chte ich mich bei Jens bedanken (jensb) welcher mir ebenfalls mit hilfreichen Tips bei meinen aller ersten Gehversuchen beim Perlcode schreiben unterst&uuml;tzt hat.<br>
So und nun noch ein besonderer Dank an pah (Prof. Dr. Peter Henning ), ohne seine Aussage "Keine Ahnung hatten wir alle mal, das ist keine Ausrede" h&auml;tte ich bestimmt nicht angefangen Interesse an
Modulentwicklung zu zeigen :-)</b>
</ul>