PT8005 auslesen - Messwert an ein externes Script schicken

Begonnen von enes1977, 21 Mai 2021, 11:17:42

Vorheriges Thema - Nächstes Thema

enes1977

Hallo

Habe ein PT8005 installiert & konfiguriert auf einem Raspi. Die Ausgabe ist folgende im /opt/fhem/log/pt8005-<datum>.log file:
2021-05-21_10:19:06 pt8005 soundlevel: 56.6 av15  54.9


Ich will das bei einem Pegelwert ab 100 ein externes Script "/usr/local/bin/SMCP" aufgerufen wird und dann folgendes übergeben wird  "Datum Uhrzeit pt8005 soundlevel: xx.x ".
Habe irgendwie überhaupt keinen Plan wie ich das angehen soll.

Vielen vielen DANK im Voraus.


Otto123

Hi,

Das sind natürlich mehrere Aufgaben :)

Vielleicht hilft Dir zur Einarbeitung meine Notiz?

Wenn Du die Zeile als Event hast kannst Du mit einem notify reagieren und den Event komplett als Parameter an dein Script übergeben.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

enes1977

Hallo

Danke für die Antwort. Jetzt stellt sich für mich die Frage wo/wie ich die gemessenen Werte auslesen kann? Es werden jeden Tag neue erzeugt im /opt/fhem/log/ Verzeichnis. Aber was ist wenn ich am Tag zwei Werte über 100dB habe - wie soll ich das machen das nicht immer die gleichen Werte ständig an mein Script weiter gegeben werden?Gibt es auch einen anderen Weg wie man die Messwerte abfragen kann außer Logdateien?

Vielen Dank im Voraus

Otto123

Hi,

Du verwirrst mich. "Wer" schreibt denn die Werte in ein Log - also welchen Weg nimmt der Wert vom Messgerät in die Log Datei im fhem/log  Verzeichnis? Ich nahm an, Du hast ein "Gerät" in FHEm welches das tut? Dort greifst Du den Wert ab, baust einen Schwellwert Trigger und startest Dein Script.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

enes1977

Hallo

Um ehrlich zu sein uns verwirrt das auch! Das FHEM schreibt Werte ins /opt/fhem/pt8005*.log (2021-06-01_12:44:52 pt8005 soundlevel: 54.8 av15  56.3). Ich habe mal die Werte verglichen zwischen tatsächlich gemessenen und im Logfile und diese sind unterschiedlich wieso auch immer. Deshalb meine Frage ob man direkt über das /dev/ttyUSB0 die ankommenden Werte abfangen, Schwellwert ermitteln(also ab 100dB) und gleich an mein Script schicken kann. Und danke nochmals für das Zusenden des Links. Wenn ich mich nicht täusche muss man ja den Block mit dem $EVENT im Artikel ins /opt/fhem/fhem.cfg eintragen oder?

Vielen Dank für die Mühen

Otto123

Hi,

der Einzige der in die fhem.cfg schreiben sollte ist FHEM selbst, wenn man save drückt oder eingibt - nachdem man den Code über die Weboberfläche (Kommandozeile oder Raw Definition) eingeben hat.
Der "Block mit dem $EVENT" ist ja nur ein prinzipielles Beispiel und hat nichts unmittelbar mit deinem Fall zu tun.

Wie soll man Dir helfen, wenn Du nicht weißt was Dein System tut?  :o

Gib doch mal ein:
list -R pt8005
in der FHEM Kommandozeile ein und poste die Ausgabe in Codetags -> https://forum.fhem.de/index.php/topic,71806.0.html
Vielleicht wird damit die Glaskugel etwas heller.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

enes1977

Hallo

Hier ist der Output


define pt8005 PT8005 /dev/ttyUSB0

define FileLog_pt8005 FileLog ./log/pt8005-%Y-%m-%d.log pt8005:soundlevel:.*

define Sound notify SoundPegel { fhem "set pt8005 $EVENT" }

setstate FileLog_pt8005 active
setstate FileLog_pt8005 2021-06-08 09:01:50 linesInTheFile 257

setstate Sound active
setstate Sound 2021-06-01 09:26:52 state active

setstate pt8005 60.1 dB(A) [av15 60.8 dB(A)]
setstate pt8005 2021-06-08 09:01:50 mode normal
setstate pt8005 2021-06-08 09:01:50 overflow
setstate pt8005 2021-06-08 09:01:50 range 30-130 dB
setstate pt8005 2021-06-08 09:01:50 soundav60 60.6
setstate pt8005 2021-06-07 22:02:50 soundavday 56.0 dB(A)
setstate pt8005 2021-06-08 06:07:50 soundavnight 56.6 dB(A)
setstate pt8005 2021-06-07 22:02:50 soundday 54.6 56.0
setstate pt8005 2021-06-08 09:01:50 soundlevel 60.1 av15  60.8
setstate pt8005 2021-06-08 09:01:50 speed fast
setstate pt8005 2021-06-08 09:01:50 state 60.1 dB(A) [av15 60.8 dB(A)]


MfG

Otto123

#7
Ok so wird es doch etwas klarer :)
Du kannst zur Übung noch folgendes tun: setzt Dich vor den Eventmonitor, gib als Filter pt8005.* ein und erzeuge Dir ein notify. Details findest Du hier https://wiki.fhem.de/wiki/Notify

Das kann dann z.B. so aussehen, das Beispiel wird Dir Logeinträge im normalen FHEM Log erzeugen
define n_pt8005 notify pt8005:soundav60:.* {Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT"}
Das kannst Du so erweitern:
defmod n_pt8005 notify pt8005:soundav60:.* { if ($EVTPART1 > 100) {Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT"}}
Das würde der erste Teil Deiner Aufgabe sein.
Du kannst auch so mit Deinem Script testen:
defmod n_pt8005 notify pt8005:soundav60:.* { if ($EVTPART1 > 100) { fhem(" \"/usr/local/bin/SMCP Datum Uhrzeit pt8005 soundlevel: xx.x \" ") }
Ist aber vermutlich nicht das was Du wolltest, Du musst jetzt noch die Werte auslesen und anstatt der festen Text eingeben.
Das machen wir in der Fortsetzung :) Du hast jetzt erstmal Hausaufgaben :)

Du kannst als trigger auch soundlevel nehmen, dort hast Du dann drei Werte $EVTPART1-3, damit hättest Du im $EVENT gleich deine letzten beiden Übergabeparameter stehen, wenn Du wirklich alle drei Werte an das Script übergeben willst.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz