Seite 2 von 9

Re: cron Ausdruck und Visual Studio Code

Verfasst: 19. Okt 2018 23:27
von udo1toni
Autsch... Ja, sorry, Schlüsselwort vergessen... Der Kopf der Rule muss so aussehen:

Code: Alles auswählen

rule "timer setzen"
when
    Time cron "0 0 0 ? * 1-5" or  // Mitternacht, Montag bis Freitag
    Item Uhr1_M_Ein_WZ changed or      // Zeit wurde geändert
    Item Uhr1_H_Ein_WZ changed or      //      "
    Item Uhr1_M_Aus_WZ changed or      //      "
    Item Uhr1_H_Aus_WZ changed         //      "
then

Re: cron Ausdruck und Visual Studio Code

Verfasst: 20. Okt 2018 16:43
von hardl

Code: Alles auswählen

logInfo("timer","Einschaltzeit 1 {}",now.withStartOfDay.plusMinutes(soll1EinWZ).getAsText)
Was ist daran falsch?

Code: Alles auswählen

2018-10-20 16:19:04.535 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'timer setzen': 'withStartOfDay' is not a member of 'org.joda.time.DateTime'; line 173, column 39, length 18

Re: cron Ausdruck und Visual Studio Code

Verfasst: 21. Okt 2018 12:33
von hardl
"now.withStartOfDay.plusMinutes"
gibt den Fehler:

Code: Alles auswählen

2018-10-21 11:53:25.106 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'timer setzen': 'withStartOfDay' is not a member of 'org.joda.time.DateTime'; line 184, column 39, length 18
Mit now.withTimeAtStartOfDay.plusMinutes gibt es aber den int Fehler:

Code: Alles auswählen

2018-10-21 12:18:09.009 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'timer setzen': An error occurred during the script execution: Could not invoke method: org.joda.time.DateTime.plusMinutes(int) on instance: 2018-10-21T00:00:00.000+02:00
Was kann ich tun?

Re: cron Ausdruck und Visual Studio Code

Verfasst: 21. Okt 2018 14:51
von hardl
Komme hier einfach nicht weiter:

funktioniert nicht
var Number soll1EinWZ

Code: Alles auswählen

soll1EinWZ = (Uhr1_H_Ein_WZ.state as Number) * 60 + (Uhr1_M_Ein_WZ.state as Number)

Code: Alles auswählen

logInfo("time1_Ein_WZ","Einschaltzeit 1 {}",now.withTimeAtStartOfDay.plusMinutes(soll1EinWZ).getAsText)
funktioniert

Code: Alles auswählen

logInfo("time1_Ein_WZ","Einschaltzeit 1 {}",now.withTimeAtStartOfDay.plusMinutes(5).getAsText)
??

Re: cron Ausdruck und Visual Studio Code

Verfasst: 21. Okt 2018 23:20
von udo1toni
Wie erwähnt: Bitte lass das getAsText weg, das wird leider von openHAB nicht unterstützt. Die Logzeile muss also z.B.

Code: Alles auswählen

logInfo("time1_Ein_WZ","Einschaltzeit 1 {}",now.withTimeAtStartOfDay.plusMinutes(soll1EinWZ))
heißen.
Noch zur Erläuterung der Logger:
Es gibt verschiedene Log-Stufen, als da wären ERROR, WARN, INFO, DEBUG und TRACE. Für die vier ersten gibt es Befehle, die aus Rules heraus eine Zeile in das Log schreiben können. Man kann den Log Level für die verschiedenen Quellen getrnnt einstellen, also z.B. für das knx Binding DEBUG, für http ERROR und für andere INFO. Damit werden nur kritische Fehler für http geloggt, für knx werden ausführlich Informationen geloggt, auch solche, die eher für Entwickler interessant sind, alles andere gibt nur Infos, Warnungen und Fehler aus. Diese Steuerung funktioniert auch für Rules, und zwar nicht nur für Rules allgemein, sondern auch für einzelne Rules. Voraussetzung dafür ist, dass der Kontext pro Funktion bzw. pro Rule definiert ist. Der Kontext ergibt sich aus dem ersten übergebenen String. Entsprechend ist "time1_Ein_WZ" ein bisschen arg kleinteilig, man möchte nicht mehrere Einträge ändern, weil man bestimmte Rules genauer unter die Lupe nehmen möchte.

