update Mechanismus von FTUI

Begonnen von klausw, 14 März 2017, 19:22:11

Vorheriges Thema - Nächstes Thema

klausw

Hallo zusammen

ich versuche in das widget_weekprofile die Update Funktion zu implementieren.

um erstmal bisschen zu spielen um zu verstehen wie das funktioniert habe ich erstmal nur ein Log drin:

    function update (dev,par){
    ftui.log(1,"weekprofile im update: '"+dev+"' | '"+par+"'");
    };


Da kommen zwar Meldungen rein, aber die sind alle von anderen Devices die in der FTUI Umgebung vorhanden sind.
Vermutlich muss ich noch irgendwo registrieren, worauf gelauscht werden soll.

Im Event Monitor taucht bei Änderungen im weekprofile folgendes auf:

2017-03-14 19:10:01 weekprofile wochenprofil PROFILES_SAVED

Wie bekomme ich dazu  function update ausgelöst?

RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

setstate

www/tablet/js/widget_example.js

klausw

Das habe ich komplett übersehen, danke
Zitat von: setstate am 14 März 2017, 23:05:19
www/tablet/js/widget_example.js

Allerdings wird im weekprofile bei Datenänderung kein Reading erzeugt, sondern nur ein Event:
DoTrigger($me,"PROFILES_SAVED",1)

Dieses bekomme ich nicht mit me.addReading(elem, 'PROFILES_SAVED'); eingefangen.

Auch die JSON Daten der Heizzeiten sind nur als Referenz in den Internals gespeichert:
Internals:
   NAME       wochenprofil
   NR         567
   NTFY_ORDER 50-wochenprofil
   STATE      created
   TYPE       weekprofile
   PROFILES:
     HASH(0x66b10d8)
     HASH(0x6bcb048)
   Readings:
     2017-03-14 19:43:56   profile_count   2
     2017-03-14 13:34:33   state           created
   TOPICS:
     default
Attributes:
   room       Test



gibt es da noch eine Andere Möglichkeit?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

setstate

Reagiert der Eventmonitor von FHEM? Es müsste ja nur ein Update eines Readings sein.

klausw

Zitat von: setstate am 15 März 2017, 00:23:20
Reagiert der Eventmonitor von FHEM? Es müsste ja nur ein Update eines Readings sein.

Ja da taucht das auf:
2017-03-14 19:10:01 weekprofile wochenprofil PROFILES_SAVED

das ist aber kein Reading. Die beiden Readings ändern sich nicht.

Den Mechanismus hinter DoTrigger() kenne ich nicht
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

setstate

solche Events kommen grundsätzlich auch im FTUI per longpoll an. Ich müsste mir überlegen, was und wie man umbauen muss, um Widgets Updates auszulösen.

klausw

Zitat von: setstate am 15 März 2017, 07:02:09
solche Events kommen grundsätzlich auch im FTUI per longpoll an. Ich müsste mir überlegen, was und wie man umbauen muss, um Widgets Updates auszulösen.
Verstehe, währe super wenn du das hinbekommst.
Kommen die denn beim widget_eventmonitor.js an?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

setstate

mit der 2.6.14 kann man jetzt auch auf Trigger Events lauschen

<div data-type="example" data-device="global" data-get="SAVE"></div>

Reaktion in der Update Funktion im eigenen Widget

    function update(dev, par) {
        me.elements.filterDeviceReading('get', dev, par)
            .each(function (index) {
            console.log('triggered');
                ....
            });

roman1528

Zitat von: setstate am 18 März 2017, 09:24:40
mit der 2.6.14 kann man jetzt auch auf Trigger Events lauschen

<div data-type="example" data-device="global" data-get="SAVE"></div>

Reaktion in der Update Funktion im eigenen Widget

    function update(dev, par) {
        me.elements.filterDeviceReading('get', dev, par)
            .each(function (index) {
            console.log('triggered');
                ....
            });


widget_link.js

Zeile 259 ist eine geschwungene Klammer zu viel^^

Grüße^^
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

setstate


klausw

Ist das so gemeint:

function init() {
me.elements = $('div[data-type="'+me.widgetname+'"]',this.area);
        me.elements.each(function(index) {           
            ...
            elem.initData('updtrig', 'PROFILES_SAVED');
            // subscripe my readings for updating
            me.addReading(elem, 'updtrig');
            ...
        });
    };


    function update (dev,par){
    me.elements.filterDeviceReading('updtrig', dev, par)
            .each(function (index) {
            console.log('weekprofile triggered: ' + $(this));
            });
    };


oder habe ich da einen Denkfehler drin?
Im Log kommt nix an.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

setstate

Grundsätzlich, ja.
Du mal debug auf 5  setzen und schauen, ob per Longpoll überhaupt was ankommt.

klausw

Irgendwas klemmt noch:

Die Verbindung zu wss://meindynvpn.de:8443/fhem?XHR=1&inform=type=status;addglobal=1;filter=WEB,testdummy,testdummy1,,timer,wochenprofil,weekprofil.test.toast,Grundig,GPIO4_DS1820_000802299fdc,SHT21,BMP180,Fritzbox_CM,Anwesend%20STATE%20longpoll%20%20disabled%20PROFILES_SAVED%20undefined%20humidity%20pressure%20countmissed%20state%20playStatus;fmt=JSON&fwcsrf=null wurde unterbrochen, während die Seite geladen wurde.  fhem-tablet-ui.js:893:29
Error while longpoll  fhem-tablet-ui.js:1716:13
restartLongpoll  fhem-tablet-ui.js:1716:13
stopLongpoll  fhem-tablet-ui.js:1716:13
startLongpoll: true  fhem-tablet-ui.js:1716:13
websockets URL=wss://meindynvpn.de:8443/fhem?XHR=1&inform=type=status;addglobal=1;filter=WEB,testdummy,testdummy1,,timer,wochenprofil,weekprofil.test.toast,Grundig,GPIO4_DS1820_000802299fdc,SHT21,BMP180,Fritzbox_CM,Anwesend STATE longpoll  disabled PROFILES_SAVED undefined humidity pressure countmissed state playStatus;fmt=JSON&fwcsrf=null  fhem-tablet-ui.js:1716:13


Aber beispielsweise Buttons werden sofort aktualisiert wenn ich die in fhemweb schalte.

RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

setstate

,, irritiert mich und das undefined

Das kann ich noch versuchen, zu verhindern

klausw

Hast du einen Vorschlag wie ich raus finden kann woher das kommt?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280