HDMI CEC Einstellung für VU, Samsung TV und LG AV Receiver

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Leider hab ich keinen Rasperry :S

      Also wenn ich den TV anmache (hab linke Taste der VU Fernbedienung jetzt auf den Samsung eingestellt), geht der LG AV Receiver sofort an....es ist echt verhext. Ja wenn die Werte im log auftauchen, das wäre jetzt das letzte, stimmt.

      Das log landet unter /tmp oder?
    • @IchKannDenken Kannst du mir verraten welcher Wert in der .py für das einschalten des AV Receivers verantwortlich ist?

      Gibt es eine Liste die man quasi abarbeiten kann wo solche Werte vermerkt sind?

      Dann würd ich einfach mal gewisse Werte durchprobieren, neu booten und dann mal schauen ob der AV Reveiver doch noch sich einschalten lässt :8|
    • So dann schauen wir doch mal, ob wir den LG ans fliegen bekommen...
      Aktuell sendet das Plugin entweder die Nachricht 44:65 (Einstellung "normaler" AV) oder 89:06:02 (Einstellung "LG A/V Wakup") an die Adresse 5.
      44:65 ist eine User Remote Action (alsob du auf ner Ferbedienung Power On drückst), 89:06:02 ist eine Herstellerspezifische Nachricht die damals für mein altes LG HT System verwendet wurde.
      Man könnte mal versuchen das Kommando 0x70 an den AV zu senden.
      Ich würde mal testhalber in der plugin.py in der Funktion keyOK(self) den Abschnitt, der verwendet wird um den AV über das Plugin Einstellungsmenü zu starten, ändern:

      Quellcode

      1. elif self["config"].getCurrent() == self.hdmiavpwron:
      2. address = int("5",16)
      3. cecmessage = int("44",16)
      4. cecmessagetwo = int("6D",16)
      5. cmd = struct.pack('BB',cecmessage,cecmessagetwo)
      6. logcmd = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
      Das würde ich wie folgt ändern:

      Quellcode

      1. elif self["config"].getCurrent() == self.hdmiavpwron:
      2. address = int("5",16)
      3. cecmessage = int("70",16)
      4. cecmessagetwo = int("10",16)
      5. cecmessagethree = int("0",16)
      6. cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
      7. logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)

      In dem Fall würde er die Nachricht 70:10:00 senden, wobei 10:00 für den HDMI Eingang steht, an dem die VU hängt (müsste also vielleicht noch angepasst werden).
      Laut CEC Spezifikation sollte ein AVR bei der Nachricht 0x70 aus dem Standby kommen.
      Natürlich darauf achten, dass du TAB-Stopps einhältst ;)
      Nach nem GUI Neustart kannst du dann mal schauen, ob die Funktion "AV Einschalten" im Plugin den AVR einschaltet.
      Vorher natürlich die Python Datei sichern.

      Kommandos gibt es gar nicht so viele, ich schau da immer auf cec-o-matic oder in HDMI 1.3a Spezifikation.
    • @IchKannDenken So, es hat nicht funktioniert :/

      Was habe ich gemacht, Ich habe als erstes die HdmiCec.py die du mir gegeben hast, korrekt durch die alte ersetzt. Dies allein hat j nicht geklappt, aber sie trotzdem dort gelassen und nicht wieder durch die originale ersetzt.

      Dann habe ich die entsprechenden Einträge in der plugin.py abgeändert und dann gui reboot gemacht, dann ausgeschaltet (dies klappt ja mit allen Geräten) und nach 10 Sekunden wieder eingeschaltet. Der verfluchte Av Receiver startet nicht mit ?(

      Mit TAB Stops habe ich jetzt nicht gearbeitet, aber ich hab quasi vorhandene Zeilen kopiert und dann entsprechend abgeändert.

      Ich häng die Datei hier mal an, vielleicht habe ich doch was falsch gemacht.

      Spoiler anzeigen

      Quellcode

      1. # -*- coding: utf-8 -*-
      2. # maintainer: <plnick@vuplus-support.org>
      3. #This plugin is free software, you are allowed to
      4. #modify it (if you keep the license),
      5. #but you are not allowed to distribute/publish
      6. #it without source code (this version and your modifications).
      7. #This means you also have to distribute
      8. #source code of your modifications.
      9. import struct
      10. from enigma import eActionMap, eHdmiCEC
      11. from Plugins.Plugin import PluginDescriptor
      12. from Components.ActionMap import ActionMap,NumberActionMap
      13. from Components.config import config, getConfigListEntry, ConfigInteger, ConfigSubsection, ConfigSelection, ConfigText, ConfigYesNo, NoSave, ConfigNothing
      14. from Components.ConfigList import ConfigListScreen
      15. from Components.InputDevice import iInputDevices
      16. from Components.Sources.StaticText import StaticText
      17. from Screens.Screen import Screen
      18. from Screens.MessageBox import MessageBox
      19. from Tools import Notifications
      20. from HdmiCec import HdmiCec
      21. from os import system
      22. from __init__ import _
      23. hdmi_cec = HdmiCec()
      24. class HdmiCecPlugin(Screen,ConfigListScreen):
      25. skin = """
      26. <screen name="HDMICEC" position="center,center" size="700,400" title="VTI HDMI-CEC Plugin" >
      27. <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
      28. <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
      29. <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
      30. <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
      31. <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ececec" backgroundColor="#9f1313" transparent="1" />
      32. <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ececec" backgroundColor="#1f771f" transparent="1" />
      33. <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ececec" backgroundColor="#1f771f" transparent="1" />
      34. <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ececec" backgroundColor="#1f771f" transparent="1" />
      35. <widget name="config" zPosition="2" position="5,50" size="650,300" scrollbarMode="showOnDemand" transparent="1" />
      36. </screen>"""
      37. def __init__(self, session):
      38. Screen.__init__(self, session)
      39. config.hdmicec.input_address = ConfigText(default = "0", visible_width = 50, fixed_size = False)
      40. config.hdmicec.input_value1 = ConfigText(default = "0", visible_width = 50, fixed_size = False)
      41. config.hdmicec.input_value2 = ConfigText(default = "", visible_width = 50, fixed_size = False)
      42. config.hdmicec.input_value3 = ConfigText(default = "", visible_width = 50, fixed_size = False)
      43. config.hdmicec.input_value4 = ConfigText(default = "", visible_width = 50, fixed_size = False)
      44. config.hdmicec.avvolup = NoSave(ConfigNothing())
      45. config.hdmicec.avvoldown = NoSave(ConfigNothing())
      46. config.hdmicec.avvolmute = NoSave(ConfigNothing())
      47. config.hdmicec.avpwroff = NoSave(ConfigNothing())
      48. config.hdmicec.avpwron = NoSave(ConfigNothing())
      49. config.hdmicec.tvpwroff = NoSave(ConfigNothing())
      50. config.hdmicec.tvpwron = NoSave(ConfigNothing())
      51. self["key_red"] = StaticText(_("Close"))
      52. self["key_green"] = StaticText(_("Save"))
      53. self["key_yellow"] = StaticText(_("Connect"))
      54. self["key_blue"] = StaticText(_("Disconnect"))
      55. self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions", "NumberActions" ],
      56. {
      57. "ok": self.keyOk,
      58. "cancel": self.keyCancel,
      59. "red": self.keyCancel,
      60. "green": self.keySave,
      61. "yellow": self.keyConnect,
      62. "blue": self.keyDisconnect,
      63. }, -2)
      64. self.list = []
      65. ConfigListScreen.__init__(self, self.list,session = session)
      66. self.createSetup()
      67. def createSetup(self):
      68. self.list = []
      69. self.hdmienabled = getConfigListEntry(_(_("HDMI CEC enabled:")), config.hdmicec.enabled)
      70. self.hdmidisabledtimerwakeup = getConfigListEntry(_(_("Disable power on actions for timer:")), config.hdmicec.disabletimerwakeup)
      71. self.hdmiactivesourcereply = getConfigListEntry(_(_("Active Source Reply On:")), config.hdmicec.active_source_reply)
      72. self.hdmitvstandby = getConfigListEntry(_("VU+ standby => TV activity:"), config.hdmicec.standby_message)
      73. self.hdmitvdeepstandby = getConfigListEntry(_("VU+ deepstandby => TV activity:"), config.hdmicec.deepstandby_message)
      74. self.hdmitvwakeupstandby = getConfigListEntry(_("VU+ on from standby => TV activity:"), config.hdmicec.wakeupstandby_message)
      75. self.hdmitvwakeupdeepstandby = getConfigListEntry(_("VU+ on from deepstandby => TV activity:"), config.hdmicec.wakeupdeepstandby_message)
      76. self.hdmivustandby = getConfigListEntry(_("TV standby => VU+ activity:"), config.hdmicec.vustandby_message)
      77. self.hdmivuwakeup = getConfigListEntry(_("TV on => VU+ activity:"), config.hdmicec.vuwakeup_message)
      78. self.hdmitvinput = getConfigListEntry(_("Choose TV HDMI input:"), config.hdmicec.tvinput)
      79. self.hdmiavinput = getConfigListEntry(_("Choose A/V-Receiver HDMI input:"), config.hdmicec.avinput)
      80. self.hdmiavvolumecontrol = getConfigListEntry(_("Use A/V-Receiver for volume control:"), config.hdmicec.avvolumecontrol)
      81. self.hdmiavvolup = getConfigListEntry(_("A/V-Receiver volume up:"), config.hdmicec.avvolup)
      82. self.hdmiavvoldown = getConfigListEntry(_("A/V-Receiver volume down:"), config.hdmicec.avvoldown)
      83. self.hdmiavvolmute = getConfigListEntry(_("A/V-Receiver toggle mute:"), config.hdmicec.avvolmute)
      84. self.hdmiavpwron = getConfigListEntry(_("A/V-Receiver power on:"), config.hdmicec.avpwron)
      85. self.hdmiavpwroff = getConfigListEntry(_("A/V-Receiver power off:"), config.hdmicec.avpwroff)
      86. self.hdmitvpwron = getConfigListEntry(_("TV power on:"), config.hdmicec.tvpwron)
      87. self.hdmitvpwroff = getConfigListEntry(_("TV power off:"), config.hdmicec.tvpwroff)
      88. self.hdmienabletvrc = getConfigListEntry(_("Use TV remotecontrol:"), config.hdmicec.enabletvrc)
      89. self.hdmidevicename = getConfigListEntry(_("Set VU+ device name:"), config.hdmicec.device_name)
      90. self.hdmiinputaddress = getConfigListEntry(_("Address (0~FF):"), config.hdmicec.input_address)
      91. self.hdmiinputvalue1 = getConfigListEntry("Value 1 (message):", config.hdmicec.input_value1)
      92. self.hdmiinputvalue2 = getConfigListEntry("Value 2 (optional):", config.hdmicec.input_value2)
      93. self.hdmiinputvalue3 = getConfigListEntry("Value 3 (optional):", config.hdmicec.input_value3)
      94. self.hdmiinputvalue4 = getConfigListEntry("Value 4 (optional):", config.hdmicec.input_value4)
      95. self.hdmilogenabledfile = getConfigListEntry(_("Enable debug output to file :"), config.hdmicec.logenabledfile)
      96. self.hdmilogenabledserial = getConfigListEntry(_("Enable debug output to console :"), config.hdmicec.logenabledserial)
      97. self.hdmimessagedelay = getConfigListEntry(_("Delay between CEC messages :"), config.hdmicec.message_delay)
      98. # only used for testing
      99. # self.list.append( self.hdmiinputaddress )
      100. # self.list.append( self.hdmiinputvalue1 )
      101. # self.list.append( self.hdmiinputvalue2 )
      102. # self.list.append( self.hdmiinputvalue3 )
      103. # self.list.append( self.hdmiinputvalue4 )
      104. # self.list.append( self.hdmilogenabledfile )
      105. # end testing
      106. self.list.append( self.hdmienabled )
      107. if config.hdmicec.enabled.value is True:
      108. self.list.append( self.hdmidevicename )
      109. self.list.append( self.hdmitvinput )
      110. self.list.append( self.hdmiavinput )
      111. self.list.append( self.hdmivuwakeup )
      112. self.list.append( self.hdmivustandby )
      113. self.list.append( self.hdmitvwakeupstandby )
      114. self.list.append( self.hdmitvwakeupdeepstandby )
      115. self.list.append( self.hdmitvstandby )
      116. self.list.append( self.hdmitvdeepstandby )
      117. self.list.append( self.hdmidisabledtimerwakeup )
      118. self.list.append( self.hdmienabletvrc )
      119. self.list.append( self.hdmimessagedelay )
      120. if config.hdmicec.avinput.value is not "0":
      121. self.list.append( self.hdmiavvolumecontrol )
      122. self.list.append( self.hdmiavvolup )
      123. self.list.append( self.hdmiavvoldown )
      124. self.list.append( self.hdmiavvolmute )
      125. self.list.append( self.hdmiavpwron )
      126. self.list.append( self.hdmiavpwroff )
      127. self.list.append( self.hdmitvpwron )
      128. self.list.append( self.hdmitvpwroff )
      129. self.list.append( self.hdmiactivesourcereply )
      130. self.list.append( self.hdmilogenabledserial )
      131. self.list.append( self.hdmilogenabledfile )
      132. self["config"].list = self.list
      133. self["config"].l.setList(self.list)
      134. def keyDisconnect(self):
      135. cmd = None
      136. logcmd = None
      137. physaddress1 = int("0x" + str(config.hdmicec.tvinput.value) + str(config.hdmicec.avinput.value),16)
      138. physaddress2 = int("0x00",16)
      139. address = int('0',16)
      140. cecmessage = int('0x9D',16)
      141. cecmessagetwo = physaddress1
      142. cecmessagethree = physaddress2
      143. cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
      144. logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
      145. if cmd:
      146. eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
      147. if logcmd:
      148. if config.hdmicec.logenabledserial.value:
      149. print logcmd
      150. if config.hdmicec.logenabledfile.value:
      151. filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
      152. system(filelog)
      153. # only used for testing
      154. def keySend(self):
      155. cmd = None
      156. logcmd = None
      157. addresstmp=config.hdmicec.input_address.value
      158. tmp1=config.hdmicec.input_value1.value
      159. tmp2=config.hdmicec.input_value2.value
      160. tmp3=config.hdmicec.input_value3.value
      161. tmp4=config.hdmicec.input_value4.value
      162. address=int(addresstmp,16)
      163. if address not in range(0,256):
      164. address = 255
      165. if tmp4:
      166. val1=int(tmp1,16)
      167. val2=int(tmp2,16)
      168. val3=int(tmp3,16)
      169. val4=int(tmp4,16)
      170. if val1 not in range(0,256):
      171. val1 = 00
      172. if val2 not in range(0,256):
      173. val2 = 00
      174. if val3 not in range(0,256):
      175. val3 = 00
      176. if val4 not in range(0,256):
      177. val4 = 00
      178. cmd = struct.pack('BBBB',val1,val2,val3,val4)
      179. logcmd = "[VTI HDMI-CEC] ** Test Message ** Send message value: %x:%x:%x:%x to address %x" % (val1,val2,val3,val4,address)
      180. else:
      181. if tmp3:
      182. val1=int(tmp1,16)
      183. val2=int(tmp2,16)
      184. val3=int(tmp3,16)
      185. if val1 not in range(0,256):
      186. val1 = 00
      187. if val2 not in range(0,256):
      188. val2 = 00
      189. if val3 not in range(0,256):
      190. val3 = 00
      191. cmd = struct.pack('BBB',val1,val2,val3)
      192. logcmd = "[VTI HDMI-CEC] ** Test Message ** Send message value: %x:%x:%x to address %x" % (val1,val2,val3,address)
      193. else:
      194. if tmp2:
      195. val1=int(tmp1,16)
      196. val2=int(tmp2,16)
      197. if val1 not in range(0,256):
      198. val1 = 00
      199. if val2 not in range(0,256):
      200. val2 = 00
      201. cmd = struct.pack('BB',val1,val2)
      202. logcmd = "[VTI HDMI-CEC] ** Test Message ** Send message value: %x:%x to address %x" % (val1,val2,address)
      203. else:
      204. val1=int(tmp1,16)
      205. if val1 not in range(0,256):
      206. val1 = 00
      207. cmd = struct.pack('B',val1)
      208. logcmd = "[VTI HDMI-CEC] ** Test Message ** Send message value: %x to address %x" % (val1, address)
      209. if cmd:
      210. eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
      211. if logcmd:
      212. if config.hdmicec.logenabledserial.value:
      213. print logcmd
      214. if config.hdmicec.logenabledfile.value:
      215. filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
      216. system(filelog)
      217. # end testing
      218. def keyOk(self):
      219. cmd = None
      220. logcmd = None
      221. if self["config"].getCurrent() == self.hdmiavvolup:
      222. address = int("5",16)
      223. cecmessage = int("44",16)
      224. cecmessagetwo = int("41",16)
      225. cmd = struct.pack('BB',cecmessage,cecmessagetwo)
      226. logcmd = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
      227. elif self["config"].getCurrent() == self.hdmiavvoldown:
      228. address = int("5",16)
      229. cecmessage = int("44",16)
      230. cecmessagetwo = int("42",16)
      231. cmd = struct.pack('BB',cecmessage,cecmessagetwo)
      232. logcmd = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
      233. elif self["config"].getCurrent() == self.hdmiavvolmute:
      234. address = int("5",16)
      235. cecmessage = int("44",16)
      236. cecmessagetwo = int("43",16)
      237. cmd = struct.pack('BB',cecmessage,cecmessagetwo)
      238. logcmd = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
      239. elif self["config"].getCurrent() == self.hdmiavpwron:
      240. address = int("5",16)
      241. cecmessage = int("70",16)
      242. cecmessagetwo = int("10",16)
      243. cecmessagethree = int("0",16)
      244. cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
      245. logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
      246. elif self["config"].getCurrent() == self.hdmiavpwroff:
      247. address = int("5",16)
      248. cecmessage = int("44",16)
      249. cecmessagetwo = int("6C",16)
      250. cmd = struct.pack('BB',cecmessage,cecmessagetwo)
      251. logcmd = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
      252. elif self["config"].getCurrent() == self.hdmitvpwroff:
      253. address = int("0",16)
      254. cecmessage = int("36",16)
      255. cmd = struct.pack('B',cecmessage)
      256. logcmd = "[VTI HDMI-CEC] send cec message %x to %x" % (cecmessage,address)
      257. elif self["config"].getCurrent() == self.hdmitvpwron:
      258. address = int("0",16)
      259. cecmessage = int("04",16)
      260. cmd = struct.pack('B',cecmessage)
      261. logcmd = "[VTI HDMI-CEC] send cec message %x to %x" % (cecmessage,address)
      262. else:
      263. ConfigListScreen.keySave(self)
      264. if cmd:
      265. eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
      266. if logcmd:
      267. if config.hdmicec.logenabledserial.value:
      268. print logcmd
      269. if config.hdmicec.logenabledfile.value:
      270. filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
      271. system(filelog)
      272. def keyConnect(self):
      273. hdmi_cec.activateSourceTimer()
      274. address = 0
      275. message = 0x85
      276. messageReceived(address, message)
      277. def keyLeft(self):
      278. ConfigListScreen.keyLeft(self)
      279. if self["config"].getCurrent() == self.hdmienabled:
      280. self.createSetup()
      281. if self["config"].getCurrent() == self.hdmiavinput:
      282. self.createSetup()
      283. def keyRight(self):
      284. ConfigListScreen.keyRight(self)
      285. if self["config"].getCurrent() == self.hdmienabled:
      286. self.createSetup()
      287. if self["config"].getCurrent() == self.hdmiavinput:
      288. self.createSetup()
      289. def keyCancel(self):
      290. self.close()
      291. def keySave(self):
      292. ConfigListScreen.keySave(self)
      293. def openconfig(session, **kwargs):
      294. session.open(HdmiCecPlugin)
      295. def autostart(reason, **kwargs):
      296. global session
      297. if kwargs.has_key("session") and reason == 0:
      298. if config.hdmicec.enabled.value:
      299. session = kwargs["session"]
      300. if config.hdmicec.avvolumecontrol.value:
      301. ## from InfoBarGenerics.py
      302. eActionMap.getInstance().bindAction('', -0x7FFFFFFF, volumekeyPressed)
      303. ##
      304. eHdmiCEC.getInstance().messageReceived.get().append(messageReceived)
      305. eHdmiCEC.getInstance().messageReceivedKey.get().append(messageReceivedKey)
      306. def Plugins(**kwargs):
      307. return [PluginDescriptor(name=_("VTI HDMI-CEC"), description="VTI HDMI-CEC Configuration", where = PluginDescriptor.WHERE_PLUGINMENU, icon="hdmicec.png", needsRestart = True, fnc=openconfig),
      308. PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], fnc = autostart)]
      309. def volumekeyPressed(key, flag):
      310. if config.hdmicec.avvolumecontrol.value and config.hdmicec.enabled.value and config.hdmicec.avinput.value != "0":
      311. if key == 113 or key == 114 or key == 115:
      312. address = int("5",16)
      313. cecmessagesendkey = int("44",16)
      314. cecmessagekeyevent = None
      315. if flag == 1:
      316. cecmessagekeybreak = int("45",16)
      317. cmd = struct.pack('B',cecmessagekeybreak)
      318. else:
      319. if key == 113:
      320. cecmessagekeyevent = int("43",16)
      321. elif key == 114:
      322. cecmessagekeyevent = int("42",16)
      323. elif key == 115:
      324. cecmessagekeyevent = int("41",16)
      325. if cecmessagekeyevent:
      326. cmd = struct.pack('BB',cecmessagesendkey,cecmessagekeyevent)
      327. if cmd:
      328. eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
      329. return 1
      330. return 0
      331. def messageReceived(address, message):
      332. logcmd = "[VTI HDMI-CEC] received cec message %x from %x" % (message, address)
      333. if logcmd:
      334. if config.hdmicec.logenabledserial.value:
      335. print logcmd
      336. if config.hdmicec.logenabledfile.value:
      337. filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
      338. system(filelog)
      339. if config.hdmicec.enabled.value:
      340. from Screens.Standby import inStandby
      341. from Screens.Standby import Standby
      342. cmd = None
      343. cmdtwo = None
      344. addresstwo = None
      345. logcmd = None
      346. logcmdtwo = None
      347. physaddress1 = int("0x" + str(config.hdmicec.tvinput.value) + str(config.hdmicec.avinput.value),16)
      348. physaddress2 = int("0x00",16)
      349. addresstv = int("0x00",16)
      350. addressav = int("0x05",16)
      351. addressglobal = int("0x0F",16)
      352. powerstatereportmessage = int("0x90",16)
      353. powerstate = int("0x00",16)
      354. physaddressmessage = int('0x84',16)
      355. devicetypmessage = int('0x03',16)
      356. activesourcemessage = int('0x82',16)
      357. menuonmessage = int('0x8E',16)
      358. menustatemessage = int('0x00',16)
      359. setnamemessage = int('0x47',16)
      360. sendkeymessage = int("44",16)
      361. sendkeypwronmessage = int("6D",16)
      362. sendkeypwroffmessage = int("6C",16)
      363. if message == 0x8f: # request power state
      364. address = addresstv
      365. cecmessage = powerstatereportmessage
      366. cecmessagetwo = powerstate
      367. cmd = struct.pack('BB',cecmessage,cecmessagetwo)
      368. logcmd = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
      369. elif message == 0x83: # request physical address
      370. address = addressglobal
      371. cecmessage = physaddressmessage
      372. cecmessagetwo = physaddress1
      373. cecmessagethree = physaddress2
      374. cecmessagefour = devicetypmessage
      375. cmd = struct.pack('BBBB',cecmessage,cecmessagetwo,cecmessagethree,cecmessagefour)
      376. logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,cecmessagefour,address)
      377. elif message == 0x86: # request streampath
      378. if (inStandby) and (config.hdmicec.vuwakeup_message.value == "vuwakeup"):
      379. inStandby.Power()
      380. address = addressglobal
      381. cecmessage = activesourcemessage
      382. cecmessagetwo = physaddress1
      383. cecmessagethree = physaddress2
      384. cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
      385. logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
      386. if config.hdmicec.enabletvrc.value:
      387. addresstwo = addresstv
      388. cecmessage = menuonmessage
      389. cecmessagetwo = menustatemessage
      390. cmdtwo = struct.pack('BB',cecmessage,cecmessagetwo)
      391. logcmdtwo = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
      392. elif message == 0x8d: # request menu state
      393. if config.hdmicec.enabletvrc.value:
      394. address = addresstv
      395. cecmessage = menuonmessage
      396. cecmessagetwo = menustatemessage
      397. cmd = struct.pack('BB',cecmessage,cecmessagetwo)
      398. logcmd = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
      399. elif message == 0x46: # request device name
      400. address = addresstv
      401. cecmessage = setnamemessage
      402. name_len = len(config.hdmicec.device_name.value)
      403. if name_len == 0:
      404. cecmessagetwo ="VU+"
      405. cmd = struct.pack('B4s',cecmessage,cecmessagetwo)
      406. else:
      407. cecmessagetwo = config.hdmicec.device_name.value
      408. cmd = struct.pack('B'+str(name_len+1)+'s',cecmessage,cecmessagetwo)
      409. logcmd = "[VTI HDMI-CEC] send cec message %x:%s to %x" % (cecmessage,cecmessagetwo,address)
      410. elif message == 0x85: # request active source
      411. if not inStandby:
      412. if config.hdmicec.active_source_reply.value or hdmi_cec.initial_active_source_call == True:
      413. address = addressglobal
      414. cecmessage = activesourcemessage
      415. cecmessagetwo = physaddress1
      416. cecmessagethree = physaddress2
      417. cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
      418. logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
      419. if config.hdmicec.enabletvrc.value:
      420. addresstwo = addresstv
      421. cecmessage = menuonmessage
      422. cecmessagetwo = menustatemessage
      423. cmdtwo = struct.pack('BB',cecmessage,cecmessagetwo)
      424. logcmdtwo = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
      425. elif inStandby:
      426. if config.hdmicec.vuwakeup_message.value == "vuwakeup":
      427. inStandby.Power()
      428. address = addressglobal
      429. cecmessage = activesourcemessage
      430. cecmessagetwo = physaddress1
      431. cecmessagethree = physaddress2
      432. cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
      433. logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
      434. if config.hdmicec.enabletvrc.value:
      435. addresstwo = addresstv
      436. cecmessage = menuonmessage
      437. cecmessagetwo = menustatemessage
      438. cmdtwo = struct.pack('BB',cecmessage,cecmessagetwo)
      439. logcmdtwo = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
      440. elif message == 0x36:
      441. if config.hdmicec.vustandby_message.value == "vustandby":
      442. if inStandby == None:
      443. logcmd = "[VTI HDMI-CEC] VU+ STB goto standby"
      444. session.open(Standby)
      445. elif config.hdmicec.vustandby_message.value == "vudeepstandby":
      446. import Screens.Standby
      447. logcmd = "[VTI HDMI-CEC] VU+ STB goto deepstandby"
      448. session.open(Screens.Standby.TryQuitMainloop,1)
      449. if inStandby == None:
      450. if cmd:
      451. eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
      452. if cmdtwo:
      453. eHdmiCEC.getInstance().sendMessage(addresstwo, len(cmdtwo), str(cmdtwo))
      454. if logcmd:
      455. if config.hdmicec.logenabledserial.value:
      456. print logcmd
      457. if config.hdmicec.logenabledfile.value:
      458. filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
      459. system(filelog)
      460. if logcmdtwo:
      461. if config.hdmicec.logenabledserial.value:
      462. print logcmdtwo
      463. if config.hdmicec.logenabledfile.value:
      464. filelog = "echo %s >> /tmp/hdmicec.log" % (logcmdtwo)
      465. system(filelog)
      466. def messageReceivedKey(address, message):
      467. logcmd = "[VTI HDMI-CEC] received cec message part two %x from %x" % (message, address)
      468. if logcmd:
      469. if config.hdmicec.logenabledserial.value:
      470. print logcmd
      471. if config.hdmicec.logenabledfile.value:
      472. filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
      473. system(filelog)
      474. if config.hdmicec.enabled.value is True:
      475. rcdevicename = iInputDevices.getDeviceName('event0') # hschang : get rc device name, /dev/input/event0
      476. keyaction = eActionMap.getInstance()
      477. key = None
      478. #start translate keycodes
      479. if message == 0x32 or message == 0x09: #key menu
      480. key = int(139)
      481. elif message == 0x20: #key 0
      482. key = int(11)
      483. elif message == 0x21: #key 1
      484. key = int(2)
      485. elif message == 0x22: #key 2
      486. key = int(3)
      487. elif message == 0x23: #key 3
      488. key = int(4)
      489. elif message == 0x24: #key 4
      490. key = int(5)
      491. elif message == 0x25: #key 5
      492. key = int(6)
      493. elif message == 0x26: #key 6
      494. key = int(7)
      495. elif message == 0x27: #key 7
      496. key = int(8)
      497. elif message == 0x28: #key 8
      498. key = int(9)
      499. elif message == 0x29: #key 10
      500. key = int(10)
      501. elif message == 0x30: #key bouquet up
      502. key = int(402)
      503. elif message == 0x31: #key bouquet down
      504. key = int(403)
      505. elif message == 0x53: #key info/epg
      506. key = int(358)
      507. elif message == 0x00: #key ok
      508. key = int(352)
      509. elif message == 0x03: #key left
      510. key = int(105)
      511. elif message == 0x04: #key right
      512. key = int(106)
      513. elif message == 0x01: #key up
      514. key = int(103)
      515. elif message == 0x02: #key down
      516. key = int(108)
      517. elif message == 0x0d: #key exit
      518. key = int(174)
      519. elif message == 0x72: #key red
      520. key = int(398)
      521. elif message == 0x71: #key blue
      522. key = int(401)
      523. elif message == 0x73: #key green
      524. key = int(399)
      525. elif message == 0x74: #key yellow
      526. key = int(400)
      527. elif message == 0x44: #key play
      528. if rcdevicename.find("advanced"):
      529. key = int(164) # KEY_PLAYPAUSE
      530. else:
      531. key = int(207) # KEY_PLAY
      532. elif message == 0x46: #key pause
      533. if rcdevicename.find("advanced"):
      534. key = int(164) # KEY_PLAYPAUSE
      535. else:
      536. key = int(119) # KEY_PAUSE
      537. elif message == 0x45: #key stop
      538. key = int(128)
      539. elif message == 0x47: #key record
      540. key = int(167)
      541. elif message == 0x49: #fast forward
      542. if rcdevicename.find("advanced"):
      543. key = int(163) # KEY_NEXTSONG
      544. else:
      545. key = int(208) # KEY_FASTFORWARD
      546. elif message == 0x48: #rewind
      547. if rcdevicename.find("advanced"):
      548. key = int(165) # KEY_NEXTSONG
      549. else:
      550. key = int(168) # KEY_FASTFORWARD
      551. elif message == 0x60: #play 2
      552. key = int(207)
      553. elif message == 0x61: #key pause 2
      554. if rcdevicename.find("advanced"):
      555. key = int(164) # KEY_PLAYPAUSE
      556. else:
      557. key = int(119) # KEY_PAUSE
      558. elif message == 0x64: #key stop 2
      559. key = int(128)
      560. elif message == 0x62: #key record 2
      561. key = int(167)
      562. #end translate keycodes
      563. if key:
      564. keyaction.keyPressed(rcdevicename, key, int(0))
      565. keyaction.keyPressed(rcdevicename, key, int(1))
      Alles anzeigen
      Dateien
      • plugin.py.zip

        (5,26 kB, 5 mal heruntergeladen, zuletzt: )
    • So da bin ich wieder ;)
      Hmm, ja langsam gehen mir so aus der ferne die Ideen aus. Das einzige, was mir jetzt noch einfallen würde, wäre ein Raspberry zu benutzen um rauszufinden, was der TV sendet, wenn du den TV über die TV Taste einschaltest. So hab ich es damals mit meinem LG HT System gemacht.

      Generell wäre das auch der beste Ansatz, da du von nem RPI aus einfacher die Befehle abgesetzt bekommst und nicht jedesmal die VU+ neustarten musst.

      Die Version 9.0.3 sollte nicht das Problem sein.

      Also wie gesagt, ein RPI mit nem cec-client wäre mein Vorschlag.