FUIP - Fhem User Interface Painter

Begonnen von Thorsten Pferdekaemper, 17 März 2018, 23:08:43

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Hi,
ich habe seit einer Weile an etwas gebastelt, dass man jetzt vielleicht herzeigen kann.
Kurz gesagt ist es eine Klickibunti-Oberfläche zur Erstellung von FTUI-Seiten. Auch wenn ich Videos sonst nicht so toll finde, habe ich hier eins drangehängt. Bei UI-Sachen muss man es einfach sehen...
Wer das ganze haben will:

update add https://raw.githubusercontent.com/ThorstenPferdekaemper/FHEM-FUIP/master/controls_fuip.txt
update all fuip
shutdown restart
define ui FUIP

Im FHEM-Menu erscheint dann über den Räumen ein Link "ui"...

Die Sache ist momentan noch nicht wirklich ausgereift, also nur sehr bedingt für den "produktiven" Einsatz zu empfehlen. Ich würde aber gerne daran weiterbasteln und bin für (mehr oder weniger konstruktive) Kommentare empfänglich.

Gruß,
   Thorsten

FUIP

n4rrOx

Hi Thorsten,

großes Lob!
Sieht sehr gut aus.

Das geht auf jeden Fall in die richtige Richtung.

Ich hätte noch einige Fragen / Anregungen / Vorschläge für die Zukunft:

1) Ich nehme an, dass das ganze auf Gridsterelementen basiert, richtig?
   Wie sieht bei deinen Anpassungen, die Darstellung bei verschiedenen Auflösungen (Desktop, Tablet, Smartphone) aus?
   Ist diese ebenfalls so dynamisch wie Flexbox, dass sich das Design anpasst?

2) Sind für die Zukunft auch "variable" Styles (Farben, Größen, Eckradien, "Menüvarianten", etc.) wie beim FHEM Style "f18" geplant?
   Ggf. wäre hier eine Zusammenarbeit mit setstate interessant, da er anscheinend momentan an einer "Theme-Engine" arbeitet.

3) Lassen sich damit auch "Templates" generieren und anwenden (da man ja häufig ähnliche Anordnungen hat)?

Gruß
Mathias

Thorsten Pferdekaemper

Zitat von: n4rrOx am 19 März 2018, 16:26:05
Sieht sehr gut aus.
Danke!

Zitat
1) Ich nehme an, dass das ganze auf Gridsterelementen basiert, richtig?
Ja. Man kann die Gridsterelemente herumschieben und die Größe ändern. In FUIP heißen die Dinger "Cell". Man kann aber auch die einzelnen "Views" innerhalb einer "Cell" beliebig verschieben. Ein "View" ist im Prinzip ein Widget, aber mit bestimmten Vorbelegungen bzw. "Ausschmückungen".

ZitatWie sieht bei deinen Anpassungen, die Darstellung bei verschiedenen Auflösungen (Desktop, Tablet, Smartphone) aus?
Da gibt es momentan gar nichts. Ein Pixel ist ein Pixel... Das ganze basiert zumindest innerhalb der Zellen auf absoluter Positionierung. Da wir's schwierig mit automatischen Anpassungen.

ZitatIst diese ebenfalls so dynamisch wie Flexbox, dass sich das Design anpasst?
Siehe oben... Ich habe schon darüber nachgedacht, die Positionierung der einzelnen Zellen dynamisch zu machen. Allerdings fehlen mir dazu momentan noch die Grundlagen und auch ein bisschen das Interaktionsdesign für den Painter. Wenn ich z.B. eine Zelle irgendwo hinschiebe, dann sollte sie nachher auch dort sein, oder? Ich bin für konkrete Vorschläge sehr offen.

Zitat2) Sind für die Zukunft auch "variable" Styles (Farben, Größen, Eckradien, "Menüvarianten", etc.) wie beim FHEM Style "f18" geplant?
"Geplant" ist gar nichts. Ich mache einfach, was mir so einfällt. Wenn jemand sagt, er findet das ganze gut, aber er hätte das ganze gerne in Blau, dann baue ich ggf. ein neues Attribut oder wie auch immer ein.

ZitatGgf. wäre hier eine Zusammenarbeit mit setstate interessant, da er anscheinend momentan an einer "Theme-Engine" arbeitet.
Hast Du da mal einen Link? Wenn es dazu schon was Geschriebenes gibt, dann würde ich mir das gerne erst einmal anschauen.

Zitat3) Lassen sich damit auch "Templates" generieren und anwenden (da man ja häufig ähnliche Anordnungen hat)?
Templates im Sinne der FTUI Templates habe ich nicht eingebaut. Ich wüsste auch gar nicht so genau, wie das gehen sollte. Die Views sind ja schon so etwas wie Templates.
Man kann aber ganze Seiten kopieren oder auch einzelne Zellen innerhalb derselben Seite oder auch in eine andere Seite. Ich glaube, dass das Video das auch zeigt. Man könnte sich also eine "Template"-Seite zusamenbasteln, die man entweder immer komplett kopiert und dann abwandelt oder die Zellen als Vorlagen enthält, die man dann in die gewünschte Seite kopiert und abwandelt.
Was (noch?) fehlt ist eine Art Referenzierung: Wenn man momentan die Vorlage ändert, dann ändert sich die Kopie natürlich nicht mit. Ich könnte aber theoretisch ein "Referenzieren" anbieten, bei dem das Objekt (die Zelle, Seite oder der View) nicht wirklich kopiert wird, man aber trotzdem einzelne Teile ändern kann. Blöderweise wird da die Semantik ganz schnell kompliziert, spätestens dann, wenn man eine Referenz auf eine Referenz macht und das erste Objekt geändert wird...
Aber auch hier: Konstruktive konkrete Vorschläge werden gerne in Erwägung gezogen.

Gruß,
   Thorsten

FUIP

n4rrOx

Zitat von: Thorsten Pferdekaemper am 19 März 2018, 21:48:03
Da gibt es momentan gar nichts. Ein Pixel ist ein Pixel... Das ganze basiert zumindest innerhalb der Zellen auf absoluter Positionierung. Da wir's schwierig mit automatischen Anpassungen.
Siehe oben... Ich habe schon darüber nachgedacht, die Positionierung der einzelnen Zellen dynamisch zu machen. Allerdings fehlen mir dazu momentan noch die Grundlagen und auch ein bisschen das Interaktionsdesign für den Painter. Wenn ich z.B. eine Zelle irgendwo hinschiebe, dann sollte sie nachher auch dort sein, oder? Ich bin für konkrete Vorschläge sehr offen.
Ja das ist schwierig. Der Ansatz mit dem "hin und her" schieben ist ja schonmal genial!
Leider ist diese Ansicht nicht für Smartphones geeignet.
Ggf. lässt sich Flexbox als Framework integrieren, welches diese Funktionalität mitbringt. Habe es bis jetzt aber nicht in Verwendung, weswegen dir andere da ggf. mehr dazu sagen können.

Zitat von: Thorsten Pferdekaemper am 19 März 2018, 21:48:03
"Geplant" ist gar nichts. Ich mache einfach, was mir so einfällt. Wenn jemand sagt, er findet das ganze gut, aber er hätte das ganze gerne in Blau, dann baue ich ggf. ein neues Attribut oder wie auch immer ein.
Hast Du da mal einen Link? Wenn es dazu schon was Geschriebenes gibt, dann würde ich mir das gerne erst einmal anschauen.
Noch nichts Offizielles.
Das ist nur das, was ich selbst, zwischen den Zeilen, raus gelesen habe:
https://forum.fhem.de/index.php/topic,85756.0.html
https://forum.fhem.de/index.php?topic=85879.0.html
Hier kann setstate wahrscheinlich mehr zu seinen Plänen sagen.
Generell finde ich es sinnvoll, dass wenn was in Richtung Themes geht, es auch hier mit einfließt.
Das würde den WYSIWYG-Editor voll umfänglich machen und würde vor allem Einsteigern, die kein HTML/CSS beherrschen, deutlich das Ändern von Farben, Icons etc. vereinfachen.

Zitat von: Thorsten Pferdekaemper am 19 März 2018, 21:48:03
Templates im Sinne der FTUI Templates habe ich nicht eingebaut. Ich wüsste auch gar nicht so genau, wie das gehen sollte. Die Views sind ja schon so etwas wie Templates.
Man kann aber ganze Seiten kopieren oder auch einzelne Zellen innerhalb derselben Seite oder auch in eine andere Seite. Ich glaube, dass das Video das auch zeigt. Man könnte sich also eine "Template"-Seite zusammenbasteln, die man entweder immer komplett kopiert und dann abwandelt oder die Zellen als Vorlagen enthält, die man dann in die gewünschte Seite kopiert und abwandelt.
Eigentlich hast du Recht!

Zitat von: Thorsten Pferdekaemper am 19 März 2018, 21:48:03
Was (noch?) fehlt ist eine Art Referenzierung: Wenn man momentan die Vorlage ändert, dann ändert sich die Kopie natürlich nicht mit. Ich könnte aber theoretisch ein "Referenzieren" anbieten, bei dem das Objekt (die Zelle, Seite oder der View) nicht wirklich kopiert wird, man aber trotzdem einzelne Teile ändern kann. Blöderweise wird da die Semantik ganz schnell kompliziert, spätestens dann, wenn man eine Referenz auf eine Referenz macht und das erste Objekt geändert wird...
Aber auch hier: Konstruktive konkrete Vorschläge werden gerne in Erwägung gezogen.
Ich denke auch, dass es differenzierte Anwendungen gibt.
Mal will man genau die gleichen Widgets in der gleichen Anordnung haben, mal hat man aber z. B. zwei Fensterkontakte an einem Doppelfenster anstatt einem.
Wie wäre es, wenn man eine "Template-Seite" hätte, in der man Grundbausteine zusammenklicken könnte.
Hier könnte man auch einfach eine Variante mit z. B. Doppelfenster und eine mit einem Fenster erstellen.
Auf den eigentlichen Hauptseiten wird dann nur noch auf die verschiedenen Templates verwiesen und ggf. die Position dieser Templates angepasst.
Die Bausteine auf den Inhaltseiten sind dabei aber alle referenziert auf die Templates.
Farben, Formen, Icons, etc. werden "zentral" ggf. pro Theme geändert bzw. verschiedene Themes angewendet.

Gruß
Mathias

Masterfunk

#4
Hallo,

kann das Modul nicht laden.

Bekomme die Fehlermeldung:

Attempt to reload lib/FUIP/Model.pm aborted.
Compilation failed in require at ./FHEM/42_FUIP.pm line 68.
BEGIN failed--compilation aborted at ./FHEM/42_FUIP.pm line 68


libjson-pp-perl und liburi-escape-xs-perl habe ich schon nachinstalliert.

Gruß Detlef

mahowi

#5
Es wird wohl das Modul JSON::Parse benötigt. Leider gibt es dafür kein Debian Paket, das Modul muß also über CPAN installiert werden.

Edit: Wenn JSON::Parse installiert ist, scheitert es am nächsten Fehler:
BEGIN failed--compilation aborted at ./FHEM/42_FUIP.pm line 68.
2018.03.20 14:17:19.836 0: Experimental keys on scalar is now forbidden at FHEM/lib/FUIP/Model.pm line 126.


Das "Experimental keys on scalar is now forbidden" kommt bei neueren Perl-Versionen vor und wurde hier im Forum schon bei mehreren Modulen gefixt.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

Thorsten Pferdekaemper

Zitat von: mahowi am 20 März 2018, 14:14:11
Das "Experimental keys on scalar is now forbidden"
...sollte jetzt gefixt sein.

Die ganzen Abhängigkeiten sind etwas schwieriger loszuwerden, vielleicht auch gar nicht. Das ist meistens ziemlich viel Aufwand, da man u.U. alles selbst nachprogrammieren muss.

Gruß,
   Thorsten
FUIP

mahowi

In Zeile 182 in Model.pm gibt es den Fehler auch nochmal:
2018.03.20 14:41:45.084 1: reload: Error:Modul 42_FUIP deactivated:
Experimental keys on scalar is now forbidden at FHEM/lib/FUIP/Model.pm line 182.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

Thorsten Pferdekaemper

Zitat von: mahowi am 20 März 2018, 14:43:09
In Zeile 182 in Model.pm gibt es den Fehler auch nochmal:
...und an ein paar anderen Stellen auch noch. Ich hoffe, dass ich jetzt alle gefunden habe.
Gruß,
   Thorsten
FUIP

mahowi

Ja, jetzt klappt's.  :) Das ging ja fix.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

Masterfunk

Nach der Installation von "JSON::Parse" kann ich das Modul laden und eine Definitionj anlegen.
Allerdings passiert unter FTUI nichts, auch wenn locked auf "0" steht.

Gruß Detlef

Thorsten Pferdekaemper

Zitat von: Masterfunk am 20 März 2018, 15:19:49
Nach der Installation von "JSON::Parse" kann ich das Modul laden und eine Definitionj anlegen.
Allerdings passiert unter FTUI nichts, auch wenn locked auf "0" steht.
Kannst Du mal ein list des FUIP-Device machen? ...also das Ding, das Du gerade angelegt hast?
Gruß,
   Thorsten
FUIP

mahowi

define ui FUIP
hat jetzt geklappt.

Der Aufruf des Links "ui" bringt dann mein FHEM zum Neustart. Im Log ist der letzte Eintrag:
2018.03.20 15:12:21.609 3: jsonlist2 SVG_FileLog_UPS_1 chanNo TYPE state model subType : Unknown command JsonList2, try help.
JSON error at line 1, byte 1/36: Unexpected character 'U' parsing initial state: expecting whitespace: '\n', '\r', '\t', ' ' or start of string: '"' or digit: '0-9' or minus: '-' or start of an array or object: '{', '[' or start of literal: 't', 'f', 'n' at FHEM/lib/FUIP/Model.pm line 196.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

Thorsten Pferdekaemper

Hi,
das ist seltsam. Irgendwie scheint Dein FHEM jsonlist2 zu kennen, aber als JsonList2. ...und beschwert sich dann, dass es das nicht gibt. Sehr komisch.
Könntest Du mal das hier im Kommandofeld eingeben:

jsonlist2 SVG_FileLog_UPS_1 chanNo TYPE state model subType

...und dann auch mal

JsonList2 SVG_FileLog_UPS_1 chanNo TYPE state model subType

Gruß,
   Thorsten
FUIP

mahowi

#14
"jsonlist2 SVG_FileLog_UPS_1 chanNo TYPE state model subType" ergibt:
{
  "Arg":"SVG_FileLog_UPS_1 chanNo TYPE state model subType",
  "Results": [
  {
    "Name":"SVG_FileLog_UPS_1",
    "Internals": {      "TYPE": "SVG" },
    "Readings": { },
    "Attributes": { }
  }  ],
  "totalResultsReturned":1
}


"JsonList2 SVG_FileLog_UPS_1 chanNo TYPE state model subType":
{
  "Arg":"SVG_FileLog_UPS_1 chanNo TYPE state model subType",
  "Results": [
  {
    "Name":"SVG_FileLog_UPS_1",
    "Internals": {      "TYPE": "SVG" },
    "Readings": { },
    "Attributes": { }
  }  ],
  "totalResultsReturned":1
}


Beides kommt also zum gleichen Ergebnis. Sehr merkwürdig, daß es in der Kommandozeile funktioniert, im Modul aber nicht.




Edit: Ich habe ui jetzt nochmal neu definiert, jetzt funktioniert es wieder. Ich kann Dir leider nicht sagen, woran es gelegen hat.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee