Hallo zusammen,
ich verwende seit längerem "addLog" um die die Messwerte meines Gaszählers kontinuierlich fortzuschreiben. Seit einiger Zeit versuche ich das auch für den RSSI-Wert zu realisieren. Leider scheint "addLog" mit dem Minuszeichen nicht zurecht zu kommen. Im Gaszählerlog erscheintRSSI: addLog: invalid reading << addLog
und im HauptlogPERL WARNING: Argument "addLog:" isn't numeric in division (/) at (eval 325331) line 1, <GEN9842> line 396.
In 99_myUtils.pm stehtsub addLog($$)
{
my ($logdevice, $reading) = @_; # device and reading to be used
my $logentry = ReadingsVal($logdevice,$reading,"addLog: invalid reading");
if ($reading =~ m,state,i) {
fhem "trigger $logdevice $logentry << addLog";
} else {
fhem "trigger $logdevice $reading: $logentry << addLog";
}
}
und in meiner fhem.cfgdefine FileLog_RSSI FileLog ./log/RSSI-%m-%U.log (Schlafzimmer|Vorlauf|Ruecklauf|KuecheTemp|WohnzimmerTemp|GasZaehler):RSSI.*
define RSSI_at at +*00:02:00 {addLog("GasZaehler","RSSI")}
Hat jemand eine Idee, wie ich entweder addLog überreden kann, auch negative Werte zu akzeptieren oder meine fhem.cfg ändern kann, dass nur positive Werte statt der negativen (z.B. durch *(-1) an passender Stelle) in die Logs abgelegt werden.
Über passende Tipps würde ich mich sehr freuen. Besten Dank im Voraus und viele Grüße
Harald
Hallo,
Der Eintrag
ZitatRSSI: addLog: invalid reading << addLog
kommt nicht vom Minuszeichen sondern von der Zeile
my $logentry = ReadingsVal($logdevice,$reading,"addLog: invalid reading");
Das bedeutet dass FHEM entweder das Device 'GasZaehler' nicht kennt oder aber das Device 'GasZaehler' kein Reading namens 'RSSI' hat. In beiden Fällen wird der Text 'addLog: invalid reading' zurückgegeben da er als Default-Antwort übergeben wurde.
Kannst du überprüfen ob die Schreibweise mit dem Device und Reading übereinstimmt ?
Was wird angezeigt wenn du
list GasZaehler
eingibst ?
Grüße,
ChrisD
RSSI ist bei den meisten devices ein internal value und kein reading und erzeugt keine events die geloggt werden können.
für manche devices kannst du aktivieren das readings für rssi erzeugt werden und/oder events dafür erzeugt werden. dann kannst du rssi direkt loggen. nur wenn es ein reading gibt kannst du addLog verwenden.
für die devices für das du das rssi loggen nicht aktivieren kannst kannst du es zur not z.b. mit einem userReading und InternalVal selber erzeugen.
das ganze kostet aber performance und sollte vermutlich nicht auf dauer aktiv bleiben. zumal sich die rssi werte für fest installierte geräte im normalfall nicht gross unterscheiden sollten.
falls es dir weniger um das loggen als um einen aktuellen überblick geht ist eine readingsGroup vielleicht eine alternative.
gruss
andre
Hallo zusammen,
vielen Dank für Eure Hinweise. Wie ich schon schrieb, habe ich in der fhem.cfg stehendefine FileLog_RSSI FileLog ./log/RSSI-%m-%U.log (Schlafzimmer|Vorlauf|Ruecklauf|KuecheTemp|WohnzimmerTemp|GasZaehler):RSSI.*
Damit erhalte ich in meinen Gerätelogs z.B. den Eintrag "2014-11-07_11:36:46 KuecheTemp RSSI: -66.5", den ich in meinem Küchen-Log und -Diagramm agezeigt bekomme. Das funktioniert mit allen Temperaturmessern, die dem CUL die Infos liefern (der Jelink liefert m.W. kein RSSI, oder?). Hier werden die Daten ausreichend oft geliefert, so dass ich addLog nicht verwenden brauche. Da der Gaszähler aber je nach Gasverbrauch ggf. längere Pausen macht, benutze ich hier addLog um das Ein- und Ausschalten und den Impulszählerstand fortzuschreiben. So wollte ich auch die RSSI-Kurve weiter zeichnen lassen. Das funktioniert übrigens auch bei meinen MAX-Thermostaten einwandfrei.
Wie ihr seht, sind die Geräte und auch die RSSI-Daten fhem bekannt und werden richtig verarbeitet. Nur wenn ich addLog verwende, wird der RSSI-Wert nicht akzeptiert, alle anderen Daten wie Temperatur, Ein, Aus, Zählerstände usw. aber wohl.
Der einzige Unterschied zwischen den Werten ist, dass RSSI negativ ist, also ein Minus davor steht, bei den anderen nicht.
Ich hoffe, ich habe meine Situation ausreichend genau beschrieben.
Ich würde mich freuen, wenn es mir mit Eurer Hilfe gelänge, RSSI mittels addLog ins Diagramm zu bekommen.
Viele Grüße und schönes Wochenende
Harald
bitte zeige mal ein list auf eines der devices. das du den RSSI wert loggen kann bedeutet nicht das es auch ein zugehöriges reading gibt. wenn es das reading RSSI gibt kannst du addLog nicht verwenden.
wenn du im cul modul mit addvaltrigger die events für RSSI werte einschaltest kannst du sie loggen aber es gibt kein reading RSSI.
wenn du für hm devices rssiLog aktivierst werden readings erzeugt. es wird aber auch darauf hingewiesen das das nicht empfohlen ist.
wie oben schon geschrieben ist der unterschied nicht das vorzeichen! du musst eine angepasste addLog funktion verwenden die statt ReadingsVal mit InternalVal arbeitet weil die RSSI werte in deinem fall internals und keine readings sind.
das auf dem jeelink verwendete rfm12b funkmodul liefert keine rssi werte.
gruss
andre
Hallo andre,
Du hast natürlich wie (fast) immer Recht. ;) RSSI ist nur in den Internals aber nicht in den Readings vorhanden. Da muss ich mir mal überlegen, wie ich das löse. Vielleicht geht es mit userReading oder wie Du schon schreibst, mit einem angepasstem addLog über InternalVal.
Jedenfalls vielen Dank für's in die richtige Richtung schubsen und schönes Wochenende
Harald
So, es funktioniert! ;D Ich habe mein GasZähler-Modul so geändert, dass die Internals-Variable CUL_0_RSSI in die Readings- Variable RSSI bei jedem Impuls des Gaszählers übertragen wird. Damit klappt dann auch addLog.
Danke nochmals andre, dass Du mir mit Deinen infos den richtigen Weg gewiesen hast.
Viele Grüße und schönes Wochenende
Harald
versuch noch mal ein extra addLog mit InternalVal zu verwenden. das sollte effizienter sein als ein reading anzulegen. das erzeugt zusätzliche events die du gar nicht brauchst.
gruss
andre
Hallo Andre,
hab' ich schon probiert. Der Wert CUL_0_RSSI erscheint bei einem Impuls des Gaszählers in den Internals, verschwindet aber nach einiger Zeit. Warum das passiert, habe ich nicht ermitteln können. Versucht addLog-Internal dann den Wert zu lesen, gibt es natürlich eine Fehlermeldung.
Bei meiner jetztigen Lösung erscheint bei einem Gaszählerimpuls CUL_0_RSSI in den Internals und wird beim Modulstart in Readings überführt. Dort steht es bis zum neuen Impuls zu Verfügung und kann von addLog gelesen und verarbeitet werden auch wenn es in Internals nicht mehr verfügbar ist.
Viele Grüße
Harald