Loggen bestimmter Readings ESP

Begonnen von M_I_B, 08 Juli 2019, 12:31:04

Vorheriges Thema - Nächstes Thema

M_I_B

... irgendwie bin ich zu doof dafür, obwohl es ja nun wirklich nicht mein erstes Logfile ist ...

Ein ESP (ESPEasy) sendet alle 5 Minuten einen Datensatz an FHEM. Das funktioniert so weit wirklich sehr gut. der Haken daran ist allerdings, das der ESP die Daten nicht nur einmal sendet, sondern einen ganzen Satz der selben Daten in bunter Mischung. Als Beispiel hier mal solch ein Datensatz:

2019-07-08_00:20:15 ESPEasy_ESP_test presence: present
2019-07-08_00:20:15 ESPEasy_ESP_test B: 0.23 H: 64.52 P: 1012.55 T: 13.40 V: 4.44
2019-07-08_00:20:39 ESPEasy_ESP_test B: 0.11
2019-07-08_00:20:39 ESPEasy_ESP_test B: 0.11 H: 64.52 P: 1012.55 T: 13.40 V: 4.44
2019-07-08_00:20:39 ESPEasy_ESP_test B: 0.11 H: 64.52 P: 1012.55 T: 13.40 V: 4.44
2019-07-08_00:20:39 ESPEasy_ESP_test V: 4.45
2019-07-08_00:20:39 ESPEasy_ESP_test B: 0.11 H: 64.52 P: 1012.55 T: 13.40 V: 4.45
2019-07-08_00:20:39 ESPEasy_ESP_test T: 13.27
2019-07-08_00:20:39 ESPEasy_ESP_test P: 1012.57
2019-07-08_00:20:39 ESPEasy_ESP_test H: 64.79
2019-07-08_00:20:39 ESPEasy_ESP_test B: 0.11 H: 64.79 P: 1012.57 T: 13.27 V: 4.45
2019-07-08_00:20:40 ESPEasy_ESP_test B: 0.23
2019-07-08_00:20:40 ESPEasy_ESP_test B: 0.23 H: 64.79 P: 1012.57 T: 13.27 V: 4.45
2019-07-08_00:20:40 ESPEasy_ESP_test V: 4.44
2019-07-08_00:20:40 ESPEasy_ESP_test B: 0.23 H: 64.79 P: 1012.57 T: 13.27 V: 4.44
2019-07-08_00:20:43 ESPEasy_ESP_test B: 0.23 H: 64.79 P: 1012.57 T: 13.27 V: 4.44
2019-07-08_00:20:44 ESPEasy_ESP_test B: 0.23 H: 64.79 P: 1012.57 T: 13.27 V: 4.44


B = Brightness in LUX
H = Humidity in %
P = Pressure in mBar
T = Temperature in °C
V = Cell- Voltage in V

Für mich interessant sind natürlich nur die zusammengefassten Werte in "state", die ich gerne loggen möchte. "Ist ja ganz easy" dachte ich mir, aber weit gefehlt... Ich bekomme es einfach nicht gebacken...

Wenn ich  ...

define ESP_test_log FileLog ./log/%Y-%m_ESP_Test.log ESP_test:state:.*

definiere, passiert mal gar nix (leeres Log). auch andere Varianten ergeben ein leeres Log. Definiere ich hingegen ...

define ESP_test_log FileLog ./log/%Y-%m_ESP_Test.log ESP_test
... oder auch ...
define ESP_test_log FileLog ./log/%Y-%m_ESP_Test.log ESP_test:.*

... dann erhalte ich obige Datenmenge im Logfile.

Was zur Hölle übersehe ich dabei?

Anbei noch das Listing des ESP:
Internals:
   .AttrList  IODev Interval adjustValue colorpicker:RGB,HSV,HSVp deepsleep:0,1 disable:1,0 disableRiskyCmds disabledForIntervals displayTextEncode:1,0 displayTextWidth do_not_notify:0,1 event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat:textField-long timestamp-on-change-reading mapLightCmds:lights,nfx maxCmdDuration:slider,0,0.25,15,1 parseCmdResponse pollGPIOs presenceCheck:1,0 readingPrefixGPIO readingSuffixGPIOState readingSwitchText:1,0,2 rgbGPIOs setState:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,25,50,100 useSetExtensions:0,1 userSetCmds:textField-long wwcwGPIOs
   DEF        192.168.1.221 80 espBridge ESP_test
   ESP_BUILD  20103
   ESP_BUILD_GIT mega-20190630
   ESP_BUILD_NOTES  - Mega
   ESP_NODE_TYPE_ID ESP Easy Mega
   ESP_SLEEP  RPI Easy
   ESP_UNIT   20
   ESP_VERSION 2
   FUUID      5d220290-f33f-a7b8-75b7-605c50a9e5fa7ac0
   HOST       192.168.1.221
   IDENT      ESP_test
   INTERVAL   300
   IODev      espBridge
   LASTInputDev espBridge
   MAX_CMD_DURATION 1
   MSGCNT     28
   NAME       ESP_test
   NOTIFYDEV  global
   NR         2668
   NTFY_ORDER 50-ESP_test
   PORT       80
   STATE      B: 1787.50 H: 42.04 P: 1013.43 T: 22.53 V: 4.42
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    2.18
   espBridge_MSGCNT 28
   espBridge_TIME 2019-07-08 12:28:27
   .attraggr:
   .attrminint:
   READINGS:
     2019-07-08 12:28:22   B               1787.50
     2019-07-08 12:28:17   H               42.04
     2019-07-08 12:28:17   P               1013.43
     2019-07-08 12:28:17   T               22.53
     2019-07-08 12:28:17   V               4.42
     2019-07-08 12:28:56   presence        present
     2019-07-08 12:28:27   sleepState      sleeping
     2019-07-08 12:28:56   state           B: 1787.50 H: 42.04 P: 1013.43 T: 22.53 V: 4.42
   helper:
     fpc        1562581130
     pm:
       Encode     1
       JSON       1
     received:
       B          1562581702
       H          1562581697
       P          1562581697
       T          1562581697
       V          1562581697
   sec:
     admpwd     
Attributes:
   IODev      espBridge
   Interval   300
   group      ESPEasy Device
   presenceCheck 1
   readingSwitchText 1
   room       ESPEasy
   setState   3

Wzut

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

M_I_B

... nope ... addStateEvent ist in einem ESP- Device nicht zugelassen ... (ich unterstelle jetzt mal, das Du dieses Attribut meintest mit Deinem unkommentierten Link)
ESP_test: unknown attribute addStateEvent. Type 'attr ESP_test ?' for a detailed list.
ESP_test: unknown attribute ?, choose one of alias comment eventMap group room suppressReading userReadings verbose IODev Interval adjustValue colorpicker deepsleep disable disableRiskyCmds disabledForIntervals displayTextEncode displayTextWidth do_not_notify event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat timestamp-on-change-reading mapLightCmds maxCmdDuration parseCmdResponse pollGPIOs presenceCheck readingPrefixGPIO readingSuffixGPIOState readingSwitchText rgbGPIOs setState useSetExtensions userSetCmds wwcwGPIOs alarmDevice alarmSettings cmdIcon devStateIcon devStateIcon devStateStyle icon sortby webCmd webCmdLabel widgetOverride userattr

kabanett

Nur zum Verständnis. Hast du einen Dummy auf dem ESP konfiguriert der die Daten zusammenfasst?
Hardware: Fhem auf Raspi3 / selbtsbau CUL 433 und 868 MHz / MAX Thermostate / IT-Dosen nur noch Weihnachten / diverse ESP Aktoren/Sensoren / X10 Fernbedienung / Shelly 1, 1L, 2, 2.5, Dimmer, RGB2 / LaCrosseGateway / Zigbee2531 / diverse Zigbee Aktoren/Sensoren

M_I_B

#4
... nein ...
Die beiden Sensoren (BME280 & BH1750) werden beim Aufwachen über einen Portpin eingeschaltet, melden dann ihre Werte direkt an den FHEM-Controller (Send to Controller). Dann schläft der ESP wieder für 5 Minuten, bis das Spiel von vorn beginnt.

EDIT: Das Ganze ist noch im Versuchsstadium um festzustellen, in wie weit die Sache mit einer 18650-Zelle und Sleepmode realisierbar ist. Final sollen dann insg. 4 Stück dieser Sensoren zum Einsatz kommen, die dann jeweils unter dem Dachüberhang auf allen 4 Hausseiten montiert werden und in FHEM dann jeweils ein gleitender Mittelwert gebildet wird.

kabanett

OK

Ich selbst mach das immer über einen Dummy der die gesammelten Daten sendet und als einziger "Send to Controller" hat.
Ich denke das ist in deinem Fall auch die einfachste Lösung. Zumal sich Fhem nicht mit unnötigen Sachen beschäftigen muss ;)

Gruß
Hardware: Fhem auf Raspi3 / selbtsbau CUL 433 und 868 MHz / MAX Thermostate / IT-Dosen nur noch Weihnachten / diverse ESP Aktoren/Sensoren / X10 Fernbedienung / Shelly 1, 1L, 2, 2.5, Dimmer, RGB2 / LaCrosseGateway / Zigbee2531 / diverse Zigbee Aktoren/Sensoren

