[gelöst mit RasPi] Ideensammelthread, TV einschalten wenn Wake on Lan nicht geht

Begonnen von Rince, 10 Februar 2014, 15:52:01

Vorheriges Thema - Nächstes Thema

holzwurm83

Hallo Schlimbo,

Danke für das Feedback mit den begrenzten  Rechten!

Hast du das damit den Befehlen raus? Ich würde auch gerne die Lautstärke und die Kanäle vom TV schalten können aber irgendwie komme ich mit der CEC Befehlsseite nicht zum Erfolg.
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

Schlimbo

Hi holzwurm83,
so ganz habe ich das mit der Steuerung auch noch nicht raus, ich benötige momentan auch nur das Ein- und Ausschalten, da die restliche Steuerung von anderen Modulen übernommen wird. (PHTV, ENIGMA2, und Yamaha_AVR).

Hier mein aktueller Stand:

Eine Befehlsübersicht kann mit folgendem Befehl ausgegeben werden: "echo h | cec-client -s -d 1"
echo h | cec-client -s -d 1
opening a connection to the CEC adapter...

================================================================================
Available commands:

[tx] {bytes}              transfer bytes over the CEC line.
[txn] {bytes}             transfer bytes but don't wait for transmission ACK.
[on] {address}            power on the device with the given logical address.
[standby] {address}       put the device with the given address in standby mode.
[la] {logical address}    change the logical address of the CEC adapter.
[p] {device} {port}       change the HDMI port number of the CEC adapter.
[pa] {physical address}   change the physical address of the CEC adapter.
[as]                      make the CEC adapter the active source.
[is]                      mark the CEC adapter as inactive source.
[osd] {addr} {string}     set OSD message on the specified device.
[ver] {addr}              get the CEC version of the specified device.
[ven] {addr}              get the vendor ID of the specified device.
[lang] {addr}             get the menu language of the specified device.
[pow] {addr}              get the power status of the specified device.
[name] {addr}             get the OSD name of the specified device.
[poll] {addr}             poll the specified device.
[lad]                     lists active devices on the bus
[ad] {addr}               checks whether the specified device is active.
[at] {type}               checks whether the specified device type is active.
[sp] {addr}               makes the specified physical address active.
[spl] {addr}              makes the specified logical address active.
[volup]                   send a volume up command to the amp if present
[voldown]                 send a volume down command to the amp if present
[mute]                    send a mute/unmute command to the amp if present
[self]                    show the list of addresses controlled by libCEC
[scan]                    scan the CEC bus and display device info
[mon] {1|0}               enable or disable CEC bus monitoring.
[log] {1 - 31}            change the log level. see cectypes.h for values.
[ping]                    send a ping command to the CEC adapter.
[bl]                      to let the adapter enter the bootloader, to upgrade
                          the flash rom.
[r]                       reconnect to the CEC adapter.
[h] or [help]             show this help.
[q] or [quit]             to quit the CEC test client and switch off all
                          connected CEC devices.
================================================================================


wie oben zu sehen, sind die Befehle:
echo "on 0" | sudo cec-client -s -d 1
echo "standby 0" | sudo cec-client -s -d 1

einige wenige, die man so direkt eingaben kann.

Alle anderen Befehle werden über "tx" und einem Zahlencode gesteuert:
Beispiel "Lautstärke erhöhen":
echo "tx 40 44 41" | sudo cec-client -s -d 1

Beschreibung:
tx : transfer bytes over the CEC line
4 :  Sender --> Playback 1
0 :  Empfänger --> TV
44: Enables remote control commands to be passed through to other devices within the system.
41: Kommando --> Volume up

Die Befehle können auf http://www.cec-o-matic.com/ sehr einfach zusammengestellt werden.

Allerdings reagiert mein Fernseher auf sehr wenige dieser Kommandos. Aber damit kannst du ja mal etwas Testen.

Eine Beschreibung der Befehlszusammensetzung findest du auch unter: http://wiki.kwikwai.com/index.php?title=CEC_command_syntax

Gruß Schlimbo


Paul.baumann

Hallo zusammen,

ich nutze StreamRadio und habe meinen Raspberry via HDMI mit meinem Samsung AV-Receiver verbunden. Über CEC-Client kann ich nun den AVR einschalten und gleich den richtigen HDMI-Eingang aktivieren.

Anschließend werden aber keine weiteren Befehle vom CEC-Client verarbeitet. Erst wenn ich direkt am AVR einen anderen HDMI-Eingang auswähle, kann ich wieder erfolgreich Befehle senden und so den AVR z.B. ausschalten.

Hat jemand eine Idee, warum es nicht klappt, wenn am AVR der Eingang mit dem Raspberry aktiv ist?

Paul
FHEM auf Raspberry 3
MaxCube (V1.20.04 a-culfw) für HM, MaxCube (V1.20.04 a-culfw) für diverse Max!, NanoCul 433/868, TinyTX-Nachbauten
Multiroom: mehrere Squeezelite-Clients auf Raspberry B+ und LMS auf QNap
Huger WM918 Wetterstation integriert
Tiao-Sprinkler (Open-Sprinkler) integriert

Rince

Wenn du das StreamRadio mal weg läßt, gehen dann mehr Befehle?
Noch alternativer:
Tipp doch mal die Befehle auf der Konsole ein. Vielleicht verrät dir die Ausgabe näheres?
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Paul.baumann

Auch ohne StreamRadio geht nicht mehr. Ich teste direkt in der Konsole.

Hier die Ausgabe für den Ausschaltbefehl, wenn es nicht geht:

Zitat
DEBUG:   [            1019]     << Recorder 1 (1) -> Audio (5): POLL
TRAFFIC: [            1019]     << 15
TRAFFIC: [            1111]     << 15
DEBUG:   [            1202]     >> POLL not sent
DEBUG:   [            1202]     Audio (5): device status changed into 'not present'
NOTICE:  [            1203]     << putting 'Audio' (5) in standby mode
DEBUG:   [            1203]     not sending command 'standby': destination device 'Audio' marked as not present
DEBUG:   [            1203]     unregistering all CEC clients

So sieht es aus wenn es geht:

Zitat
DEBUG:   [            1167]     expected response received (90: report power status)
DEBUG:   [            1169]     << Recorder 1 (1) -> Audio (5): POLL
TRAFFIC: [            1170]     << 15
DEBUG:   [            1231]     >> POLL sent
DEBUG:   [            1231]     Audio (5): device status changed into 'present'
DEBUG:   [            1231]     << requesting vendor ID of 'Audio' (5)
TRAFFIC: [            1232]     << 15:8c
TRAFFIC: [            1425]     >> 5f:87:00:00:f0
DEBUG:   [            1425]     >> Audio (5) -> Broadcast (F): device vendor id (87)
DEBUG:   [            1425]     Audio (5): vendor = Samsung (0000f0)
DEBUG:   [            1427]     expected response received (87: device vendor id)
DEBUG:   [            1428]     replacing the command handler for device 'Audio' (5)
NOTICE:  [            1428]     << putting 'Audio' (5) in standby mode
TRAFFIC: [            1429]     << 15:36
DEBUG:   [            1490]     unregistering all CEC clients

Nachtrag:
Es funktioniert!
Das 4. HDMI-Kabel brachte den Erfolg.


Danke Paul
FHEM auf Raspberry 3
MaxCube (V1.20.04 a-culfw) für HM, MaxCube (V1.20.04 a-culfw) für diverse Max!, NanoCul 433/868, TinyTX-Nachbauten
Multiroom: mehrere Squeezelite-Clients auf Raspberry B+ und LMS auf QNap
Huger WM918 Wetterstation integriert
Tiao-Sprinkler (Open-Sprinkler) integriert

aliate

Guten Abend,

hat hier jemand das Ganze schon mit einem LG TV hinbekommen?
Ich habe einen LG LA6918 und möchte diesen auch über meinen Raspberry Pi (in Verbindung mit fhem) steuern.  Auf dem Raspberry habe ich libcec nach der hier geposteten Anleitung installiert, doch leider macht mein TV beim absetzten der Befehle über die ssh Terminalverbindung nichts.

Im Internet habe ich schon mehrere Anleitungen und "Befehlsschreibweisen" versucht, außerdem habe ich vier verschiedene HDMI-Kabel an allen möglichen HDMI-Anschlüssen des TV's getestet.

Beim Absetzen dieses Befehls echo "standby 0" | cec-client -s erhalte ich folgende Rückmeldung:

