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?
www/tablet/js/widget_example.js
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?
Reagiert der Eventmonitor von FHEM? Es müsste ja nur ein Update eines Readings sein.
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
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.
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?
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');
....
});
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^^
danke. ist gefixed
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.
Grundsätzlich, ja.
Du mal debug auf 5 setzen und schauen, ob per Longpoll überhaupt was ankommt.
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.
,, irritiert mich und das undefined
Das kann ich noch versuchen, zu verhindern
Hast du einen Vorschlag wie ich raus finden kann woher das kommt?
Zitat von: setstate am 20 März 2017, 19:12:11
,, irritiert mich und das undefined
Das kann ich noch versuchen, zu verhindern
Das ,, kommt bestimmt davon, das der Button zum öffnen des Weekprofiles kein data-device hat.
<div id="weekprofile_ftui" class="inline small"
data-type="weekprofile"
data-device="wochenprofil"
data-profile="Bad"
data-style="round"
data-theme="light"
data-height="300"
data-width="auto"
data-title="Heizung Bad" >
<div data-type="button" class="small left-narrow-10 readonly"
data-icon="fa-calendar"
data-on-color="green"
data-background-icon=""
data-on-background-color="#505050">
</div>
</div>
Das hat aber sicher nichts mit dem Trigger Event zu tun.
Kann ich dir beim debuggen irgendwie helfen?
Edit:
zwischen longpoll und disabled befinden sich auch 2 leerzeichen
das zerstört eventuell auch die Anfrage
Funktioniert der Trigger, wenn longpoll_filter auf ".*" steht?
Zitat von: setstate am 21 März 2017, 17:42:06
Funktioniert der Trigger, wenn longpoll_filter auf ".*" steht?
nein, auch dann kommt nix an
Mmmm, da bin ich raus ...
Sorry
Hast du ein komplettes Beispiel mit einem Trigger, das bei dir funktioniert? Dann kann ich schauen ob es ein grundsätzliches Problem bei mir ist.
Nein, ich wüsste nicht, wo ich Trigger benutze.
Ich habe nur das konstruierte Beispiel aus #7, was bei mir funktionierte.
ist es Möglich, das du nur globale Trigger abonniert hast?
Ich habe nacheinander Ein Weekprofile gespeichert und "Save Config" augeführt.
Der Trigger vom "Save Config" kommt an. Der vom Weekprofile nicht.
Event Monitor:
2017-03-22 14:23:54 weekprofile weekprofil.test.toast PROFILES_SAVED
2017-03-22 14:24:32 Global global SAVE
FTUI Log:
["#FHEMWEB:WEB_127.0.0.1_59456","$('#saveCheck').css('visibility','hidden')",""] fhem-tablet-ui.js:1720:13
Array [ "#FHEMWEB:WEB_127.0.0.1_59456", "$('#saveCheck').css('visibility','h...", "" ] fhem-tablet-ui.js:1720:13
fhem-tablet-ui.js:1720:13
["global","no definition","<div id=\u0022global\u0022 title=\u0022no definition\u0022 class=\u0022col2\u0022>no definition</div>"] fhem-tablet-ui.js:1720:13
Array [ "global", "no definition", "<div id="global" title="no definit..." ] fhem-tablet-ui.js:1720:13
["global-SAVE","",""] fhem-tablet-ui.js:1720:13
Array [ "global-SAVE", "", "" ] fhem-tablet-ui.js:1720:13
longpoll_filter steht auf ".*"
Das Abo wird ja über data-device und data-get festgelegt
Also data-device="weekprofil.test.toast" data-get="PROFILES_SAVED"