Abfall-Info (die x-te Variante)

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Antworten
BitMac
Beiträge: 183
Registriert: 27.11.2015, 09:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal
Danksagung erhalten: 8 Mal

Abfall-Info (die x-te Variante)

Beitrag von BitMac » 13.05.2021, 18:09

Lösungen für Termin-Erinnerungen gab's hier ja schon viele. Aber irgendwie sagte mir das alles nicht zu.
Dann doch lieber was Eigenes. Fast jedenfalls. Für das Script hatte ich hier im Forum eine Variante gefunden,
die ich als Template benutzt habe. Leider weiß ich den Autor nicht mehr. Deswegen kann ich an dieser Stelle leider nicht auf den Thread
verweisen. Falls jemand Teile seines Scriptes hier wiedererkennt, bitte melden. Dann hole ich das nach.

Verwendete Hardware ist der Tischaufsteller HMIP-DS55, sowie das 8-bit Empfängermodul HM-MOD-Re-8.
An das Empfangsmodul habe ich dann LED's (mit passenden Vorwiderständen) direkt angeschlossen. Das Modul kann die Ströme ja treiben.
Papiermüll - Blaue Led
Gelbe Tonne - Gelbe Led
Biomüll - Grüne Led
Restmüll - rote Led

Soweit die Hardware. Nicht Spektakuläres, aber in der Diele nicht zu übersehen.
Das Wandtaster-Display wollte ich nicht verwenden. War mir zu teuer und das Display zu klein. Außerdem hatte ich den HM-MOD-Re-8 noch rumliegen.

Funktionsbeschreibung
Einen Tag bevor der Müll abgeholt wird, leuchten die entsprechenden LED's auf.
Es wird timergesteuert morgens um 5h die gesamte ics-Kalenderdatei von meinem Provider (in meinem Fall nicht Google) eingelesen
und in einem String gespeichert.
Diesen String durchsuche ich nach Terminen für den nächsten Tag.
Den bei diesen Terminen hinterlegten Text vergleiche ich mit meinen Schlüsselwörtern.
In meinem Fall: Bio, Gelbe, Gelbe/Papier, Rest.
Das setzt natürlich voraus, das man die entsprechenden Schlüsselwörter auch in seinem Kalender eingetragen hat.
Das Script sorgt dann dafür das die entsprechende LED angesteuert wird.

Ich weiß nicht, ob alle ics-Dateien gleich aufgebaut sind.
Deswegen hier ein Auszug aus meiner ics-Datei mit der Beschreibung für die Suchstrings:

BEGIN:VEVENT
CREATED;VALUE=DATE-TIME:20201222T141032Z
DTEND;VALUE=DATE:20210325
DTSTART;VALUE=DATE:20210324 <-- Suchstring für das Datum
TRANSP:TRANSPARENT
DTSTAMP;VALUE=DATE-TIME:20201222T141040Z
LAST-MODIFIED;VALUE=DATE-TIME:20201222T141040Z
UID:46403aed-9f10-406b-bf9b-025ef5de63cb
SUMMARY:Gelbe/Papier <-- Suchstring für den Anfang vom Text; CR ist das Ende vom Text
END:VEVENT
BEGIN:VEVENT
CREATED;VALUE=DATE-TIME:20201222T145056Z
DTEND;VALUE=DATE:20211230
DTSTART;VALUE=DATE:20211229


Zum Testen habe ich mir eine ics-Datei lokal abgelegt und damit rumgespielt.
Die entsprechende Syntax ist im Script drin, aber auskommentiert.

Für das Script muß eine Systemvariable "abfallkalender" vom Typ String angelegt werden.

Code: Alles auswählen

integer i;
integer laenge;
string heute;
real date;
string s_art;

! ########## Vom Server einlesen ##########
var url = "https://xxxx.de/calendars/ics/4c9k7xu1xd2na";
dom.GetObject("CUxD.CUX2801001:4.CMD_SETS").State("wget -q -O - '"#url#"'");


! ########## oder zum Testen lokal einlesen ##########
! dom.GetObject ("CUxD.CUX2801001:4.CMD_SETS").State ("cat /media/usb0/calendar.ics");


dom.GetObject ("CUxD.CUX2801001:4.CMD_QUERY_RET").State (1);
string str_abfall_kal = dom.GetObject ("CUxD.CUX2801001:4.CMD_RETS").State();
laenge = str_abfall_kal.Length();

var uts_morgen = 1.0*(system.Date("%F").ToTime().ToInteger()) + 86400;

var t_morgen = uts_morgen.ToTime(); 

s_art= "";
dom.GetObject("abfallkalender").State(s_art);       ! Abfallvariable leeren

while (i < laenge) {
    string abfrage= str_abfall_kal.Substr(i,19);

    if (abfrage == "DTSTART;VALUE=DATE:") {
       string str_date= str_abfall_kal.Substr(i+19,8);    ! Monat und Tag extrahieren
       string YY = str_date.Substr(0,4);
       string MM = str_date.Substr(4,2);
       string DD = str_date.Substr(6,2);
       string sDate = YY#"-"#MM#"-"#DD#" 00:00:00";

    
       if (sDate == t_morgen) {                              ! Es gibt morgen ein Termin

         while (abfrage != "SUMMARY:") { 
              abfrage= str_abfall_kal.Substr(i,8);
              i=i+1;
         };

         var s_anf= i+7;                                  ! Index vom ersten Stringbuchstaben
         while (abfrage != "\n") {                        ! Das Ende vom String suchen. 
               abfrage= str_abfall_kal.Substr(i,1);
               i=i+1;
         };

         var s_end= i-1;                                    ! Index vom letzten Stringbuchstaben       
         s_art=  str_abfall_kal.Substr(s_anf,s_end-s_anf);  ! Gesuchten String zusammenbauen

         dom.GetObject("abfallkalender").State(s_art);      ! Da steht die Müllsorte für den nächsten Tag drin
       };                            
    }
    i=i+1;
};

! =============== Abfall-Infos löschen ============================
dom.GetObject("BidCos-RF.PEQ0509xxx:1.STATE").State(0);
dom.GetObject("BidCos-RF.PEQ0509xxx:2.STATE").State(0);
dom.GetObject("BidCos-RF.PEQ0509xxx:3.STATE").State(0);
dom.GetObject("BidCos-RF.PEQ0509xxx:4.STATE").State(0);


! =============== Abfall-Infos neu setzen =========================
! LED Grün
if (s_art == "Bio") {                         
   dom.GetObject("BidCos-RF.PEQ0509xxx:3.STATE").State(1);
   }

!  LED Rot
if (s_art == "Rest") {                         
   dom.GetObject("BidCos-RF.PEQ0509xxx:1.STATE").State(1);
   }  

!  LED Gelb
if (s_art == "Gelbe") {                         
   dom.GetObject("BidCos-RF.PEQ0509xxx:2.STATE").State(1);
   }

!  LED Gelb
if (s_art == "Gelbe/Papier") {                         
   dom.GetObject("BidCos-RF.PEQ0509xxx:2.STATE").State(1);
   dom.GetObject("BidCos-RF.PEQ0509xxx:4.STATE").State(1);
   }

!  LED blau
if (s_art == "Papier") {                         
   dom.GetObject("BidCos-RF.PEQ0509xxx:4.STATE").State(1);
   }
20210513_164429.jpg
20210513_164420.jpg

Antworten

Zurück zu „Projektvorstellungen“