98_FireTV: Fernbedienung eines Amazon FireTV per adb

Begonnen von nesges, 09 März 2017, 18:04:40

Vorheriges Thema - Nächstes Thema

duke-f

Zitat von: MadMax-FHEM am 16 Februar 2019, 11:21:35
Läuft bzw. laufen deine fhem überhaupt unter dem User fhem?
Gruß, Joachim
Ja, tut es / tun sie.

Zum OT:
Was man sich nunmal über Jahrzehnte dummerweise angewohnt hat.... Grundsätzlich hast Du selbstverständlich absolut recht. Hatte gerade die Tage eine annähernd in diese Kathegorie fallende Situation: Ich habe ein weiteres Slave-FHEM auf einem virtuellen Debian, das eine Verknüpfung zur Device über einen USB-WLAN-Konverter regelt. Leider passiertes alle paar Tag, dass die Verbindung nicht mehr selbstständig nach einem Abbruch wieder hergestellt wird. Habe mir für diesen Fall ein Script geschrieben, dass dann den Service restartet - da hatte ich mir etwas mit den Berechtigungen die Zähne ausgebissen, und da musste ich dann eben auch auf diesem System fhem zu den sodoern zufügen.

@87insane: Hast Du doch einige Posts weiter oben. Allerdings noch nicht als "superuser" fhem.
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite

87insane


duke-f

"superuser" fhem hilft nicht. Zwar dar der jetzt auf der Konsole bedienen, aber FHEM hat immer noch keine Wirkung.

Danke für den Link, sehe ich mir an.
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite

duke-f

Ich gebe ja noch nicht auf. Mein Problem kann nicht an den Rechten liegen, da ich es im Terminal bedienen kann. Nun hatte ich die Idee, statt
apt-get install android-tools-adb
mal die Version mit
DeepSilence/adb-arm
zu versuchen - und bin da schon mit der Installation gescheitert. Vor ich weiter mache erlaube ich mir mal die einfache Frage: Hat das jemand schon erfolgreich hier installiert?
Ich bekomme eine riesige Liste mit Warnungen wie:

cc1: warning: command line option '-std=c++11' is valid for C++/ObjC++ but not for C

und am Ende:

make: *** No rule to make target 'list.h', needed by 'adb'.  Stop.

>> Copying adb back into current dir...

cp: cannot stat 'adb': No such file or directory

>> FINISH!

Habe auch mal einfach die Zeile mit dem
-std=c++11
gelöscht, das hilt aber am Ende auch nicht.
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite

duke-f

Ok, die Lösung liegt offensichtlich wirklich bei den Rechten. Post #38 gibt die Lösung.
Schlagt mich jetzt nicht, sicher wurde das auch schon von jemandem erwähnt (so beispielsweise @MadMax-FHEM, der mich auf die Spur gebracht hat.)
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite

slor

Hallo zusammen,
kann ich mit diesem Modul erkennen, ob der FireTV Stick aktiv genutzt wird oder ob er "aus" ist? Also ob der daran hängende TV aus ist. Den schalte ich via FireTV Fernbedienung an und aus. Der Stick hängt dauerhaft am Strom.

87insane

Ging wohl mal.. Auf Seite 8 fragte ich danach, da der State leider nicht mehr angezeigt wird.

tomcat.x

@slor:

Bei der von mir genutzten Version (Seite vorher von Markus M.) scheint das über screenState zu gehen. Der geht erst auf "standby" und dann auf "off".  Ich schreibe "scheint", weil ich das nicht nutze und daher nicht sagen kann, ob das zuverlässig ist. Sonst wäre currentApp vielleicht noch eine Option. Das ist bei Nichtnutzung der Launcher.
FHEM: 6.3 auf Raspi 3B+, Raspbian (Buster), Perl v5.28.1
Sender/Empfänger: 2 x CULv3, Duofern Stick, HM-MOD-RPI-PCB
Gateways: FRITZ!Box 6591 (OS: 8.00), Trädfri, ConBee 2,  piVCCU, OpenMQTTGateway
Sensoren/Aktoren: FRITZ!DECT, FS20, FHT, HMS, HomeMatic, Trädfri, DuoFern, NetAtmo

onkel-tobi

Hi,

erst mal danke für das Modul.
Ich versuche das gerade zu verwenden um meine Ring Doorbell besser einzubinden.
Und zwar würde ich gerne, wenn es klingelt das aktuelle Bild auf dem TV wiedergeben.
Wenn ich mir anschaue wie die currentapp heißt bekomme ich: com.amazon.cardinal/com.amazon.android.uamp.ui.ContentRendererActivity

Die bekomme ich bei packages aber ncith angezeigt. Habe ich eine chance das als Befehl auszuführen?
Ein dediziertes Paket auf dem firetv scheint es ja nicht mehr zu geben...

Danke & Gruß,
Tobi

KernSani

Hi zusammen,

bei mir liefert der PRESENCE check ein
PERL WARNING: Use of uninitialized value $seconds in addition (+) at ./FHEM/73_PRESENCE.pm line 1199.

Die folgenden zwei Zeilen in 98_FireTV schaffen Abhilfe:

   if($hash->{helper}{$name}{'PRESENCE_loaded'}) {
        # PRESENCE
        $hash->{NOTIFYDEV}          = "global,$name";
        $hash->{TIMEOUT_NORMAL}     = $param[4] || 30;
        $hash->{TIMEOUT_PRESENT}    = $param[5] || $hash->{TIMEOUT_NORMAL};
        $hash->{INTERVAL_NORMAL}  = $param[4] || 30; # ++KernSani
        $hash->{INTERVAL_PRESENT} = $param[5] || $hash->{INTERVAL_NORMAL}; # ++KernSani
        $hash->{MODE}               = $param[6] || 'lan-ping';
        $hash->{ADDRESS}            = $param[7] || $hash->{IP};



Grüße und Schöne Feiertage,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KernSani

Als Ergänzung noch:
* Nach der o.g. Anpassung ist ein defmod auf das FireTV Device notwendig (die Werte werden in der define-Routine gesetzt) und weil ich gerade dabei bin, hier meine angepasste screen_state-Routine, die etwas optimiert ist bez. Performance und (in einigen definierten Fällen) ein weiteres Reading mit der gerade laufenden Anwendung befüllt:


sub FireTV_screen_state($) {
    my $hash = shift;
    my $name = $hash->{NAME};

    my $screen_state;
    my $screen_app = "-";

    if ( !FireTV_connect($hash) ) {
        Log3 $name, 3, "[$name] error: " . $hash->{helper}{$name}{'lastadbresponse'};
    }

    my $dump = FireTV_dumpsys( $hash, "power" );

    if ( $dump =~ "error" ) {
        Log3 $name, 3, "[$name] Connection error";
        readingsSingleUpdate( $hash, "lastError", $dump, 0 );
        return $dump;
    }
    elsif ( !$dump =~ 'Display Power: state=ON' ) {
        $screen_state = 'off';
    }
    elsif ( $dump =~ "mWakefulness=Dreaming" ) {
        $screen_state = 'daydream';
    }
    elsif ( $dump =~ "mWakefulness=Asleep" ) {
        $screen_state = 'standby';
    }
    elsif ( $dump =~ "mWakefulness=Awake" ) {
        my $window = FireTV_currentFocus($hash);
        Log3 $name, 5, "------------>" . $window;
        if ( $window =~ /mCurrentFocus.*youtube.*/gm ) {
            $screen_state = 'playing';
            $screen_app   = "youtube";
        }
        elsif ( $window =~ /.*com.amazon.tv.launcher.*/ ) {
            $screen_state = 'home';
        }
        elsif ( $window =~ /com.amazon.avod.*/ ) {
            $screen_state = 'playing';
            $screen_app   = "video";
        }
        elsif ( $window =~ /.*parentalcontrols.*/ ) {
            $screen_state = 'pin';
        }
        else {
            $screen_state = 'playing';
            $screen_app   = "unknown";
        }
    }
    else {
        $screen_state = 'unknown';
    }

    # if(! FireTV_dumpsys_has($hash, 'power', 'Display Power: state=ON')) {
    # $screen_state = 'off';
    # } elsif(! FireTV_dumpsys_has($hash, 'power', 'mWakefulness=Awake')) {
    # if(FireTV_currentFocus($hash) =~ /^dream$/) {
    # $screen_state = 'daydream';
    # } else {
    # $screen_state = 'idle';
    # }
    # } elsif(FireTV_currentFocus($hash) =~ /^com.amazon.tv.launcher/) {
    # $screen_state = 'standby'
    # } elsif(! FireTV_dumpsys_has($hash, 'power', 'Locks: size=0')) {
    # $screen_state = 'playing'
    # } else {
    # $screen_state = 'paused'
    # }

    readingsSingleUpdate( $hash, "screen_state", $screen_state, 1 );
    readingsSingleUpdate( $hash, "screen_app",   $screen_app,   1 );
    return $screen_state;
}
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

mister

ICh habe die beiden Befehle aus dem ersten Post ausgeführt und den sh adb-download-make.sh im Ordner adb.

Nach dem Define hat er mir das angelegt:

DB /usr/local/bin/adb
ADBVERSION Permission denied
ADDRESS 192.168.1.4
CFGFN
DEF
192.168.178.3 /usr/local/bin/adb
FUUID ...
IP 192.168.1.4
MODE lan-ping
NAME FIRETV
NOTIFYDEV global,FIRETV
NR 133
NTFY_ORDER 50-FIRETV
OSVERSION
PORT 5555
SERIAL
STATE present
TIMEOUT_NORMAL 30
TIMEOUT_PRESENT 30
TRIGGERTIME 0
TRIGGERTIME_FMT
TYPE FireTV
VERSION 0.6.1
adbconnected 1


Was habe ich falsch gemacht da sich ein Permission denied erhalte?

Eistee

Hast dem fhem Benutzer keine Berechtigung gegeben adb auszuführen.

mister

Kann ich diesen Hinweis im Event Monitor abstellen? Warum kommt dieser überhaupt dauerhaft wieder?



2020-03-26 17:27:57 FireTV FIRETV presence: present
2020-03-26 17:28:00 FireTV FIRETV present
2020-03-26 17:28:00 FireTV FIRETV presence: present

mister

Zitat von: Eistee am 23 März 2020, 14:23:21
Hast dem fhem Benutzer keine Berechtigung gegeben adb auszuführen.

Danke für den Hinweis, es lag letztendlich daran das ich einen Pfad angegeben habe. Wenn ich nur die IP beim Define anlege ist alles gut.