[FUIP] Frontend-Integration: Mehrere FHEMs auf einer FUIP-Seite

Begonnen von Thorsten Pferdekaemper, 06 März 2021, 22:19:51

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Hallo,

ich bin in letzter Zeit doch ein bisschen dazu gekommen, mich ein bisschen um FUIP zu kümmern. Dabei ist etwas herausgekommen, was zwar momentan noch ein bisschen experimentell ist, aber es funktioniert im Prinzip und ich bräuchte mal ein paar Tester.
Man kann ja schon lange bei FTUI und auch bei FUIP über die "fhemwebUrl" ein anderes FHEM einbinden. Bisher ging da wirklich nur ein anderes FHEM. Mit der neuen Version von FUIP gehen jetzt mehrere FHEMs. Man kann also mehrere "fhemwebUrls" angeben, innerhalb einer einzigen FUIP-Instanz. Das geht bis herunter auf View-Ebene. D.h. man kann jetzt in einer Zelle jeder einzelnen View sagen, mit welchem FHEM sie sich verbandeln soll. Dadurch spart man sich die Backend-Integration (FHEM2FHEM oder so), wenn man sowieso "nur" eine gemeinsame Übersicht oder Bedienung haben wil.

Wie gesagt, das ganze ist noch ein bisschen experimentell und ich habe es selbst noch nicht so getestet, wie ich es gerne hätte. Daher habe ich einen neuen Branch aufgemacht, damit es nicht das stabile FUIP kaputt macht. Mittelfristig will ich es aber wieder vereinigen, so dass es nur noch den neuen Branch gibt.

Jetzt zu den Details.

Installation
Das geht genauso wie hier beschrieben:
https://wiki.fhem.de/wiki/FHEM_User_Interface_Painter#Installation_und_Upgrade_in_FHEM
...nur dass es statt "master" "multifhem" heißt. D.h. der Pfad muss geändert werden auf
https://raw.githubusercontent.com/ThorstenPferdekaemper/FHEM-FUIP/multifhem/controls_fuip.txt
Man kann auch den Pfad einfach ändern und dann sozusagen auf multifhem "upgraden", aber wenn man das im Produktivsystem macht, dann ist das schon ein bisschen mutig.

Attribut(e) backend_xyz
Mit der multifhem-Version kann man sich jetzt "backend"-Attribute anlegen. Die funktionieren im Prinzip genauso wie fhemwebUrl, nur dass man davon mehrere haben kann. Allerdings weiß FHEMWEB deswegen nicht im Voraus, welche es gibt. Deswegen muss man das Attribut explizit im Kommandofeld angeben. Konkret...

attr myFuip backend_obergeschoss http://192.168.175.42:8086/fhem

...macht der FUIP-Instanz myFuip klar, dass es ein FHEM-System mit der angegebenen Url gibt und nennt es "obergeschoss".
Wie auch bei fhemUrl vorher darf man hier auf keinen Fall die Url des FHEM-Systems angeben, auf dem FUIP selbst läuft. Stattdessen sieht das dann so aus:

attr myFuip backend_zentrale local

D.h. "local" sagt FUIP, dass es sich bei dem System um das eigene FHEM handelt.
Sobald man mindestens ein backend_ definiert hat, wird fhemwebUrl ignoriert.

Das Feld System Id
Wenn man seine FHEMs wie oben beschrieben eingetragen hat, und es tatsächlich mehr als eins gibt, dann erscheint in den Konfigurations-Popups das Feld System Id. Dort kann man dann z.B. "obergeschoss" oder "zentrale" wählen. (Oder was auch immer man definiert hat.) Das geht für Views, Zellen, Seiten, View Templates und Dialoge (Popups). Was das dann macht sollte jetzt klar sein.
Damit das nicht in Stress ausartet ist der Default-Wert "<inherit>". Das bedeutet, dass das System des übergeordneten Objekts benutzt wird. Für Views ist das die Zelle, für die Zelle die Seite und für die Seite die FUIP-Instanz selbst.
Wenn man bei der FUIP-Instanz angekommen ist, dann wird das Default-System der FUIP-Instanz verwendet. Das kann über das Attribut defaultBackend festgelegt werden. Ansonsten sucht sich FUIP selbst eins aus.

Abwärtskompatibilität oder was passiert, wenn ich das gar nicht brauche
Ich hoffe, dass ich das alles so implementiert habe, dass man davon nichts merkt, wenn man es nicht benutzt. D.h. solange man kein backend_ gesetzt hat, müsste alles ganz genau so sein wie vorher.
Der einzige Unterschied ist dann, dass es das Attribut longPollType nicht mehr gibt. Da es keinen Spaß macht, hier verschiedene Varianten unterstützen zu müssen und "ajax" überall funktionieren sollte, gibt es jetzt nur noch "ajax" und keine Websockets mehr. (...und nein, man muss in FHEMWEB deswegen nichts umstellen.)

...und jetzt wäre es nett, wenn das mal jemand quälen könnte
Ich glaube zwar, dass das im Prinzip funktioniert, aber ich kann unmöglich alles testen. Es wäre nett, wenn sich das mal jemand installieren könnte und es dann ein bisschen quält. Insbesondere konnte ich noch nicht wirklich feststellen, wo die Grenzen sind, wenn man sich mit View Templates und Html-Views austobt. Aber auch die normalen View habe ich noch nicht alle getestet...

Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Sooo viel Feedback hätte ich jetzt gar nicht erwartet.
Ist das ganze unnütz oder eher unklar?
Gruß,
   Thorsten
FUIP

TL60

Hallo, gerade erst gelesen (glatt übersehen) Ich denke dafür gibt es bestimmt Bedarf und will auch gerne testen, aber leider frühestens morgen Abend  :(
Gruß Thomas

TL60

Hallo, wie angedroht  ;) habe ich mal angefangen das ganze zu testen.
Grundsätzlich hat alles funktioniert, es ist mir jedoch nicht gelungen ein neues Gerät über die by device Funktion anzulegen, dort wurde mir nie (auch bei einfachen HUE ON/OFF Lampen) ein View angeboten. Ansonsten habe ich Fensterkontakte, Temperatur-Readings und Dimmbare Lampen probiert. Morgen probiere ich noch Rollläden, HTML Code und Termine. Ich möchte auch eine meiner Produktiv Instanzen mal probehalber auf das Testsystem dublizieren.
Ich nutze FUIP mit 3 verschiedenen Instanzen (Auflösungen) für 10Zoll, 8Zoll und 7 Zoll Tablets
Gruß Thomas

Thorsten Pferdekaemper

Hi,
vielen Dank!
Ja, das "by device" geht tatsächlich noch nicht. Danke für's Finden!
Gruß,
   Thorsten
FUIP

TL60

Na ja, wenn es schon bekannt war, ist es ja kein echtes finden  ;). Ich habe dann heute mal etwas mehr in dem neuen Modul rumprobiert und dabei sind mir doch noch ein paar Sachen aufgefallen, aber Vorsicht das wird jetzt etwas länger.
Als erstes habe ich aus der RAW Definition des FUIP-Devices für mein 10 Zoll Tablet eine neue Definition in meinem Testsystem angelegt defmod uiflex11 FUIP
attr uiflex11 baseHeight 108
attr uiflex11 baseWidth 155
attr uiflex11 cellMargin 1
attr uiflex11 fhemwebUrl http://192.168.178.137:8083/fhem
attr uiflex11 layout gridster
Diese View habe ich dann einfach mal mit save gespeichert, um dann die FUIP_uiflex11.cfg gegen die aus dem Produktivsystem auszutauschen, Rechte angepasst, Fhem einmal shutdown restart (warscheinlich unnötig) und dann das entsprechende View aufgerufen. Es kam die Meldung, das ich wohl vor dem beenden von FHEM nicht gespeichert hätte, also einmal save und danach keineProbleme mehr, alles funktionierte wie gewünscht. Im nächste Schritt habe ich dann meine Definition wie folgt erweitert (über den +Button oben links) attr uiflex11 backend_fhem138 http://192.168.178.138:8083/fhem
attr uiflex11 backend_fhem29 http://192.168.178.29:8083/fhem
attr uiflex11 backend_home http://192.168.178.137:8083/fhem
Also zusätzlich zur vorhandenen FHEM Instanz 2 weitere hinzugefügt und um das ganze (meinem Verständnis nach) abzurunden noch das attribut attr uiflex11 defaultBackend http://192.168.178.137:8083/fhem gesetzt, denn ich war der Meinung das ich damit ohne weitere Massnahmen die Orginal Funktionalität erhalte. das war falsch, denn nach dem Aufruf der Seite wurden keine readings angezeigt und auch eine Bedienung (schalten) war nicht möglich (keine Fehlermeldung), erst als ich in jeder Zelle  (Zahnrad anklicken) die System Id von  "<inherit>" auf "home" geändert hatte, funktionierte auch wieder alles. War meine Erwartungshaltung bezüglich des Attributes defaultBackend falsch oder habe sonst einen Fehler gemacht?
Aufgefallen ist mir das obwohl von der Page Config bis zum Device  bei System Id inherit steht, trotzdem die Geräte aus der 138 FHEM Instanz angezeigt werden, selbst wenn ich die System ID der Zelle auf home (fhem 137) ändere und im View ein Device mit + view anlege werden mit der Einstellung (im View) inherit geräte aus der FHEM 138 Instanz angezeigt.
Das hört sich jetzt erstmal eigentlich recht viel an, vielleicht habe ich ja auch aus einem grudsätzlichem Verständnissproblem einiges falsch gemacht. Ich bin aber auch trotzdem schwer begeistert über die neuen tollen Möglichkeiten die sich für Leute wie mich (ohne grosse Html Kenntnisse ) ergeben und möchte mich für das tolle Modul und die tollle Erweiterung bedanken
Gruß Thomas

Thorsten Pferdekaemper

Hi,

attr uiflex11 defaultBackend home

...wäre es gewesen.
D.h. hier wird die System-Id eingetragen. Das muss ich vielleicht noch ein bisschen klarer machen.

Wenn das Teil das Default-Backend nicht findet oder keins definiert ist, dann sucht es sich halt eins aus. Momentan ist das glaube ich die lexikalisch kleinste System-Id, also fhem138.
Wenn allerdings in der Zelle die System-Id auf home steht, dann sollten neue Views das auch übernehmen (...also indirekt über das <inherit>). Das muss ich nochmal ausprobieren.

Danke für's Testen!

Gruß,
   Thorsten
FUIP

TL60

Danke für die Klarstellung, werde ich morgen mal ändern und dann schauen.
Gruß und gute Nacht Thomas

TL60

Hallo und guten Morgen,
nach deinen Hinweisen gestern habe ich das defaultBackend Attribut geändert auf attr uiflex11 defaultBackend home und ein FHEM update gemacht, bei dem aber lediglich die HUEDevice.pm,IPCAM.pm und die DOIF.pm aktualisiert wurden. Dann eine neue Zelle angelegt, System Id auf fhem29 gesetzt ein neues Device  per + view angelegt, wenn die System Id auf inherit stehen bleibt wird die fhem137 Installation als Auswahl angeboten, von Hand auf fhem29 geändert und als view einfach einen simple Switch für eine Lampe angelegt. Dieses Device lässt sich aus der FUIP Oberfläche heraus nicht bedienen und es gibt in der Ziel Fhem Installation (fhem29) folgende 2 Fehlermeldungen im Log2021.03.10 09:28:26.682 3: FHEMWEB WEB CSRF error: csrf_355262004512685 ne csrf_132962237952732 for client WEB_192.168.178.246_54930 / command { my $func = sub { my @devices = (keys %main::defs);;return \@devices };;
use Data::Dumper;;
return Dumper(&$func());; }. For details see the csrfToken FHEMWEB attribute

2021.03.10 09:28:26.682 3: FHEMWEB WEB CSRF error: csrf_355262004512685 ne csrf_132962237952732 for client WEB_192.168.178.246_54930 / command { my $func = sub { my @devices = (keys %main::defs);;return \@devices };;
use Data::Dumper;;
return Dumper(&$func());; }. For details see the csrfToken FHEMWEB attribute.
. Bei erneuten Schaltversuchen kommt auch kein Logeintrag mehr, es geht aber trotzdem nicht, auch andere Dinge die gestern noch funktionierten gehen nicht mehr. Allein der umgekehrte Weg, also schalten im Ursprungsfhem (hier fhem29) führt zu einer korrekten Anzeige, ob ein oder aus in der FUIP Darstellung.
Gruß Thomas

TL60

