Seite 2 von 3

Re: Telegram /Sonoff Temperatur & Hydrowerte nur bei Änderung von Wert 1 senden

Verfasst: 17. Dez 2019 20:40
von salamander070
so habe es für die einzelnen Sensoren mal umgeschrieben nach dem Vorbild von Code 2. Die Rules laufen grundsätzlich in der LOG Datei an, aber Telegram werde ich erst sehen, wenn die Werte sich dann um 1 ändern, dass werde ich sehen bis morgen.
Trotz das die LOG Loading Modell ausführt kommen dann aber Fehler.
die Beispiel Rules:

Code: Alles auswählen

//globale Variablen zu Beginn der Datei definieren!
var Number nBAD1Sent = -99999

rule "tmp2"
when
    Item mqtt_topic_BAD_BAD1 changed
then
    if(Math::abs((mqtt_topic_BAD_BAD1.state as Number).floatValue - nBAD1Sent) > 1) {
        sendTelegram("bot1","BAD: " +mqtt_topic_BAD_BAD1.state.toString)
        nBAD1Sent = (mqtt_topic_BAD_BAD1.state as Number).floatValue
    }
end
ich erhalte dann später

Code: Alles auswählen

[ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'tmp2': An error occurred during the script execution: Could not invoke method: java.lang.Math.abs(int) on instance: null

Re: Telegram /Sonoff Temperatur & Hydrowerte nur bei Änderung von Wert 1 senden

Verfasst: 18. Dez 2019 02:14
von peter-pan
Bitte ersetzte mal die beiden "floatValue" durch "doubleValue".

Bitte poste auch mal das Item (mqtt_topic_BAD_BAD1) das du angelegt hast und prüfe auch mal nach, ob da wirklich auch ein Wert drin steht.

Re: Telegram /Sonoff Temperatur & Hydrowerte nur bei Änderung von Wert 1 senden

Verfasst: 18. Dez 2019 14:09
von udo1toni
Im Zweifel enthält mqtt_topic_BAD_BAD1.state zum Zeitpunkt der Ausführung keinen gültigen Wert. Logging und etwas Umbau:

Code: Alles auswählen

//globale Variablen zu Beginn der Datei definieren!
var Number nBAD1Sent = -99999

rule "tmp2"
when
    Item mqtt_topic_BAD_BAD1 changed
then
    if(!(mqtt_topic_BAD_BAD1.state instanceof Number)) {
        logWarn("tmp2","mqtt_topic_BAD_BAD1 ungütig! ({})",mqtt_topic_BAD_BAD1.state)
        return;
    }
    val Number nTemp = mqtt_topic_BAD_BAD1.state as Number
    logInfo("tmp2","nTemp = {}, nBAD1Sent = {}",nTemp,nBAD1Sent)
    val Number nTemp2 = nTemp.floatValue - nBAD1Sent
    if(Math::abs(nTemp2) > 1) {
        logInfo("tmp2","Temperaturunterschied > 1!")
        sendTelegram("bot1","BAD: " + nTemp.toString)
        nBAD1Sent = nTemp
    }
end

Re: Telegram /Sonoff Temperatur & Hydrowerte nur bei Änderung von Wert 1 senden

Verfasst: 18. Dez 2019 14:20
von salamander070
hallo udo1toni
werde ich ausprobieren und berichten
Frage zur Zeile 9. gewolt oder Tippfehler? ungütig oder doch ungültig?

@peter-pan
anbei ein Screenshot vom Item
Wie man sieht habe ich in Autoupdate nichts drin, da die Sonoffs ja von alleine bei Änderung die Werte senden.

Re: Telegram /Sonoff Temperatur & Hydrowerte nur bei Änderung von Wert 1 senden

Verfasst: 18. Dez 2019 14:26
von salamander070
leider auch keinen Erfolg mit dieser Rules.
Fehlermeldung:

Code: Alles auswählen

2019-12-18 14:14:23.761 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'telegram4.rules'
2019-12-18 14:19:13.603 [INFO ] [.eclipse.smarthome.model.script.tmp2] - nTemp = 22.2, nBAD1Sent = -99999
2019-12-18 14:19:13.610 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'tmp2': An error occurred during the script execution: Could not invoke method: java.lang.Math.abs(int) on instance: null
egal ob der Wert der Temperatur sich gering verändert oder wie im Test von 21 auf 31 Grad verändert.

Re: Telegram /Sonoff Temperatur & Hydrowerte nur bei Änderung von Wert 1 senden

Verfasst: 18. Dez 2019 14:51
von peter-pan
Ok. Das Item ist als normales Number-Item definiert und nicht als UoM-Item.

Habe den Fehler bei mir reproduzierbar gemacht (mit meiner Test-Rule). Bitte ändere "floatValue" auf "doubleValue". Normalerweise ist das mit dem floatValue ok, aber anscheinend hat die "abs"-Funktion/Methode, da gewisse Ansprüche an den Wert der da rüber kommt. So genau kann ich das auch nicht sagen, da ich eigentlich auch"noobie" bin. Ich probier's halt immer wieder mit "Trial and Error".

Re: Telegram /Sonoff Temperatur & Hydrowerte nur bei Änderung von Wert 1 senden

Verfasst: 18. Dez 2019 16:46
von salamander070
@peter-pan
klasse das du das reproduzieren konntest. Dein Tipp mit doubleValue bingt es aktuell. Genaues muss ich erst sehen. Es wird zumindest was gesendet und die LOG zeigt noch keine Fehler an, aber muss schauen, ob das ab 1 Grad klappt. Erste Test reagierten schon mal. Temperatur von 22,4 auf 33 Grad wurden gemeldet und auch wieder zurück zum Normalwert. Ich probiere auch immer hin und her, aber viele Parameterkenntnisse fehlen mir einfach noch.
Ich werde berichten, aber gerade der Bad Sensor meldete immer geringe Schwankungen, was nun hoffentlich so läuft.

Zudem noch die Fragen;
Leider bekomme ich keine Grad Zeichen und auch keine % für Hydrowerte, denn ich habe diesen Code auf alle Sensoren angewahnt.
Und kann man die Zahl >1 auch auf >0,5 oder >0.5 setzen? also nicht so ganz große Sprünge bei den Änderungen.

Re: Telegram /Sonoff Temperatur & Hydrowerte nur bei Änderung von Wert 1 senden

Verfasst: 18. Dez 2019 16:59
von udo1toni
Natürlich kannst Du auch kleinere Stufen als 1 verwenden. (amerikanisches Komma ;) also z.B. 0.5)

