FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Reinerlein am 09 Mai 2017, 21:42:36

Titel: Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Reinerlein am 09 Mai 2017, 21:42:36
Hallo,

ich versuche gerade für mein Sonos-Modul die Anzeige zu Überarbeiten.
Dabei würde ich gerne die Cover- und Titelanzeige direkt als Modulausgabe anzeigen lassen, und zusätzlich noch die Standardanzeige mit dem Aliasnamen und dem Status und den WebCmds in einer Zeile darüber. Momentan ist das über eine ReadingsGroup gelöst...

Was ich hinbekomme ist, die Cover-/Titelanzeige darzustellen. Auch mit Longpoll. Sowohl in der Raumübersicht als auch in der Detailanzeige.
Wenn ich diese Anzeige habe, dann wird in der Raumansicht nichts weiter von den Devicedetails angezeigt, und in der Detailansicht wird der Aliasname in der linken Spalte und meine Cover-/Titelansicht in der rechten Spalte angezeigt.

Ich habe dann versucht selber die Prozedur "FW_makeDeviceLine()" aufzurufen. Diese liefert allerdings nicht den erzeugten HTML-Code zurück, sondern baut den Code selber direkt in die Ausgabe (mittels "FW_pO") ein. Am Ende ist die Seite mehrfach dargestellt verschachtelt und nicht ansehnlich :(

Gibt es irgendwie eine Möglichkeit, ohne eine eigene Kopie des Codes dieser Deviceanzeige auszukommen? vermutlich nicht.
Besteht denn vielleicht die Möglichkeit, dass man das modularisiert, sodass man das wiederverwenden kann?

Im Anhang mal zwei Screenshots; Einer aus der Raumübersicht mit der Gruppe "Schlafzimmer" und einer aus der Detailansicht mit dem Devicealiasnamen links neben der Coverdarstellung.
Ich würde gerne in beiden Fällen über der Coveranzeige, in einer eigenen Zeile, die "normale" Fhem-Deviceanzeige mit Deviceicon, Alias, u.U. DevStateIcon und den WebCmds haben...

Danke schon mal für sachdienliche Hinweise :)

Grüße
Reinerlein
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: justme1968 am 09 Mai 2017, 22:04:01
@rudi: es gibt ja die möglichkeit mit $hash->{FW_deviceOverview} = 1; in der detail ansicht die overview zeile zusätzlich zur detailFn anzuzeigen.

wie wäre es anlog dazu ein$hash->{FW_deviceLine} = 1;oder$hash->{FW_deviceSummary} = 1;zu haben das dann in der raum ansicht die übersicht zusätzlich zur summaryFn anzeigt?
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Reinerlein am 09 Mai 2017, 22:40:40
Hallo Andre,

da habe ich auch noch ein Problemchen.
Ich habe es mit folgdendem Setting versucht:

$hash->{FW_detailFn} = 'SONOSPLAYER_Detail';
$hash->{FW_deviceOverview} = 1;

Dann habe ich allerdings auf der Detailseite ausschließlich nur die DeviceZeile; auch in der Raumansicht.

Ich muss zwingend

$hash->{FW_summaryFn} = 'SONOSPLAYER_Detail';

setzen, um meine eigene Darstellung zu haben. Dann aber auch gleich mit dem beschriebenen Aussehen/Problem.

Da scheint also noch etwas durchmischt zu sein, oder ich gebe das falsch an.
Ich schreibe das in der "SONOSPLAYER_Initialize()". Das ist doch korrekt, oder?

Grüße
Reiner
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: justme1968 am 09 Mai 2017, 22:50:58
ja. so sollte es gehen. damit wird auf der detail seite die device zeile und die detailFn angezeigt.

das einzige modul das dies zur zeit verwendet ist 10_ZWave.pm. dafür hatte rudi es eingebaut.


achtung: FW_detailFn ist für die detail ansicht und FW_summaryFn ist nur für die raum ansicht. die meisten module lassen aber summaryFn und detailFn auf die gleiche routine zeigen.


