| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388 |
- ###############################################################################
- #
- # Developed with Kate
- #
- # (c) 2015-2018 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
- # All rights reserved
- #
- # Special thanks goes to comitters:
- # - Jens Wohlgemuth Thanks for Commandref
- # - Schlimbo Tasker integration and Tasker Commandref
- #
- #
- # This script is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # any later version.
- #
- # The GNU General Public License can be found at
- # http://www.gnu.org/copyleft/gpl.html.
- # A copy is found in the textfile GPL.txt and important notices to the license
- # from the author is found in LICENSE.txt distributed with these scripts.
- #
- # This script is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- #
- # $Id: 74_AMADDevice.pm 16283 2018-02-27 10:34:15Z CoolTux $
- #
- ###############################################################################
- ##
- ##
- ## Das JSON Modul immer in einem eval aufrufen
- # $data = eval{decode_json($data)};
- #
- # if($@){
- # Log3($SELF, 2, "$TYPE ($SELF) - error while request: $@");
- #
- # readingsSingleUpdate($hash, "state", "error", 1);
- #
- # return;
- # }
- #
- #
- package main;
- my $missingModul = "";
- use strict;
- use warnings;
- eval "use Encode qw(encode encode_utf8);1" or $missingModul .= "Encode ";
- eval "use JSON;1" or $missingModul .= "JSON ";
- my $modulversion = "4.2.0";
- my $flowsetversion = "4.2.0";
- # Declare functions
- sub AMADDevice_Attr(@);
- sub AMADDevice_Notify($$);
- sub AMADDevice_checkDeviceState($);
- sub AMADDevice_decrypt($);
- sub AMADDevice_Define($$);
- sub AMADDevice_encrypt($);
- sub AMADDevice_GetUpdate($);
- sub AMADDevice_Initialize($);
- sub AMADDevice_WriteReadings($$);
- sub AMADDevice_Set($$@);
- sub AMADDevice_Undef($$);
- sub AMADDevice_Parse($$);
- sub AMADDevice_statusRequest($);
- sub AMADDevice_CreateVolumeValue($$@);
- sub AMADDevice_CreateTtsMsgValue($@);
- sub AMADDevice_CreateScreenValue($$);
- sub AMADDevice_CreateChangeBtDeviceValue($$);
- sub AMADDevice_Initialize($) {
- my ($hash) = @_;
-
- $hash->{Match} = '{"amad": \{"amad_id":.+}}';
- $hash->{SetFn} = "AMADDevice_Set";
- $hash->{DefFn} = "AMADDevice_Define";
- $hash->{UndefFn} = "AMADDevice_Undef";
- $hash->{AttrFn} = "AMADDevice_Attr";
- $hash->{NotifyFn} = "AMADDevice_Notify";
- $hash->{ParseFn} = "AMADDevice_Parse";
-
- $hash->{AttrList} = "setOpenApp ".
- "checkActiveTask ".
- "setFullscreen:0,1 ".
- "setScreenOrientation:0,1 ".
- "setScreenBrightness:noArg ".
- "setBluetoothDevice ".
- "setScreenlockPIN ".
- "setScreenOnForTimer ".
- "setOpenUrlBrowser ".
- "setNotifySndFilePath ".
- "setTtsMsgSpeed ".
- "setTtsMsgLang:de,en ".
- "setTtsMsgVol ".
- "setUserFlowState ".
- "setVolUpDownStep:1,2,4,5 ".
- "setVolMax ".
- "setVolFactor:2,3,4,5 ".
- "setNotifyVolMax ".
- "setRingSoundVolMax ".
- "setAPSSID ".
- "root:0,1 ".
- "disable:1 ".
- "IODev ".
- "remoteServer:Automagic,Autoremote,TNES,other ".
- "setTakePictureResolution:800x600,1024x768,1280x720,1600x1200,1920x1080 ".
- "setTakePictureCamera:Back,Front ".
- $readingFnAttributes;
-
- foreach my $d(sort keys %{$modules{AMADDevice}{defptr}}) {
-
- my $hash = $modules{AMADDevice}{defptr}{$d};
- $hash->{VERSIONMODUL} = $modulversion;
- $hash->{VERSIONFLOWSET} = $flowsetversion;
- }
- }
- sub AMADDevice_Define($$) {
- my ( $hash, $def ) = @_;
- my @a = split( "[ \t]+", $def );
-
- return "too few parameters: define <name> AMADDevice <HOST-IP> <amad_id> <remoteServer>" if( @a != 5 );
- return "Cannot define a AMAD device. Perl modul $missingModul is missing." if ( $missingModul );
- my $name = $a[0];
- my $host = $a[2];
- my $amad_id = $a[3];
- my $remoteServer = $a[4];
-
- $hash->{HOST} = $host;
- $hash->{AMAD_ID} = $amad_id;
- $hash->{VERSIONMODUL} = $modulversion;
- $hash->{VERSIONFLOWSET} = $flowsetversion;
- $hash->{NOTIFYDEV} = "global,$name";
-
- $hash->{PORT} = 8090 if($remoteServer eq 'Automagic');
- $hash->{PORT} = 1817 if($remoteServer eq 'Autoremote');
- $hash->{PORT} = 8765 if($remoteServer eq 'TNES');
- $hash->{PORT} = 1111 if($remoteServer eq 'other'); # Dummy Port for other
-
- $hash->{helper}{infoErrorCounter} = 0;
- $hash->{helper}{setCmdErrorCounter} = 0;
- $hash->{helper}{deviceStateErrorCounter} = 0;
- CommandAttr(undef,"$name IODev $modules{AMADCommBridge}{defptr}{BRIDGE}->{NAME}") if(AttrVal($name,'IODev','none') eq 'none');
- my $iodev = AttrVal($name,'IODev','none');
-
- AssignIoPort($hash,$iodev) if( !$hash->{IODev} );
-
- if(defined($hash->{IODev}->{NAME})) {
- Log3 $name, 3, "AMADDevice ($name) - I/O device is " . $hash->{IODev}->{NAME};
- } else {
- Log3 $name, 1, "AMADDevice ($name) - no I/O device";
- }
- $iodev = $hash->{IODev}->{NAME};
-
- my $d = $modules{AMADDevice}{defptr}{$amad_id};
-
- return "AMADDevice device $name on AMADCommBridge $iodev already defined."
- if( defined($d) && $d->{IODev} == $hash->{IODev} && $d->{NAME} ne $name );
-
- CommandAttr(undef,"$name room AMAD") if(AttrVal($name,'room','none') eq 'none');
- CommandAttr(undef,"$name remoteServer $remoteServer") if(AttrVal($name,'remoteServer','none') eq 'none');
-
- readingsBeginUpdate($hash);
- readingsBulkUpdateIfChanged( $hash, "state", "initialized",1);
- readingsBulkUpdateIfChanged( $hash, "deviceState", "unknown",1);
- readingsEndUpdate($hash,1);
-
-
- Log3 $name, 3, "AMADDevice ($name) - defined with AMAD_ID: $amad_id on port $hash->{PORT}";
-
- if( $init_done ) {
-
- InternalTimer( gettimeofday()+3, "AMADDevice_GetUpdate", $hash, 0 ) if( ($hash->{HOST}) );
-
- } else {
-
- InternalTimer( gettimeofday()+15, "AMADDevice_GetUpdate", $hash, 0 ) if( ($hash->{HOST}) );
- }
- $modules{AMADDevice}{defptr}{$amad_id} = $hash;
- return undef;
- }
- sub AMADDevice_Undef($$) {
- my ( $hash, $arg ) = @_;
- my $name = $hash->{NAME};
- my $amad_id = $hash->{AMAD_ID};
-
-
- RemoveInternalTimer( $hash );
- delete $modules{AMADDevice}{defptr}{$amad_id};
- return undef;
- }
- sub AMADDevice_Attr(@) {
- my ( $cmd, $name, $attrName, $attrVal ) = @_;
- my $hash = $defs{$name};
-
- my $orig = $attrVal;
- if( $attrName eq "remoteServer" ) {
- if( $cmd eq "set" ) {
- if( $attrVal eq "Automagic" ) {
- $hash->{PORT} = 8090;
- Log3 $name, 3, "AMADDevice ($name) - set remoteServer to Automagic";
-
- } elsif( $attrVal eq "Autoremote" ) {
- $hash->{PORT} = 1817;
- Log3 $name, 3, "AMADDevice ($name) - set remoteServer to Autoremote";
-
- } elsif( $attrVal eq "TNES" ) {
- $hash->{PORT} = 8765;
- Log3 $name, 3, "AMADDevice ($name) - set remoteServer to TNES";
-
- } elsif( $attrVal eq "other" ) {
- $hash->{PORT} = 1111;
- Log3 $name, 3, "AMADDevice ($name) - set remoteServer to other";
- }
-
- $hash->{DEF} = "$hash->{HOST} $hash->{AMAD_ID} $attrVal";
- }
- }
-
- elsif( $attrName eq "disable" ) {
- if( $cmd eq "set" ) {
- if( $attrVal eq "0" ) {
-
- RemoveInternalTimer( $hash );
- InternalTimer( gettimeofday()+2, "AMADDevice_GetUpdate", $hash, 0 ) if( ReadingsVal( $hash->{NAME}, "state", 0 ) eq "disabled" );
- readingsSingleUpdate ( $hash, "state", "active", 1 );
- Log3 $name, 3, "AMADDevice ($name) - enabled";
- } else {
-
- readingsSingleUpdate ( $hash, "state", "disabled", 1 );
- RemoveInternalTimer( $hash );
- Log3 $name, 3, "AMADDevice ($name) - disabled";
- }
-
- } else {
-
- RemoveInternalTimer( $hash );
- InternalTimer( gettimeofday()+2, "AMADDevice_GetUpdate", $hash, 0 ) if( ReadingsVal( $hash->{NAME}, "state", 0 ) eq "disabled" );
- readingsSingleUpdate ( $hash, "state", "active", 1 );
- Log3 $name, 3, "AMADDevice ($name) - enabled";
- }
- }
-
- elsif( $attrName eq "checkActiveTask" ) {
- if( $cmd eq "del" ) {
- CommandDeleteReading( undef, "$name checkActiveTask" );
- }
-
- Log3 $name, 3, "AMADDevice ($name) - $cmd $attrName $attrVal and run statusRequest";
- RemoveInternalTimer( $hash );
- InternalTimer( gettimeofday(), "AMADDevice_GetUpdate", $hash, 0 )
- }
-
- elsif( $attrName eq "setScreenlockPIN" ) {
- if( $cmd eq "set" && $attrVal ) {
-
- $attrVal = AMADDevice_encrypt($attrVal);
-
- } else {
-
- CommandDeleteReading( undef, "$name screenLock" );
- }
- }
-
- elsif( $attrName eq "setUserFlowState" ) {
- if( $cmd eq "del" ) {
-
- CommandDeleteReading( undef, "$name userFlowState" );
- }
-
- Log3 $name, 3, "AMADDevice ($name) - $cmd $attrName $attrVal and run statusRequest";
- RemoveInternalTimer( $hash );
- InternalTimer( gettimeofday(), "AMADDevice_GetUpdate", $hash, 0 )
- }
-
-
-
- if( $cmd eq "set" ) {
- if( $attrVal && $orig ne $attrVal ) {
-
- $attr{$name}{$attrName} = $attrVal;
- return $attrName ." set to ". $attrVal if( $init_done );
- }
- }
-
- return undef;
- }
- sub AMADDevice_Notify($$) {
- my ($hash,$dev) = @_;
- my $name = $hash->{NAME};
- return if (IsDisabled($name));
-
- my $devname = $dev->{NAME};
- my $devtype = $dev->{TYPE};
- my $events = deviceEvents($dev,1);
- return if (!$events);
- AMADDevice_statusRequest($hash) if( (grep /^DELETEATTR.$name.setAPSSID$/,@{$events}
- or grep /^ATTR.$name.setAPSSID.*/,@{$events} )
- and $init_done and $devname eq 'global' );
- return;
- }
- sub AMADDevice_GetUpdate($) {
- my ( $hash ) = @_;
- my $name = $hash->{NAME};
- my $bname = $hash->{IODev}->{NAME};
-
- if( $init_done && ( ReadingsVal( $name, "deviceState", "unknown" ) eq "unknown" or ReadingsVal( $name, "deviceState", "online" ) eq "online" ) && AttrVal( $name, "disable", 0 ) ne "1" && ReadingsVal( $bname, "fhemServerIP", "not set" ) ne "not set" ) {
- AMADDevice_statusRequest($hash);
- AMADDevice_checkDeviceState( $hash );
-
- } else {
- Log3 $name, 4, "AMADDevice ($name) - GetUpdate, FHEM or Device not ready yet";
- Log3 $name, 3, "AMADDevice ($bname) - GetUpdate, Please set $bname fhemServerIP <IP-FHEM> NOW!" if( ReadingsVal( $bname, "fhemServerIP", "none" ) eq "none" );
- InternalTimer( gettimeofday()+15, "AMADDevice_GetUpdate", $hash, 0 );
- }
- }
- sub AMADDevice_statusRequest($) {
- my $hash = shift;
- my $name = $hash->{NAME};
-
- my $host = $hash->{HOST};
- my $port = $hash->{PORT};
- my $amad_id = $hash->{AMAD_ID};
- my $uri = $hash->{HOST} . ":" . $hash->{PORT};
- my $header = 'Connection: close';
- my $path;
- my $method;
-
-
- my $activetask = AttrVal( $name, "checkActiveTask", "none" );
- my $userFlowState = AttrVal( $name, "setUserFlowState", "none" );
- my $apssid = AttrVal( $name, "setAPSSID", "none" );
- my $fhemip = ReadingsVal($hash->{IODev}->{NAME}, "fhemServerIP", "none");
- my $fhemCtlMode = AttrVal($hash->{IODev}->{NAME},'fhemControlMode','none' );
- my $bport = $hash->{IODev}->{PORT};
- $header .= "\r\nfhemip: $fhemip\r\nfhemdevice: $name\r\nactivetask: $activetask\r\napssid: $apssid\r\nbport: $bport\r\nuserflowstate: $userFlowState\r\nfhemctlmode: $fhemCtlMode";
-
- $method = "GET" if( AttrVal($name,'remoteServer','Automagic') eq 'Automagic' );
- $method = "POST" if (AttrVal($name,'remoteServer','Automagic') ne 'Automagic' );
-
- $path ="/fhem-amad/deviceInfo/"; # Pfad muß so im Automagic als http request Trigger drin stehen
- IOWrite($hash,$amad_id,$uri,$path,$header,$method);
- Log3 $name, 5, "AMADDevice ($name) - IOWrite: $uri $method IODevHash=$hash->{IODev}";
- }
- sub AMADDevice_WriteReadings($$) {
- my ( $hash, $decode_json ) = @_;
-
- my $name = $hash->{NAME};
- ############################
- #### schreiben der Readings
- Log3 $name, 5, "AMADDevice ($name) - Processing data: $decode_json";
- readingsSingleUpdate( $hash, "state", "active", 1) if( ReadingsVal( $name, "state", 0 ) ne "initialized" and ReadingsVal( $name, "state", 0 ) ne "active" );
-
- ### Event Readings
- my $t;
- my $v;
-
-
- readingsBeginUpdate($hash);
-
- while( ( $t, $v ) = each %{$decode_json->{payload}} ) {
-
- $v =~ s/\bnull\b/off/g if( ($t eq "nextAlarmDay" or $t eq "nextAlarmTime") and $v eq "null" );
- $v =~ s/\bnull\b//g;
- $v = encode_utf8($v);
-
- readingsBulkUpdateIfChanged($hash, $t, $v, 1) if( defined( $v ) and ($t ne 'deviceState'
- or $t ne 'incomingCallerName'
- or $t ne 'incomingCallerNumber'
- or $t ne 'incomingTelegramMessage'
- or $t ne 'incomingSmsMessage'
- or $t ne 'incomingWhatsAppMessage'
- or $t ne 'nfcLastTagID')
- );
- readingsBulkUpdateIfChanged( $hash, $t, ($v / AttrVal($name,'setVolFactor',1)) ) if( $t eq 'volume' and AttrVal($name,'setVolFactor',1) > 1 );
- readingsBulkUpdate( $hash, '.'.$t, $v ) if( $t eq 'deviceState' );
- readingsBulkUpdate( $hash, $t, $v ) if( defined( $v ) and ($t eq 'incomingCallerName'
- or $t eq 'incomingCallerNumber'
- or $t eq 'incomingTelegramMessage'
- or $t eq 'incomingSmsMessage'
- or $t eq 'incomingWhatsAppMessage'
- or $t eq 'nfcLastTagID')
- );
- }
-
- readingsBulkUpdateIfChanged( $hash, "deviceState", "offline", 1 ) if( $decode_json->{payload}{airplanemode} && $decode_json->{payload}{airplanemode} eq "on" );
- readingsBulkUpdateIfChanged( $hash, "deviceState", "online", 1 ) if( $decode_json->{payload}{airplanemode} && $decode_json->{payload}{airplanemode} eq "off" );
- readingsBulkUpdateIfChanged( $hash, "lastStatusRequestState", "statusRequest_done", 1 );
-
- if( ReadingsVal($name,'volume',1) > 0 ) {
- readingsBulkUpdateIfChanged( $hash, "mute", "off", 1 );
- } else {
- readingsBulkUpdateIfChanged( $hash, "mute", "on", 1 );
- }
- $hash->{helper}{infoErrorCounter} = 0;
- ### End Response Processing
-
- readingsBulkUpdateIfChanged( $hash, "state", "active", 1 ) if( ReadingsVal( $name, "state", 0 ) eq "initialized" );
- readingsEndUpdate( $hash, 1 );
-
- $hash->{helper}{deviceStateErrorCounter} = 0 if( $hash->{helper}{deviceStateErrorCounter} > 0 and ReadingsVal( $name, "deviceState", "offline") eq "online" );
-
- return undef;
- }
- sub AMADDevice_Set($$@) {
- my ($hash, $name, @aa) = @_;
- my ($cmd, @args) = @aa;
- my $amad_id = $hash->{AMAD_ID};
- my $header = 'Connection: close';
- my $uri = $hash->{HOST} . ":" . $hash->{PORT};
- my $path;
- my $method;
-
- my @playerList = ('GoogleMusic','SamsungMusic','AmazonMusic','SpotifyMusic','TuneinRadio','AldiMusic','YouTube','YouTubeKids','VlcPlayer','Audible','Deezer');
- my @playerCmd = ('mediaPlay','mediaStop','mediaNext','mediaBack');
-
- my $volMax = AttrVal($name,'setVolMax',15);
- my $notifyVolMax = AttrVal($name,'setNotifyVolMax',7);
- my $ringSoundVolMax = AttrVal($name,'setRingSoundVolMax',7);
-
- if( lc $cmd eq 'screenmsg' ) {
- my $msg = join( " ", @args );
- $path = "/fhem-amad/setCommands/screenMsg?message=".urlEncode($msg);
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'ttsmsg' ) {
- my ($msg,$speed,$lang,$ttsmsgvol) = AMADDevice_CreateTtsMsgValue($hash,@args);
-
- $path = "/fhem-amad/setCommands/ttsMsg?message=".urlEncode($msg)."&msgspeed=".$speed."&msglang=".$lang."&msgvol=".$ttsmsgvol;
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'userflowstate' ) {
- my $datas = join( " ", @args );
- my ($flow,$state) = split( ":", $datas);
- $path = "/fhem-amad/setCommands/flowState?flowstate=".$state."&flowname=".urlEncode($flow);
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'userflowrun' ) {
- my $flow = join( " ", @args );
- $path = "/fhem-amad/setCommands/flowRun?flowname=".urlEncode($flow);
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'volume' or $cmd eq 'mute' or $cmd =~ 'volume[Down|Up]' ) {
- my $vol = AMADDevice_CreateVolumeValue($hash,$cmd,@args);
-
- $path = "/fhem-amad/setCommands/setVolume?volume=$vol";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'volumenotification' ) {
- my $volnote = join( " ", @args );
- $path = "/fhem-amad/setCommands/setNotifiVolume?notifivolume=$volnote";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'volumeringsound' ) {
- my $volring = join( " ", @args );
- $path = "/fhem-amad/setCommands/setRingSoundVolume?ringsoundvolume=$volring";
- $method = "POST";
- }
-
- elsif( lc $cmd =~ /^media/ ) {
- my $mplayer = join( " ", @args );
- $path = "/fhem-amad/setCommands/multimediaControl?button=".$cmd."&mplayer=".$mplayer;
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'screenbrightness' ) {
- my $bri = join( " ", @args );
- $path = "/fhem-amad/setCommands/setBrightness?brightness=$bri";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'screen' ) {
- my $mod = join( " ", @args );
- $path = AMADDevice_CreateScreenValue($hash,$mod);
- return "Please set \"setScreenlockPIN\" Attribut first"
- unless($path ne 'NO PIN');
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'screenorientation' ) {
-
- my $mod = join( " ", @args );
- $path = "/fhem-amad/setCommands/setScreenOrientation?orientation=$mod";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'activatevoiceinput' ) {
- $path = "/fhem-amad/setCommands/setvoicecmd";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'screenfullscreen' ) {
- my $mod = join( " ", @args );
- $path = "/fhem-amad/setCommands/setScreenFullscreen?fullscreen=$mod";
- $method = "POST";
- readingsSingleUpdate( $hash, $cmd, $mod, 1 );
- }
-
- elsif( lc $cmd eq 'openurl' ) {
- my $openurl = join( " ", @args );
- my $browser = AttrVal( $name, "setOpenUrlBrowser", "com.android.chrome|com.google.android.apps.chrome.Main" );
- my @browserapp = split( /\|/, $browser );
- $path = "/fhem-amad/setCommands/openURL?url=".$openurl."&browserapp=".$browserapp[0]."&browserappclass=".$browserapp[1];
- $method = "POST";
- }
-
- elsif (lc $cmd eq 'nextalarmtime') {
- my $value = join( " ", @args );
- my @alarm = split( ":", $value );
- $path = "/fhem-amad/setCommands/setAlarm?hour=".$alarm[0]."&minute=".$alarm[1];
- $method = "POST";
- }
-
- elsif (lc $cmd eq 'timer') {
- my $timer = join( " ", @args );
- $path = "/fhem-amad/setCommands/setTimer?minute=$timer";
- $method = "POST";
- }
- elsif( lc $cmd eq 'statusrequest' ) {
- AMADDevice_statusRequest($hash);
- return;
- }
- elsif( lc $cmd eq 'openapp' ) {
- my $app = join( " ", @args );
- $path = "/fhem-amad/setCommands/openApp?app=".$app;
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'nfc' ) {
- my $mod = join( " ", @args );
- $path = "/fhem-amad/setCommands/setnfc?nfc=".$mod;
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'system' ) {
- my $systemcmd = join( " ", @args );
- $path = "/fhem-amad/setCommands/systemcommand?syscmd=$systemcmd";
- $method = "POST";
- readingsSingleUpdate( $hash, "airplanemode", "on", 1 ) if( $systemcmd eq "airplanemodeON" );
- readingsSingleUpdate( $hash, "deviceState", "offline", 1 ) if( $systemcmd eq "airplanemodeON" || $systemcmd eq "shutdown" );
- }
-
- elsif( lc $cmd eq 'donotdisturb' ) {
- my $disturbmod = join( " ", @args );
- $path = "/fhem-amad/setCommands/donotdisturb?disturbmod=$disturbmod";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'bluetooth' ) {
- my $mod = join( " ", @args );
- $path = "/fhem-amad/setCommands/setbluetooth?bluetooth=$mod";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'notifysndfile' ) {
- my $notify = join( " ", @args );
- my $filepath = AttrVal( $name, "setNotifySndFilePath", "/storage/emulated/0/Notifications/" );
- $path = "/fhem-amad/setCommands/playnotifysnd?notifyfile=".$notify."¬ifypath=".$filepath;
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'changetobtdevice' ) {
- my $swToBtDevice = join( " ", @args );
- my ($swToBtMac,$btDeviceOne,$btDeviceTwo) = AMADDevice_CreateChangeBtDeviceValue($hash,$swToBtDevice);
- $path = "/fhem-amad/setCommands/setbtdevice?swToBtDeviceMac=".$swToBtMac."&btDeviceOne=".$btDeviceOne."&btDeviceTwo=".$btDeviceTwo;
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'clearnotificationbar' ) {
- my $appname = join( " ", @args );
- $path = "/fhem-amad/setCommands/clearnotificationbar?app=$appname";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'vibrate' ) {
- $path = "/fhem-amad/setCommands/setvibrate";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'showhomescreen' ) {
- $path = "/fhem-amad/setCommands/showhomescreen";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'takepicture' ) {
- return "Please set \"setTakePictureResolution\" Attribut first"
- unless(AttrVal($name,'setTakePictureResolution','none') ne 'none');
-
- return "Please set \"setTakePictureCamera\" Attribut first"
- unless(AttrVal($name,'setTakePictureCamera','none') ne 'none');
-
- $path = "/fhem-amad/setCommands/takepicture?pictureresolution=".AttrVal($name,'setTakePictureResolution','none')."&picturecamera=".AttrVal($name,'setTakePictureCamera','none');
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'sendintent' ) {
- my $intentstring = join( " ", @args );
- my ( $action, $exkey1, $exval1, $exkey2, $exval2 ) = split( "[ \t][ \t]*", $intentstring );
- $exkey1 = "" if( !$exkey1 );
- $exval1 = "" if( !$exval1 );
- $exkey2 = "" if( !$exkey2 );
- $exval2 = "" if( !$exval2 );
- $path = "/fhem-amad/setCommands/sendIntent?action=".$action."&exkey1=".$exkey1."&exval1=".$exval1."&exkey2=".$exkey2."&exval2=".$exval2;
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'installflowsource' ) {
- my $flowname = join( " ", @args );
- $path = "/fhem-amad/setCommands/installFlow?flowname=$flowname";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'opencall' ) {
- my $string = join( " ", @args );
- my ($callnumber, $time) = split( "[ \t][ \t]*", $string );
- $time = "none" if( !$time );
- $path = "/fhem-amad/setCommands/openCall?callnumber=".$callnumber."&hanguptime=".$time;
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'closecall' ) {
- $path = "/fhem-amad/setCommands/closeCall";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'startdaydream' ) {
- $path = "/fhem-amad/setCommands/startDaydream";
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'currentflowsetupdate' ) {
- if( ReadingsVal($name,'flowsetVersionAtDevice','') lt '4.1.99.6' ) {
- $path = "/fhem-amad/currentFlowsetUpdate";
- } else {
- $path = "/fhem-amad/setCommands/currentFlowsetUpdate";
- }
-
- $method = "POST";
- }
-
- elsif( lc $cmd eq 'sendsms' ) {
- my $string = join( " ", @args );
- my ($smsmessage, $smsnumber) = split( "\\|", $string );
-
- $path = "/fhem-amad/setCommands/sendSms?smsmessage=".urlEncode($smsmessage)."&smsnumber=".$smsnumber;
- $method = "POST";
-
- } else {
-
- my $apps = AttrVal( $name, "setOpenApp", "none" );
- my $btdev = AttrVal( $name, "setBluetoothDevice", "none" );
-
- my $list = '';
- foreach(@playerCmd) {
- $list .= $_ . ':' . join(',',@playerList) . ' ';
- }
-
- $list .= "screenMsg ttsMsg screenBrightness:slider,0,1,255 screen:on,off,lock,unlock openURL nextAlarmTime:time timer:slider,1,1,60 statusRequest:noArg bluetooth:on,off notifySndFile clearNotificationBar:All,Automagic activateVoiceInput:noArg vibrate:noArg sendIntent openCall closeCall:noArg currentFlowsetUpdate:noArg installFlowSource doNotDisturb:never,always,alarmClockOnly,onlyImportant userFlowState userFlowRun sendSMS startDaydream:noArg volumeUp:noArg volumeDown:noArg mute:on,off showHomeScreen:noArg takePicture:noArg";
- $list .= " screenOrientation:auto,landscape,portrait" if( AttrVal( $name, "setScreenOrientation", "0" ) eq "1" );
- $list .= " screenFullscreen:on,off" if( AttrVal( $name, "setFullscreen", "0" ) eq "1" );
- $list .= " openApp:$apps" if( AttrVal( $name, "setOpenApp", "none" ) ne "none" );
- $list .= " system:reboot,shutdown,airplanemodeON" if( AttrVal( $name, "root", "0" ) eq "1" );
- $list .= " changetoBTDevice:$btdev" if( AttrVal( $name, "setBluetoothDevice", "none" ) ne "none" );
- $list .= " nfc:on,off" if( AttrVal( $name, "root", "0" ) eq "1" );
- $list .= " volume:slider,0,1,$volMax";
- $list .= " volumeNotification:slider,0,1,$notifyVolMax";
- $list .= " volumeRingSound:slider,0,1,$ringSoundVolMax";
-
- return "Unknown argument $cmd, choose one of $list";
- }
-
-
- IOWrite($hash,$amad_id,$uri,$path,$header,$method);
- Log3 $name, 5, "AMADDevice ($name) - IOWrite: $uri $method IODevHash=$hash->{IODev}";
- return undef;
- }
- sub AMADDevice_Parse($$) {
- my ($io_hash,$json) = @_;
- my $name = $io_hash->{NAME};
- my $decode_json = eval{decode_json($json)};
- if($@){
- Log3 $name, 3, "AMADDevice ($name) - JSON error while request: $@";
- return;
- }
-
- Log3 $name, 4, "AMADDevice ($name) - ParseFn was called";
- Log3 $name, 5, "AMADDevice ($name) - ParseFn was called, !!! AMAD_ID: $decode_json->{amad}{amad_id}";
- my $fhemDevice = $decode_json->{firstrun}{fhemdevice} if( defined($decode_json->{firstrun}) and defined($decode_json->{firstrun}{fhemdevice}) );
- my $amad_id = $decode_json->{amad}{amad_id};
-
- if( my $hash = $modules{AMADDevice}{defptr}{$amad_id} ) {
- my $name = $hash->{NAME};
-
- AMADDevice_WriteReadings($hash,$decode_json);
- Log3 $name, 4, "AMADDevice ($name) - find logical device: $hash->{NAME}";
-
- return $hash->{NAME};
-
- } else {
- return "UNDEFINED $fhemDevice AMADDevice $decode_json->{firstrun}{'amaddevice_ip'} $decode_json->{amad}{'amad_id'} $decode_json->{firstrun}{remoteserver}";
- }
- }
- ##################################
- ##################################
- #### my little helpers ###########
- sub AMADDevice_checkDeviceState($) {
- my ( $hash ) = @_;
- my $name = $hash->{NAME};
- Log3 $name, 4, "AMADDevice ($name) - AMADDevice_checkDeviceState: run Check";
-
- if( ReadingsAge( $name, ".deviceState", 240 ) > 240 ) {
-
- AMADDevice_statusRequest( $hash ) if( $hash->{helper}{deviceStateErrorCounter} == 0 );
- readingsSingleUpdate( $hash, "deviceState", "offline", 1 ) if( ReadingsAge( $name, ".deviceState", 300) > 300 and $hash->{helper}{deviceStateErrorCounter} > 0 and ReadingsVal($name,'deviceState','online') ne 'offline' );
- $hash->{helper}{deviceStateErrorCounter} = ( $hash->{helper}{deviceStateErrorCounter} + 1 );
- }
-
- InternalTimer( gettimeofday()+240, "AMADDevice_checkDeviceState", $hash, 0 );
-
- Log3 $name, 4, "AMADDevice ($name) - AMADDevice_checkDeviceState: set new Timer";
- }
- sub AMADDevice_encrypt($) {
- my ($decodedPIN) = @_;
- my $key = getUniqueId();
- my $encodedPIN;
-
- return $decodedPIN if( $decodedPIN =~ /^crypt:(.*)/ );
- for my $char (split //, $decodedPIN) {
- my $encode = chop($key);
- $encodedPIN .= sprintf("%.2x",ord($char)^ord($encode));
- $key = $encode.$key;
- }
-
- return 'crypt:'. $encodedPIN;
- }
- sub AMADDevice_decrypt($) {
- my ($encodedPIN) = @_;
- my $key = getUniqueId();
- my $decodedPIN;
- $encodedPIN = $1 if( $encodedPIN =~ /^crypt:(.*)/ );
- for my $char (map { pack('C', hex($_)) } ($encodedPIN =~ /(..)/g)) {
- my $decode = chop($key);
- $decodedPIN .= chr(ord($char)^ord($decode));
- $key = $decode.$key;
- }
- return $decodedPIN;
- }
- sub AMADDevice_CreateVolumeValue($$@) {
- my ($hash,$cmd,@args) = @_;
-
- my $name = $hash->{NAME};
- my $vol;
-
- if( $cmd eq 'volume' ) {
- $vol = join( " ", @args );
- if( $vol =~ /^\+(.*)/ or $vol =~ /^-(.*)/ ) {
- if( $vol =~ /^\+(.*)/ ) {
-
- $vol =~ s/^\+//g;
- $vol = ReadingsVal( $name, "volume", 0 ) + $vol;
- }
-
- elsif( $vol =~ /^-(.*)/ ) {
-
- $vol =~ s/^-//g;
- $vol = ReadingsVal( $name, "volume", 15 ) - $vol;
- }
- }
-
- } elsif( $cmd eq 'mute') {
- if($args[0] eq 'on') {
- $vol = 0;
- readingsSingleUpdate($hash,'.volume',ReadingsVal($name,'volume',0),0);
- } else {
- $vol = ReadingsVal($name,'.volume',0);
- }
-
- } elsif( $cmd =~ 'volume[Down|Up]') {
- if( $cmd eq 'volumeUp' ) {
- $vol = ReadingsVal( $name, "volume", 0 ) + AttrVal($name,'setVolUpDownStep',3);
- } else {
- $vol = ReadingsVal( $name, "volume", 0 ) - AttrVal($name,'setVolUpDownStep',3);
- }
- }
-
- return $vol;
- }
- sub AMADDevice_CreateTtsMsgValue($@) {
- my ($hash,@args) = @_;
-
- my $name = $hash->{NAME};
- my $msg;
- my $speed;
- my $lang = AttrVal( $name, "setTtsMsgLang","de" );
- my $ttsmsgvol = AttrVal( $name, "setTtsMsgVol","none");
-
- if( AttrVal($name,"remoteServer","Automagic") ne 'Automagic') {
- $speed = AttrVal( $name, "setTtsMsgSpeed", "5" );
- } else {
- $speed = AttrVal( $name, "setTtsMsgSpeed", "1.0" );
- }
- $msg = join( " ", @args );
-
- unless($args[0] ne '&en;' and $args[0] ne '&de;') {
- $lang = substr(splice(@args,0,1),1,2);
- $msg = join( " ", @args );
- }
-
- return ($msg,$speed,$lang,$ttsmsgvol);
- }
- sub AMADDevice_CreateScreenValue($$) {
- my ($hash,$mod) = @_;
- my $name = $hash->{NAME};
- my $scot = AttrVal( $name, "setScreenOnForTimer", undef );
- $scot = 60 if( !$scot );
- if ($mod eq "on" or $mod eq "off") {
- return ("/fhem-amad/setCommands/setScreenOnOff?screen=".$mod."&screenontime=".$scot);
- }
- elsif ($mod eq "lock" or $mod eq "unlock") {
- return "NO PIN"
- unless( AttrVal( $name, "setScreenlockPIN", "none" ) ne "none" );
- my $PIN = AttrVal( $name, "setScreenlockPIN", undef );
- $PIN = AMADDevice_decrypt($PIN);
- return ("/fhem-amad/setCommands/screenlock?lockmod=".$mod."&lockPIN=".$PIN);
- }
- }
- sub AMADDevice_CreateChangeBtDeviceValue($$) {
- my ($hash,$swToBtDevice) = @_;
- my $name = $hash->{NAME};
- my @swToBtMac = split( /\|/, $swToBtDevice );
- my $btDevices = AttrVal( $name, "setBluetoothDevice", "none" ) if( AttrVal( $name, "setBluetoothDevice", "none" ) ne "none" );
- my @btDevice = split( ',', $btDevices );
- my @btDeviceOne = split( /\|/, $btDevice[0] );
- my @btDeviceTwo = split( /\|/, $btDevice[1] );
-
-
- return($swToBtMac[1],$btDeviceOne[1],$btDeviceTwo[1]);
- }
- 1;
- =pod
- =item device
- =item summary Integrates Android devices into FHEM and displays several settings.
- =item summary_DE Integriert Android-Geräte in FHEM und zeigt verschiedene Einstellungen an.
- =begin html
- <a name="AMADDevice"></a>
- <h3>AMADDevice</h3>
- <ul>
- <u><b>AMAD - Automagic Android Device</b></u>
- <br>
- This module integrates Android devices into FHEM and displays several settings <b><u>using the Android app "Automagic" or "Tasker"</u></b>.
- Automagic is comparable to the "Tasker" app for automating tasks and configuration settings. But Automagic is more user-friendly. The "Automagic Premium" app currently costs EUR 2.90.
- <br>
- Any information retrievable by Automagic/Tasker can be displayed in FHEM by this module. Just define your own Automagic-"flow" or Tasker-"task" and send the data to the AMADCommBridge. One even can control several actions on Android devices.
- <br>
- To be able to make use of all these functions the Automagic/Tasker app and additional flows/Tasker-project need to be installed on the Android device. The flows/Tasker-project can be retrieved from the FHEM directory, the app can be bought in Google Play Store.
- <br><br>
- <b>How to use AMADDevice?</b>
- <ul>
- <li>first, make sure that the AMADCommBridge in FHEM was defined</li>
- <li><b>Using Autoremote</b></li>
- <ul>
- <li>install the "Automagic Premium" app from the PlayStore</li>
- <li>install the flowset 74_AMADDeviceautomagicFlowset$VERSION.xml file from the $INSTALLFHEM/FHEM/lib/ directory on the Android device</li>
- <li>activate the "installation assistant" Flow in Automagic. If one now sends Automagic into the background, e.g. Homebutton, the assistant starts and creates automatically a FHEM device for the android device</li>
- </ul>
- <li><b>Using Tasker</b></li>
- <ul>
- <li>install the "Tasker" app from the PlayStore</li>
- <li>install the Tasker-project 74_AMADtaskerset_$VERSION.prj.xml file from the $INSTALLFHEM/FHEM/lib/ directory on the Android device</li>
- <li>run the "AMAD" task in Tasker and make your initial setup, by pressing the "create Device" button it will automatically create the device in FHEM</li>
- </ul>
- </ul>
- <br><br>
- <u><b>Define a AMADDevice device by hand.</b></u>
- <br><br>
- <a name="AMADDevicedefine"></a>
- <b>Define</b>
- <ul><br>
- 10.6.9.10 1496497380000 IODev=AMADBridge
- <code>define <name> AMADDevice <IP-ADRESSE> <AMAD_ID> IODev=<IODEVICE></code>
- <br><br>
- Example:
- <ul><br>
- <code>define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 IODev=NAME_des_AMADCommBridge_Devices</code><br>
- </ul>
- <br>
- In this case, an AMADDevice is created by hand. The AMAD_ID, here 123456, must also be entered exactly as a global variable in Automagic/Tasker.
- </ul>
- <br><br><br>
- <a name="AMADDevicereadings"></a>
- <b>Readings</b>
- <ul>
- <li>airplanemode - on/off, state of the aeroplane mode</li>
- <li>androidVersion - currently installed version of Android</li>
- <li>automagicState - state of the Automagic or Tasker App <b>(prerequisite Android >4.3). In case you have Android >4.3 and the reading says "not supported", you need to enable Automagic/Tasker inside Android / Settings / Sound & notification / Notification access</b></li>
- <li>batteryHealth - the health of the battery (1=unknown, 2=good, 3=overheat, 4=dead, 5=over voltage, 6=unspecified failure, 7=cold) (Automagic only)</li>
- <li>batterytemperature - the temperature of the battery (Automagic only)</li>
- <li>bluetooth - on/off, bluetooth state</li>
- <li>checkActiveTask - state of an app (needs to be defined beforehand). 0=not active or not active in foreground, 1=active in foreground, <b>see note below</b> (Automagic only)</li>
- <li>connectedBTdevices - list of all devices connected via bluetooth (Automagic only)</li>
- <li>connectedBTdevicesMAC - list of MAC addresses of all devices connected via bluetooth (Automagic only)</li>
- <li>currentMusicAlbum - currently playing album of mediaplayer (Automagic only)</li>
- <li>currentMusicApp - currently playing player app (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music) (Automagic only)</li>
- <li>currentMusicArtist - currently playing artist of mediaplayer (Automagic only)</li>
- <li>currentMusicIcon - cover of currently play album <b>Not yet fully implemented</b> (Automagic only)</li>
- <li>currentMusicState - state of currently/last used mediaplayer (Automagic only)</li>
- <li>currentMusicTrack - currently playing song title of mediaplayer (Automagic only)</li>
- <li>daydream - on/off, daydream currently active</li>
- <li>deviceState - state of Android devices. unknown, online, offline.</li>
- <li>doNotDisturb - state of do not Disturb Mode</li>
- <li>dockingState - undocked/docked, Android device in docking station</li>
- <li>flow_SetCommands - active/inactive, state of SetCommands flow</li>
- <li>flow_informations - active/inactive, state of Informations flow</li>
- <li>flowsetVersionAtDevice - currently installed version of the flowsets on the Android device</li>
- <li>incomingCallerName - Callername from last Call</li>
- <li>incomingCallerNumber - Callernumber from last Call</li>
- <li>incomingWhatsAppMessage - last WhatsApp message</li>
- <li>incomingTelegramMessage - last telegram message</li>
- <li>incomingSmsMessage - last SMS message</li>
- <li>intentRadioName - name of the most-recent streamed intent radio</li>
- <li>intentRadioState - state of intent radio player</li>
- <li>keyguardSet - 0/1 keyguard set, 0=no 1=yes, does not indicate whether it is currently active</li>
- <li>lastSetCommandError - last error message of a set command</li>
- <li>lastSetCommandState - last state of a set command, command send successful/command send unsuccessful</li>
- <li>lastStatusRequestError - last error message of a statusRequest command</li>
- <li>lastStatusRequestState - ast state of a statusRequest command, command send successful/command send unsuccessful</li>
- <li>nextAlarmDay - currently set day of alarm</li>
- <li>nextAlarmState - alert/done, current state of "Clock" stock-app</li>
- <li>nextAlarmTime - currently set time of alarm</li>
- <li>nfc - state of nfc service on/off</li>
- <li>nfcLastTagID - nfc_id of last scan nfc Tag / In order for the ID to be recognized correctly, the trigger NFC TagIDs must be processed in Flow NFC Tag Support and the TagId's Commase-separated must be entered. (Automagic only)</li>
- <li>powerLevel - state of battery in %</li>
- <li>powerPlugged - 0=no/1,2=yes, power supply connected</li>
- <li>screen - on locked,unlocked/off locked,unlocked, state of display</li>
- <li>screenBrightness - 0-255, level of screen-brightness</li>
- <li>screenFullscreen - on/off, full screen mode (Automagic only)</li>
- <li>screenOrientation - Landscape/Portrait, screen orientation (horizontal,vertical)</li>
- <li>screenOrientationMode - auto/manual, mode for screen orientation</li>
- <li>state - current state of AMAD device</li>
- <li>userFlowState - current state of a Flow, established under setUserFlowState Attribut (Automagic only)</li>
- <li>volume - media volume setting</li>
- <li>volumeNotification - notification volume setting</li>
- <li>wiredHeadsetPlugged - 0/1 headset plugged out or in</li>
- <br>
- Prerequisite for using the reading checkActivTask the package name of the application to be checked needs to be defined in the attribute <i>checkActiveTask</i>. Example: <i>attr Nexus10Wohnzimmer
- checkActiveTask com.android.chrome</i> für den Chrome Browser.
- <br><br>
- </ul>
- <br><br>
- <a name="AMADDeviceset"></a>
- <b>Set</b>
- <ul>
- <li>activateVoiceInput - start voice input on Android device</li>
- <li>bluetooth - on/off, switch bluetooth on/off</li>
- <li>clearNotificationBar - All/Automagic, deletes all or only Automagic/Tasker notifications in status bar</li>
- <li>closeCall - hang up a running call</li>
- <li>currentFlowsetUpdate - start flowset/Tasker-project update on Android device</li>
- <li>installFlowSource - install a Automagic flow on device, <u>XML file must be stored in /tmp/ with extension xml</u>. <b>Example:</b> <i>set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml</i> (Automagic only)</li>
- <li>doNotDisturb - sets the do not Disturb Mode, always Disturb, never Disturb, alarmClockOnly alarm Clock only, onlyImportant only important Disturbs</li>
- <li>mediaPlay - play command to media App</li>
- <li>mediaStop - stop command to media App</li>
- <li>mediaNext - skip Forward command to media App</li>
- <li>mediaBack - skip Backward to media App</li>
- <li>nextAlarmTime - sets the alarm time. Only valid for the next 24 hours.</li>
- <li>notifySndFile - plays a media-file <b>which by default needs to be stored in the folder "/storage/emulated/0/Notifications/" of the Android device. You may use the attribute setNotifySndFilePath for defining a different folder.</b></li>
- <li>openCall - initial a call and hang up after optional time / set DEVICE openCall 0176354 10 call this number and hang up after 10s</li>
- <li>screenBrightness - 0-255, set screen brighness</li>
- <li>screenMsg - display message on screen of Android device</li>
- <li>sendintent - send intent string <u>Example:</u><i> set $AMADDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio</i>, first parameter contains the action, second parameter contains the extra. At most two extras can be used.</li>
- <li>sendSMS - Sends an SMS to a specific phone number. Bsp.: sendSMS Dies ist ein Test|555487263</li>
- <li>startDaydream - start Daydream</li>
- <li>statusRequest - Get a new status report of Android device. Not all readings can be updated using a statusRequest as some readings are only updated if the value of the reading changes.</li>
- <li>timer - set a countdown timer in the "Clock" stock app. Only minutes are allowed as parameter.</li>
- <li>ttsMsg - send a message which will be played as voice message (to change laguage temporary set first character &en; or &de;)</li>
- <li>userFlowState - set Flow/Tasker-profile active or inactive,<b><i>set Nexus7Wohnzimmer Badezimmer:inactive vorheizen</i> or <i>set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive</i></b></li>
- <li>userFlowRun - executes the specified flow/task</li>
- <li>vibrate - vibrate Android device</li>
- <li>volume - set media volume. Works on internal speaker or, if connected, bluetooth speaker or speaker connected via stereo jack</li>
- <li>volumeNotification - set notifications volume</li>
- </ul>
- <br>
- <b>Set (depending on attribute values)</b>
- <ul>
- <li>changetoBtDevice - switch to another bluetooth device. <b>Attribute setBluetoothDevice needs to be set. See note below!</b> (Automagic only)</li>
- <li>nfc - activate or deactivate the nfc Modul on/off. <b>attribute root</b></li>
- <li>openApp - start an app. <b>attribute setOpenApp</b></li>
- <li>openURL - opens a URLS in the standard browser as long as no other browser is set by the <b>attribute setOpenUrlBrowser</b>.<b>Example:</b><i> attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, first parameter: package name, second parameter: Class Name</i></li>
- <li>screen - on/off/lock/unlock, switch screen on/off or lock/unlock screen. In Automagic "Preferences" the "Device admin functions" need to be enabled, otherwise "Screen off" does not work. <b>attribute setScreenOnForTimer</b> changes the time the display remains switched on! (Tasker supports only "off" command)</li>
- <li>screenFullscreen - on/off, activates/deactivates full screen mode. <b>attribute setFullscreen</b> (Automagic only)</li>
- <li>screenLock - Locks screen with request for PIN. <b>attribute setScreenlockPIN - enter PIN here. Only use numbers, 4-16 numbers required.</b> (Automagic only)</li>
- <li>screenOrientation - Auto,Landscape,Portait, set screen orientation (automatic, horizontal, vertical). <b>attribute setScreenOrientation</b></li>
- <li>system - issue system command (only with rooted Android devices). reboot,shutdown,airplanemodeON (can only be switched ON) <b>attribute root</b>, in Automagic "Preferences" "Root functions" need to be enabled.</li>
- <li>takePicture - take a camera picture <b>Attribut setTakePictureResolution</b></li>
- </ul>
- <br><br>
- <a name="AMADDeviceattribut"></a>
- <b>Attribut</b>
- <ul>
- <li>setAPSSID - set WLAN AccesPoint SSID to prevent WLAN sleeps (Automagic only)</li>
- <li>setNotifySndFilePath - set systempath to notifyfile (default /storage/emulated/0/Notifications/</li>
- <li>setTtsMsgSpeed - set speaking speed for TTS (For Automagic: Value between 0.5 - 4.0, 0.5 Step, default: 1.0)(For Tasker: Value between 1 - 10, 1 Step, default: 5)</li>
- <li>setTtsMsgLang - set speaking language for TTS, de or en (default is de)</li>
- <li>setTtsMsgVol - is set, change automatically the media audio end set it back</li>
- <li>set setTakePictureResolution - set the camera resolution for takePicture action (800x600,1024x768,1280x720,1600x1200,1920x1080)</li>
- <li>setTakePictureCamera - which camera do you use (Back,Front).</li>
- <br>
- To be able to use "openApp" the corresponding attribute "setOpenApp" needs to contain the app package name.
- <br><br>
- To be able to switch between bluetooth devices the attribute "setBluetoothDevice" needs to contain (a list of) bluetooth devices defined as follows: <b>attr <DEVICE> BTdeviceName1|MAC,BTDeviceName2|MAC</b> No spaces are allowed in any BTdeviceName. Defining MAC please make sure to use the character : (colon) after each second digit/character.<br>
- Example: <i>attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76</i>
- </ul>
- <br><br>
- <a name="AMADDevicestate"></a>
- <b>state</b>
- <ul>
- <li>initialized - shown after initial define.</li>
- <li>active - device is active.</li>
- <li>disabled - device is disabled by the attribute "disable".</li>
- </ul>
- <br><br><br>
- <u><b>Further examples and reading:</b></u>
- <ul><br>
- <a href="http://www.fhemwiki.de/wiki/AMAD#Anwendungsbeispiele">Wiki page for AMAD (german only)</a>
- </ul>
- <br><br><br>
- </ul>
- =end html
- =begin html_DE
- <a name="AMADDevice"></a>
- <h3>AMADDevice</h3>
- <ul>
- <u><b>AMADDevice - Automagic Android Device</b></u>
- <br>
- Dieses Modul liefert, <b><u>in Verbindung mit der Android APP Automagic oder Tasker</u></b>, diverse Informationen von Android Geräten.
- Die Android APP Automagic (welche nicht von mir stammt und 2.90 Euro kostet) funktioniert wie Tasker, ist aber bei weitem User freundlicher.
- <br>
- Mit etwas Einarbeitung können jegliche Informationen welche Automagic/Tasker bereit stellt in FHEM angezeigt werden. Hierzu bedarf es lediglich eines eigenen Flows/Task welcher seine Daten an die AMADDeviceCommBridge sendet. Das Modul gibt auch die Möglichkeit Androidgeräte zu steuern.
- <br>
- Für all diese Aktionen und Informationen wird auf dem Androidgerät "Automagic/Tasker" und ein so genannter Flow/Task benötigt. Die App ist über den Google PlayStore zu beziehen. Das benötigte Flowset/Tasker-Projekt bekommt man aus dem FHEM Verzeichnis.
- <br><br>
- <b>Wie genau verwendet man nun AMADDevice?</b>
- <ul>
- <li>stelle sicher das als aller erstes die AMADCommBridge in FHEM definiert wurde</li>
- <li><b>Bei verwendung von Autoremote</b></li>
- <ul>
- <li>installiere die App "Automagic Premium" aus dem PlayStore.</li>
- <li>installiere das Flowset 74_AMADDeviceautomagicFlowset$VERSION.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät</li>
- <li>aktiviere den 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.</li>
- </ul>
- <li><b>Bei verwendung von Tasker</b></li>
- <ul>
- <li>installiere die App "Tasker" aus dem PlayStore.</li>
- <li>installiere das Tasker Projekt 74_AMADtaskerset_$VERSION.prj.xml aus dem Ordner $INSTALLFHEM/FHEM/lib/ auf dem Androidgerät</li>
- <li>Starte den Task "AMAD", es erscheint eine Eingabemaske in der alle Einstellungen vorgenommen werden können, durch einen Klick auf "create Device" wird das Gerät in FHEM erstellt.</li>
- </ul>
- </ul>
- <br><br>
- <u><b>Ein AMADDevice Gerät von Hand anlegen.</b></u>
- <br><br>
- <a name="AMADDevicedefine"></a>
- <b>Define</b>
- <ul><br>
- 10.6.9.10 1496497380000 IODev=AMADBridge
- <code>define <name> AMADDevice <IP-ADRESSE> <AMAD_ID> IODev=<IODEVICE></code>
- <br><br>
- Beispiel:
- <ul><br>
- <code>define WandTabletWohnzimmer AMADDevice 192.168.0.23 123456 IODev=NAME_des_AMADCommBridge_Devices</code><br>
- </ul>
- <br>
- In diesem Fall wird ein AMADDevice von Hand angelegt. Die AMAD_ID, hier 123456, muß auch exakt so als globale Variable in Automagic/Tasker eingetragen sein.
- </ul>
- <br><br><br>
- <a name="AMADDevicereadings"></a>
- <b>Readings</b>
- <ul>
- <li>airplanemode - Status des Flugmodus</li>
- <li>androidVersion - aktuell installierte Androidversion</li>
- <li>automagicState - Statusmeldungen von der Automagic oder Tasker App <b>(Voraussetzung Android >4.3). Ist Android größer 4.3 vorhanden und im Reading steht "wird nicht unterstützt", muß in den Androideinstellungen unter Ton und Benachrichtigungen -> Benachrichtigungszugriff ein Haken für Automagic/Tasker gesetzt werden</b></li>
- <li>batteryHealth - Zustand der Battery (1=unbekannt, 2=gut, 3=Überhitzt, 4=tot, 5=Überspannung, 6=unbekannter Fehler, 7=kalt) (nur Automagic)</li>
- <li>batterytemperature - Temperatur der Batterie (nur Automagic)</li>
- <li>bluetooth - on/off, Bluetooth Status an oder aus</li>
- <li>checkActiveTask - Zustand einer zuvor definierten APP. 0=nicht aktiv oder nicht aktiv im Vordergrund, 1=aktiv im Vordergrund, <b>siehe Hinweis unten</b> (nur Automagic)</li>
- <li>connectedBTdevices - eine Liste der verbundenen Gerät (nur Automagic)</li>
- <li>connectedBTdevicesMAC - eine Liste der MAC Adressen aller verbundender BT Geräte (nur Automagic)</li>
- <li>currentMusicAlbum - aktuell abgespieltes Musikalbum des verwendeten Mediaplayers (nur Automagic)</li>
- <li>currentMusicApp - aktuell verwendeter Mediaplayer (Amazon Music, Google Play Music, Google Play Video, Spotify, YouTube, TuneIn Player, Aldi Life Music) (nur Automagic)</li>
- <li>currentMusicArtist - aktuell abgespielter Musikinterpret des verwendeten Mediaplayers (nur Automagic)</li>
- <li>currentMusicIcon - Cover vom aktuell abgespielten Album <b>Noch nicht fertig implementiert</b> (nur Automagic)</li>
- <li>currentMusicState - Status des aktuellen/zuletzt verwendeten Mediaplayers (nur Automagic)</li>
- <li>currentMusicTrack - aktuell abgespielter Musiktitel des verwendeten Mediaplayers (nur Automagic)</li>
- <li>daydream - on/off, Daydream gestartet oder nicht</li>
- <li>deviceState - Status des Androidgerätes. unknown, online, offline.</li>
- <li>doNotDisturb - aktueller Status des nicht stören Modus</li>
- <li>dockingState - undocked/docked Status ob sich das Gerät in einer Dockinstation befindet.</li>
- <li>flow_SetCommands - active/inactive, Status des SetCommands Flow</li>
- <li>flow_informations - active/inactive, Status des Informations Flow</li>
- <li>flowsetVersionAtDevice - aktuell installierte Flowsetversion auf dem Device</li>
- <li>incomingCallerName - Anrufername des eingehenden Anrufes</li>
- <li>incomingCallerNumber - Anrufernummer des eingehenden Anrufes</li>
- <li>incomingWhatsAppMessage - letzte WhatsApp Nachricht</li>
- <li>incomingTelegramMessage - letzte Telegram Nachricht</li>
- <li>incomingSmsMessage - letzte SMS Nachricht</li>
- <li>intentRadioName - zuletzt gesrreamter Intent Radio Name</li>
- <li>intentRadioState - Status des IntentRadio Players</li>
- <li>keyguardSet - 0/1 Displaysperre gesetzt 0=nein 1=ja, bedeutet nicht das sie gerade aktiv ist</li>
- <li>lastSetCommandError - letzte Fehlermeldung vom set Befehl</li>
- <li>lastSetCommandState - letzter Status vom set Befehl, Befehl erfolgreich/nicht erfolgreich gesendet</li>
- <li>lastStatusRequestError - letzte Fehlermeldung vom statusRequest Befehl</li>
- <li>lastStatusRequestState - letzter Status vom statusRequest Befehl, Befehl erfolgreich/nicht erfolgreich gesendet</li>
- <li>nextAlarmDay - aktiver Alarmtag</li>
- <li>nextAlarmState - aktueller Status des <i>"Androidinternen"</i> Weckers</li>
- <li>nextAlarmTime - aktive Alarmzeit</li>
- <li>nfc - Status des NFC on/off</li>
- <li>nfcLastTagID - nfc_id des zu letzt gescannten Tag's / Damit die ID korrekt erkannt wird muss im Flow NFC Tag Support der Trigger NFC TagIDs bearbeitet werden und die TagId's Kommasepariert eingetragen werden. (nur Automagic)</li>
- <li>powerLevel - Status der Batterie in %</li>
- <li>powerPlugged - Netzteil angeschlossen? 0=NEIN, 1|2=JA</li>
- <li>screen - on locked/unlocked, off locked/unlocked gibt an ob der Bildschirm an oder aus ist und gleichzeitig gesperrt oder nicht gesperrt</li>
- <li>screenBrightness - Bildschirmhelligkeit von 0-255</li>
- <li>screenFullscreen - on/off, Vollbildmodus (An,Aus) (nur Automagic)</li>
- <li>screenOrientation - Landscape,Portrait, Bildschirmausrichtung (Horizontal,Vertikal)</li>
- <li>screenOrientationMode - auto/manual, Modus für die Ausrichtung (Automatisch, Manuell)</li>
- <li>state - aktueller Status</li>
- <li>userFlowState - aktueller Status eines Flows, festgelegt unter dem setUserFlowState Attribut (nur Automagic)</li>
- <li>volume - Media Lautstärkewert</li>
- <li>volumeNotification - Benachrichtigungs Lautstärke</li>
- <li>wiredHeadsetPlugged - 0/1 gibt an ob ein Headset eingesteckt ist oder nicht</li>
- <br>
- Beim Reading checkActivTask muß zuvor der Packagename der zu prüfenden App als Attribut <i>checkActiveTask</i> angegeben werden. Beispiel: <i>attr Nexus10Wohnzimmer
- checkActiveTask com.android.chrome</i> für den Chrome Browser.
- <br><br>
- </ul>
- <br><br>
- <a name="AMADDeviceset"></a>
- <b>Set</b>
- <ul>
- <li>activateVoiceInput - aktiviert die Spracheingabe</li>
- <li>bluetooth - on/off, aktiviert/deaktiviert Bluetooth</li>
- <li>clearNotificationBar - All,Automagic, löscht alle Meldungen oder nur die Automagic/Tasker Meldungen in der Statusleiste</li>
- <li>closeCall - beendet einen laufenden Anruf</li>
- <li>currentFlowsetUpdate - fürt ein Flowset/Tasker-Projekt update auf dem Device durch</li>
- <li>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</li>
- <li>installFlowSource - installiert einen Flow auf dem Device, <u>das XML File muss unter /tmp/ liegen und die Endung xml haben</u>. <b>Bsp:</b> <i>set TabletWohnzimmer installFlowSource WlanUebwerwachen.xml</i> (nur Automagic)</li>
- <li>mediaPlay - play Befehl zur Media App</li>
- <li>mediaStop - stop Befehl zur Media App</li>
- <li>mediaNext - nächster Titel Befehl zur Media App</li>
- <li>mediaBack - vorheriger Titel zur Media App</li>
- <li>nextAlarmTime - setzt die Alarmzeit. gilt aber nur innerhalb der nächsten 24Std.</li>
- <li>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</li>
- <li>screenBrightness - setzt die Bildschirmhelligkeit, von 0-255.</li>
- <li>screenMsg - versendet eine Bildschirmnachricht</li>
- <li>sendintent - sendet einen Intentstring <u>Bsp:</u><i> set $AMADDeviceDEVICE sendIntent org.smblott.intentradio.PLAY url http://stream.klassikradio.de/live/mp3-192/stream.klassikradio.de/play.m3u name Klassikradio</i>, der erste Befehl ist die Aktion und der zweite das Extra. Es können immer zwei Extras mitgegeben werden.</li>
- <li>sendSMS - sendet eine SMS an eine bestimmte Telefonnummer. Bsp.: sendSMS Dies ist ein Test|555487263</li>
- <li>startDaydream - startet den Daydream</li>
- <li>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.</li>
- <li>timer - setzt einen Timer innerhalb der als Standard definierten ClockAPP auf dem Device. Es können nur Minuten angegeben werden.</li>
- <li>ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird (um die Sprache für diese eine Durchsage zu ändern setze vor Deinem eigentlichen Text &en; oder &de;)</li>
- <li>userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows/Tasker-Profile,<b><i>set Nexus7Wohnzimmer Badezimmer vorheizen:inactive</i> oder <i>set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive</i></b></li>
- <li>userFlowRun - führt den angegebenen Flow/Task aus</li>
- <li>vibrate - lässt das Androidgerät vibrieren</li>
- <li>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.</li>
- <li>volumeUp - erhöht die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.</li>
- <li>volumeDown - reduziert die Lautstärke um den angegeben Wert im entsprechenden Attribut. Ist kein Attribut angegeben wird per default 2 genommen.</li>
- <li>volumeNotification - setzt die Benachrichtigungslautstärke.</li>
- </ul>
- <br>
- <b>Set abhängig von gesetzten Attributen</b>
- <ul>
- <li>changetoBtDevice - wechselt zu einem anderen Bluetooth Gerät. <b>Attribut setBluetoothDevice muß gesetzt sein. Siehe Hinweis unten!</b> (nur Automagic)</li>
- <li>notifySndFile - spielt die angegebene Mediadatei auf dem Androidgerät ab. <b>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.</b></li>
- <li>nfc - schaltet nfc an oder aus /on/off<b>Attribut root</b></li>
- <li>openApp - öffnet eine ausgewählte App. <b>Attribut setOpenApp</b></li>
- <li>openURL - öffnet eine URL im Standardbrowser, sofern kein anderer Browser über das <b>Attribut setOpenUrlBrowser</b> ausgewählt wurde.<b> Bsp:</b><i> attr Tablet setOpenUrlBrowser de.ozerov.fully|de.ozerov.fully.MainActivity, das erste ist der Package Name und das zweite der Class Name</i></li>
- <li>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. <b>Attribut setScreenOnForTimer</b> ändert die Zeit wie lange das Display an bleiben soll! (Tasker unterstützt nur "screen off")</li>
- <li>screenFullscreen - on/off, (aktiviert/deaktiviert) den Vollbildmodus. <b>Attribut setFullscreen</b></li>
- <li>screenLock - Sperrt den Bildschirm mit Pinabfrage. <b>Attribut setScreenlockPIN - hier die Pin dafür eingeben. Erlaubt sind nur Zahlen. Es müßen mindestens 4, bis max 16 Zeichen verwendet werden.</b></li>
- <li>screenOrientation - Auto,Landscape,Portait, aktiviert die Bildschirmausrichtung (Automatisch,Horizontal,Vertikal). <b>Attribut setScreenOrientation</b> (Tasker unterstützt nur Auto on/off)</li>
- <li>system - setzt Systembefehle ab (nur bei gerootetet Geräen). reboot,shutdown,airplanemodeON (kann nur aktiviert werden) <b>Attribut root</b>, in den Automagic Einstellungen muss "Root Funktion" gesetzt werden</li>
- <li>takePicture - löst die Kamera aus für ein Foto <b>Attribut setTakePictureResolution</b></li>
- </ul>
- <br><br>
- <a name="AMADDeviceattribute"></a>
- <b>Attribute</b>
- <ul>
- <li>setNotifySndFilePath - setzt den korrekten Systempfad zur Notifydatei (default ist /storage/emulated/0/Notifications/</li>
- <li>setTtsMsgSpeed - setzt die Sprachgeschwindigkeit bei der Sprachausgabe(Für Automagic: Werte zwischen 0.5 bis 4.0 in 0.5er Schritten, default:1.0)(Für Tasker: Werte zwischen 1 bis 10 in 1er Schritten, default:5)</li>
- <li>setTtsMsgLang - setzt die Sprache bei der Sprachausgabe, de oder en (default ist de)</li>
- <li>setTtsMsgVol - wenn gesetzt wird der Wert als neues Media Volume fü die Sprachansage verwendet und danach wieder der alte Wert eingestellt</li>
- <li>setVolUpDownStep - setzt den Step für volumeUp und volumeDown</li>
- <li>setVolMax - setzt die maximale Volume Gr&uoml;e für den Slider</li>
- <li>setNotifyVolMax - setzt den maximalen Lautstärkewert für Benachrichtigungslautstärke für den Slider</li>
- <li>setRingSoundVolMax - setzt den maximalen Lautstärkewert für Klingellautstärke für den Slider</li>
- <li>setAPSSID - setzt die AccessPoint SSID um ein WLAN sleep zu verhindern (nur Automagic)</li>
- <li>setTakePictureResolution - welche Kameraauflösung soll verwendet werden? (800x600,1024x768,1280x720,1600x1200,1920x1080)</li>
- <li>setTakePictureCamera - welche Kamera soll verwendet werden (Back,Front).</li>
- <br>
- Um openApp verwenden zu können, muss als Attribut der Package Name der App angegeben werden.
- <br><br>
- Um zwischen Bluetoothgeräten wechseln zu können, muß das Attribut setBluetoothDevice mit folgender Syntax gesetzt werden. <b>attr <DEVICE> BTdeviceName1|MAC,BTDeviceName2|MAC</b> 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<br>
- Beispiel: <i>attr Nexus10Wohnzimmer setBluetoothDevice Logitech_BT_Adapter|AB:12:CD:34:EF:32,Anker_A3565|GH:56:IJ:78:KL:76</i>
- </ul>
- <br><br>
- <a name="AMADDevicestate"></a>
- <b>state</b>
- <ul>
- <li>initialized - Ist der Status kurz nach einem define.</li>
- <li>active - die Geräteinstanz ist im aktiven Status.</li>
- <li>disabled - die Geräteinstanz wurde über das Attribut disable deaktiviert</li>
- </ul>
- <br><br><br>
- <u><b>Anwendungsbeispiele:</b></u>
- <ul><br>
- <a href="http://www.fhemwiki.de/wiki/AMADDevice#Anwendungsbeispiele">Hier verweise ich auf den gut gepflegten Wikieintrag</a>
- </ul>
- <br><br><br>
- </ul>
- =end html_DE
- =cut
|