[gelöst] Floorplan, eigene Icons die 1000ste? (mit Longpoll)

Begonnen von Rince, 04 Januar 2014, 18:09:49

Vorheriges Thema - Nächstes Thema

Rince

Hi,

ich habe jetzt ziemlich lange damit zugebracht, den Installation Guide zu schmökern, den Forumsserver mit Suchanfragen zu belasten, und ich komme leider nicht weiter:

Ich habe ein Presence auf meinen Fernseher.

wz_Fernseher

Attributes
eventMap present:an absent:aus
fp_Grundriss_OG_Tag 540,900,0,
fp_Grundriss_OG_Tag.image images/default/fp_Icons_1024/wz_Fernseher.{state}.png
room Wohnzimmer


Die Icons:

/opt/fhem/www/images/default/fp_Icons_1024/wz_Fernseher.an.png
/opt/fhem/www/images/default/fp_Icons_1024/wz_Fernseher.aus.png


Der Eintrag in der fhem.cfg
attr global userattr DbLogExclude devStateIcon devStateStyle fp_Grundriss_OG_Tag fp_Grundriss_OG_Tag.image icon lightSceneParamsToSave sortby webCmd

Leider zeigt der Floorplan keine Bildchen für den Fernseher an :(
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

fiedel

Hi Rince,

ich überblicke gerade nicht, was dein Fehler ist. Aber schnapp dir mal Firefox, installiere das AddOn "Firebug", starte es dann mit Taste "F12", wenn du auf deiner FP- Seite bist. Dann klickst du auf das Symbol links direkt neben dem Käfer (Element untersuchen) und gehst / klickst mit der Maus auf dein Gerät - also da wo das Icon sein sollte. Dann bekommst du angezeigt, was der Floorplan da "sieht" und was er ggf. anderes erwartet.

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

UliM

Hi,
bin nicht ganz sicher - evtl fehlt ein slash?
fp_Grundriss_OG_Tag.image images/default/fp_Icons_1024/wz_Fernseher.{state}.png
fp_Grundriss_OG_Tag.image /images/default/fp_Icons_1024/wz_Fernseher.{state}.png
=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Rince

#3
Hm,

danke schön,
besser, aber noch nicht ganz gut:



Der Quelltext ohne vorheriges / sieht so aus:

<div style="position:absolute; top:416px; left:860px;" id="div-wz_Fernseher">
<form method="get" action="/fhem/floorplan/Grundriss_OG_Tag/wz_Fernseher" autocomplete="off">
<table class="PRESENCE fp_Grundriss_OG_Tag" id="table-wz_Fernseher" align="center">
<tr class="devicestate fp_Grundriss_OG_Tag" id="wz_Fernseher">
<td informId="wz_Fernseher" colspan="0"><div id="wz_Fernseher"  class="col2">an</div>
</td></tr>
</table></form>
</div>


Mit Ullis vorangestelltem / sieht er so aus:

<div style="position:absolute; top:416px; left:860px;" id="div-wz_Fernseher">
<form method="get" action="/fhem/floorplan/Grundriss_OG_Tag/wz_Fernseher" autocomplete="off">
<table class="PRESENCE fp_Grundriss_OG_Tag" id="table-wz_Fernseher" align="center">
<tr class="devicestate fp_Grundriss_OG_Tag" id="wz_Fernseher">
<td informId="wz_Fernseher" colspan="0"><div id="wz_Fernseher"  class="col2"><img class=' wz_Fernseher_an' src="/fhem/images/default//images/default/fp_Icons_1024/wz_Fernseher.present.png"></div>
</td></tr>
</table></form>
</div>


Man beachte in der src= die 2 // zwischen default und images.
default//images

Also ein / zu viel. Aber ohne den / , ist die Zeile quasi ganz weg.

Was mir noch auffällt:
Wenn ich die Variante mit den // nehme, und die Bilder in /images/default lege (und neustarte), aktualisiert sich der Floorplan tatsächlich, allerdings habe ich dann auch das unsinnige Icon in der normalen Weboberfläche, wo es nicht hingehört. (vor allem, ich brauche pro Gerät ja für jede Auflösung ein anderes Icon)

Aber ich denke,
wir sind auf einem guten Weg :)



Nachtrag:
Wenn ich im Seitenquelltext den Link anklicke, dann öffnet sich eine Seite mit meinem Icon.
src="/fhem/images/default//fp_Icons_1024/wz_Fernseher.present.png"></div>
Attributes dazu:
fp_Grundriss_OG_Tag.image /fp_Icons_1024/wz_Fernseher.{state}.png
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

fiedel

ZitatWas mir noch auffällt:
Wenn ich die Variante mit den // nehme, und die Bilder in /images/default lege (und neustarte), aktualisiert sich der Floorplan tatsächlich, allerdings habe ich dann auch das unsinnige Icon in der normalen Weboberfläche, wo es nicht hingehört. (vor allem, ich brauche pro Gerät ja für jede Auflösung ein anderes Icon)

Dafür gibt es eine "logistische" Lösung ;) :  Du legst für jeden Floorplan einen eigenen Icon- Ordner an und weist ihn zu. Dann weden für diesen FP nur die Icons aus diesem Verzeichnis verwendet.

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Rince

Genau deshalb habe ich ja den Ordner fp_Icons_1024 angelegt.

Und die Pfadangaben dahin gelegt.

Aber FHEM ignoriert meine Pfadangaben und greift auf den Standardordner zu.
Und den Eintrag bei den userattrs den man setzten muss dafür, bilde ich mir auch ein richtig gesetzt zu haben. Siehe mein 1. Posting :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

UliM

Hi,
wie's ohne .image geht steht hier: http://forum.fhem.de/index.php/topic,17775.msg121391.html#msg121391
=8-)
PS: Ich bastel grad an einer schöneren Lösung als mit .image - tut aber noch nicht so wie ich mir das vorstelle...
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

fiedel

#7
Mach doch mal ein aktuelles Update! Rudi hat vor Kurzem einen Fix dazu gemacht. Der betraf genau dieses Verhalten: Wenn das Icon, welches fälschlicherweise angezeigt wird, nicht in dem FP-Icon-Ordner enthalten ist, überschneiden sich globale Variablen.

Gruß

Frank

Edit: Genau, da wo Ulis Link hinzeigt, steht das was ich meine.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

UliM

@Rudi:
Hier holt uns die Trennung FHEMWEB vs FLOORPLAN wieder ein...
Am schönsten wäre es, wenn man den iconPath je floorplan setzen könnte. Ist dieser gesetzt, wird der genommen statt dem, der auf der fhemweb-Instanz gesetzt ist.
Grund: Innerhlab floorplan gibt's ein Menü, um zwischen den floorplans zu wechseln. Diese bewegen sich alle innerhalb derselben FHEMWEB-Instanz. Wenn man nun unterschiedliche iconPath je floorplan haben will, kann man sinnvoll nu noch über broswer-favorites wechseln statt über das floorplan-Menü.

Zur Ablage sehe ich zwei sinnvolle Möglichkeiten:
a) floorplan bekommt ein Attribut fp_iconPath, der Vorrang vor dem iconPath der fhemweb-Instanz bekommt
b) die fhemweb- Instanz hat bereits das userattr fp_<floorplanname>, dieses könnte man auf der FHEMWEB-Instanz ale floorplan-spezifischen iconPath missbrauchen.

Ich habs mal in fhemweb eingebaut ab Zeile 411.

  $FW_sp = AttrVal($FW_wname, "stylesheetPrefix", "");
  $FW_ss = ($FW_sp =~ m/smallscreen/);
  $FW_tp = ($FW_sp =~ m/smallscreen|touchpad/);
  @FW_iconDirs = grep { $_ } split(":", AttrVal($FW_wname, "iconPath",
                                       "$FW_sp:default:fhemSVG:openautomation"));# if ($FW_iconDirs[0] eq "");
  ## floorplan-specific iconpath
  my @args = split ("/",$arg);
  if ($arg =~ m/\/floorplan\/(\w*)/ && $args[3] && $args[3] !~ m/\?/ && AttrVal($FW_wname, "fp_$args[3]",-1)) {
   Log 1, "FW414; URL is $arg, floorplan-name is $args[3]";
   @FW_iconDirs = grep { $_ } split(":", AttrVal($FW_wname, "fp_$args[3]",
                                         AttrVal($FW_wname, "iconPath",
                                             "$FW_sp:default:fhemSVG:openautomation")));
  }
  Log 1, "FW_iconDirs = $FW_iconDirs[0], $FW_iconDirs[1], $FW_iconDirs[2], $FW_iconDirs[3]  ($arg)";
  # /icons/... => current state of ...


Das funktioniert für den ersten Seitenaufbau eines flooplans. Problem ist, dass @FW_iconDirs bei jedem Aufruf des Webservers ( FW_devState() ) neu gebaut wird. Prüfen auf den URL-Teil /floorplan/ funktioniert für den ersten Aufruf, sobald jedoch weitere icons bestellt werden, steht kein /floorplan/ mehr in der URL -> es wird wieder der generelle @FW_iconDirs genommen. Offenbar wird nach einigen Sekunden die ganze Seite (via longpoll) frisch mit icons versorgt, dabei werden also wieder die fhemweb-Standard-icons hergenommen.
Da @FW_iconDirs nicht global ist, kann ich's von floorplan aus nicht überbügeln.

