NEWS
*gelöst* "Urlaub" aus Kalender auslesen
-
Hallo zusammen,
ich würde gerne meine Skripte noch etwas verbessern, in dem diese Rücksicht auf meinen Kalender nehmen. Steht in meinem Kalender "Urlaub", sollen die Jalousien zum Beispiel nicht direkt bei Sonnenaufgang öffnen, sondern erst später.
Meine Frage wäre nun, wie ich es hinbekomme, meinen Kalender auszulesen und entsprechend die Termine abzufragen.
Ich habe den ICAL-Adapter bereits installiert, weiß aber nicht, wie ich nun die Termine abfrage und dann entsprechend in das Blockly-Skript integriere.Danke!
Gruß surfer
-
@surfer09
zum einen könntest du es über Events im ical Adapter machen.Du kannst aber auch den trashschedule-Adapter zweckentfremden
-
@Homoran : Danke Homoran für deine schnelle Rückmeldung!
Habe gerade schon die Möglichkeit mit den Events im ICAL-Adapter gefunden. Das scheint auch funktioniert zu haben. Ich habe nun einige Datenpunkte mit "Urlaub" - true.
Aber wie frage ich das jetzt mit Blockly ab? So weit bin ich in meiner Programmiererfahrung noch nicht.
Ich habe mein jetziges Skript einmal mit angehangen:
Die Erweiterung hierfür sollte lauten "Wenn Urlaub im Kalender, dann Jalousien später hoch, wenn nicht, dann bei Sonnenaufgang"<xml xmlns="http://www.w3.org/1999/xhtml"> <block type="comment" id="1p?:}6/{(V5f]e9cmV~=" x="62" y="213"> <field name="COMMENT">Jalousie herunterfahren</field> <next> <block type="controls_if" id=".H0*qOTtLx1?Ic9(9=xs"> <value name="IF0"> <block type="logic_compare" id=".h~NK]WR@6LKQKI7=^7z"> <field name="OP">GTE</field> <value name="A"> <block type="time_get" id="5Z,S_)0SA6b$]A[lOzT="> <mutation format="false" language="false"></mutation> <field name="OPTION">wd</field> </block> </value> <value name="B"> <block type="math_number" id="CC~;}te[*5@hT20-F.gf"> <field name="NUM">6</field> </block> </value> </block> </value> <statement name="DO0"> <block type="astro" id="lqEb)F7T:E,]CrmG.zD1"> <field name="TYPE">sunset</field> <field name="OFFSET">17</field> <statement name="STATEMENT"> <block type="control" id="R6*6GptG!oPBI^h3f9w#"> <mutation delay_input="false"></mutation> <field name="OID">hm-rpc.1.00111A499A14B7.4.LEVEL</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="c+t}oHOry+qa8u46#IUL"> <field name="NUM">45</field> </block> </value> <next> <block type="debug" id="`#_BLC;DhcDmx549)r^C"> <field name="Severity">error</field> <value name="TEXT"> <shadow type="text" id="q.Fc6L}c-t~73W@;V(Ph"> <field name="TEXT">Jalousie Büro (oben) heruntergefahren</field> </shadow> </value> </block> </next> </block> </statement> </block> </statement> <next> <block type="comment" id="|JH-}P5P^`Ai.??0cu~z"> <field name="COMMENT">Jalusie hochfahren (wochentags)</field> <next> <block type="controls_if" id="o|~*M:ys!9+I8LBj[#Kh"> <value name="IF0"> <block type="logic_compare" id="PXK|oo?L2X03%HC`_l*b"> <field name="OP">LTE</field> <value name="A"> <block type="time_get" id="On;)JhtGWV|`o^%44GzP"> <mutation format="false" language="false"></mutation> <field name="OPTION">wd</field> </block> </value> <value name="B"> <block type="math_number" id="qo~%qUfanH[*(U5{*2$Y"> <field name="NUM">5</field> </block> </value> </block> </value> <statement name="DO0"> <block type="astro" id="Mbw|Y9wF_Gdg6=)nvvqw"> <field name="TYPE">sunrise</field> <field name="OFFSET">0</field> <statement name="STATEMENT"> <block type="control" id="G,(mWTXK=P[mJ#S!eUko"> <mutation delay_input="false"></mutation> <field name="OID">hm-rpc.1.00111A499A14B7.4.LEVEL</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="m-ln{SJFiwg!vSr)PMPQ"> <field name="NUM">100</field> </block> </value> <next> <block type="debug" id="m|2af8%L)Xq].x~u}D7O"> <field name="Severity">error</field> <value name="TEXT"> <shadow type="text" id="oexEwsQ%tJwg}ZZ}ts;]"> <field name="TEXT">Jalousie Büro (oben) hochgefahren (wochentags)</field> </shadow> </value> </block> </next> </block> </statement> </block> </statement> <next> <block type="comment" id="XR`J}(C`xFUjSQ8s{72v"> <field name="COMMENT">Jalusie hochfahren (Wochenende)</field> <next> <block type="controls_if" id="UR}|}DKEzgeDr9Ep0c3i"> <value name="IF0"> <block type="logic_compare" id="D1)Lc{Y#`n-Uw3;L_P(="> <field name="OP">GTE</field> <value name="A"> <block type="time_get" id="xSwwEwJ|au3V$vY*B`k3"> <mutation format="false" language="false"></mutation> <field name="OPTION">wd</field> </block> </value> <value name="B"> <block type="math_number" id="9fS0B30~fHWjL+|IDgTj"> <field name="NUM">6</field> </block> </value> </block> </value> <statement name="DO0"> <block type="astro" id="jI$d(^Hi^/Ki[A#`kEy="> <field name="TYPE">sunrise</field> <field name="OFFSET">30</field> <statement name="STATEMENT"> <block type="control" id="2/XO|,h[@MxDpskJNde%"> <mutation delay_input="false"></mutation> <field name="OID">hm-rpc.1.00111A499A14B7.4.LEVEL</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="B,7m9bi$}APjf9ETFCc1"> <field name="NUM">100</field> </block> </value> <next> <block type="debug" id="(h@Q!#SEqAsk,9z=;H+w"> <field name="Severity">error</field> <value name="TEXT"> <shadow type="text" id="FTBZ20ty%26[M1y0my,E"> <field name="TEXT">Jalousie Büro (oben) hochgefahren (Wochenende)</field> </shadow> </value> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </xml>
-
@surfer09 sagte:
Ich habe mein jetziges Skript einmal mit angehangen:
Die Abfragen auf Wochentag und Urlaub muss innerhalb der Trigger-Blöcke erfolgen. Mit iCal kenne ich mich nicht aus, weiß also nicht, wie man die Variable urlaub aus iCal setzen kann.
-
@paul53 Danke! Vielleicht kann hier ja noch jemand anderes helfen?!
-
Hallo,
ich nutze folgendes Script um den Ical auszulesen ... es setzt automatisch alle stati. Blockly brauche ich dabei nicht mehr ...
/* 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 */ // User Anpassungen var suchstring = 'Urlaub'; // Suchbegriff var stichtag = 0; // 0 heute; 1 morgen; 2 übermorgen; 3 In 3 Tagen var idTabelle = 'ical.3.data.table'; // Instanz eintragen var logging = false; // debug Log ein/ausschalten // Ende User Anpassungen var tage = ['Heute','Morgen','Übermorgen','In 3 Tagen']; // dafür relative Datumsangabe in iCal-Adapter einschalten und ggf. übersetzen function datum(x) { var jetzt = new Date(); if (logging) log('Jetztzeit: ' + jetzt); //var zeit = new Date(jetzt.getTime() + x * 24 * 60 * 60 * 1000); // es werden genau x Tage, als x * 24 Stunden zugezählt --> nicht gut var zeit = new Date (jetzt.getFullYear(), jetzt.getMonth(), jetzt.getDate() + x); // 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 + '.' + jahr); } function pruefeKalender() { var kalender = getState(idTabelle).val; var tag = datum(parseInt(stichtag,10)); 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 termin = kalender[i].event; if (termin.indexOf(suchstring) != -1) { log('Treffer: ' + tage[stichtag] + ' ' + suchstring); setState("hm-rega.0.3582"/*Wochenende Karsten*/, false); setState("hm-rega.0.14542"/*Spätschicht Karsten*/, false); setState("hm-rega.0.14543"/*Nachtschicht Karsten*/, false); setState("hm-rega.0.14541"/*Frühschicht Karsten*/, false); setState("hm-rega.0.14544"/*Urlaub / Gleitzeit Karsten*/, true); // weitere Aktionen, setState oder so } } } } catch (fehler_try) { log('Fehler beim Kalenderevents einlesen ' + fehler_try, 'error'); } } // bei Aktualisierung //on ({id: idTabelle, change: 'any'}, function(data) { // pruefeKalender(); //}); // 5Min nach Mitternacht schedule("8 0 * * *", pruefeKalender); //bei Skriptstart pruefeKalender();
Hoffe das hilft Dir ...
-
@DjNetwork: Danke für deinen Beitrag! Ich bin nicht so unbedingt der Java-Skript Programmierer, daher kenne ich mich damit eher weniger aus.
Ich müsste eigenlicht „nur“ eine Variable beschreiben, je nachdem was im Kalender steht.
Also „Wenn heute Termin Urlaub im Kalender steht, setze Variable Urlaub auf wahr“
Und diese Variable muss dann bei den Jalousie-Skripten abgefragt werden. aber wie baut man das ein? Geht das auch mit Blockly-Mitteln? -
@surfer09 sagte:
„Wenn heute Termin Urlaub im Kalender steht, setze Variable Urlaub auf wahr“
Wie sieht der Datenpunkt aus (ID), der "Urlaub" für heute enthält (Wert) ?
-
@paul53 sagte in "Urlaub" aus Kalender auslesen:
@surfer09 sagte:
„Wenn heute Termin Urlaub im Kalender steht, setze Variable Urlaub auf wahr“
Wie sieht der Datenpunkt aus (ID), der "Urlaub" für heute enthält (Wert) ?
So würde das Objekt aussehen. Steht Urlaub drin, dann "true", sonst "false"
-
@surfer09
Das Blockly-Script, in dem die Variable urlaub abgefragt wird, ergänzen um:Damit wird die Variable urlaub täglich um 00:03 Uhr und bei Script-Start richtig gesetzt.
-
@paul53 Super Paul! Danke! Ich habe jetzt aber noch ein Verständnisproblem. Wo in den Objekten kann ich die Variable "Urlaub" jetzt sehen? Ich hätte gedacht, dass diese im Javascript.0 Ordner angezeigt wird, das wird sie aber nicht. Muss ich woanders suchen?
-
@surfer09 sagte in "Urlaub" aus Kalender auslesen:
Wo in den Objekten kann ich die Variable "Urlaub" jetzt sehen?
gar nicht.
Dann hättest du einen Datenpunkt anlegen müssen.Diese Variable ist eine reine Scriptvariable und nur in dem Script verfügbar
-
@Homoran Okay, verstehe! Dann wäre mir persönlich ja der Datenpunkt lieber. Ich sehe gerne, wenn auch etwas passiert, bzw. nicht passiert. Das mit der Variable ist ja dann eher unsichtbar, wenn das nur intern für das Skript gilt.
-
@surfer09 sagte in "Urlaub" aus Kalender auslesen:
Dann wäre mir persönlich ja der Datenpunkt lieber.
Dafür hast du ja den Datenpunkt Urlaub im event vom ical
-
@Homoran Du hast Recht, das wäre dann eigentlich doppelt.
Aber wenn ich einen Datenpunkt nehmen würde, müsste das dann so aussehen? -
@surfer09 sagte:
Muss ich woanders suchen?
Ja, unter ical.0. Habe im Bild oben jetzt die komplette ID angegeben.
@surfer09 sagte in "Urlaub" aus Kalender auslesen:
Aber wenn ich einen Datenpunkt nehmen würde, müsste das dann so aussehen?
Wozu noch ein Datenpunkt ?
-
@paul53: ja, stimmt. Ist doppelt.
Für mich jedoch etwas einfacher nachzuvollziehen, aber das ist mein persönliches EmpfindenDanke auf jeden Fall für eure Hilfe!
-
Hallo Freunde,
was mach ich bei 2 Kalendern (2Personen) in einer Ical Instanz vereint. Kann ich mit dem Werkzeug "Ereignissen" auch die beiden Kalender unterscheiden? z.B. Person 1 hat Urlaub und die Person 2 hat keinen Urlaub.
Gruß Michi