Ich habe im FHEM eine ReadingsGroup mit roten und grünen Kreisen um den Status meiner LAN-Devices anzuzeigen.
Die Icons werden im ReadingsGroup Widget leider offenbar nicht erkannt. Ich kriege für die Bildchen folgenden Fehler:
File not found: ./www/tablet//fhem/images/default/10px-kreis-rot.png
Muss ich die Bilder noch woanders hin kopieren?
Hi,
der doppelte Schrägstrich ist etwas seltsam. Könntest Du mal ein list Deiner readingsGroup liefern?
Gruß,
Thorsten
List NetzwerkListe sieht folgendermassen aus:
Internals:
DEF <>,<Nr>,<IP-Adresse>,<Status>,<Name>
Netzwerk:@4,#1_ip,<#1>,#1_state,(.*)_alias
FUUID 5c4779c1-f33f-7eb8-b627-b0f0ff3cf7bcd66f
NAME NetzwerkListe
NR 85
NTFY_ORDER 50-NetzwerkListe
STATE Initialized
TYPE readingsGroup
mayBeVisible 1
CONTENT:
Netzwerk 1
CONTENT2:
DEVICES:
ARRAY(0x6b5d1c0)
ARRAY(0x6b610d8)
fhem:
lastDefChange 1
last_update 1549309680.41937
groupedList:
<br2>
192.168.1.1_ip
<192.168.1.1>
192.168.1.1_state
192.168.1.1_alias
<br2>
192.168.1.28_ip
<192.168.1.28>
192.168.1.28_state
192.168.1.28_alias
<br2> .... etc.
<br2>
192.168.1.254_ip
<192.168.1.254>
192.168.1.254_state
192.168.1.254_alias
helper:
DEF
valueFormat { my $ipAddr = substr($READING,0,index($READING,"_"));
#Icon für #1_state.absent Spalte 'onl'
return("<img src='./fhem/images/default/10px-kreis-rot.png' alt='absent'>") if($VALUE eq "absent");
#Icon für #1_state.present Spalte 'onl'
return("<img src='./fhem/images/default/10px-kreis-gruen.png' alt='present'>") if($VALUE eq "present");
#Spalte 'Nr' zur Sortierung aus der IP extrahieren
return(substr($VALUE,rindex($VALUE,".")+1)) if(substr($READING,rindex($READING,"_")) eq "_ip");
return("<a url='http://".$ipAddr."' onclick='window.open(\"http://".$ipAddr."\"); return false;'>".$VALUE."</a>") if(substr(ReadingsVal($DEVICE,$READING,""),rindex(ReadingsVal($DEVICE,$READING,""),"-")+1) eq "80");
return("<a url='https://".$ipAddr."' onclick='window.open(\"https://".$ipAddr."\"); return false;'>".$VALUE."</a>") if(substr(ReadingsVal($DEVICE,$READING,""),rindex(ReadingsVal($DEVICE,$READING,""),"-")+1) eq "443");
#Anderenfalls soll das valueFormat leer bleiben bzw. nachstehenden Inhalt verwenden
return("");
}
valueStyle {$READING =~ m/(.+)_/;
my $state = ReadingsVal($DEVICE, $1."_state", "NA");
my $style = "";
return('style="text-align: right; '.$style.'"') if($state eq "present" && $READING =~ m/_uptime/);
return('style="color: #bfbfbf; text-align: right; '.$style.'"') if($state eq "absent" && $READING =~ m/_uptime/);
return('style="'.$style.'"') if($state eq "present");
return('style="color: #bfbfbf; '.$style.'"') if($state eq "absent");
}
cellStyle:
c:1 style="text-align:right"
c:3 style="text-align:center"
c:4 style="text-align:left"
positions:
Netzwerk.192.168.1.114_alias 21:4
Netzwerk.192.168.1.114_ip 21:1
Netzwerk.192.168.1.114_state 21:3
Netzwerk.192.168.1.116_alias 22:4
Netzwerk.192.168.1.116_ip 22:1 .... etc.
Netzwerk.192.168.1.88_state 19:3
Netzwerk.192.168.1.90_alias 20:4
Netzwerk.192.168.1.90_ip 20:1
Netzwerk.192.168.1.90_state 20:3
values:
formated:
undef
ARRAY(0x6d1ec68)
undef
ARRAY(0x6d9f8e0)
ARRAY(0x6c9bdb0)
orig:
undef
ARRAY(0x6cfce60)
undef
ARRAY(0x6cea160)
ARRAY(0x6d10390)
prefixsuffix:
undef
ARRAY(0x6d007d8)
undef
ARRAY(0x6d9dbb8)
ARRAY(0x6c199a8)
Attributes:
cellStyle { "c:1" => 'style="text-align:right"',"c:3" => 'style="text-align:center"',"c:4" => 'style="text-align:left"' }
icon it_network
room 92 Intranet
sortColumn 1
sortFn rgSortIP
valueFormat { my $ipAddr = substr($READING,0,index($READING,"_"));
#Icon für #1_state.absent Spalte 'onl'
return("<img src='./fhem/images/default/10px-kreis-rot.png' alt='absent'>") if($VALUE eq "absent");
#Icon für #1_state.present Spalte 'onl'
return("<img src='./fhem/images/default/10px-kreis-gruen.png' alt='present'>") if($VALUE eq "present");
#Spalte 'Nr' zur Sortierung aus der IP extrahieren
return(substr($VALUE,rindex($VALUE,".")+1)) if(substr($READING,rindex($READING,"_")) eq "_ip");
return("<a url='http://".$ipAddr."' onclick='window.open(\"http://".$ipAddr."\"); return false;'>".$VALUE."</a>") if(substr(ReadingsVal($DEVICE,$READING,""),rindex(ReadingsVal($DEVICE,$READING,""),"-")+1) eq "80");
return("<a url='https://".$ipAddr."' onclick='window.open(\"https://".$ipAddr."\"); return false;'>".$VALUE."</a>") if(substr(ReadingsVal($DEVICE,$READING,""),rindex(ReadingsVal($DEVICE,$READING,""),"-")+1) eq "443");
#Anderenfalls soll das valueFormat leer bleiben bzw. nachstehenden Inhalt verwenden
return("");
}
valueStyle {$READING =~ m/(.+)_/;
my $state = ReadingsVal($DEVICE, $1."_state", "NA");
my $style = "";
return('style="text-align: right; '.$style.'"') if($state eq "present" && $READING =~ m/_uptime/);
return('style="color: #bfbfbf; text-align: right; '.$style.'"') if($state eq "absent" && $READING =~ m/_uptime/);
return('style="'.$style.'"') if($state eq "present");
return('style="color: #bfbfbf; '.$style.'"') if($state eq "absent");
}
/code]
Hi,
ich hab das grad mal ausprobiert. Das ist im Widget selbst eher schwierig allgemein zu lösen, aber Du kannst einfach absolute Pfade zu den Bildern verwenden. D.h. folgendes funktioniert bei mir sowohl in FHEMWEB als auch in FUIP (und sollte damit auch in Tablet UI ohne FUIP gehen):
return("<img src='/fhem/images/default/10px-kreis-rot.png' alt='absent'>") if($VALUE eq "absent");
Also einfach den Punkt vor "/fhem..." weglassen.
Gruß,
Thorsten
Das war's ... alles ok jetzt.
Merci