Bin gerade an einem neuen Projekt, dass mir Morgens im Schlafzimmer meine TRADFRI -Lampe langsam dimmen soll (0-100%).
Auf der suche nach Infos bin ich auf die Seite von Florian gestossen, der ein perfekte Lösung darstellt.
Kurzerhand habe ich es übernommen und es funktioniert auch recht gut.
Bis auf eine "Kleinigkeit": Die Lampe wird nicht gedimmt, sondern nur eingeschaltet.
Da das script von Florian nicht für TRADFRI ausgelegt ist, wird der Fehler wohl im korrekten Befehl liegen.
Da habe ich schon einiges probiert, ohne Erfolg.
Florian hat auf Nachfrage auf seine nicht vorhanden Erfahrung mit TRADFRI verwiesen und deshalb bin ich wieder hier.
Er hat mir erlaubt auf seine Seite zu verlinken: https://www.forwardme.de/2017/02/09/ope ... ichtwecker
Angepasst habe ich nur das item in der rule (SZ_Decke_L_Helligkeit)
Code: Alles auswählen
rule "Wecker - prüfen"
when
Time cron "0 0/1 * * * ?" // minütlicher Aufruf
then
var weckerStunde = (weckerZeitStunde.state as DecimalType).intValue
var weckerMinute = (weckerZeitMinute.state as DecimalType).intValue
var weckerHelligkeit = (weckerMaxHelligkeit.state as DecimalType).intValue
var weckerWartezeit = 1000 * (weckerDimmerSleep.state as DecimalType).intValue
logInfo('rules','helligkeit: ' + weckerHelligkeit +' wartezeit ' + weckerWartezeit)
if (
(now.getHourOfDay.intValue == weckerStunde) && (now.getMinuteOfHour.intValue == weckerMinute)
&& (
((weckerMontag.state == ON) && now.getDayOfWeek.intValue == 1) ||
((weckerDienstag.state == ON) && now.getDayOfWeek.intValue == 2) ||
((weckerMittwoch.state == ON) && now.getDayOfWeek.intValue == 3) ||
((weckerDonnerstag.state == ON) && now.getDayOfWeek.intValue == 4) ||
((weckerFreitag.state == ON) && now.getDayOfWeek.intValue == 5) ||
((weckerSamstag.state == ON) && now.getDayOfWeek.intValue == 6) ||
((weckerSonntag.state == ON) && now.getDayOfWeek.intValue == 7)
)
) {
logInfo ('rules','Wecker wird aktiviert...')
// Wecker nur notwendig, wenn Licht aus ist
if (SZ_Decke_L_Helligkeit.state < weckerHelligkeit) {
var Number dimmer = 0
while (dimmer < weckerHelligkeit) {
// Licht auf Dimmstufe schalten
sendCommand(SZ_Decke_L_Helligkeit, dimmer.intValue)
// Konfigurierte Anzahl an Sekunden warten
Thread::sleep(weckerWartezeit)
// prüfen ob zwischenzeitlich Dimmerhelligkeit manuell veraendert wurde und damit der Wecker ausgemacht wurde
var dimmerStatus = (SZ_Decke_L_Helligkeit.state as DecimalType).intValue
if (dimmer == dimmerStatus) {
dimmer = dimmer + 1
logInfo('rules', 'Wecker: Dimmer plus 1 gesetzt auf ' + dimmer)
} else {
dimmer = 100 // Abbruchbedingung
logInfo('rules', 'Wecker: Abbruch durch Tastendruck')
}
}
logInfo('rules', 'Wecker abgeschlossen, Zielhelligkeit erreicht')
} else {
logInfo('rules', 'Wecker nicht gestartet da Licht bereits heller als Ziel-Helligkeit des Weckers. Helligkeit Licht: ' + SZ_Decke_L_Helligkeit.state)
}
} else {
logInfo('rules','Wecker nicht aktiviert, Bedingung für Wecker trifft nicht zu')
}
end
Alles andere habe ich möglichst als text.
P.S. auf der Suche im Forum ist mir aufgefallen, das ich nicht der erste mit Florians Code bin. Allerdings andere Problematik
Gruss
atk69