Das °C oder % musst Du selbst anhängen. Wenn Du im Itemnamen jeweils identisch ein Schlüsselwort hast, mit dem die Rule erkennen kann, ob es sich um Temperatur oder Luftfeuchte handelt, kann es bei der einen Rule bleiben ;)

Re: Telegram /Sonoff Temperatur & Hydrowerte nur bei Änderung von Wert 1 senden

Verfasst: 18. Dez 2019 23:17
von peter-pan
Freut mich, dass es läuft. Udo hat dir ja die Möglichkeiten mit kleineren Schritten als 1 erklärt.
Was das Anzeigen der Suffixe (°C, %, etc) in PaperUI angeht hab ich gar keine Ahnung wie man das hinkriegt. ich hab alles über Textfiles konfiguriert. Du kannst aber auch in der Sitemap eine Formatierung vornehmen, z.B. so:

Code: Alles auswählen

Text item=mqtt_topic_BAD_BAD1 label="Temperatur [%.1f °C]"

Re: Telegram /Sonoff Temperatur & Hydrowerte nur bei Änderung von Wert 1 senden

Verfasst: 19. Dez 2019 12:54
von udo1toni
In Paper UI Control kann man die Anzeige von Einheiten nicht beeinflussen, das wird über die Channel Definition vorgegeben, man kann diesen Teil des Channels aber nicht selbst konfigurieren, nur das Binding selbst kann die Einheiten setzen.
Paper UI Control ist aber überhaupt nicht dazu gedacht, das System normal zu bedienen, das ist rein als kurze Testmöglichkeit für den Administrator gedacht. Man sollte also das Nicht-Vorhandensein von Einheiten nicht überbewerten.
Mit OH 3 wird es Paper UI ohnehin nicht mehr geben, dann ist mit diesem Unsinn ohnehin Schluss ;)