ECMD device, hier AVRNETIO, geänderte Readings?

Begonnen von franky08, 25 Dezember 2016, 19:48:29

Vorheriges Thema - Nächstes Thema

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Dr. Boris Neubert

Hallo,

liegt nicht an ECMD sondern an einer Änderung bei FHEMWEB. Wurde auch schonmal irgendwo hier diskutiert.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

franky08

Danke Boris, da es nur ein "kosmetisches Problem" ist, kann ich damit leben, hat ja keinen Einfluss auf die Funktion.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

rudolfkoenig

<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?

franky08

#4
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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Dr. Boris Neubert

Zitat von: franky08 am 25 Dezember 2016, 19:48:29
(die Auswertung mache ich seperat in einer sub):

Da musst Du das \n wegschneiden.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

franky08

#6
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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Dr. Boris Neubert

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
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Dr. Boris Neubert

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.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Dr. Boris Neubert

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?
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

franky08

#12
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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1