Hallo zusammen.
Ich wollte eine Werte von div. Sensoren als Balkendiagramm darstellen.
Habe schon folgende Definition für einen SatReceiver, glaube aus der FHEMWiki, in die 99 Utils.pm eingefügt.
sub Balkenanzeige($)
{
# Zuweisung der übergebenen Variablen
my ($val) = @_;
# Konfiguration des maximal übergebenen Werts (hier wäre der höchste zu erwartende Wert = 3)
my $maxValue = 3;
# Normalisierung auf 100%-Wert
my $percent = $val / $maxValue * 100;
# Definition des valueStyles
my $stylestring = 'style="'.
'width: 200px; '.
'text-align:center; '.
'border: 1px solid #ccc ;'.
'background-image: -webkit-linear-gradient(left,red '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); '.
'background-image: -moz-linear-gradient(left,red '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); '.
'background-image: -ms-linear-gradient(left,red '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); '.
'background-image: -o-linear-gradient(left,red '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); '.
'background-image: linear-gradient(left,red '.$percent.'%, rgba(0,0,0,0) '.$percent.'%);"';
# Rückgabe des definierten Strings
return $stylestring;
}
Wollte den Werte von einen UV Sensor als Balkendiagramm darstellen lassen
Internals:
CHANGED
DEF 192.168.2.145 80 espBridge multisens_UV
ESP_BUILD 20000
ESP_BUILD_GIT (custom)
ESP_BUILD_NOTES - Mega
ESP_NODE_TYPE_ID 17: ESP Easy Mega
ESP_SLEEP 0
ESP_UNIT 0
ESP_VERSION 2
HOST 192.168.2.145
IDENT multisens_UV
INTERVAL 300
IODev espBridge
LASTInputDev espBridge
MSGCNT 18
NAME ESPEasy_multisens_UV
NOTIFYDEV global
NR 457
NTFY_ORDER 50-ESPEasy_multisens_UV
PORT 80
STATE UV: 2.00
SUBTYPE device
TYPE ESPEasy
VERSION 1.22
espBridge_MSGCNT 18
espBridge_TIME 2017-08-06 12:16:19
READINGS:
2017-08-06 12:16:19 Index 2.00
2017-08-06 12:16:19 UV 2.00
2017-08-06 12:02:25 presence present
2017-08-06 12:16:19 state UV: 2.00
helper:
fpc 1502014319
pm:
Encode 1
JSON 1
received:
UV 1502014579
Attributes:
IODev espBridge
Interval 300
devStateIcon {balken()}
event-min-interval UV:900
event-on-change-reading UV:0.25
group ESPEasy Device
presenceCheck 1
readingSwitchText 1
room 10_Draussen,99_Wetter,ESPEasy
setState 3
userReadings Index { sprintf("%.2f",ReadingsVal("ESPEasy_multisens_UV","UV",0));;;;}
Habe dann aus folgende Thread
https://forum.fhem.de/index.php/topic,11609.msg68115/topicseen.html#msg68115 (https://forum.fhem.de/index.php/topic,11609.msg68115/topicseen.html#msg68115)
Den Code in die 99_myutils.pm eingefügt.
sub balken()
{
my $p=int(ReadingsVal("ESPEasy_multisens_UV","UV",0)*2.62);
return '<div align="bottom" style="width:68px;height:'.$p.'px;margin-top:'.(100-$p).'px;background-color:#4F81BD"></div>';
}
Folgende Definition des defStateIcon
devStateIcon {balken()}
Wenn Ich die Definition in {Balkenanzeige()} umändere, dann schmiert FHEM komplett ab.
Folgende LOG Einträge !!!
2017.08.06 12:10:12 1: devStateIcon ESPEasy_multisens_UV: Undefined subroutine &main::balkenanzeige called at (eval 909) line 1.
Unmatched ( in regex; marked by <-- HERE in m/^-webkit-linear-gradient( <-- HERE left,red$/ at ./FHEM/01_FHEMWEB.pm line 2677.
2017.08.06 12:10:29 1: BlockingInformParent (BlockingStart): Can't connect to localhost:7072: IO::Socket::INET: connect: Verbindungsaufbau abgelehnt
2017.08.06 12:10:29 1: BlockingInformParent (PRESENCE_ProcessLocalScan): Can't connect to localhost:7072: IO::Socket::INET: connect: Verbindungsaufbau abgelehnt
Danach ließ sich FHEM nur noch über die Konsole manuell starten bzw. durch einen Reboot des PI.
Sollte dieser Thread hier an falscher Stellen stehen, bitte an die richtige Stelle verschieben !
Gruß und Danke
Sascha
Das von Balkenanzeige() zurueckgelieferte String entspricht nicht dem, was FHEMWEB erwartet, im commandref (https://fhem.de/commandref.html#devStateIcon) steht, was erwartet wird.
Dass FHEM danach nicht automatisch gestartet wird, ist ein "Problem" des Startskripts.