Meldungen ins Logfile schreiben

Begonnen von tomleitner, 24 Mai 2016, 11:00:55

Vorheriges Thema - Nächstes Thema

tomleitner

Sorry für die dämliche Frage, aber ich habe partout keine Antwort drauf gefunden nach 30 Minuten googeln: Ich will folgendes erreichen. Wenn mein Regensensor Regen meldet sollte "Rain started" ins logfile geschrieben werden und der Gartenbrunnen abgeschaltet werden. Wenn der Regensensor (ein FS20SR) keinen Regen mehr meldet, sollte "Rain ended" im Logfile stehen und der Gartenbrunnen wieder starten. Sieht ca. so aus:

define DoRegenSensorSteuerung DOIF ([Regensensor] eq "off") \
        (print "Rain ended") \
        (set GartenBrunnen on) \
    DOELSE () \
        (print "Rain started") \
        (set GartenBrunnen off) \
attr DoRegenSensorSteuerung repeatsame 2


Alleine das "print" geht nicht weil es keinen entsprechenden FHEM Befehl gibt. Ich habe NICHT gefunden was hier zu verwenden wäre...

Bitte um Info und sorry wenn das eine absolute Anfängerfrage ist ...

Danke & Ciao // Tom

Otto123

Hallo Tom,

geht in der Art { Log 1, "Rain ended" }

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

tomleitner

Super! Danke. Werde es so probieren.

Aber warum find ich das nicht in der commandref?

Danke nochmal und Lg // Tom


igami

In der Commandref steht nur

{ Log 1, "Hello" }

und nicht "Rain ended" :P
Perl specials

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

tomleitner

Der war gut .... wie auch immer: der Hintergrund ist, dass es sich offenbar um einen Perl One-Liner handelt und FHEM selber keinen Befehl für Logging hat.
Danke Euch & Ciao // Tom

igami

Dafür ist ja eigentlich auch FileLog bzw. DbLog da in dem die Readings von deinem Regensensor geloggt werden.
Das Logfile ist für Systemmeldungen.
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

Otto123

Da hat igami völlig recht und meine Antwort war ein ziemlicher Schnellschuss und so nur für "eben mal test" gedacht.

Für Systemlog ist das ja auch doppelt gemoppelt, da wird ja eigentlich "set GartenBrunnen on|off" sowieso geloggt.

Also wenn überhaupt würde ich ein Filelog für den Regensensor machen. Da steht dann wenigsten on|off drin - was sich einigermaßen auswerten lässt.

ZitatFHEM selber keinen Befehl für Logging hat.
- kann man so nicht stehen lassen  ::)

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

Tsturm

Hallo Zusammen,

kann man auch ein anderes als das Standard-Logfile mit dem Perl-Befehl bestimmen?

VG timmo

Otto123

Hi,

Du könntest mit FileWrite in jedes x-beliebige File schreiben:
https://wiki.fhem.de/wiki/DevelopmentModuleAPI#FileWrite

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

fireball

#9
Moinsen,

ich habe ein ähnliches Problem.
Ich habe mir ne USV für den Raspberry gegönnt.
https://www.waveshare.com/wiki/UPS_HAT

Nun gibts dafür ein Python Script, welches ich an der letzen Stelle etwas modifiziert habe, sodass die Werte in ein LogFile geschrieben werden.

  #print("PSU Voltage:   {:6.3f} V".format(bus_voltage + shunt_voltage))
    #print("Shunt Voltage: {:9.6f} V".format(shunt_voltage))
    print("Load Voltage:  {:6.3f} V".format(bus_voltage))
    print("Current:       {:9.6f} A".format(current/1000))
    print("Power:         {:6.3f} W".format(power))
    print("Percent:       {:3.1f}%".format(p))
    logfile = open('./ups.log','w')
    #logfile.write("\r\nPSU Voltage:   {:6.3f} V".format(bus_voltage + shunt_voltage))
    #logfile.write("\r\nShunt Voltage: {:9.6f} V".format(shunt_voltage))
    logfile.write("\r\nLoad Voltage:  {:6.3f} V".format(bus_voltage))
    logfile.write("\r\nCurrent:       {:9.6f} A".format(current/1000))
    logfile.write("\r\nPower:         {:6.3f} W".format(power))
    logfile.write("\r\nPercent:       {:3.1f}%".format(p))
    logfile.close()



Ich kann als ROOT oder PI das Script ausführen, es funktioniert.
Ich weiß nicht warum es nicht klappt, aber per Cron von Root oder PI wird das Script zwar ausgeführt, aber es wird kein LogFile erzeugt?!

Ich dachte mir, ok, lass ich das Script jede Minute mit AT in FHEM laufen, dann wird das schon passen... aber auch da wird kein LogFile erzeugt.

Habt ihr noch eine Idee woran das liegt!? Viell. irgendwas mit dem Environment?! PI und ROOT laufen mit der Bash... Cron mit SH....

Hier mal noch die Logs aus der SYSLOG

Dec 28 16:46:01 raspberrypi CRON[9280]: (pi) CMD (   python3 /home/pi/Downloads/UPS_HAT/ups_auslesen.py)
Dec 28 16:47:01 raspberrypi CRON[14711]: (pi) CMD (   python3 /home/pi/Downloads/UPS_HAT/ups_auslesen.py)
Dec 28 16:47:01 raspberrypi CRON[14712]: (fhem) CMD (   python3 /opt/fhem/FHEM/ups_auslesen.py)
Dec 28 16:48:01 raspberrypi CRON[19998]: (pi) CMD (   python3 /home/pi/Downloads/UPS_HAT/ups_auslesen.py)
Dec 28 16:48:01 raspberrypi CRON[19999]: (fhem) CMD (   python3 /opt/fhem/FHEM/ups_auslesen.py)
Dec 28 16:49:01 raspberrypi CRON[25335]: (pi) CMD (   python3 /home/pi/Downloads/UPS_HAT/ups_auslesen.py)
Dec 28 16:49:01 raspberrypi CRON[25336]: (fhem) CMD (   python3 /opt/fhem/FHEM/ups_auslesen.py)
Dec 28 16:50:01 raspberrypi CRON[30751]: (fhem) CMD (   python3 /opt/fhem/FHEM/ups_auslesen.py)
Dec 28 16:50:01 raspberrypi CRON[30752]: (pi) CMD (   python3 /home/pi/Downloads/UPS_HAT/ups_auslesen.py)



Ziel war es, dass ich die Werte in die LogDatei schreibe und mit Systeminfo mir User-defined-Readings reinlade...


Was viell. noch interessant ist... im Fhem-Log steht, dass kann ich aber nicht deuten...

Traceback (most recent call last):
  File "/opt/fhem/FHEM/ups_auslesen.py", line 195, in <module>
    ina219 = INA219(addr=0x42)
  File "/opt/fhem/FHEM/ups_auslesen.py", line 62, in __init__
    self.bus = smbus.SMBus(i2c_bus);
PermissionError: [Errno 13] Permission denied



Otto123

Hi,

das sind verschiedene Punkte:
logfile = open('./ups.log','w') bedeutet mMn logfile wird im aktuellen Directory erzeugt. Das ist /home/pi bei user pi oder mit sudo als user pi
wo cron steht wenn Du das ausführen willst weiß ich nicht.
Als user fhem (unter FHEM) wäre es dann /opt/fhem - da darf der User fhem zwar aber er ist nicht in der Gruppe der i2c_bus lesen ansprechen darf?

Abhilfe allgemein: Pfad komplett angeben?
FHEM: User fhem in die Gruppe i2c aufnehmen und fhem neu starten!
sudo usermod -aG i2c fhem

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

fireball

Hi Otto,

der 2. Hinweis wars... fhem war es nicht öglich den i2c_bus zu lesen. Das wußte ich nicht... da unter root und pi das Script funktioniert hat.

Warum das allerdings nicht als Cronjob in der /etc/crontab unter root lief, keine ahnung... bzw. es kam kein LogFile bei raus...
(BTW: Das Log hatte ich unter div. Pfaden versucht, weil wie ich grad gelesen hatte "PermissionError: [Errno 13] Permission denied" ein typischer "ich kann das File nicht anlegen/lesen/schreiben" Fehler in Python ist... )

Jedenfalls klappt das jetzt mit dem Ausführen des Scripts durch FHEM und in /opt/fhem/log wird jetzt auch mit jedem Lauf ein neues ups.log angelegt. Es ist also immer nur der aktuelle Wert drin.

Jetzt wollte ich mit SYSMON ein eigenes Attribut anlegen, aber FHEM streikt da noch bisl...
Das Attribut wird angelegt, hat aber keinen Wert.
user-defined  =>   Load Voltage:1:Lastspannung:grep Voltage /opt/fhem/log/ups.log | awk '{ print $3; }'

Nee Idee warum mein Commando keinen Wert liefert?!
Auf der Console gehts:
pi@raspberrypi:/opt/fhem/log $ grep Voltage: /opt/fhem/log/ups.log | awk '{ print $3; }'
8.200

VG+Danke
René

Otto123

#12
Hallo Rene,

ich würde den Umweg lassen und direkt ein Reading schreiben!?

Gibt da mW mehrere Möglichkeiten und python "Verbindungen" - für die Suche:
site:forum.fhem.de python fhem

Nachtrag: es kann sein, dass Du die $3 escapen musst \$3 weil die sonst einer in der Kette als variable vorab zu nix auflöst ;)

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

fireball

Hi Otto,

komisch jetzt gehts... hab doch alles richtig gemacht... jetzt werden Werte angezeigt.

Ich wollte auch nicht tiefer mit Python rumhandtieren... da das Modul ja bereits sowas kann und ich das Python-Script vom Hersteller nur umgeschrieben habe auch Dateiausgabe.
Ich wollte nicht tiefer in Python abtauchen.

Danke Otto wieder mal für den guten Tipp.

VG
René