Hauptmenü

DOIF mit uiTable kopieren

Begonnen von DetlefR, 26 März 2022, 19:17:12

Vorheriges Thema - Nächstes Thema

DetlefR

Hallo,

ich habe mir auf meinem Testsystem einige DOIF mit uiTable zusammengebaut und getestet.
Jetzt wollte ich, wie gewohnt die Konfiguration auf eine andere FHEM Instanz übertragen. Also aus dem "RAW definition" kopieren. Die Definitionen in Notepad++ sammeln und dann in einem Rutsch wieder über"RAW definiton" auf dem Zielsystem anlegen.
Geht mit uiTable nicht. Nach attr <device> uiTable ist Schluss. Es wird max. noch die nächste Zeile eingelesen. Mehr nicht. Es verschwindet auch das Fenster, in dem das Ergebnis des Imports angezeigt wird.
???.

Gruß Detlef

Damian

Zitat von: DetlefR am 26 März 2022, 19:17:12
Hallo,

ich habe mir auf meinem Testsystem einige DOIF mit uiTable zusammengebaut und getestet.
Jetzt wollte ich, wie gewohnt die Konfiguration auf eine andere FHEM Instanz übertragen. Also aus dem "RAW definition" kopieren. Die Definitionen in Notepad++ sammeln und dann in einem Rutsch wieder über"RAW definiton" auf dem Zielsystem anlegen.
Geht mit uiTable nicht. Nach attr <device> uiTable ist Schluss. Es wird max. noch die nächste Zeile eingelesen. Mehr nicht. Es verschwindet auch das Fenster, in dem das Ergebnis des Imports angezeigt wird.
???.

Gruß Detlef

Mit diesen Informationen wird dir hier keiner helfen können.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

DetlefR

Hallo,

ich versuche es einmal ander zu erklären. Siehe Anhang.
Auf dem Testsystem öffne ich das Device "di_kessel". Unten auf der Seite gibt es die Funktion "Raw definition". Aus dem Fenster das dann auf geht kopiere ich die Konfiguration. Ohne "setstate" Anweisungen.
Das ganze kopiere ich dann auf dem Zielsystem in ein vorher geleertes "Raw definition" Fenster. Oder ich sammele Definitionen in Notepad++ und füge sie dann komplett ein.
Mit "Execute commands" wird das ganze dann eingelesen. Zum SChluß kommt dann noch ein Fenster mit "Everything is fine" oder so ähnlich.
Sorry für die lange Erklärung. Ich denke das ist bekannt.
Soweit so gut. Das hat bisher immer gut funktioniert.
Wenn jetzt aber die Anweisung "attr di_kessel" kommt, dann wird diese zwar noch kommplet eingelesen, aber danach ist Schluss. Alle weiteren Anweisungen werden ignoriert. Der Bildschirm flackert kurz und auch das Fenster zu Abschluß erscheint nicht oder verschwindet gleich wieder.
Und das bei allen DOIF mit uiTable.

Hoffentlich war die Erklärung diesmal besser. ;)

Gruß Detlef


Damian

Wenn die Voraussetzungen im Zielsystem nicht gegeben sind, wie insb. die Reading, die in der uiTable vorkommen, dann ist klar, dass die Tabelle nicht erscheint.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

DetlefR

#4
Das Problem ist ja nicht, dass die Tabelle nicht erscheint.
Das Problem ist, dass der Einlesevorgang abgebrochen wird.
Wenn kein uiTable dabei ist, kann ich dutzende Geräte mit einmal Einlesen.

Aber dem Hinweis mit den fehlenden Readings werde ich mal nachgehen. Inwieweit ein fehlendes Reading Auswirkungen darauf hat ob ein DOIF mit uiTable angelegt werden kann.

Nachtrag:
Geht nicht. Bei einem funktionieren DOIF die Raw definition aufrufen, die setstate Anweisungen entfernen und versuchen das ganze wieder einzulesen. Das Abschlussfenster mit der Bestätigung dass der Vorgang erfolgreich war erscheint nicht und ein testhalber am Ende eingefügtes "defmod kannweg dummy" wurde nicht ausgeführt

