Plugin Python - Projekt FritzBoxKlingel: Lade Bild von TürCam - Zeige es auf Screen...OK! Aber wie kann ich einen Reload und einen Autoshutdown machen...?

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

    • Plugin Python - Projekt FritzBoxKlingel: Lade Bild von TürCam - Zeige es auf Screen...OK! Aber wie kann ich einen Reload und einen Autoshutdown machen...?

      Hallo Experten,

      ich hab mich ein wenig verrannt und komme nicht weiter: Neben Bash, Basic for Android und Arduino habe ich eine weitere Baustelle aufgemacht und scheitere wohl an einer Kleinigkeit in Python.

      Ich habe mit aus der IHAD-Anleitung ein Python-Script gezimmert, mit dem ich ein Bild einer Tür-Webcam laden kann... dieses wird auch im Screen dargestellt....

      Python-Quellcode

      1. # Basis von:
      2. # Ihad.tv enigma2-plugin tutorial 2010
      3. # lesson 8
      4. # by emanuel
      5. ###########################################################################
      6. from twisted.web.client import downloadPage
      7. from Screens.MessageBox import MessageBox
      8. from Plugins.Plugin import PluginDescriptor
      9. from Screens.Screen import Screen
      10. from Components.Label import Label
      11. from Components.Pixmap import Pixmap
      12. from Components.AVSwitch import AVSwitch
      13. from Components.ActionMap import ActionMap
      14. from enigma import ePicLoad
      15. ###########################################################################
      16. class PictureScreen(Screen):
      17. skin="""
      18. <screen name="PictureScreen" position="100,70" size="800,600" title="Picture Screen" flags="wfNoBorder" backgroundColor="#002C2C39">
      19. <widget name="myPic" position="center,center" size="600,400" zPosition="1" alphatest="on" />
      20. </screen>"""
      21. def __init__(self, session, picPath = None):
      22. Screen.__init__(self, session)
      23. print "[PictureScreen] __init__\n"
      24. self.picPath = picPath
      25. self.Scale = AVSwitch().getFramebufferScale()
      26. self.PicLoad = ePicLoad()
      27. self["myPic"] = Pixmap()
      28. self["myActionMap"] = ActionMap(["SetupActions"],
      29. {
      30. "ok": self.cancel,
      31. "cancel": self.cancel
      32. }, -1)
      33. self.PicLoad.PictureData.get().append(self.DecodePicture)
      34. self.onLayoutFinish.append(self.ShowPicture)
      35. def ShowPicture(self):
      36. if self.picPath is not None:
      37. self.PicLoad.setPara([
      38. self["myPic"].instance.size().width(),
      39. self["myPic"].instance.size().height(),
      40. self.Scale[0],
      41. self.Scale[1],
      42. 0,
      43. 1,
      44. "#002C2C39"])
      45. self.PicLoad.startDecode(self.picPath)
      46. def DecodePicture(self, PicInfo = ""):
      47. if self.picPath is not None:
      48. ptr = self.PicLoad.getData()
      49. self["myPic"].instance.setPixmap(ptr)
      50. def cancel(self):
      51. print "[PictureScreen] - cancel\n"
      52. self.close(None)
      53. ###########################################################################
      54. class getPicfromUrl(object):
      55. def __init__(self, session, url=None, path=None):
      56. self.path = path
      57. self.session = session
      58. self.download(url, path)
      59. def download(self, url, path):
      60. downloadPage(url, path).addCallback(self.downloadDone).addErrback(self.downloadError)
      61. def downloadError(self, raw):
      62. print "[e2Fetcher.fetchPage]: download Error", raw
      63. self.session.open(MessageBox, text = _("Error downloading: ") + self.path, type = MessageBox.TYPE_ERROR)
      64. def downloadDone(self,raw):
      65. print "[e2Fetcher.fetchPage]: download done", raw
      66. self.session.open(PictureScreen, picPath = self.path)
      67. ###########################################################################
      68. def main(session, **kwargs):
      69. getPicfromUrl(session,"http://webcam.skilifte-kaltenbronn.de/Hang/WEBCAM_Hang.jpg", "/tmp/myPic.tmp")
      70. ###########################################################################
      71. def Plugins(**kwargs):
      72. return PluginDescriptor(
      73. name="AAA FritzBox Klingel",
      74. description="AAA FritzBox Klingel",
      75. where = PluginDescriptor.WHERE_PLUGINMENU,
      76. icon="fritz.png",
      77. fnc=main)
      Alles anzeigen

      Was mir noch fehlt, dass sich das Bild im 2sec Takt automatisch neu lädt und dann nach 60sec der Screen sich wieder schließt.

      Ich habe schon mit einem Timer experimentiert - aber mit diesem Script funktioniert es nicht... irgendetwas kommt dann durcheinander...

      Kann mir jemand auf die Sprünge helfen?

      Wie baue ich einen Timer ein und wo kann ich den Timer einbauen.....?

      Vielen Dank!

      Viele Grüße

      Tom
      Dateien
      • plugin.zip

        (5,3 kB, 5 mal heruntergeladen, zuletzt: )
    • Hier mal fast dasselbe Plugin welches der Reihe nach alle Bilder in einem Verzeichnis anzeigt. Mit Timer:

      Python-Quellcode

      1. # -*- coding: utf-8 -*-
      2. from Components.ActionMap import ActionMap
      3. from Screens.Screen import Screen
      4. from Components.Label import Label
      5. from Components.Pixmap import Pixmap
      6. from Components.AVSwitch import AVSwitch
      7. from enigma import ePicLoad, eTimer
      8. from glob import glob
      9. class Info(Screen):
      10. skin = """
      11. <screen name="Info" position="0,0" size="1920,1080" title="Bastel-Plugin" flags="wfNoBorder">
      12. <widget name="thepic" position="0,0" size="1920,1080" zPosition="1" alphatest="on" />
      13. </screen>
      14. """
      15. def __init__(self, session):
      16. self.session = session
      17. Screen.__init__(self, session)
      18. self["actions"] = ActionMap(["WizardActions"], {
      19. "back": self.cancel,
      20. }, -1)
      21. picpath = "/media/hdd/pictures/*.jpg"
      22. self.images = glob(picpath)
      23. self.imgidx = 0
      24. self.pictimer = eTimer()
      25. self.pictimer.callback.append(self.ShowPicture)
      26. self.scale = AVSwitch().getFramebufferScale()
      27. self["thepic"] = Pixmap()
      28. self.picloader = ePicLoad()
      29. self.picloader.PictureData.get().append(self.setPictureCB)
      30. self.picloader.setPara((
      31. 1920,
      32. 1080,
      33. self.scale[0],
      34. self.scale[1],
      35. False,
      36. 1,
      37. "#002c2c39"
      38. ))
      39. self.onLayoutFinish.append(self.ShowPicture)
      40. def ShowPicture(self):
      41. pic = self.images[self.imgidx]
      42. self.imgidx = self.imgidx + 1
      43. if self.imgidx == len(self.images):
      44. self.imgidx = 0
      45. self.pictimer.stop()
      46. self.picloader.startDecode(pic)
      47. self.pictimer.start(5000, True)
      48. def setPictureCB(self, picinfo = None):
      49. data = self.picloader.getData()
      50. if data is not None:
      51. self["thepic"].instance.setPixmap(data)
      52. self["thepic"].show()
      53. def cancel(self):
      54. self.pictimer.stop()
      55. self.close()
      Alles anzeigen
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.