Message an Dreambox mit Frage - Antwort nach Timeout ohne Eingabe immer YES ?!

    • Message an Dreambox mit Frage - Antwort nach Timeout ohne Eingabe immer YES ?!

      Hallo!

      Ich habe grad versucht etwas zu basteln und bin dabei auf ein, für mich, seltsames Problem gestoßen.

      Wenn man über diese URL eine Frage-Nachricht (Antwortmöglichkeit Ja/Nein) auf dem TV anzeigen lässt:
      http://192.168.1.12/web/message?text=FRAGE&type=0&timeout=5

      Und wenn ich innerhalb der 5 Sekunden KEINE Antwort auswähle am TV, dann bekomme ich als Rückgabe mit der folgenden Abfrage IMMER ein YES.
      http://192.168.1.12/web/messageanswer?getanswer=now

      Ich habe aber irgendwo gelesen, dass man irgendwas zurück bekommt das klingt wie "Keine Antwort innerhalb der Zeit".

      Als Image habe ich auf allen Boxen (DM7020HD, DM800HD, DM500HD) das Newnigma mit allen Updates.

      Ist das Verhalten bei den Nachrichten so gewollt? Oder stimmt bei meinen Boxen etwas nicht? Kann ich irgendwie dafür sorgen, dass bei keiner Antwort innerhalb der Zeitspanne etwas anderes als YES oder NO kommt? Oder wenn nicht, kann man dann wenigstens NO als "default Antwort" einstellen?

      Danke im Voraus und Gruß,
      Chris
    • Der Rückgabewert YES ist default, der wird auch ausgegeben wenn keine Auswahl getroffen wird bzw. der Timer ausläuft

      Wenn man den Remotebefehl "down" nachsendet, damit der Balken auf "nein" steht wird der timer unterbrochen und man erhält nur eine Antwort wenn OK gedrückt wird, sonst bleibt die Messagebox stehen. Dann erhält man "No answer in Time" als Rückgabewert. Das ist also auch keine Lösung.

      Bleibt nur die Messagebox.py zu patchen. Die wird aber bei jedem update überschrieben und die Änderung betrifft generell die Enigma2 Messagebox und nicht nur die des Webinterface.

      Wenn man in der Messagebox.py den default Wert für type = TYPE_YESNO von True auf False ändert, wird "nein" als erstes in der Liste angezeigt und markiert und der Rückgabewert ist NO wenn der Timer ohne FB Eingabe abläuft

      Unterschiede-Datei

      1. root@dm7020hd:/usr/lib/enigma2/python/Screens# diff MessageBox.py.ori MessageBox.py
      2. --- MessageBox.py.ori
      3. +++ MessageBox.py
      4. @@ -12,7 +12,7 @@
      5. TYPE_WARNING = 2
      6. TYPE_ERROR = 3
      7. - def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = True, enable_input = True, msgBoxID = None, title = None, additionalActionMap=None):
      8. + def __init__(self, session, text, type = TYPE_YESNO, timeout = -1, close_on_any_key = False, default = False, enable_input = True, msgBoxID = None, title = None, additionalActionMap=None):
      9. self.type = type
      10. Screen.__init__(self, session)
      11. root@dm7020hd:/usr/lib/enigma2/python/Screens#
      Alles anzeigen


      Ich habe aber keine Ahnung ob und wie sich das auf das Verhalten von Enigma2 auswirkt - also mit Vorsicht zu genießen und die Auswirkungen im E2 testen ....


      sonst mal im DMM Board bei den Enigma2 Dev's nachfragen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      ¯\_(ツ)_/¯

      Quellcode

      1. root@dm920:~$ mount | grep "/ "
      2. /dev/mmcblk1p1 on / type ext4 (rw,relatime,data=ordered)
      3. root@dm920:~$
    • Hmm. Interessant. Das ist im Code wirklich nicht ganz vollständig durchdacht wohl.
      Also du kannst einen Timeout angeben, aber nachdem der Timeout abgelaufen ist, wird einfach die Default-Variante ausgegeben. Problem: Du kannst garnicht angeben, was du als Default haben willst.

      Ich würde da einfach das WebIF erweitern.

      Unterschiede-Datei

      1. --- /usr/lib/enigma2/python/Plugins/Extensions/WebInterface/web/message.xml.org
      2. +++ /usr/lib/enigma2/python/Plugins/Extensions/WebInterface/web/message.xml
      3. @@ -1,5 +1,5 @@
      4. <e2:screen name="MessageWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
      5. -<e2:element source="Message" id="text,type,timeout"><e2:convert type="web:Null" /></e2:element>
      6. +<e2:element source="Message" id="text,type,timeout,default"><e2:convert type="web:Null" /></e2:element>
      7. <e2simplexmlresult>
      8. <e2state><e2:element source="Message"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
      9. <e2statetext><e2:element source="Message"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>


      Unterschiede-Datei

      1. --- /usr/lib/enigma2/python/Plugins/Extensions/WebInterface/WebComponents/Sources/Message.py.org
      2. +++ /usr/lib/enigma2/python/Plugins/Extensions/WebInterface/WebComponents/Sources/Message.py
      3. @@ -40,6 +40,10 @@
      4. if typeint == MessageBox.TYPE_YESNO:
      5. #dont know how to give the result to the webif back
      6. mtype = MessageBox.TYPE_YESNO
      7. +
      8. + mdefault = True
      9. + if self.cmd['default'] is not None and self.cmd['default'] == "n":
      10. + mdefault = False
      11. elif typeint == MessageBox.TYPE_INFO:
      12. mtype = MessageBox.TYPE_INFO
      13. elif typeint == MessageBox.TYPE_WARNING:
      Alles anzeigen


      Dann kannst du mit 192.168.1.12/web/message?text=…ype=0&timeout=5&default=n oder 192.168.1.12/web/message?text=…ype=0&timeout=5&default=y das Überschreiben. Wird nix angegeben, bleibt es bei Yes als Default.

      Kannst du natürlich auch so den DMM Devs vorschlagen. Ob dies einbauen... ?(
    • Hallo!

      Erstmal DANKE für die guten Antworten! :)

      Leider kommt es für mich nicht in Frage, dass man im Image der Dreambox Anpassungen vornehmen muss (das will ich den Endbenutzern von meinem "Skript" nicht zumuten). Für mich allein wäre das ok, aber für die Endbenutzer wohl eher unpraktisch.

      Als workaround werde ich das mit dem Tastendruck nach unten noch probieren (von "Fred Bogus Trumper" vorgeschlagen). Mal sehen, was dann da für eine Antwort kommt.

      Die Lösung von "m0rphU" würde mir sehr gut gefallen, sofern diese fest ins OE2.0 integriert werden würde. Dann müsste ich den Endbenutzern einfach nur sagen > Update auf ein aktuelles Image, wenn du das Feature nutzen willst.
      Also ich wäre sehr dafür :D Kann ich irgendwas dazu beitragen, damit das bald integriert wird?

      Besten Dank und Gruß,
      Chris
    • Wenn das DMM reinmacht, ist natürlich auch Voraussetzung, dass jeder User ein aktuelles unstable Image installiert hat - das kan man über eine Abhängigkeit im .ipk/.deb lösen. Dann kann man das plugin nur intallieren, wenn eine bestimmte enigma2 Version installiert ist

      Wenn du es per script mit dem "down" Befehl nachsenden zwar umständlich, aber könnte klappen, allerdings deaktivierst du so den Timer und musst das mit einem sleep abfangen

      der Rückgabewert, wenn keine Auswahl getroffen wurde, ist dann "No answer in time" dann müsstest du noch ein Exit nachsenden, damit die Massagebox weggeklickt wird

      etwa so, aber das ist wirklch umständlich

      Quellcode

      1. wget -qO- "http://localhost/web/message?text=FRAGE&type=0&timeout=5" &>/dev/null
      2. wget -qO- "http://localhost/web/remotecontrol?command=108" &>/dev/null
      3. sleep 6
      4. ANSWER=$(wget -qO- "http://localhost/web/messageanswer?getanswer=now"|grep e2statetext|sed 's/e2statetext>\|<\|\/\|^[ \t]*//g')
      5. case $ANSWER in
      6. 'No answer in time')
      7. # send EXIT command
      8. wget -qO- "http://localhost/web/remotecontrol?command=174" &>/dev/null
      9. ANSWER='Answer is NO!
      10. ;;
      11. esac
      12. case $ANSWER in
      13. 'Answer is YES!') echo yes;;
      14. 'Answer is NO!') echo no;;
      15. esac
      Alles anzeigen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      ¯\_(ツ)_/¯

      Quellcode

      1. root@dm920:~$ mount | grep "/ "
      2. /dev/mmcblk1p1 on / type ext4 (rw,relatime,data=ordered)
      3. root@dm920:~$

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Fred Bogus Trumper ()

    • Ist eingecheckt für 4.0 und master.

      Parameter:
      default=no --> Nein ist selektiert
      default=yes --> Ja ist selektiert

      Wird default nicht mitgegeben, so gilt der bisherige default Ja.
      Gruss
      Dre

      Boxen: diverse
      Developer Project Merlin
    • Na das sind doch mal gute Neuigkeiten, pünktlich zum Wochenende :)

      Dann sage ich mal VIELEN DANK! 8)

      Und das ist jetzt nur bei Newnigma im unstable Image, oder auch in allen anderen Enigma2 Images?

      Nochmals Vielen Dank und allen ein schönes Wochenende!
      Chris
    • Abend!

      Ich hab doch noch eine Frage dazu. Kann ich irgendwie von extern abfragen, ob der Receiver eine Enigma Version hat in der dieser Parameter verfügbar ist? Die Newnigma Version bekomme ich ausgelesen. Aber gibt es da auch eine "allgemeine" Version die ich abfragen und auswerten kann?
      Und welche Version wäre das dann, in der der Parameter als erstes verfügbar war/ist?

      Also ganz grob beschrieben - so in der Art mit PHP:

      PHP-Quellcode

      1. $version = file_get_contents("http://dreambox/web/getversion");
      2. if ($version > 3) {
      3. echo "parameter DEFAULT ist verfügbar";
      4. }
      5. else {
      6. echo "parameter DEFAULT ist nicht verfügbar";
      7. }


      Ich hoffe ihr versteht was ich meine. Dann würde ich in mein "Programm" einfach eine solche Abfrage einbauen und dann entweder den neuen Parameter verwenden, oder wenn nicht vorhanden dann den workaround verwenden.

      Danke!
      Chris
    • die WebInterface Version bekommt man so raus:

      Quellcode

      1. wget -qO- http://localhost/web/about|grep webifversion|sed 's/e2webifversion>\|<\|\/\|^[ \t]*//g'


      aber die hat sich nicht geändert, ist noch immer 1.7.5

      entweder die Paketversion abfragen, wenn du ein .ipk/deb baust oder die von @Dre eingecheckte Änderung in der message.xml abfragen
      etwa so:

      Quellcode

      1. grep id= /usr/lib/enigma2/python/Plugins/Extensions/WebInterface/web/message.xml|grep -c default


      Rückgabewert 1 = neue Version
      Rückgabewert 0 = alte Version (ohne default)

      könnte dann im Script so aussehen

      Quellcode

      1. if test $(grep id= /usr/lib/enigma2/python/Plugins/Extensions/WebInterface/web/message.xml |grep -c default) = 1; then
      2. # neue Version, default = NO
      3. wget -qO- "http://192.168.1.12/web/message?text=FRAGE&type=0&timeout=5&default=no"
      4. .
      5. .
      6. else
      7. # alte Verision, default = YES
      8. wget -qO- "http://192.168.1.12/web/message?text=FRAGE&type=0&timeout=5"
      9. wget -qO- "http://localhost/web/remotecontrol?command=108" &>/dev/null
      10. .
      11. .
      12. fi
      Alles anzeigen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      ¯\_(ツ)_/¯

      Quellcode

      1. root@dm920:~$ mount | grep "/ "
      2. /dev/mmcblk1p1 on / type ext4 (rw,relatime,data=ordered)
      3. root@dm920:~$