NEWS
[gelöst] Blockly - ical Termin (heute) - Biathlon
-
Hallo zusammen,
ich würde gerne meinen ical Biathlon Kalender auslesen und wenn heute ein Event stattfindet, dann mir eine Telegramm Nachricht mit dem Inhalt der Notiz versenden.
Hat da jemand ein Blockly Beispiel für mich?
Danke.
-
@soc sagte in Blockly - ical Termin (heute) - Biathlon:
Hat da jemand ein Blockly Beispiel für mich?
Hat jemand deinen Kalender und deine iCal -Konfiguration?
-
@homoran Sorry, hatte mich wohl missverständlich ausgedrückt.
Mir ging es bei meine Frage darum, wie ich grundsätzlich mit Blockly auf den Kalender zugreife und feststelle ob es heute einen Termin (oder auch mehrere) gibt.
Wenn ja, wie ich dann aus jedem Termin die Notiz erhalte (welche ich dann via Telegram in einer Nachricht verschicke).
-
@soc sagte in Blockly - ical Termin (heute) - Biathlon:
feststelle ob es heute einen Termin (oder auch mehrere) gibt.
das liegt an deinem Kalender und an deiner ical-Konfiguration
Du könntest das über events lösen und dann von Blockly auf den Event-Datenpunkt zugreifen
Ansonsten müsstest du den ical- Datenpunkt selber nach einem Termin und dem Datum parsen
-
@soc
Du könntest auch den Müllkalender Adapter "missbrauchen". -
@zahnheinrich Keine schlechte Idee.
Hier mal wie der iCal das auflöst: -
@zahnheinrich sagte in Blockly - ical Termin (heute) - Biathlon:
Du könntest auch den Müllkalender Adapter "missbrauchen".
das wäre eine Möglichkeit. Ich selber hab die Events nie hinbekommen, weiß also gar nicht wie man diese richtig konfiguriert
@soc sagte in Blockly - ical Termin (heute) - Biathlon:
Hier mal wie der iCal das auflöst:
ist da etwas in den Ordnern drin?
-
@homoran Ja, im Ordner des 5. Tag steht folgender Eintrag:
-
@soc sagte in Blockly - ical Termin (heute) - Biathlon:
@homoran Ja, im Ordner des 5. Tag steht folgender Eintrag:
Aaah du hast oben editiert und die Screenshots eingestellt!
Da ist es der 15.1, also müsste in 14 auch etwas drin stehenDiese Termine müssten jetzt bei count (today/tomorrow) irgendwann hocchzählen.
Also statt 0 eine 1 bei einem Event.Je nachdem ob du erst am Tag, oder am Tag vorher eine Meldung bekommen willst musst du auf den entsprechenden Datenpunkt triggern
-
@zahnheinrich Das geht leider nicht vollständig. Ich erhalte darüber nicht die Uhrzeit des Event, sondern nur den Tag. Leider.
-
Ich lasse mir wöchentlich deose telegram senden.
Den Part mit den Terminen könntest du eigentlich kopieren und anpassen.Skript kommt gleich.
-
anbei ein Script wie man im DP ical.table nach einem Wort sucht.
Und damit kann man dann arbeiten.
Musst halt abändern./* Kalenderevent in der Zukunft suchen sucht im iCal Adapter nach events, die noch kommen http://forum.iobroker.net/viewtopic.php?f=21&t=3761&sid=4319378b32a0ce096bbbbfc0ebd859ce#p34975 20.09.2016 erstellt von pix 02.02.2017 geändert von bahnuhr */ // Variablen var suchstring = 'Tonne'; // Suchbegriff var stichtag = 1; // 0=heute; 1=morgen; 2=übermorgen; 3=in 3 Tagen var idTabelle = 'ical.0.data.table'; // Instanz eintragen var logging = false; // debug Log ein/ausschalten var tage = ['Heute','Morgen','Übermorgen','In 3 Tagen']; // dafür relative Datumsangabe in iCal-Adapter einschalten und ggf. übersetzen var vText; function datum(x) { var jetzt = new Date(); if (logging) log('Jetztzeit: ' + jetzt); var zeit = new Date (jetzt.getFullYear(), jetzt.getMonth(), jetzt.getDate() + x); // z.B. in drei Tagen um Mitternacht if (logging) log('Zielzeit: ' + zeit); var jahr = zeit.getFullYear(); var monat = (zeit.getMonth()+1 < 10) ? '0' + (zeit.getMonth()+1) : zeit.getMonth()+1; var tag = (zeit.getDate() < 10) ? '0' + zeit.getDate() : zeit.getDate(); return (tag + '.' + monat + '.'); //return (tag + '.' + monat + '.' + jahr); } function pruefeKalender() { var Auto_M = getState('javascript.0.System.Automatik.Müllabfuhr').val; var kalender = getState(idTabelle).val; var tag = datum(parseInt(stichtag,10)); var termin = []; if (logging) log(tag); try{ var ereignisse = JSON.stringify(kalender, null, 2); // Ausgabe als String if (logging) log(ereignisse); for(var i = 0; i <kalender.length; i++) { // alle Events durchgehen if ( (kalender[i].date.indexOf(tag) != -1) || (kalender[i].date.indexOf(tage[stichtag]) != -1) ) { // String Datum oder relatives Datum (nicht nicht) gefunden, also gefunden var term = kalender[i].event; if (term.indexOf(suchstring) != -1) { termin.push(kalender[i].event); log ('Treffer: ' + termin); } } } termin.sort(); if (termin.length === 0) setState('javascript.0.Sonstige.Müllkalender.Müll_morgen', 'kein Eintrag'); if (termin.length >= 1 && (Auto_M === true || Auto_M === 1)) { setState('javascript.0.Sonstige.Müllkalender.Müll_morgen', termin.join(', ')); } } catch (fehler_try) { log('Fehler beim Kalenderevents einlesen ' + fehler_try, 'error'); } } // bei Aktualisierung on ({id: idTabelle, change: 'any'}, function(data) { pruefeKalender(); }); on({id: "javascript.0.System.Automatik.Müllabfuhr", change: "ne"}, function() { // Automatik geändert auf aus -> Folge: Anzeige verschwindet var Auto_M = getState('javascript.0.System.Automatik.Müllabfuhr').val; if (Auto_M === false || Auto_M === 0) { setState('javascript.0.Sonstige.Müllkalender.Müll_morgen', 'kein Eintrag'); } }); // um 16:00 Uhr schedule("0 16 * * *", pruefeKalender); schedule("44 20 * * *", function () { var Auto_M = getState('javascript.0.System.Automatik.Müllabfuhr').val; var Muell = getState('javascript.0.Sonstige.Müllkalender.Müll_morgen').val; if (Muell !== "kein Eintrag" && (Auto_M === true || Auto_M === 1)) { vText = "Müllabfuhr:\nMorgen muss die <b>" + Muell + "</b> rausgestellt werden."; sendTo('telegram', { text: vText, parse_mode: 'HTML' }); } }); //bei Skriptstart pruefeKalender();
-
Was möchtest du denn?
Eine Nachricht für jeden Termin oder nur mit Schlagwort.Haben jetzt ja beide Ansätze.
Hier ein Screen von dem Bereich in meinem Blockly.
Meine Zeitrechnung ist was umständlich. Bekomme die Nachricht jeden Sonntag Abend. Habe ich gemacht, damit keine Termine vom Sonntag bei sind und alle Termine bis den Sonntag drauf abends inbegriffen sind. Wenn man nur die Termine von "heute" haben will geht es was einfacher. Da stellt der Adapter ja schon bereit wie viele da sind. Dann kann einfach diese Zahl Termine aus der Liste nehmen.Bin grad nur am Smartphone. Da stürzt irgendwie der Browser ab, wenn ich einen Export machen möchte.
Falls meine Variante zusagt sag bescheid. Dann besorge ich mir einen Rechner (grad nicht griffbereit). -
@david-g Sieht super aus. Ich möchte eine Nachricht (Morgens um 6:00) wenn HEUTE Termin(e) anstehen.
Der Inhalt sollte dann- Text aus Kalendereintrag
- Ort
- Uhrzeit
sein.
-
So kann ich es dir anbieten.
Fehlt nur der Trigger.
Ort hab ich auch nicht drinnen. Verwende ich in meinen Terminen nie.
Keine Ahnung, ob ical die auch einliest.
(Nicht ganz auf dich angepasst, am Smartphone ist blockly was friemelig).Listet alle heutigen Termine auf wie oben in meinem Screenshot.
Den Wochentag kannst du in deinem Fall ja einfach rausnehmen. Der ist ja logisch.EDIT:
Ggf noch eine Abfrage rein machen, ob count of Events today größer als 0 ist.EDIT 2:
Den Ort bekommt man über "location", bekommst du das selber eingebaut? Genau so machen wie bei termin und termin_datumEDIT 3:
Ort ist bei. Prüfung ob es einen Termin gibt ist drinnen und auch der Ort.
Der Wochentag auch noch. Im Text erstellen Block kannst du ja alles schieben wie du es magst (die ersten beiden Blöcke im Text erstellen Block müssen stehen bleiben)Die Uhrzeit bekomme ich irgendwie nicht hin. Angeblich ist jeder Termin um 23 Uhr. Kannst ja mal bei dir im Datenpunkt schauen ob die Zeiten stimmen.
EDIT 4:
Hatte keine Uhrzeit da ich das im Adapter abgestellt hatte.
Bekommt man über _date.
Heute geht aber nichts mehr, sonst bekomme ich Stress mit meiner Frau.
Also selber versuchen oder was warten. -
ich hab ein js welches xxx-minuten (einstellbar) vor dem termin - wenn ein suchwort - an telegram sendet
location, zeit, datum, event
-
Jetzt ist alles drinnen.
So sieht es in telegram aus:
Reihenfolge kannst du ja beliebig tauschen.
Nur wie oben schonmal geschrieben, die ersten beiden Blöcke bei erstelle Text aus müssen so bleibenDas Blockly:
-
@david-g Super David.
Einen herzlichen Dank und hoffentlich hat Deine Frau davon nix mitbekommen... -
Gerne,
hat gepasst.
Am Smartphone kann man da ja zwischendurch immer mal wieder was machen.Kannst ha ein [gelöst] vor deinen Titel vom Beitrag setzen
Noch was zum Blockly.
Falls du keinen Ort eingegeben hast, steht da trotzdem immer das "-" am Ende der Zeile bei dieser Variabte.
Könnte man aber auch noch wegbekommen mit einer Abfrage. -
Lasse das Blockly bei mir auch mal laufen.
Mich hat das "-" was gestört.Hier habe ich es jetzt entfernt, falls lan Ort eingegeben ist.
<block xmlns="https://developers.google.com/blockly/xml" type="controls_if" id="SG1#fy:/LT+_LtWOw9:=" x="39.319948733669946" y="2932.8166729250734"> <value name="IF0"> <block type="logic_compare" id="~K9qxlSw$|iqluYn$=E["> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="A#AM49+2rPo@~*`kpOQQ"> <field name="ATTR">val</field> <field name="OID">ical.1.data.count</field> </block> </value> <value name="B"> <block type="math_number" id="DE1qH{lXTOIL_qY{RJs#"> <field name="NUM">0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="`%F3I5HDMm{W_0J_o3Y)"> <field name="VAR" id="Nin}JW*y1Vp_$;},D.7Z">liste_term</field> <value name="VALUE"> <block type="get_value" id="mw}m)@^s7YhZ#N9.YJGR"> <field name="ATTR">val</field> <field name="OID">ical.1.data.table</field> </block> </value> <next> <block type="controls_for" id="##,smlQZuUU$Hp)Deinv"> <field name="VAR" id="1]Y7`n@:hU1lh4_N4rup">j</field> <value name="FROM"> <shadow type="math_number" id="A*J}_Qh+*662ncK7Jlh@"> <field name="NUM">1</field> </shadow> </value> <value name="TO"> <shadow type="math_number" id="2+Y:blScaLJrd?cNIno]"> <field name="NUM">10</field> </shadow> <block type="get_value" id="ZVp^WlNoFoFa)X$]=GVR"> <field name="ATTR">val</field> <field name="OID">ical.1.data.count</field> </block> </value> <value name="BY"> <shadow type="math_number" id="cf2:f+!=u[45[`5A^oR)"> <field name="NUM">1</field> </shadow> </value> <statement name="DO"> <block type="variables_set" id="d3!_@rJ(=rJBet8eg*aw"> <field name="VAR" id="mOjNB}.j)RR3:k$kM.L7">obj_termin</field> <value name="VALUE"> <block type="lists_getIndex" id="9T);!$t,Au-eE3B~1Gv;"> <mutation statement="false" at="true"></mutation> <field name="MODE">GET</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id="KK36xP*]R#Wbj5[ySvU{"> <field name="VAR" id="Nin}JW*y1Vp_$;},D.7Z">liste_term</field> </block> </value> <value name="AT"> <block type="variables_get" id="[9^LOR%D~X1zA:VdfwBl"> <field name="VAR" id="1]Y7`n@:hU1lh4_N4rup">j</field> </block> </value> </block> </value> <next> <block type="variables_set" id="9XU7hW*5T;uB$d$6ObCI"> <field name="VAR" id="%9%0UV]g*=a-{TDxkJ2t">termin</field> <value name="VALUE"> <block type="get_attr" id="E0Mq^IGJM,XR/(-,}CrK"> <value name="PATH"> <shadow type="text" id="[(Cf+VL;Ft7YO0(FBwSv"> <field name="TEXT">event</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id="b_LG$ZW%TE8si5J(b:Mp"> <field name="VAR" id="mOjNB}.j)RR3:k$kM.L7">obj_termin</field> </block> </value> </block> </value> <next> <block type="variables_set" id="L-4nSiPs7tQK){NhuP}A"> <field name="VAR" id="HIJ%UiQd%]r!t2:`_t9{">termin_datum</field> <value name="VALUE"> <block type="get_attr" id="zSyV5QdK]%VDm{0U--z["> <value name="PATH"> <shadow type="text" id="kqX{$-vh9,M%3YP5wYpE"> <field name="TEXT">_date</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id="5h-v#4$+b6F~R#^F6q~?"> <field name="VAR" id="mOjNB}.j)RR3:k$kM.L7">obj_termin</field> </block> </value> </block> </value> <next> <block type="variables_set" id="jaM:)-h[SvzaVr$,1{ab"> <field name="VAR" id="wPep`OX`O^fEpJ%f1ug~">ort</field> <value name="VALUE"> <block type="get_attr" id="S@.?MCm42pqS,F.7ACRS"> <value name="PATH"> <shadow type="text" id="o#}lQtc57|^_4;Y_v?ZL"> <field name="TEXT">location</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id="}=.Og}t-hG5EBFM#cyo#"> <field name="VAR" id="mOjNB}.j)RR3:k$kM.L7">obj_termin</field> </block> </value> </block> </value> <next> <block type="controls_if" id="];.6ad~@C_k*YA=JZ5i9"> <value name="IF0"> <block type="logic_compare" id="W3Thh$n.r^`gcD#+i8rp"> <field name="OP">NEQ</field> <value name="A"> <block type="variables_get" id="#kvnaF6A0U`v9#.5WCE5"> <field name="VAR" id="wPep`OX`O^fEpJ%f1ug~">ort</field> </block> </value> <value name="B"> <block type="text" id="{=:*8e0i=^KG;@j4``p+"> <field name="TEXT"></field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="ik!KO.`x;blY`Ov]_k6E"> <field name="VAR" id=";b3g/W*e;GFH|}7)uzqt">text_ort</field> <value name="VALUE"> <block type="text_join" id="SO{-r$OY3{_Q63o]:XHk"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="V$=2#]/uVg5v=;6;2U`i"> <field name="TEXT"> - </field> </block> </value> <value name="ADD1"> <block type="variables_get" id="aHEBYTk3^_wUHV(%(tdG"> <field name="VAR" id="wPep`OX`O^fEpJ%f1ug~">ort</field> </block> </value> </block> </value> </block> </statement> <next> <block type="variables_set" id="Xw~K{!s8GsBtx5@tIcn5"> <field name="VAR" id="b)m])isudJ]Z:`l}GrRL">anstehende_termine</field> <value name="VALUE"> <block type="text_join" id="^JUvnmon_{lP[DJIaZ+l"> <mutation items="9"></mutation> <value name="ADD0"> <block type="variables_get" id="8?NV/z=,lX$)}a)_`g4F"> <field name="VAR" id="b)m])isudJ]Z:`l}GrRL">anstehende_termine</field> </block> </value> <value name="ADD1"> <block type="text_newline" id="7R{vwZ4.$e7S-Pdi^@*)"> <field name="Type">\n</field> </block> </value> <value name="ADD2"> <block type="convert_from_date" id="`0LFOX!yru]-[dfKDn}G"> <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation> <field name="OPTION">hh:mm</field> <value name="VALUE"> <block type="variables_get" id="lUF[SJ-mp}FL]KEGtHLL"> <field name="VAR" id="HIJ%UiQd%]r!t2:`_t9{">termin_datum</field> </block> </value> </block> </value> <value name="ADD3"> <block type="text" id="GN9N$whLIIW,lY5P7Zo+"> <field name="TEXT"> </field> </block> </value> <value name="ADD4"> <block type="variables_get" id="iXe#+!7?SY/S9X]:9Cht"> <field name="VAR" id="%9%0UV]g*=a-{TDxkJ2t">termin</field> </block> </value> <value name="ADD5"> <block type="variables_get" id="dLJn1$?9Zb38^?_[j_5-"> <field name="VAR" id=";b3g/W*e;GFH|}7)uzqt">text_ort</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> <next> <block type="telegram" id="%R4ujjx,8M^2tV9xvj`^"> <field name="INSTANCE">.0</field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="|Y0fQkiSY@@x6f:|czT0"> <field name="TEXT">text</field> </shadow> <block type="variables_get" id=":NHFv)_bDjl2xvAC5Te~"> <field name="VAR" id="b)m])isudJ]Z:`l}GrRL">anstehende_termine</field> </block> </value> </block> </next> </block> </next> </block> </statement> </block>