Hallo, ich nochmal
auch eine Rücknahme des Attributes defaultBackend auf attr uiflex11 defaultBackend http://192.168.178.137:8083/fhembringt die Funktionalität nicht zurück, dafür beim Schaltversuch dann aber diese Meldungen im Log 2021.03.10 10:04:48.613 1: PERL WARNING: Use of uninitialized value $category in string eq at ./FHEM/42_FUIP.pm line 3865.
2021.03.10 10:04:48.613 1: PERL WARNING: Use of uninitialized value $category in string eq at ./FHEM/42_FUIP.pm line 3867.
2021.03.10 10:04:48.613 1: PERL WARNING: Use of uninitialized value $category in string eq at ./FHEM/42_FUIP.pm line 3869.
2021.03.10 10:04:48.613 1: PERL WARNING: Use of uninitialized value $category in string eq at ./FHEM/42_FUIP.pm line 3871.
2021.03.10 10:04:48.613 1: PERL WARNING: Use of uninitialized value $category in string eq at ./FHEM/42_FUIP.pm line 3873.
2021.03.10 10:04:48.614 1: PERL WARNING: Use of uninitialized value $category in string eq at ./FHEM/42_FUIP.pm line 3875.
2021.03.10 10:04:48.614 1: PERL WARNING: Use of uninitialized value $category in string eq at ./FHEM/42_FUIP.pm line 3877.
2021.03.10 10:04:48.614 1: PERL WARNING: Use of uninitialized value $category in pattern match (m//) at ./FHEM/42_FUIP.pm line 3893.
2021.03.10 10:04:48.614 1: PERL WARNING: Use of uninitialized value $category in string eq at ./FHEM/42_FUIP.pm line 3895.
2021.03.10 10:04:48.614 1: PERL WARNING: Use of uninitialized value $category in string eq at ./FHEM/42_FUIP.pm line 3903.
2021.03.10 10:04:48.614 1: PERL WARNING: Use of uninitialized value $category in string eq at ./FHEM/42_FUIP.pm line 3906.


Gruß Thomas

Thorsten Pferdekaemper

Zitat von: TL60 am 10 März 2021, 10:06:47wenn die System Id auf inherit stehen bleibt wird die fhem137 Installation als Auswahl angeboten,
Nur die? ...und wo kommt jetzt fhem137 her? Es dürfte eigentlich nur fhem138, fhem29 und home geben.

Zitat
von Hand auf fhem29 geändert
Huch. Kannst Du da was eingeben? Eigentlich müsste man nur per Dropdown was wählen können.

Zitat
und als view einfach einen simple Switch für eine Lampe angelegt. Dieses Device lässt sich aus der FUIP Oberfläche heraus nicht bedienen und es gibt in der Ziel Fhem Installation (fhem29) folgende 2 Fehlermeldungen im Log2021.03.10 09:28:26.682 3: FHEMWEB WEB CSRF error: csrf_355262004512685 ne csrf_132962237952732
Auf jeden Fall wissen wir damit, dass FUIP zumindest es im richtigen System versucht. Nur der CSRF-Code ist halt falsch. Hast Du zwischendurch mal fhem29 durchgestartet, aber nicht das FHEM, auf dem FUIP läuft? Das könnte das Verhalten erklären, aber es sollte natürlich nicht so sein.

Gruß,
   Thorsten
FUIP

TL60

Hallo Thorsten,
jetzt habe ich mich sprachlich ungenau ausgedrückt, weil
Zitatvon Hand auf fhem29 geändert

Huch. Kannst Du da was eingeben? Eigentlich müsste man nur per Dropdown was wählen könne
ich natürlich aus dem Dropdown ausgewählt habe, dort stehen auch 3 Fhem Installationen zur Auswahl: home= http:/192.168.178.137:8083, fhem29= http:/7192.168.178.29:8083 und http://192.168.178.138:8083 in dem Dropdown Feld für die SystemId stehen neben dem inherit auch die Felder home,fhem29 und fhem138 zur Verfügung so wie es sein soll, denke ich und mit fhem137 meinte ich den Eintrag "home" im Dropdown. Sorry für die sprachliche Ungenauigkeit. 
ZitatHast Du zwischendurch mal fhem29 durchgestartet, aber nicht das FHEM, auf dem FUIP läuft? Das könnte das Verhalten erklären, aber es sollte natürlich nicht so sein.
Nein, die fhem29 habe ich nicht neugestartet. Nur wie geschrieben die Testinstallation upgedatet und natürlich dann auch neu gestartet.
edit: ich hänge noch ein list uiflex11 an
Internals:
   FUUID      60478ccc-f33f-6006-a44c-2cab63cc361cd1c9
   FVERSION   42_FUIP.pm:0.009900/2019-11-16
   NAME       uiflex11
   NR         21
   STATE      uiflex11
   TYPE       FUIP
   autosave   none
   editOnly   0
   colors:
   fhem:
     directory  ./www/tablet
     friendlyname uiflex11
     infix      uiflex11/
   pages:
   viewtemplates:
Attributes:
   backend_fhem138 http://192.168.178.138:8083/fhem
   backend_fhem29 http://192.168.178.29:8083/fhem
   backend_home http://192.168.178.137:8083/fhem
   baseHeight 108
   baseWidth  155
   cellMargin 1
   defaultBackend home
   fhemwebUrl http://192.168.178.137:8083/fhem
   layout     gridster
   room       FUIP


TL60

Hallo, das Ganze hat mir keine Ruhe gelassen und ich habe noch weiter rumprobiert. Einfach gesagt: Es geht jetzt , wenn man weiss wie  ;). Das ist ein wenig kurios und auch schwer zu erkären. Ich versuche es mal: Ich lege eine neue Zelle an, da die Geräte die ich dort abbilden will auf der fhem29 Installation liegen wähle ich im Dropdown-Menü für die System Id den Eintrag fhem29 aus, dann öffne ich mittels +view einen  neuen view.Als nächstes wähle ich als View type den simple switch aus, SystemId lasse ich auf inherit und gehe auf die device Auswahl, hier werden mir aber nur Geräte der home (IP:192.168.178.137) Installation angezeigt, also doch die System Id (im View) auf fhem29 gestellt und nochmal die Device-Auswahl aufgerufen, jetzt passt es und ich wähle das device aus und bestätige. Der view wird angelegt, ich kann aber  nicht schalten, gehe ich jetzt wieder in die Bearbeitung (Zahnrad symbol anklicken) und stelle im view die System Id auf inherit und bestätige das,  kann ich das Gerät schalten und nun wird es richtig kurios, gehe ich wieder in die Bearbeitungsfunktion und stelle die System Id auf fhem29 funktioniert jetzt auch noch alles, also ich verstehe es nicht. Ich hoffe das ganze war halbwegs verständlich ausgedrückt. Um dem ganzen nun noch die Krone aufzusetzen funktioniert es in dieser Zelle für alle nachfolgend eingerichteten Geräte sofort, bis auf die Kleinigkeit das die device Auswahl nur die passenden Geräte anzeigt, wenn ich auch die passende System Id setze,die Einstellung inherit bietet hier immer die Geräte der home (192.168.178.137) Instanz an.
Gruß, ein total verwirrter Thomas

Thorsten Pferdekaemper

Hi,
ich habe tatsächlich beim Versuch, das ganze zu reproduzieren, einen Bug gefunden. Dadurch wird unter Anderem <inherit> nicht richtig behandelt. Das ganze ist dummerweise nicht ganz so einfach zu lösen, aber ich bin dran.
Du solltest Dich vielleicht nicht länger damit quälen und erst einmal abwarten, bis ich das korrigiert habe. Ich denke mal, dass ich das bis spätestens morgen hinbekommen sollte.
Gruß,
    Thorsten
FUIP

Thorsten Pferdekaemper

Hi,
ich habe jetzt mal ein bisschen dran rumgeschraubt. Hier ist eine Liste der von Dir gefundenen Sachen mit ein paar Bemerkungen dazu und ob es in der aktuellen Version korrigiert ist:

Views anlegen "by device" funktioniert nicht
Das ist wahrscheinlich immer noch so.

Man kann ungültige Werte als defaultBackend angeben
Das ist immer noch so.

<inherit> funktioniert nicht richtig
Das betrifft vordergründig vor Allem die Werthilfe (z.B. zu Devices) auf den Konfigurations-Popups. Allerdings hatte das auch andere Auswirkungen, die möglicherweise auch seltsamere Effekte erklären können.
Das sollte jetzt repariert sein und richtig funktionieren. D.h. wenn man <inherit> wählt, dann wird jetzt immer die System-Id der Ebene weiter oben zu Grunde gelegt.
Ein bisschen aufpassen muss man, wenn man die System-Id auf Ebene der Seite (Page) festlegt. Dann muss man das Konfigurations-Popup zur Page erstmal zumachen, damit das übertragen wird.

CSRF-Fehlermeldungen im Log
Das betrifft die Meldungen im Backend-Fhem. Das dürfte nicht wirklich ein Problem sein. Wenn sich das CSRF-Token ändert, dann reagiert halt das Backend erst einmal so. Das Frontend (also FUIP) kann das ja nicht wissen, bevor es das Kommando absetzt. FUIP müsste es aber dann merken und sich ein neues Token holen. Anders gesagt: Das dürfte nur ein vorübergehendes Symptom sein, wenn man eins der Systeme neu startet.

PERL WARNING: Use of uninitialized value $category...
Das war zwar unabhängig vom ganzen Rest, aber ich hab's trotzdem repariert. Das hat was mit der Anbindung der Doku zu tun.

Es wäre nett, wenn Du mal ein update machen könntest und dann das ganze nochmal ausprobierst.

Gruß,
   Thorsten







FUIP