opening a connection to the CEC adapter...
DEBUG:   [              95]     unregistering all CEC clients
DEBUG:   [              96]     Broadcast (F): osd name set to 'Broadcast'
DEBUG:   [              98]     InitHostCEC - vchiq_initialise succeeded
DEBUG:   [              99]     InitHostCEC - vchi_initialise succeeded
DEBUG:   [             100]     InitHostCEC - vchi_connect succeeded
DEBUG:   [             102]     logical address changed to Free use (e)
DEBUG:   [             103]     Open - vc_cec initialised
NOTICE:  [             104]     connection opened
DEBUG:   [             106]     << Broadcast (F) -> TV (0): POLL
DEBUG:   [             107]     initiator 'Broadcast' is not supported by the CEC adapter. using 'Free use' instead
TRAFFIC: [             110]     << e0
DEBUG:   [             112]     processor thread started
DEBUG:   [             172]     >> POLL sent
DEBUG:   [             173]     TV (0): device status changed into 'present'
DEBUG:   [             174]     << requesting vendor ID of 'TV' (0)
TRAFFIC: [             175]     << e0:8c
TRAFFIC: [             385]     >> 0f:87:00:e0:91
DEBUG:   [             386]     >> TV (0) -> Broadcast (F): device vendor id (87)
DEBUG:   [             387]     TV (0): vendor = LG (00e091)
DEBUG:   [             388]     expected response received (87: device vendor id)
DEBUG:   [             389]     replacing the command handler for device 'TV' (0)
DEBUG:   [             390]     TV (0): CEC version 1.3a
DEBUG:   [             391]     TV (0): menu language set to 'eng'
NOTICE:  [             392]     registering new CEC client - v2.2.0
DEBUG:   [             394]     detecting logical address for type 'recording device'
DEBUG:   [             395]     trying logical address 'Recorder 1'
DEBUG:   [             396]     << Recorder 1 (1) -> Recorder 1 (1): POLL
TRAFFIC: [             397]     << 11
TRAFFIC: [             488]     << 11
TRAFFIC: [             609]     >> 0e:8c
DEBUG:   [             610]     >> POLL not sent
DEBUG:   [             611]     using logical address 'Recorder 1'
DEBUG:   [             611]     Recorder 1 (1): device status changed into 'handled by libCEC'
DEBUG:   [             612]     Recorder 1 (1): power status changed from 'unknown' to 'on'
DEBUG:   [             613]     Recorder 1 (1): vendor = Pulse Eight (001582)
DEBUG:   [             614]     Recorder 1 (1): CEC version 1.4
DEBUG:   [             614]     AllocateLogicalAddresses - device '0', type 'recording device', LA '1'
DEBUG:   [             616]     logical address changed to Recorder 1 (1)
DEBUG:   [             616]     Recorder 1 (1): osd name set to 'CECTester'
DEBUG:   [             617]     Recorder 1 (1): menu language set to 'eng'
DEBUG:   [             619]     GetPhysicalAddress - physical address = 3000
DEBUG:   [             619]     AutodetectPhysicalAddress - autodetected physical address '3000'
DEBUG:   [             619]     Recorder 1 (1): physical address changed from ffff to 3000
DEBUG:   [             620]     << Recorder 1 (1) -> broadcast (F): physical adddress 3000
TRAFFIC: [             621]     << 1f:84:30:00:01
NOTICE:  [             773]     CEC client registered: libCEC version = 2.2.0, client version = 2.2.0, firmware version = 1, logical address(es) = Recorder 1 (1) , physical address: 3.0.0.0, host: armv6l-unknown-linux-gnueabihf, features: 'P8 USB' 'P8 USB detect' 'RPi' 'EXYNOS', git revision: b3d938a, compiled on: Tue Mar  3 19:26:37 UTC 2015 by root@raspberrypi on Linux 3.18.7+ (armv6l)
DEBUG:   [             775]     Recorder 1 (1): vendor = LG (00e091)
DEBUG:   [             776]     replacing the command handler for device 'Recorder 1' (1)
DEBUG:   [             776]     Recorder 1 (1): CEC version 1.3a
DEBUG:   [             777]     << Recorder 1 (1) -> TV (0): OSD name 'CECTester'
TRAFFIC: [             777]     << 10:47:43:45:43:54:65:73:74:65:72
TRAFFIC: [            1109]     >> 01:8f
DEBUG:   [            1109]     >> TV (0) -> Recorder 1 (1): give device power status (8F)
DEBUG:   [            1110]     << Recorder 1 (1) -> TV (0): on
TRAFFIC: [            1110]     << 10:90:00
DEBUG:   [            1114]     << requesting power status of 'TV' (0)
TRAFFIC: [            1352]     >> 0f:87:00:e0:91
DEBUG:   [            1353]     >> TV (0) -> Broadcast (F): device vendor id (87)
DEBUG:   [            1354]     << Recorder 1 (1) -> Broadcast (F): vendor id LG (e091)
TRAFFIC: [            1355]     << 1f:87:00:e0:91
TRAFFIC: [            1537]     >> 01:8c
DEBUG:   [            1539]     >> TV (0) -> Recorder 1 (1): give device vendor id (8C)
TRAFFIC: [            1538]     << 10:8f
DEBUG:   [            1691]     << Recorder 1 (1) -> TV (0): vendor id LG (e091)
TRAFFIC: [            1692]     << 1f:87:00:e0:91
TRAFFIC: [            1904]     >> 01:1a:01
DEBUG:   [            1905]     >> TV (0) -> Recorder 1 (1): give deck status (1A)
DEBUG:   [            1906]     >> Recorder 1 (1): deck status changed from 'stop' to 'LG other'
DEBUG:   [            1907]     << Recorder 1 (1) -> TV (0): deck status 'LG other'
TRAFFIC: [            1908]     << 10:1b:20
TRAFFIC: [            2089]     >> 01:46
DEBUG:   [            2089]     >> TV (0) -> Recorder 1 (1): give osd name (46)
DEBUG:   [            2090]     << Recorder 1 (1) -> TV (0): OSD name 'CECTester'
TRAFFIC: [            2091]     << 10:47:43:45:43:54:65:73:74:65:72
TRAFFIC: [            2452]     >> 01:89:01
DEBUG:   [            2453]     >> TV (0) -> Recorder 1 (1): vendor command (89)
DEBUG:   [            2454]     Recorder 1 (1): power status changed from 'on' to 'standby'
DEBUG:   [            2455]     << Recorder 1 (1) -> TV (0): standby
TRAFFIC: [            2456]     << 10:90:01
TRAFFIC: [            2607]     << 10:89:02:05
DEBUG:   [            2694]     expected response not received (90: report power status)
TRAFFIC: [            2819]     << 10:8f
NOTICE:  [            2821]     SL initialised
TRAFFIC: [            3001]     >> 01:90:00
DEBUG:   [            3002]     >> TV (0) -> Recorder 1 (1): report power status (90)
DEBUG:   [            3003]     TV (0): power status changed from 'unknown' to 'on'
DEBUG:   [            3004]     expected response received (90: report power status)
NOTICE:  [            3006]     << putting 'TV' (0) in standby mode
TRAFFIC: [            3007]     << 10:36
DEBUG:   [            3158]     unregistering all CEC clients
NOTICE:  [            3160]     unregistering client: libCEC version = 2.2.0, client version = 2.2.0, firmware version = 1, logical address(es) = Recorder 1 (1) , physical address: 3.0.0.0, host: armv6l-unknown-linux-gnueabihf, features: 'P8 USB' 'P8 USB detect' 'RPi' 'EXYNOS', git revision: b3d938a, compiled on: Tue Mar  3 19:26:37 UTC 2015 by root@raspberrypi on Linux 3.18.7+ (armv6l)
DEBUG:   [            3161]     Recorder 1 (1): power status changed from 'standby' to 'unknown'
DEBUG:   [            3162]     Recorder 1 (1): vendor = Unknown (000000)
DEBUG:   [            3162]     Recorder 1 (1): CEC version unknown
DEBUG:   [            3163]     Recorder 1 (1): osd name set to 'Recorder 1'
DEBUG:   [            3164]     Recorder 1 (1): device status changed into 'unknown'
TRAFFIC: [            3165]     >> 01:46
DEBUG:   [            3166]     >> TV (0) -> Recorder 1 (1): give osd name (46)
TRAFFIC: [            3167]     >> 01:89:01
DEBUG:   [            3167]     >> TV (0) -> Recorder 1 (1): vendor command (89)
TRAFFIC: [            3169]     >> 0f:87:00:e0:91
DEBUG:   [            3170]     >> TV (0) -> Broadcast (F): device vendor id (87)
TRAFFIC: [            3172]     >> 01:1a:01
DEBUG:   [            3169]     unregistering all CEC clients
DEBUG:   [            3173]     >> TV (0) -> Recorder 1 (1): give deck status (1A)
TRAFFIC: [            3218]     >> 01:8f
DEBUG:   [            3219]     >> TV (0) -> Recorder 1 (1): give device power status (8F)
TRAFFIC: [            3339]     >> 01:90:00
DEBUG:   [            3339]     >> TV (0) -> Recorder 1 (1): report power status (90)
TRAFFIC: [            3459]     >> 01:00:36:04
DEBUG:   [            3459]     >> TV (0) -> Recorder 1 (1): feature abort ( 0)
DEBUG:   [            3460]     marking opcode 'standby' as unsupported feature for device 'TV'
DEBUG:   [            4117]     UnregisterLogicalAddress - releasing previous logical address
DEBUG:   [            4119]     logical address changed to Broadcast (f)


