Meldung in Reading statt ins Logbuch

Begonnen von DL8EI Ralph, 25 Mai 2023, 14:39:56

Vorheriges Thema - Nächstes Thema

betateilchen

Zitat von: Otto123 am 27 Mai 2023, 09:13:19Kann sein, dass in dem Fall ein solches notify nicht reagiert. Müsste man mal gezielt probieren.

ausprobiert...

  • ein bash-Skript angelegt, das per echo einen Text liefert
  • ein at angelegt, das einmal pro Minute das bash-Skript aufruft
  • ein notify angelegt, das auf den Logeintrag reagiert

1. das bash skript:

#!/bin/bash

echo "das ist ein TestText"

-snip
2. das at device:

defmod test_at at +*00:01:00 {qx(/tmp/test.sh)}

-snip
3. das notify device:

defmod test_notify notify test_notify:.* {Debug "Logeintrag: ".$EVENT}
attr test_notify readLog 1

-snip

Als Ergebnis taucht im Logfile auf:

2023.05.27 12:38:38 3: test_at: das ist ein TestText
2023.05.27 12:38:38 1: DEBUG>Logeintrag: 2023.05.27 12:38:38 3: test_at: das ist ein TestText

2023.05.27 12:39:38 3: test_at: das ist ein TestText
2023.05.27 12:39:38 1: DEBUG>Logeintrag: 2023.05.27 12:39:38 3: test_at: das ist ein TestText

2023.05.27 12:40:38 3: test_at: das ist ein TestText
2023.05.27 12:40:38 1: DEBUG>Logeintrag: 2023.05.27 12:40:38 3: test_at: das ist ein TestText

2023.05.27 12:41:38 3: test_at: das ist ein TestText
2023.05.27 12:41:38 1: DEBUG>Logeintrag: 2023.05.27 12:41:38 3: test_at: das ist ein TestText

2023.05.27 12:42:38 3: test_at: das ist ein TestText
2023.05.27 12:42:38 1: DEBUG>Logeintrag: 2023.05.27 12:42:38 3: test_at: das ist ein TestText

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

Otto123

#16
andere Test (erzeugt keinen Logeintrag  wie Dein at)

Mein notify aus #10 mit dem Ausführungsteil {Debug "Logeintrag: ".$EVENT}
Befehle in der FHEM Kommandozeile. So wird das notify getriggert
{Log 1, 'Ein Fehler ist aufgetreten'}So wird das notify nicht getriggert
"echo 'Der Fehler aus dem Hintergrund'"
Logeinträge
2023.05.27 15:25:32 1: Ein Fehler ist aufgetreten
2023.05.27 15:25:32 1: DEBUG>Logeintrag: 2023.05.27 15:25:32 1: Ein Fehler ist aufgetreten
Der Fehler aus dem Hintergrund
Meine Vermutung wird bestätigt?

@Frank ich denke der Logeintrag ist nicht mehrzeilig. Die erste Zeile ist der Logeintrag von FHEM, der Rest wird vom Script nach stdout geschrieben und landet im Log. Dein Ansatz wird dabei nicht funktionieren.
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

DL8EI Ralph

Die auslösende at sieht so aus
define atChkSMS at *08:45:00 {system ("gammu sendsms TEXT 0123 4567890 -text 'Test SMS-Versand' ")}

Wenn es richtig funktioniert, dann sieht es im Logbuch so aus:
2023.05.27 08:42:38 1: RMDIR: ./restoreDir/save/2023-05-24
Drücken Sie Strg-C, wenn Sie unterbrechen möchten...
Sende SMS 1/1....warte auf Netz-Bestätiung..OK, Nachricht-Referenz=175
2023.05.27 08:45:07 3: atChkSMS: -1
2023.05.27 08:47:41 3: CUL_HM set HM_Klemme statusRequest noArg

Hier mal die relevanten Logauszüge, wenn es nicht funktioniert hat:
2023.05.24 10:00:00 3: FS20 set CheckAlive off
2023.05.24 10:00:00 3:

