Eigene FW_detailFn und FW_summaryFn zusammen mit der Standard-Devicezeile

Begonnen von Reinerlein, 09 Mai 2017, 21:42:36

Vorheriges Thema - Nächstes Thema

Reinerlein

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

justme1968

@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?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Reinerlein

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

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Reinerlein

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

rudolfkoenig

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.

Reinerlein

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

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Reinerlein

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

rudolfkoenig

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.

Reinerlein

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

rudolfkoenig

Sorry, ist bei meinem Test (mit einem verstellten allowed) nicht aufgefallen. Habs geaendert.

Reinerlein

Hallo Rudi,

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

Grüße
Reiner

Reinerlein

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

rudolfkoenig

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.