AMAD: Unterschied zwischen den Versionen

Aus FHEMWiki
 
(31 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Infobox Modul
{{Infobox Modul
|ModPurpose=Steuern von Adroidgeräten und Anzeige von bestimmten Informationen dieser Geräte
|ModPurpose=Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte
|ModType=d
|ModType=d
|ModForumArea=Unterstützende Dienste
|ModForumArea=Sonstige Systeme
|ModTechName=74_AMAD.pm
|ModTechName=73_AMADCommBridge.pm, 74_AMADDevice.pm
|ModOwner=CoolTux <br />([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])
|ModOwner=CoolTux <br />([http://forum.fhem.de/index.php?action=profile;u=13684 Forum] / [[Benutzer:CoolTux|Wiki]])
}}
}}


==Vorwort==
= AMAD 4.2 [AMADNG] =
===Warum AMAD2===
== 73_AMADCommBridge / 74_AMADDevice ==
Bei der Entwicklung der ersten Version von AMAD musste ich auf Grund meines damaligen Wissenstandes ein einfaches Konzept zum Erhalt von Daten wählen. Hierfür wählte ich das Prinzip des pullens. Die Daten wurden alle 3 min vom Gerät angefordert.
Mit AMAD ab Version 2.0, also der 2. Version von AMAD werden die Daten nun vom Androidgerät selbst nach FHEM gepusht. So kommen Statusänderungen quasi in Echtzeit als Reading ins Device.


==Vorstellung==
= Vorwort =
Dieses Modul liefert, '''in Verbindung mit der Android APP Automagic''', diverse Informationen von Android Geräten.  
=== Warum AMADNG ===
Die AndroidAPP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.
Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen.
In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden.
Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant.
Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt.


'''Es ist darauf zu achten, das [[Autocreate]] aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!'''


== Features / Funktionen ==
= Vorstellung =
Im Auslieferiungszustand werden folgende Zustände dargestellt:
Dieses 2-stufige Modul liefert, '''in Verbindung mit der Android App Automagic''', diverse Informationen von Android Geräten.
Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.
 
=== Features / Funktionen ===
Im Auslieferungszustand werden folgende Zustände dargestellt:
* installierte Android Version
* installierte Android Version
* Zustand von Automagic auf dem Gerät
* Zustand von Automagic auf dem Gerät
Zeile 41: Zeile 47:
* ...
* ...


Mit etwas Einarbeitung können jegliche Informationen welche Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows welcher seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.


= AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte =
Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle.
Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz.


Das Modul gibt Dir auch die Möglichkeit Deine Androidgeräte zu steuern. So können folgende Aktionen durchgeführt werden:
Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.
* Bluetooth Ein/Aus schalten
* zu einem bestimmten Bluetoothgerät wechseln/verbinden
* Status des Gerätes (Online,Offline)
* Mediaplayer steuern (Play, Stop, nächster Titel, vorheriger Titel)
* nächste Alarmzeit setzen
* ein Benachrichtigungston abspielen (Notificationsound)
* eine App auf dem Gerät öffnen
* eine URL im Browser öffnen
* Bildschirm An/Aus machen
* Bildschirmhelligkeit einstellen
* Vollbildmodus einschalten
* eine Nachricht senden welche am Bildschirm angezeigt wird
* Bildschirmausrichtung einstellen (Auto,Landscape,Portrait)
* neuen Statusreport des Gerätes anfordern
* Systembefehle setzen (Reboot)
* eine Nachricht senden welche angesagt wird (TTS)
* Medienlautstärke regeln
* ...


== Hinweise zum Betrieb mit Fhem ==
=== Definition in FHEM ===
Für all diese Aktionen und Informationen wird auf dem Androidgerät die App Automagic und ein so genannter Flow benötigt. Automagic Premium könnt Ihr Euch aus dem App Store installieren wohingegen die Flows im Ordner $FHEMINSTALL/FHEM/lib/ unter dem Dateinamen 74_AMADautomagicFlowset''$VERSION''.xml zu finden sind, wobei ''$VERSION'' die höchste sein sollte. Diese Datei müsst ihr auf das Gerät kopieren (Ort ist nicht entscheidend, nach dem Import kann die Datei theoretisch gelöscht werden).


== AutomagicApp Anweisung ==
<code>define <name> AMADCommBridge</code>  
* installiert die App
* importiert das Flowset 74_AMADautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf Eurem Androidgerät (Menü -> Verwalten -> Flows importierten). '''Wichtig: ''' Die Flows dürfen noch nicht aktiviert werden!


==Definition in FHEM==
==== Beispiel ====
<code>define <name> AMAD <IP-ADRESSE></code>


'''!!! Wichtig - Es dürfen ausschließlich nur IP Adressen verwendet werden, keine FQDN !!!'''
<code>define AMADBridge AMADCommBridge</code>


'''Beispiel:'''
Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.


<code>define WandTabletWohnzimmer AMAD 192.168.0.23</code>
Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow 'First Run Assistent' ausgeführt werden. (einfach den Homebutton drücken)
Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.


Die Anweisung im Beispiel erstellt zwei neue AMAD-Devices im Raum AMAD:
* "WandTabletWohnzimmer", wobei der Parameter <IP-ADRESSE> die IP Adresse des Android Gerätes festlegt. <em>!!!Comming Soon!!! Wer den Port ändern möchte, kann dies über das Attribut "port" tun. Ihr solltet aber wissen was Ihr tut, da dieser Port im HTTP Request Trigger der beiden Flows eingestellt ist. Demzufolge muß der Port dort auch geändert werden.</em>
* "AMADCommBridge", welches als Kommunikationsbrücke vom Androidgerät zu FHEM dient. Wenn notwendig kann der Port für die Bridge ohne Probleme im Bridge Device mittels dem Attribut "port" verändert werden.


===AMAD Communication Bridge===
=== Readings ===
Beim ersten anlegen einer AMAD Deviceinstanz wird, wie angesprochen, automatisch ein Gerät Namens AMADCommBridge im Raum AMAD angelegt. Dieses Gerät dient zur Kommunikation vom Androidgerät zu FHEM ohne das zuvor eine Anfrage von FHEM aus ging. Damit das Androidgerät die IP von FHEM kennt, '''muss''' diese sofort nach dem anlegen der Bridge über den set Befehl in ein entsprechendes Reading in die Bridge geschrieben werden. '''DAS IST SUPER WICHTIG UND FÜR DIE FUNKTION DER BRIDGE NOTWENDIG.'''
* JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird
Bitte führt hierzu folgenden Befehl aus:
* JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat
<code>set AMADCommBridge fhemServerIP <FHEM-IP></code>
* fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden
* receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.
* receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.
* receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde
* state - Status der Bridge, open, closed


Als zweites Reading könnt ihr ''expertMode'' setzen. Mit diesem Reading wird eine unmittelbare Kommunikation vom Gerät zu FHEM erreicht ohne die Einschränkung, über ein Notify gehen zu müssen und nur reine set Befehle ausführen zu können.


=== Aktivierung ===
=== Attribute ===
Nach der erfolgreichen Konfiguration des FHEM Moduls und der Automagic App können nun die Flows auf dem Gerät aktiviert werden.
* allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10
* debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings
* fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)
** trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels "und" verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an
** setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger
** thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels "und" nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)


