Wecker mit TRADFRI realisieren
-
- Beiträge: 95
- Registriert: 15. Jan 2019 19:07
- Wohnort: Weil am Rhein
Re: Wecker mit TRADFRI realisieren
Ja, wenn ich mit der Einstellung vom Bild aus der Eintrag vom 8. Sep 2019 14:56 (1te Seite) "SZ_Decke_L_Helligkeit " einen GUI Eintrag erstelle, ist es automatisch ein Slider, der auch funktioniert.
Hast du das Bild überhaupt gesehen ?
Ist etwas schwierig hier ein Bild / Screenshot reinzubekommen. Ist ein link zur telekom-cloud.
Hier nochmals der link:
P.S. der Slider funktioniert auch, wenn ich das item "MyDimmer" eintrage. "MyDimmer" stammt ja aus der wecker.items.
Hast du das Bild überhaupt gesehen ?
Ist etwas schwierig hier ein Bild / Screenshot reinzubekommen. Ist ein link zur telekom-cloud.
Hier nochmals der link:
P.S. der Slider funktioniert auch, wenn ich das item "MyDimmer" eintrage. "MyDimmer" stammt ja aus der wecker.items.
and IT works
- udo1toni
- Beiträge: 13858
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Wecker mit TRADFRI realisieren
Ogottogott...
Bitte nicht ohne triftigen Grund mehrere Items auf einen Channel verlinken. Bitte niemals unterschiedliche Itemtypen auf einen Channel verlinken.
Soll heißen: Wenn Du ein Item SZ_Decke_L_Helligkeit hast, mit dem die Steuerung funktioniert, musst Du natürlich in einer Rule, die diesen Channel steuern soll, dieses Item zum Steuern verwenden, nicht ein weiteres Item mit dem Channel verlinken.
Ich sehe auf dem Bild ein Item OG_SZ_Decke, welches mit dem Label ON / OFF versehen ist. Mach das bitte weg!
Du hast ein Dimmer Item SZ_Decke_L_Helligkeit, dieses versteht ON, OFF, INCREASE, DECREASE und die Zahlen 0 bis 100 als Befehle. Es liefert den Status grundsätzlich als Zahlenwert zurück.
Wenn Du dieses Dimmer Item in einer Sitemap mit einem Switch Widget verbindest, wird das Switch Widget bei allen Zahlen > 0 auf ON springen und bei 0 auf OFF. Weiterhin wird der Dimmer auf den ON oder OFF Befehl reagieren.
Es gibt Situationen, wo man mehrere Items auf einen Channel verlinkt, hier ist das aber falsch.
Zum Bild: Wenn Du "Vollständiger Editor & Vorschau" anklickst, bekommst Du unterhalb des Editor-Bereichs zwei Karteireiter, einer mit Optionen, der andere für Dateianhänge.
Da es leider massive Belästigungen durch Spammer gab, darf nicht jeder automatisch beliebig Dateianhänge posten, grundsätzlich sollte es aber gehen (Versuch macht kluch, oder so ähnlich... ). Es sollte sogar Drag&Drop in den Editor funktionieren, allerdings nur mit lokal vorhandenen Bildern (die Funktion hab ich noch nie ausprobiert).
Bitte nicht ohne triftigen Grund mehrere Items auf einen Channel verlinken. Bitte niemals unterschiedliche Itemtypen auf einen Channel verlinken.
Soll heißen: Wenn Du ein Item SZ_Decke_L_Helligkeit hast, mit dem die Steuerung funktioniert, musst Du natürlich in einer Rule, die diesen Channel steuern soll, dieses Item zum Steuern verwenden, nicht ein weiteres Item mit dem Channel verlinken.
Ich sehe auf dem Bild ein Item OG_SZ_Decke, welches mit dem Label ON / OFF versehen ist. Mach das bitte weg!
Du hast ein Dimmer Item SZ_Decke_L_Helligkeit, dieses versteht ON, OFF, INCREASE, DECREASE und die Zahlen 0 bis 100 als Befehle. Es liefert den Status grundsätzlich als Zahlenwert zurück.
Wenn Du dieses Dimmer Item in einer Sitemap mit einem Switch Widget verbindest, wird das Switch Widget bei allen Zahlen > 0 auf ON springen und bei 0 auf OFF. Weiterhin wird der Dimmer auf den ON oder OFF Befehl reagieren.
Es gibt Situationen, wo man mehrere Items auf einen Channel verlinkt, hier ist das aber falsch.
Zum Bild: Wenn Du "Vollständiger Editor & Vorschau" anklickst, bekommst Du unterhalb des Editor-Bereichs zwei Karteireiter, einer mit Optionen, der andere für Dateianhänge.
Da es leider massive Belästigungen durch Spammer gab, darf nicht jeder automatisch beliebig Dateianhänge posten, grundsätzlich sollte es aber gehen (Versuch macht kluch, oder so ähnlich... ). Es sollte sogar Drag&Drop in den Editor funktionieren, allerdings nur mit lokal vorhandenen Bildern (die Funktion hab ich noch nie ausprobiert).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 95
- Registriert: 15. Jan 2019 19:07
- Wohnort: Weil am Rhein
Re: Wecker mit TRADFRI realisieren
Uups, ich Dummerchen (auch wenn es mir nicht bewusst war)
Sorry, habe jetzt alle verlinkte Items enfernt, so dass nur der Dimmer übrig blieb.
Es funktioniert jetzt einwandfrei
Aber eine Frage hätte ich denoch, während des Dimmes lässt sich die rule offenbar nicht stoppen (per Fernbedienung)
nach der eingestellten Dimmzeit geht die Lampe wieder an. Ist der Dimmvorgang abgeschlossen, kann ich "normal" abschalten.
Lässt sich da noch was ändern (ohne grossen Aufwand) ?
Gruss
und Dank
atk69
Sorry, habe jetzt alle verlinkte Items enfernt, so dass nur der Dimmer übrig blieb.
Es funktioniert jetzt einwandfrei
Aber eine Frage hätte ich denoch, während des Dimmes lässt sich die rule offenbar nicht stoppen (per Fernbedienung)
nach der eingestellten Dimmzeit geht die Lampe wieder an. Ist der Dimmvorgang abgeschlossen, kann ich "normal" abschalten.
Lässt sich da noch was ändern (ohne grossen Aufwand) ?
Gruss
und Dank
atk69
and IT works
- udo1toni
- Beiträge: 13858
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Wecker mit TRADFRI realisieren
Ja, selbstverständlich lässt sich ein laufender Timer auch abbrechen, mittels tWecker?.cancel. Du musst halt eine weitere Rule dazu bauen, die das erledigt. Der größte Knackpunkt dabei ist aber, dass der Timer anschließend für den nächsten Wecktermin gestartet wird. Am besten wäre es also, innerhalb des Timers ein Item abzufragen, falls das dann OFF ist (Wecker aus), springt der Timer gleich in den else-Teil, in dem die nächste Weckzeit programmiert wird.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 95
- Registriert: 15. Jan 2019 19:07
- Wohnort: Weil am Rhein
Re: Wecker mit TRADFRI realisieren
Alles klar, das habe ich verstanden.
Wird aber wohl nicht realisierbar sein, da die FB nur "Batterieladung" und "Niedriger Batteriestatus" als Channel liefert. Kein ON / OFF Status oder ähnliches.
Trotzdem vielen Dank.
Gruss
atk69
P.S. kleiner Denkfehler: ich muss ja nicht die FB abfragen, sonder nur, ob die Lampe selbst den Status=off hat. Das natürlich erst wenn sie zuvor eingeschaltet wurde. Etwas tricki, mal sehen ob ich da etwas hinbekomme.
Wird aber wohl nicht realisierbar sein, da die FB nur "Batterieladung" und "Niedriger Batteriestatus" als Channel liefert. Kein ON / OFF Status oder ähnliches.
Trotzdem vielen Dank.
Gruss
atk69
P.S. kleiner Denkfehler: ich muss ja nicht die FB abfragen, sonder nur, ob die Lampe selbst den Status=off hat. Das natürlich erst wenn sie zuvor eingeschaltet wurde. Etwas tricki, mal sehen ob ich da etwas hinbekomme.
and IT works
- udo1toni
- Beiträge: 13858
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Wecker mit TRADFRI realisieren
Ah. Die Fernbedienung schaltet die Lampe direkt... Na dann wäre die Variante, die Lampe auf volle Helligkeit zu schalten und die Zeitspanne zu warten, bis der Timer wieder getriggert wird. da kommt es natürlich drauf an, wie lange die einzelnen Schritte dauern (also was im Item WeckDimmzeit hinterlegt ist)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 95
- Registriert: 15. Jan 2019 19:07
- Wohnort: Weil am Rhein
Re: Wecker mit TRADFRI realisieren
Sorry, jetzt verstehe ich nur Bahnhof
Wenn ich die "Dimmzeit" auf 5sec stelle und Maxwert 50%, sind das 50*5=250sec bis zum Ende der rule.
Die Schritte sehe ich ja gut in der GUI, sind immer 1%da kommt es natürlich drauf an, wie lange die einzelnen Schritte dauern (also was im Item WeckDimmzeit hinterlegt ist)
Wenn ich die "Dimmzeit" auf 5sec stelle und Maxwert 50%, sind das 50*5=250sec bis zum Ende der rule.
and IT works
- udo1toni
- Beiträge: 13858
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Wecker mit TRADFRI realisieren
Genau. Aber wenn Du vor Ablauf der 250 Sekunden das Licht auf volle Helligkeit dimmst, wird die Rule im nächsten Schritt (also innerhalb 5 Sekunden) den Timer auf den nächsten Tag setzen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 95
- Registriert: 15. Jan 2019 19:07
- Wohnort: Weil am Rhein
Re: Wecker mit TRADFRI realisieren
Hallo zusammen
nach einigen Monaten Inaktivität, habe ich die Rule (Wecker) wieder aktiviert.
Zwischenzeitlich habe ich upgedated auf OH 2.5.6.
Leider bekomme ich wieder einen Fehler mit dem Timer (quartz) den ich nicht verstehe bzw. nicht beheben kann.
Ich vermute einen Syntaxfehler in der Rule. Obwohl ich nichts verändert habe.
Zu besseren Übersicht nochmals die aktuellen items und die rule:
rule:
items:
hier das log:
Ich hoffe auf Hilfe
Gruss
Andreas
nach einigen Monaten Inaktivität, habe ich die Rule (Wecker) wieder aktiviert.
Zwischenzeitlich habe ich upgedated auf OH 2.5.6.
Leider bekomme ich wieder einen Fehler mit dem Timer (quartz) den ich nicht verstehe bzw. nicht beheben kann.
Ich vermute einen Syntaxfehler in der Rule. Obwohl ich nichts verändert habe.
Zu besseren Übersicht nochmals die aktuellen items und die rule:
rule:
Code: Alles auswählen
// Globale Variablen immer zu Beginn der Datei definieren!
var Timer tWecker = null
rule "Wecker Change"
when
Member of gWecker changed
then
logInfo("wecker_test","Rule Wecker Change getriggert")
if(previousState == NULL) return;
// initialize all items that are of status NULL
if(!(WeckDimmzeit.state instanceof Number)) WeckDimmzeit.postUpdate(1)
if(!(WeckMaximum.state instanceof Number)) WeckMaximum.postUpdate(100)
gWecker.members.filter[i | i.state == NULL && i instanceof SwitchItem].forEach[ n | n.postUpdate(OFF)]
gWecker.members.filter[i | i.state == NULL && i instanceof NumberItem].forEach[ n | n.postUpdate(0)]
var Number nWeckZeit = (WeckZeitStunde.state as Number) * 60 + (WeckZeitMinute.state as Number)
WeckZeit.postUpdate(nWeckZeit.intValue)
logInfo("wecker_test","1 Status WeckDimmzeit: {}",WeckDimmzeit.state)
tWecker?.cancel
tWecker = createTimer(now.withTimeAtStartOfDay.plusMinutes(nWeckZeit.intValue).plusDays(if(now.getMinuteOfDay < nWeckZeit.intValue) 0 else 1), [ |
if((gWecker.members.filter[i | i instanceof SwitchItem && i.name.contains(now.getDayOfWeek.toString)].head.state == ON && (MyDimmer.state as Number) < (WeckMaximum.state as Number))) {
MyDimmer.sendCommand( (MyDimmer.state as Number) + 1)
tWecker.reschedule(now.plusSeconds((WeckDimmzeit.state as Number).intValue))
}
else
tWecker.reschedule(now.withTimeAtStartOfDay.plusMinutes((WeckZeit.state as Number).intValue).plusDays(1))
])
end
Code: Alles auswählen
Group gWecker
Number WeckZeitStunde "Stunde [%d]" (gWecker)
Number WeckZeitMinute "Minute [%d]" (gWecker)
Switch WeckZeitTag_1 "Montag [%s]" (gWecker)
Switch WeckZeitTag_2 "Dienstag [%s]" (gWecker)
Switch WeckZeitTag_3 "Mittwoch [%s]" (gWecker)
Switch WeckZeitTag_4 "Donnerstag [%s]" (gWecker)
Switch WeckZeitTag_5 "Freitag [%s]" (gWecker)
Switch WeckZeitTag_6 "Samstag [%s]" (gWecker)
Switch WeckZeitTag_7 "Sonntag [%s]" (gWecker)
//String weckZeitMessage "%s"
//Number weckZeitStunde "Stunde [%d]" <clock>
//Number weckZeitMinute "Minute [%d]" <clock>
Number WeckMaximum "Maximum [%d%%]"
Number WeckDimmzeit "Dimmzeit [%d Sek]"
Number WeckTage
Number WeckZeit
Dimmer MyDimmer "TradFri Wecker [%d %%]" { channel="tradfri:0220:gwa0c9a0d9a769:65548:brightness" }
Code: Alles auswählen
2020-10-19 13:10:00.065 [ERROR] [org.quartz.core.JobRunShell ] - Job DEFAULT.Timer 2 2020-10-19T13:10:00.000+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
org.eclipse.xtext.xbase.impl.XIfExpressionImpl@6f8d60a4 (conditionalExpression: false)
} ] threw an unhandled Exception:
java.lang.reflect.UndeclaredThrowableException: null
at com.sun.proxy.$Proxy189.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:48) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [bundleFile:?]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [bundleFile:?]
Caused by: org.eclipse.smarthome.model.script.engine.ScriptExecutionException: Could not cast NULL to java.lang.Number; line 24, column 132, length 24
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter._doEvaluate(ScriptInterpreter.java:253) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:245) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1205) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1135) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:1081) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:991) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:237) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:981) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:237) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:469) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:255) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:458) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:239) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:201) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
... 4 more
Ich hoffe auf Hilfe
Gruss
Andreas
and IT works
- udo1toni
- Beiträge: 13858
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Wecker mit TRADFRI realisieren
Kurzerklärung: Dein Dimmer MyDimmer wird noch keinen gültigen Wert haben.
Lange Version:
Die Fehlermeldung liefert threw an unhandled Exception: und als Grund weiter unten: Caused by: org.eclipse.smarthome.model.script.engine.ScriptExecutionException: Could not cast NULL to java.lang.Number; line 24, column 132, length 24
In Zeile 24, Spalte 132 Beginnt der Ausdruck MyDimmer.state as Number welcher offensichtlich zu mZeitpunkt der Ausführung NULL enthält, das ist keine gültige Zahl und kann also auch nicht nach Number gecastet werden. Im Zweifel kannst Du im Block // initialize all items that are of status NULLeine Zeile ergänzen:
Die Rule geht dann halt davon aus, dass der Dimmer, falls er noch keinen Wert hat, sicher aus ist.
Lange Version:
Die Fehlermeldung liefert threw an unhandled Exception: und als Grund weiter unten: Caused by: org.eclipse.smarthome.model.script.engine.ScriptExecutionException: Could not cast NULL to java.lang.Number; line 24, column 132, length 24
In Zeile 24, Spalte 132 Beginnt der Ausdruck MyDimmer.state as Number welcher offensichtlich zu mZeitpunkt der Ausführung NULL enthält, das ist keine gültige Zahl und kann also auch nicht nach Number gecastet werden. Im Zweifel kannst Du im Block // initialize all items that are of status NULLeine Zeile ergänzen:
Code: Alles auswählen
if(!(MyDimmer.state instanceof Number)) MyDimmer.postUpdate(0)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet