[erledigt] Reload-Widget, Anpassung an ftui 2.5/ 2.6

Begonnen von CaptainHook, 24 April 2017, 08:11:51

Vorheriges Thema - Nächstes Thema

CaptainHook

Hi,

ich nutze eine Überwachungskamera zusammen mit einem Bewegungsmelder. Ich möchte das in meiner TabletUI das letzte Bild der Kamera als Popup angezeigt wird.
Das funktioniert soweit gut. allerdings wird mit nicht das aktuelle Bild angezeigt sonder immer ein altes Bild. Wenn ich die Seite manuell neulade, wird das richtige Bild angezeigt. Bei der suche nach einer Lösung bin ich auch das veraltetet reload-widget gestoßen.

Das Wigdet habe ich Versucht an die aktuelle Version anzupassen.


das angepasste Widget:

/* global ftui:true, Modul_widget:true */

"use strict";

var Modul_reload = function () {

    function init_attr(elem) {
        me.elements = $('div[data-type="' + me.widgetname + '"]', me.area);
        me.elements.each(function (index) {
            var elem = $(this);
            elem.initData('device',     elem.data('device'));
            elem.initData('get',        elem.data('get')        ||                              'STATE');
            elem.initData('get-on',     elem.data('get-on')     || elem.data('reload-on')    || 1);
            elem.initData('get-off',    elem.data('get-off')    || elem.data('reset-to')     || 0);

            me.addReading(elem, 'get');
        });
    }

    function update(dev, par) {

        me.elements.filterDeviceReading('get', dev, par)
            .each(function (index) {


                var elem = $(this);

                var value = elem.getReading('get').val;
                var state = ftui.getPart(value, elem.data('part'));


                if (ftui.isValid(value))
                {

                  if (value == elem.data('get-on'))
                  {
                    ftui.sendFhemCommand("set "+elem.data('device')+" "+elem.data('get')+" "+elem.data('get-off'));
                    elem.getReading('get').val = elem.data('get-off'); /* WHY?!?!?!? but works*/
                    location.reload();
                  }
                }
            });
    }

    // public
    // inherit members from base class
    var me = $.extend(new Modul_widget(), {
        //override members
        widgetname: 'reload',
        init_attr: init_attr,
        update: update,

    });

    return me;
};




    <div data-type="reload"
       data-device="D_TABLETRELOAD"
       data-get="action"
       data-reload-on="1"
       data-reset-to="0">
    </div>



Das Problem ist nun, dass wenn ich meinen Dummy auf "1" setzte wird die Seite in einer Dauerschleife neu geladen obwohl das reading brav auf 0 zurückgesetzt wurde/wird.
In der Javascript-Console sieht man das, dass reading auch nach dem setzten auf "0" immer noch als "1" ausgelesen wird?

Hat jemand eine Idee wie ich das anpassen muss, dass es funktioniert?
Oder hat jemand eine andere Idee wie ich die TabletUI beim anzeigen des Popups zu einem reload bewegen kann?


Viele Grüße,
Stephan

Edit: Funktioniert jetzt bei mir wieder. Angepasste Version im Anhang ;)
Lenovo M53 ThinkCentre 10DC | Docker | SolarEdge SE10K + SE5000H + Energy Bank 10KWh | EspEasy | Tasmota | Hue | Alexa | uvm.

StephanFHEM

hab deine widget-Datei aus dem Anhang runtergeladen und den Code in meinem TabletUI eingebaut.
Hab aber das von dir beschriebene Problem immer noch. Immer wenn ich mit setreading action manuell auf 1 setze, dann läd er in Dauerschleife neu.
ist das so gedacht, dass man den Wert z.B. per DOIF wieder zurücksetzen muss in FHEM?

mich hat auch gewundert, dass auf der Seite jetzt "reload" steht. darauf kann man klicken aber es passiert nichts. muss man den action-wert mit einem Dummy extra setzen oder kann man das über den Reload-Button erledigen? Wie genau ist die Funktionalität?

StephanFHEM

So... ein Problem gelöst aber ein neues entdeckt. Hab das Widget so umgeschrieben, dass ich jetzt mit data-cmd auch ein setreading setzen kann statt set. Das klappt auch super im heimischen WLAN. Wenn ich allerdings von extern zugreife, dann macht er wieder die Dauerschleife. Woran kann das liegen?