Hallo an Alle,
seit heute morgen beglücken mich zwei FS20 HMS100tf Sensoren mit 0 Prozent Luftfeuchtigkeit in den entsprechenden Räumen.
Verwirrend ist für mich das in der Webansicht hierfür der Wert ok angezeigt wird und nicht wie aus dem Reading mit "0" oder von mir aus mit none statt ok was ja wohl alleine physikalisch nicht stimmen mag.
Liegt dies an meinem Code für den Temperatursensor sorry am ? Modul hierfür oder woher erscheint auf einmal dieses ok.
Anbei hier mal ein List des Sensors
Internals:
CODE c547
DEF c547
IODev MyCUL868
LASTInputDev MyCUL868
MSGCNT 1023
MyCUL868_MSGCNT 1023
MyCUL868_RAWMSG 810e04xx0510a001c547000000350200
MyCUL868_RSSI -50.5
MyCUL868_TIME 2017-02-08 17:22:09
NAME Buerosensor
NR 232
STATE <div style='color:red' >Temp: 23.5°C <div style='color:blue'>Feuchte: ok%H <div style='color:green'>Batterie: ok
TYPE HMS
Readings:
2017-02-08 17:22:09 battery ok
2017-02-08 17:22:09 humidity 0
2017-02-08 17:22:09 state T: 23.5 H: 0 Bat: ok
2017-02-08 17:22:09 temperature 23.5
2017-02-08 17:22:09 type HMS100TF
Attributes:
IODev MyCUL868
alias Büro-Sensor
comment eneloop eingelegt 01.02.2017
event-on-change-reading .*
eventMap battery 0.0:ok -1:Achtung
group Heizung und Temperatur
icon temp_inside
model hms100-tf
room Büro,Funk_Sensoren
sortby 4
stateFormat {sprintf("<div style='color:red' >Temp: %.1f",ReadingsVal("Buerosensor","temperature",0))."°C ". sprintf("<div style='color:blue'>Feuchte: %.1f",ReadingsVal("Buerosensor","humidity",0)) ."%H ". sprintf("<div style='color:green'>Batterie: %.1f",ReadingsVal("Buerosensor","battery",-1)) ." "}
Gruß
Hans-Jürgen
Hi,
ich kann mir vorstellen, dass die eventMap Schuld ist. Hier wird 0.0 durch ok ersetzt.
Gruß,
Thorsten
Guck mal dein eventMap Attribut an (und ggf. Syntax in der commandref)
stateFormat setzt aber nur STATE, hier kommt in den Readings für die Feuchte schon eine 0 vom device, da irgendwas anderes faul.
2017-02-08 17:22:09 humidity 0
VG
Frank
Hi,
Zitat von: franky08 am 08 Februar 2017, 17:54:29
stateFormat setzt aber nur STATE,
Aus der fhem.pl:
sub
evalStateFormat($)
{
my ($hash) = @_;
my $name = $hash->{NAME};
###########################
# Set STATE
my $sr = AttrVal($name, "stateFormat", undef);
my $st = $hash->{READINGS}{state};
if(!$sr) {
$st = $st->{VAL} if(defined($st));
} elsif($sr =~ m/^{(.*)}$/s) {
$st = eval $1;
if($@) {
$st = "Error evaluating $name stateFormat: $@";
Log 1, $st;
}
} else {
# Substitute reading names with their values, leave the rest untouched.
$st = $sr;
my $r = $hash->{READINGS};
$st =~ s/\b([A-Za-z\d_\.-]+)\b/($r->{$1} ? $r->{$1}{VAL} : $1)/ge;
}
$hash->{STATE} = ReplaceEventMap($name, $st, 1) if(defined($st));
}
...man beachte die letzte Zeile.
Gruß,
Thorsten
$hash->{STATE} = ReplaceEventMap($name, $st, 1) if(defined($st));
ist richtig, über das Thema hatte ich schon einmal eine Diskussion mit Andre.
ZitatZitat von: justme1968 am 25 Dezember 2016, 20:50:47
oder die {} variante von eventMap verwenden. damit kann man die richtung device -> fhem und fhem -> device getrennt mappen.
gruss
andre
VG
Frank
P.S. Trotzdem liefert das Device, im Reading, schon den Wert 0 für die Feuchte :)
Hallo,
sorry für meine Unwissenheit, aber ich war eigentlich der Annahme das sich das Eventmap "nur" auf battery bezieht oder sehe ich das verkehrt ?
Gruß
Hans-Jürgen
Nimm doch die beiden Attribute, eventMap und stateFormat mal raus und sieh mal was dann passiert.
VG
Frank
Zitat von: franky08 am 08 Februar 2017, 18:24:23P.S. Trotzdem liefert das Device, im Reading, schon den Wert 0 für die Feuchte :)
Ja, weil's ja 0 ist und nicht 0.0
Zitat von: Deckoffizier am 08 Februar 2017, 18:56:23
sorry für meine Unwissenheit, aber ich war eigentlich der Annahme das sich das Eventmap "nur" auf battery bezieht oder sehe ich das verkehrt ?
Ja, meiner Meinung nach siehst Du das verkehrt. Ich glaube, dass das eventMap nicht auf diese Art auf bestimmte Readings beschränkt werden kann.
Zitat von: franky08 am 08 Februar 2017, 19:05:05
Nimm doch die beiden Attribute, eventMap und stateFormat mal raus und sieh mal was dann passiert.
stateFormat würde ich erstmal drin lassen.
Gruß,
Thorsten
Hallo nochmal,
eventMap gelöscht ,abgespeichert dann FHEM neu gestartet....
leider immer noch das selbe Elend Feuchte ok oha gut einen Moment gewartet jetzt Feuchte wie es sein soll mit 0.0 obwohl es ja theoretisch auch nicht stimmen kann.
Werde mich mal intensiver in eventMap reinknien.
bin zwar etwas ratlos :-).
Aber vielen Dank für Eure Hartleibigkeit bei der Problemlösung !!
Gruß
Hans-Jürgen
Ich würde mal noch etwas warten, könnte sein das der Sensor etwas braucht ehe er Daten liefert.
VG
Frank
Potzblitz,
da ist wohl noch der Wurm drin...
hatte gerade mal einen Feuchte Wert von 0.9 und 5.9 zur Anzeige aber dafür bleibt battery bei 0.0 in konstanter Boshaftigkeit in der Anzeige auch nach 2 FHEM neustarts ?
Na mal sehen ob ich noch den Dreh finde..
Gruß
Hans-Jürgen
Zitat von: Deckoffizier am 08 Februar 2017, 20:55:27aber dafür bleibt battery bei 0.0 in konstanter Boshaftigkeit
Warum auch nicht? Ich dachte, dass das der Wert für "ok" wäre. Ohne die eventMap bleibt das dann bei 0.0, oder?
Zitat
in der Anzeige auch nach 2 FHEM neustarts ?
Was erwartet Ihr Euch eigentlich immer von den Neustarts? Das braucht man normalerweise nur, wenn man ein update macht oder sonst Coding von Modulen oder so ändert.
Gruß,
Thorsten
Hallo Thorsten,
nochmal klar Schiff...
attr eventMap ist gelöscht.
Reading liefert battery als Wert ok und nicht 0.0
in der Anzeige möchte ich auch das ok lesen so wie das Reading es mir anzeigt bzw geliefert bekommt.
Ziel ist wenn Reading battery nicht als Wert ok liefert dafür etwas anderes Angezeigt wird wie z.B. Achtung Akku alle.
Hoffentlich reden wir nicht aneinander vorbei.
Grüße
Hans-Jürgen
sub BattBuerosensor()
{
my $readBatt = ReadingsVal("Buerosensor","battery",0);
if($readBatt ne "ok") {
fhem "setreading Buerosensor battery Achtung Akku alle"
}
}
würde in der 99_myUtils laufen denn alles was über 3 Programmzeilen geht, landet bei mir dort!
Mit folgender sub überwache ich den Status meiner Batterien:
sub
Batt_dead
{
my $batt = ReadingsVal("ActionDetector","state","undef");
my @daten = split(/[^\d]./,$batt);
my $alive = $daten[3];
my $dead = $daten[6];
my $unkn = $daten[9];
fhem "setreading Batt_Level Alive $alive";
fhem "setreading Batt_Level Dead $dead";
fhem "setreading Batt_Level Unknown $unkn";
if( $alive != 54 or $dead != 0 or $unkn != 0 ) {
fhem "set Batterien_Pruefung Baterrien Ueberpruefen";
fhem "attr WEB roomIcons Batterien:general_low\@red";
fhem "attr WEBtablet2 roomIcons Batterien:general_low\@red";
} else {
fhem "attr WEB roomIcons Batterien:general_ok";
fhem "attr WEBtablet2 roomIcons Batterien:general_ok";
fhem "set Batterien_Pruefung Batterien OK";
}
}
VG
Frank
Hallo nochmal,
franky08 den oberen Teil deines Code habe ich in der 99_myUtils eingebaut lasse mich mal überraschen...
Den anderen Part mit ActionDetector hoffe ich richtig zu liegen funktionobelt nur mit HomeMatic Gerätschaften ?
Fällt erst mal flach.
Leider bekomme ich es nicht gebacken mit farbigen Anzeige und vor allen Dingen mit der Batteriestatus Ausgabe ok genauso wie das Reading statt immer 0.0.
Nun ja auf eins bin ich noch gestoßen, die HMS100TF Sensoren fangen wohl an zu spinnen bei Luftfeuchtigkeit unter 30% hoffentlich sind meine 1Wire Sensoren in diesem Fall nicht auch so mallig.
Mein Luftbefeuchter ist heute eingetrudelt und zeigt langsam Wirkung :-).
Habe an FHEM noch andere Baustellen und als kurzes Laien Statement hat mein 1Wire Zeugs bis jetzt die Wenigsten Mucken gehabt.
Habe an diesem Problem "vorläufig" die Schn... voll und setze dies erstmal auf gelöst.
Nichts destro Trotz ein großes Danke an franky08 und Torsten für die Mithilfe !
Gruß
Hans-Jürgen
Hallo,
kurzer Nachtrag zur Lösung..
am Ende muss es so lauten sprintf("<div style='color:green'>Batterie: %s",ReadingsVal("Buerosensor", "battery", "low")) ." "}
statt %.1f
Gruß
Hans-Jürgen