Damian

Naja, das Modul verhält sich immer gleich. Wenn etwas nicht geht, was wo anders geht, dann kann es nur am gegeben Umfeld liegen.

Mehr kann ich aus den gelieferten Info leider nicht sagen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

DetlefR

#6
Wenn ich Zeile 117 in 98_DOIF auskommentiere, dann funktioniert es wie erwartet. Der Komfort, dass die Tabelle angezeigt wird, ist dann allerdings weg.


115 # uiTable
116 sub DOIF_reloadFW {
117  #map { FW_directNotify("#FHEMWEB:$_", "location.reload()", "") } devspec2array("TYPE=FHEMWEB");
118 }


Gruß Detlef

Damian

Was passiert denn, wenn du im Originalsystem (nach Sicherung deiner Konfiguration) RAW-Definition  kopierst (copy), das DOIF-Device löschst und die RAW-Def über Plus-Symbol und Einfügen (paste) wieder definierst?

Also bei mir klappt das mit DOIF-Devices, die größere uiTable-Definitionen haben, problemlos.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

DetlefR

Das funktioniert ja bei mir auch. Egal ob Original oder Zielsystem.

Das "Problem" ist eben, dass alles was evt. noch nach attr <device> uiTable in RAW-Definition kommt nicht mehr verarbeitet wird.


Damian

Zitat von: DetlefR am 27 März 2022, 12:29:47
Das funktioniert ja bei mir auch. Egal ob Original oder Zielsystem.

Das "Problem" ist eben, dass alles was evt. noch nach attr <device> uiTable in RAW-Definition kommt nicht mehr verarbeitet wird.

Dann poste doch mal deine Definition.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

DetlefR


defmod di_Wetter_ring DOIF ##
attr di_Wetter_ring group Aussen
attr di_Wetter_ring room Räume->Aussen,z-functional->doif
attr di_Wetter_ring uiTable {\
package ui_Table;;\
$SHOWNODEVICELINE = "Räume.*";;\
$SHOWNOSTATE = 1;;\
$TABLE = "width:500px;; height:150px;;";;\
$TD{1}{0}="colspan=2;; ";;\
$TC{0}="align='center'";;\
}\
card([mqtt_d_solar:aussen:col2d],"Aussen","temp_inside",-15,50,240,360,"°C",\&temp_hue,"1","130,,,,",",,,,1",undef,[Wetter:Feuchtigkeit:col2d],0,100,44,190,"%",\&hum_hue,"0")|\
card([mqtt_d_wetter:current_pressure:col2d],"Luftdruck","weather_barometric_pressure",980,1047,0,120,"hPa",\&temp_hue,"0","130,,,,",",,,,1",undef)\
icon_temp_ring ("temp_windchill",[Wetter:TemperaturGefuehltC],undef,undef,150) .\
icon_ring2([mqtt_d_wetter:current_windspeed] > 0 ? "wind".",1,0,0,".[mqtt_d_wetter:current_winddeg]:"no_wind",[mqtt_d_wetter:current_windspeed],0,50,120,0,"km/h",150,undef,1,[Wetter:WindboeenKm],0,50,120,0,"km/h",undef,1) .\
icon_ring2("weather_rain_gauge",[mqtt_d_wetter:rain_hour],0,10,180,270,"mm/h",150,undef,1,[mqtt_d_wetter:rain_day],0,50,180,270,"mm",undef,1)\


defmod kannweg dummy


Dort wo ich Zeile 117 ausgeblendet habe, wird der dummy angelegt. Und es erscheint auch das Fenster zur Bestätigung das alles in Ordnung war.
Auf den anderen wird der Bildschirm aktualisiert und das was nach der Anweisung attr di_Wetter_ring uiTable kommt wird nicht verarbeitet.
Auch das Fenster wird nicht angezeigt.

Sany

ich kann zwar nicht erklären warum, aber wenn Du den letzten \ am Ende der uiTable wegläßt dann funktioniert es. Beide Devices werden angelegt.
Wenn ich dann vom di_Wetter mir die RAW-definition anzeige ist dort kein \ am Ende.


Gruß


Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Damian

Also ein automatisch generierte RAW beinhaltet immer nur die Definition eines Devices und nicht mehrerer. Das Anlegen sollte dann immer klappen.

Wenn ein weiteres defmod in der Definition vorkommt, dann stimmt schon was nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

DetlefR

ZitatWenn ein weiteres defmod in der Definition vorkommt, dann stimmt schon was nicht.

Natürlich. Wenn ich nur ein Device anlege dann ist dort auch nur ein defmod.
Ich glaube wir reden noch aneinander vorbei. Das Problem ist nicht, dass das erste DOIF nicht angelegt wird. Das funktioniert ja noch. Das was weiterhin passiert , oder eben nicht passiert, ist nicht das normale Verhalten nach "Execute command".
Ich habe über dieses Fenster schon größere Mengen an Geräten eingelesen oder Attribute geändert. Das hat bisher immer problemlos funktioniert. Nur eben nicht wenn eine Zeile mit dem Attribut uiTable kommt. Das erzeugt einen Refresh auf alle Seiten und das weitere einlesen wird abgebrochen.
Mach mal RAW-Definition bei einem Gerät ohne uiTable. Dann erscheint ein Fenster dass alles schick war oder irgend etwas nicht stimmt wenn Blödsinn darin stand.
Dann noch mal mit uiTable. Da wird das Fenster "weg refresht".

Ich weiss jetzt, dass ich beim nächsten update in 98_DOIF das DOIF_reloadFW unterbinden muss um das gewohnte Verhalten von FHEM zu haben.

:Sany. Es scheint noch eine Rolle zu spielen, wieviel Zeilen nach dem Ende von uiTable kommen. Aber wenn ich Geräte von einer FHEM Installation auf eine andere übertrage, dann steht dort nicht nur eine Zeile sondern u.U. hunderte. Die werden dann definitiv nicht verarbeitet.

Damian

Zitat von: DetlefR am 27 März 2022, 20:29:46
Natürlich. Wenn ich nur ein Device anlege dann ist dort auch nur ein defmod.
Ich glaube wir reden noch aneinander vorbei. Das Problem ist nicht, dass das erste DOIF nicht angelegt wird. Das funktioniert ja noch. Das was weiterhin passiert , oder eben nicht passiert, ist nicht das normale Verhalten nach "Execute command".
Ich habe über dieses Fenster schon größere Mengen an Geräten eingelesen oder Attribute geändert. Das hat bisher immer problemlos funktioniert. Nur eben nicht wenn eine Zeile mit dem Attribut uiTable kommt. Das erzeugt einen Refresh auf alle Seiten und das weitere einlesen wird abgebrochen.
Mach mal RAW-Definition bei einem Gerät ohne uiTable. Dann erscheint ein Fenster dass alles schick war oder irgend etwas nicht stimmt wenn Blödsinn darin stand.
Dann noch mal mit uiTable. Da wird das Fenster "weg refresht".

Ich weiss jetzt, dass ich beim nächsten update in 98_DOIF das DOIF_reloadFW unterbinden muss um das gewohnte Verhalten von FHEM zu haben.

:Sany. Es scheint noch eine Rolle zu spielen, wieviel Zeilen nach dem Ende von uiTable kommen. Aber wenn ich Geräte von einer FHEM Installation auf eine andere übertrage, dann steht dort nicht nur eine Zeile sondern u.U. hunderte. Die werden dann definitiv nicht verarbeitet.

Das ist auch nicht vorgesehen. Wenn du mehrere DOIF-Devices kopieren willst, dann musst du es über die config-Datei tun.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF