Seite 4 von 4

Re: Wecker mit TRADFRI realisieren

Verfasst: 19. Okt 2020 19:11
von atk69
Vielen Dank Udo
verstanden habe ich es, aber leider funktioniert die Ergänzungszeile nicht.
bzw. eigentlich schon, da die Fehlermeldung weg ist.
Aber der Wecker läuft denoch nicht (mehr).
Vermutlich habe ich noch andere Probleme: Ich habe mehrere Neustarts gemacht.
Dabei ist mir aufgefallen, dass die Items nicht sauber eingelesen werden (verschiedene Dateien).
Z.B. fehlt plötzlich das Item für den Lichtwert (Weatherman), speichere ich die items-Datei neu ab, ist wieder alles ok.

Zum Glück habe ich bis Ende Jahr noch Homeoffice, genug Zeit wieder alles zu richten ;-)

Gruss
Andreas

Re: Wecker mit TRADFRI realisieren

Verfasst: 10. Nov 2020 07:58
von atk69
Hallo Zusammen
wollte nochmal Feedback gegen:
Inzwischen habe ich openhab via Docker auf meinem NAS am laufen. Wenn die Pfadanpassungen usw. gemacht sind, eine echt komfortable Lösung.Besser als das QNAP-Plugin ;-)
Habe das Ganze natürlich genutzt, um alles neu - und sauber !- zu konfigurieren. "Spickzettel" hatte ich ja (alte Konfig).
Jetzt funktioniert wieder alles perfekt und auch ohne besondere Fehlermeldungen im Log.
Auch der Wecker arbeitet wieder :-)
War allerdings mein Fehler, bzw. ein nicht erklärbares Verhalten seitens Ikea.
Das Item hat sich aus irgendeinem Grund verändert: Der Channel hatte einen leicht veränderten Wert.
Das ist mir leider nicht aufgefallen. Nein, den Bulb habe ich nicht gewechselt, auch nicht das Gateway.

Egal, jetzt ist wieder alles gut und Dank Udo ist Wecker sogar noch verbessert worden ;-)

Gruss
Andreas

Re: Wecker mit TRADFRI realisieren

Verfasst: 4. Jun 2021 16:03
von atk69
Hallo zusammen

nach dem Umstieg auf OH3 gbt es (natürlich) Probleme mit dem Wecker.
Offensichtlich ein java Problem:

Code: Alles auswählen

[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'wecker-1' failed: 'withTimeAtStartOfDay' is not a member of 'java.time.ZonedDateTime'; line 24, column 27, length 24 in wecker
"withTimeAtStartOfDay" muss ich wohl konvertieren.
Ich habe folgendes geändert:

Orginal Rule aus OH2.5

Code: Alles auswählen

// Globale Variablen immer zu Beginn der Datei definieren!
val String filename = "wecker.rules"
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(!(MyDimmer.state instanceof Number)) MyDimmer.postUpdate(0)
    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
Hier die geänderte für OH3:

Code: Alles auswählen

// Globale Variablen immer zu Beginn der Datei definieren!
val String filename = "wecker.rules"
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(!(MyDimmer.state instanceof Number)) MyDimmer.postUpdate(0)
    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([b]ZonedDateTime.now()[/b].plusMinutes(nWeckZeit.intValue).plusDays(if([b]now.getMinute()[/b] < 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(ZonedDateTime.now().plusMinutes((WeckZeit.state as Number).intValue).plusDays(1))
    ])
end
Also nur in der Zeile mit "tWecker = createTimer" ZonedDateTime.now() & now.getMinute() eingesetzt.
Und die Zeile "tWecker.reschedule(ZonedDateTime.now()" geändert.
Das hat wohl nicht genügt. Tut sich nix. Auch keine Fehlermeldung im Log mehr.

Habe mir das "Umschreiben" wohl zu einfach vorgestellt ;-)
Könnte echt etwas Hilfe gebrauchen :-)

Gruss
Andreas

Re: Wecker mit TRADFRI realisieren

Verfasst: 5. Jun 2021 21:14
von curius
Hallo atk69!

Als kurze Ergänzung zum "weichen" Übergang der Helligkeitsstufen von Tradfrilampen kann ich dir folgenden Hinweis geben.
Ich habe meine Lampen alle mittels zigbee2mqtt eingebunden, was ebenfalls einwandfrei funktioniert und auch einige Vorteile mit sich bringt (du brauchst beispielsweise kein Ikea Gateway und kannst den weichen Übergang einstellen)

Mittels Transformation-File sieht das dann für die Helligkeit wie folgt bei mir aus:

Code: Alles auswählen

(function(x){

    var brightness = (x * 254 / 100);

    var result = new Object();
if (x==0) {
    result.state="OFF"
}
else {
    result.brightness = brightness;
    result.transition = 1;
}

    return JSON.stringify(result);

})(input)
Entscheidend ist dabei der Eintrag "transition". Damit steuerst du dann die Zeit in Sekunden, wie lange die Lampe zwischen den Helligkeitsstufen wechselt. Du schaffst dann damit einen "weichen" Übergang...
Ich kann dir jedoch leider nicht sagen, ob du diese Möglichkeit auch über das Main UI hast.

Grüße
Christian

Re: Wecker mit TRADFRI realisieren

Verfasst: 6. Jun 2021 11:51
von atk69
Hallo curius
vielen Dank für deine Rückmeldung.
Da ich eh immer wieder Aussetzer mit dem Ikea-Gateway habe, hört sich das interessant an.
Was für ein Dongle verwendest du, bzw. welches ist empfehlenswert ?

Gruss
Andreas

Re: Wecker mit TRADFRI realisieren

Verfasst: 6. Jun 2021 15:00
von curius
Hallo!

Ich verwende den CC2531 ZigBee USB Stick, welcher für meine Anforderungen absolut ausreichend ist.

Meine openHAB Instanz liegt virtuell am Rechner im Keller, wo ich keinen ZigBee Empfang habe. Aus diesem Grund war es bei mir notwendig den CC2531 im Erdgeschoss am Raspberry Pi über USBIP zu betreiben, was übrigens auch einwandfrei über WLAN funktioniert.

Genaue Informationen zu zigbee2mqtt findest du unter:
https://www.zigbee2mqtt.io/

Du musst nur den Stick flashen und dann mittels Schritt für Schritt Anleitung zigbee2mqtt installieren.
Danach fehlt nur noch ein MQTT Broker (Beispiel: Mosquitto) und es kann losgehen.

Es ist auch kein Problem openHAB, zigbee2mqtt und Mosquitto auf einem einzigen Rechner zu betreiben.

Übrigens ist es mittlerweile auch möglich die OTA Updates für die Ikea Produkte über zigbee2mqtt laufen zu lassen.
Früher war dafür immer noch der Gateway notwendig...
https://www.zigbee2mqtt.io/information/ota_updates.html

Unter folgenden Link findest du noch ein gutes Tutorial für die Einbindung in openHAB:
https://community.openhab.org/t/oh3-ike ... qtt/111943

Es erfordert zwar ein wenig Zeit bis man sich eingelesen hat, aber letztendlich ergeben sich viele Vorteile dadurch.
Vor allem bist du dann in der Lage eine wirklich große Anzahl an ZigBee-Geräten relativ einfach in openHAB einzubinden, ohne dass du für jede Marke und Serie einen eigenen Gateway des Herstellers benötigst - die Aqara Linie von Xiaomi ist da beispielsweise sehr beliebt:
https://www.zigbee2mqtt.io/information/ ... vices.html

Bei Fragen - einfach melden!

Grüße
Christian

Re: Wecker mit TRADFRI realisieren

Verfasst: 6. Jun 2021 18:23
von atk69
Danke curius, für die ausführlichen Infos :P

Gruss
Andreas