enigma2 module benutzen - timer

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

    • Ne, Doku kenn ich leider auch nicht, da ich das für mein Plugin AntiSpoiler auch brauchte hab ich das durch studieren von diversen Quellcodes mal irgendwo gefunden.

      Tipp: Mit Notepad++ kann man in einem Verzeichnis alle Dateien nach einem Schlüsselwort durchsuchen. Da wird man dann manchmal fündig. (Vorher natürlich das gesamte python-Verzeichnis von enigma2 auf den PC kopieren.)

      PS: Hatte in meinem Code das Doppelgleichheitszeichen falsch, jetzt ist es richtig, falls du es nicht schon selber gemerkt hast.
    • Ich probier mich auch an nem Plugin, was ich auch releasen werde, wenn ichs denn mal gebacken bekomme.

      Ziel:
      - recordtimer checken (timer hab ich)
      - wenn recordtimer - offset (z.b. 5 minuten) = jetzt --> prüfen ob NAS und Share verfügbar
      - wenn nicht WOL ans NAS schicken (funzt)
      - prüfen ob NAS pingbar (funzt)
      - prüfen ob NFS mount verfügbar (verbesserungswürdig

      Eventualitäten, die auftreten können, muss ich noch rausfinden.

      Das Problem was ich grade zu lösen versuche ist, dass man ja durchaus mehrere NAS an der VU haben kann. Also suche ich den Aufnahmepfad und wollte das gegen /etc/auto.network checken.
      Abhängig vom Aufnahmepfad sollte somit das richtige externe "wasauchimmer" gemounted werden.
    • Sodele.. der nicht-enigma2 Part von meiner Spielerei wäre nun fertig.
      Jetzt gehts ein bissi an die Steuerung.

      Wie kann man eigene Plugins "timen" ? Sprich Bedingung nicht erfüllt, versuche es in 5 Minuten nochmal. Oder vielleicht auch abhängig von einem "Event" (nicht FB Eingabe, sondern eher "irgendwas" in enigma2 passiert).

      Für die Timergeschichte denke ich habe ich mit eTimer() das passende gefunden, allerdings blick ich nicht, wie man das implementiert.

      Ich dachte an etwas in der Art:

      myTimer = eTimer()
      myTimer.do(meineFunktion)
      myTimer.start(unixtimevomstartvorgang)

      Kommt das in etwa hin? Mehr finde ich leider nicht. In anderen py's zu lesen fällt mir da teilweise schwer.
    • Original von hoschi78
      Wie kann man eigene Plugins "timen" ? Sprich Bedingung nicht erfüllt, versuche es in 5 Minuten nochmal. Oder vielleicht auch abhängig von einem "Event" (nicht FB Eingabe, sondern eher "irgendwas" in enigma2 passiert).


      Wenn diese Anforderungen nicht ziemlich genau dem Plugin AutoShutdown entsprechen würden, hätte ich gesagt, schau mal ins AutoShutdow Plugin ;) :D
      Carpe diem!

      Skin: CerX FHD | Plugins: TMDb, BacksNcovers, FritzDect, AutoShredder, PluginMover | EPG: GraphMultiEPG | ... [Alle anzeigen]

      Vu+ Wiki
    • Ich glaub ich hab grad n dejavu :D

      Mein Plan sah vor, in allen Files nach eTimer() zu geppen.. und was da raus kam, sah verwirrend aus. MAl eben VPN nach Hause anschmeissen und die py's holen :D Dankö
    • Ouman -.- Recht haste.

      Quellcode

      1. MyTimer = eTimer()
      2. MyTimer.start(timer_duration, True)
      3. MyTimer.callback.append(myMsg)


      aber definiert ist das hier auch nicht
      dream.reichholf.net/pydoc/html…lassenigma_1_1eTimer.html

      Da ich ja wie gesagt blutiger python-Anfänger bin... is das ne typische python-Sache ?
      Ich hab das mal gegoogelt.. mit append() hängt man also, wie dre Name schon sagt, etwas wo an. Vermutlich verstehe ich das nicht ganz, weil ich nicht weiss, wie meine Timer()-Referenz aufgebaut ist. Ich füge mit dem append(myFunction) also dem Timer-Array noch einen Wert zu, welcher dann die aufzurufende Funktion ausführt.

      Somit müsste

      Quellcode

      1. MyTimer = eTimer()
      2. MyTimer.start(timer_duration, True)
      3. MyTimer.callback.append(myMsg)


      das Selbe sein wie

      Quellcode

      1. MyTimer = eTimer()
      2. MyTimer.start(timer_duration, True).callback.append(myMsg)


      oder

      Quellcode

      1. MyTimer = eTimer().start(timer_duration, True).append(myMsg)


      ?
    • Quellcode

      1. config.wakenas.timerRecheck = ConfigInteger(default = 600)
      2. def checkTimer(self):
      3. self.recordTimer = RecordTimer()
      4. self.nextTimer = self.recordTimer.getNextRecordingTime()
      5. if self.nextTimer:
      6. print "[ANaNAS]: record timer found"
      7. for timer in self.recordTimer.timer_list:
      8. self.recordPath = timer.dirname
      9. if timer.begin == self.nextTimer and self.recordPath.find("/media/net/") != -1:
      10. print "[ANaNAS]: recordTimer recording to: " + self.RecordPath
      11. self.wolTimer = eTimer()
      12. self.wolTimer.start((self.nextTimer-config.wakenas.wakeOffset.value), True)
      13. self.wolTimer.callback.append(self.checkNAS('initial'))
      14. else:
      15. print "[ANaNAS]: recordTimer not recording to NAS"
      16. self.rescheduleTimerCheck()
      17. else:
      18. print "[ANaNAS]: no record timer found - rescheduling"
      19. self.rescheduleTimerCheck()
      20. # reschedule timer check
      21. def rescheduleTimerCheck(self):
      22. rescheduleTime = config.wakenas.timerRecheck.value*1000
      23. print "[ANaNAS]: "+str(rescheduleTime)
      24. self.reschedule = eTimer()
      25. self.reschedule.start((config.wakenas.timerRecheck.value*1000), True)
      26. self.reschedule.callback.append(self.checkTimer())
      Alles anzeigen


      das macht nen dauerloop, und ich seh nicht warum.

      ich geb mir den str-wert von config.wakenas.timerRecheck.value*1000 aus und komme auf 600000
      scheinbar bockt das den eTimer nicht
    • Danke fürs Feedback.
      Ist das ein "Versuch mal" oder ein "Ich weiss wies rchtig ist" ?

      Aus einem anderen Schnipsel:

      Quellcode

      1. def startTimer():
      2. timer_duration = 10000
      3. global MyTimer
      4. MyTimer = eTimer()
      5. MyTimer.start(timer_duration, True)
      6. MyTimer.callback.append(myMsg)


      funzt nämlich. eTimer nimmt ms als Zeitangabe. Somit ist obiges Beispiel nach 10 Sekunden aktiv.
    • zumindest mach ich es so, das ich ihm erst alle daten geben bevor ich ihn losschicke, mit versuch mal meine ich erstens schadet es nicht und zweitens könnte es eine Fehlerursache sein (ich bin auch kein gelernter :D)
      ============================================================================================
    • greenscreen
      "runtime error: maximum recursion depth exceedee" :D

      yeah.. vti / enigma2 / ultimo ans ende gebracht :D

      zu hilfe

      aber ich versuchs mal.. nur.. in anderen plugins seh ich das auch GENAU so.. erst start, dann callback.

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

    • Das mit start und dann callback passt schon.

      Aber Du rufst die reschedule timer funktion ja öfters auf das macht ja keinen sinn.

      Beispiel, Du hast 4 Timer dann rufst Du mindestens 3x die Funktion auf. Nimm mal den Aufruf aus der for Schleife raus
    • greenscreen

      log mit (telenet oder Datei), dann siehst wer sich zu oft reinhängt

      in anderen plugins seh ich das auch GENAU so

      wenn tausende etwas falsch machen bleibt es dennoch falsch ;)
      ne, ich bin da nicht sicher, aber mein Verständnis von Logik sagt mir, das es in jedem Fall besser ist, eine Routine mit allem auszurüsten was sie braucht, bevor ich sie denn loslasse - ihr unterwegs etwas mitzugeben kann immer Fehler bewirken (grad keine Prozessorzeit frei z.B., dann kommt das 'Mitgeben' plötzlich zu spät an usw)

      edit:

      und jetzt von uns beiden die Essenz :D
      nimm den Start aus der Schleife und mach ihn danach, die callbacks kannst ja so oft appenden wie du es brauchst
      ============================================================================================

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

    • ok.. dann hab ich da aber jetzt n verständnisproble.

      wenns überhaupt nen timer gibt, dann geht der in die for, wenn nicht, dann reschedule next check

      wenn timer, dann prüfe jeden timer
      wenn timer start = next Timer UND record path passt
      dann checkNAS
      else reschedule timer check

      das is der punkt wo du einhakst..

      selbst wenn ich 100 timer habe, von denen logischerweise nur einer passen kann, dann sollte doch self.reschedule aus der rescheduldetimercheck immer neu überschrieben werden UND dann dürfte das problem erst nach 10 minuten ( 600.000 ms ) auftauchen.. es kommt aber sofort

      edit:
      ich will ja erreichen, dass der reschedule check unter 2 bedingungen eintritt
      a) kein timer vorhanden
      b) kein PASSENDER timer vorhanden, sprich kein timer der auf "path" aufnimmt

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