Müllkalender via openHAB

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

CHUluck4
Beiträge: 7
Registriert: 23. Mär 2021 22:30

Re: Müllkalender via openHAB

Beitrag von CHUluck4 »

StefanH. hat geschrieben: 10. Apr 2021 12:11
CHUluck4 hat geschrieben: 8. Apr 2021 16:12 Wäre super wenn du mir die Auswertung der Telegramantwort einmal erläutern könntest.
Ich hab die glaube ich wichtigen Teile mal extrahiert:

Code: Alles auswählen

import org.openhab.core.model.script.ScriptServiceUtil

rule "telegram.rules - Telegram Reply handler"
when
        Item telegramReplyId received update
then
        val ReplyMessage = telegramMsg.state.toString
        val ReplySender = telegramMsgName.state.toString
        val ReplyId = telegramReplyId.state.toString
        logInfo("telegram.rules", "Telegram Query Reply, ID=" + ReplyId + ", Value=" + ReplyMessage)
        val telegramAction = getActions("telegram","telegram:telegramBot:c492a03354")
        //abfall
        if(ReplyId == "Abfall") {
            if (ReplyMessage == "Ja")
            {
                    ABFALL_ERINNERUNG_NOTWENDIG.sendCommand("OFF")
                    telegramAction.sendTelegram(Long.valueOf(telegramChat_Gruppe.label),  "Ok, " + ReplySender + " ich werde keine weitere Erinnerung senden.")
                    logInfo("telegram.rules", "Abfallerinnerung ausgeschaltet.")
            }
        }
end
Danke dir... ich werde es nachher mal testen.

edit* Hat super funktioniert. Vielen Dank nochmal. Damit kann ich mir hoffentlich weitere Sachen basteln :lol:

dr_vergleich
Beiträge: 10
Registriert: 31. Jul 2017 11:59
Wohnort: Lörrach

Re: Müllkalender via openHAB

Beitrag von dr_vergleich »

StefanH. hat geschrieben: 10. Apr 2021 12:14
Schau dir mal an wie ich das umgesetzt habe. Ich lasse mich einen Tag vorher per Telegram benachrichtigen. Jede Stunde wird mir eine Nachricht geschickt, die ich per Telegram bestaetigen muss. Ansonsten sendet er mir weiterhin Erinnerungen (ich glaube bis Mitternacht).

viewtopic.php?p=28031#p28031

Stefan
Super, vielen Dank für den Hinweis. Ich habe Deine Rules verstanden. Für mich ist es wichtig, dass ich die Regeln auch verstehe. Ich möchte nicht einfach irgendeinen Code kopieren, auch wenn das Ergebnis am Ende funktioniert, ich aber das ganz nicht nachvollziehen kann.

Ich muss zugeben, dass mir die anderen Beispiele in diesem Thread für mich als Anfänger oftmals nicht nachvollziehbar sind, vorallem wenn es um das Bearbeiten / Rechnen mit Variablen und deren Umwandlungen geht.

In Deinen Regeln konnte ich nachvollziehen, wie Du das aktuelle Datum ermittelst und mit dem Datum der nächsten Leerung aus dem Müllkalender vergleichen kannst.

Danke dafür. :D

Lactobacillus
Beiträge: 158
Registriert: 1. Mär 2019 09:13
Wohnort: Untergruppenbach BaWü

Re: Müllkalender via openHAB

Beitrag von Lactobacillus »

Habs jetzt mal geschafft den Müllkalender einzurichten auch einen Eventfilter bislang allerdings über die OH Oberfläche!