Deswegen habe ich nur den etwas allgemeineren Kontext "timer" in der gesamten Rule verwendet.

Re: cron Ausdruck und Visual Studio Code

Verfasst: 22. Okt 2018 10:37
von hardl
Das getAsText hatte ich auch schon weggenommen, ohne Erfolg.
Alle now.withStartOfDay.plusMinutes() habe ich mit now.withTimeAtStartOfDay.plusMinutes ersetzt.

Z177:

Code: Alles auswählen

	logInfo("timer","Einschaltzeit 1 {}",now.withTimeAtStartOfDay.plusMinutes(soll1EinWZ))
Fehler

Code: Alles auswählen

 {
	"resource": "/etc/openhab2/rules/Thermostat.rules",
	"owner": "_generated_diagnostic_collection_name_#0",
	"code": "org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types",
	"severity": 8,
	"message": "Type mismatch: cannot convert from Number to int",
	"startLineNumber": 177,
	"startColumn": 76,
	"endLineNumber": 177,
	"endColumn": 86
} 
Z204:

Code: Alles auswählen

    	time1_Ein_WZ = createTimer(now.withTimeAtStartOfDay.plusMinutes(soll1EinWZ), [
Fehler:

Code: Alles auswählen

{
	"resource": "/etc/openhab2/rules/Thermostat.rules",
	"owner": "_generated_diagnostic_collection_name_#0",
	"code": "org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types",
	"severity": 8,
	"message": "Type mismatch: cannot convert from Number to int",
	"startLineNumber": 204,
	"startColumn": 70,
	"endLineNumber": 204,
	"endColumn": 80
}
Diese Fehler sind mehrfach vorhanden, für jeden timer und time1-4
zur Erläuterung der Logger:
Ich dachte, daß sich der Kontext unterscheiden muss.

Re: cron Ausdruck und Visual Studio Code

Verfasst: 22. Okt 2018 16:35
von udo1toni
withTimeAtStartOfDay
Argh... ja.

Die Variablen sind als Number definiert? eigentlich sollte openHAB die Typen automatisch casten. Aber wenn er es anmault, erzwingen wir es halt...
häng mal jeweils ein .intValue an:

Code: Alles auswählen

logInfo("timer","Einschaltzeit 1 {}",now.withTimeAtStartOfDay.plusMinutes(soll1EinWZ.intValue))
Natürlich an jeder Stelle, wo dieses Konstrukt auftaucht...

Re: cron Ausdruck und Visual Studio Code

Verfasst: 22. Okt 2018 17:53
von hardl
Hervorragend! Danke.
Es kann so einfach sein.....
Ich habe es gerade getestet, Klasse.
Was ich noch ändern muss, ich belege die Variablen (Items) mit Werten vor, die bei jeder Aenderung neu eingelesen werden.
Das sollte über eine Persistence sicher besser gehen, aber ich habe damit noch nicht gearbeitet und bin am Informieren.

Re: cron Ausdruck und Visual Studio Code

Verfasst: 22. Okt 2018 22:16
von udo1toni
Ja, es reicht, eine Persistence einzurichten, die den Wert hält (z.B. mapdb, das ist sehr schlank, liefert aber nur den zuletzt aktuellen Wert), dabei konfigurierst Du über die zugehörige mapdb.persist, welche Items (oder Gruppenmember) persistiert werden sollen. Wenn Du dort als Strategie zusätzlich restoreOnStartup angibst, wird der zuletzt gespeicherte Wert beim Start von openHAB ins Item geladen.

Re: cron Ausdruck und Visual Studio Code

Verfasst: 24. Okt 2018 12:01
von hardl
Was bedeutet dieser Fehler?
2018-10-24 11:41:14.971 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'timer_BZ_setzen': cannot invoke method public abstract int java.lang.Number.intValue() on null
Stammt aus dieser Regel:
if(time1_Aus_BZ !== null) time1_Aus_BZ.cancel // Timer aktiv, also zuerst löschen
time1_Aus_BZ = createTimer(now.withTimeAtStartOfDay.plusMinutes(soll1AusBZ.intValue), [
if (Schalter_manu_BZ.state == OFF) {
if ((Thermostat_BZ.state as Number) != 11) Thermostat_BZ.sendCommand(11)
logInfo("timer","BZ Ausschaltzeit 1 erreicht und Automatik aktiv!")
}
time1_Aus_BZ = null
])
soll1ausBZ = 542