Drücken Sie Strg-C, wenn Sie unterbrechen möchten...
Sende SMS 1/1....warte auf Netz-Bestätiung..Fehler 500, Nachricht-Referenz=-1
Unbekannter Fehler.
2023.05.24 10:00:29 3: atChkSMS: -1
2023.05.24 10:07:30 3: CUL_HM set Anzeige1 statusRequest noArg
2023.05.24 11:37:30 3: CUL_HM set U_USV_Work statusRequest noArg
Fehler beim Öffnen des Geräts, es existiert nicht.
2023.05.24 11:54:04 1: RMDIR: ./restoreDir/save/2023-05-19
2023.05.24 21:08:56 3: FS20 set X6 on
Unbekannter Fehler.
2023.05.24 21:08:56 3: UNIRoll set GW_WoZi down

Aber es geht ja gar nicht primär im die auslösende at und deren Folgen, sondern
ich möchte gern generell das Erscheinen eines beliebigen im Logbuch auftauchenden Textes - hier: "Fehler" -
unanbhängig von dessen Quelle als Event notifyen können.
Ich hatte erwartet, dass das mit logRead so gelingt. Dem ist aber wohl nicht so.
Ich glaube inzwischen, dass für logRead zuvor im Logbuch bestimmte Struturen gegeben sein müssen.

Otto123 hat recht: der Eintrag in Log ist einzeilig bzw. kann einzeilig sein.

Den Umgang mit Scripten unter Linux habe ich noch nicht verstanden, in Linux bin ich noch Laie, da muss ich noch Wissen schöpfen.
Wenn ich das raus habe, dann werde ich obige Vorschläge probieren.

Danke an Alle bis hierher.
Fernmelde-Opa übernahm FHEM-Installation und kämpft sich so durch.
Installation hat FS20, Homematic und einge exotische Teile.

Otto123

Wenn Du den Aufruf anstatt mit system("") mit qx() wie in betateilchens Beispiel machst wird es ev. funktionieren. Allerdings wird dann FHEM für die Zeitdauer der Ausführung blockieren. Das ist nicht empfehlenswert.
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

DL8EI Ralph

Der Logbucheintrag ändert sich in:
sh: 1: gammu sendsms TEXT 0123 4567890 -text 'Test SMS-Versand' : not foundDarauf notifyen lässt sich wie vorher nicht.
Fernmelde-Opa übernahm FHEM-Installation und kämpft sich so durch.
Installation hat FS20, Homematic und einge exotische Teile.

Wernieman

#20
Empfehlung:
Packe lieber den Aufruf in ein Script. Dann kannst Du z.B. auch die Fehlerrückgabe des Scriptes durch $? Auswerten.

mal als Prototyp (Ungetestet)
#/bin/bash

gammu sendsms TEXT 0123 4567890 -text 'Test SMS-Versand'
error=$?

if [ $error -ne 0 ]
  then echo "Errorcode $error"
fi

Wie oben schon gesagt, kannst Du die Daten dann auch nach FHEM pushen. Da kommt es jetzt darauf an, welche Möglichkeiten DEIN Fhem bietet.

Siehe z.B. auch
https://tecadmin.net/bash-error-detection-and-handling-tips-and-tricks/
https://linuxhint.com/bash_error_handling/

Werte von FHEM an das Script, siehe "Otto":
https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html

Werte vom Script an FHEM, auch da "siehe Otto"
https://github.com/heinz-otto/fhemcl

FHEM ist eben die Unx .. mehrere Wege führen ans Ziel ..... und jeder mit Vor/Nachteilen. Wir können Dir nicht sagen, was für Dein Problem die beste Lösung ist.

P.S: Anstatt ein Externes Shell-Script geht natürlich auch eine myutils-Codezeile. Die kann aber, wie Otto schon schrieb, blockieren. Ein mit "" aufgerufenes Shell-Script dagegen ist immer "nonblocking"

Btw:
Noch eine Kleinigkeit: Ich würde Dir empfehlen ein Programm aus einem Script IMMER mit dem vollen Pfad aufzurufen. Also z.B. anstatt gammu ein /usr/gammu, wenn garming unter /usr installiert wurde. Wo es installiert ist, kannst DU mit "whois garming" rausfinden.
Hintergrund: Unix sucht immer in den Pfaden, die per $PATH  vorgegeben wird. Bei Scripten, die z.B. per cron aufgerufen werden, ist diese Variable aber nicht gesetzt. Somit funktioniert dann das Script als User (gesetztes $PFAD) aber nicht als Deamon oder Cron-Job. Solche Fehler (und es ist ein Scriptfehler) sind sehr schwierig und nervig zu finden.

P.S: wie schon erwähnt, wurde schon mehrfach im Forum durchdiskutiert ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html