FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: DetlefR am 26 März 2022, 19:17:12

Titel: DOIF mit uiTable kopieren
Beitrag 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
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: Damian am 26 März 2022, 20:39:12
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.
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: DetlefR am 26 März 2022, 21:28:22
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

Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: Damian am 26 März 2022, 21:30:53
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.
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: DetlefR am 26 März 2022, 21:45:40
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
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: Damian am 26 März 2022, 22:18:31
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.
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: DetlefR am 27 März 2022, 11:36:21
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
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: Damian am 27 März 2022, 11:47:15
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.
Titel: Antw:DOIF mit uiTable kopieren
Beitrag 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.

Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: Damian am 27 März 2022, 12:48:40
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.
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: DetlefR am 27 März 2022, 14:21:16

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.
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: Sany am 27 März 2022, 15:17:36
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
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: Damian am 27 März 2022, 15:54:06
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.
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: DetlefR am 27 März 2022, 20:29:46
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.
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: Damian am 27 März 2022, 20:41:33
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.
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: Per am 24 April 2022, 12:49:01
Funktioniert aber.
Nur darf man leere Zeilen nicht einfach löschen, weil die vorherige manchmal mit "\" abgeschlossen wird, obwohl eigentlich nichts folgt.
Ohne die Leerzeile wird die vorherige dann natürlich mit dem nächsten Device verbunden...
Titel: Antw:DOIF mit uiTable kopieren
Beitrag von: DetlefR am 25 April 2022, 15:42:12
Dann ist das wohl bei mir eine Ausnahme. :-\
Nach dem ersten DOIF mit uitable ist Schluss. Alles was danach kommt, wird nicht mehr verarbeitet.

Ich weiß ja, dass da ein Problem ist und kann damit leben.

Gruß Detlef