Ich wollte mich einfach mal ein wenig weiter in Programmierung von Scripten einarbeiten.
Da ist mir zufällig die Kalender-Datei von unserem Abfallentsorger "Zweckverband Abfallwirtschaft Donau-Wald" (Niederbayern) www.awg.de aufgefallen.
Beispieldatei als .ics kann ich leider nicht anhängen
Idee war, mich 1 Tag vorher an den Abholtermin von Restmülltonne, Biotonne oder Papiertonne zu erinnern.
Alarmierung bekomme ich über pushover.
Wenn die Datei den letzten Eintrag abgearbeitet hat, erinnert es daran die neue Datei einzuspielen.
Das Script ist mit Sicherheit "unter aller Kanone" programmiert, aber es funktioniert.
Das Einzige was ich noch nicht testen konnte, ist die Nachricht, wenn der letzte Eintrag der Datei abgearbeitet ist, um die Erinnerung zu erhalten, die neue Datei einzuspielen.
Es soll nur als Gedankenstütze für jene sein, die vielleicht auch mal irgendeine formatierte Textdatei über ein Script auswerten wollen.
Eine Unterstützung für etwaige Problemfälle kann ich leider nicht so bieten, da ich beruflich nur sporadisch immer wieder mal Zeit habe, mich mit dem Forum und den Scripten zu befassen.
Und auch bin ich nicht der "Programmierer-Typ", bei zählt dabei "try & error".
Die Erklärung, was wo eingetragen werden muß, steht im Script. CuxD und Pushover sind Vorraussetzung.
Viele Teile, Codeschnipsel habe ich mir aus anderen Scripten zusammengesucht, probiert und lauffähig angepasst.
Viel Spaß damit, vielleicht hilfts ja jemanden als Schnipsellieferant oder Anregung
Code: Alles auswählen
!Stand 15.11.2018
! ----------------------------------------------------------
! Erklärung:
! Die Abfallentsorgung Außernzell www.awg.de bietet für jeden Abholstandort eine Kalenderdatei zum Download an
! Diese Datei abspeichern auf einem eigenen Server oder dgl., die mit http:// .. abrufbar ist
! Die Daten für Server und Dateiname im Script unter Eintrag 1 eintragen
! Daten für Token und User für pushover im Script 2mal eintragen
! Funktion:
! - Das Script liest die .ics Datei aus
! - holt sich das Systemdatum
! - Scriptausführung bei mir täglich um 8:45
! - Wenn am nächsten Tag ( 1 Tag Vorlauf, kann unter Eintrag 2 geändert werden) ein Abholtermin ansteht,
! beachrichtigt mich pushover über den Standort und welche Tonne geleert wird
! - Sollte der letzte Eintag abgearbeitet sein, erinnert mich das Script, die neue .ics-Datei
! neu auf den Server zu spielen ( Gültigkeit der Datei 1 Jahr )
!
! Vorraussetzung:
! pushover funktioniert
! CuxD-Gerät bei mir angelegt: CUX2801001 als Fernbedienung HM-RC-19 KEY
! evtl. CuxD-Gerätenummer anpassen
! -----------------------------------------------------------
! +++++ Definition Variablen +++++
string abfrage = "";
integer i ;
integer laenge ;
var t;
var uts;
! +++++ Aktuelle ics-Datei von AWG auf Server +++++
! Eintrag 1:
var url = "http://<Server>/<evtl.Ordner>/Leerungstermine123456.ics";
! +++++ Abfrage der Datei mit CUxD und Einlesen in Variable / Dateilänge in Variable +++++
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string muell_txt = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
integer laenge = muell_txt.Length();
! +++++ Systemdatum einlesen, in UTS wandeln, Tage Vorlauf aufaddieren +++++
var uts = 1.0*(system.Date("%F").ToTime().ToInteger());
! Eintrag 2:
! +++++ Tage Vorlauf * Sekunden +++++++
uts = uts + ( 1* 86400);
var t = uts.ToTime();
!+++++ Abfrage der kompletten Variable nach Schlüsselwörter +++++
while (i < (laenge-12) )
{
! ----- Ort -------------------------------------------------------------
string abfrage =muell_txt.Substr(i,21);
if ( abfrage == "LOCATION;LANGUAGE=de:" )
{
string ort =muell_txt.Substr((i+21),(35));
};
! ----- Art -------------------------------------------------------------
string abfrage =muell_txt.Substr(i,20);
if ( abfrage == "SUMMARY;LANGUAGE=de:" )
{
string art =muell_txt.Substr((i+20),(11));
if (art == "Restmuellto")
{art = "Restmülltonne";};
if (art == "Papiertonne")
{art = "Papiertonne";};
if (art == "Bioabfallbe")
{art = "Biotonne";};
};
! ----- Datum mit Auswertung, ob Alarm erfolgt ---------------------------
string abfrage =muell_txt.Substr(i,19);
if ( abfrage == "DTSTART;VALUE=DATE:" )
{
string datum =muell_txt.Substr((i+19),(8));
string YY = datum.Substr(0,4);
string MM = datum.Substr(4,2);
string DD = datum.Substr(6,2);
string sDate = YY#"-"#MM#"-"#DD#" 00:00:00";
if ( sDate == t)
{
! +++++ Pushover, wenn Abholdatum und aktuelles Datum mit Vorlauftagen gleich ist ++++++
string nDate1 =sDate.Substr(0,4);
string nDate2=sDate.Substr(5,2);
string nDate3=sDate.Substr(8,2);
string nDate = nDate3#"."#nDate2#"."#nDate1;
string nachrichtstring = art#": "#nDate#": "#ort;
string nachricht = nachrichtstring.UriEncode();
dom.GetObject("CUxD.CUX2801001:10.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -d token=<token> -d user=<user> -d message="#nachricht#" -d sound=pushover -d priority=0 http://api.pushover.net/1/messages.json");
}
};
! -----------------------------------------------------------------------
! +++++ Ende der while-Schleife +++++
i=i+1;
};
! ++++++++++++ Benachrichtigung letzter Eintrag der Datei +++++++++++++++
if ( sDate == t)
{
! ++++++ Pushover ++++++++
nachrichtenstring = "ACHTUNG: Letzter Eintrag der AWG-Datei - Neue Datei auf Server laden, sonst keine Alarmierung mehr möglich!";
string nachricht = nachrichtstring.UriEncode();
dom.GetObject("CUxD.CUX2801001:10.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -d token=<token> -d user=<user> -d message="#nachricht#" -d sound=pushover -d priority=0 http://api.pushover.net/1/messages.json");
};
! ===== Programmende =====