hilfegesuch für ein perl-problem

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

Vorheriges Thema - Nächstes Thema

the ratman

da ich leider kein perl kann (dies ist kein überheblichkeits- sondern ein zeit- und verständniss-problem) suche ich auf diesem wege nach einer kleinen hilfe. keine angst! ich werde dann nicht mehr nerven!
es geht um das folgende produkt "EQ3 83346 HomeMatic Kombisensor HM-WDS-OC3". dies ist eine wetterstation, die auch brav ihre werte liefert.

das grundproblem: die station liefert durchlaufende werte für sonnenschein- und regendauer.
die lösung für die regenmenge wäre eigentlich da: http://www.fhemwiki.de/wiki/HM-WDS100-C6-O_Funk-Kombi-Sensor_OC3#Anwendungsbeispiele

nun arbeite ich aber mit mysql dblog (name:logdb) und habe keinen schimmer, wie ich die scripte umschreiben muß, damit auch mal mehr als 0 da steht.
meine änderungen am oben verlinkten script bis jetzt:Wetterstation:rain.* {
  my $menge = (ReadingsVal("Wetterstation", "rain", 0) - ReadingsVal("RegenmengeOffset", "wert", 0));
  my $last1hours = myDiff("3600", "logdb", "10:::");
  my $last3hours = myDiff("10800", "logdb", "10:::");
  my $last24hours = myDiff("86400", "logdb", "10:::");
  fhem("setreading RegenmengeTag wert $menge");
  fhem("setreading RegenmengeLast1Hours wert $last1hours");
  fhem("setreading RegenmengeLast3Hours wert $last3hours");
  fhem("setreading RegenmengeLast24Hours wert $last24hours");
}
was zwar zu keiner fehlermeldung führt, aber machen tuts auch nix. was natürlich ganz fehlt, wäre die sonnenscheindauer, die die station von 0 bis 999 min. angibt, und dann einfach wieder von vorne anfangt (so wirds zumindest im forum berichtet). wenn da wer ne idee hätte ... ich wäre dankbar.
btw: das (user)reading "wert" verwend ich gerne bei tests, da ich das zum speichern ins dblog freigegeben hab und somit nicht immer den normalen state ins db schreiben muß.

und nochmals: da ich kein perl kann, haben verweise auf irgendwelche perl-kurse oder intelligente meldungen, dass ich es lernen soll, eher weniger sinn. was ich wirklich brauche ist jemand, der sich die zeit nimmt, mir da wirklich zu helfen und etwa obiges script für mich anpasst oder sogar was besseres bastelt. da ich sicher nicht der einzige mit dieser station bin, sind eventeull ja auch noch andere dafür dankber - ich wärs auf jeedn fall!
→do↑p!dnʇs↓shit←

dev0

Wenn Du Beispiele aus dem Wiki kopierst und keine Ahnung von Perl hast, warum änderst Du dann die "set" Befehle in "setreading" um? setreading triggert laut Command ref keine Events, wenn es aus einem Notify heraus aufgerufen wird. Diese Events werden aber zum Loggen benötigt.

Zitat
nun arbeite ich aber mit mysql dblog (name:logdb) und habe keinen schimmer, wie ich die scripte umschreiben muß
Da muss nichts umgeschrieben werden. Wenn Events generiert werden, dann muss nur noch dblog/filelog so konfiguriert werden, dass diese Events auch in die db/Datei geschrieben werden.

Zitatdamit auch mal mehr als 0 da steht.
Mit dieser Fehlerbeschreibung wird Dir niemand helfen können.

Zitatscript für mich anpasst oder sogar was besseres bastelt
Das ist schon ziemlich dreist, aber man kann es ja mal versuchen...

CoolTux

Zitat von: dev0 am 19 April 2016, 10:18:43
Das ist schon ziemlich dreist, aber man kann es ja mal versuchen...

Nun  ich würde sagen Fragen kostet nichts, ich finde es ok. Interessant sind die Folgereaktionen die kommen wenn sich nach Tagen keiner findet. Davon hatten wir ja schon ein paar häßliche. Ich bilde mir ein den Threadersteller soweit zu kennen um behaupten zu können das er nicht unter die erwähnten Kandidaten fällt welche dann rumschreien wie beschißen das Forum ist weil ihm keiner sein Perlprogramm schreibt.
Von daher wünsche ich viel Erfolg und Glück. Eigentlich gibt es immer einen der gerade mit Perl an fängt und Fingerübungen an nimmt.


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

dev0

Zitatnicht unter die erwähnten Kandidaten
Das denke ich auch nicht.

Davon abgesehen wird der Wiki Artikel auch regelmäßig überarbeitet, so falsch kann er schon mal nicht sein ;) Aber um das Problem einkreisen zu können benötigt man detailliertere Informationen (siehe angepinnte Beiträge).

the ratman

#4
erst mal thx dafür, dass überhaupt reaktionen kommen.

@cooltux - was sollt ich hässlich reagieren? entweder hilft man mir oder eben nicht. die leute können ja nix dafür, dass ich kein perl kann - so gesehen bin ich tatsächlich dankbar für jede hilfeund werd - solang ich nix für zahl - mich auch ned aufregen, wenn 0 rüber kommt.
ich kanns nur absolut ned ab, wenn einer mit seinem erhobenen zeigefinger schulmeisterlich vor mir steht und mir erzählen will, was ich doch nicht für ein kleines deppelchen bin weil ich dies oder jenes ned kann oder weiß. ich trau mich wetten, ich kann dafür anderes besser (leider nichts, was bei fhem weiter helfen würde *g*).
wenn du einen für die fingerübung kennst ... ich würde den beknien *g*. wenn du weißt, ob und wie man das ganze eventeull sogar ohne perl lösen könnte, wäre ich allerdings noch dankbarer. fhem selber fang ich ja wenigstens langsam an zu kapieren, wenns auch immer noch mehr rumprobieren als gezieltes arbeiten is ...

@dev0
Zitatwarum änderst Du dann die "set" Befehle in "setreading" um?
naja, war eher ne probiererei weil bei set nix passiert ist und zumindest, der windgeschw. umrechner mit setreading zu funktionieren scheint.

für
Zitat[device:reading] mit dem Wert des Readings für device, falls sowohl device, als auch Reading existiert, und nicht leer ist.
wenn ich mir die ref so durchlese wäre dann z.b.: set RegenmengeLast24Hours:wert $last24hours richtig?

Da muss nichts umgeschrieben werden.dass ist schon mal gut. nun, alle readings mit "wert" dürfen ins log geschrieben werden, somit sollts dann gehen, sobald ich meinen set richtig hab?
und zum verständniss: was bedeutet "10:::" haste da ne info oder nen link für mich?
Zitatregelmäßig überarbeitet, so falsch kann er schon mal nicht sein
hätte ich auch nie behauptet - alleine, weil ichs nicht feststellen könnte *g*.
bei mir gehts eher darum, dass ich mit programmierlogik so überhaupt nichts anfangen kann und deshalb nie sicher bin, was ich in solchen fällen wie zu ändern hab.
→do↑p!dnʇs↓shit←

CoolTux

Mal doof gefragt. Die Sub myDiff hast Du aber auch angelegt, oder?
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

dev0

Zitatset RegenmengeLast24Hours:wert $last24hours
richtig?

Warum möchtest Du etwas an dem Code aus dem Wiki Artikel verändern, wenn Du nicht wirklich weißt was Du tust. Versuche doch einfach den Artikel so umzusetzen, wie es dort angegeben ist. Klar, dass ggf Devicenamen angepasst werden müssen. Wenn dann etwas nicht funktioniert, dann versuche logisch vorzugehen und poste die notwendigen informationen. Schritt für Schritt.

the ratman

@cooltux
jau - liegt brav in den myutils rum - 1:1 kopiert - das kann sogar ich *g*

@dev0
weil ich ja nicht die daten aus dem attr "state" sondern aus den userattr "wert" verwenden will.
grund: ich hab in der db einmal generell keine "state" drinnen.
→do↑p!dnʇs↓shit←

dev0

Es gibt in Fhem weder die Syntax "attr state" noch "userattr xyz". Lies Dich in Grundlangen ein oder (vielleicht besser) suche Dir eine Software, die einfacher einzurichten ist.
Ich hätte Dir gerne geholfen, dass Du das Beispiel aus dem Wiki zum Laufen bekommst (ohne es zu kennen). Wenn Du es anders machen möchtest: ok, aber ohne mich.

ernst1024

#9
Hi, bemerkenswert finde ich ja deine Einleitung zur Frage. Ich habe mich zu dem Thema schon hinlänglich geäußert.

Zu Lösung deines Problems  kann ich leider auch nicht viel beitragen, kann leider auch kein Perl. Ich denke aber man kann das Bsp aus Wicki nicht 1:1 übertragen, da er hier von einem Textlog ausgeht, du aber ja dbLog nutzt. Ohne das entsprechende Text-Logfile kann man schwer nachvollziehen was er da macht. Klar ist er übergibt einen Zeitraum, den Namen des Logfiles und eine dritte Variable die er $cspec nennt. Das ist möglicherweise in welcher Spalte sich der zu bearbeitende Wert befindet.
Kannst du vielleicht paralell mal einen textlog anlegen, dann könnte man das nachvollziehen?

Nachtrag: $menge müsste aber doch funktionieren?
Gruß Ernst

the ratman

@ernst1024
juhuuch denke aber man kann das Bsp aus Wicki nicht 1:1 übertragen, da er hier von einem Textlog ausgeht, du aber ja dbLog nutztdu hast mein problem in 0,nix erkannt und das ohne programmierkenntnisse *lach* da könnten sich einige n stück abschneiden.
nö im ernst, die idee mit dem textlog is gar ned blöd. werd ich machen. dann weiß ich wenigstens, ob das ganze überhaupt rennt.

@dev0Es gibt in Fhem weder die Syntaxjessas, dass weiß sogar ich. tschuldige, dass ich so faul war und anstelle attribut attr geschrieben hab. das sollt kein syntax sein, sondern nur verdeutlichen, dass ich nicht "state" verwende. im übrigen will ich nicht irgendwas anders machen, sondern schlicht und ergreifend nur wissen, wie ichs generel zum laufen bringe.

was soll ich noch sagen zu? in der zeit, in der du mich jetzt zurecht gewiesen hast und deine überlegenheit mir gegenüber überdeutlich zur schau getragen hast, hätte man mein problem mit deinem wissen wahrscheinlich schon 10 mal mit nem goldenen rand drum rum lösen können.
auch gut: hast du unnötig deine zeit verschwendet und mir wurde nicht geholfen - so tragen wir beide das selbe schicksal des "sinnlos vorm bildschirm sitzens". ich fang aber durchaus an, die von dir anfangs erwähnten leute zu verstehen.
da ich keine lust auf streitereien hab - bitte ignoriere mich einfach in zukunft. du würdest dich ja eh nur über die unmöglich dämliche art von mir ärgern ...
→do↑p!dnʇs↓shit←

ernst1024

Zitat von: the ratman am 19 April 2016, 15:33:59

nö im ernst, die idee mit dem textlog is gar ned blöd. werd ich machen. dann weiß ich wenigstens, ob das ganze überhaupt rennt.


nochmal gefragt, wird denn $menge richtig angezeigt?  Das mit logdb betrifft ja nur die Sachen die myDiff() durchlaufen also last1hours und wie sie heissen
Gruß Ernst

the ratman

also in der wetterstation selber ja "Regenmenge Sammlung   36.875" - da baut er die $menge draus, scheint mir

in der RegenmengeOffset ists schon fraglich: "wert 36.58 2016-04-19 00:00:00" somit ist eigentlich der wert vom ersten tag immer noch
das sollte dann ja eher irgendwas um 0.029 rum sein vom gestrigen tag
allerdings hab ich jetzt so viel in dem zeug rumngerührt, dass ich nicht mehr sagen kann, wann der was geschrieben hat.

hab mal spaßeshalber den at-befehl angworfen*00:00:00 { my $offset = ReadingsVal("Wetterstation", "rain", 0); fhem("set RegenmengeOffset $offset"); }es tut sich mal eindeutig nichts im filelog und auch das fehlerlog schweigt dazu.
→do↑p!dnʇs↓shit←

ernst1024

Hab mal versucht mich da einzulesen. Bin mir ziemlich sicher dass er da die Spaltennummer übergibt in der der zu suchende Wert im logfile steht:

er verwendet in myDiff:  get $logfile - - $period_s $period_e $cspec

wenn man sich dann mal die Syntax von get anschaut dann passt das, wobei die beiden -- Platzhalter für optionale <infile> <outfile> stehen

also da musst du ansetzen und  das entsprechende reading aus logDB übergeben.
Gruß Ernst

the ratman

dank dir

mal schaun, ob ich das dann auf die reihe krieg, sobald der kasten mal testweise wenigstens ins filelog schreibt.
ich denk mal, dass ich das bei 0 anfangen werd müssen. nach meinem rumgerühre fehlt mir noch mehr der plan als vorher *g* wenn das überhaupt noch möglich ist.
→do↑p!dnʇs↓shit←