Hallo Boris, mir ist heute aufgefallen das die Readings für value und state jetzt wie im Screenshot aussehen. Ich denke das es vor ca. einem Monat noch kein <pre>reading<pre> gab oder habe ich da etwas verschlafen?
List vom device:
Internals:
DEF ADC 0
IODev AVRNETIO
NAME ADCNETIO1
NR 1551
STATE 30.13 % Leistung
TYPE ECMDDevice
Readings:
2016-12-25 19:48:00 state value 093
2016-12-25 19:48:00 state_Prozent 30.13
2016-12-25 19:48:00 state_voll 147
2016-12-25 19:48:00 value 093
Fhem:
classname ADC
Cache:
Specials:
%NAME ADCNETIO1
%PortID 0
%TYPE ECMDDevice
Params:
PortID 0
Attributes:
IODev AVRNETIO
alias HZ Leistung ADC
room ECMD,Heizung
stateFormat state_Prozent % Leistung
verbose 0
ADC classdef (die Auswertung mache ich seperat in einer sub):
get value cmd {"adc get %PortID\n"}
params PortID
get value expect ".*"
Schönes Weihnachtsfest noch,
VG
Frank
Hallo,
liegt nicht an ECMD sondern an einer Änderung bei FHEMWEB. Wurde auch schonmal irgendwo hier diskutiert.
Viele Grüße
Boris
Danke Boris, da es nur ein "kosmetisches Problem" ist, kann ich damit leben, hat ja keinen Einfluss auf die Funktion.
VG
Frank
<pre> wird eingebaut, falls die Daten (Reading/Event) Newline enthalten, und ich bin weiterhin der Meinung, das man sowas vermeiden sollte.
Wieso das <pre> wiederum sichtbar ist, weiss ich nicht, das ist ein Bug.
Koennt ihr mir ein ohne Hardware reproduzierbares Beispiel bauen?
Bin heute noch arbeiten aber kann im laufe der Woche mal etwas mit \n versuchen zu bauen. Hier, in dem Fall kommt das <pre> aus:
get value cmd {"adc get %PortID\n"}
VG
Frank
Zitat von: franky08 am 25 Dezember 2016, 19:48:29
(die Auswertung mache ich seperat in einer sub):
Da musst Du das \n wegschneiden.
Hallo Boris, das müsste dann schon in der classdef erfolgen denn ich hole mit einem get ADCNETIO1 value; {Value_Prozent} die Daten ab und berechne in der sub nur den prozentualen Wert
sub
Value_Prozent()
{
my $hexad = ReadingsVal("ADCNETIO1","value",0);
if( $hexad ne (("OK") or ("OK OK") or ("OK OK OK")) ) {
my $volt3 = hex(trim($hexad));
fhem "setreading ADCNETIO1 state_voll $volt3";
my $valMin = 56;
my $valMax = 358;
if( $volt3 > $valMin ) {
my $volt3proz = (( $volt3 - $valMin ) / ( $valMax - $valMin ) * 100);
my $v3 = int(100 * $volt3proz + 0.5) / 100;
fhem "setreading ADCNETIO1 state_Prozent $v3";
fhem "set State_Prozent_Floorplan $v3";
fhem "set Diff_HZ_Regelung_dummy $v3";
}
if( $volt3 < 56 ) {
fhem "setreading ADCNETIO1 state_Prozent 0";
fhem "set State_Prozent_Floorplan 0";
fhem "set Diff_HZ_Regelung_dummy 0";
}
}
}
Mit der Zeile: if( $hexad ne (("OK") or ("OK OK") or ("OK OK OK")) ) filtere ich nur unplausible value Daten ("OK") aus, das Problem hatte ich vor einiger Zeit mal.
P.S. ich kann da jetzt nur nicht daran rumspielen da die Brennersteuerung der Heizung davon abhängig ist
VG
Frank
Zitat von: franky08 am 26 Dezember 2016, 21:59:31
P.S. ich kann da jetzt nur nicht daran rumspielen da die Brennersteuerung der Heizung davon abhängig ist
Dann arbeitet es sich doch gleich viel konzentrierter ;-)
In der classdef:
get value postproc { s/\n//g; $_ }
Grüße
Boris
Danke Boris, bis get value postproc komme ich aber gar nicht da ich value mit get value cmd {"adc get %PortID\n"} generiere. Die adc.classdef ist nur minimal gehalten:
get value cmd {"adc get %PortID\n"}
params PortID
get value expect ".*"
In der sub lese ich dann das Reading value mittels my $hexad = ReadingsVal("ADCNETIO1","value",0) und my $volt3 = hex(trim($hexad)) aus, da muss ich mal sehen wo ich mit der regex ansetzen kann.
VG
Frank
Doch, das geht. Postproc setzt nämlich auf dem empfangenen Datagramm vom Gerät an und schreibt es dann ins Reading.
Ich nehme an, dass Du sub ValueProzent() per notify triggerst.
Ja, funktioniert :) Das <pre> bin ich los.
get value cmd {"adc get %PortID\n"}
params PortID
get value expect ".*"
get value postproc { s/\n//g; $_ }
Danke,
VG
Frank
Zitat von: rudolfkoenig am 26 Dezember 2016, 11:37:35
Wieso das <pre> wiederum sichtbar ist, weiss ich nicht, das ist ein Bug.
Koennt ihr mir ein ohne Hardware reproduzierbares Beispiel bauen?
define du dummy
{ $defs{du}{READINGS}{state}{VAL}="oh\nweh!" }
fügt bei mir in den HTML-Kode der Detailseite des Geräts du einen Zeilenumbruch zwischen oh und weh! ein aber kein <pre></pre>. Ist das noch ein anderes Problem?
Das <pre>...<pre> ist auch nur nach dem get zu sehen, wenn ich dann einen Seitenrefresh mache ist es bis zum nächsten get weg, wenn ich jetzt deine postproc/regex aus der classdef auskommentiere ist das <pre>...<pre> wieder zu sehen.
P.S. Wenn ich mit der ungeänderten classdef arbeite und in der sub mit Log3 mir für $hexad den Wert ins Log schreibe, ist dort das <pre>...<pre> nicht zu sehen, scheint dann wohl nur eine FHEMWEB Geschichte zu sein
my $hexad = ReadingsVal("ADCNETIO1","value",0);
VG
Frank