Smarte Schlafzimmerbeleuchtung Ideen und Tipps Zur Umsetzung gesucht

  • Ich weiß nicht, wie und ob es dort eine priorisierung der Bedingungen gibt,
    aber es gibt Programmiersprachen die einem UND (&&) höhere Priorität zusprechen als einem ODER (||).

    Sprich, ich würde auch heir Klammern setzen

    1. ((now.getHourOfDay() > 18 || now.getHourOfDay()) =6 && getDayOfWeek <=5)

    Nicht dass daraus ein Stunden >18 ODER (Stunden < 6 UND Tag <= 5) ==> hier würde quasi der zweite Teil nur zutreffen, wenn Stunden kleiner 6 UND tag kleinder 5 ist...
    Somit hättest du quasi, entweder ab 18, bzw 19 Uhr JEDEN TAG die Schaltung, oder die Schaltung unter der Woche vor 6 Uhr
    (auch verdammt, ich erkläre so kacke... hoffe man evrsteht was ich meine... :D)

  • Wäre dann also wie bei Punkt vor Strich Rechnung ;)

    && wäre also Punkt-Rechnung und || Strich-Rechnung

    Mal sehen, was die Experten sagen.

    Ich möchte schon erreichen das z.B Wochentags von 18 Bis 5 Uhr Nacht ist
    und am Wochenende bis 9 Uhr.

    Was mir gerade durch den Kopf geht : Einen Urlaubsschalter könnte man ja auch noch einbauen (?)

  • nur now.getHourOfDay() geht natürlich...das ist aber nur für noobs [ae] . nutze zusätzlich ephemeris. dann kannst du nicht nur wochenende rausfiltern sondern auch gleich feiertage.
    montag bis donnerstag + sonntag sind die tage, in denen das licht früher aus soll da am nächsten tag ein werktag ist. also erstmal als notiz: < 5 || == 7 (kleiner 5 oder 7).
    jetzt zusätzlich noch ephemeris values innerhalb der rule erstellen ...bspw:


    die verschiedenen bereiche (bspw zeile 9) müssen extra eingeklammert werden, so dass die variablen einzeln miteinander verglichen werden. du siehst dort einmal (TagebisFeiertag > 1 && morgenWochenende == false) in klammern und dann (now.getHourOfDay() > 17 && now.getHourOfDay() >= 6 && now.getHourOfDay() <=20) ebenfalls. beides zusammen steht dann nochmals in klammern. ist wie mathematik. erst alles in klammern ausrechnen, dann die werte vergleichen. und + und + oder geht also nicht. immer schön alle bereiche trennen.
    zeile 9 errechnet dir "wenn morgen kein feiertag ist und kein wochenende und 6 uhr bis 20.59 uhr dann....", zeile 12 errechnet "wenn morgen feiertag oder wochenende und 6 uhr bis 20.59 uhr".

    du kannst dir also deine abfragen so zusammen schachteln wie du willst.

    Ich würde die "Deko" Beleuchtung gerne auch in der "Nacht" anschalten. Dafür habe ich über ein Netzwerk Item das Ausschalten meiner Mi Box als Expire Item angelegt.
    Soll heißen Kodi aus -> 30 Minuten Timer an -> in den 30 Minuten darf das Licht auch in der Nacht hell werden.
    Wie mache ich zwei "gleichberechtigte" if-Abfragen?

    bring erstmal das andere zum laufen. so kann man dann genau sehen was du umsetzen willst und die hilfestellung ist einfacher.

    edit: ephemeris muss natürlich konfiguriert werden.
    datei erstellen -> /srv/openhab2-conf/services/ephemeris.cfg und dort folgendes rein (region ist bundesland...muss angepasst werden):

    Code
    country=de
    region=be
    dayset-weekend = [SATURDAY,SUNDAY]
    dayset-school = [MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY]
  • War mir ja fast klar, daß du dem Ganzen die Krone aufsetzt.
    Von ephemeris hatte ich schon gelesen. Das ist ja sicher noch eine Nummer besser, auch wenn dieses Jahr die meisten Feiertage auf ein Wochenende fallen. aber es kommen ja hoffentlich auch wieder bessere Zeiten.

    Ob ich die Sache angepaßt kriege??

    Ich dachte ja immer, daß ich logisch denken könnte, aber mit solcher Programmierlogik sieht das doch ein wenig anders aus.

    Ich versehe jetzt schon nicht warum TagebisFeiertag > 1 oder <2

    Aber vielleicht hast du meinen Plan auch nur falsch verstanden? An arbeitsfreien Tagen soll die helle "Deko" Beleuchtung später angehen.
    Meine frau schläft zum Beispiel deutlich länger als ich. Mein Sonntag startet dann nicht so gut, wenn ich um 7 aufstehe und das helle Licht sie weckt.....

    Aber schon mal vielen Dank - die nächsten Abende sind wohl erst einmal Basteltechnisch gesichert - oder vielleicht haut es ja auch ganz schnell hin.

  • Ich versehe jetzt schon nicht warum TagebisFeiertag > 1 oder <2

    ganz einfach. tagebisfeiertag wird ja als ephemeris val dargestellt in der rule.
    TagebisFeiertag > 1 heisst morgen (also wenn es vom heutigen tage mehr als 1 tag (>1) bis zum feiertag dauert) ist kein feiertag
    TagebisFeiertag < 2 heisst morgen oder heute ist ein feiertag (1 wäre morgen, 0 wäre heute)
    oder bspw val heuteWochenende = Ephemeris.isWeekend(0)
    mit heuteWochenende == false oder heuteWochenende == true kannst du in deiner if abfrage ermitteln ob wochenende ist oder nicht.

    Aber vielleicht hast du meinen Plan auch nur falsch verstanden? An arbeitsfreien Tagen soll die helle "Deko" Beleuchtung später angehen.
    Meine frau schläft zum Beispiel deutlich länger als ich. Mein Sonntag startet dann nicht so gut, wenn ich um 7 aufstehe und das helle Licht sie weckt.....

    genau das kannst du damit umsetzen. und nicht nur am wochenende sondern auch an feiertagen. auch selbst konfigurierbare ereignisse sind umsetzbar....geburtstage usw.
    du ermittelst halt ob heute sonntag/wochenende oder feiertag ist.

    Kann man das auch irgendwie simulieren / testen ?

    Also so tun, als wäre heute Wochenende? Wohl eher nicht.

    da musste nichts simulieren, das funktioniert. wenn du bspw telegram integriert hast kannst du dir aber auch statusmeldungen schicken lassen, quasi als [definition='1','0']log[/definition].

    schreib einfach genau das was du umsetzen willst...inkl item namen etc

  • Ich raff es immer noch nicht.
    Ich will doch wissen, ob aktuell ein Feiertag ist oder nicht. Also heute und dann dementsprechend die Beleuchtung anpassen.

    Dann versuche ich erst einmal copy paste und schaue was raus kommt.

    Weiß aber nicht, ob ich heute noch dazu komme.

  • Ich will doch wissen, ob aktuell ein Feiertag ist oder nicht. Also heute und dann dementsprechend die Beleuchtung anpassen.

    als value

    Code
    val String FeiertagName     =   Ephemeris.getNextBankHoliday()
        val long TagebisFeiertag    =   Ephemeris.getDaysUntil(FeiertagName)

    in deiner if abfrage
    TagebisFeiertag == 0

    damit weisst du ob heute feiertag ist.

  • mal ein beispiel für die einschaltroutine.
    zeile 9: wenn tage bis feiertag == 0 (also heute ist feiertag) ODER heute ist wochenende UND zwischen 9uhr und 22.59uhr dann................
    zeile 12: wenn tage bis feiertag > 0 (also mindestens 1 tag bis zum nächsten feiertag) UND heute kein wochenende UND zwischen 7uhr und 20.59uhr dann................
    wichtig ist halt immer nur das du die einzelnen segmente mit klammern separierst und genau die UND/ODER logik beachtest. gerade bei letzterem können schnell schusselfehler entstehen wie du ja einige posts vorher bei der uhrzeit bemerkt hast.

  • Ich habe mir gestern Abend noch eine rule zusammen gebastelt, die im [definition='1','0']log[/definition] keine Fehler geworfen hat und das Licht wenigstens bei einer Bedingung geschaltet hat.
    Eigentlich wollte ich die schon mal zur Überprüfung hier einstellen.
    Sehe ich das richtig, daß ich mit einer rule und zur Zeit vier if Abfragen auskomme und nicht wie bisher mehrere rules "brauche?
    Aber was habe ich vergessen?? Richtig - ich komme von hier aus nicht an die rule
    Ich versuche es mal aus dem Kopf zusammen zu bringen

    wenn
    heute kein Feiertag ODER (das UND aus horschtes Beispiel hat ja hier keine Sinn?) kein Wochenende UND es ist zwischen 06:01 und 20:00
    (Bei den Zeiten tu ich mich noch schwer, weil 20:10 ist ja schon > 20 - also eigentlich schon 21) dann schalte das Taglicht ein


    if ((TagebisFeiertag > 1 || heuteWochenende == false) && (now.getHourOfDay() >= 6 && now.getHourOfDay() <=20)) //Werktag Taglicht 6 bis 20 Uhr


    if ((TagebisFeiertag < 1 || heuteWochenende == true) && (now.getHourOfDay() >= 10 && now.getHourOfDay() <=20)) // kein Werktag Taglicht 10 bis 20 Uhr


    if ((TagebisFeiertag > 1 || heuteWochenende == false) && (now.getHourOfDay() >20 || now.getHourOfDay() <=6)) //Werktag Nachtlicht 20 bis 6 Uhr

    if ((TagebisFeiertag < 1 || heuteWochenende == true) && (now.getHourOfDay() >20 || now.getHourOfDay() <=10)) // kein Werktag Nachtlicht 20 bis 10 Uhr

    hmm - habe ich da alle Klammern richtig?


    Dann brauche ich eigentlich nur noch ein Dummy Switch "Urlaub", den ich in die kein Werktag if-abfrage einbaue ?

    if (((TagebisFeiertag < 1 || heuteWochenende == true) && (now.getHourOfDay() >20 || now.getHourOfDay() <=10) &&( item Urlaub=ON) ))) // kein Werktag und Urlaub Nachtlicht 20 bis 10 Uhr

    und in das Taglicht könnte ich noch mein Kodi Timer Item einbauen, damit das Taglicht auch abends angeht, wenn kodi innerhalb der letzen 30 minuten offline gegangen ist.


    Ephemeris habe ich anhand von @horschtes Beitrag eingerichtet. Funktioniert anscheinend auch. (Im Log taucht eine Meldung auf so in etwa : heute ist kein Wochenende und bis zum nächsten Feiertag sind noch 5 Tage ).
    Obwohl ich immer noch verwundert bin, daß ich nichts installieren mußte (kein addon o.ä.) den "Kalender" hat OH dann auch gleich mit an Bord?
    Ich muss jetzt aber noch in die rule einbauen, daß ephemeris täglich angeschmissen wird?

  • Sehe ich das richtig, daß ich mit einer rule und zur Zeit vier if Abfragen auskomme und nicht wie bisher mehrere rules "brauche?

    ja natürlich kannst du mehrere if in einer rule verwenden. selbst weiteres verschachteln (if in einem anderen if) ist möglich. speziell wenn das die gleiche aktion (licht) unter verschiedenen umständen (tage, uhrzeiten) auslöst ist das ganze übersichtlicher als wenn du x rules dafür anlegst.

    if ((TagebisFeiertag > 1 || heuteWochenende == false) && (now.getHourOfDay() >= 6 && now.getHourOfDay() <=20)) //Werktag Taglicht 6 bis 20 Uhr

    TagebisFeiertag > 1 heisst mindestens 2....also übermorgen. brauchst du bestimmt nicht.

    heute kein Feiertag ODER (das UND aus horschtes Beispiel hat ja hier keine Sinn?) kein Wochenende UND es ist zwischen 06:01 und 20:00

    falsch! du nutzt ein ODER bei TagebisFeiertag > 1 || heuteWochenende == false. wieder ein logigfehler. heuteWochenende == false würde jeden wochentag triggern an dem kein feiertag ist weil du || nutzt. du brauchst da ein UND ->
    heute kein feiertag UND kein wochenende. einfach mal im kopf die konstellation durchgehen.

    (Bei den Zeiten tu ich mich noch schwer, weil 20:10 ist ja schon > 20 - also eigentlich schon 21) dann schalte das Taglicht ein

    du fragst die stunde des tages ab und nicht die genaue uhrzeit, da ist dein denkfehler. == 20 heisst bspw 20.00uhr bis 20.59uhr. daher auch dein fehler in den letzten beispielen.
    (now.getHourOfDay() >= 6 && now.getHourOfDay() <=20)) ist also nicht wie du annimmst Werktag Taglicht 6 bis 20 Uhr sondern 6.00-20.59uhr

    Obwohl ich immer noch verwundert bin, daß ich nichts installieren mußte (kein addon o.ä.) den "Kalender" hat OH dann auch gleich mit an Bord?
    Ich muss jetzt aber noch in die rule einbauen, daß ephemeris täglich angeschmissen wird?

    das ist seit oh 2.5 mit an board. da brauchst du gar nichts mehr machen.

    hmm - habe ich da alle Klammern richtig?

    sieht so aus

  • Oweia ich und Logik werden wohl doch keine Freunde.

    Irgendwie brauche ich für die Anwendung doch gar keine Tage bis xy. Kann ich nicht analog zu

    val heuteWochenende = Ephemeris.isWeekend(0)

    aus
    isBankHoliday: returns true if today is a bank holiday

    ein
    val heuteFeiertag = Ephemeris.isBankHoliday

    machen?

    Wenn das geht, könnte ich doch einfach prüfen

    if ((heuteFeiertag || heuteWochenende == false)
    if ((heuteFeiertag || heuteWochenende == true)

    oder muß es && heißen? Das habe ich immer noch nicht verstanden.

    Für mich heißt Feiertag && Wochenende der Feiertag ist am Wochenende ??

    Ich denke da wohl falsch also nicht :

    Feiertag + Wochenende false

    sondern

    Feiertag false + Wochende false
    also wird die gleiche Prüfung für jedes Element einzeln gemacht?


    Ach so, eine Frag bleibt noch - ephemeris täglich anschmeissen ??

  • anhand deiner letzten beispiele kann ich mir langsam zusammenreimen was du genau willst


    zeile 9 (taglicht werktags) : tagebisfeiertag > 0 (also heute kein feiertag) + heuteWochenende == false (also heute ebenso kein wochenende) und wenn uhrzeit > 5 und < 20 (also 6.00 bis 19.59 uhr)
    zeile 12 (nachtlicht werktags) : tagebisfeiertag > 0 (also heute kein feiertag) + heuteWochenende == false (also heute ebenso kein wochenende) und wenn uhrzeit < 6 oder > 19 (also 00.00 uhr - 05.59 uhr zusätzlich ab 20 uhr)

    zeile 15 (taglicht feiertags) : tagebisfeiertag == 0 (also heute ist feiertag) ODER heuteWochenende == true (also heute wochenende) und wenn uhrzeit > 9 und < 20 (also 10.00 uhr - 19.59 uhr)
    zeile 18 (nachtlicht feiertags) : tagebisfeiertag == 0 (also heute ist feiertag) ODER heuteWochenende == true (also heute wochenende) und wenn uhrzeit < 10 und > 19 (also 00.00 uhr - 09.59 uhr zusätzlich ab 20 uhr)


    Ach so, eine Frag bleibt noch - ephemeris täglich anschmeissen ??

    wie "anschmeissen"? das läuft doch von allein

  • Wenn ich das so lese glaube ich immer es zu verstehen.
    Merke dann aber daß es nicht der Fall ist, wenn ich es anpassen will.

    War mir gar nicht klar, daß mein Ansinnen so blöd formuliert war.

    Und jetzt würde ich halt noch gerne das "Taglicht" einschalten wenn mein Kodi aus dem Netz gegangen ist.
    Also wenn wir innerhalb der "Nachtlicht-Zeit" den Fernseher ausschalten und ins Bett gehen.

    Dann kann ich noch ein oder (|| )anschließen?

    Code
    if (((TagebisFeiertag > 0 && heuteWochenende == false)  && (now.getHourOfDay() > 5  && now.getHourOfDay() < 20) || (KodiÜberwachungsitem =OFF))) {
                    taglicht.sendCommand(ON)
                }

    Klammern richtig??


    Ephemeris anschmeißen, weil ich in einigen Post was davon gelesen hatte, daß da irgendwie per cron täglich was gemacht wurde.
    Weiß aber nicht mehr in welchem Zusammenhang. - gut, muß also nicht

  • Ephemeris anschmeißen, weil ich in einigen Post was davon gelesen hatte, daß da irgendwie per cron täglich was gemacht wurde.

    das ist blödsinn wenn das so geschrieben wurde.

    Und jetzt würde ich halt noch gerne das "Taglicht" einschalten wenn mein Kodi aus dem Netz gegangen ist.
    Also wenn wir innerhalb der "Nachtlicht-Zeit" den Fernseher ausschalten und ins Bett gehen.

    ein paar klammern sind zuviel. ausserdem ein fehler. ein item innerhalb von if muss so aussehen: KodiÜberwachungsitem.state == OFF (also .state anhängen und = muss == sein.
    allerdings weiss ich nicht was dein KodiÜberwachungsitem ist. ist das immer an/aus oder wie?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!