Hallo,
ich bin verweifelt auf der Suche nach einer Lösung um den Devicenamen und das Statussymbol nebeneinander angezeigt zu bekommen.
Im Grunde soll die Anzeige wie bei Stil 1 sein, nur nicht untereinander sonder halt nebeneinander Ich habe schon verschiedenes in der 95_Floorplan.pm probiert aber habe bisher keine Lösung finden können. Hier mal der entsprechende Ausschnitt aus der 95_Floorplan.pm:
# start device-specific table
FW_pO "\n<div style=\"position:absolute; top:".$top."px; left:".$left."px;\" id=\"div-$d\">";
FW_pO "<form method=\"$FW_formmethod\" action=\"$FW_ME/floorplan/$FP_name/$d\" autocomplete=\"off\">";
FW_pO " <table class=\"$type fp_$FP_name\" id=\"table-$d\" align=\"center\">"; # Main table per device
my ($allSets, $cmdlist, $txt) = FW_devState($d, "");
$txt = ReadingsVal($d, $text, "Undefined Reading $d-<b>$text</b>") if ($style == 3 || $style == 6); # Style3+6 = DeviceReading given in $text
my $cols = ($cmdlist ? (split(":", $cmdlist)) : 0); # Need command-count for colspan of devicename+state
########################
# Device-name per device
if ($style gt 0 && $style ne 5 && $style ne 7 && $style ne 8) {
FW_pO " <tr class=\"devicename fp_$FP_name\" id=\"$d-devicename\">"; # For css: class=devicename, id=<devicename>-devicename
my $devName = "";
if ($style == 3 || $style == 6) {
$devName = $text2 ? $text2 : ""; # Style 3 = Reading - use last part of comma-separated description
} else {
$devName = ($text ? $text : AttrVal($d, "alias", $d));
}
if ($style == 4 && $txt =~ /T: ([\-0-9\.]+)[ ]+H: ([\-0-9\.]+).*/) { # S300TH-specific
$txt = "<span class='fp_tempvalue' display=inline><span informId=$d-temperature>".$1."</span>°C</span><BR><span class='fp_humvalue'><span informId=$d-humidity>".$2."</span>%</span>";
}
FW_pO "<td colspan=\"$cols\">";
FW_pO "$devName" ;
FW_pO "</td></tr>";
}
########################
# Device-state per device
# FW_pO "<tr class=\"devicestate fp_$FP_name\" id=\"$d\">"; # For css: class=devicestate, id=devicename
if ($style != 7 && $style != 8) {
if ($style == 3 || $style == 6) {
FW_pO "<tr class=\"devicereading fp_$FP_name\" id=\"$d"."-$text\">"; # For css: class=devicereading, id=<devicename>-<reading>
} else {
FW_pO "<tr class=\"devicestate fp_$FP_name\" id=\"$d\">"; # For css: class=devicestate, id=<devicename>
}
$txt =~ s/measured-temp: ([\.\d]*) \(Celsius\)/$1/; # format FHT-temperature
### use device-specific icons according to userattr fp_image or fp_<floorplan>.image
my $fp_image = AttrVal("$d", "fp_image", undef); # floorplan-independent icon
my $fp_fpimage = AttrVal("$d","fp_$FP_name".".image", undef); # floorplan-dependent icon
if ($fp_image) {
my $state = ReadingsVal($d, "state", undef);
$fp_image =~ s/\{state\}/$state/; # replace {state} by actual device-status
$txt =~ s/\<img\ src\=\"(.*)\"/\<img\ src\=\"\/fhem\/icons\/$fp_image\"/; # replace icon-link in html
$txt =~ s/\<img\ (.*) src\=\"(.*)\"/\<img\ $1 src\=\"\/fhem\/images\/default\/$fp_image\"/; # replace icon-link in html (new)
}
if ($fp_fpimage) {
my $state = ReadingsVal($d, "state", undef);
$fp_fpimage =~ s/\{state\}/$state/; # replace {state} by actual device-status
$txt =~ s/\<img\ src\=\"(.*)\"/\<img\ src\=\"\/fhem\/icons\/$fp_fpimage\"/; # replace icon-link in html
$txt =~ s/\<img\ (.*) src\=\"(.*)\"/\<img\ $1 src\=\"\/fhem\/images\/default\/$fp_fpimage\"/; # replace icon-link in html (new)
}
if ($style == 3 || $style == 6) {
FW_pO "<td><div informId=\"$d-$text\">$txt</div>"; # reading
} elsif ($style == 4) {
FW_pO "<td>$txt"; # state style4
} else {
FW_pO "<td informId=\"$d\" colspan=\"$cols\">$txt"; # state
}
FW_pO "</td></tr>";
}
if ($style == 6) { # add ReadingsTimeStamp for style 6
$txt="";
FW_pO "<tr class=\"devicetimestamp fp_$FP_name\" id=\"$d-devicetimestamp\">"; # For css: class=devicetimestamp, id=<devicename>-devicetimestamp
$txt = ReadingsTimestamp($d, $text, "Undefined Reading $d-<b>$text</b>"); # Style3+6 = DeviceReading given in $text
# FW_pO "<td><div colspan=\"$cols\" informId=\"$d-$text-ts\">$txt</div></td>";
FW_pO "<td><div colspan=\"$cols\" informId=\"$d-$text-ts\">$txt</div>";
FW_pO "</td></tr>";
}
if ($style == 8) {
my $image = "";
my $re = qr/href=["']([^"']+)["']/i;
my @links = ($txt =~ m{ $re }gx);
$re = qr/<img.*src="(.+)"/i;
my @urls = ($txt =~ m{ $re }gx);
if (@urls[0]) {
$image = "<img src=\"$urls[0]\">";
} else {
@urls=();
$re = qr/<svg(.+)<\/svg>/i;
@urls = ($txt =~ m{ $re }gx);
$image = "<svg$urls[0]</svg>";
}
FW_pO "<tr><td><div class=\"Style8\" id=\"$d\" onClick=\"location.href='$links[0]'\"><table><tr><td class=\"Style8Text\">$text</td><td class=\"Style8Image\">$image</td></tr></table></div></td></tr>";
}
Vielleicht kann mir ja einer helfen.
Gruß, Sascha
Hi Sascha,
ich kann mir das gerade nicht im Detail ansehen, aber so wie ich das sehe wird hier eine HTML Tabelle mit jeweils Zeilen für Name und Status aufgebaut. Diese Werte müssten in eine Zeile geschrieben werden. Ich fürchte aber, das wird ein Gefummel mit den ganzen IFs, um die Spalten dann wieder richtig sortiert zu bekommen (wenn du möchtest, dass weiterhin alle Styles korrekt funktionieren)
FW_pO "$devName" ;
FW_pO "</td></tr>";
}
########################
# Device-state per device
# FW_pO "<tr class=\"devicestate fp_$FP_name\" id=\"$d\">";
Grüße,
Oli
die anderen Styles wären mir egal, die brauche ich nicht. Ich habe selbst schon an verschiendenen stellen das tr bzw. /tr weggelassen um die neue Tabellenzeile für den Status zu vermeiden. Aber da fehlt es mir an höheren HTML-Kenntnissen, bzw. Routine.
In einem anderen Forumsbeitrag hat jemand zwar einen Style entworfen wo Name und Status nebeneinander sind, allerdings ist hierbei das Statussymbol nicht anklickbar um das Gerät an/auszuschalten. Dieser Style ist in dem obigen Code als Style 8 enthalten.
Gruß, Sascha
Hi,
das war ich - ich versuche das mit dem nicht anklickbaren Icon mal im anderen Thread zu klären.
Hier funktioniert das ganze...
Gruß Andreas