Hast Du ne Idee, wie man das einbauen könnte?

LG, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Rince

Also so als völlig ahnungsloser Mensch fände ich folgendes Prozedere schlau:
Bei jedem Floorplan ein attr definieren, der zu den dort zu verwendenden Icons zeigt (also die Icon Pfadangabe)

Ich fände es auch akzeptabel, wenn man alle Standardicons dort ebenfalls hinkopieren muss.

Dann könnte man evtl. die global userattrs völlig ignorieren, und der Floorplan kann bzw. muss sich halt selber um die Icons kümmern. Kollidiert dafür aber nicht mit irgendwas.

Für jedes Icon eine eigene Webinstanz zu starten, halte ich für unpraktikabel. 2 Instanzen pro Gerät (on off), und das multipliziert mit der Anzahl der verschiedenen Auflösungen.

Würde bei mir bedeuten:
6 eigene Icons => 12 Instanzen
5 verschiedene Auflösungen

Da käme ich auf 60 Instanzen?

5 x ein eigenes Iconverzeichnis zu benutzen klingt da einfacher.


Oder rede ich grad völlig am Problem vorbei?
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

UliM

Zitat von: Rince am 05 Januar 2014, 11:36:10
Würde bei mir bedeuten:
6 eigene Icons => 12 Instanzen
5 verschiedene Auflösungen
Da käme ich auf 60 Instanzen?
Oder rede ich grad völlig am Problem vorbei?
Hi,
fast :)
6 eigene icons -> 12 Instanzen = nein. Nur eine Instanz mit iconPath auf einen speziellen Ordner, in dem nur die icons liegen, die speziell für diesen floorplan gelten sollen. Alle weiteren icons können nach wie vor aus images/default gezogen werrden, siehe verlinktes Beispiel oben.
5 verschiedene Auflösungen - das wären dann 5 Instanzen, da 5 unterschiedliche Ico-Sätze = 5 ordner benötigt werden.

Das geht ja schon jetzt so.
Gerne würde ich erreichen, das man den iconPath direkt zu einem floorplan assignen kann und nicht zu der fhemweb-Instanz - bleibt aber abzuwarten ob das geht.

=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Rince

Du meinst diesen Post?

http://forum.fhem.de/index.php/topic,17775.msg121391.html#msg121391

Kann wer das bitte als Codebeispiel posten und evtl 1-2 Sätze zur Erläuterung schreiben?
Ich kann es nicht nachvollziehen.
Das angesprochene Update habe ich gezogen.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

UliM

Eine spezielle FHEMWEB-INstanz anlegen, die mittels IconPath auf den Ordner zeigt, in dem die Sondericons liegen:
define MitFloorplanIcons FHEMWEB 8090 global
attr MitFloorplanIcons iconpath FloorplanSpezialIcons:default
Mehr code isses nich :)
Und dann im Browser aufrufen mit http://<ip>:8090

Dazu extra Ordner in www/images/FloorplanSpezialIcons mit den bedonseren Icons, welche den Device Namen besitzen "Licht_Decke.on"; "Licht_Decke.off" etc.
set MitFloorplanIcons rereadicons nicht vergessen :)

=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Rince

?
Hm,

habe es mal versucht über die Befehlszeile einzugeben:
define OG_Grundriss_1024 FHEMWEB 8090 global
Finde nun unter FHEMWEB
=> soweit ok

Nun:
attr OG_Grundriss_1024 iconpath fp_Icons_1024:default

OG_Grundriss_1024: unknown attribute iconpath, choose one of verbose:0,1,2,3,4,5 room group comment alias eventMap userReadings CORS:0,1 HTTPS:1,0 SVGcache:1,0 allowfrom basicAuth basicAuthMsg column endPlotNow:1,0 endPlotToday:1,0 fwcompress:0,1 hiddengroup hiddenroom iconPath longpoll:0,1 longpollSVG:1,0 menuEntries plotfork:1,0 plotmode:gnuplot,gnuplot-scroll,SVG plotsize nrAxis redirectCmds:0,1 refresh reverseLogs:0,1 roomIcons sortRooms smallscreen:unused stylesheetPrefix touchpad:unused webname DbLogExclude devStateIcon devStateStyle fp_Grundriss_OG_Tag fp_Grundriss_OG_Tag.image icon lightSceneParamsToSave sortby webCmd or use attr global userattr iconpath


???
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

UliM

Zitat von: Rince am 05 Januar 2014, 15:18:36

OG_Grundriss_1024: unknown attribute iconpath

Da gehört ein großes P rein... iconPath :)
Mit dem Attribut-Dropdown im Dedtailscreen wär das nicht passiert ;-)
=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.