FHEM Forum

FHEM => Automatisierung => Thema gestartet von: elektrixxer am 18 November 2014, 12:07:14

Titel: leerzeile in logfile unterdrücken (*gelöst*)
Beitrag von: elektrixxer am 18 November 2014, 12:07:14
hallo,
ich übe mich gerade in der erstellung von logfiles. aber irgendwie habe ich einen fehler in meinem script. grundsätzlich funktioniert alles perfekt bis auf die tatsache das zwischen zwei logfile einträgen eine leerzeile erscheint. das dumme ist nur das das plot modul damit durcheinander kommt. wie kann ich am besten diese leerzeile unterdrücken?

ich lese per 1wire eine temperatur in tank_zt
danach überprüfe ich ob sich der wert gegenüber dummy_temp_tank geändert hat und falls er sich geändert hat soll dummy_temp_tank aktualisiert werden und anschliessend der wert ins logfile geschrieben werden


define tank_zt ECMDDevice ONEWIRE 10e005dc0208002a
define temp_lesen_netio_01 at +*00:01 set netio_01 reopen;; sleep 15;; set tank_zt messen;; sleep 2;; get tank_zt temp
define dummy_temp_tank dummy
define dummycopy_tank at +*00:05:00 {if ((ReadingsVal("tank_zt","temp",99)) ne (ReadingsVal("dummy_temp_tank","state",0))){ fhem("set dummy_temp_tank " . (ReadingsVal("tank_zt","temp",99)) ) }}

define logfile_01 FileLog ./log/Temperatur-%Y-%m.log dummy_temp_.*
attr logfile_01 logtype text


das logfile sieht anschliessend so aus


2014-11-18_11:10:32 dummy_temp_tank 9.1

2014-11-18_11:15:32 dummy_temp_tank 9.2

2014-11-18_11:20:32 dummy_temp_tank 9.3

2014-11-18_11:25:32 dummy_temp_tank 9.2

2014-11-18_11:30:32 dummy_temp_tank 9.3

2014-11-18_11:35:33 dummy_temp_tank 9.2



ich habe die vermutung das beim kopieren von tank_zt in dummy_temp_tank an den wert ein zeilenumbruch angehängt wird und dann auch ins logfile geschrieben wird. nur irgendwie finde ich keinen hebel um das zu unterbinden

ich stehe leider noch ganz am anfang meiner fhem kariere und muss mich erstmal durch den grundsätzlichen syntax durchquälen. ist stellenweise gar nicht so einfach. vielleicht kann mir ja mal jemand nen heißen schubs in die richtige richtung geben

vielen dank schon mal im voraus

gruß jan
Titel: Antw:leerzeile in logfile unterdrücken
Beitrag von: rudolfkoenig am 18 November 2014, 13:09:33
Dein Problem ist, dass tank_zt Werte mit Newline sammelt. NL ist im Browser nicht sichtbar, im telnet aber schon (list).
Die beste Loesung waere, ECMDDevice zu ueberzeugen, NL zu ueberlesen. Alternativ kannst du dein Code so abaendern:

define dummycopy_tank at +*00:05 { if(ReadingsVal("tank_zt","temp",99) ne ReadingsVal("dummy_temp_tank","state",0)) { my $t=ReadingsVal("tank_zt","temp",99);; chomp($t);; fhem("set dummy_temp_tank $t") }}

(ungetestet)

Diesen at und dummy_temp_tank kann man sich vermutlch sparen, wenn man die event-on-change-reading / event-min-interval Attribute fuer tank_zt setzt. Das NL muss dafuer entfernt sein, entweder via userReading oder stateFormat oder beim ECMDDevice direkt.
Titel: Antw:leerzeile in logfile unterdrücken
Beitrag von: elektrixxer am 18 November 2014, 14:00:10
vielen dank für deine antwort. deine optimierung hat 100% hingehauen.  :-*

hat leider nur zu 50% hingehauen. dadurch das der bearbeitete string gespeichert wurde war er natürlich beim nächsten durchlauf anders als der originalstring mit dem er verglichen wurde. somit wurde die schleife jedesmal durchlaufen.

ich hab einfach die kürzung an den anfang gesetzt und vergleiche gleich den gekürzten string. jetzt klappts so wie es soll.


define dummycopy_tank at +*00:05 {my $t=ReadingsVal("tank_zt","temp",99);;chomp($t);;if ($t ne ReadingsVal("dummy_temp_tank","state",0))   { fhem("set dummy_temp_tank $t") }}


auf jedenfall wieder was dazugelernt

ich beschäftige mich erst seit gut einer woche mit fhem und muss mich im prinzip von ganz unten heraufarbeiten. ich kann rudimentär ein wenig visual basic programmieren. nur musste ich leidvoll erfahren das hier die uhren doch ein wenig anders ticken. da ist es sehr frustrierend wenn man an im prinzip so einfachen problemen scheitert.

daher nochmal ein ganz großes DANKE

und ich verspreche mich im nächsten schritt ein wenig mit event-on-change-reading / event-min-interval bzw dem grundsätzlichen eventmanagement auseinanderzusenten

vielen dank und weiter so