M_I_B

... hmmm ... Da hast Du wohl recht: Ursachenbekämpfung ist immer besser als Sympthombekämpfung ...

Leider bin ich in Sachen ESPEasy noch nicht fit genug; bin froh, das ich diese Sache hinbekommen habe. Magst Du mir mal Deinen Dummy als Beispiel zukommen lassen, damit ich lernen kann, wie man sowas macht?

Wzut

Zitat von: M_I_B am 08 Juli 2019, 12:54:11
(ich unterstelle jetzt mal, das Du dieses Attribut meintest mit Deinem unkommentierten Link)
nein, ich meine das addStateEvent bei FileLog , btw. die Commandref hat da auch einen Fehler, da der Anker nicht beim FileLog sitzt sondern beim DbLog.
Aber anyway , man sollte langsam wissen das state eine Sonderrolle hat und wenn man es unbedingt haben will in der Ausgabe es halt selbst einschalten muß :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

M_I_B

... wenn man sich ständig und jeden Tag damit beschäftigt, dann sollte man das wissen; da gebe ich Dir unumwunden recht. Nur ich beschäftige mich eben nicht jeden Tag damit. Es vergehen schon mal Monate, in denen ich das System nicht anfasse (warum auch, wenn alles läuft?). Da vergisst man schon mal was oder kann bestimmte Zusammenhänge schlicht nicht herstellen... woi?!  :P

kabanett

Ich bin zZ. nicht zu Hause, sonst hätte ich dir meine Configs angeboten ;)
Hier im Link ist das sehr gut nachvollziehbar. Auch die Rules sind sehr leicht verständlich, denke ich.
https://diyprojects.io/esp-easydht22bmp180-create-virtual-bme280-barometer/
Hardware: Fhem auf Raspi3 / selbtsbau CUL 433 und 868 MHz / MAX Thermostate / IT-Dosen nur noch Weihnachten / diverse ESP Aktoren/Sensoren / X10 Fernbedienung / Shelly 1, 1L, 2, 2.5, Dimmer, RGB2 / LaCrosseGateway / Zigbee2531 / diverse Zigbee Aktoren/Sensoren

M_I_B

... danke Dir! Ziehe ich mir mal rein. Mal sehen, ob ich das gebacken bekomme. Wenn nicht, gehe ich Dir noch mal auf die Nerven  ;D

M_I_B

... bekomme ich auch nicht hin ...  :-[ :-[ :-[

Generic Dummy erzeugt als Quad. Das ist Device/Task 5. Darin in den 4 Feldern die Value-Namen eingetragen, das Ganze eingeschaltet und folgende Regel eingetragen:

on Clock#Time=All,**:01 do
  TaskValueSet 5,1,[THP#T]
  TaskValueSet 5,2,[THP#H]
  TaskValueSet 5,3,[THP#P]
  TaskValueSet 5,4,[LUM#B]
endon


Wenn ich das richtig verstanden habe, soll hier der Timer jede Minute die Befehle ausführen. Jeder Befehl bezieht sich auf die Task- Nummer, damit er weiß wohin damit. DIe Ziffer hinter dem Komma gibt das Feld im Dummy an,l dahinter in eckigen Klammern das Gerät nebst "reading"...

Bleibt alles auf 0,00...


dirk.k

Guck mal in das Logfile vom ESPEasy.
Da habe ich schon oft die Ursache von Problemen erkannt.
Besonders schauen, ob das Clock-event triggert oder es überhaupt clock-events gibt.
Ist die Clock gesetzt / per NTP gesynct?

M_I_B

.. ja, ich schaue mal... Und ja, die Uhr läuft und bekommt die Zeit von einem lokalen NTPd ...

dirk.k

Du hast da noch nen kleinen Denkfehler...
deie Zeitdefinition "on Clock#Time=All,**:01 do" läuft immer dann, wenn die Stunden:minuten-Kombi auf 01 endet.
Also jede Stunde eine Minute nach voll.

Anbei noch meine Definition meines Watchdog, da bei gestörtem WLAN/MQTT oft nur ein Reboot hilft.

//on Clock#Time=All,**:30 do //will run half past every hour
on Clock#Time=All,**:*9 do //will run alle 10 minuten
//on Clock#Time=All,**:** do //will run alle 1 minuten
   TaskValueSet 12,1,%uptime%-[MQTT-IN#uptimePong]
   if [Dummy#Watchdog] > 60 
      reboot
   endif
endon