ich habe hier ein komisches Phänomen. Ich möchte mir den Tag des Monats ausgeben lassen um damit nachher weiter arbeiten zu können. Es scheitert aber schon an now.getDayOfMonth(). Ich habe hier mal zum Test folgendes Script geschrieben, was mir den Tag des Monats alle 10 Minuten per E-Mail schicken soll. Komischerweise wird das Script ca. 5-6 mal am Tag erfolgreich ausgeführt. Sonst führt das Script immer zu fehlern. Kann ich so nicht nachvollziehen, denn warum sollte es mal funktionieren und mal nicht? Jmd eine Idee?
rule "Zaehlerstaende test"
when
Time cron "0 0/10 * * * ?"
then
var heute = now.getDayOfMonth() // 11 (11.09.2022)
mailtext = mailtext + heute
val mailActions = getActions("mail","mail:smtp:webxxl")
val success = mailActions.sendHtmlMail("email@blabla.com", "Energiestatistik Haus", mailtext)
end
Fehler:
Error in Log: 2023-01-08 10:55:00.850 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID ‘benachrichtigungen-3’ failed: An error occurred during the script execution: Could not invoke method: org.openhab.core.model.script.actions.Log.logError(java.lang.String,java.lang.String,java.lang.Object[]) on instance: null in benachrichtigungen
Das passt aber nicht zusammen. Die Rule soll alle zehn Minuten, beginnen mit Minute 0 triggern. Das Log ist von 10:55, was offensichtlich nicht dazu passt.
rule "Zaehlerstaende test"
when
Time cron "0 0/1 * * * ?"
then
var heute = now.getDayOfMonth()
var mailtext = heute
val mailActions = getActions("mail","mail:smtp:webxxl")
val success = mailActions.sendHtmlMail("email@blabla.de", "Energiestatistik Haus", mailtext)
end
2023-01-10 19:21:04.839 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'benachrichtigungen-6' failed: An error occurred during the script execution: Could not invoke method: org.openhab.binding.mail.internal.action.SendMailActions.sendHtmlMail(org.openhab.core.thing.binding.ThingActions,java.lang.String,java.lang.String,java.lang.String) on instance: null in benachrichtigungen
Du übergibst der Funktion sendHtmlMail() die Variable mailtext.
Die Variable mailtext wird mit dem Inhalt von heute gefüllt.
heute ist ebenfalls eine Variable, die mit .getDayOfMonth() gefüllt wird.
Das heute ein Objekt ist, welches mit einer Zahl gefüllt wird, dürfte es sich um ein Number Objekt handeln.
Damit wird mailtext ebenfalls zum Number Objekt.
Die Funktion sendHtmlMail() erwartet allerdings Strings als Parameter.
rule "Zaehlerstaende test"
when
Time cron "0 0/10 * * * ?"
then
val heute = now.getDayOfMonth().toString // lokale Konstante als String erzeugen
val mailtext = "Heute ist der " + heute + ". Tag im Monat!"
val mailActions = getActions("mail","mail:smtp:webxxl")
val success = mailActions.sendHtmlMail("email@blabla.com", "Energiestatistik Haus", mailtext)
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
Vielen Dank für den Tip - das hilft mir schon mal weiter. Dennoch scheint sich noch ein Fehler in meinem Gesamtscript eingeschleust zu haben. Ich möchte mit der Regel eine Tabelle erzeugen die mir von jeden Tag des Monats die Energiewerte liefert. Damit ich now.getDayOfMonth in der Whileschleife nutzen kann benötige ich es doch als Number Objekt. Es scheint aber noch woanders ein Problem zu sein:
2023-01-12 19:17:10.715 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'benachrichtigungen-7' failed: cannot invoke method public abstract org.openhab.core.types.State org.openhab.core.persistence.HistoricItem.getState() on null in benachrichtigungen
Du nutzt minusDays() als Funktion, das erwartet unsinged Integer. Mein Tipp wäre, statt heute - i lieber (heute - 1).intValue zu nehmen.
Es böte sich an (weil Du den Ausdruck sieben Mal nutzt) da für eine lokale Variable einzuführen.
Außerdem stehen die Werte in umgekehrter Reihenfolge in der Tabelle, es wäre also geschickter, in umgekehrter Reihenfolge zu zählen: