HOMEMATIC2013-07-25 13:05:09 CUL_HM CUL_HM_switch_1D9AEE CMDs_pending
2013-07-25 13:05:09 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 set_on-10
2013-07-25 13:05:09 CUL_HM CUL_HM_switch_1D9AEE CMDs_processing...
2013-07-25 13:05:10 CUL_HM CUL_HM_switch_1D9AEE CMDs_done_events:3
2013-07-25 13:05:10 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 CommandAccepted: yes
2013-07-25 13:05:10 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 level: 100 %
2013-07-25 13:05:10 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 deviceMsg: on (to cul2)
2013-07-25 13:05:10 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 on
2013-07-25 13:05:11 CUL_HM CUL_HM_switch_1D9AEE CMDs_pending
2013-07-25 13:05:11 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 set_off
2013-07-25 13:05:11 CUL_HM CUL_HM_switch_1D9AEE CMDs_processing...
2013-07-25 13:05:12 CUL_HM CUL_HM_switch_1D9AEE CMDs_done_events:3
2013-07-25 13:05:12 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 CommandAccepted: yes
2013-07-25 13:05:12 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 level: 0 %
2013-07-25 13:05:12 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 deviceMsg: off (to cul2)
2013-07-25 13:05:12 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 off
2013-07-25 13:05:13 CUL_HM CUL_HM_switch_1D9AEE CMDs_pending
2013-07-25 13:05:13 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 set_on
2013-07-25 13:05:13 CUL_HM CUL_HM_switch_1D9AEE CMDs_processing...
2013-07-25 13:05:13 CUL_HM CUL_HM_switch_1D9AEE CMDs_done_events:3
2013-07-25 13:05:13 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 CommandAccepted: yes
2013-07-25 13:05:13 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 level: 100 %
2013-07-25 13:05:13 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 deviceMsg: on (to cul2)
2013-07-25 13:05:13 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 on
2013-07-25 13:05:15 CUL_HM CUL_HM_switch_1D9AEE CMDs_pending
2013-07-25 13:05:15 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 set_off
2013-07-25 13:05:15 CUL_HM CUL_HM_switch_1D9AEE CMDs_processing...
2013-07-25 13:05:15 CUL_HM CUL_HM_switch_1D9AEE CMDs_done_events:3
2013-07-25 13:05:15 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 CommandAccepted: yes
2013-07-25 13:05:15 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 level: 0 %
2013-07-25 13:05:15 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 deviceMsg: off (to cul2)
2013-07-25 13:05:15 CUL_HM CUL_HM_switch_1D9AEE_Sw_03 off[/code]
in dem raum in dem die beiden geräte von oben sind ist FW_roomStatesForInform leer.
in einem anderen Raum in dem ich zwei swap devices mit dem gleichen verhalten habe ist FW_roomStatesForInform:2013.07.25 13:14:15 3: FW_roomStatesForInform: $VAR1 = 'SWAP_AA<<off<<<a onClick="FW_cmd(\'/fhem?XHR=1&cmd.SWAP_AA=set SWAP_AA on&room=SWAP\')"><div id="SWAP_AA" class="col2"><svg class=" off" version="1.0" xmlns="[url=www.w3.org/2000/svg]http://www.w3.org/2000/svg[/url]" width="468pt" height="617pt" viewBox="0 0 468 617" preserveAspectRatio="xMidYMid meet"> <metadata> Created by potrace 1.8, written by Peter Selinger 2001-2007 </metadata> <g transform="translate(0,617) scale(0.221801,-0.221801)" stroke="none"> <path d="M756 2765 c-9 -25 -7 -128 3 -144 5 -8 16 -11 25 -8 24 10 19 160 -5 165 -9 2 -19 -4 -23 -13z"/> <path d="M1310 2695 c0 -77 2 -86 18 -83 14 3 17 15 17 83 0 68 -3 80 -17 83 -16 3 -18 -6 -18 -83z"/> <path d="M1806 2581 c-47 -47 -67 -74 -63 -85 4 -9 10 -16 14 -16 17 0 155 148 149 159 -14 21 -32 10 -100 -58z"/> <path d="M220 2622 c0 -23 125 -147 139 -138 21 13 11 32 -52 94 -64 64 -87 75 -87 44z"/> <path d="M809 2257 c-70 -20 -136 -63 -174 -115 -65 -87 -65 -91 -65 -643 0 -479 1 -500 21 -553 25 -67 87 -134 160 -173 l54 -28 250 0 c235 0 253 1 296 21 63 29 125 94 158 163 l26 56 0 520 0 520 -28 56 c-32 66 -99 132 -165 162 -43 20 -65 22 -267 24 -153 2 -234 -2 -266 -10z m486 -146 c48 -22 69 -44 90 -94 13 -31 15 -107 15 -517 0 -526 0 -523 -59 -573 -48 -40 -90 -47 -299 -47 -205 0 -226 4 -280 54 -51 46 -50 40 -53 567 l-3 495 23 40 c24 43 64 72 115 85 17 4 117 7 221 8 164 0 195 -2 230 -18z"/> <path d="M13 2065 c-11 -29 12 -36 118 -33 96 3 104 4 104 23 0 19 -8 20 -108 23 -91 2 -108 0 -114 -13z"/> <path d="M1877 2066 c-11 -27 17 -36 113 -36 100 0 127 8 117 34 -5 13 -25 16 -116 16 -83 0 -110 -3 -114 -14z"/> <path d="M10 1510 c0 -19 6 -20 116 -20 105 0 115 2 112 18 -3 15 -18 17 -116 20 -107 3 -112 2 -112 -18z"/> <path d="M1876 1522 c-2 -4 -1 -14 3 -20 5 -9 38 -12 117 -10 89 2 109 6 109 18 0 12 -20 16 -112 18 -61 1 -114 -1 -117 -6z"/> <path d="M21 981 c-8 -5 -11 -16 -8 -25 5 -13 24 -16 112 -16 88 0 107 3 112 16 10 26 -16 34 -112 34 -50 0 -96 -4 -104 -9z"/> <path d="M1882 978 c-8 -8 -9 -15 -1 -25 8 -9 40 -13 108 -13 101 0 128 8 118 34 -5 13 -24 16 -110 16 -66 0 -107 -4 -115 -12z"/> <path d="M768 693 c-36 -41 -30 -95 11 -108 60 -19 520 -91 539 -84 53 20 66 99 19 119 -28 12 -482 90 -524 90 -16 0 -37 -8 -45 -17z"/> <path d="M793 530 c-41 -17 -58 -85 -28 -110 15 -12 492 -100 543 -100 33 0 62 34 62 74 0 18 -6 38 -13 44 -6 6 -120 29 -252 51 -132 23 -251 43 -265 46 -14 2 -35 0 -47 -5z"/> <path d="M793 360 c-46 -18 -59 -90 -20 -114 21 -13 478 -96 531 -96 14 0 35 9 46 20 26 26 27 85 2 99 -10 5 -126 28 -258 51 -131 22 -248 42 -259 44 -11 2 -30 0 -42 -4z"/> <path d="M871 154 c-26 -33 -27 -55 -3 -82 13 -16 51 -26 176 -47 158 -27 159 -27 185 -7 31 22 41 81 18 101 -16 13 -271 61 -323 61 -23 0 -39 -8 -53 -26z"/> </g> </svg></div></a>
SWAP_CC<<off<<<a onClick="FW_cmd(\'/fhem?XHR=1&cmd.SWAP_CC=set SWAP_CC on&room=SWAP\')"><div id="SWAP_CC" class="col2"><svg class=" off" version="1.0" xmlns="[url=www.w3.org/2000/svg]http://www.w3.org/2000/svg[/url]" width="468pt" height="617pt" viewBox="0 0 468 617" preserveAspectRatio="xMidYMid meet"> <metadata> Created by potrace 1.8, written by Peter Selinger 2001-2007 </metadata> <g transform="translate(0,617) scale(0.221801,-0.221801)" stroke="none"> <path d="M756 2765 c-9 -25 -7 -128 3 -144 5 -8 16 -11 25 -8 24 10 19 160 -5 165 -9 2 -19 -4 -23 -13z"/> <path d="M1310 2695 c0 -77 2 -86 18 -83 14 3 17 15 17 83 0 68 -3 80 -17 83 -16 3 -18 -6 -18 -83z"/> <path d="M1806 2581 c-47 -47 -67 -74 -63 -85 4 -9 10 -16 14 -16 17 0 155 148 149 159 -14 21 -32 10 -100 -58z"/> <path d="M220 2622 c0 -23 125 -147 139 -138 21 13 11 32 -52 94 -64 64 -87 75 -87 44z"/> <path d="M809 2257 c-70 -20 -136 -63 -174 -115 -65 -87 -65 -91 -65 -643 0 -479 1 -500 21 -553 25 -67 87 -134 160 -173 l54 -28 250 0 c235 0 253 1 296 21 63 29 125 94 158 163 l26 56 0 520 0 520 -28 56 c-32 66 -99 132 -165 162 -43 20 -65 22 -267 24 -153 2 -234 -2 -266 -10z m486 -146 c48 -22 69 -44 90 -94 13 -31 15 -107 15 -517 0 -526 0 -523 -59 -573 -48 -40 -90 -47 -299 -47 -205 0 -226 4 -280 54 -51 46 -50 40 -53 567 l-3 495 23 40 c24 43 64 72 115 85 17 4 117 7 221 8 164 0 195 -2 230 -18z"/> <path d="M13 2065 c-11 -29 12 -36 118 -33 96 3 104 4 104 23 0 19 -8 20 -108 23 -91 2 -108 0 -114 -13z"/> <path d="M1877 2066 c-11 -27 17 -36 113 -36 100 0 127 8 117 34 -5 13 -25 16 -116 16 -83 0 -110 -3 -114 -14z"/> <path d="M10 1510 c0 -19 6 -20 116 -20 105 0 115 2 112 18 -3 15 -18 17 -116 20 -107 3 -112 2 -112 -18z"/> <path d="M1876 1522 c-2 -4 -1 -14 3 -20 5 -9 38 -12 117 -10 89 2 109 6 109 18 0 12 -20 16 -112 18 -61 1 -114 -1 -117 -6z"/> <path d="M21 981 c-8 -5 -11 -16 -8 -25 5 -13 24 -16 112 -16 88 0 107 3 112 16 10 26 -16 34 -112 34 -50 0 -96 -4 -104 -9z"/> <path d="M1882 978 c-8 -8 -9 -15 -1 -25 8 -9 40 -13 108 -13 101 0 128 8 118 34 -5 13 -24 16 -110 16 -66 0 -107 -4 -115 -12z"/> <path d="M768 693 c-36 -41 -30 -95 11 -108 60 -19 520 -91 539 -84 53 20 66 99 19 119 -28 12 -482 90 -524 90 -16 0 -37 -8 -45 -17z"/> <path d="M793 530 c-41 -17 -58 -85 -28 -110 15 -12 492 -100 543 -100 33 0 62 34 62 74 0 18 -6 38 -13 44 -6 6 -120 29 -252 51 -132 23 -251 43 -265 46 -14 2 -35 0 -47 -5z"/> <path d="M793 360 c-46 -18 -59 -90 -20 -114 21 -13 478 -96 531 -96 14 0 35 9 46 20 26 26 27 85 2 99 -10 5 -126 28 -258 51 -131 22 -248 42 -259 44 -11 2 -30 0 -42 -4z"/> <path d="M871 154 c-26 -33 -27 -55 -3 -82 13 -16 51 -26 176 -47 158 -27 159 -27 185 -7 31 22 41 81 18 101 -16 13 -271 61 -323 61 -23 0 -39 -8 -53 -26z"/> </g> </svg></div></a>
temppress<<28.2°C 1015.5mbar<<<div id="temppress" class="col2">28.2°C 1015.5mbar</div>
';
gerade noch mal mit firefox getestet. gleicher effekt. hm devices bekommen das zweite update nicht mit. auch ohne die 5sec meldung.
zusätzlich sehe ich gerade das mein firefox auf dem mac statt dem svg icons überall jeweils den text "Created by potrace 1.8, written by Peter Selinger 2001-2007" anzeigt.
Ich finde Martin@HM uebertreibt mit Events, mit einem HM Schalter hat FHEM mind. 8x mehr zu tun, als mit einem FS20. Wir sollten ihm zeigen, dass man readings auch ohne event setzen kann (4. Parameter bei readingsBulkUpdate auf 0 setzen), ich schreibe es per PM.
Da ich z.Zt. kein HM Schalter in Griff habe, habe ich versucht das Verhalten mit dummy&sleep zu reproduzieren, geht aber nicht so einfach, bzw. es funktioniert. Es hilft mir auch nicht wirklich, wenn Du die FW_roomStatesForInform Ausgabe zu einem swap Geraet, die events aber zu einem Homematic Schalter zeigst. Nach etwas Code-Untersuchung weiss ich jetzt, dass ich zusaetzlich die Daten auch vom FW_FlushInform benoetige.
Ich vermute folgendes:
fhemweb.js/longpoll benoetigt on bzw. off als STATE des Schalters, direkt im notifyFn von FHEMWEB.
CUL_HM triggert zwar on/off, aber das massgaebliche STATE wird vermutlich nach diesem notify (oder garnicht?) auf on gesetzt. Detailliert mit Geraet kann ich das Problem erst in ein paar Tagen pruefen.
Dein swap Log kann evtl. auf ein Problem mit NL hinweisen, falls du die debug Ausgabe direkt vor dem return eingebaut hast.
das debug war direkt vor dem return. vom swap raum deshalb weil es im anderen raum leer war.
ich mach noch mal logs und debug ausgaben inklusive FW_FlushInform und swap raum.
ein unterschied zwischen hm oder swap und fs20 ist das der status als reaktion auf die antwort vom device gesetzt wird und nicht schon beim senden an das device. das laesst sich über du dummys vermutlich genau nicht abbilden.
Pruef bitte auch, ob beim FW_notifyFn Aufruf swap STATE schon richtig gesetzt ist.
Mit einem "einfachen" HM-LC-SW1-PL kann ich das Problem nicht nachvollziehen.
Ich kriege beim Schalten "nur" folgende Events:
2013-07-30 09:08:22.596 CUL_HM hm1 set_on
2013-07-30 09:08:22.750 CUL_HM hm1 level: 100 %
2013-07-30 09:08:22.750 CUL_HM hm1 deviceMsg: on (to CUL)
2013-07-30 09:08:22.750 CUL_HM hm1 on
Das Bild wechselt zuerst zur Lampe mit Ausrufungszeichen und dann zum Endergebnis.
Getestet mit FF, Chrome und telnet (als trigger).
Evtl. hat Martin@HM hier was wesentliches geaendert.
ich habe eben noch ein wenig gespielt: ein HM-LC-SW1-PL liefert tatsächlich sehr viel weniger events als ein HM-LC-SW4-DR oder ein HM-LC-Bl1PBU-FM.
es liegt aber nicht an der anzahl der events eines devices sondern hängt vom raum ab in dem das device ist. wenn ich den HM-LC-SW1-PL im raum Büro lasse geht es. wenn ich ihn in den gleichen raum schiebe wie den HM-LC-SW4-DR aus dem log oben geht er nicht mehr. umgekehrt geht der HM-LC-SW4-DR wenn ich ihn in einen raum test schiebe dort plötzlich auch.
ich mache noch mal logs inklusive FW_roomStatesForInform, ...
unabhängig davon zappelt die ganze web seite bei jedem schaltvorgang oder baut sich zum teil verzögert auf. das ist bei der xhr version besser.
so... was lange wärt...
anbei eine erste version der readingsGroup.
die html ansicht geht erstmal nur in der detail ansicht oder kann mit 'readingsGroup_2html("<name>")' in einen weblink eingebettet werden.
definition wie beim weblink typ readings. also z.b. so: define test readingsGroup .*
oder mit mehreren <device> bzw <device>:regex paramtern wenn es nicht so viel sein soll :).
das mapping muss aber ins attribut mapping und es wird %NAME ersetzt statt $NAME. die spezialargumente wie *noheader gehen noch nicht. die wandern auch noch in attribute. formatieren kommt auch später.
die neu ausgesendeten trigger sind zur zeit nur auf device ebene eingeschränkt. noch nicht auf readings ebene. d.h. es sind noch ein paar zu viel.
ist das eher so wie du es dir vorgestellt hat? das mit dem rot machen brauchst du nicht extra zu bauen. das geht direkt schon.
gruss
andre
achja: die doku ist auch noch nicht fertig :)
edit: die angehängt version noch mal aktualisiert. die interne device liste wird jetzt bei define, rename und delete irgendeines devices aktualisiert.
> ist das eher so wie du es dir vorgestellt hat?
Prinzipiell ja, bis auf Details, siehe unten.
Es schaut bei mir noch komisch aus, da .*:battery mir eine Liste mit 6x battery anzeigt, damit weiss ich nicht welche Zeile was ist. Ich wuerde statt reading lieber devname oder devname:reading sehen wollen.
Hoffentlich muss man hier nicht mapping verwenden. Apropos mapping: ich glaube Du musst ein Beispiel bringen, sonst versteht das kein Endbenutzer.
Das get verstehe ich nicht (schaut im Frontend komisch aus), und auch der Hinweis auf weblink ist mir schleierhaft (ja, es geht, aber wozu, direkt ist es doch einfacher), aber vlt. hat Du damit was vor, und da will ich nicht reinreden :)
kommt alles noch :). das war nur in einer halben stunde aus drei anderen modulen zusammenkopiert und umbenannt um das mit dem triggern zu testen.
zur zeit muss man noch alles mappen. beispiele hier: Link (http://forum.fhem.de/index.php?topic=13651.msg85027#msg85027).
defaults und doku werden natürlich noch benutzerfreundlicher.
ist es sinnvoll den weblink readings typ wieder zu entfernen wenn es so weit ist? man könnte ja erst mal einen hinweis einblenden.
> ist es sinnvoll den weblink readings typ wieder zu entfernen wenn es so weit ist?
Ja, darum wollte ich dich noch bitten :), ist mir bei fileplot/dbplot nach SVG schieben aufgefallen.
Aber erst nachdem dieses Modul eingecheckt ist.
ich habe gerade eingebaut das man die html ausgabe ähnlich wie vei devStateStyle formatieren kann. ich habe dazu die attribute style,labelStyle und valueStyle. entweder als string wie bei devStateStyle oder als perl ausdruck der jeweils reading namen und wert übergeben bekommt. damit kann man dann z.b. entweder so etwas machen wie die reading werte rechtsbündig anzeigen oder in einer zusammenfassung von temperaturen das label oder den wert für warmwasser rot und für kaltwasser blau.
damit könnte man dann z.b. in der readingsgroup alle batterie readings die nicht ok sind rot machen. oder die heitzungsgemperaturen die außerhalb des vorgegeben wertebereichs sind oder die bodenfeuchte der pflanzen die zu trocken sind oder ...
das geht für die namen und werte der readings unabhängig voneinander. dazu wäre es jetzt schön zum einen das rot einfärben beim longpoll update readingsweise abschaltbar zu machen und zum anderen dir farbe mit der eingefärbt wird vom wert abhängig zu machen.
das wertabhängig stylen kann ich zur zeit nur beim ersten auf aufbau der html seite. die farben oder formatierung soll sich aber natürlich dynamisch anpassen wenn sich die werte ändern. hast du eine idee wie man das mit dem longpoll mechanismus integriert?
wie wäre es das stylen der readings nicht nur in der readingsgroup zu erlauben sondern auch in der detail ansicht? wenn man so werte ausserhalb eines erlaubten bereichs leicht erkenne kann wäre das glaube ich allgemein recht praktisch. ebenso die {} erweiterung auch bei devStateStyle.
ein verweis auf die stylesheets reicht jetzt aber nicht weil die nicht dynamisch wertabhängig und auch nicht individuell für einzelne readings sind. für einen anwender ist es auch deutlich einfacher ein paar attribute zu setzen als stylesheets anzupassen.
edit: erste idee: beim automatisch rot machen nur den timestamp einfärben. und den wert nicht. dann kommt sich beides nicht in die quere.
> beim automatisch rot machen nur den timestamp einfärben. und den wert nicht.
DAS kriegt man aber bestimmt per stylesheet hin :)
Ich meine natuerlich das Nichteinfaerben nur fuer readingGroup Werte.
ich merke schon. du hat den komplizierten teil ignoriert :)
und auch dein einfachen teil bekommt man nicht per stylesheet hin. in fhemweb.js wird hart für spalte 1 und 2 (wert und timestamp) class=changed gesetzt. das kann ich im stylesheet nicht spaltenweise wieder ausschalten. um nur den timestamp einzufärben darf man class=changed nur für spalte 2 setzen.
ich würde vorschlagen in einem aller ersten schritt fhemweb.js so zu ändern das class=changed nur für spalte 2 (den timestamp) gesetzt wird. dann wird nur der timestamp rot wenn das reading gesetzt wird. das ist aus mehreren gründen passend:
- die farbe sagt nur aus das der wert neu ist. nicht das er sich geändert hat.
- es ist weniger rot auf dem monitor.
- der wert kann anhand anderer kriterien engefärbt werden ohne das es durch longpoll überschrieben wird.
ich würde gerne für die readings group so wenig wie möglich sonderwege gehen. und das stylen der readings ist auch für die normale detail ansicht nett.
edit: ich kann die changed farben aus dem readingsGroup modul überschreiben. d.h. punkt drei von oben spielt keine rolle mehr. die ersten beiden fände ich persönlich aber immer noch relevant.
hast du eine idee wie man den anwender in die lage versetzen kann aus dem modul kriterien für dsa einfärben aus dem javascript longpoll zu konfigurieren ohne das er das stylesheet anfassen muss? mit den style attributen von oben geht es nur einmalig beim seitenaufbau.
anbei die aktuelle version mit etwas verbesserter doku. der weblink ist nicht mehr nötig. das wäre der stand den ich einchecken würde. das einfärben per javasctipt wäre dann version 2. der patch um im weblink readings einen deprecated hinweis einzublenden kommt noch.
noch einmal eine aktualisierte version:
- doku verbessert
- möglichkeit auch internal values anzuzeigen
und drei mal patches für doku und weblink.
wenn kein wiederspruch kommt würde ich die readingsGroup morgen einchecken. übernimmst du die drei patches?
gruss
andre
> wenn kein wiederspruch kommt...
kein Widerspruch
> übernimmst du die drei patches?
Habs gemacht. Und die Rotfaerbung auf den Timestamp begrenzt.
und eingecheckt.
ich habe eben mal eine art 'proof of concept' gebastelt um aus der readingGroup das dynamische stylen eines reading wertes auch dann zu ermöglichen wenn der wert per longpoll aktualisiert wird.
damit lässt sich per trigger/doTrigger und longpoll der style (und auch andere attribute) eines reading wertes per javascript ändern ohne die seite neu aufzubauen. hierzu wird an den reading namen ein '@' angehängt: trigger <device> battery@: style="color:red"
für eine endgültige version sollte man u.a. noch verhindern das in diesem fall auch das -ts event los geschickt wird.
wenn du keine prinzipiellen einwände hast würde ich den patch gerne in dieser richtung weiter entwickeln und in der readingsGroup verwenden.
Ich habe prinzipiell nichts dagegen, obwohl ich dein Plan (auf Server Seite) noch nicht ganz verstehe.
> für eine endgültige version sollte man u.a. noch verhindern das in diesem fall auch das -ts event los geschickt wird.
Bin auf deinem Vorschlag gespannt :)
der eigentliche plan dahinter ist den style (d.h. normalerweise die farbe) eines reading wertes nicht statisch per stylehseet oder konfiguration zu vergeben sondern dynamisch am wert fest zu machen (z.b. rot für battery low und grün für ok). und das natürlich auch wenn sich der wert per longpoll ändert.
das verhindern ist ganz einfach. das push nur machen wenn kein @ im namen des readings ist:push @data, "$dn-$readingName-ts<<$tn<<$tn" if( $readingName !~ m/\@$/;
ich hab aber inzwischen noch ein wenig weiter probiert und statt dem fhemweb.js patch von oben die readingsGroup so geändert das sich die informId genau so wie bei devState nicht auf das <div> mit dem wert sondern auf das <td> darüber bezieht. dann kann ich im longpoll nicht nur den text sondern das ganze <div> mit samt dem style austauschen.
ich glaube fast diese version gefällt mir noch besser zumal keinerlei overhead für den 'fast path' entsteht. oder denkst du es könnte probleme geben wenn im inform der html code zu sehen ist?2013-08-28 22:40:32 readingsGroup test .PCA301_07F92F.power: <div style="color:green">134.5</div>
2013-08-28 22:40:32 readingsGroup test .PCA301_07F92F.consumption: <div style="color:green">0</div>
2013-08-28 22:40:32 readingsGroup test .PCA301_07F92F.consumptionTotal: <div style="color:green">0</div>
2013-08-28 22:40:32 PCA301 PCA301_07F92F power: 134.5
2013-08-28 22:40:32 PCA301 PCA301_07F92F consumption: 0
2013-08-28 22:40:32 PCA301 PCA301_07F92F consumptionTotal: 0
was aber jetzt noch mehr aufällt ist das im event monitor die zusätzlichen trigger der readingsGroup natürlich auch auftauchen. die sehen dann mit <div> und style so aus:
(siehe Anhang / see attachement)
da die events der readings group im normalfall nicht wirklich interessieren könnte man sie ausblenden in dem man sie z.b. mit einem '.' anfangen lässt und im event monitor alle diese readings ausblendet.
ansonsten noch ein kleiner patch der eine {} version von devStateStyle einbaut so wie es für die values in der readingGroup auch möglich ist.
Meiner Ansicht nach ist das nicht der richtige Weg, weil HTML nicht in die Events gehoert: wir sollten Daten und Darstellung nicht mischen.
Z.Zt. faellt mir nur ein FormatReadingsFn im Modul ein, was in FHEMWEB/FW_Notify vor dem lossenden des Nachrichts an das JavaScript aufgerufen wird, das wuerde auch das -ts Problem loesen. Was haeltst Du davon?
an etwas wie FormatReadingsFn hatte ich auch schon gedacht. aber wieder verworfen weil zu dem zeitpunkt wo es aufgerufen würde zumindest bei der readingsGroup der zusammenhang zwischen dem wert auf der einen und dem original device und dem original reading namen eigentlich nicht mehr vorhanden ist sondern rückwärts wieder aus dem namen des zusammengebauten 'pseudo' reading geparsed werden müsste. ich bin mir nicht sicher ob das immer (eindeutig) möglich ist.
vielleicht mit einem eindeutigen trennzeichen. ich schaue es mir noch mal an. aber ich glaube dann lieber doch die javascript version von oben. das funktioniert ja ohne die nebenwirkung das html sichtbar wird.
das die events der readingsGroup im event monitor auftauchen und überflüssig sind passiert aber auf jeden fall. wie ist es mit dem ausblenden durch einen punkt am anfang?
edit: die eigentlich richtige lösung wäre nicht nur daten und darstellung nicht zu mischen sondern sogar beides explizit zu machen und zu trennen. d.h. CommandTrigger und später auch readingsBulkUpdate jeweils einen zusätzlichen optionalen paramter $readingHtml zu geben. dann könnte man in FHEMWEB/FW_Notify push @data, "$dn-$readingName<<$readingVal<<$readingHtml";
verwenden. leider habe ich keine idee wie man das mit dem augenblicklichen CHANGED hin bekommt da es nur ein string array und leider kein hash mit getrenntem $readingName und $readingVal ist das man einfach um $readingHtml erweitern könnte.
> bei der readingsGroup der zusammenhang zwischen dem wert auf der einen und dem original device und dem original reading namen eigentlich nicht mehr vorhanden ist
Das gleiche Problem hat aber auch die JavaScript Loesung, oder?
> edit: die eigentlich richtige lösung wäre nicht nur daten und darstellung nicht zu mischen sondern sogar beides explizit zu machen und zu trennen
Interessante Gedanke, bin aber z.Zt (noch:) dagegen, da diese Loesung nur eine Art der Darstellung zulaesst, und den Umfang der Events fuer die meisten Faelle (logging/triggering) unnoetig aufblaest.
p.s. bitte nichts wichtiges per edit hinzufuegen, da ich sowas per E-Mail nicht mitkriege.
die javascript version von oben hat das problem nicht weil ich den trigger genau da los senden kann wo ich alle informationen habe.
das explizite formatieren oder stylen hätte keinen overhead wenn der parameter nicht gesetzt ist. dann ist alles wie bisher. und auch wenn er gesetzt ist muss er nicht im notify auftauchen. ins log muss er nur im höchsten loglevel.
es laesst auch nicht nur eine darstellung zu. wenn der anwender eine feste farbe mit style angibt ist es natürlich diese farbe. es ist ja dass was angegeben ist. aber der mechanismus funktioniert auch mit class. und dann kann man z.b. class=warning verwenden und im stylesheet entscheiden wie das dann genau aussieht.
> die javascript version von oben hat das problem nicht weil ich den trigger genau da los senden kann wo ich alle informationen habe.
Das schon, aber bein einfaerben koennte es sein, das zwei Zeilen auf identisch gemapped sind.
> es laesst auch nicht nur eine darstellung zu.
Ich dachte eher an andere (nicht FHEMWEB) Frontends.
Je laenger ich darueber nachdenke, desto unlieber wird mir es...
- das verstehe ich nicht.
- ein color:xxx oder class=warning sollte auch für andere frontends kein problem sein. css ist nicht unbedingt html spezifisch. und wenn ein frontend es nicht versteht muss es diesen teil ja nicht verwenden. es ersetz ja nicht den bisherigen normalen ascii value.
> - das verstehe ich nicht.
Vielleicht reden wir wieder aneinander vorbei :), aber ich stelle mir folgendes vor: Es gibt ein readingsGroup, da hat jemand mehrere Zeilen so gemapped, dass die identisch ausschauen. Das JavaScript hat deswegen ein Problem festzustellen, welche Zeile gemeint ist.
Wenn das kein Problem ist (weil eindeutige ids verwendet werden), dann verstehe ich nicht, wieso ein Perl-Funktionsaufruf nicht den gleichen Eintrag wiederfinden kann.
den javascript aufruf triggere ich aus dem notify in der readingsgroup. da habe ich das direkt das originaldevice. da ist alles eindeutig.
die perlfunktion hätte aber nur den gemappten reading namen aus der readingsgroup und muss daraus rückwärts das device und das original reading bestimmen. das ist dann nicht mehr unbedingt eindeutig.
Das verstehe ich wiederum nicht.
Du willst doch das JavaScript mit einem Event triggern, spezifizierst also im Event das Geraet, damit das Javascript es finden kann. Mit der gleichen Info muesste eine Perl-Funktion das Geraet doch auch wieder finden koennen, Perl ist ja nicht dummer als die Javascript Funktion.
Es sei denn du willst das zusaetzliche Info in den neuen Daten reinstecken.
Hast Du mal ein Beispiel fuer mich?
der link steckt in der informId. die kann ich im notify ohne probleme eindeutig zusammenbauen. mit der perlfunktion die nicht im event kontext des original device aufgerufen wird sondern im context der readingsGroup aber nicht weil ich aus dem nicht eindeutig gemappten namen des 'virtuellen' readings auf das device und den original reading namen zurück kommen muss.
ich mach dir ein beispiel wenn ich zurück bin.
kaum fährt man 5 stunden auto hat man auch schon wieder ein paar ideen. statt in FormatReadingsFn original device und original reading wieder aus dem 'fake' reading kann ich es mir ja auch in einem hash merken und gleich noch das passende valueFormat und valueStyle mit. das ist dann eindeutig und vielleicht sogar effizienter. vielleicht sogar so generell das es für alle readings in allen device detail ansichten verwendbar ist und nicht nur auf die readingsGroup.
ich probiere das mal und baue einen patch dafür zusammen. du kannst ja dann schauen wie dir das gefällt.
gibt es eigentlich eine möglichkeit für module sich in das list kommando einzuängen?
dann könnte man die readingsGroup nicht mehr nur im web frontend nutzen sondern auch per telnet um mit list die aktuellen readings der gruppe anzuzeigen.
was hältst du von einer listFn?
Z.Zt gibt list/XmlList/JsonList nur das aus, was in $hash zu finden ist, eigentlich auch rekursiv.
Kannst Du bitte _gut_ drueber nachdenken, ob das fuer readingsGroup nicht ausreichen koennte, und wenn nicht, dann muessen wir listFn fuer alle 3 Instanzen implementieren. Bitte aber erst nach 5.5
der knackpunkt an der readingsGroup war ja genau keine kopien der readings zu halten. d.h. $hash ist komplett leer was das angeht und alles was nur $hash auswertet wird niemals etwas über die zusammengefassten devices erfahren.
schau mal hier:Link (http://forum.fhem.de/index.php?topic=14649.0). da hat noch jemand das probmel das es mit dem longpoll update nicht immer funktioniert.
wie weiter oben im thread steht habe ich das problem ja auch in manchen räumen. ich habe gerade die idee das es an den umlauten liegen könnte noch mal getestet. und scheinbar könnte es etwas damit zu tun haben: wenn ich das device aus dem beispiel von oben (ein HM-LC-SW4-DR) im raum garten habe in dem noch andere devices mit einem alias sind die umlaute haben funktioniert der update nicht. wenn ich das ding gleichzeitig in einem raum test habe in dem es keinen content mit umlauten gibt geht es.
d.h. beide räume offen, jeweils per webcmd ein und aus schalten. wenn ich in dem test raum schalte werden beide korrekt aktualisiert. erst der state mit set- und dann das on oder off icon. wenn ich das gleiche aus dem raum mit dem umlauten mache wird nur der test raum korrekt aktualisiert und der raum mit den umlauten nicht.
das device selber enthält keinen umlaut. nur andere devices in dem raum haben einen alias der einen umlaut enthält.
gruss
andre
Kann nicht nachvollziehen mit folgendem setup:
define d dummy
attr d webCmd on:off
attr d room Icöns
Zwei Firefox (aktuelle Version) Fenster nebeneinander, mit fhem und Raum Icöns
Ich kann sowohl per telnet als auch vom browser aus den Zustand aendern (set d on, set d off). Komischerweise funktioniert "trigger d on" nicht.
Ich haette gerne einen aehnlichen Setupzum nachstellen, jedenfalls eins ohne Hardware.
P.S.: Sollten wir diesen Beitrag nicht mal schliessen, die Frage hat doch nichts mit FW_devState zu tun?
Nachtrag: auch ein zweiter dummy mit
define d2 dummy
attr d2 webCmd on:off
attr d2 room Icöns
attr d2 alias dzwö
ändert etwas, scheint erstmal alles zu funktionieren.
es hat schon was mit devStateIcon zu tun weil das icon ja nicht richtig aktualisiert wird.
ich fürchte mit einem normalen dummy ist es nicht zu reproduzieren es passiert bei mir nur bei den devices die mehr als ein mal aktualisiert werden. also z.b. hm oder swap. also fhem setzt state z.b. auf set-on und dann kommt vom device erst das richtige on.
mal sehen ob man es mit einem kleinen dummy device reproduzieren kann. ich glaube immer noch das es daran liegt das beim klick auf ein webCmd (im gegensatz zum click auf das icon) die seite neu aufgebaut wird und dann das zweite update verloren geht.
gruss
andre
das mit den umlauten scheint tatsächlich irgendein zufall oder seiteneffekt zu sein aber nicht der grund.
wenn ich in fhemweb.js in zeile 36 das logging einschalte dann sehe ich bei den meisten räumen das direkt nach dem seiten aufbau ein das doUpdate schon das erste mal aufgerufen wird. das sind die räume bei dennen es mit dem longpoll beim klick auf webCmd keine probleme gibt.
bei dem einen raum mit dem problem ist der erste aufruf von doUpdate direkt nach dem seitenaufbau aber leer. hier wird das icon dann auch nicht richtig aktualisiert.
bei den räumen die am anfang den fehler haben erscheinen dann nach und nach events für alle möglichen devices auf der debug console. auch devices die nicht in diesem raum sind.
bei räumen ohne problem sind auf der debug console nur events für die devices zu sehen die tatsächlich in dem raum sind.
ich glaube in FW_Notify geht beim zusammenbau der inform liste für das doUpdate manchmal etwas schief.
so.... ich glaube ich habe es...
es passiert immer wenn in einem raum ein plot ist. durch den vorhandenen plot wird FW_longpoll zusätzlich wärend des seitenaufbaus getriggert. das bewirkt das ein XHR aufruf mit room=all gemacht wird. dieser überschreibt dann $FW_room mit 'all' was zur folge hat das für den raum in dem sich der plot befindet das FW_roomStatesForInform mit room all aufgerufen wird und nichts mehr passt.
wenn man in 98_SVG.pm im embed tag room=\"$FW_room\" mit einbaut und in FW_longpoll den check auf embed rausschmeisst wird in FW_roomStatesForInform wieder der korrekte raum verwendet und alles funktioniert.
Ich verstehe deine Begruendung noch nicht: falls inform auf all steht, dann kommen beim JS hoechstens mehr Daten an, als gewuenscht, und sollte kein ein Seiten-Neuaufbau mit FW_roomStatesForInform bewirken. Selbst dann kriegt das JS nur den Status aller Geraete, was wiederum nicht schaedlich sein sollte.
Das SVG Problem ist aehnlich wie bei deinem readingsGroup: SVG zeigt Daten aus anderen Raeumen an, deswegen versucht fhemweb.js beim Vorhandensein von SVGs (fuer longpollSVG) an alle Daten zu kommen. Nach deinem "Patch" wuerde das nicht mehr funktionieren.
Die longpollSVG Implementierung gefaellt mir vom Prinzip nicht, und ich habe nichts dagegen es abzuschaffen, wenn es dadurch ein Bug behoben wird, ich sehe das aber noch nicht.
Es kann aber sein, dass durch Daten, die eigentlich nicht auf der Seite sichtbar sind, ein Bug getriggert wird: das sollten wir finden und fixen.
gut. also schrittweise:
- wenn ich per devStateIcon schalte wird das kommando per XHR ausgeführt und danach das icon per longpoll aktualisiert. -> alles ok.
- wenn ich per webCmd schalte wird die seite komplett neu aufgebaut. -> das ist an sich schon unschön.
- bei räumen die 'korrekt' funktionieren sehe ich das direkt nach dem initialen seitenaufbau alle zustände ein mal komplett per inform zum browser geschoben werden und dann bei bedarf jeweils für die devices die auf der seite zu sehen sind.
- bei räumen die nicht funktionieren wird nach dem initialen seitenaufbau eine leere inform liste zum browser übertragen. und danach dann events für alle devices.
meine vermutung: bei devices die den zustand zweistufig ändern kommt die zweite stufe genau zwischen seitenaufbau und übertragen der leeren liste und geht verloren. wenn mit der vorgeschlagenen änderung die initiale inform liste nicht leer ist ist genau da die zweite stufe drin.
das svg daten aus anderen räumen braucht betrifft doch nur SVGlongpoll oder? dann sollte man vielleicht die devices die dafür relevant sind per attribut angeben damit man nicht auf alle zurück fallen muss. bei mir ist SVGlongpoll übrigens aus und das umschalten auf all garnicht nötig.
das die initiale inform liste in den fehlerhaften räumen (die bei denen room durch die svg auf all gesetzt werden) leer ist liegt daran das devspec2array für room=all nichts zurückliefert. ich weiss nicht ob es seiteneffekte hat wenn man das in devspec2array ändert. alternativ würde auch ein $room = ".*" if( $room eq "all" ); in FW_roomStatesForInform als workaround helfen. oder in fhemweb.js in FW_longpoll room auf .* initialisiert und nicht auf all.
trozdem bin ich aber immer noch der meinung das ein svg das nicht SVGlongpoll verwendet den room auch nicht auf all setzen sollte.
wie wäre es wenn man SVGlongpoll nicht einfach auf 1 setzt sondern wirklich die liste der devices angibt die relevant sind. dann könnte man direkt die devices in die inform liste mit aufnehmen und müsste nicht auf all zurückfallen.
> ein svg das nicht SVGlongpoll verwendet den room auch nicht auf all setzen sollte.
Da bin ich auch deiner Ansicht, und es hat mich etwas gewundert, dass das nicht der Fall ist.
Ich werde es aendern, sobald ich ein bisschen freien Kopf dafuer habe.
hallo rudi,
gibt es wegen dem longpoll und svg problem schon was neues? ich glaube das ist der grund warum wie im anderen thred erwähnt im raum everything der update per longpoll nicht geht. und spiff der gerade meine farbigen icons für sein dmx device verwendet hat auch ein problem sobald ein plot im gleichen raum ist.
gruss
andre
es gibt etwas neues zur nicht vollständigen aktualisierung per longpoll. schau mal hier:http://forum.fhem.de/index.php/topic,17913.msg118975.html#msg118975 (http://forum.fhem.de/index.php/topic,17913.msg118975.html#msg118975)