Wenn ich nun zum Beispiel als Eintragsfilter Restmüll mache erscheint 11.01.21 aber da sollte doch eigentlich ein Datum in der Zukunft erscheinen:-(

DarkOfSoul
Beiträge: 28
Registriert: 11. Jul 2019 17:40

Re: Müllkalender via openHAB

Beitrag von DarkOfSoul »

Moin Moin,

genau das gleiche Problem habe ich auch. Konntest du das schon lösen?
Oder hat ein anderer eine Idee?

VG
DarkOfSoul

StefanH.
Beiträge: 162
Registriert: 28. Dez 2017 11:37

Re: Müllkalender via openHAB

Beitrag von StefanH. »

Bitte mehr details. am besten mit screenshots

DarkOfSoul
Beiträge: 28
Registriert: 11. Jul 2019 17:40

Re: Müllkalender via openHAB

Beitrag von DarkOfSoul »

Okay,
Eintragsfilter angelegt mit folgenden Config:
Ergebnis-Maximum: 3
Sonnst alles auf Voreinstellung gelassen.

Habe dann die Channels mit den vorhandenen Items aus 2.5 verknüpft.
https://1drv.ms/u/s!ApC5pytcbp9HoDBVtJ49SKMhbyse

Angezeigt werden aber nur die ersten 3 Termine die ich damals in OH 2.5 eingestellt hatte.
https://1drv.ms/u/s!ApC5pytcbp9HoDFb3dMSdIPclWJ6

Rules: Hier habe ich gerade gesehen das DateTime nicht mehr funktioniert. Das müsste ich dann auch noch lösen.

Code: Alles auswählen

val telegramAction = getActions("telegram","telegram:telegramBot:290ee30de3")

rule "Müllkalender"
when
//Time cron "0 * * ? * *"    //every 1 Minute
    Time cron "0 0 16 * * ?" or
    System started
    //Item date_today changed
then
    var String muelltonne_1
    muelltonne_1 = CalDav_Termin.state.toString

    var String muelltonne_2
    muelltonne_2 = CalDav_Termin1.state.toString

    // Prüfung ob der Wert gefüllt ist (damit beim cast auf DateTimeType keine Fehlermeldung erscheint)
    if (muelltonne_1 != "UNDEF") {
        // Datum der Abholung wird mit dem aktuellen Datum verglichen
        // die erste Bedingung prüft, ob das aktuelle Datum vor dem Ablaufdatum + 24 Std. liegt
        // die zweite Bedingungprüft, ob das aktuelle Datum nach dem Datum der Abholung liegt
        if (now.isBefore(new DateTime((CalDav_Date.state as DateTimeType).getZonedDateTime.toInstant.toEpochMilli).plusHours(24)) &&
            now.isAfter(new DateTime((CalDav_Date.state as DateTimeType).getZonedDateTime.toInstant.toEpochMilli).minusHours(16))) {

            // Benachrichtigung per Telegram an Bot senden
            if(CalDav_Date.state == CalDav_Date1.state) {
                telegramAction.sendTelegram ("Müllkalender: " + muelltonne_1 + " & " + muelltonne_2)
                logInfo("INFO","Abfall.rules - Müllkalender: " + muelltonne_1 + " & " +  muelltonne_2)           
            } else {
                telegramAction.sendTelegram ("Müllkalender: " + muelltonne_1)
                logInfo("INFO","Abfall.rules - Müllkalender: " + muelltonne_1)           
            }         
        }
    }
end
Sitemap:

Code: Alles auswählen

    Frame label="Müllabholtermine" {
        Text item=CalDav_Date label="Papiertonne Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin==Papiertonne] icon="papiertonne"
        Text item=CalDav_Date label="Restmüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin==Restabfall] icon="restabfall"
        Text item=CalDav_Date label="Biomüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin==Bioabfall] icon="bioabfall"
        Text item=CalDav_Date label="Gelber Sack Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin==Gelber_Sack] icon="gelber_sack"
        Text item=CalDav_Date1 label="Papiertonne Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin1==Papiertonne] icon="papiertonne"
        Text item=CalDav_Date1 label="Restmüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin1==Restabfall] icon="restabfall"
        Text item=CalDav_Date1 label="Biomüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin1==Bioabfall] icon="bioabfall"
        Text item=CalDav_Date1 label="Gelber Sack Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin1==Gelber_Sack] icon="gelber_sack"
        Text item=CalDav_Date2 label="Papiertonne Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin2==Papiertonne] icon="papiertonne"
        Text item=CalDav_Date2 label="Restmüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin2==Restabfall] icon="restabfall"
        Text item=CalDav_Date2 label="Biomüll Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin2==Bioabfall] icon="bioabfall"
        Text item=CalDav_Date2 label="Gelber Sack Abholung am: [%1$td.%1$tm.%1$tY]" visibility=[CalDav_Termin2==Gelber_Sack] icon="gelber_sack"
    }

StefanH.
Beiträge: 162
Registriert: 28. Dez 2017 11:37

Re: Müllkalender via openHAB

Beitrag von StefanH. »

achso, das ist eine eigene Entwicklung. Und stimmt, DateTime muss zwischen OH 2 und 3 angepasst werden. Schau mal meine Lösung:

Ich lasse mich einen Tag vorher per Telegram benachrichtigen. Jede Stunde wird mir eine Nachricht geschickt, die ich per Telegram bestaetigen muss. Ansonsten sendet er mir weiterhin Erinnerungen (ich glaube bis Mitternacht).

viewtopic.php?p=28031#p28031

DarkOfSoul
Beiträge: 28
Registriert: 11. Jul 2019 17:40

Re: Müllkalender via openHAB

Beitrag von DarkOfSoul »

Danke dir, es lag an einen Tipfehler in den Items ich könnte manchmal auch mit den Kopf durch die Wand laufen.

Wie ich gerade feststellen muss funktioniert die Rule anscheinend doch nicht und zwar macht der folgende Abschnitt wohl Probleme.

Code: Alles auswählen

        if (now.isBefore(new DateTime((CalDav_Date.state as DateTimeType).getZonedDateTime.toInstant.toEpochMilli).plusHours(24)) &&
            now.isAfter(new DateTime((CalDav_Date.state as DateTimeType).getZonedDateTime.toInstant.toEpochMilli).minusHours(16))) {
Warum funktioniert der Code in OH3 so nicht mehr? Wie sollte der nun aussehen und bitte auch den Code erklären. Nur wenn ich es verstehe kann man es richtig anwenden.

Vielen Dank!

DarkOfSoul
Beiträge: 28
Registriert: 11. Jul 2019 17:40

Re: Müllkalender via openHAB

Beitrag von DarkOfSoul »

Moin Moin Zusammen,

ich muss das Thema einmal nei aufgreifen. Wie bereits erwähnt funktioniert die Rule in OH3.0 nicht mehr so wie vorher in 2.5.
Ich habe bereits rausgefunden das ich das NTP-Binding brauche um eine Item mit der Datum und Zeit zu füllen. Das habe ich Installiert und auch habe ich ein Item erstellt was die aktuelle Zeit enthält.

Nun möchte ich eine Erinnerung zwischen 8 Stunden vor und 16 Stunden nach dem Termin von CalDav_Date erhalten. In CalDav_Date ist ein Datum mit 0:00 Uhr hinterlegt. Ich habe noch nicht verstanden wie ich das in OH3 umsetze. Wenn ich das habe muss ich doch nur noch prüfen ob das Item mit der aktuellen Zeit zwischen den

Ich habe mich auch schon bereits bei den Englisch sprachigen Seiten umgeschaut, leider ist mein Englisch so schlecht das ich dort überhaupt nichts verstehe.

Vielen Dank für eure Hilfe.

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Müllkalender via openHAB

Beitrag von nw378 »

StefanH. hat geschrieben: 3. Jan 2021 20:03 hier nun meine neue Implementierung mit OH3 und dem iCalendar Binding.
....

Hoffe das hilft.

Stefan
Vielen Dank für die Vorlage. :-)

Ich habe sie ein wenig modifiziert, zum einen weil ich eine sendBroadcastNotification wollte, zum anderen, weil ich in der Sitemap sehen will, welcher Müll in der nächsten Woche abgeholt wird, siehe Screenshot:

Code: Alles auswählen

rule "abfall.rules - Switches fuer Woche und morgen aktualisieren"
when
    Time cron "0 0 5 * * ? *"    
then
    logInfo("abfall.rules", "Switches fuer Woche und morgen aktualisieren.") 
    val blau = (ABFALL_TERMIN_BLAU.state as DateTimeType).zonedDateTime
    val schwarz = (ABFALL_TERMIN_SCHWARZ.state as DateTimeType).zonedDateTime
    val gelb = (ABFALL_TERMIN_GELB.state as DateTimeType).zonedDateTime
    val gruen = (ABFALL_TERMIN_GRUEN.state as DateTimeType).zonedDateTime
    val tomorrow = now.plusDays(1);
    val delta_blau =  blau.dayOfYear-now.dayOfYear
    val delta_schwarz =  schwarz.dayOfYear-now.dayOfYear
    val delta_gruen =  gruen.dayOfYear-now.dayOfYear
    val delta_gelb =  gelb.dayOfYear-now.dayOfYear
    ABFALLTONNEN_WOCHE.sendCommand("");
    ABFALLTONNEN_MORGEN.sendCommand("");

    var tonnen_woche = "";
    var tonnen_morgen = "";

     if (gruen.year == now.year && gruen.month == now.month && (delta_gruen<7))
    { 
        ABFALL_WOCHE_GRUEN.sendCommand("ON")
        tonnen_woche = tonnen_woche + "Bio "+  delta_gruen + " Tag(e) ";
        postUpdate(muellfarbe,"green")
    }else{
        ABFALL_WOCHE_GRUEN.sendCommand("OFF")
    
    if (blau.year == now.year && blau.month == now.month && (delta_blau<7))
    { 
        ABFALL_WOCHE_BLAU.sendCommand("ON")
        tonnen_woche = tonnen_woche + "Papier "+ delta_blau + " Tag(e)";
        postUpdate(muellfarbe,"blue")
    }else{
        ABFALL_WOCHE_BLAU.sendCommand("OFF")
    }
    if (blau.year == tomorrow.year && blau.month == tomorrow.month && blau.dayOfMonth == tomorrow.dayOfMonth)
    {
        ABFALL_ISTMORGEN_BLAU.sendCommand("ON")
        tonnen_morgen = tonnen_morgen + "Blau + ";
    }else{
        ABFALL_ISTMORGEN_BLAU.sendCommand("OFF")
    }

    if (schwarz.year == now.year && schwarz.month == now.month && (delta_schwarz<7))
    { 
        ABFALL_WOCHE_SCHWARZ.sendCommand("ON")
        tonnen_woche = tonnen_woche + "Restmüll "+  delta_schwarz + " Tag(e)";
        postUpdate(muellfarbe,"black")
    }else{
        ABFALL_WOCHE_SCHWARZ.sendCommand("OFF")
    }
    if (schwarz.year == tomorrow.year && schwarz.month == tomorrow.month && schwarz.dayOfMonth == tomorrow.dayOfMonth)
    { 
        ABFALL_ISTMORGEN_SCHWARZ.sendCommand("ON")
        tonnen_morgen = tonnen_morgen + "Grau + ";
    }else{
        ABFALL_ISTMORGEN_SCHWARZ.sendCommand("OFF")
    }

    if (gelb.year == now.year && gelb.month == now.month && (delta_gelb<7))
    { 
        ABFALL_WOCHE_GELB.sendCommand("ON")
        tonnen_woche = tonnen_woche + "Gelb "+  delta_gelb + " Tag(e)";
        postUpdate(muellfarbe,"yellow")
    }else{
        ABFALL_WOCHE_GELB.sendCommand("OFF")
    }
    if (gelb.year == tomorrow.year && gelb.month == tomorrow.month && gelb.dayOfMonth == tomorrow.dayOfMonth)
    { 
        ABFALL_ISTMORGEN_GELB.sendCommand("ON")
        tonnen_morgen = tonnen_morgen + "Gelb + ";
    }else{
        ABFALL_ISTMORGEN_GELB.sendCommand("OFF")
    }

    }
    if (gruen.year == tomorrow.year && gruen.month == tomorrow.month && gruen.dayOfMonth == tomorrow.dayOfMonth)
    { 
        ABFALL_ISTMORGEN_GRUEN.sendCommand("ON")
        tonnen_morgen = tonnen_morgen + "Grün + ";
    }else{
        ABFALL_ISTMORGEN_GRUEN.sendCommand("OFF")
    }

    if (tonnen_woche.length > 0) {
        postUpdate(ABFALLTONNEN_WOCHE,tonnen_woche); 
        ABFALL_WOCHE_AKTIV.sendCommand("ON");
    }else{
        ABFALL_WOCHE_AKTIV.sendCommand("OFF");
    }
    if (tonnen_morgen.length > 0) {
        ABFALLTONNEN_MORGEN.sendCommand(tonnen_morgen.substring(0, tonnen_morgen.length - 3));
        ABFALL_ISTMORGEN_AKTIV.sendCommand("ON");
    }else{
        ABFALL_ISTMORGEN_AKTIV.sendCommand("OFF");
    }
end

rule "abfall.rules - Muss Abfallerinnerung gesendet werden?"
when
    Time cron "0 0 18 * * ? *"
then
        if (ABFALL_ISTMORGEN_SCHWARZ.state == ON || ABFALL_ISTMORGEN_BLAU.state == ON || ABFALL_ISTMORGEN_GRUEN.state == ON || ABFALL_ISTMORGEN_GELB.state == ON) {
            ABFALL_ERINNERUNG_NOTWENDIG.sendCommand("ON")
            sendBroadcastNotification(ABFALLTONNEN_MORGEN.state.toString() + "e Tonne für morgen schon rausgestellt?")         
        }
end

Code: Alles auswählen

Text item=ABFALLTONNEN_WOCHE valuecolor=[muellfarbe=="blue" ="blue", muellfarbe=="yellow" ="yellow", muellfarbe=="green" ="green", muellfarbe=="black" ="black"]
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von nw378 am 12. Sep 2021 15:12, insgesamt 1-mal geändert.
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Antworten