Passenden Wert aus Mehreren in state greifen?

Begonnen von M_I_B, 18 Juli 2016, 10:57:04

Vorheriges Thema - Nächstes Thema

M_I_B

Hallo liebe Leute,

ich habe schon wieder einen ::)
Im Zuge meiner Aufräumarbeit hatte ich diverse Plots derart umgestellt, das die nicht direkt aus dem Device kommen, sonder über den Umweg Dummy. Das macht einiges übersichtlicher und hat noch ein paar andere Vorteile, auch in Bezug auf die Logfiles.
In dem Zusammenhang schreibe ich z.B. die Daten der beiden HM-Bewegungsmelder in einen Dummy:

So baue ich da zusammen:
define PIR_set DOIF ([+300] or [HM2BB1:motion] eq "on" or [HM2BB2:motion] eq "on") \
(set PIRdy [HM2BB1:motion] [HM2BB1:brightness] [HM2BB1:battery] [HM2BB2:motion] [HM2BB2:brightness] [HM2BB2:battery] {(([HM2BB1:brightness]+[HM2BB2:brightness])/2)})
attr PIR_set do always


Das steht dann im Dummy (PIR1: Bewegung, Helligkeit, Batterie, PIR2: d.t.o., Mittelwert Helligkeit)
state     off 205 ok off 209 ok 207

Nun habe ich die Befürchtung, das ich mir mit dieser Art der Werteerfassung ein Eigentor geschossen habe. Denn im Moment grübel ich darüber nach, wie ich in einer DOIF an die einzelnen Werte heran komme, z.B. an den letzten Duchschnittswert.
Beim Plot kann man das ja ganz geschickt mit Angabe der Spalte regeln (#PIRdy_log 9:PIRdy::), aber wie macht man dass dann im DOIF?

... ja ok, ich hätte natürlich dem Dummy weitere Readings spendieren können, aber das ist mir erst heute Morgen aufgefallen. Wenn es also eine Möglichkeit gibt, die Daten in "state" irgendwie via Array o.ä. heraus zu holen, wäre ich für sachdienliche Hinweise sehr dankbar ...  8)

Per

Ist eigentlich kein DOIF Problem!

Zitat von: M_I_B am 18 Juli 2016, 10:57:04Wenn es also eine Möglichkeit gibt, die Daten in "state" irgendwie via Array o.ä. heraus zu holen
Splitten und anschließend wie beim Array ansprechen.

M_I_B

#2
...öhhhhh... Ok, also mit PERL innerhalb der DOIF- Bedingung? Ufff... und das mir, wo ich doch krampfhaft versuche, einen möglichst großen Bogen um PERL zu machen :'(
Um das mal einschätzen zu können... Wie würde denn so ein Split in einer DOIF aussehen? Ich traue mir das selbst nicht zu ...

EDIT sagt, ich bin zu doof dazu :o
Ich habe bis jetzt herum probiert, aber so wirklich ist da nichts bei raus gekommen. Daher habe ich mich entschlossen, die entsprechenden Dummys mit zusätzlichen Readings auszustatten. wobei ich die gennannte Zeile in "state" für's Logfile behalten wollte. Nur das klappt irgendwie auch nicht >:(

Entweder ich definiere für's LogFile ...
define PIRdy_log FileLog ./log/%Y-%m_OD_HM-PIR.log PIRdy:.*
... oder ....
define PIRdy_log FileLog ./log/%Y-%m_OD_HM-PIR.log PIRdy
... dann habe ich alle Readings im LOG, oder ich versuche es mit ...
define PIRdy_log FileLog ./log/%Y-%m_OD_HM-PIR.log PIRdy:state
... oder ....
define PIRdy_log FileLog ./log/%Y-%m_OD_HM-PIR.log PIRdy:state.*
... oder ...
define PIRdy_log FileLog ./log/%Y-%m_OD_HM-PIR.log PIRdy:state:.*
... dann kommt gar nichts mehr an :o

Gehört zwar nicht wirklich ins DOIF- Board, aber da der Thread schon mal offen ist ...

Wie erhalte ich für das Logfile NUR den Inhalt von "state", wenn in dem Dummy noch weitere Readings vorhanden sind?

M_I_B

... hat sich erst mal erledigt ... Ich lege mal eine FHEM- Pause ein ... Es ist mir im Moment einfach zu anstrengen und ineffektiv, von 8 Stunden Arbeit an FHEM 7 Stunden mit Suchen und Probieren zu verbringen.

Per

Da Fhem auf Perl basiert, leg dir ein Perl-Grundwissen zu. Habe ich auch hinter mir.
Und glaube mir: jede andere Steuerung verlangt eine Einarbeitung, außer du bezahlst jemanden dafür. Allerdings muss du dem auch erklären, wass du willst. Sowas ist in etwa wie "einmal Auto TÜV-fertig machen, bitte".

M_I_B

#5
... mein Problem hat mit PERL nichts zu tun. Immerhin laufen hier jetzt rund 900 Definitionen, welche auch in der Masse ohne PERL- Einbindung auskommen.
Mein Problem besteht hauptsächlich darin, das man sich hier immer weniger zu Fragen traut und wenn man sich dann doch durchgerungen hat, i.d.R. auf ComRef oder Wiki verwiesen oder noch sinnfreiere Antworten (bis hin zu Anmache und Beleidigungen) erhält. Das geht nicht nur mir, sondern ganz vielen "Einsteigern" hier so, wie ich aus einigen PN's entnehmen konnte, die dann vielleicht nicht so ein dickes Fell haben wie ich und das Thema FHEM schlicht und ergreifend für sich beerdigen, ohne hier, im Gegensatz zu mir, ein Wort darüber zu verlieren... Denn eine auch noch so große Community nutzt gar nichts, wenn dort alle Themen und Fragen unterhalb ProfiLevel nur gelegentlich mit Ergebnis und vielleicht sogar Lerneffekt behandelt werden...
Glaube mir einfach mal, das ich mir (in Angesicht der hier i.d.R. zu erwartenden Antworten) vorher sehr genau überlege, ob ich denn eine Frage stellen darf und im Vorfeld die 7 der 8 Stunden intensiv mit Studieren der ComRef, Wiki, Forum u.a. Quellen verbracht habe. Nur kann weder die ComRef, noch das WiKi auf alle denkbaren Konstellationen eingehen, wobei das Wiki an vielen Stellen den Namen nicht verdient, da fast 1:1 aus der ComRef übernommen und/oder aus Profi- Sicht verfasst; da nenne ich gerne Beispiele. Und wenn man dann noch (wie ich gestern ) nach stundenlangem Probieren feststellen muss, das man einem m.A.n. schnöden BUG aufgesessen ist (kommentiere mal eine Codezeile aus, die am Ende ein "\" hat und von einem "define" gefolgt wird ...), dann drängt sich (für mich zumindest) die Frage auf, ob ein solcher Lebenszeit- Aufwand und Ärger sich letztlich lohnt oder ob es vielleicht Alternativen gibt, die stressfreier und mit hilfreicherer Community im Hintergrund umzusetzen sind...

Und um nicht missverstanden zu werden: Ich habe vollstes Verständnis dafür, das die Profis und Entwickler hier besseres zu tun haben, als den doofen Anfängern zu helfen. Auch sehe ich natürlich die bis dato anhaltende und enorme Leistung, die von diesen Leuten erbracht wurde und wird. Aber genau da liegt m.E. das Problem, das hier das "Mittelfeld" im Forum fehlt, welches über die Anfängerfehler bereits hinweg ist und Anfängern gerne hilft resp. mit dem Fragenden zusammen eine Lösung erarbeitet, aus der nicht nur der Fragende, sondern auch der im hintergrund Lesende was lernen kann...

EDIT: ... und wie ich gerade feststelle, habe ich schon wieder 45 Minuten damit verbracht, mich zu erklären und ein Problem aus meiner Sicht darzustellen in dem Wissen, das es rein gar nichts ändern wird und ich vielmehr damit eher noch mehr Schelte und Schlimmeres provoziert habe; nun ärgere ich mich über mich selbst...

ZitatDa Fhem auf Perl basiert, leg dir ein Perl-Grundwissen zu.
Was ist das denn für eine Argumentation? Ich muss ja auch kein Grundwissen über C++, Android & Co. besitzen, um meinen Windoof- Rechner, mein Smartphone und meinen Fernseher zu programmieren... Wenn das Basis für die Nutzung von FHEM sein soll, dann wäre es konsequenter, alles in PERL zu machen...
Zitat...wass du willst. Sowas ist in etwa wie "einmal Auto TÜV-fertig machen, bitte".
... und das Zeigt mir zumindest, das Du den Thread bestenfalls überflogen hast, aber den Inhalt resp. die Frage zu meinem dort dargestellten Problem nicht erfassen konntest...

So, nun is aber gut...

marvin78

Du kommst bei manchen Dingen nicht an Perl vorbei. Deine 7 von 8  Stunden des Probierens und Suchens kommen teilweise zu Stande, weil du dich mit gewissen Dingen nicht auseinander setzen möchtest und  lieber andere die Arbeit erledigen lässt. Setze dich mit Perl und den FHEM spezifischen Eigenheiten auseinander (so viel benötigt man gar nicht) und du wirst sehen, dass du viele Probleme auf viel einfachere Art und Weise angehen kannst. Du machst es nämlich nicht nur dir selbst kompliziert, machst du es den Helfern auch noch unnötig schwer, dir zu helfen. Und das alles nur, weil du dich gewissen Mitteln verweigerst (die dir hier durchaus sehr hilfreich angeboten werden) und die Hilfe teilweise sogar ablehnst, wenn sie dir nicht direkt passt. Nimm die Ratschläge doch einfach an. Ich frage mich, warum immer alle auf Helfer einhacken, wenn sie als wirklich hilfreiche Empfehlung Perl und lesen der Doku vorschlagen. Dass man Bequem ist oder gewisse Dinge meidet, wie der Teufel das Weihwasser, ist NICHT die Schuld der Helfer.

Und zum Rest: FHEM ist kein Klicki-Bunti System und das Forum hier wird nunmal zurecht von den meisten Helfern als Hilfe zur Selbsthilfe verstanden. Man kann und muss es so sagen: Wer damit nicht zurecht kommt, für den ist FHEM nicht das Richtige. Beleidigungen sehe ich hier im Forum übrigens nicht. Das kann man mal behaupten, dadurch wird es aber nicht wahr. Einen bequemen Weg mit FHEM gibt es im Übrigen nicht.

M_I_B

... ich glaube, Du verkennst da so ein bisschen die Realität und siehst es ausschließlich von Deiner Seite resp. der Seite des Profis ...
Hilfe zur Selbsthilfe ist grundsätzlich eine gute Idee. Aber die übliche Vorgehensweise ala "... lies die ComRef/WiKi ..." setzt voraus, das dem Fragenden stumpf unterstellt wird, eben das nicht getan zu haben, was im Weiteren impliziert, der Fragende möchte nur eine Lösung präsentiert bekommen, ohne selber was dafür zu tun. Das ist einer der Sümpfe, in welche man hier immer und immer wieder fällt.
Ein anderer Sumpf ist, um mal bei der Metapher zu bleiben, das viele, auch ich, bei einer Frage auch gerne verstehen möchten, warum das genau so ist und nicht anders. Denn wenn ich das nicht verstehen möchte, könnte man daraus vielleicht ableiten, was Du bereits unterstellt hast, nämlich das man nur fertige Lösungen präsentiert haben möchte. Im Weiteren wäre der Fragende dann auch in Zukunft nicht in der Lage, ähnlich geartete Aufgaben selbstständig zu lösen. Dem ist aber in der Masse bei weitem nicht so, was ich hier einfach mal unterstelle: Die meisten Fragenden wollen schon gerne wissen, warum das so ist und wie genau die Regeln dazu sind. Ich beziehe das mal auf die "... mach mal TÜV (heißt übrigens schon länger HU)..." Sache, welche Per freundlicher Weise verlinkt hat. Das dort angegebene Beispiel ist abgeleitet aus der ComRef, funktionierte aber auch nach stundenlangem Rumprobieren nicht wie erwartet, so das die Frage ins Forum gestellt wurde. Letztlich ist nun klar, das mir entgangen ist, das die ComRef sich ausschließlich auf den Ausführungsteil bezieht und Berechnungen im Bedingungsteil anders aufzubauen sind. Nur gesehen habe ich es zu dem Zeitpunkt nicht und auch Damian's knappe Antwort ohne weitere Hinweise dazu haben mich vorerst nicht auf den richtigen Gedanken gebracht; ich konnte mir nicht vorstellen resp. bin überhaupt nicht darauf gekommen, das hier "vorne" und "hinten" unterschiedlich vorgegangen werden muss. Auch ein WiKi- Beitrag zu dieser (a.m.S.) Anti-Logik ist nirgends zu finden.
Was ich versuchte als Ergebnis zu bezwecken, war also vollkommen klar. Den meisten Profis dürfte mein Fehler auch recht schnell ins Auge gesprungen sein. Aber an Stelle einer Erklärung ala "... du musst darauf achten, das "vorne" und "hinten" unterschiedliche Regeln gelten. Vorne wird immer so ... gerechnet, hinten immer so ...", kommen erst einmal solche bekannten Sprüche wie von "automatisierer" (Unterstellung, siehe weiter oben). Auch auf meine Frage, warum denn vorne und hinten anders gerechnet werden muss, hab ich bis dato keine Erklärung (erhalten). Und in Bezug auf PERL kann ich mir kaum vorstellen, das auch dort im Bedingungs- und im Ausführungsteil andere Regeln für Berechnungen gelten. Das ist einfach unlogisch und kommt somit erst einmal bei Problemen gar nicht erst als Option zum Tragen. Wenn ich nicht Damian's Hinweis einen Tag später richtig gedeutet hätte, würde ich immer noch daran rumhampeln.
Das Forum ist voll von solchen und ähnlichen Geschichten, gefühlt 80% der begonnenen Threads von Anfängern enden so oder ähnlich; ich kann mir nicht vorstellen, das Dir und Anderen das entgangen sein sollte...

Aber egal wie man es betrachtet: Im Moment dürfen sich alle Anfänger mit Problemen hier aus meiner Sicht grundsätzlich als Bittsteller fühlen, welche selbstverständlich auch dumme Sprüche u.ä. zu ertragen haben. Man hat hier aus meiner Empfindung immer irgendwie das Gefühl, nur geduldet zu sein und immer von oben herab behandelt zu werden. Eine effektive Zusammenarbeit zwischen einem Fragenden und einem (oder mehreren) Profis, um gemeinsam eine Lösung zu erarbeiten, kommt hier i.d.R. nie zu tragen, im Gegensatz zu den Threads, in denen Ihr (Profis) unter Euch seid und der Anfänger eh nur Bahnhof versteht. Und wenn ich mit meinem dicken Fell schon so empfinde, wie ergeht es dann erst etwas dünner besaiteten Menschen?
Natürlich ist das Forum ein rein virtueller Lebensraum, in dem sich die Masse der Leute (ich denke mal 99%?) nicht pers. kennen. Denn wenn an sich mal wahllos ein paar Threads von Anfängern nimmt und diese Kommunikation versucht ins RL (an einen Stammtisch oder Schulungsraum) zu übertragen, wird man schnell feststellen, das der Ablauf und der Ton im RL sicherlich ein ganz anderer gewesen wäre.

Unabhängig davon... Ich habe über 10 Jahre ein nicht kleines, technisch ausgerichtetes Forum geleitet. Eingestampft habe ich das Forum dann irgendwann hauptsächlich auch aus dem Grund, weil die ehemaligen Anfänger, denen immer und effektiv geholfen wurde, irgendwann auch zu Profis wurden und tatsächlich vergessen hatten, wie sie selbst mal wie der Ochs vor'm Berg standen. Da halfen auch keine Erinnerungen oder Ermahnungen. Das scheint eine gewisse Zwangsmäßigkeit zu sein, die ich mir nicht erklären kann; das Folgeforum ist im Übrigen inzwischen noch schlimmer und restriktiver als meines je war (was mich etwas mit Schadenfreude erfüllt). Aber das nur so nebenbei....


... und schon wieder habe ich reichlich Zeit und Nachdenken hier investiert ...
Also wenn das bisher hier "gesagte" vielleicht Basis für eine weitere Debatte auf Augenhöhe werden könnte, möge man den Thread gerne an einen anderen Ort verschieben. Ansonsten können wir das Thema aus meiner Sicht gerne schließen, wenn eine Fortführung unerwünscht oder ohne Folgen bleibt.

Per

Zitat von: M_I_B am 19 Juli 2016, 13:07:18und das Zeigt mir zumindest, das Du den Thread bestenfalls überflogen hast, aber den Inhalt resp. die Frage zu meinem dort dargestellten Problem nicht erfassen konntest...
Der erste Teil stimmt nicht, der zweite schon. Genau deshalb habe ich mich dort auch nicht zu Wort gemeldet.
Noch zähle ich mich nämlich zu den Anfängern, und das Einarbeiten in fremde Probleme (selbst wenn ich nicht selbst auf die Lösung komme) kann nur den Horizont erweitern. Aber manchmal verstehe ich das Problem nicht, wie soll ich da eine Lösung finden-

Im Übrigen wurde mir auch schön mehrfach bei Dingen geholfen, über die ich heute selbst nur den Kopf schütteln kann, andere wiederum, weil ich hartnäckig nachgehakt habe. Und dass die CommandRef bei so vielen Einträgen nicht mehr gut nutzbar ist (Wiki wg. mangelnder Einträge noch weniger) oder veraltet ist (Wiki noch mehr), habe ich im entsprechenden (!) Thread auch schon mal angemängelt.

Im Übrigen gibt es viele Parallelen zu anderen, ähnlichen Projekten (z.B. Rocrail), in diesen Foren geht es genau so zu. Vllt. finde ich mich deshalb hier ganz gut aufgehoben, weil ich es gar nicht anders erwartet habe?

igami

Also ich hab den Thread jetzt nur überflogen, aber DOIF bietet das schon Filtern nach Ausdrücken mit Ausgabeformatierung ein bisschen was von regex muss man dann aber doch verstehen. Zum testen gibt es da aber Seiten wie https://regex101.com/

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ht

ZitatWie erhalte ich für das Logfile NUR den Inhalt von "state", wenn in dem Dummy noch weitere Readings vorhanden sind?
Das Problem ist, dass Events für state anders geschickt werden als für alle anderen Readings. Während sonst immer der Name des Readings, gefolgt von einem :, enthalten ist, kommt bei state nur der Wert. Deshalb funktionieren die ganzen Filter mit state drin nicht. Öffne mal den Event Monitor, dort kannst Du das dann auch sehen. Ich sehe zwei Lösungsmöglichkeiten:

  • Versuch es mal mit dem Attribut addStateEvent am FileLog. Ob das mit dummy Devices geht kann ich nicht vorhersagen (in der Command Ref steht da eine Einschränkung). In dem Fall sollte die Definition mit " PIRdy:state.*" die richtige sein.
  • Wenn das nicht klappt kann man über PIRdy:<regexp> filtern und die regexp so bauen, dass nur die Events ohne : matcht. Wobei ich davon ausgehe, dass Deine Werte in state alle keinen Doppelpunkt haben. Dadurch würden alle anderen Events gefiltert, weil bei denen der Namen und : im Event vorkommen. Das ist natürlich etwas spekulativ und eher eine "Bastellösung", aber das ist leider ab und zu nötig.

Grüße,
Volker
FHEM 5.7, RasPI 2, HomeMatic über HMUSB, JeeLink Clone, Viessmann Heizung

marvin78

Zitat von: M_I_B am 19 Juli 2016, 16:55:21
... ich glaube, Du verkennst da so ein bisschen die Realität und siehst es ausschließlich von Deiner Seite resp. der Seite des Profis ...

Nein und es gibt hier nicht einen einzigen Profi bezüglich FHEM. Das soll es aber auch gewesen sein. Dein Beitrag strotzt vor Übertreibungen. Die Realtität ist so eine Sache...

M_I_B

Zitat von: ht am 20 Juli 2016, 00:57:46... dass Events für state anders geschickt werden als für alle anderen Readings. Während sonst immer der Name des Readings, gefolgt von einem :, enthalten ist, kommt bei state nur der Wert. Deshalb funktionieren die ganzen Filter mit state drin nicht.
Danke Volker! Das ist mal eine Erklärung, die ich nachvollziehen kann! Die von Dir gemachten Vorschläge werde ich direkt nach meiner FHEM-Pause mal umsetzen und schauen, welcher davon greift. Ich werde dann berichten, damit auch andere was davon haben ...

Zitat von: marvin78 am 20 Juli 2016, 07:23:00Nein und es gibt hier nicht einen einzigen Profi bezüglich FHEM. ... Dein Beitrag strotzt vor Übertreibungen. Die Realtität ist so eine Sache...
... ja ne, is klar, vor allen Dingen die Sache mit der Realität ::)
Ich will es mal so formulieren: Der erste Teil Deiner Aussage dürfte eine üble "Untertreibung" sein, bei der sich ggf. einige Leute hier auf den Schlips getreten fühlen. Der zweite Teil ist eine unbelegte Behauptung, bei der ich mich auf den Schlips getreten fühle. Der dritte Teil ist bezogen auf was/wen? Dich selbst (in Bezug auf Teil1 & 2; da darfst du dich nun von mir auf den Schlips getreten fühlen...)?