Beim Absetzen dieses Befehls echo "pow 0" | sudo cec-client -s -d 1  (Power-Status auslesen) erhalte ich folgende Rückmeldung:


opening a connection to the CEC adapter...
power status: on


Dieser Befehl funktioniert also bzw. der Status des Fernsehers wird korrekt ausgelesen.

CEC bzw. Simplink ist aktiviert und der Raspi wird auch (zumindest zeitweise) als "CECTester" im TV ausgewiesen.


Evtl. kann mir jemand helfen bzw. was mit der obigen Rückmeldung anfangen.

Vielen Dank und schöne Grüße

Hermann

Sailor

Hallo Rince

Zitat von: Rince am 10 März 2014, 17:01:16
Einschalten
echo "on 0" | cec-client -s
(er schaltet übrigens dabei gleich in den TV Modus, man muss also nicht mal hinterher irgend etwas umstellen)


Ausschalten
echo "standby 0" | cec-client -s


Damit sollte das lästige Problem:
Wie kann fhem den Fernseher einschalten erledigt sein :)

Schön wäre, wenn noch Besitzer anderer Marken das ausprobieren könnten.

Also einschalten geht, aber in StandBy kriege ich meinen Fernseher dannach nicht mehr.  :o

Gruss
    Sailor
******************************
Man wird immer besser...

Rince

Ich muss gestehen, ich hab grad keinen RasPi mit Debian an einer Glotze hängen.

Muss in meinen 2 Jahre alten Erinnerungen suchen:
Hast du mal ein paar andere Befehle ausprobiert?
Weiterhin musst du dem Fernseher explizit erlauben, mit sich mit CEC steuern zu lassen (wie auch immer dein TV Hersteller CNC nennt; Anynet z.B.)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

harald654

Hallo,

bei mir funktionieren die Befehle über SSH (Putty):
echo "on 0" | sudo cec-client -s -d 1
echo "standby 0" | sudo cec-client -s -d 1


Mir ist nur nicht klar wie ich die Befehle mit FHEM absetzen kann.
Wie macht ihr das?


Gruß,
H

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

harald654

Hallo justme1968,

mir geht es darum wie man überhaupt solche befehle mittels FHEM senden kann, gibt es hierfür ein Modul?

Gruß,
H.

Otto123

Zitat von: harald654 am 25 November 2016, 00:01:15
Hallo justme1968,

mir geht es darum wie man überhaupt solche befehle mittels FHEM senden kann, gibt es hierfür ein Modul?

Gruß,
H.
Genauso wie justme1968 geschrieben hat, hier nachlesen -> http://fhem.de/commandref_DE.html#command

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

harald654

Hallo Otto,

ich versteh es leider immer noch nicht  :-\
Bis jetzt habe ich versucht den Befehle über die Eingabeleiste (oben) zu senden, das scheint aber nicht zu funktionieren.
Im Log steht:
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

sudo: no tty present and no askpass program specified

nach dem ich fhem rootrechte vergeben habe (/etc/sudoers):
fhem ALL=(ALL) NOPASSWD: ALL
steht nun im Log:
opening a connection to the CEC adapter...
aber nichts passiert.
wenn ich in der Eingabeleiste:
{`echo "on 0" | sudo cec-client -s -d 1`}
eingebe, hängst sich FHEM komplett auf.


Edit: ok, mit den Befehlen:
"echo "on 0" | sudo cec-client -s -d 1"
"echo "standby 0" | sudo cec-client -s -d 1"

geht es jetzt  :)

Otto123

Hallo harald654,
Naja hat ja keiner gesagt, dass was in der Eingabezeile vom Terminal schon nicht geht, aus FHEM heraus gehen wird  ;D

Es ist keine gute Idee fehm zum "Dauer sudo" zu machen. Das ist ein dünnes Brett ...

Besser ist es mit ordentlichen Berechtigungen zu arbeiten, ich denke, dass man das auch mit dem cec-client hinbekommt.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz