Müllkalender/ Terminerinnerung per Telegram

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Simson
Beiträge: 2
Registriert: 4. Mai 2020 21:56
Answers: 0

Müllkalender/ Terminerinnerung per Telegram

Beitrag von Simson »

Hallo zusammen,

ich bin ganz neu hier im Forum.

Mit dem Thema OpenHab beschäftige ich mich seit ca. 1 Jahr.

Einige Projekte habe ich auch schon erfolgreich umgesetzt.

Jetzt stehe ich aber vor einem Problem.

Ich habe meinen Google Kalender per CalDav Binding in OpenHab eingebunden.

Auch Telegram läuft super.

Habe auch schon ein paar Regeln erstellt die super funktionieren.

Jetzt aber zu meinen Überlegungen:

Ich möchte gerne wenn ich in Telegram „/müll“ eingebe, dass der nächste Mülltermin per Telegram Nachricht verschickt wird.

Mit ist es bisher aber nur gelungen feste Nachrichten Texte zu versenden also in dieser Form:

sendTelegram(„bot1“,“Hallo Welt“)

Gibt es eine Möglichkeit den Inhalt einer Variablen aus einem Item in diesen Text einzubauen?

Beispiel Item:

String CalDav_Muell „Termin [%s]“ <calendar> { caldavPersonal=„calendar:Muell Type:EVENT eventNr.1 value:Name“ }

Die Nachricht sollte dann aus einem festen und variablen Bestandteil bestehen: <Müllart aus dem Item>„ wird am“ < dann die Variable aus dem Datum Item > „geleert“.

Wäre klasse wenn mir jemand dabei helfen kann.

Schon einmal vielen vielen Dank im Voraus.

Gruß

Simon

03chris
Beiträge: 28
Registriert: 4. Feb 2018 17:10
Answers: 1

Re: Müllkalender/ Terminerinnerung per Telegram

Beitrag von 03chris »

Hallo Simson,
wenn Du Telegram Binding nutzt, dann kannst Du
lastMassage Item einlegen

Code: Alles auswählen

String telegramMessage "Telegram Message" { channel = "telegram:telegramBot:bot:lastMessageText" }
das an das Bot gesendete Nachrichten lesen und rulls triggern kann.

Code: Alles auswählen

rule "nächste Mülltermin per Telegram Nachricht"
when    
    Item telegramMessage received update "müll"
then 
        val telegramAction = getActions("telegram","telegram:telegramBot:bot")
        val String telegram_msg = CalDav_Muell.state.toString + " wird am " + CalDav_Date.state.format("%1$td.%1$tm.") + " geleert"
        telegramAction.sendTelegram(telegram_msg)
end
Telegram Aktion kann meines Wissens keine nachrichten lesen.

03chris
Beiträge: 28
Registriert: 4. Feb 2018 17:10
Answers: 1

Re: Müllkalender/ Terminerinnerung per Telegram

Beitrag von 03chris »

sendTelegram(„bot1“,“Hallo Welt“)

Gibt es eine Möglichkeit den Inhalt einer Variablen aus einem Item in diesen Text einzubauen?
Du kannst Platzhalter einsetzen. So wird dann die aus dem oberen Beispiel Nachricht wie folgt aussehen:

Code: Alles auswählen

telegramAction.sendTelegram("%s wird am %s geleert", CalDav_Muell.state.toString, CalDav_Date.state.format("%1$td.%1$tm."))
oder für Telegram Aktion:

Code: Alles auswählen

sendTelegram("bot", "%s wird am %s geleert", CalDav_Muell.state.toString, CalDav_Date.state.format("%1$td.%1$tm."))

Simson
Beiträge: 2
Registriert: 4. Mai 2020 21:56
Answers: 0

Re: Müllkalender/ Terminerinnerung per Telegram

Beitrag von Simson »

Hallo 03chris,

vielen Dank für den Tipp. Hat super funktioniert.

Ich hätte gleich noch eine Frage.

Wenn es nicht unverschämt ist...

Gibt es jetzt noch einen Möglichkeit?

Dass ich immer eine Nachricht bekomme, per Telegram einen Tag bevor ich die Mülltonne raus stellen muss?

Komme da gerade auch nicht wirklich weiter.

Hab es mit einer Rule versucht, dass immer um 17:30 Uhr die Termine abgeglichen werden und wenn ein Termin am nächsten Tag ist soll er mir eine Telegram Nachricht schicken...

Schon mal vielen lieben Dank im Voraus.

Gruß

Simon

03chris
Beiträge: 28
Registriert: 4. Feb 2018 17:10
Answers: 1

Re: Müllkalender/ Terminerinnerung per Telegram

Beitrag von 03chris »

Hallo Simson,
natürlich geht es auch. Vielleicht ist das hier nicht die beste Variante, funktioniert aber zuverlässig.

Code: Alles auswählen

rule "Benachrichtigung für Müllabholung per Telegram"
when 
   Time cron "0 30 17 * * ?"
then 
    val telegramAction = getActions("telegram","telegram:telegramBot:bot")      
	if (now.isAfter(new DateTime((CalDav_Date.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli).minusDays(1)) && 
	    now.isBefore(new DateTime((CalDav_Date.state as DateTimeType).zonedDateTime.toInstant.toEpochMilli))) {
		  telegramAction.sendTelegram("Morgen wird %s  geleert", CalDav_Muell.state.toString.replace("ue", "ü"))
	}
end

Antworten