Menüauswahl in plugin über Zifferntaste

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

    • Menüauswahl in plugin über Zifferntaste

      Ich habe mir ein kleines plugin mit einem Menü zusammengebastelt, mit dem ich u.a. meine Rollläden steuere. Funktioniert soweit auch. Hier ein kleiner Auszug.

      list.append(("Rollladen OG schliessen", "com_7"))
      list.append((_("Exit"), "exit"))
      Screen.__init__(self, session)
      self["myMenu"] = MenuList(list)
      self["myActionMap"] = ActionMap(["SetupActions"],
      {
      "ok": self.go,
      "cancel": self.cancel
      }, -1)

      Jetzt würde ich gerne die einzelnen Menüpunkte auch über die Zifferntasten der FB auswählen können. In der keymap.xml habe ich die Zifferntasten u.a in den Setupactions gefunden. Wenn ich die dann aber in die ActionMap mit einbaue

      "cancel": self.cancel
      "1":start_1

      und start_1 natürlich weiter unten über einen def anlege, bekomme ich aber in der Definition der Actionmap einen Syntax-Fehler ausgewiesen. Dann habe ich es über NumberActionMap probiert, dann ist mir die VU nach dem Aufruf abgeschmiert. Auch ist mir nicht klar, was die -1 bewirkt, ob ich die dann ändern müsste. Ich habe da keine Doku gefunden. Hat jemand einen Tipp?
      Zweite Frage: Ich kann das plugin natürlich über MQB definieren, dann klappt es aber im emc nicht. Über meine Harmony könnte ich aber ein Macro definieren, welches sich über das Menü bis zums plugin hangelt und dieses dann aufruft. Leider stehe ich dann am Ende im plugin Menü. Gibt es da eine Einstellung, dass ich nach einem Plugin (egal von wo es aufgerufen wird) wieder im "Normalen TV" stehe?

      Danke im Voraus!
    • Quellcode

      1. self["numberActions"] = NumberActionMap(["NumberActions"],
      2. {
      3. "0": self.keyNumberGlobal,
      4. "1": self.keyNumberGlobal,
      5. "2": self.keyNumberGlobal,
      6. "3": self.keyNumberGlobal,
      7. "4": self.keyNumberGlobal,
      8. "5": self.keyNumberGlobal,
      9. "6": self.keyNumberGlobal,
      10. "7": self.keyNumberGlobal,
      11. "8": self.keyNumberGlobal,
      12. "9": self.keyNumberGlobal,
      13. }, -1)
      14. ......
      15. def keyNumberGlobal(self, number):
      Alles anzeigen
      ============================================================================================
    • Danke, da habe ich mittlerweile auch schon herum probiert, aber es gibt noch Porbleme.

      Muss ich dann zusätzlich zu
      from Components.ActionMap import ActionMap
      auch noch
      from Components.ActionMap import NumberActionMap
      mit angeben?

      Ich möchte ja weiterhin den ok und den cancel auch noch benutzen können. Wäre es dann so?

      self["myActionMap"] = ActionMap(["SetupActions"],
      "ok": self.go,
      "cancel": self.cancel
      }, -1)

      self["numberActions"] = NumberActionMap(["INumberActions"],
      {...
      }, -1)

      Wie definiere ich dann bei
      def keyNumberGlobal(self, number):

      was z.B. bei 1 passiert?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hgdo ()

    • Danke. Die beiden Definitionen
      self["myActionMap"] = ActionMap(["SetupActions"]

      und
      self["numberActions"] = NumberActionMap(["INumberActions"],

      sind so ok, d.h. beide werden benötigt?

      Für die Ausführung wäre es dann:

      def keyNumberGlobal(self, number):
      if number == 1:
      ....
      if number ==2:
      ...

      Sorry für die "dummen" Fragen, ich habe schon mit vielen Programmiersprachen gearbeitet, aber mit python habe ich noch ein paar Probleme.
    • Jetzt bekomme ich noch eine Syntaxmeldung
      Spoiler anzeigen
      self["myMenu"] = MenuList(list)
      self["myActionMap"] = ActionMap(["SetupActions"],
      "ok": self.go,
      "cancel": self.cancel
      }, -1)
      self["numberActions"] = NumberActionMap(["NumberActions"],
      {
      "0": self.keyNumberGlobal,
      "1": self.keyNumberGlobal,
      "2": self.keyNumberGlobal,
      "3": self.keyNumberGlobal,
      "4": self.keyNumberGlobal,
      "5": self.keyNumberGlobal,
      "6": self.keyNumberGlobal,
      "7": self.keyNumberGlobal,
      "8": self.keyNumberGlobal,
      "9": self.keyNumberGlobal,
      }, -1)
      und zwar für die Zeile wo ich den ok definiere ( "ok": self.go,). Wenn ich aber den Bereich mit den NumberActions komplett raus lasse, ist alles ok.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hgdo ()

    • ist alles ok.
      glaube ich nicht - denn da fehlt die "{" Klammer

      poste bitte code oder häng ihn an, ist ja so nicht überschaubar

      edit:
      und bitte bring auch die fehlermeldungen/logs - der Nutzen derer ist in anderen Sprachen auch nicht anders als hier...
      ============================================================================================

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von shadowrider ()

    • Hier der Source (die Aufrufbefehle sind wegen der IP-Adressen nicht drin). Bei Aufruf von plugins kommt die Meldung, dass in Zeile 36 ein Fehler ist.

      Python-Quellcode: plugin.py

      1. # Ihad.tv enigma2-plugin tutorial 2010
      2. # lesson 5
      3. # by emanuel
      4. from Screens.Screen import Screen
      5. from Screens.Console import Console
      6. from Components.MenuList import MenuList
      7. from Components.ActionMap import ActionMap
      8. from Components.ActionMap import NumberActionMap
      9. from Components.Label import Label
      10. from Plugins.Plugin import PluginDescriptor
      11. from enigma import eConsoleAppContainer
      12. import time
      13. ###########################################################################
      14. class MyShPrombt(Screen):
      15. skin = """
      16. <screen position="100,150" size="460,400" title="Mein haus - Haussteuerung 1.0" >
      17. <widget name="myMenu" position="10,10" size="420,380" scrollbarMode="showOnDemand" />
      18. </screen>"""
      19. def __init__(self, session, args = 0):
      20. self.session = session
      21. list = []
      22. list.append(("Ueberwachung Status", "com_1"))
      23. list.append(("Alarm zurueck setzen", "com_2"))
      24. list.append(("Ueberwachung aus", "com_3"))
      25. list.append(("Ueberwachung wohnen", "com_4"))
      26. list.append(("Ueberwachung schlafen", "com_5"))
      27. list.append(("Ueberwachung extern", "com_6"))
      28. list.append(("Rollladen OG schliessen", "com_7"))
      29. list.append(("WZ Rollo Hof zu", "com_8"))
      30. list.append(("WZ Rollo Balkon auf", "com_9"))
      31. list.append(("WZ Rollo Balkon zu","com_10"))
      32. list.append((_("Exit"), "exit"))
      33. Screen.__init__(self, session)
      34. self["myMenu"] = MenuList(list)
      35. self["myActionMap"] = ActionMap(["SetupActions"],
      36. "ok": self.go,
      37. "cancel": self.cancel
      38. }, -1)
      39. self["numberActions"] = NumberActionMap(["NumberActions"],
      40. {
      41. "0": self.keyNumberGlobal,
      42. "1": self.keyNumberGlobal,
      43. "2": self.keyNumberGlobal,
      44. "3": self.keyNumberGlobal,
      45. "4": self.keyNumberGlobal,
      46. "5": self.keyNumberGlobal,
      47. "6": self.keyNumberGlobal,
      48. "7": self.keyNumberGlobal,
      49. "8": self.keyNumberGlobal,
      50. "9": self.keyNumberGlobal,
      51. }, -1)
      52. def go(self):
      53. returnValue = self["myMenu"].l.getCurrentSelection()[1]
      54. print "\n[MyShPrombt] returnValue: " + returnValue + "\n"
      55. if returnValue is not None:
      56. if returnValue is "com_1":
      57. self.prombt("wget .... )
      58. print "\n[MyShPrombt] cancel\n"
      59. self.close(None)
      60. elif returnValue is "com_2":
      61. self.prombt("wget .... )
      62. print "\n[MyShPrombt] cancel\n"
      63. self.close(None)
      64. elif returnValue is "com_3":
      65. self.prombt("wget .... )
      66. print "\n[MyShPrombt] cancel\n"
      67. self.close(None)
      68. elif returnValue is "com_4":
      69. self.prombt("wget .... )
      70. print "\n[MyShPrombt] cancel\n"
      71. self.close(None)
      72. elif returnValue is "com_5":
      73. self.prombt("wget .... )
      74. print "\n[MyShPrombt] cancel\n"
      75. self.close(None)
      76. else:
      77. print "\n[MyShPrombt] cancel\n"
      78. self.close(None)
      79. #def prombt(self, com):
      80. #self.session.open(Console,_("start shell com: %s") % (com), ["%s" % com])
      81. def prombt(self, com):
      82. container = eConsoleAppContainer()
      83. container.execute(com)
      84. def cancel(self):
      85. print "\n[MyShPrombt] cancel\n"
      86. self.close(None)
      87. def keyNumberGlobal(self, number):
      88. if number === 1:
      89. self.prombt("wget .... )
      90. print "\n[MyShPrombt] cancel\n"
      91. self.close(None)
      92. elif number === 2:
      93. self.prombt("wget .... )
      94. print "\n[MyShPrombt] cancel\n"
      95. self.close(None)
      96. ###########################################################################
      97. def main(session, **kwargs):
      98. print "\n[MyShPrombt] start\n"
      99. session.open(MyShPrombt)
      100. ###########################################################################
      101. def Plugins(**kwargs):
      102. return PluginDescriptor(
      103. name="Mein haus 1.0",
      104. description="Haussteuerung",
      105. where = PluginDescriptor.WHERE_PLUGINMENU,
      106. icon="fhc.png",
      107. fnc=main)
      Alles anzeigen
    • So, nachdem ich alle Leerzeichen durch Tabs ersetzt habe (hoffentlich) bekomme ich jetzt keine Syntaxfehler mehr, leider gibt es ein neues Problem, als Fehlermeldung kommt

      Extensions/..(name self is not defined)

      Hintergrund nochmals. Ich möchte den 1. Menüpunkt ausführen wenn er entweder mit ok ausgewählt wurde oder die Taste 1 eingegeben wurde (und 1-6 dito).
      Wenn ich nur über das Menü arbeite, funktioniert alles.

      Ich habe den Code nochmals angehängt. Vielleicht sieht jemand ja meinen Fehler. Danke nochmals.

      Python-Quellcode

      1. # Ihad.tv enigma2-plugin tutorial 2010
      2. # lesson 5
      3. # by emanuel
      4. from Screens.Screen import Screen
      5. from Screens.Console import Console
      6. from Components.MenuList import MenuList
      7. from Components.ActionMap import ActionMap
      8. from Components.ActionMap import NumberActionMap
      9. from Components.Label import Label
      10. from Plugins.Plugin import PluginDescriptor
      11. from enigma import eConsoleAppContainer
      12. import time
      13. ###########################################################################
      14. class MyShPrombt(Screen):
      15. skin = """
      16. <screen position="100,150" size="460,400" title="Mein haus - Haussteuerung 1.0" >
      17. <widget name="myMenu" position="10,10" size="420,380" scrollbarMode="showOnDemand" />
      18. </screen>"""
      19. def __init__(self, session, args = 0):
      20. self.session = session
      21. list = []
      22. list.append(("Ueberwachung Status", "com_1"))
      23. list.append(("Alarm zurueck setzen", "com_2"))
      24. list.append(("Ueberwachung aus", "com_3"))
      25. list.append(("Ueberwachung wohnen", "com_4"))
      26. list.append(("Ueberwachung schlafen", "com_5"))
      27. list.append(("Ueberwachung extern", "com_6"))
      28. list.append(("Rollladen OG schliessen", "com_7"))
      29. list.append((_("Exit"), "exit"))
      30. Screen.__init__(self, session)
      31. self["myMenu"] = MenuList(list)
      32. self["myActionMap"] = ActionMap(["SetupActions"],
      33. {
      34. "ok": self.go,
      35. "cancel": self.cancel
      36. }, -1)
      37. self["numberActions"] = NumberActionMap(["NumberActions"],
      38. {
      39. "0": self.keyNumberGlobal,
      40. "1": self.keyNumberGlobal,
      41. "2": self.keyNumberGlobal,
      42. "3": self.keyNumberGlobal,
      43. "4": self.keyNumberGlobal,
      44. "5": self.keyNumberGlobal,
      45. "6": self.keyNumberGlobal,
      46. "7": self.keyNumberGlobal,
      47. "8": self.keyNumberGlobal,
      48. "9": self.keyNumberGlobal
      49. }, -1)
      50. def go(self):
      51. returnValue = self["myMenu"].l.getCurrentSelection()[1]
      52. print "\n[MyShPrombt] returnValue: " + returnValue + "\n"
      53. if returnValue is not None:
      54. if returnValue is "com_1":
      55. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1128&switchcmd=On'")
      56. print "\n[MyShPrombt] cancel\n"
      57. self.close(None)
      58. elif returnValue is "com_2":
      59. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1519&switchcmd=On'")
      60. print "\n[MyShPrombt] cancel\n"
      61. self.close(None)
      62. elif returnValue is "com_3":
      63. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1242&switchcmd=On'")
      64. print "\n[MyShPrombt] cancel\n"
      65. self.close(None)
      66. elif returnValue is "com_4":
      67. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1245&switchcmd=On'")
      68. print "\n[MyShPrombt] cancel\n"
      69. self.close(None)
      70. elif returnValue is "com_5":
      71. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1243&switchcmd=On'")
      72. print "\n[MyShPrombt] cancel\n"
      73. self.close(None)
      74. elif returnValue is "com_6":
      75. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1244&switchcmd=On'")
      76. print "\n[MyShPrombt] cancel\n"
      77. self.close(None)
      78. elif returnValue is "com_7":
      79. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchscene&idx=11&switchcmd=On'")
      80. print "\n[MyShPrombt] cancel\n"
      81. self.close(None)
      82. else:
      83. print "\n[MyShPrombt] cancel\n"
      84. self.close(None)
      85. #def prombt(self, com):
      86. #self.session.open(Console,_("start shell com: %s") % (com), ["%s" % com])
      87. def keyNumberGlobal(self, number):
      88. if number == 1:
      89. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1128&switchcmd=On'")
      90. print "\n[MyShPrombt] cancel\n"
      91. self.close(None)
      92. elif number == 2:
      93. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1519&switchcmd=On'")
      94. print "\n[MyShPrombt] cancel\n"
      95. self.close(None)
      96. def prombt(self, com):
      97. container = eConsoleAppContainer()
      98. container.execute(com)
      99. def cancel(self):
      100. print "\n[MyShPrombt] cancel\n"
      101. self.close(None)
      102. ###########################################################################
      103. def main(session, **kwargs):
      104. print "\n[MyShPrombt] start\n"
      105. session.open(MyShPrombt)
      106. ###########################################################################
      107. def Plugins(**kwargs):
      108. return PluginDescriptor(
      109. name="Mein haus 1.0",
      110. description="Haussteuerung",
      111. where = PluginDescriptor.WHERE_PLUGINMENU,
      112. icon="fhc.png",
      113. fnc=main)
      Alles anzeigen


      Ok, geht. Es waren die Blanks. Die Syntax bezüglich der Einrückungen ist etwas "gewöhnungsbedürftig" aber notwendig, da die end-Statements fehlen.
      Danke nochmals.
    • als Fehlermeldung kommt
      möchtest du ernsthaft Hilfe?
      dann mach es helfenden nicht unnötig schwer - in der Fehlermeldung steht deutlich mehr, u.a. vermutlich wohl auch die zeilennummer

      zudem schau dir an, wie man mit try: .... except: bzw. except, exception Fehler abfangen und ausgeben kann

      type=command¶m
      glaube kaum, das das so sein darf
      ============================================================================================
    • Hallo,

      ich greife das hier noch einmal auf und frage mich ob das ganze doppelt erstellen muss.

      Quellcode

      1. if returnValue is "com_1":
      2. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1128&switchcmd=On'")
      3. print "\n[MyShPrombt] cancel\n"
      4. self.close(None)
      5. elif returnValue is "com_2":
      6. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1519&switchcmd=On'")
      7. print "\n[MyShPrombt] cancel\n"
      8. self.close(None)


      Kann man nicht sagen:


      Quellcode

      1. if returnValue is "com_1" or number == 1:
      2. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1128&switchcmd=On'")
      3. print "\n[MyShPrombt] cancel\n"
      4. self.close(None)
      5. elif returnValue is "com_2"or number == 2:
      6. self.prombt("wget -q -O- 'http://xxx.xxx.x.xx:xxxx/json.htm?type=command¶m=switchlight&idx=1519&switchcmd=On'")
      7. print "\n[MyShPrombt] cancel\n"
      8. self.close(None)

      Also if returnValue is "one" or number ==1: ?
      Ist nur die Frage nach dem :

      def go(self):
      returnValue = self["myMenu"].l.getCurrentSelection()[1]
      print "\n[MyShPrombt] returnValue: " + returnValue + "\n"

      Wie bekomme ich number da rein?

      PiT
    • Bekomme ich hier auch andere Tasten rein? z.B. rot, grün usw.?

      Quellcode

      1. self["numberActions"] = NumberActionMap(["NumberActions"],
      2. {
      3. "0": self.keyNumberGlobal,
      4. "1": self.keyNumberGlobal,
      5. "2": self.keyNumberGlobal,
      6. "3": self.keyNumberGlobal,
      7. "4": self.keyNumberGlobal,
      8. "5": self.keyNumberGlobal,
      9. "6": self.keyNumberGlobal,
      10. "7": self.keyNumberGlobal,
      11. "8": self.keyNumberGlobal,
      12. "9": self.keyNumberGlobal
      13. }, -1)
      Alles anzeigen