ECMD doppelte Logeinträge

Begonnen von sky64, 12 Mai 2014, 20:19:41

Vorheriges Thema - Nächstes Thema

sky64

Hallo
ich habe am WE ein Update gemacht und festgestellt ( da ich nicht no regelmäßig die Ankündigungen lese ... ich will mich aber besser),
dass es danach nicht mehr ging.
Ok, hier im Forum die Erklärung und die Änderungen gefunden und meine classdef angepasst.
Jetzt bekomme ich zwar wieder meine Werte, aber 1. doppelt und 2. mit einer Leerzeile danach.

Jetzt habe ich keine Idee ob das an einer fehlerhaften classdef liegt oder was anderes.
Die classdef sieht so aus :

get value cmd {"1w get %channel\n"}
get value params channel
get value expect "\d+\n"
get value postproc { s/^(\d+)\n$/$1/;; $_ }


Wobei es auch ohne die postproc Zeile geht bzw. mit ihr keine Änderung brachten ( und ich die auch nicht 100% verstanden habe)
Ich lese einen 1W-Sensor aus.
Im Filelog steht sowas :

2014-05-12_20:14:30 S0_aussen value: 12.9

2014-05-12_20:14:30 S0_aussen value 12.9



Das S0-Gerät sieht so aus :
fhem> list S0
Internals:
   DEF        telnet 192.168.30.120:2701
   DeviceName 192.168.30.120:2701
   FD         26
   NAME       S0
   NR         121
   PARTIAL
   Protocol   telnet
   STATE      opened
   TYPE       ECMD
   Fhem:
     Classdefs:
       S0_1w:
         filename   /etc/fhem/1w.classdef
         Gets:
           Value:
             cmd        {"1w get %channel\n"}
             expect     \d+\n
             params     channel
             postproc   { s/^(\d+)\n$/$1/;; $_ }
         Sets:
Attributes:
   classdefs  S0_1W=/etc/fhem/1w.classdef
   room       Server
   verbose    0


der Sensor :
fhem> list S0_aussen
Internals:
   DEF        S0_1W
   IODev      S0
   NAME       S0_aussen
   NR         122
   STATE      value 12.9

   TYPE       ECMDDevice
   Readings:
     2014-05-12 20:09:30   state           value 12.9

     2014-05-12 20:09:30   value           12.9

   Fhem:
     classname  S0_1W
Attributes:
   IODev      S0
   room       Heizung
   verbose    0


Hier sieht man in der Readings auch den zusätzlichen Zeilenumbruch.

Es gibt dann einen at-Befehlt der regelmäßig die Daten abruft :
fhem> list read_s0_aussen
Internals:
   DEF        +*00:05:00 { fhem "set S0 reopen"; fhem "get S0_aussen value Aussen" }
   NAME       read_s0_aussen
   NR         123
   NTM        20:14:30
   REP        -1
   STATE      Next: 20:14:30
   TRIGGERTIME 1399918470.34274
   TRIGGERTIME_FMT 2014-05-12 20:14:30
   TYPE       at
Attributes:
   verbose    0



Kann mir jemand einen Tip geben ?


Zusatzfrage : wie kann ich im Hauptlogfile diesen Eintrag abschalten ?
2014.05.12 20:09:30 3: get S0_aussen value Aussen : value 12.9


Die Temperatur soll nur in das entsprechende Filelog geschrieben werden.

Danke Ronald


FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

Dr. Boris Neubert

Hallo,

Regel Nummer 1: loglevel auf 5 und logTraffic an, Log ansehen und verstehen.

Vermutung: das expect ist falsch, weil es den Dezimalpunkt nicht matcht.

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

sky64

Hallo
Vielen Dank für die Hilfe.

Wenn ich das richtig verstehe heißt "loglevel" jetzt "verbose" ?
(In der Referenz kommt noch sehr oft "loglevel" vor.)

Wie vermutet war das "expect" falsch. Leider ist in der Referenz keine Beispiel für eine Zahl mit Dezimalstelle vorhanden.
Mit Googles Hilfe habe ich habe nun das in der classdef :

get value cmd {"1w get %channel\n"}
get value params channel
get value expect "[+-]?\d+(\.\d+)\n"
get value postproc { s/\n//;; $_ }


Das erwartet nun eine Zahl mit Dezimalstellen, optionalem Vorzeichen und /n, so das es auch im Winter klappt.
(das + könnte man sich schenken aber wenn es mal jemand braucht ...)

Kann man eigentlich Komentare in die classdef schreiben ?

Was die "postproc"-Regel in der Referenz tut ( der "$/$1/;; $_"-Teil) habe ich leider nicht ergründen können.
Sie passte jedenfalls auch nicht und deshalb habe ich sie auf das entfernen des /n reduziert, wobei das ";; $_" noch unklar ist.

Ev. wäre es möglich solche Sachen in der "Perl specials"-Rubrik der Referenz zu erklären ?

Das Filelog habe ich dadurch sauber bekommen, das ich den "Regexp parts" schärfer eingestellt habe.
Das geht dank des genialen Formulars seht schön.
Nun wird nur noch "value:" statt "value" gelogt und die 2. Zeile kommt deshalb nicht ins log.

Nur im fhem-xxxx.log habe ich immer noch die Zeile :
2014.05.13 20:30:19 3: get S0_aussen value Aussen : value 11.7
Die hat da nichts zu suchen und ich denke, dass ich bei allen Objekten die damit zu tun haben "verbose" auf 0 stehen habe.
Wenn ich die Zeile richtig deute wird da aber immer noch irgendwo ein "verbose=3" (der globale verbose-Level) gezogen ?
Nur wo/wie suchen ?

Gruß Ronald



FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

Dr. Boris Neubert

Hi,

Zitat von: sky64 am 13 Mai 2014, 20:47:55
Kann man eigentlich Komentare in die classdef schreiben ?

The class definition for a logical ECMD device class is contained in a text file. The text file is made up of single lines. Empty lines and text beginning with # (hash) are ignored. Therefore make sure not to use hashes in commands.

Zitat
Sie passte jedenfalls auch nicht und deshalb habe ich sie auf das entfernen des /n reduziert, wobei das ";; $_" noch unklar ist.

Ev. wäre es möglich solche Sachen in der "Perl specials"-Rubrik der Referenz zu erklären ?

Ich empfehle das Buch von Rainer Krienke, Programmieren in Perl, oder eines der unzähligen Perl-Tutorials im Web. Perl ist unglaublich mächtig und unglaublich hirnerweichend und es ist nicht Sinn der CommandRef, Perl zu lehren.

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

FHEM-FAN

#4
Hallo an alle,

die auch das Problem mit den doppelten Einträgen hatten:

Einfach in der Definition des FileLog das regexp durch ein [:] ergänzen, also z.B.

define wzlog FileLog ./log/wz-%G-%V.log wz:(measured-temp).*

ersetzen durch

define wzlog FileLog ./log/wz-%G-%V.log wz:(measured-temp)[:].*

Eigentlich nicht kompliziert, aber blöd, weil man das in der alten ECMD-Version einfach nicht brauchte.

Gruß F.