Sofern die Geräteinstanz korrekt angelegt wurde und die fhemServerIP in der CommBridge gesetzt wurde, sollten nach spätestens 15 Sekunden bereits die ersten Readings reinkommen. Nun wird alle 15 Sekunden probiert einen Status Request erfolgreich ab zu schließen. Wenn der Status sich über einen längeren Zeitraum nicht auf "activ" ändert, sollte man im Log nach eventuellen Fehlern suchen.
= AMADDevice - Automagic Android Device =
Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.
Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.  
Für all diese Aktionen und Informationen wird auf dem Androidgerät "Automagic" und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis.  


Es gibt die Möglichkeit einer Abfrage des Status jeglicher Geräte in FHEM über das Androidgerät und Auswertung auf dem Androidgerät.


'''Beispiel:'''
=== Wie genau verwendet man nun AMADDevice? ===
Erstelle einen Flow mit einer HTTP Request Aktion mit folgendem Inhalt:
* sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde
* installieren der App "Automagic Premium" aus dem PlayStore
* installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät
* aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.


<code>
=== Ein AMADDevice Gerät von Hand anlegen. ===
URL
http://{global_fhemip}:8090


REQUEST METHODE
Define
POST


CONTENT TYP
<code>define <name> AMADDevice <IP-ADRESSE> <AMAD_ID> <REMOTESERVER></code>
Genereller Text
text/plain


DATEN
==== Beispiel ====
(hier kommen die drei Werte für ein ReadingsVal Aufruf rein, getrennt durch Leerzeichen)
TempFeuchtSensorSchlafzimmer temperature 300


(haken)Setze eigenen Header
<code>define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic</code>
FHEMDEVICE: {global_fhemdevice}
FHEMCMD: readingsval


SPEICHERE ANTWORT ...
In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.
Variable


VARIABLE
=== Readings ===
response
</code>
 
Du erhältst dann den Rückgabewert in der Response-Variablen. Diesen kannst Du dann innerhalb Deines Flows weiter verarbeiten z.B. in einem Text für eine Ansage.
 
==Readings==
* airplanemode - Status des Flugmodus
* airplanemode - Status des Flugmodus
* androidVersion - aktuell installierte Androidversion
* androidVersion - aktuell installierte Androidversion
* automagicState - Statusmeldungen von der AutomagicApp '''(Voraussetzung Android >4.3). Wer ein Android >4.3 hat und im Reading steht "wird nicht unterstützt", muß in den Androideinstellungen unter Ton und Benachrichtigungen -> Benachrichtigungszugriff ein Haken setzen für Automagic'''
* automagicState - Statusmeldungen von der Automagic App '''(Voraussetzung Android >4.3). Ist Android größer 4.3 vorhanden und im Reading steht "wird nicht unterstützt", muss in den Androideinstellungen unter Ton und Benachrichtigungen -> Benachrichtigungszugriff ein Haken für Automagic gesetzt werden'''
* bluetooth on/off - ist auf dem Gerät Bluetooth an oder aus
* batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)
* checkActiveTask - Zustand einer zuvor definierten APP. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, '''siehe Hinweis unten'''
* batterytemperature - Temperatur der Batterie
* bluetooth - on/off, Bluetooth Status an oder aus
* checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, '''siehe Hinweis unten'''
* connectedBTdevices - eine Liste der verbundenen Gerät
* connectedBTdevices - eine Liste der verbundenen Gerät
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte
* connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers
* currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers
* currentMusicApp - aktuell verwendeter Mediaplayers
* currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers
* currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers
* currentMusicIcon - Cover vom aktuell abgespielten Album '''Noch nicht fertig implementiert'''
* currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers
* currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers
* daydream - on/off Daydream gestartet oder nicht
* daydream - on/off, Daydream gestartet oder nicht
* deviceState - Status des Androidgerätes / unknown, online, offline
* deviceState - Status des Androidgerätes. unknown, online, offline.
* doNotDisturb - aktueller Status des nicht stören Modus
* doNotDisturb - aktueller Status des Nicht-Stören-Modus
* dockingState - undocked/docked Status ob das Gerät in einer Dockinstation ist oder nicht.
* dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.
* flow_SetCommands - active/inactive, gibt den Status des SetCommands Flow wieder
* flow_SetCommands - active/inactive, Status des SetCommands Flow
* flow_informations - active/inactive, gibt den Status des Informations Flow wieder
* flow_informations - active/inactive, Status des Informations Flow
* flowsetVersionAtDevice - aktuell installiertes Flowset auf dem Device
* flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device
* intentRadioName - zu letzt eingestellter Intent Radio Name
* incomingCallerName - Anrufername des eingehenden Anrufes
* incomingCallerNumber - Anrufernummer des eingehenden Anrufes
* incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht
* incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht
* intentRadioName - zuletzt gestreamter Intent Radio Name
* intentRadioState - Status des IntentRadio Players
* intentRadioState - Status des IntentRadio Players
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht das sie gerade aktiv ist
* keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist
* lastSetCommandError - letzte Fehlermeldung vom set Befehl
* lastSetCommandError - letzte Fehlermeldung vom set Befehl
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet
* lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet
Zeile 156: Zeile 146:
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet
* lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet
* nextAlarmDay - aktiver Alarmtag
* nextAlarmDay - aktiver Alarmtag
* nextAlarmState - aktueller Status des Androidinternen Weckers
* nextAlarmState - aktueller Status des "Androidinternen" Weckers
* nextAlarmTime - aktive Alarmzeit
* nextAlarmTime - aktive Alarmzeit
* powerLevel - Status der Batterie in %
* powerLevel - Status der Batterie in %
* powerPlugged - Netzteil angeschlossen? 0=NEIN, 1|2=JA
* powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt
* screen - on locked/unlocked, off locked/unlocked zeigt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt
* screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt
* screenBrightness - Bildschirmhelligkeit von 0-255
* screenBrightness - Bildschirmhelligkeit von 0-255
* screenFullscreen - Vollbildmodus (On,Off)
* screenFullscreen - on/off, Vollbildmodus (An,Aus)
* screenOrientation - (Landscape,Portrait) Bildschirmausrichtung
* screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)
* screenOrientationMode - (auto, manual) Modus für die Ausrichtung
* screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)
* state - aktueller Status des Devices
* state - aktueller Status
* userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut
* volume - Media Lautstärkewert
* volume - Media Lautstärkewert
* volumeNotification - Benachrichtigungs Lautstärke
* volumeNotification - Benachrichtigungs-Lautstärke
 
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.
 
 


==Befehle==
Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.


===Set===
=== Set ===
* activateVoiceInput - schaltet die Spracheingabe ein
* activateVoiceInput - aktiviert die Spracheingabe
* bluetooth - Schaltet Bluetooth on/off
* bluetooth - on/off, aktiviert/deaktiviert Bluetooth
* clearNotificationBar - (All,Automagic) löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste
* clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste
* currentFlowsetUpdate - fürt ein Flowset Update auf dem Device aus
* closeCall - beendet einen laufenden Anruf
* deviceState - setzt den Device Status Online/Offline. Siehe Readings
* currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch
* installFlowSource - installiert einen Flow auf dem Device, das XML File muss unter /tmp/ liegen und die Endung xml haben. '''Bsp:''' set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml
* doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen
* doNotDisturb - schaltet den nicht stören Modus, always immer Stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen
* installFlowSource - installiert einen Flow auf dem Device, <u>das XML File muss unter /tmp/ liegen und die Endung xml haben. <b>Bsp:</b> set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml</u>
* mediaPlayer - steuert den Standard Mediaplayer. play, stop, Titel zürück, Titel vor.
* mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer
* nextAlarmTime - setzt die Alarmzeit. Geht aber nur innerhalb der nächsten 24Std.
* mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer
* notifySndFile - spielt die angegebende Mediadatei auf dem Androidgerät ab. '''Die aufzurufende Mediadatei muß sich im Ordner /storage/emulated/0/Notifications/ befinden.'''
* mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer
* mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer
* mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer
* mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer
* mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer
* mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer
* nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h
* openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.
* screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.
* screenMsg - versendet eine Bildschirmnachricht
* screenMsg - versendet eine Bildschirmnachricht
* sendintent - sendet einen Intentstring Bsp: set $AMADDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion un der zweite das Extra. Es können immer zwei Extras mitgegeben werden.
* sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.
* sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263
* startDaydream - startet den Daydream
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.
* statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.
* timer - setzt einen Timer innerhalb der als Standard definierten ClockAPP auf dem Device. Es können nur Sekunden angegeben werden.
* timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.
* ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird
* ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird
* userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,'''set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive'''
* vibrate - lässt das Androidgerät vibrieren
* vibrate - lässt das Androidgerät vibrieren
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossenen Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautst&auml;rke um den Wert
* volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.
* volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.
* volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.
* volumeNotification - setzt die Benachrichtigungslautstärke.
* volumeNotification - setzt die Benachrichtigungslautstärke.


===Set abhängig von gesetzten Attributen===
==== Set abhängig von gesetzten Attributen ====
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. '''Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!'''
* changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!
* openApp - öffnet eine ausgewählte App. '''Attribut setOpenApp'''
* notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. '''Bsp:''' ''attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity'', das erste ist der Package Name und das zweite der Class Name
* openApp - öffnet eine ausgewählte App. Attribut setOpenApp
* screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn, in den Automagic Einstellungen muss "Admin Funktion" gesetzt werden sonst funktioniert "Screen off" nicht. '''Attribut setScreenOnForTimer''' ändert die Zeit wie lange das Display an bleiben soll!
* openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name
* screenFullscreen - Schaltet den Vollbildmodus on/off. '''Attribut setFullscreen'''
* setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern
* screenLock - Sperrt den Bildschirm mit Pinabfrage. '''Attribut setScreenlockPIN''' - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4 bis max 16 Zeichen sein.
* setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!
* screenOrientation - Schaltet die Bildschirmausrichtung Auto/Landscape/Portait. '''Attribut setScreenOrientation'''
* screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen
* setAPSSID - setzt die Acces Point SSID um WLAN Sleeps zu verhindern'''
* screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe '''(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0'''
* screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation
* setTtsMsgLang - setzt die Sprache der Sprachausgabe, (de-Deutsch - en Englisch) default ist de'''
* system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss "Root Funktion" gesetzt werden
* system - setzt Systembefehle ab (nur bei gerootetet Geräen). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) '''Attribut root''', in den Automagic Einstellungen muss "Root Funktion" gesetzt werden
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/
* setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei '''(default ist /storage/emulated/0/Notifications/'''
* setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0
* setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)
* setVolUpDownStep - setzt den Step für volumeUp und volumeDown
* setVolMax - setzt die maximale Volume Größe für den Slider
* setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider
* setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider
 
'''Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden.


Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden.
'''Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr <DEVICE> BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht


Um zwischen Bluetoothgeräten wechseln zu können, muß das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. ''attr <DEVICE> BTdeviceName1|MAC,BTDeviceName2|MAC'' Es muss zwingend darauf geachtet werden das beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Achtet bei der MAC darauf das Ihr wirklich nach jeder zweiten Zahl auch einen : drin habt '''Beispiel:''' ''attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76''
** '''Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76


==STATE==
=== state ===
* initialized - Ist der Status kurz nach einem define..
* initialized - Ist der Status kurz nach einem define.
* active - die Geräteinstanz ist im aktiven Status.
* active - die Geräteinstanz ist im aktiven Status.
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert
* disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert


==deviceState==
==Flow-Beispiele für AutoMagic==
* online - Das Gerät ist online und kann set Befehle entgegennehmen.
Siehe Kategorie [https://wiki.fhem.de/wiki/Kategorie:AutoMagic AutoMagic]
* offline - Ein Gerät wird in den folgenden 3 Szenarien in den Status offline gesetzt:
** Das Gerät wird mittels shutdown über FHEM runtergefahren.
** Der Airplainmod (Flugmodus) wird über FHEM aktiviert.  
** Es wurde mehr als 5 mal ein statusRequest erfolglos und mehr als 3 mal ein set Command erfolglos abgeschickt.
Es bleibt also dem User überlassen das Gerät nach erneuter Verfügbarkeit wieder in den Status online zu setzen. Das kann z.B. über das Presence Modul erzeugt werden (set DEVICE deviceState online)


==Anwendungsbeispiele==
==Anwendungsbeispiele in FHEM==
=== Lademanagement ===
=== Lademanagement ===
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.
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.


Hier mal ein einfaches DOIF Beispiel für ein Lademanagment
Hier mal ein einfaches DOIF Beispiel für ein Lademanagment
Zeile 238: Zeile 240:


=== Wecker ===
=== Wecker ===
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.
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.


=== Mediacenter ===
=== Mediacenter ===
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.
Mein 10" Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.


=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===
=== Sprachbefehl - Abfragen von Zuständen diverser Sensoren ===
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.
Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.


Der Teil im Feld Daten ist ein klassisches RadingsVal, halt nur ohne Komma und ohne Anführungszeichen
Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen


WIRD GERADE ÜBERARBEITET
WIRD GERADE ÜBERARBEITET.


=== Mit FHEM ein Flow ausführen ===
Es gibt den set Befehl userFlowRun. Als Argument übergibt man einen Flownamen. '''Achtung dieser Flowname darf keine Sonder oder Leerzeichen enthalten!!!'''


=== Schaltbefehle vom Androidgerät an FHEM senden ===
==== Liste aller Variablen für die AMADCommandBridge ====
Hierfür richte bitte einen eigen Flow ein. Wie das genau geht, verrät Dir die Hilfe.
fhemcmd Variable
Um einen Schaltbefehl für FHEM zu erstellen, folgt nach dem Trigger eine Aktion als Script (Aktion Type: Script). Hier trägst Du folgendes ein
* Wert "set" - Variable für den Schaltbefehl 'setcmd'
* Wert "setreading" - Variable für die Readingswerte 'fhemdata'
* "readingsval" - Variable für die Abfragewerte 'readingsvalcmd'
* "fhemfunc" - Variable für den Funktionsnamen 'fhemsub'


setcmd = "LichtWohnzimmerLampeRechts on"
<u>Status eines Device abfragen</u>


fhemcmd = "set"
<code>
readingsvalcmd = "DEVICE READING DEFAULT";


In der ersten Zeile wird also der Schaltbefehl in der Variablem setcmd eingetragen und in der zweiten Zeile der FHEM Befehl in der Variablen fhemcmd.
fhemcmd = "readingsval"
</code>


Danach müsst Ihr nur noch in einer weiteren Aktion den Flow "Send Data to AMADCommBridge" ausführen (Aktion Type: Flows ausführen). Die Aktion sollte bereits in Eurer Liste Vorhanden sein.
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt '''respreadingsval'''


[[Datei:Screenshot_20160717-134948.png|200px]]
<u>Aufruf einer 99_myUtils Subroutine</u>
[[Datei:Screenshot 17.07.2016 1-50-27.png|200px]]


Nun sollte Lampe1 angeschalten werden wenn der Flow ausgeführt wird.
<code>
fhemsub = "mySub()"; oder natürlich auch "mySub('was_auch_immer')"


fhemcmd = "fhemfunc"
</code>
Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt '''respfhemfunc'''


== Bekannte Meldungen/Hinweise/Probleme ==
== Bekannte Meldungen/Hinweise/Probleme ==
<code>PERL WARNING: Use of uninitialized value in hash element at /opt/fhem/FHEM/74_AMAD.pm line 14X</code>
Ist ab Version 2.2.2 gefixt. [https://forum.fhem.de/index.php/topic,54433.0.html Dickes Danke an Andy(gandy)]
Wenn auf dem Android-Gerät die Fehlermeldung 'Accessibility service not running' von Automagic kommt, oder im FHEM das reading state  'Flow Informations mit Fehler beendet' steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --> Bedienungshilfen --> Automagic Premium. Hier muss der Schalter auf 'an' stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.


Wenn auf dem Android-Gerät die Fehlermeldung 'Accessibility service not running' von Automagic kommt oder im FHEM das reading state  'Flow Informations mit Fehler beendet' steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --> Bedienungshilfen --> Automagic Premium. Hier muss der Schalter auf 'an' stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.


Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.
Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden.
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter  
Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter  
* Einstellungen --> Akku --> oben auf die drei Punkte - Akku Leistungsoptimierung --> alle Apps und dann Automagic auswählen und "Nicht optimieren"
* Einstellungen --> Akku --> oben auf die drei Punkte - Akku Leistungsoptimierung --> alle Apps und dann Automagic auswählen und "Nicht optimieren"
ausgewählt werden. Alles andere macht das Modul selbst.
ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.
 
[[Kategorie:SMS]]

Aktuelle Version vom 6. Juni 2020, 11:45 Uhr

AMAD
Zweck / Funktion
Steuern von Androidgeräten und Anzeige von bestimmten Informationen dieser Geräte
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Support (Forum) Sonstige Systeme
Modulname 73_AMADCommBridge.pm, 74_AMADDevice.pm
Ersteller CoolTux
(Forum / Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


AMAD 4.2 [AMADNG]

73_AMADCommBridge / 74_AMADDevice

Vorwort

Warum AMADNG

Nach fast 6 Monaten Entwicklungszeit wurde die neuste AMAD Version am 24.07.2017 offiziell frei gegeben. Diesmal lagen mir mehrere Dinge am Herzen. In erster Linie wollte ich eine softwareseitige Trennung der AMADCommBridge vom eigentlichen Android Device. Daher ist die neue Version ein zweistufiges Modul geworden. Im Laufe der Entwicklung kamen auch andere Anforderungen hinzu, die ich dann fähig war umzusetzen. Eine dieser Anforderungen war eine einfachere und besser funktionierende Installation. Herausgekommen ist ein Android Installationsassistant. Mit ihm wird auf einfache Art und Weise direkt per Sprachführung und Eingabedialogen Automagic für AMAD konfiguriert und das Device in FHEM automatisch erstellt.

Es ist darauf zu achten, das Autocreate aktiv ist, da sonst kein Device mit Hilfe des Assistenten angelegt werden kann!

Vorstellung

Dieses 2-stufige Modul liefert, in Verbindung mit der Android App Automagic, diverse Informationen von Android Geräten. Die AndroidAPP Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem benutzungsfreundlicher.

Features / Funktionen

Im Auslieferungszustand werden folgende Zustände dargestellt:

  • installierte Android Version
  • Zustand von Automagic auf dem Gerät
  • Spracheingabe
  • Bluetooth An/Aus
  • Zustand einer definierten App (läuft aktiv im Vordergrund oder nicht?)
  • verbundene Bluetoothgeräte, inklusive deren MAC Adresse
  • aktuell abgespieltes Musikalbum des verwendeten Mediaplayers
  • aktuell abgespielter Musikinterpret des verwendeten Mediaplayers
  • aktuell abgespielter Musiktitel des verwendeten Mediaplayers
  • Status des Androidgerätes - Online/Offline
  • nächster Alarmtag
  • nächste Alarmzeit
  • Batteriestatus in %
  • Ladestatus - Netztei angeschlossen / nicht angeschlossen
  • Bildschirmstatus An/Aus
  • Bildschirmhelligkeit
  • Vollbildmodus An/Aus
  • Bildschirmausrichtung Auto/Landscape/Portrait
  • Standardlautstärke
  • Media Lautstärke
  • ...

Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt, in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.

AMADCommBridge - Kommunikationsbrücke für alle AMAD Geräte

Dieses Modul ist das Ausgangsmodul zur erfolgreichen Integration von Androidgeräten in FHEM. Es stellt ferner eine Verbindungsebene zwischen AMAD unterstützten Geräten und FHEM zur Verfügung. Alle Kommunikation zwischen AMAD Android und FHEM läuft über diese Schnittstelle. Daher erfolgt die Ersteinrichtung eines AMAD Devices auch genau über diese Modulinstanz.

Damit erfolgreich ein Androidgerät in FHEM eingerichtet werden kann, muss im ersten Schritt ein AMADCommBridge Device angelegt werden.

Definition in FHEM

define <name> AMADCommBridge

Beispiel

define AMADBridge AMADCommBridge

Diese Anweisung erstellt ein neues AMADCommBridge Device namens AMADBridge.

Im folgenden muß lediglich das Flowset auf dem Android Gerät installiert werden und der Flow 'First Run Assistent' ausgeführt werden. (einfach den Homebutton drücken) Der Assistent geleitet dann durch die Einrichtung des AMAD Gerätes und sorgt dafür, dass am Ende des Installationsprozess das Androidgerät als AMAD Device in FHEM angelegt wird.


Readings

  • JSON_ERROR - JSON Fehlermeldung, die von Perl gemeldet wird
  • JSON_ERROR_STRING - der String, der die JSON Fehlermeldung verursacht hat
  • fhemServerIP - die Ip-Adresse des FHEM Servers; wird vom Modul auf Basis des JSON Strings vom Installationsassistenten gesetzt. Kann aber auch mittels set Befehles vom User gesetzt werden
  • receiveFhemCommand - ist das Attribut fhemControlMode auf trigger gestellt, wird das Reading gesetzt sobald ein FHEM Befehl übersendet wird. Hierauf kann dann ein Notify triggern. Wird anstelle von trigger setControl als Wert für fhemControlMode eingestellt, wird das Reading nicht gesetzt sondern der set Befehl sofort ausgeführt.
  • receiveVoiceCommand - wird die Sprachsteuerung von AMAD aktiviert (set DEVICE activateVoiceInput) so wird der letzte erkannten Sprachbefehle in dieses Reading geschrieben.
  • receiveVoiceDevice - Name des Devices von wo aus der letzte erkannte Sprachbefehl gesendet wurde
  • state - Status der Bridge, open, closed


Attribute

  • allowFrom - Regexp der erlaubten IP-Adressen oder Hostnamen. Wenn dieses Attribut gesetzt wurde, werden ausschließlich Verbindungen von diesen Adressen akzeptiert. Achtung: falls allowfrom nicht gesetzt ist, und keine gütige allowed Instanz definiert ist, und die Gegenstelle eine nicht lokale Adresse hat, dann wird die Verbindung abgewiesen. Folgende Adressen werden als local betrachtet: IPV4: 127/8, 10/8, 192.168/16, 172.16/10, 169.254/16, IPV6: ::1, fe80/10
  • debugJSON - wenn auf 1 gesetzt, werden JSON Fehlermeldungen in Readings geschrieben. Siehe hierzu JSON_ERROR* unter Readings
  • fhemControlMode - steuert die zulässige Art der Steuerung von FHEM Devices. Es können über die Bridge auf 2 Arten FHEM-Devices angesteuert werden: per direktem FHEM-Befehl aus einem Flow heraus oder als Sprachbefehl mittels Sprachsteuerung (set DEVICE activateVoiceInput)
    • trigger - ist der Wert trigger gesetzt, werden alle an die Bridge gesendeten FHEM set Befehle in das Reading receiveFhemCommand geschrieben und können so mittels notify ausgeführt werden. Sprachsteuerung ist möglich, es werden Readings receiveVoice* gesetzt. Auf dem Androidgerät können bei Sprachsteuerung mehrere Sprachbefehle mittels "und" verknüpft/aneinander gereiht werden. Bsp: schalte die Lichtszene Abends an und schalte den Fernseher an
    • setControl - alle set Befehle, die mittels eines Flows über die Bridge gesendet werden, werden automatisch ausgeführt. Das Triggern eines Readings ist nicht nötig. Die Steuerung mittels Sprache verhält sich wie beim Wert trigger
    • thirdPartControl - verhält sich wie trigger, bei der Sprachsteuerung ist jedoch ein Anreihen von Sprachbefehlen mittels "und" nicht möglich. Dient der Sprachsteuerung über Module anderer Modulautoren ((z.B. 39_TEERKO.pm)

AMADDevice - Automagic Android Device

Dieses Modul liefert, in Verbindung mit der Android APP Automagic, diverse Informationen von Android Geräten. Die Android App Automagic (die nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher. Mit etwas Einarbeitung können jegliche Informationen, die Automagic bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows, der seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern. Für all diese Aktionen und Informationen wird auf dem Androidgerät "Automagic" und ein so genannter Flow benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset bekommt man aus dem FHEM Verzeichnis.


Wie genau verwendet man nun AMADDevice?

  • sicherstellen, dass als allererstes die AMADCommBridge in FHEM definiert wurde
  • installieren der App "Automagic Premium" aus dem PlayStore
  • installieren des Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät
  • aktivieren des Installationsassistanten Flow in Automagic. Wenn man nun Automagic in den Hintergrund schickt, z.B. Hometaste drücken, startet der Assistant und legt automatisch ein Device für das Androidgerät an.

Ein AMADDevice Gerät von Hand anlegen.

Define

define <name> AMADDevice <IP-ADRESSE> <AMAD_ID> <REMOTESERVER>

Beispiel

define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 Automagic

In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic eingetragen sein.

Readings

  • airplanemode - Status des Flugmodus
  • androidVersion - aktuell installierte Androidversion
  • automagicState - Statusmeldungen von der Automagic App (Voraussetzung Android >4.3). Ist Android größer 4.3 vorhanden und im Reading steht "wird nicht unterstützt", muss in den Androideinstellungen unter Ton und Benachrichtigungen -> Benachrichtigungszugriff ein Haken für Automagic gesetzt werden
  • batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt)
  • batterytemperature - Temperatur der Batterie
  • bluetooth - on/off, Bluetooth Status an oder aus
  • checkActiveTask - Zustand einer zuvor definierten App. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, siehe Hinweis unten
  • connectedBTdevices - eine Liste der verbundenen Gerät
  • connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte
  • currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers
  • currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music)
  • currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers
  • currentMusicIcon - Cover vom aktuell abgespielten Album Noch nicht fertig implementiert
  • currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers
  • currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers
  • daydream - on/off, Daydream gestartet oder nicht
  • deviceState - Status des Androidgerätes. unknown, online, offline.
  • doNotDisturb - aktueller Status des Nicht-Stören-Modus
  • dockingState - undocked/docked Status, ob sich das Gerät in einer Dockingstation befindet.
  • flow_SetCommands - active/inactive, Status des SetCommands Flow
  • flow_informations - active/inactive, Status des Informations Flow
  • flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device
  • incomingCallerName - Anrufername des eingehenden Anrufes
  • incomingCallerNumber - Anrufernummer des eingehenden Anrufes
  • incommingWhatsAppMessageFrom - letzte WhatsApp Nachricht
  • incommingWhatsTelegramMessageFrom - letzte Telegram Nachricht
  • intentRadioName - zuletzt gestreamter Intent Radio Name
  • intentRadioState - Status des IntentRadio Players
  • keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht, dass sie gerade aktiv ist
  • lastSetCommandError - letzte Fehlermeldung vom set Befehl
  • lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet
  • lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl
  • lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet
  • nextAlarmDay - aktiver Alarmtag
  • nextAlarmState - aktueller Status des "Androidinternen" Weckers
  • nextAlarmTime - aktive Alarmzeit
  • powerLevel - Status der Batterie in %
  • powerPlugged - Netzteil angeschlossen? 1=AC Adapter, 2=USB, 4=Kabellos 0=nicht eingesteckt
  • screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt
  • screenBrightness - Bildschirmhelligkeit von 0-255
  • screenFullscreen - on/off, Vollbildmodus (An,Aus)
  • screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)
  • screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)
  • state - aktueller Status
  • userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut
  • volume - Media Lautstärkewert
  • volumeNotification - Benachrichtigungs-Lautstärke

Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut checkActiveTask angegeben werden. Beispiel: attr Nexus10Wohnzimmer checkActiveTask com.android.chrome für den Chrome Browser.

Set

  • activateVoiceInput - aktiviert die Spracheingabe
  • bluetooth - on/off, aktiviert/deaktiviert Bluetooth
  • clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic Meldungen in der Statusleiste
  • closeCall - beendet einen laufenden Anruf
  • currentFlowsetUpdate - führt ein Flowsetupdate auf dem Device durch
  • doNotDisturb - schaltet den Nicht-Stören-Modus: always immer stören, never niemals stören, alarmClockOnly nur Wecker darf stören, onlyImportant nur wichtige Störungen
  • installFlowSource - installiert einen Flow auf dem Device, das XML File muss unter /tmp/ liegen und die Endung xml haben. Bsp: set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml
  • mediaAmazonMusic - play, stop, next, back ,steuert den Amazon Musik Mediaplayer
  • mediaGoogleMusic - play, stop, next, back ,steuert den Google Play Musik Mediaplayer
  • mediaSpotifyMusic - play, stop, next, back ,steuert den Spotify Mediaplayer
  • mediaTuneinRadio - play, stop, next, back ,steuert den TuneIn Radio Mediaplayer
  • mediaAldiMusic - play, stop, next, back ,steuert den Aldi Musik Mediaplayer
  • mediaAudible - play, stop, next, back ,steuert den Audible Mediaplayer
  • mediaYouTube - play, stop, next, back ,steuert den YouTube Mediaplayer
  • mediaVlcPlayer - play, stop, next, back ,steuert den VLC Mediaplayer
  • nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24 h
  • openCall - ruft eine Nummer an und legt optional nach X Sekunden auf / set DEVICE openCall 01736458 10 / ruft die Nummer an und beendet den Anruf nach 10s
  • screen - on/off/lock/unlock schaltet den Bildschirm ein/aus oder sperrt/entsperrt ihn
  • screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.
  • screenMsg - versendet eine Bildschirmnachricht
  • sendintent - sendet einen Intentstring Bsp: set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.
  • sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263
  • startDaydream - startet den Daydream
  • statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.
  • timer - setzt einen Timer innerhalb der als Standard definierten Clock-App auf dem Device. Es können nur Sekunden angegeben werden.
  • ttsMsg - versendet eine Nachricht, die als Sprachnachricht ausgegeben wird
  • userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive
  • vibrate - lässt das Androidgerät vibrieren
  • volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.
  • volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.
  • volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.
  • volumeNotification - setzt die Benachrichtigungslautstärke.

Set abhängig von gesetzten Attributen

  • changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!
  • notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. Die aufzurufende Mediadatei sollte sich im Ordner /storage/emulated/0/Notifications/ befinden. Ist dies nicht der Fall kann man über das Attribut setNotifySndFilePath einen Pfad vorgeben.
  • openApp - öffnet eine ausgewählte App. Attribut setOpenApp
  • openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das Attribut setOpenUrlBrowser ausgewählt wurde. Bsp: attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name
  • setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern
  • setScreenOnForTimer ändert die Zeitdauer, die das Display an bleiben soll!
  • screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. Attribut setFullscreen
  • screenLock - Sperrt den Bildschirm mit Pinabfrage. Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.
  • screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). Attribut setScreenOrientation
  • system - setzt Systembefehle ab (nur bei gerootetet Geräten). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) Attribut root, in den Automagic Einstellungen muss "Root Funktion" gesetzt werden
  • setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/
  • setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Werte zwischen 0.5 bis 4.0 in 0.5er Schritten) default ist 1.0
  • setTtsMsgSpeed - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)
  • setVolUpDownStep - setzt den Step für volumeUp und volumeDown
  • setVolMax - setzt die maximale Volume Größe für den Slider
  • setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider
  • setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider

Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden.

Um zwischen Bluetoothgeräten wechseln zu können, muss das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. attr <DEVICE> BTdeviceName1|MAC,BTDeviceName2|MAC Es muss zwingend darauf geachtet werden, dass beim BTdeviceName kein Leerzeichen vorhanden ist. Am besten zusammen oder mit Unterstrich. Bei der MAC ist darauf zu achten, dass wirklich nach jeder zweiten Zahl ein : steht

    • Beispiel: attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76

state

  • initialized - Ist der Status kurz nach einem define.
  • active - die Geräteinstanz ist im aktiven Status.
  • disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert

Flow-Beispiele für AutoMagic

Siehe Kategorie AutoMagic

Anwendungsbeispiele in FHEM

Lademanagement

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.

Hier mal ein einfaches DOIF Beispiel für ein Lademanagment

... DOIF ([Nexus5Handy:powerLevel] < 30) (set LadenetzteilNexus5Handy:FILTER=STATE=off on) DOELSEIF ([Nexus5Handy:powerLevel] > 90) (set LadenetzteilNexus5Handy:FILTER=STATE=on off) DOELSE

Wecker

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.

Mediacenter

Mein 10" Tablet im Wohnzimmer ist Mediaplayer für das Wohnzimmer mit Bluetoothlautsprechern. Die Lautstärke wird automatisch heruntergesetzt, wenn die Fritzbox einen Anruf auf das Wohnzimmer Handgerät signalisiert.

Sprachbefehl - Abfragen von Zuständen diverser Sensoren

Wenn ich die Spracheingabe aktiviere und nach der Temperatur im Wohnzimmer frage, bekomme ich diese angesagt.

Der Teil im Feld Daten ist ein klassisches ReadingsVal, halt nur ohne Komma und ohne Anführungszeichen

WIRD GERADE ÜBERARBEITET.

Mit FHEM ein Flow ausführen

Es gibt den set Befehl userFlowRun. Als Argument übergibt man einen Flownamen. Achtung dieser Flowname darf keine Sonder oder Leerzeichen enthalten!!!

Liste aller Variablen für die AMADCommandBridge

fhemcmd Variable

  • Wert "set" - Variable für den Schaltbefehl 'setcmd'
  • Wert "setreading" - Variable für die Readingswerte 'fhemdata'
  • "readingsval" - Variable für die Abfragewerte 'readingsvalcmd'
  • "fhemfunc" - Variable für den Funktionsnamen 'fhemsub'

Status eines Device abfragen

readingsvalcmd = "DEVICE READING DEFAULT";

fhemcmd = "readingsval"

Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt respreadingsval

Aufruf einer 99_myUtils Subroutine

fhemsub = "mySub()"; oder natürlich auch "mySub('was_auch_immer')"

fhemcmd = "fhemfunc"

Die Rückgabevariable, die dann weiter verarbeitet werden kann, heißt respfhemfunc

Bekannte Meldungen/Hinweise/Probleme

Wenn auf dem Android-Gerät die Fehlermeldung 'Accessibility service not running' von Automagic kommt oder im FHEM das reading state 'Flow Informations mit Fehler beendet' steht, dann muss der Accessibility Service auf dem Android-Device aktiviert werden: Einstellungen --> Bedienungshilfen --> Automagic Premium. Hier muss der Schalter auf 'an' stehen. Sollte dies der Fall sein, hilft u.U. ein kurzes Aus- und wieder Einschalten.

Gerät wird oft als offline angezeigt und es können keine set Befehle abgesetzt werden. Mit der AMAD Version 2.2 hielt eine neue Behandlung des deviceState Readings Einzug. Das Reading stellt nun den tatsächlichen Status des Gerätes gegenüber FHEM da. Bei vielen Android 6 Geräten kommt es aber auf Grund vom DeepSleep Modus zum Wegfall der WLAN Verbindung. Hier hilft die neue KeepAlive Funktion in AMAD. Dafür muß lediglich unter

  • Einstellungen --> Akku --> oben auf die drei Punkte - Akku Leistungsoptimierung --> alle Apps und dann Automagic auswählen und "Nicht optimieren"

ausgewählt werden und in FHEM für das Device das Attribut setAPSSID gesetzt werden. Alles andere macht das Modul selbst.