Ich versuche gerade den Zustand meiner USV mit einem Symbol anzuzeigen. Die USV hängt an einer DiskStation und ist über NUT eingebunden. Geliefert werden folgende Statusmeldungen (im Reading "state"):
- ACCESS-DENIED (wenn NUT keinen Zugriff auf die USV hat)
- disconnected (wenn die USV nicht erreichbar ist)
- opened (da bin ich mir nicht 100% sicher - kam immer, wenn ich FHEM als erlaubtes Gerät in der DS aufgenommen habe)
- OL (am Netz, Akku vollständig geladen)
- OL CHRG (am Netz, Akku wird geladen)
- OB (Batteriebetrieb)
- LB (niedriger Batteriestatus)
Aktuell verwende ich folgenden Code zur Anzeige (mit data-hide-on/off)
<div data-type="symbol"
data-device="UPS"
data-hide="state"
data-hide-on="!ACCESS-DENIED.*"
data-hide-off="ACCESS-DENIED.*"
data-icon="fa-exclamation-triangle blink"
data-background-icon=""
data-color="Yellow"
data-background-color="Transparent">
</div>
<div data-type="symbol"
data-device="UPS"
data-hide="state"
data-hide-on="!open.*"
data-hide-off="open.*"
data-icon="fa-unlink blink"
data-background-icon=""
data-color="Linen"
data-background-color="Transparent">
</div>
<div data-type="symbol"
data-device="UPS"
data-hide="state"
data-hide-on="!disconnected.*"
data-hide-off="disconnected.*"
data-icon="fa-unlink blink"
data-background-icon=""
data-color="FireBrick"
data-background-color="Transparent">
</div>
<div data-type="symbol"
data-device="UPS"
data-hide="state"
data-hide-on="!OL"
data-hide-off="OL"
data-icon="mi-power"
data-background-icon=""
data-color="Linen"
data-background-color="Transparent">
</div>
<div data-type="symbol"
data-device="UPS"
data-hide="state"
data-hide-on="!OL CHRG"
data-hide-off="OL CHRG"
data-icon="fa-bolt blink"
data-background-icon=""
data-color="Yellow"
data-background-color="Transparent">
</div>
<div data-type="symbol"
data-device="UPS"
data-hide="state"
data-hide-on="!OB.*"
data-hide-off="OB.*"
data-get="battery.charge"
data-states='["100.*|[8-9][0-9].*|[7][6-9].*","[7][0-5].*|[6][0-9].*|[5][1-9].*","50.*|[0-4][0-9].*"]'
data-icon=""
data-background-icon=""
data-icons='["fa-battery-4","fa-battery-3","fa-battery-2"]'
data-background-icons='["","",""]'
data-color="Transparent"
data-background-color="Transparent"
data-colors='["Linen","Linen","Linen"]'
data-background-colors='["Transparent","Transparent","Transparent"]'>
</div>
<div data-type="symbol"
data-device="UPS"
data-hide="state"
data-hide-on="!LB.*"
data-hide-off="LB.*"
data-icon="fa-battery-1 blink"
data-background-icon=""
data-color="FireBrick"
data-background-color="Transparent">
</div>
<div data-type="symbol"
data-device="UPS"
data-hide="state"
data-hide-on="ACCESS-DENIED.*|open.*|disconnected.*|OL.*|OB.*|LB.*"
data-hide-off="!ACCESS-DENIED.*|!open.*|!disconnected.*|!OL.*|!OB.*|!LB.*"
data-icon="wi wi-na blink"
data-background-icon=""
data-color="FireBrick"
data-background-color="Transparent">
</div>
Grundsätzlich funktioniert das ganze, allerdings wird die Anzeige beim Update des Readings "state" nicht immer aktualisiert (oft erst nach einem Reload der Seite). Lieber wäre es mir, wenn ich den Inhalt von "state" (in Abhängigkeit anderer Readings) übersetzen könnte und diesen dann mit einem Symbol-Widget mit data-states auswerten könnte. Übersetzen würde ich folgendermaßen:
opened verbinde ...
disconnected nicht verbunden
ACCESS-DENIED Zugriff verweigert
OL Netzbetrieb
OL CHRG Batterie wird geladen
OB Batteriebetrieb (voll) wenn battery.charge > 75 ist
OB Batteriebetrieb (75%) wenn battery.charge > 50 und < 76 ist
OB Batteriebetrieb (50%) wenn battery.charge < 51 ist
LB Batteriebetrieb (leer)
rest unbekannt
Ich habe schon versucht mit einem notify eine Prozedur in 99_myUtils.pm aufzurufen, allerdings erhalte ich z.B. beim FHEM Start auch die unter asReadings angegebenen User-Readings als Events !? Der Event wurde folgendermaßen eingebunden (GetUPSState sollte ein Dummy mit dem Text bestücken):
define UPSevent notify UPS {GetUPSState($EVENT)}
Hier noch ein List meines NUT Devices
Internals:
DEF ups 192.168.220.240
DeviceName 192.168.220.240:3493
FD 65
NAME UPS
NR 56
PARTIAL
STATE OL
TYPE NUT
UpsName ups
buffer
lastStatus OL
pollValState 50
Helper:
DBLOG:
battery.charge:
logdb:
TIME 1526634664.73346
VALUE 100
battery.runtime:
logdb:
TIME 1526634664.73346
VALUE 2835
input.voltage:
logdb:
TIME 1526634664.73346
VALUE 236.0
state:
logdb:
TIME 1526634704.75562
VALUE OL
ups.load:
logdb:
TIME 1526634664.73346
VALUE 19.0
ups.mfr:
logdb:
TIME 1526634664.73346
VALUE American Power Conversion
ups.model:
logdb:
TIME 1526634664.73346
VALUE Back-UPS CS 650
READINGS:
2018-05-18 11:11:04 battery.charge 100
2018-05-18 11:11:04 battery.runtime 2835
2018-05-18 11:11:04 input.voltage 236.0
2018-05-18 10:32:53 lastError ACCESS-DENIED
2018-05-18 11:11:44 state OL
2018-05-18 11:11:04 ups.load 19.0
2018-05-18 11:11:04 ups.mfr American Power Conversion
2018-05-18 11:11:04 ups.model Back-UPS CS 650
helper:
battery.charge 100
battery.charge.low 10
battery.charge.warning 50
battery.date 2015/04/18
battery.mfr.date 2015/04/18
battery.runtime 2835
battery.runtime.low 120
battery.temperature 29.2
battery.type PbAc
battery.voltage 13.6
battery.voltage.nominal 12.0
device.mfr American Power Conversion
device.model Back-UPS CS 650
device.serial 4B1516P53132
device.type ups
driver.name usbhid-ups
driver.parameter.pollfreq 30
driver.parameter.pollinterval 5
driver.parameter.port auto
driver.version DSM6-1-15255-180302
driver.version.data APC HID 0.95
driver.version.internal 0.38
input.sensitivity medium
input.transfer.high 266
input.transfer.low 180
input.transfer.reason input voltage out of range
input.voltage 236.0
input.voltage.nominal 230
output.frequency 50.0
output.voltage 230.0
output.voltage.nominal 230.0
ups.beeper.status enabled
ups.delay.shutdown 20
ups.delay.start 30
ups.firmware 817.v9.I
ups.firmware.aux v9
ups.load 19.0
ups.mfr American Power Conversion
ups.mfr.date 2015/04/18
ups.model Back-UPS CS 650
ups.productid 0002
ups.realpower.nominal 400
ups.serial 4B1516P53132
ups.status OL
ups.test.result No test initiated
ups.timer.reboot 0
ups.timer.shutdown -1
ups.timer.start 0
ups.vendorid 051d
Attributes:
asReadings battery.charge,battery.runtime,input.voltage,ups.load,ups.mfr,ups.model
disable 0
pollState 10
pollVal 60
edit:
Ich hab' mir die Events nochmal genauer angesehen und es folgendermaßen umgesetzt (vielleicht hat ja jemand Verwendung dafür)
define UPSEvent notify (UPS:OL.*|UPS:OB.*|UPS:LB.*|UPS:ACCESS-DENIED.*|UPS:DISCONNECTED.*) {UpdateUPSState($EVENT)}
sub UpdateUPSState($) {
my ($myEvent) = @_;
if ($myEvent eq "ACCESS-DENIED") {
fhem("set UPSState Zugriff verweigert");
fhem("set UPSPower unbekannt");
return();
}
if ($myEvent eq "DISCONNECTED") {
fhem("set UPSState nicht verbunden");
fhem("set UPSPower unbekannt");
return();
}
if ($myEvent eq "OL") {
fhem("set UPSState Netzbetrieb");
fhem("set UPSPower Netzbetrieb");
return();
}
if ($myEvent eq "OL CHRG") {
fhem("set UPSState Batterie wird geladen");
fhem("set UPSPower Netzbetrieb");
return();
}
if ($myEvent eq "OB") {
if (ReadingsVal("UPS","battery.charge","") > "75") {fhem("set UPSState Batteriebetrieb (voll)");} elsif
(ReadingsVal("UPS","battery.charge","") > "50") {fhem("set UPSState Batteriebetrieb (75%)");} else
{fhem("set UPSState Batteriebetrieb (50%)");}
fhem("set UPSPower Stromausfall");
return();
}
if ($myEvent eq "LB") {
fhem("set UPSState Batteriebetrieb (leer)");
fhem("set UPSPower Stromausfall");
return();
}
}
<div data-type="symbol"
data-device="UPSState"
data-states='["Zugriff verweigert","nicht verbunden","Netzbetrieb","Batterie wird geladen","Batteriebetrieb (voll)","Batteriebetrieb (75%)","Batteriebetrieb (50%)","Batteriebetrieb (leer)"]'
data-icon=""
data-background-icon=""
data-color="Transparent"
data-background-color="Transparent"
data-icons='["fa-exclamation-triangle blink","fa-unlink blink","mi-power","fa-bolt blink","fa-battery-4","fa-battery-3","fa-battery-2","fa-battery-1 blink"]'
data-background-icons='["","","","","","","",""]'
data-colors='["Yellow","FireBrick","Linen","Yellow","Linen","Linen","Linen","FireBrick"]'
data-background-colors='["Transparent","Transparent","Transparent","Transparent","Transparent","Transparent","Transparent","Transparent"]'>
</div>