die variante die du möchtest (eigner html code und device zeile in der raum ansicht) gibt es ja aktuell noch nicht nicht und könnte über den oben vorgeschlagenen weg eingebaut werden. im detail muss man aber schauen ob und wie es mit den verschachtelten tabellen ausschaut bzw. wie man es genau anordnet.
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Reinerlein am 09 Mai 2017, 23:13:14
Hi Andre,

hmmm... wie geschrieben, hat hauptsächlich SummaryFn einen Einfluss, und ersetzt sowohl in der Raumansicht (dort die komplette Anzeige), als auch in der Detaildarstellung den Bereich mit Appeared.

Wenn ich beides setze, sieht es wie im Anhang aus...
In der Übersicht nur der Devicealias und mein Code, in der Detailansicht doppelte Anzeige.
Ich habe beides (also "FW_detailFn" und "FW_summaryFn") auf die gleiche Prozedur zeigen lassen...

Grüße
Reiner
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: rudolfkoenig am 10 Mai 2017, 14:11:16
ZitatGibt es irgendwie eine Möglichkeit, ohne eine eigene Kopie des Codes dieser Deviceanzeige auszukommen? vermutlich nicht.
Notfalls kan man $FW_RET merken, zuruecksetzen, FW_makeDeviceLine aufrufen, das benoetigte aus $FW_RET extrahieren und dann $FW_RET restaurieren. Ist nicht nett, aber ich habe nicht vor an dieser Stelle was zu aendern.

Zitatdas einzige modul das dies zur zeit verwendet ist 10_ZWave.pm. dafür hatte rudi es eingebaut.
DOIFtools verwendet es auch. Es ist dafuer da, dass in der Dateilansicht DetailFn _und_ die uebersichts-Zeile angezeigt werden. Das ZWave FW_detailFn zeigt ein Bild des Geraetes an und blendet passenden Hilfetext ein, falls man ein config-Befehl auswaehlt. Das eingefuegte Code verschiebt manche Elemente per JS, da sie sonst an falscher Stelle landen, evtl. reicht das auch in diesem Fall.

Wenn nicht, dann bitte das Problem genauer formulieren, ich verstehe es nicht genau.
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Reinerlein am 10 Mai 2017, 14:35:21
Hallo Rudi,

das Problem ist, dass ich in der Raumansicht die gleiche Darstellung wie in der Detailansicht haben möchte.

Wenn ich die "FW_detailFn" verwende und gleichzeitig "FW_deviceOverview" auf 1 setze, erhalte ich in der Detailansicht die korrekte Darstellung:
1. Zeile: "Normale" Devicedarstellung mit Icon, Aliasnamen, Status und WebCmds
2. Zeile darunter meine Cover-/Titeldarstellung

Das möchte ich auch gerne in der Raumansicht haben. Dort wird aber mit diesen Einstellungen nur die "normale" Devicedarstellung (1. Zeile in der Detailansicht) dargestellt.
Wenn ich jetzt aber die "FW_summaryFn" dazunehme, um, wie von Andre erwähnt, diesselbe Darstellung in der Raumübersicht zu haben, wird es wie im Post vor deiner Antwort dargestellt: Cover-/Titel doppelt in der Detailansicht, und eben keinerlei Darstellung des Status und der WebCmds.

Natürlich könnte ich den Code der Devicezustandsdarstellung aus FhemWeb kopieren. Das ist aber erstens kein schöner Stil, und zweitens (viel wichtiger) profitiert man nicht von Weiterentwicklungen in FhemWeb, und ich müsste das immer hinterherziehen...
Dein Vorschlag mit dem Zwischenspeichern und teilweise wiederherstellen/anpassen des HTML-Codes nach der Erzeugung durch ""FW_makeDeviceLine()" wäre auch dem Risiko unterworfen bei einer Fhemweb-Weiterentwicklung nicht mehr zu funktionieren...

Wenn das nicht so vorgesehen oder angedacht ist, dann lasse ich halt meine momentane Version mit automatisch miterzeugter ReadingsGroup für die Darstellung in der Raumansicht. Ich wollte halt die Menge an erzeugten (und damit auch durch den Anwender parallel zu verschiebenden) Devices reduzieren. Dafür bietet sich das ja eigentlich an...

Grüße
Reiner
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Markus Bloch am 10 Mai 2017, 18:10:17
Hallo Reiner,

schau dir mal FB_CALLLIST.pm und fhemweb_calllist.js an. Dort mache ich über eigene Datenstrukturen  via Longpoll ein Update der Anrufliste und füge neue Zeilen ein, lösche alte und aktualisiere die Inhalte.

Viele Grüße

Markus
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Reinerlein am 10 Mai 2017, 19:34:03
Hi Markus,

aber dabei zeigst du ja keine Standard-Devicezeile mehr an, oder?
Soweit ich das sehe, zeigst du nur eine eigene Zeile (abschaltbar) mit dem Devicenamen als Link zur Detaildarstellung. Das wäre natürlich kein Problem :)
Auch ist mein Cover-/Titelbereich schon fertig funktionsfähig mit longpoll...

Mir geht es noch um die bereits vorhandene Möglichkeit der Status- und WebCmds-Anzeige. Darüber kann der Anwender einen gewünschten Zustand mittels stateFormat einstellen, und ihm wichtige Kommandos als WebCmds anzeigen...
Diese Anzeige würde ich für den Anwender gerne auch noch abschaltbar machen (analog zu deinem no-Heading), damit der Anwender an der Stelle alle Freiheiten hat :)

Grüße
Reiner
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: rudolfkoenig am 11 Mai 2017, 11:27:10
Ich habe was gebaut, bin aber unsicher, ob dein Wunsch realisiert.

In der FHEMWEB Raumuebersicht wird $modules{TYPE}{FW_addDetailToSummary} abgefragt (d.h. die Variable setzt man in der InitializeFn. Falls gesetzt, dann wird zusaetzlich zu der bisher angezeigter Zeile auch eine Neue mit dem Inhalt von DetailFn angezeigt.
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Reinerlein am 11 Mai 2017, 15:12:07
Hi Rudi,

danke, dass sieht schon super aus.
Eine Kleinigkeit wäre noch: Kann man es irgendwie hinbekommen, dass man den Inhalt der DetailFn per colspan über die gesamte Tabellenbreite des Devices dargestellt bekommt?
In der Detailansicht ist das ja bereits so...

Momentan schiebt sich das in der linken der drei Spalten zusammen, obwohl rechts unterhalb der Statusanzeige und WebCmds alles frei ist (siehe Screenshot).

Danke schon mal...

Grüße
Reiner
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: rudolfkoenig am 12 Mai 2017, 08:12:21
Sorry, ist bei meinem Test (mit einem verstellten allowed) nicht aufgefallen. Habs geaendert.
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Reinerlein am 12 Mai 2017, 11:16:44
Hallo Rudi,

funktioniert super, Danke für die Lösung...

Grüße
Reiner
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Reinerlein am 12 Mai 2017, 17:58:25
Hi Rudi,

eine komische Darstellung in der Detailansicht ist mir noch aufgefallen:
In der Raumübersicht wird die DeviceLine einfach über meiner Ausgabe aus der DetailFn ausgegeben. Sauber getrennt.

In der Detailansicht (wo diesselbe DetailFn von mir verwendet wird) scheint die DeviceLine plötzlich Bestandteil meines Rahmens aus meiner DetailFn zu sein. Im Screenshot sieht man nochmal den Unterschied.
Oberhalb des Wortes "DeviceOverview" ist bereits ein Rahmen zu sehen, der anscheinend aus meiner DetailFn kommt. Dann folgt die DeviceLine mit einem eigenen Rahmen, ein kurzer Abstand, und dann mein restlicher Inhalt aus meiner DetailFn.

Aus dem Quellcode konnte ich nicht ganz erkennen, warum das so ist. Es scheint so, als würde die DeviceLine nachträglich hinter mein öffnendes <DIV>-Tag verschoben werden, obwohl der Code der DetailFn erst nach der DeviceLine aufgerufen wird.
In diesem Design hier ist es gar nicht sooo auffällig, im Dark-Style aber haben die Kisten einen Schatten, und dort sieht die reingeschobene DeviceLine-Kiste dann etwas "abgehoben" aus...

Kannst du dir, bzw. mir, das erklären?
Danke schon mal für deine Hilfe :)

Grüße
Reiner
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: rudolfkoenig am 14 Mai 2017, 21:14:32
ZitatKannst du dir, bzw. mir, das erklären?
Leider nicht, vermute aber die Ursache bei dem von deinem detailFn erstellten HTML.
Falls ich ein 96_allowed.pm zum Test prepariere mit
  $hash->{FW_addDetailToSummary} = 1;
  $hash->{FW_deviceOverview} = 1;

dann erhalte ich keinen Rahmen, siehe Anhang.
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: rudolfkoenig am 14 Mai 2017, 21:20:06
Korrektur: nach genauren Hinsehen hat mein preparierter allowed das gleiche Problem, nur dein DetailFn liefert einen zusaetzlichen Rahmen, faellt also eher auf. In der Raum-Uebersicht wird ein zusaetzlicher Rahmen fuer alle Geraete eines Typs oder Gruppe gemalt, damit man weiss, dass sie zusammengehoeren. In der Detail-Ansicht ist das nicht der Fall. Bin unsicher, wie ich dein Problem ohne Aufschrei an anderen Stelle loesen soll.
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Reinerlein am 15 Mai 2017, 09:33:44
Hi Rudi,

danke für das Probieren. Ich habe auch noch mal den erzeugten Quelltext durchgesehen, und dabei ist mir aufgefallen, dass über dem Device-Abschnitt eine TD geöffnet wird, und erst weit hinten (wenn überhaupt) wieder geschlossen wird.

Wenn ich jetzt in der "FW_doDetail" im Bereich des Aufrufs der DetailFN vor der Ausgabe des DetailFn-Codes diese Zelle erst schließe, die Zeile beende, eine neue Zeile und Zelle öffne, dann funktioniert die Ausgabe bei mir.

Also so:

  if($modules{$t}{FW_detailFn}) {
    no strict "refs";
    my $txt = &{$modules{$t}{FW_detailFn}}($FW_wname, $d, $FW_room);
    FW_pO "</td></tr><tr><td>$txt<br>" if(defined($txt));
    use strict "refs";
  }
In den von mir überprüften Detailseiten sieht damit immer noch alles normal aus. Da ja auch eine neue Zeile und eine neue "<td>" eröffnet wird, ist das eigentlich auch zu erwarten...

Vielleicht kannst du das auch bestätigen, dann wäre das vielleicht eine einigermaßen transparente Lösung für dieses Thema.

Danke schon mal...

Grüße
Reiner
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Reinerlein am 16 Mai 2017, 10:53:31
Hi Rudi,

was einem Nutzer meines Moduls aufgefallen ist, ist eine in der Raumansicht immer noch vorhandene Zusammenschiebung nach Links, wenn man mehrere WebCmds hat.

In meinem Beispiel (weil mein Modul das Device so erzeugt) hatte ich immer nur ein WebCmd ("Volume"-Slider), wenn man aber mehrere Kommandos hat, wird wieder gedrückt.
Das liegt daran, dass du für die DetailFn-Darstellung ein colspan="3" eingesetzt hast, und jedes WebCmd offenbar seine eigene TD bekommt.
Nach ein bißchen Googeln gibt es wohl leider keinen offiziellen Platzhalter für "colspan über alle folgenden Spalten", allerdings motzt wohl kein Browser über eine zu große Zahl.
Wenn man dort also z.B. "50" einträgt, funktioniert das für bis zu 50 WebCmds :)

Alternativ müssten die WebCmds kurz gezählt werden, um eine genaue Angabe machen zu können...

Grüße
Reiner
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: rudolfkoenig am 17 Mai 2017, 12:49:29
ZitatWenn man dort also z.B. "50" einträgt, funktioniert das für bis zu 50 WebCmds
Habe 50 eingetragen.

Zitat
Wenn ich jetzt in der "FW_doDetail" im Bereich des Aufrufs der DetailFN vor der Ausgabe des DetailFn-Codes diese Zelle erst schließe, die Zeile beende, eine neue Zeile und Zelle öffne, dann funktioniert die Ausgabe bei mir.
Ich habe deine Aenderung kurz getestet und uebernommen.
Titel: Antw:Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile
Beitrag von: Reinerlein am 17 Mai 2017, 14:02:56
Hi Rudi,

danke für die Anpassungen, sieht super aus...

Grüße
Reiner