Hauptmenü

connection lost, ...

Begonnen von Damian, 24 März 2022, 23:25:02

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: rudolfkoenig am 27 März 2022, 11:35:03
Du koenntest in fhem.pl/addToWriteBuffer(), Zeile 6404 (vor dem return 0) $hash->{$wbName} ausgeben.

Falls Du mir was zum Nachstellen bauen kannst (irgendetwas mit defmod DOIF, trigger, oder { code }), dann werde ich versuchen das Problem in fhem.pl zu loesen, mit Zeitstempel, wie ich das vorhin beschrieben habe.

Ich habe mal was zusammengestellt:

Hier ein Device, welches das MQTT-Device simuliert, indem es alle 10 Sekunden (Zeitspanne kannst du anpassen) in einem Eventblock Readings schreibt:


defmod d_test_mqtt DOIF {[+10];;\
set_Reading_Begin();;\
set_Reading_Update("total_w",1);;\
set_Reading_Update("total_pv",2);;\
set_Reading_Update("total_c",3);;\
set_Reading_Update("total_f",4);;\
set_Reading_Update("total_h",5);;\
set_Reading_Update("total_hc",6);;\
set_Reading_Update("total_hwc",7);;\
set_Reading_Update("total_w2",8);;\
set_Reading_Update("total_pv2",9);;\
set_Reading_Update("total_c2",10);;\
set_Reading_Update("total_f2",11);;\
set_Reading_Update("total_h2",12);;\
set_Reading_Update("total_hc2",13);;\
set_Reading_Update("total_hwc2",14);;\
set_Reading_End(1);;\
}
attr d_test_mqtt room CUL_EM


Dieses Device reagiert auf die obigen Readings, berechnet und schreibt ein paar eigene Readings und lässt sie über cards visualisieren:

defmod di_counter_test DOIF subs {\
##                     Device        Reading   \
  push (@{$_counter},["d_test_mqtt","total_w"]);; ## Wasserzähler\
  push (@{$_counter},["d_test_mqtt","total_pv"]);;         ## Solarenergie\
  push (@{$_counter},["d_test_mqtt","total_c"]);; ## Bezugszähler\
  push (@{$_counter},["d_test_mqtt","total_f"]);; ## Einspeisezähler \
  push (@{$_counter},["d_test_mqtt","total_h"]);;     ## Gasverbrauch Heizung + Warmwasser\
  push (@{$_counter},["d_test_mqtt","total_hc"]);;    ## Gasverbrauch Heizung\
  push (@{$_counter},["d_test_mqtt","total_hwc"]);;   ## Gasverbrauch Warmwasser  \
  push (@{$_counter},["d_test_mqtt","total_w2"]);; ## Wasserzähler\
  push (@{$_counter},["d_test_mqtt","total_pv2"]);;         ## Solarenergie\
  push (@{$_counter},["d_test_mqtt","total_c2"]);; ## Bezugszähler\
  push (@{$_counter},["d_test_mqtt","total_f2"]);; ## Einspeisezähler \
  push (@{$_counter},["d_test_mqtt","total_h2"]);;     ## Gasverbrauch Heizung + Warmwasser\
  push (@{$_counter},["d_test_mqtt","total_hc2"]);;    ## Gasverbrauch Heizung\
  push (@{$_counter},["d_test_mqtt","total_hwc2"]);;   ## Gasverbrauch Warmwasser  \
  \
sub midnight { ## Diese Funktion wird um Mitternacht ausgeführt\
  my ($device,$reading,$mday,$yday)=@_;;\
  set_Reading("$device.$reading.day_counter",ReadingsVal($device, $reading,0));;   \
  set_Reading("$device.$reading.last_day",get_Reading("$device.$reading.day",0),1);;\
  set_Reading("$device.$reading.day",0,1);;\
  set_Reading ("$1.$2.month",int((ReadingsVal($device, $reading,0)-(get_Reading("$1.$2.month_counter",0)))*1000)/1000,1);;\
  set_Reading ("$1.$2.year",int((ReadingsVal($device, $reading,0)-(get_Reading("$1.$2.year_counter",0)))*1000)/1000,1);;\
\
  if ($mday == 1) {\
    set_Reading("$device.$reading.month_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.last_month",get_Reading("$device.$reading.month",0),1);;\
    set_Reading("$device.$reading.month",0,1);;\
  }\
  if ($yday == 1) {\
    set_Reading("$device.$reading.year_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.last_year",get_Reading("$device.$reading.year",0),1);;\
    set_Reading("$device.$reading.year",0,1);;\
  }\
}\
\
sub init_readings {\
  my ($device,$reading)=@_;;\
  if (get_Reading("$device.$reading.day_counter","") eq "") {   ## Initialisierung der Readings\
    ## aktuellen Zählerstand initialisieren\
    set_Reading("$device.$reading.last_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.day_counter",ReadingsVal($device, $reading,0));; \
    ##set_Reading("$device.$reading.month_counter",ReadingsVal($device, $reading,0));;\
    ##set_Reading("$device.$reading.year_counter",ReadingsVal($device, $reading,0));;\
  \
    set_Reading ("$device.$reading.day",0);;           ## aktueller Tagesverbrauch\
    set_Reading ("$device.$reading.month",0);;         ## aktueller Monatsverbrauch\
    set_Reading ("$device.$reading.year",0);;          ## aktueller Jahresverbrauch\
    set_Reading ("$device.$reading.last_day",0);;      ## Verbrauch des letzten Tages\
    set_Reading ("$device.$reading.last_month",0);;    ## Verbrauch des letzten Monats\
    set_Reading ("$device.$reading.last_year",0);;     ## Verbrauch des letzten Jahres\
## Log definieren\
fhem ("defmod log.counter.$device.$reading FileLog ./log/counter.$device.$reading.log $SELF:$device.$reading.last_(day|month|year):.*");;\
    fhem ("attr log.counter.$device.$reading room Filelogs");;\
}\
\
}\
} ## Ende subs-Block\
\
mid {[00:01];;                          ## Sicherung der Daten um Mitternacht\
  for (my $i=0;;$i<@{$_counter};;$i++) { ## Für jeden Zähler wird die Funktion midnight aufgerufen\
    midnight($_counter[$i][0],$_counter[$i][1],$mday,$yday);;\
  }\
}\
\
init {                                ## initialisierung aller Readings\
  for (my $i=0;;$i<@{$_counter};;$i++) {## Für jeden Zähler werden Readings über die Funktion init_readings initialisiert\
    init_readings($_counter[$i][0],$_counter[$i][1]);;\
  }\
}\
\
DEF TPL_stat (\
  day_count_$1_$2 { ## bei einem Event des Zählers, wird der tägliche, monatliche und jährliche Verbrauch im jeweiligen Reading festgehalten\
                    ##  $1 Zählerdevice, $2 Zählerreading\
\
    my $diff = int(([$1:$2,0]-(get_Reading("$1.$2.last_counter",0)))*1000)/1000;;\
    if ($diff < 0 and get_Reading("$1.$2.last_counter",0) > 0  or $diff > 0 and get_Reading("$1.$2.last_counter",0) < 0) {  ## Wenn der Zähler zurückgesetzt wurde, dann Zählerstände zurückrechnen\
      set_Reading("$1.$2.day_counter",-(get_Reading("$1.$2.day",0)));;\
      set_Reading("$1.$2.month_counter",-(get_Reading("$1.$2.month",0)));;\
      set_Reading("$1.$2.year_counter",-(get_Reading("$1.$2.year",0)));;\
    }\
    set_Reading ("$1.$2.last_counter",[$1:$2,0]);;\
    set_Reading ("$1.$2.day",int(([$1:$2,0]-(get_Reading("$1.$2.day_counter",0)))*1000)/1000,1);;\
    ##set_Reading ("$1.$2.month",int(([$1:$2,0]-(get_Reading("$1.$2.month_counter",0)))*1000)/1000,1);;\
    ##set_Reading ("$1.$2.year",int(([$1:$2,0]-(get_Reading("$1.$2.year_counter",0)))*1000)/1000,1);;\
  }\
)\
\
\
## Pro Zähler wird über eine FOR-Schleife ein day_count_<Device>_<Reading>-Block generiert\
FOR(@{$_counter},TPL_stat($1$1,$1$2)) ## $1$1 entspricht dem Device, $1$2 entspricht dem Reading
attr di_counter_test room CUL_EM
attr di_counter_test uiTable {package ui_Table} ## Optionale Visualisierung der Energie-Verbräuche/-Produktion im DOIF-Device\
card([di_counter_test:d_test_mqtt.total_w.day:100col1w],"Wasser in l pro Tag","sani_water_tap",0,500,90,0,"Liter",undef,"1","130,,1,0,1,,200","0,0,0,0")|\
card([di_counter_test:d_test_mqtt.total_w.month:100col365d],"Wasser in l pro Monat","sani_water_tap",0,10000,90,0,"Liter",undef,"0","130,,1,0,1,,200","0,0,0,0")\
\
card([[di_counter_test:d_test_mqtt.total_pv.day:100col1w],[di_counter_test:d_test_mqtt.total_f.day:100col1w]],"Solarenergie in kWh pro Tag","solar_icon",-25,25,0,90,["PV","Einsp."],undef,"1","130,,1,0,1,,200","0,0,0,0,2")|\
##card([di_counter_test:d_test_mqtt.total_pv.day:100col1w],"Solarenergie in kWh pro Tag","solar_icon",-25,25,0,90,"PV",undef,"1","130,,1,0,1,,200","0,0,0,0,2")\
card([[di_counter_test:d_test_mqtt.total_pv.month:100col365d],[di_counter_test:d_test_mqtt.total_f.month:100col365d]],"Solarenergie in kWh pro Monat","solar_icon",-300,300,0,90,["PV","Einsp."],undef,"1","130,,1,0,1,,200","0,0,0,0,2")\
\
card([[di_counter_test:d_test_mqtt.total_f.day:100col1w],[di_counter_test:d_test_mqtt.total_c.day:100col1w]],"Elektrizität in kWh pro Tag","fa_bolt",-25,25,0,90,["Ertrag","Bezug"],undef,"1","130,,1,0,1,,200","0,0,0,0,2")|\
card([[di_counter_test:d_test_mqtt.total_f.month:100col365d],[di_counter_test:d_test_mqtt.total_c.month:100col365d]],"Elektrizität in kWh pro Monat","fa_bolt",-300,300,0,90,["Ertrag","Bezug"],undef,"1","130,,1,0,1,,200","0,0,0,0,2")\
\
card([[di_counter_test:d_test_mqtt.total_h.day:100col1w],[di_counter_test:d_test_mqtt.total_hwc.day:100col1w]],"Heizenergie in kWh pro Tag","sani_boiler_temp",0,100,90,0,["Gesamt","Wasser"],undef,"1","130,,1,0,1,,200","0,0,0,0,2")|\
card([[di_counter_test:d_test_mqtt.total_h.month:100col365d],[di_counter_test:d_test_mqtt.total_hwc.month:100col365d]],"Heizenergie in kWh pro Monat","sani_boiler_temp",0,1500,90,0,["Gesamt","Wasser"],undef,"1","130,,1,0,1,,200","0,0,0,0,2")\
\
card([di_counter_test:d_test_mqtt.total_w2.day:100col1w],"Wasser in l pro Tag","sani_water_tap",0,500,90,0,"Liter",undef,"1","130,,1,0,1,,200","0,0,0,0")|\
card([di_counter_test:d_test_mqtt.total_w2.month:100col365d],"Wasser in l pro Monat","sani_water_tap",0,10000,90,0,"Liter",undef,"0","130,,1,0,1,,200","0,0,0,0")\
\
card([[di_counter_test:d_test_mqtt.total_pv2.day:100col1w],[di_counter_test:d_test_mqtt.total_f2.day:100col1w]],"Solarenergie in kWh pro Tag","solar_icon",-25,25,0,90,["PV","Einsp."],undef,"1","130,,1,0,1,,200","0,0,0,0,2")|\
##card([di_counter_test:d_test_mqtt.total_pv.day:100col1w],"Solarenergie in kWh pro Tag","solar_icon",-25,25,0,90,"PV",undef,"1","130,,1,0,1,,200","0,0,0,0,2")\
card([[di_counter_test:d_test_mqtt.total_pv2.month:100col365d],[di_counter_test:d_test_mqtt.total_f2.month:100col365d]],"Solarenergie in kWh pro Monat","solar_icon",-300,300,0,90,["PV","Einsp."],undef,"1","130,,1,0,1,,200","0,0,0,0,2")\
\
##card([[di_counter_test:d_test_mqtt.total_f2.day:100col1w],[di_counter_test:d_test_mqtt.total_c2.day:100col1w]],"Elektrizität in kWh pro Tag","fa_bolt",-25,25,0,90,["Ertrag","Bezug"],undef,"1","130,,1,0,1,,200","0,0,0,0,2")|\
##card([[di_counter_test:d_test_mqtt.total_f2.month:100col365d],[di_counter_test:d_test2_mqtt.total_c2.month:100col365d]],"Elektrizität in kWh pro Monat","fa_bolt",-300,300,0,90,["Ertrag","Bezug"],undef,"1","130,,1,0,1,,200","0,0,0,0,2")\
\
card([[di_counter_test:d_test_mqtt.total_h2.day:100col1w],[di_counter_test:d_test_mqtt.total_hwc2.day:100col1w]],"Heizenergie in kWh pro Tag","sani_boiler_temp",0,100,90,0,["Gesamt","Wasser"],undef,"1","130,,1,0,1,,200","0,0,0,0,2")|\
card([[di_counter_test:d_test_mqtt.total_h2.month:100col365d],[di_counter_test:d_test_mqtt.total_hwc2.month:100col365d]],"Heizenergie in kWh pro Monat","sani_boiler_temp",0,1500,90,0,["Gesamt","Wasser"],undef,"1","130,,1,0,1,,200","0,0,0,0,2")


Damit kann ich den Fehler bei mir nachstellen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

Danke fuer die Konfiguration.
Ich habe fhem.pl so angepasst, dass die Puffer-Begrenzung erst nach dem ersten syswrite geprueft wird, damit gibt es bei mir kein connection lost mehr.

Um zu vermeiden, dass man bei jedem Event megabyteweise Daten an dem Browser geschickt werden, koennte man FHEMWEB-Widgets / JavaScript verwenden. Diese werden bei einem Event nur mit dem neuen Wert benachrichtigt, und das ermoeglicht auch eine Interaktion mit dem Widget.

Damian

Zitat von: rudolfkoenig am 28 März 2022, 11:09:53
Danke fuer die Konfiguration.
Ich habe fhem.pl so angepasst, dass die Puffer-Begrenzung erst nach dem ersten syswrite geprueft wird, damit gibt es bei mir kein connection lost mehr.

Um zu vermeiden, dass man bei jedem Event megabyteweise Daten an dem Browser geschickt werden, koennte man FHEMWEB-Widgets / JavaScript verwenden. Diese werden bei einem Event nur mit dem neuen Wert benachrichtigt, und das ermoeglicht auch eine Interaktion mit dem Widget.

Ok, Danke. Ich werde es später zuhause testen.

Aber in der aktuellen (eingecheckten) Version von DOIF, mit der du getestet hast, werden ja nur die Änderungen per FW_directNotify geschickt und zwar nur von der Zellen-ID (card) des jeweiligen Events. Klar, bei card werden die Daten im Array auf der Perlseite aufgrund eines Events verschoben, dadurch muss der Plot neu berechnet und übertragen werden, aber das sind ja im Normalfall auch nur 72 Zahlenpaare und der html-Code für eine card. Das Problem ist offenbar die Anzahl der Events, die auf einmal kommen.

Auf der anderen Seite ist die erste Übertragung des vollständigen HTML-Codes von 44 cards in 0,1 Sekunden erledigt, dann sollten Daten von 6 cards beim Update (da kommen bei mir die ersten Probleme) eigentlich kein Problem darstellen.

Um die Datenmenge beim Update zu reduzieren, müsste die Aufbereitung des Plots, am besten der ganzen card, auf der javascript-Seite laufen, aber dafür müsste man den Code neu schreiben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#18
Ich kann bestätigen, dass das Problem nicht mehr aufkommt :)

Ich habe schon länger in Planung FHEM-SVG-Widgets zu programmieren, vielleicht gelingt mir das auch für card. Aber erst mal läuft es ja.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Zu früh gefreut, Abbruch kommt zwar nicht regelmäßig wie zuvor, aber leider unregelmäßig alle paar Minuten, vermutlich zufällig wie die Daten gerade zusammentreffen:

22:15:48.380 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_vaillant','doifId','di_vaillant_uiTable_c_3_0_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(12185)
fhemweb.js:572 22:15:54.401 ERRMSG:Connection lost, trying a reconnect every 5 seconds.<
fhemweb.js:572 22:15:59.303 ERRMSG:<
fhemweb.js:572 22:15:59.403 Inform-channel opened (HTTP) with filter room=Status
fhemweb.js:572 22:16:03.867 Rcvd:
fhemweb.js:572 22:16:03.867 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('Klima','doifId','Klima_uiTable_c_0_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/svg\u0022 vi...(4948)
fhemweb.js:572
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

Ich koennte die Grenze von 1MB in fhem.pl erhoehen, bin aber nicht sicher, dass das die richtige Strategie ist.
Kannst Du fuer diesen Fall auch was zum Nachstellen bauen?

Damian

Zitat von: rudolfkoenig am 29 März 2022, 22:35:58
Ich koennte die Grenze von 1MB in fhem.pl erhoehen, bin aber nicht sicher, dass das die richtige Strategie ist.
Kannst Du fuer diesen Fall auch was zum Nachstellen bauen?

Wann wird der Puffer eigentlich zurückgesetzt?

Sieht man alle Daten, die geschickt werden, auf der Console?

Man kann hier die Datenmengen zusammenrechnen, sie betragen immer paar KByte, pro Tabellenzelle mit card.

Hier der vollständige Output zwischen zwei Abbrüchen:

fhemweb.js:572 22:29:54.274 ERRMSG:Connection lost, trying a reconnect every 5 seconds.<
fhemweb.js:572 22:29:59.176 ERRMSG:<
fhemweb.js:572 22:29:59.278 Inform-channel opened (HTTP) with filter room=Status
fhemweb.js:572 22:30:06.336 Rcvd:
fhemweb.js:572 22:30:06.336 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('Klima','doifId','Klima_uiTable_c_0_2_0_0','<svg xmlns=\u0022http://www.w3.org/2000/svg\u0022 vi...(6357)
fhemweb.js:572 22:30:06.337 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_Heizung_temp','doifId','di_Heizung_temp_uiTable_c_0_5_0_0','<svg xmlns=\u0022http://www.w3.o...(5486)
fhemweb.js:572 22:30:06.408 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_temp_temp_ring','doifId','di_icon_temp_temp_ring_uiTable_c_0_1_0_0','<svg xmlns=\u0022h...(6388)
fhemweb.js:572 22:30:08.396 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_vaillant','doifId','di_vaillant_uiTable_c_4_2_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(19571)
fhemweb.js:572 22:30:18.344 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_bar_bsp','doifId','di_icon_bar_bsp_uiTable_c_0_3_0_0','<svg xmlns=\u0022http://www.w3.o...(5275)
fhemweb.js:572 22:30:18.344 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_ring','doifId','di_icon_ring_uiTable_c_1_1_0_0','<svg xmlns=\u0022http://www.w3.org/200...(5529)
fhemweb.js:572 22:30:18.397 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_vaillant','doifId','di_vaillant_uiTable_c_3_0_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(12185)
fhemweb.js:572 22:30:48.578 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_bar_bsp','doifId','di_icon_bar_bsp_uiTable_c_0_3_0_0','<svg xmlns=\u0022http://www.w3.o...(5275)
fhemweb.js:572 22:30:48.579 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_ring','doifId','di_icon_ring_uiTable_c_1_1_0_0','<svg xmlns=\u0022http://www.w3.org/200...(5525)
fhemweb.js:572 22:30:48.636 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_vaillant','doifId','di_vaillant_uiTable_c_3_0_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(12181)
fhemweb.js:572 22:30:51.595 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di.icon.bar','doifId','di.icon.bar_uiTable_c_0_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(6175)
fhemweb.js:572 22:30:51.595 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di.icon.bar','doifId','di.icon.bar_uiTable_c_1_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(6183)
fhemweb.js:572 22:30:51.647 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di.icon.bar','doifId','di.icon.bar_uiTable_c_2_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(6178)
fhemweb.js:572 22:30:51.648 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di.icon.bar','doifId','di.icon.bar_uiTable_c_4_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(6303)
fhemweb.js:572 22:30:51.649 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di.icon.bar','doifId','di.icon.bar_uiTable_c_5_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(6179)
fhemweb.js:572 22:30:51.649 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di.icon.bar','doifId','di.icon.bar_uiTable_c_3_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(6175)
fhemweb.js:572 22:30:51.649 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_auriol','doifId','di_auriol_uiTable_c_0_2_0_0','<svg xmlns=\u0022http://www.w3.org/2000/svg\...(17762)
fhemweb.js:572 22:30:51.650 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_hum_bar','doifId','di_icon_hum_bar_uiTable_c_2_1_0_0','<svg xmlns=\u0022http://www.w3.o...(6184)
fhemweb.js:572 22:30:51.651 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_hum_bar','doifId','di_icon_hum_bar_uiTable_c_5_1_0_0','<svg xmlns=\u0022http://www.w3.o...(6185)
fhemweb.js:572 22:30:51.651 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_hum_bar','doifId','di_icon_hum_bar_uiTable_c_0_1_0_0','<svg xmlns=\u0022http://www.w3.o...(6181)
fhemweb.js:572 22:30:51.652 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_hum_bar','doifId','di_icon_hum_bar_uiTable_c_4_1_0_0','<svg xmlns=\u0022http://www.w3.o...(6309)
fhemweb.js:572 22:30:51.652 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_hum_bar','doifId','di_icon_hum_bar_uiTable_c_3_1_0_0','<svg xmlns=\u0022http://www.w3.o...(6181)
fhemweb.js:572 22:30:51.653 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_hum_bar','doifId','di_icon_hum_bar_uiTable_c_1_1_0_0','<svg xmlns=\u0022http://www.w3.o...(6189)
fhemweb.js:572 22:30:51.653 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_hum_ring','doifId','di_icon_hum_ring_uiTable_c_0_1_0_0','<svg xmlns=\u0022http://www.w3...(3989)
fhemweb.js:572 22:30:51.654 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_hum_ring','doifId','di_icon_hum_ring_uiTable_c_2_1_0_0','<svg xmlns=\u0022http://www.w3...(2036)
fhemweb.js:572 22:30:51.654 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_hum_ring','doifId','di_icon_hum_ring_uiTable_c_1_1_0_0','<svg xmlns=\u0022http://www.w3...(3986)
fhemweb.js:572 22:30:51.654 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_svg','doifId','di_icon_svg_uiTable_c_0_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(3981)
fhemweb.js:572 22:30:51.655 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_svg','doifId','di_icon_svg_uiTable_c_1_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(4570)
fhemweb.js:572 22:30:51.655 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_temp_hum_ring','doifId','di_icon_temp_hum_ring_uiTable_c_2_1_0_0','<svg xmlns=\u0022htt...(5071)
fhemweb.js:572 22:30:51.656 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_temp_hum_ring','doifId','di_icon_temp_hum_ring_uiTable_c_0_1_0_0','<svg xmlns=\u0022htt...(5070)
fhemweb.js:572 22:30:51.656 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_temp_hum_ring','doifId','di_icon_temp_hum_ring_uiTable_c_1_1_0_0','<svg xmlns=\u0022htt...(5106)
fhemweb.js:572 22:30:51.657 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_icon_temp_temp_ring','doifId','di_icon_temp_temp_ring_uiTable_c_1_1_0_0','<svg xmlns=\u0022h...(5157)
fhemweb.js:572 22:30:51.657 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum','doifId','di_temp_hum_uiTable_c_0_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(2604)
fhemweb.js:572 22:30:51.658 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum','doifId','di_temp_hum_uiTable_c_5_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(4810)
fhemweb.js:572 22:30:51.722 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum','doifId','di_temp_hum_uiTable_c_6_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(4737)
fhemweb.js:572 22:30:51.722 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum','doifId','di_temp_hum_uiTable_c_3_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(4746)
fhemweb.js:572 22:30:51.723 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum','doifId','di_temp_hum_uiTable_c_4_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(4867)
fhemweb.js:572 22:30:51.724 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum','doifId','di_temp_hum_uiTable_c_2_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(4742)
fhemweb.js:572 22:30:51.725 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum','doifId','di_temp_hum_uiTable_c_7_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(4739)
fhemweb.js:572 22:30:51.726 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum','doifId','di_temp_hum_uiTable_c_1_1_0_0','<svg xmlns=\u0022http://www.w3.org/2000/...(4739)
fhemweb.js:572 22:30:51.726 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum_ring','doifId','di_temp_hum_ring_uiTable_c_1_1_0_0','<svg xmlns=\u0022http://www.w3...(2924)
fhemweb.js:572 22:30:51.727 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum_ring','doifId','di_temp_hum_ring_uiTable_c_2_1_0_0','<svg xmlns=\u0022http://www.w3...(2925)
fhemweb.js:572 22:30:51.727 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum_ring','doifId','di_temp_hum_ring_uiTable_c_3_1_0_0','<svg xmlns=\u0022http://www.w3...(2962)
fhemweb.js:572 22:30:51.728 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_temp_hum_ring','doifId','di_temp_hum_ring_uiTable_c_0_1_0_0','<svg xmlns=\u0022http://www.w3...(2924)
fhemweb.js:572 22:30:51.728 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_uiTable_hum','doifId','di_uiTable_hum_uiTable_c_1_1_1_0','63.1&nbsp;%','display:inline-table...(185)
fhemweb.js:572 22:30:51.729 Rcvd: ["#FHEMWEB:WEBHOME","doifUpdateCell('di_uiTable_wetter','doifId','di_uiTable_wetter_uiTable_c_0_1_0_0','<svg xmlns=\u0022http://www....(2930)
fhemweb.js:572 22:30:54.364 ERRMSG:Connection lost, trying a reconnect every 5 seconds.<
fhemweb.js:572 22:30:59.274 ERRMSG:<


Sie werden nach meinem Verständnis hier ca. eine Minute lang gesammelt, bis es wieder knallt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#22
Also die Summe der angezeigten Daten beträgt: 265756, das ist weniger als 1 MB.

Ist der Puffer pro WEB-Instanz oder für alle?

Können Daten von anderen WEB-Instanzen, die auf der Console nicht angezeigt werden, dazukommen?

Edit: übrigens die meisten Daten sind im Output nicht von cards, sondern von svg-Ringen oder svg-bars. cards sind die mit 10-20 KB.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

ZitatWann wird der Puffer eigentlich zurückgesetzt?
Das sind die gepufferten Daten, die ueber diese eine Verbindung rausgeschickt werden muessen.
Der Puffer wird nicht zurueckgesetzt, sondern verkleinert, bis alles weg ist, und dann geloescht.
Wenn kein Puffer da ist, oder mit dem Schreiben (mit syswrite) noch nicht begonnen wurde, greift der Zaehler nicht.

ZitatAlso die Summe der angezeigten Daten beträgt: 265756, das ist weniger als 1 MB.
Auf der Client-Seite was zu zaehlen ist sinnfrei, was zaehlt ist das, was im Server ist, d.h. noch nicht zum Client geschickt werden konnte.

Die erstellte Seite kann beliebig gross sein, aber die Benachrichtigung fuer diese Seite kann man nur bis zu 1MB an gepufferten(!) Daten haben. Damit wird das Problem der "verklemmten Verbindungen" geloest, z.Bsp. wenn ein Notebook mit einem offenen Event-Monitor geschlossen wird.

Damian

#24
OK. Dann muss man das Problem anderes analysieren.

Ich denke, ich baue eine Ausgabe des Puffers im log ein, um zu schauen, was wann drin ist.

An der Ausgabe der javascript-console kann man aber immerhin erkennen in welcher Größenordnung die einzelnen Updates der Zellen sind: 4- 20 KB pro Update.
Es müssten sich also schon recht viele einzelne Ausgaben angesammelt haben, wenn man damit den Puffer von 1 MB sprengen will.

Die Vergrößerung des Puffers wird vermutlich das Problem nicht lösen. Ich werde das Problem bei mir im Live-System untersuchen, weil es sonst schwierig sein dürfte, ein komplexes System zu simulieren.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Ich habe mir den Puffer anzeigen lassen, der ging bei mir bis 1,3 MB. Was auffiel, waren bestimmte card-Zellen, die 270 KB groß waren, also viel größer als die anderen cards. Tja die Lösung des Rätsels war ganz einfach - man sollte nicht bestimmte eingecheckte icons nutzen, wie bei mir konkret solar_icon mit ca. 235 KB. Nur gut, dass ich das gefrierschrank-Icon nicht genommen hatte mit knapp 1 MB. Hätte man die beiden in devStateIcon kombiniert, dann hätte es je nach Konstellation genauso geknallt.

Ich bin dafür eine maximale Größe für eingecheckt Icons vorzugeben, denn die obigen Icons kann man wesentlich platzsparender gestalten, wenn man weiß was man tut.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

ZitatIch bin dafür eine maximale Größe für eingecheckt Icons vorzugeben, denn die obigen Icons kann man wesentlich platzsparender gestalten, wenn man weiß was man tut.
Ich habe dagegen nichts einzuwenden, aber der Maintainer sollte involviert werden.

Ich gehe davon aus, dass die erwaehnten Icons aus einem Bitmap nach SVG konvertiert wurden, und die Aufloesung/Qualitaet des Ausgangsbildes nicht optimal war.

Ich habe zwei Optimierungsmethoden gefunden:
- scour (Kommandozeilenprogramm), was beim solar_icon.png die Datei auf 83%, bei gefrierschrank_icon auf 79% komprimieren konnte.
- inkscape, Path->Simplify, was bei solar_icon auf 21% (49k) kam, bei gefrierschrank_icon auf 40%. Die Unterschiede sind bei 300x300 Pixel merkbar (aber nicht unbedingt schlechter), bei der voreingestellten Groesse von 32x32 sehe ich keine Unterschiede.

rudolfkoenig

#27
Apropos gefrierschrank: es existiert ein openautomation/gefrierschrank.svg mit 1.5k(!) und ein fhemSVG/gefrierschrank_icon.svg mit 920k.
Die beiden Bilder legen nahe, dass einer vom anderen kopiert wurde.
Auf 32x32 schaut das kleine Bild mAn besser aus.

Nachtrag: Ich haette es ja denken koennen: die gleiche Situation mit solar.svg vs. solar_icon.svg.

Damian

ich sag´s, denn sie wissen nicht was sie tun, gerade wenn aus 1,5 KB 960 KB wird.

Das Problem ist, dass man sich als Anwender darauf verlässt, eingecheckte Icons ohne Einschränkungen nutzen zu können.

Ich gehe davon aus, dass die Zuständigen möglichst schnell diese Icons ersetzen. Und hier der Anfang der Liste :)

fhem@raspberrypi:~/www/images/fhemSVG$ ls -S -l
insgesamt 10084
-rw-r--r-- 1 fhem dialout 941642 Aug 17  2020 gefrierschrank_icon.svg
-rw-r--r-- 1 fhem dialout 423703 Aug 17  2020 sprinkler_icon.svg
-rw-r--r-- 1 fhem dialout 419312 Feb  3  2018 rc_TV1_on.svg
-rw-r--r-- 1 fhem dialout 270578 Aug 17  2020 kuehlschrank_small.svg
-rw-r--r-- 1 fhem dialout 235113 Aug 17  2020 it_raspberry.svg
-rw-r--r-- 1 fhem dialout 234856 Aug 17  2020 solar_icon.svg
-rw-r--r-- 1 fhem dialout 187891 Aug 17  2020 wintergarten_icon.svg
-rw-r--r-- 1 fhem dialout 177096 Aug 17  2020 kuehlschrank_big.svg
-rw-r--r-- 1 fhem dialout  95779 Aug 17  2020 springbrunnen_icon.svg
-rw-r--r-- 1 fhem dialout  69515 Aug 17  2020 it_raspberry_logo.svg
-rw-r--r-- 1 fhem dialout  64098 Feb 23  2021 Siemens_synco_QAX910.svg
-rw-r--r-- 1 fhem dialout  59586 Feb 23  2021 Botvac_VR200.svg
-rw-r--r-- 1 fhem dialout  59117 Aug 23  2019 air_compressor.svg
-rw-r--r-- 1 fhem dialout  58372 Feb  3  2018 DIN_rail_housing.svg
-rw-r--r-- 1 fhem dialout  54547 Dez 23 18:33 Gartenabfall.svg
-rw-r--r-- 1 fhem dialout  45633 Aug 17  2020 wasserzaehler_icon.svg
-rw-r--r-- 1 fhem dialout  37685 Aug 17  2020 stromzaehler_icon.svg
-rw-r--r-- 1 fhem dialout  34510 Feb  3  2018 fts_sunblind_50.svg
-rw-r--r-- 1 fhem dialout  34356 Feb  3  2018 fts_sunblind_80.svg
-rw-r--r-- 1 fhem dialout  33643 Feb 23  2021 krippe.svg
-rw-r--r-- 1 fhem dialout  33375 Feb  3  2018 fts_sunblind_0.svg
-rw-r--r-- 1 fhem dialout  33368 Feb  3  2018 fts_sunblind_40.svg
-rw-r--r-- 1 fhem dialout  33351 Feb  3  2018 fts_sunblind_10.svg
-rw-r--r-- 1 fhem dialout  33346 Feb  3  2018 fts_sunblind_60.svg
-rw-r--r-- 1 fhem dialout  33344 Feb  3  2018 fts_sunblind_30.svg
-rw-r--r-- 1 fhem dialout  33342 Feb  3  2018 fts_sunblind_20.svg
-rw-r--r-- 1 fhem dialout  33264 Feb  3  2018 fts_sunblind_90.svg
-rw-r--r-- 1 fhem dialout  33260 Feb  3  2018 fts_sunblind_70.svg
-rw-r--r-- 1 fhem dialout  30965 Feb  3  2018 sunblind_50.svg
-rw-r--r-- 1 fhem dialout  30837 Feb  3  2018 sunblind_80.svg
-rw-r--r-- 1 fhem dialout  29827 Feb  3  2018 sunblind_0.svg
-rw-r--r-- 1 fhem dialout  29827 Feb  3  2018 sunblind_60.svg
-rw-r--r-- 1 fhem dialout  29823 Feb  3  2018 sunblind_40.svg
-rw-r--r-- 1 fhem dialout  29803 Feb  3  2018 sunblind_10.svg
-rw-r--r-- 1 fhem dialout  29800 Feb  3  2018 sunblind_30.svg
-rw-r--r-- 1 fhem dialout  29792 Feb  3  2018 sunblind_20.svg
-rw-r--r-- 1 fhem dialout  29746 Feb  3  2018 sunblind_90.svg
-rw-r--r-- 1 fhem dialout  29741 Feb  3  2018 sunblind_70.svg
-rw-r--r-- 1 fhem dialout  24992 Feb  3  2018 fts_sunblind_100.svg





Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Wuppi68

Zitat von: Damian am 02 April 2022, 14:13:56
ich sag´s, denn sie wissen nicht was sie tun, gerade wenn aus 1,5 KB 960 KB wird.

Das Problem ist, dass man sich als Anwender darauf verlässt, eingecheckte Icons ohne Einschränkungen nutzen zu können.

Ich gehe davon aus, dass die Zuständigen möglichst schnell diese Icons ersetzen. Und hier der Anfang der Liste :)

fhem@raspberrypi:~/www/images/fhemSVG$ ls -S -l
insgesamt 10084
-rw-r--r-- 1 fhem dialout 941642 Aug 17  2020 gefrierschrank_icon.svg
-rw-r--r-- 1 fhem dialout 423703 Aug 17  2020 sprinkler_icon.svg
-rw-r--r-- 1 fhem dialout 419312 Feb  3  2018 rc_TV1_on.svg
-rw-r--r-- 1 fhem dialout 270578 Aug 17  2020 kuehlschrank_small.svg
-rw-r--r-- 1 fhem dialout 235113 Aug 17  2020 it_raspberry.svg
-rw-r--r-- 1 fhem dialout 234856 Aug 17  2020 solar_icon.svg
-rw-r--r-- 1 fhem dialout 187891 Aug 17  2020 wintergarten_icon.svg
-rw-r--r-- 1 fhem dialout 177096 Aug 17  2020 kuehlschrank_big.svg
-rw-r--r-- 1 fhem dialout  95779 Aug 17  2020 springbrunnen_icon.svg
-rw-r--r-- 1 fhem dialout  69515 Aug 17  2020 it_raspberry_logo.svg
-rw-r--r-- 1 fhem dialout  64098 Feb 23  2021 Siemens_synco_QAX910.svg
-rw-r--r-- 1 fhem dialout  59586 Feb 23  2021 Botvac_VR200.svg
-rw-r--r-- 1 fhem dialout  59117 Aug 23  2019 air_compressor.svg
-rw-r--r-- 1 fhem dialout  58372 Feb  3  2018 DIN_rail_housing.svg
-rw-r--r-- 1 fhem dialout  54547 Dez 23 18:33 Gartenabfall.svg


Danke für den Tipp :-)

@Rudi: Kannst Du die paar SVG's eindampfen? Habe keine Inkscape

Gruß und Dank

Wuppi
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen