Seite 1 von 1
Rule: getDayOfMonth() funktioniert mal und mal nicht
Verfasst: 9. Jan 2023 19:17
von Andre_H_
Hey Leute,
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?
Code: Alles auswählen
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
Code: Alles auswählen
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
Danke für die Hilfe!
LG André
Re: Rule: getDayOfMonth() funktioniert mal und mal nicht
Verfasst: 9. Jan 2023 22:53
von J-N-K
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.
Re: Rule: getDayOfMonth() funktioniert mal und mal nicht
Verfasst: 10. Jan 2023 10:50
von KellerK1nd
Darum habe ich angefangen meine Regeln durchzunummerieren. In openHAB 2 statt im Log noch der Name der Regel die den Fehler auswirft.
Re: Rule: getDayOfMonth() funktioniert mal und mal nicht
Verfasst: 10. Jan 2023 13:45
von EmptySoft
die Zeile
greift auf mailtext zu, der nicht initialisiert ist, deswegen steht im Error, dass er wegen null nicht kann
Re: Rule: getDayOfMonth() funktioniert mal und mal nicht
Verfasst: 10. Jan 2023 19:22
von Andre_H_
Ich hab das Script jetzt nochmal etwas umgebaut erhalte aber weiterhin die gleiche Fehlermeldung:
Code: Alles auswählen
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
Code: Alles auswählen
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
Müsste doch alles passen? mhmh...
Danke für eure Hilfe!
LG André
Re: Rule: getDayOfMonth() funktioniert mal und mal nicht
Verfasst: 10. Jan 2023 23:55
von udo1toni
Nö.
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.
Code: Alles auswählen
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
Re: Rule: getDayOfMonth() funktioniert mal und mal nicht
Verfasst: 12. Jan 2023 19:20
von Andre_H_
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:
Code: Alles auswählen
rule "Energiestatistik Mail"
when
Time cron "0 0/1 * * * ?"
//Time cron "0 50 23 ? * MON-SUN *"
// Time cron "0 55 23 L * ?" // letzter Tag im Monat
then
var mailtext = "<table border='0'>
<tr>
<td width='100'>Datum</td>
<td width='250'><div align='right'>Gas</div></td>
<td width='150'><div align='right'>Wärmestrom</div></td>
<td width='150'><div align='right'>Hausstrom</div></td>
<td width='150'><p align='right'>Außentemperatur</p> </td>
</tr>"
var i = 0
var x = 0
var heute = now.getDayOfMonth // 11 (11.09.2022)
while ((i=i+1) <= heute) {
mailtext = mailtext + " <tr>
<td width='100'>" + i + "." + now.getMonth().getValue + "</td>
<td width='250'><div align='right'>"+ gas_Verbrauch_Tag.historicState(now.minusDays(heute-i)).state.toString + " kWh (" + gas_Kosten_Tag.historicState(now.minusDays(heute-i)).state.format("%.2f").toString + " €) </div></td>
<td width='150'><div align='right'>"+ Stromzaehler_Waerme_Verbrauch_gesamt_Tag.historicState(now.minusDays(heute-i)).state.toString + " kWh (" + Stromzaehler_Waerme_gesamt_Kosten_Tag.historicState(now.minusDays(heute-i)).state.format("%.2f").toString + " €)</div></td>
<td width='150'><div align='right'>"+ Stromzaehler_Hausstrom_Verbrauch_Tag.historicState(now.minusDays(heute-i)).state.toString + " kWh (" + Stromzaehler_Hausstrom_Kosten_Tag.historicState(now.minusDays(heute-i)).state.format("%.2f").toString + " €)</div></td>
<td width='150'><p align='right'>"+ Wetterstation_AktuelleTemperatur.historicState(now.minusDays(heute-i).minusHours(8)).state.format("%.1f %unit%").toString + " (14 Uhr)</p> </td>
</tr>"
}
mailtext = mailtext + " </table>"
val mailActions = getActions("mail","mail:smtp:webxxl")
val success = mailActions.sendHtmlMail("email@ablabla.de", "Energiestatistik Haus", mailtext)
end
Code: Alles auswählen
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
Re: Rule: getDayOfMonth() funktioniert mal und mal nicht
Verfasst: 13. Jan 2023 00:14
von udo1toni
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:
Code: Alles auswählen
var x = 0
var heute = now.getDayOfMonth // 11 (11.09.2022)
var i = heute
while ((i=i-1) >= 0) {
mailtext = mailtext + " <tr>
<td width='100'>" + (heute-1).toString + "." + now.getMonth().getValue + ".</td>
<td width='250'><div align='right'>"+ gas_Verbrauch_Tag.historicState(now.minusDays(i)).state.toString + " kWh (" + gas_Kosten_Tag.historicState(now.minusDays(i)).state.format("%.2f").toString + " €) </div></td>
<td width='150'><div align='right'>"+ Stromzaehler_Waerme_Verbrauch_gesamt_Tag.historicState(now.minusDays(i)).state.toString + " kWh (" + Stromzaehler_Waerme_gesamt_Kosten_Tag.historicState(now.minusDays(i)).state.format("%.2f").toString + " €)</div></td>
<td width='150'><div align='right'>"+ Stromzaehler_Hausstrom_Verbrauch_Tag.historicState(now.minusDays(i)).state.toString + " kWh (" + Stromzaehler_Hausstrom_Kosten_Tag.historicState(now.minusDays(i)).state.format("%.2f").toString + " €)</div></td>
<td width='150'><p align='right'>"+ Wetterstation_AktuelleTemperatur.historicState(now.minusDays(i).minusHours(8)).state.format("%.1f %unit%").toString + " (14 Uhr)</p> </td>
...
Dann erübrigt sich das mit der Variablen natürlich...
Ohne Gewähr.