Hallo,
ich lese mit folgender Zeile die Signalstärke meiner ESP`s aus. Das funktioniert auch. Leider wird mit jedem Aufruf die log vollgeschrieben.
defmod Host readingsGroup TYPE=ESPEasy:+HOST,presence,RSSI,+ESP_BUILD_GIT
attr Host valueStyle {return undef if($READING =~ m/TIME/);; ($VALUE eq "absent")?'style="color:red"':($VALUE <= -85)?'style="color:red"':($VALUE <= -80)?'style="color:#cccc00"':undef}
Im log steht:
2018.08.02 16:44:36 1: PERL WARNING: Argument "192.168.1.219" isn't numeric in numeric le (<=) at (eval 501247) line 1.
2018.08.02 16:44:36 1: PERL WARNING: Argument "v2.0-20180121" isn't numeric in numeric le (<=) at (eval 501250) line 1.
2018.08.02 16:44:36 1: PERL WARNING: Argument "192.168.1.206" isn't numeric in numeric le (<=) at (eval 501251) line 1.
2018.08.02 16:44:36 1: PERL WARNING: Argument "present" isn't numeric in numeric le (<=) at (eval 501252) line 1.
2018.08.02 16:44:36 1: PERL WARNING: Argument "-" isn't numeric in numeric le (<=) at (eval 501253) line 1.
2018.08.02 16:44:36 1: PERL WARNING: Argument "v2.0.0-dev12" isn't numeric in numeric le (<=) at (eval 501254) line 1.
2018.08.02 16:44:36 1: PERL WARNING: Argument "192.168.1.206" isn't numeric in numeric le (<=) at (eval 501255) line 1.
2018.08.02 16:44:36 1: PERL WARNING: Argument "present" isn't numeric in numeric le (<=) at (eval 501256) line 1.
2018.08.02 16:44:36 1: PERL WARNING: Argument "-" isn't numeric in numeric le (<=) at (eval 501257) line 1.
2018.08.02 16:44:36 1: PERL WARNING: Argument "v2.0.0-dev12" isn't numeric in numeric le (<=) at (eval 501258) line 1.
2018.08.02 16:44:36 1: PERL WARNING: Argument "192.168.1.206" isn't numeric in numeric le (<=) at (eval 501259) line 1.
2018.08.02 16:44:36 1: PERL WARNING: Argument "present" isn't numeric in numeric le (<=) at (eval 501260) line 1.
Jedes Mal werden ca 100 Zeilen geschrieben, mehrere für jeden ESP.
Wie bekomme ich die Meldungen weg? Kann man definieren das nicht numerische Informationen auch ok sind?
Hi,
$VALUE vorher auf numerischen Inhalt testen? So ähnlich wie die Beispiele in der commandref
if ($boost =~ m/^\d+$/) && ($boost > 0)
Gruß Otto
Danke, wie bekomme ich das Codeschnippsel in das attr mit eingebaut? Bei meinen Versuchen hagelt es nur Fehlermeldungen.
Zitat von: stefan-dd am 02 August 2018, 16:57:44
attr Host valueStyle {return undef if($READING =~ m/TIME/);; ($VALUE eq "absent")?'style="color:red"':($VALUE <= -85)?'style="color:red"':($VALUE <= -80)?'style="color:#cccc00"':undef}
Selbst erfunden oder irgendwo abgeschrieben ?
Tipp : lösche das Attribut valueStyle , die Warnungen im Log sollten verschwunden sein.
Dann überlege dir was genau du wie einfärben möchtest und ändere es in kleinen Schritten :
Reading Time bei absent rot und bei present nicht ändern ?
Value <= -80 bzw. -85 , rot /gelb aber bei welchem Reading ? vermutlich RSSI ?
{ if($READING eq "RSSI" && $VALUE gt "-90"){ 'style="color:red"' }elsif
($READING eq "RSSI" && $VALUE gt "-80" ){ 'style="color:orange"' }elsif
($VALUE eq "absent" ){ 'style="color:red"' }else{ 'style="color:black"' } }
So funktioniert es. Ist es verbesserungswürdig?
Zitat von: stefan-dd am 03 August 2018, 14:13:49
Ist es verbesserungswürdig?
reine Glaubensfrage ... du must es lesen und verstehen können :)
rot / orange hätte ich nicht mit gt sondern lt abgefragt und dem absent hätte ich auch den Reading Namen spendiert.
Hallo,
könntet ihr mir bitte in dem Fall einmal helfen, um die Logs wegzubekommen. Bei der Abfrage ist es nun mal leider so, das Nummerische und "ok|low" Werte kommen. Wie kann ich das ValueFormat besten sauber formatieren? Die Funktion an sich funktioniert einwandfrei.
Danke und viele Grüße
defmod ReadingGroup_Battery readingsGroup .*:[Bb]attery
attr ReadingGroup_Battery room SensorÜberwachung
attr ReadingGroup_Battery valueFormat { return undef if( $VALUE > 50 );;;; return undef if( $VALUE eq "ok" );;;;}
attr ReadingGroup_Battery valueIcon {'battery.low' => 'unknown@red','battery.ok' => 'general_ok@green','battery' => '{if ($VALUE <= 25) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@red"} else {if ($VALUE <= 50) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@orange"} else {if ($VALUE <= 75) {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@yellow"} else {"measure_battery_".(sprintf("%.0f",(($VALUE)/25))*25)."\@green"}}}}'}\
attr ReadingGroup_Battery verbose 0
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146052) line 1.
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146053) line 1.
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146054) line 1.
2022.01.20 15:34:28.037 1: PERL WARNING: Argument "ok" isn't numeric in numeric gt (>) at (eval 146055) line 1.
Wenn du wissen willst, ob ein Wert eine Nummer ist, kannst du "looks_like_number" verwenden. Sinnvollerweise wäre die Prüfung auch umzudrehen, "ok" soll ja immer "gut" sein, oder...
Versuch's mal so:
attr ReadingGroup_Battery valueFormat { return undef if( $VALUE eq "ok" );; return undef if( looks_like_number($VALUE) && $VALUE > 50 );;}
Oder direkt zusammengefasst:
attr ReadingGroup_Battery valueFormat { return undef if $VALUE eq 'ok' || looks_like_number($VALUE) && $VALUE > 50 }
(Notiz an mich selbst: das undef: muss das...?)
Zitat von: Beta-User am 21 Januar 2022, 12:10:58
Wenn du wissen willst, ob ein Wert eine Nummer ist, kannst du "looks_like_number" verwenden. Sinnvollerweise wäre die Prüfung auch umzudrehen, "ok" soll ja immer "gut" sein, oder...
Versuch's mal so:
attr ReadingGroup_Battery valueFormat { return undef if( $VALUE eq "ok" );; return undef if( looks_like_number($VALUE) && $VALUE > 50 );;}
Oder direkt zusammengefasst:
attr ReadingGroup_Battery valueFormat { return undef if $VALUE eq 'ok' || looks_like_number($VALUE) && $VALUE > 50 }
(Notiz an mich selbst: das undef: muss das...?)
Perfekt, vielen Dank für die schnelle Lösung. Ich habe die verkürzte Version benutzt und keine Logs mehr vorhanden.. ;)
Vielen Dank und einen schönen Tag noch