hilfegesuch für ein perl-problem

Begonnen von the ratman, 19 April 2016, 08:25:23

Vorheriges Thema - Nächstes Thema

CoolTux

Hallo,

Das klappt so nicht wirklich. Das ist ja was ich meine. Du brauchst erstmal ein sauberes Logfile von Deiner Wetterstation wo die Daten drin stehen welche Du für die Berechnung nehmen möchtest.
Also erstelle erstmal ein Logfile vom Device Wetterstation. So wie ich das sehe geht es Dir hier erstmal um die Regenmenge. Also fangen wir da an


define logWetterstationRegenmenge FileLog ./log/logWetterstationRegenmenge WetterStation:rain:.*

Das wirst Du wohl jetzt erstmal laufen lassen müssen bis Du genügend Daten vorhanden hast.




Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

the ratman

#31
@ernst1024

juhuu, jetzt reden als 2 blinde über farben - naja, kann immerhin kurzweilig werden *g*.

ich hatte die daten vom rain von der wetterstation auch schon im log drinnen (damit hab i glei getestet, ob das log auch was schreibt). ist dem ding auch egal.
wenn ich das richtig kapiere, holt er sich ja nur die berechneten werte wieder aus dem logfile - vertehen tu ich das notify so:

my $menge = (ReadingsVal("Wetterstation", "rain", 0) - ReadingsVal("RegenmengeOffset", "state", 0));er holt sich den aktuelle rain von der wetterstation und nimmt ihn für regenmengeoffset. - das funzt ja auch, der offset hat immer werte und wird auch mit dem zugehörigen at um mitternacht geressetet.
  my $last1hours = myDiff("3600", "Wetterlog", "10:::");
  my $last3hours = myDiff("10800", "Wetterlog", "10:::");
  my $last24hours = myDiff("86400", "Wetterlog", "10:::");



  fhem("set RegenmengeTag $menge");
  fhem("set RegenmengeLast1Hours $last1hours");
  fhem("set RegenmengeLast3Hours $last3hours");
  fhem("set RegenmengeLast24Hours $last24hours");
nun holt er sich
1) die (nicht vorhandene) werte aus dem log,
2) sendet sie an die mydiff zum rechnen und
3) würde die zurückgegebenen werte in die entsprechenden dummys schreiben.

@ernst1024 & @cooltux

so, drum zum 3. mal: ich würde gern händisch mein log füllen, damits entweder wie ein starthilfekabel wirkt, oder man wenigstens sehen könnte, wie er überhaupt auf daten im log reagiert.
mein problem dabei is: wie muß ne zeile im log aussehen, damit er die daten auch richtig abgreifen kann?
ist das Log 4, ("myDiff: File: $logfile, Field: $cspec, Period: $period_s bis $period_e, First: $first, Last: $last, Diff: $diff");aus der mydiff meine abschriebübung dafür?

@cooltux
wenn wir was ganz neues anfangen, könnten wirs auf mysql probieren gleich?
→do↑p!dnʇs↓shit←

CoolTux

Lass erstmal etwas nehmen was definitiv irgendwie gehen muss. Und das ist im Moment FileLog.
Kipp doch einfach mal bisschen wasser in das Teil und schaue wie das Logfile gefüllt wird. Kann ja nicht so schwer sein. Meintwegen mit ner Gießkannentülle, damit es halbwegs realistisch ist.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

the ratman

#33
wie gesagt, hat ich zwar schon erfolglos probiert, aber ich will ja ned so sein *g*

nun hat das log also auch noch Wetterstation:rain:.*zum fressen bekommen.
scho schreibt er das log voll:2016-04-25_11:16:26 Wetterstation rain: 42.48

was mir grad auffällt übrigens:
er schreibt auch kein RegenmengeOffset  vom dummy rein. das müsste doch mindestens 1 mal um mitternacht (at mit reset) kommen?
→do↑p!dnʇs↓shit←

CoolTux


2016-04-25_10:05:19 Wetterstation rain: 40.28
2016-04-25_10:11:16 Wetterstation rain: 41.38
2016-04-25_10:16:56 Wetterstation rain: 40.88
2016-04-25_10:23:96 Wetterstation rain: 42.05
....


2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.48
2016-04-25_11:16:26 Wetterstation rain: 42.4
2016-04-25_11:16:26 Wetterstation rain: 42.48


Versuche erstmal ne Stunde zusammen zu bekommen mit unterschiedlichen Werten.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

the ratman

#35
unterschiedliche werte werden schwer - kein regen in sicht und die station ist am dach - da komm ich ohne steiger nicht ran *g*

werds dann mal händisch ändern2016-04-25_11:16:26 Wetterstation rain: 42.43
2016-04-25_11:18:34 Wetterstation rain: 42.44
2016-04-25_11:21:31 Wetterstation rain: 42.45
2016-04-25_11:24:14 Wetterstation rain: 42.46
2016-04-25_11:26:43 Wetterstation rain: 42.47
2016-04-25_11:28:57 Wetterstation rain: 42.48
und ein reopen hinten her
→do↑p!dnʇs↓shit←

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

the ratman

gut, er schreibt mir brav das log weiter voll und nachdem ich mal händisch den RegenmengeOffset auf 41 geändert hab, auch den "Regenmenge Tag 1.48"

im logfile werden übrigens nur die state-werte der wetterstation gelogged, nicht die vom offset-dummy (auch, wenn ich dessen werte umändere).
→do↑p!dnʇs↓shit←

ernst1024

#38
Ok, langsam verliere ich den Durchblick, aber ich werfe mal folgendes in die Runde:
das Logfile muss mE nicht so:


2016-04-25_11:16:26 Wetterstation rain: 42.48


sondern so:


2016-04-25 08:51:57 state T: 4.5 H: 69 W: 6.7 R: 42.48 IR: 0 WD: 50 WDR: 67.5 S: 25 B: 16



aussehen, da mM nach die Funkrion myDiff auf die 10 Spalte zugreift und das wäre genau das


my $last1hours = myDiff("3600", "Wetterlog", "10:::");



                   1              2     3   4    5   6   7    8    9  0
2016-04-25 08:51:57 state T: 4.5 H: 69 W: 6.7 R: 42.48 IR: 0 WD: 50 WDR: 67.5 S: 25 B: 16


edit: ok dachte mir schon dass das nicht so dargestellt wie geschrieben rüberkommt. Aber einfach die Leerzeichen abzählen, wobei das erste nach Datum 1, nach Uhrzeit 2 usw ist


2016-04-25 08:51:57 state T: 4.5 H: 69 W: 6.7 R:-genau hier-42.48 IR: 0 WD: 50 WDR: 67.5 S: 25 B: 16
Gruß Ernst

CoolTux

Ich sehe in den Readings Deiner Wetterstaion nichts mit Offset. Mach doch mal bitte ein Schritt nach dem anderen und zwar nicht nur im tun sondern auch im denken und schreiben.

Regendaten hast Du nun im Logfile? Also so über eine Stunde?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Zitat von: the ratman am 24 April 2016, 21:32:00
das steht im fhem wiki als abschreibübung drinnen. da stellt doch sicher keiner schrott rein, der nicht funzt, oder?

Du glaubst gar nicht, wieviel nicht (mehr) funktionierender Schrott im fhemwiki steht...

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

the ratman

#41
so, dann mal langsam *g*

@cooltux
zur regenmengeOffset - das ist einer der dummys, die für das ganze gemurkse angelegt werden sollen.
den hab ich auch im log freigegeben: "RegenmengeLast1Hours:state:.*|RegenmengeLast24Hours:state:.*|RegenmengeLast3Hours:state:.*|RegenmengeOffset:state:.*|RegenmengeTag:state:.*|Wetterstation:rain:.*"
dieser offset wird um mitternacht geresettet und daraus die tägliche regenmege errechnet und in "Regenmenge Tag" geschrieben, was auch funzt.
so: das offset hat nen wert und in log soll dieser geschrieben werden. wirds aber nicht - weder mit dem dazugehörigen at um mitternacht, noch, wenn ich händisch dran drehe.
nur soviel zum offset - und du wolltest ja wohl alle beteiligten werte im log haben, denk ich mal?

@ernst1024
moooment - der will also gar nicht nur den rain im log haben (was ich eh nie geglaubt hab), der will den state mit allem gemurkse?
das probier i glei mal und lass es auch ins log schreiben. das log wurde also eben um "Wetterstation:state:.*" erweitert (nachtrag: was er auch nicht tut - ich krieg langsam die kretze)
hab ich da mal nicht was gelesen wegen dummys und state und nix ins log schreiben? naja, habs dann aufgeben, als die wieder wegen schiss zum streiten anfingen und ich geistig ausgestiegen bin ...
haben wir hier dann die lösung? bleiben sie aufmerksam und schalten sie ein zu teil 546743542334: ist sue allen schwanger, oder tut sie nur so?

@betateilchen
jetzt krieg ich angst so als anfänger und jammer mal ein bissi (bitte nicht weiterlesen):
ich fasse jetzt mal fies zusammen, wie sich das für mich darstellt:
ich hab als anfänger 3 anlaufstellen:
1) commandref: steht auch gern mal nur ne überschrift ohne erklärung bei den set und get befehlen
2) wiki: unzuverlässig
3) forum: wo du gern mal auf 1 und 2 verwiesen wirst
goil! hänsel und gretel gehen in den wald. empfohlen wird ihnen, brotkrumen zum zurückfinden zu streuen. gibt aber nur semmeln und steine anstatt brotkrumen, und die steine nehm ich denen auch noch weg. der plan is eindeutig von der hexe persönlich entworfen! *lach*
nö, im ernst: ich habs schon vermutet und mir wurde ab jener vermutung klar, warum man sich als anfanger ohne programmierkenntnisse wie der letzte vollidiot vorkommmt ...
→do↑p!dnʇs↓shit←

CoolTux

Mal ne Frage, Wie verhält sich das Reading rain. Zählt der Wert nach oben oder was genau soll das sein. Gibt er die echtzeit Regenmenge an?

Warum wird das hier gemacht, wofür


my $menge = (ReadingsVal("OC3", "rain", 0) - ReadingsVal("RegenmengeOffset", "state", 0));;\


Sollte rain nicht null sein wenn es nicht regnet? Nehmen wir an es regnet um Mitternacht also genau dann wenn der Offset erstellt wird. Aber wieso, wofür? Kapier ich nicht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ernst1024

#43
Zitat von: the ratman am 25 April 2016, 12:09:47

moooment - der will also gar nicht nur den rain im log haben (was ich eh nie geglaubt hab), der will den state mit allem gemurkse?

....bleiben sie aufmerksam und schalten sie ein zu teil 546743542334: ist sue allen schwanger, oder tut sie nur so?


zu 1 Du könntest natürlich auch den Funktionsaufruf ändern:


my $last1hours = myDiff("3600", "Wetterlog", "4:::");


wenn ich jetzt richtig gezählt habe. (kommt drau an ob zwischen Datum und Uhrzeit ein Leerzeichen oder ein underscore ist)

zu 2 .. ich war's nicht
Gruß Ernst

the ratman

#44
das ist auch der grund, warum der ganze geschisse gemacht wird:
das rain der wetterstation zählt einfach die regenmenge bis 999 (oder wars 9999?) und fangt dann wieder von vorne an. geht auf deutsch einfach über, das gute ding.

darum auch gleich der teil 2 deiner frage - da schreibt er einfach für den aktuellen tag die regenmenge rein. macht er eben simpel mit nem at *00:00:00 {
  my $offset = ReadingsVal("Wetterstation", "rain", 0);
  fhem("set RegenmengeOffset $offset");
}
funzt auch soweit.
ich hab somit einen wert in offset stehen, der 24 stunden stabil bleibt und der einfach nur von der aktuellen menge im rain der wetterstation abgezogen wird um den aktuellen stand des tages zu haben und den auch brav in den dummy RegenmengeTag zu schreiben. der teil funzt auch.

@ernst1024
könnte ich - warten ma einfach, was der onkel cooltux zu sagt? will ihm jetzt ned ins gehirn pfuschen.
(kommt drau an ob zwischen Datum und Uhrzeit ein Leerzeichen oder ein underscore ist)wenn er mir mal den state ins log schreiben würde, könnt ichs sagen ...
Zitatzu 2 .. ich war's nicht
ich weiß *g* - aber wir wissen, wen ich meine, oder? *g*
→do↑p!dnʇs↓shit←