NEWS
Echo Dot individueller Wecker mit ICAL Adapter und Blockly
-
Hallo zusammen,
ich nutze aktuell den ICAL und Alexa Adapter, um meinen Kalender auszulesen und bei bestimmten Ereignissen einen Wecker über den Echo Dot einzustellen.
Beispiel: Wenn „Homeoffice“ im Kalender steht, dann stelle Wecker um 6:30 Uhr.
Ich würde aber gerne auch außerhalb dieser Ereignisse individuelle Wecker definieren können.
Beispiel: Wenn Ereignis „Wecker“ um 8:00 Uhr im Kalender steht, dann stelle Wecker um 8:00 Uhr.
Die Skripte für die Wecker habe ich aktuell über Blockly realisiert, das würde ich auch gerne für den individuellen Wecker so machen wollen.
Wie realisiere ich das? Ich müsste neben dem Ereignisnamen auch die Uhrzeit aus dem Kalender abfragen, an dem das Ereignis eingetragen wurde.
Vielleicht kann mir hier jemand auf die Sprünge helfen..Gruß surfer
-
@surfer09 sagte in Echo Dot individueller Wecker mit Blockly:
Die Skripte für die Wecker habe ich aktuell über Blockly realisiert
kannst du das zeigen?
-
@negalein Ja klar. Du definierst zuerst die Wecker im Echo Dot. Diese sind dann nach Anlage in den Objekten unterhalb "Alarm" zu finden. Und je nachdem was im Kalender gefunden wird, wird der eine Wecker deaktiviert und der andere aktiviert.
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="schedule" id="V:|J!--/@U:p`-(.?y)r" x="63" y="63"> <field name="SCHEDULE">0 1,4,5 * * 1-5</field> <statement name="STATEMENT"> <block type="controls_if" id="LT!/72!e;jg6WDD]2df."> <mutation elseif="2" else="1"></mutation> <value name="IF0"> <block type="logic_operation" id="r_l+fmp8cxRIc2GMiJiP"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id="TH1B)(8[b@CETIU~BCRp"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="[Iw2^|str8?v9$E,]O__"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="qG,M@F[yfKIx}w/_,igH"> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.Homeoffice</field> </block> </value> <value name="B"> <block type="logic_boolean" id="vcawmN~(vhnOuXW){#[i"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="XL@:pzq5LX!;N}O%!3`]"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="yx`=,}IL[Psp+$Hzi?k*"> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.krank</field> </block> </value> <value name="B"> <block type="logic_boolean" id=":1126o!=LgCf]0].+H_i"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="04ANH~p}1gkLZi#+Q06{"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="9CUW_Yga0hOPx#NPJyh."> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.Urlaub</field> </block> </value> <value name="B"> <block type="logic_boolean" id="_OZ-JM%~eZ2)|K+UW$1F"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="MQKs$0#XjL_RS!$7TF=B"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G0922M06334407JH.Alarm.ad6598e3-69fb-43c7-aa4b-ea20283a7502.enabled</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id=")Ara,$],Z,Am5`}C5|`a"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="control" id="17X!.cYr8PMKLw(#Z(31"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G0922M06334407JH.Alarm.139b64cd-a05d-41ad-a930-5e810cf40936.enabled</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="7]2p+zLV`D=p#i@IX.CU"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="debug" id="497~rq60z---9b6s~~)T"> <field name="Severity">error</field> <value name="TEXT"> <shadow type="text" id="D,2PXjRbiTIB`2K1[Gk("> <field name="TEXT">Wecker Homeoffice</field> </shadow> </value> </block> </next> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="$CZ@K5+~*z|CYs#x5)~1"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id="E]ZHwuQ}ejT`Z_,SZIVR"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id=",d;uY7/4y5Xcfbu|uu{*"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id="tyk`?bf$LV@HwU-Uz_d7"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="i/oZp#D--nKt7tE2)TOc"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="Yv,5/u4;On7nVJ65F*|h"> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.Homeoffice</field> </block> </value> <value name="B"> <block type="logic_boolean" id="Y?qy/ucjeKnw%OlUpql9"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="V4n#@~8qiLd$=Si,y_uA"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="AoXC*N8pqHtqd?RWDT*v"> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.krank</field> </block> </value> <value name="B"> <block type="logic_boolean" id="NGNV|v9Hah%`8aSEpO9{"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="zLR;`36%Kzs^S~hD3~yy"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="8i2mF.*RjSiBaT+nE8xy"> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.Urlaub</field> </block> </value> <value name="B"> <block type="logic_boolean" id="~#Z({:Mfl;N*U?`svmbD"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="ky5?_2LPrSLTCT/XbMjt"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="BPLyKVFNW1]G$#lb@$)u"> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.Feiertag</field> </block> </value> <value name="B"> <block type="logic_boolean" id="tS;;pX177m%SElo;g|*M"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="%Fq*`[)P}h!oD_r]*/K;"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id=")(1:+5HX{pbvZdtCl=e,"> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.überstundenfrei</field> </block> </value> <value name="B"> <block type="logic_boolean" id="F{z7QQlZMS!b4WvyEnN;"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="control" id="+_L?TB)3,]RU.1p.i.yK"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G0922M06334407JH.Alarm.139b64cd-a05d-41ad-a930-5e810cf40936.enabled</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="4kej#Q}+~c/38:j*JjJ@"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="control" id="Vqj{zMy*bMzvI-K|xR-p"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G0922M06334407JH.Alarm.ad6598e3-69fb-43c7-aa4b-ea20283a7502.enabled</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="dSR8dw.}[}$w+2uTA%o{"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="debug" id="Z!;RWEN*eva.m-s:.OVo"> <field name="Severity">error</field> <value name="TEXT"> <shadow type="text" id="fHiT3wq.[/jDTs3*0_qb"> <field name="TEXT">Wecker Büro</field> </shadow> </value> </block> </next> </block> </next> </block> </statement> <value name="IF2"> <block type="logic_operation" id="DYs]~F(rAX]{e*,f3X)o"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id="Ktw)sR3oLI9-1}z$4!!/"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id=";hF-(IP[Za,l=u%#6xV`"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="*j*Yj%U$N%as7gUZBKbr"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="8|_r_d6+t|W_L($A[?U6"> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.Homeoffice</field> </block> </value> <value name="B"> <block type="logic_boolean" id="D]$!*~le@qV07%05BDVu"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="t#m6Rb--n+rhD2tQNk$%"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="^c:q4u39a/r;wx:3xY-m"> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.krank</field> </block> </value> <value name="B"> <block type="logic_boolean" id="(j{C|kyv8X+;Nz!?@-8="> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="G2eMTwrU;ZFoTt3K8cOn"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="GYI,XBUF|)x*IBHX`,A$"> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.Urlaub</field> </block> </value> <value name="B"> <block type="logic_boolean" id="9zHorLLEvka1Dxk0I7nS"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="$JZ^@ELn(f{7%`+1EC(I"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="zpRVv(ju@{,:[jKTDaqE"> <field name="ATTR">val</field> <field name="OID">ical.0.events.0.today.Feiertag</field> </block> </value> <value name="B"> <block type="logic_boolean" id="%A^c09Rj*IX-_HQT_JO8"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO2"> <block type="control" id="_[|!2qKi)f?2=N.HIrm."> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G0922M06334407JH.Alarm.139b64cd-a05d-41ad-a930-5e810cf40936.enabled</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="Exyh0ojgsX@$u!R^l7sk"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="z$MJ0TcPxw!4Xb@w50G="> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G0922M06334407JH.Alarm.ad6598e3-69fb-43c7-aa4b-ea20283a7502.enabled</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="^ZTA!_BzabTKh6y%iUG|"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="debug" id="9KVB2FZ)2w$azJF41i;n"> <field name="Severity">error</field> <value name="TEXT"> <shadow type="text" id="5V6V!Jgz~+#|!gx.COB5"> <field name="TEXT">Alle Wecker aus, weil Feiertag</field> </shadow> </value> </block> </next> </block> </next> </block> </statement> <statement name="ELSE"> <block type="control" id="[)ZFTf[z{8eQ`IE5v%yR"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G0922M06334407JH.Alarm.139b64cd-a05d-41ad-a930-5e810cf40936.enabled</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="M=lcB8Q,15pONQ~a=/~A"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="EIl;,P:`o,XkaF[5Yo?J"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G0922M06334407JH.Alarm.ad6598e3-69fb-43c7-aa4b-ea20283a7502.enabled</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="_0LtEywuO9oElWNNBHnZ"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="debug" id="?TZ!i4H)6{EAnp`YWD$#"> <field name="Severity">error</field> <value name="TEXT"> <shadow type="text" id="(OpxMEKuv)W,[wgk]d=1"> <field name="TEXT">Alle Wecker aus, weil krank, Urlaub</field> </shadow> </value> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </xml>
-
Ich vermute, dass man diesen Datenpunkt ical.0.data.table auslesen muss und dann entsprechend für den "New Alarm" Datenpunkt im Alexa Adapter aufbereiten muss, sodass ein neuer Wecker erzeugt wird. Leider bin ich programmiertechnisch aber nicht so weit drin, dass ich weiß wie man das umsetzen kann.
Hier der Teil, der im Datenpunkt "ical.0.data.table" zu dem Ereignis aufgeführt ist. Das Ereignis "Wecker individuell", das abgeprüft werden soll ist um 12:00 Uhr am 25.04. im Kalender eingetragen. Somit sollte nun über den Alexa Adapter ein neuer Wecker um 12:00 Uhr am 25.04. erstellt werden.
{"date":"25.04.2025 12:00-13:00","event":"Wecker individuell","_class":"ical_Dennis - privat - Synology ical_today","_date":"2025-04-25T10:00:00.000Z","_end":"2025-04-25T11:00:00.000Z","_section":"","_IDID":"0a93f136-abcde-12345","_allDay":false,"_private":false,"_rule":" ","location":"","_calName":"Dennis - privat - Synology","_calColor":"#14b7cd","_object":{"type":"VEVENT","params":[],"uid":"0a93f136-abcde-12345","description":"","start":"2025-04-25T10:00:00.000Z","datetype":"date-time","end":"2025-04-25T11:00:00.000Z","dtstamp":"2025-04-25T08:09:40.000Z","lastmodified":"2025-04-25T08:09:40.000Z","location":"","sequence":"1","summary":"Wecker individuell"}}
-
@surfer09 wie das geht wüsste ich auch gern.
allerdings brauch ich zum Termin-zeitpunkt andere Aktionen via Datenpunkte ausgelöst, also z.b. Veränderung einer Rolladen-Position oder ein Lichtschalter, d.h. ich müsste den Ereigniszeitpunkt irgendwie in einen zeitgesteuerten Trigger im IOBroker verwandeln.... habe aber keine Idee, wie das gehen könnte....
-
@surfer09 sagte: Hier der Teil, der im Datenpunkt "ical.0.data.table" zu dem Ereignis aufgeführt ist.
Enthält "ical.0.data.table" ein Array als JSON und ist das gezeigte ein Objekt aus dem Array?
Falls ja, könnte man so den individuellen Wecker stellen: -
@paul53
Hallo Paul,
wenn ich wüsste, wo ich das nachsehen kann, ob das JSON ist oder nicht. Ich habe den Teil oben aus dem Objekt kopiert. -
@surfer09 sagte: wo ich das nachsehen kann, ob das JSON ist
Ist der Datenpunkt vom Typ "string" oder "json" und der Wert beginnt mit einer eckigen Klammer
[
?EDIT: In deinem Nachtrag sehe ich, dass er vom Typ "array" ist, also muss die Wandlung
JSON nach Objekt
entfallen, da das der Javascript-Adapter macht. -
@paul53 Der Type ist "state" und der Wert beginnt mit einer [
-
@paul53 Du bist wieder einmal so rasend schnell mit deinen Codes
. Ich versuche gerade nachzuvollziehen, was da passiert, damit ich weiß, was ich jetzt noch wo einbauen muss.
Ich muss ja, wenn "Wecker individuell" für morgen 8:00 Uhr im Kalender steht, den Datenpunkt "alexa2.0.Echo-Devices.Seriennummer.Alarm.New" so beschreiben, dass dieser zu dem Zeitpunkt einen Wecker erstellt. Jetzt wäre die nächste Frage, wie hierzu der Input aussehen muss, damit das passiert.So müsste der Datenpunkt für einen neuen Wecker befüllt werden:
Data to create a new Reminder as String in following format separated by ; as "timestamp;[label];[sound];[recurring]. timestamp as unix timestamp in ms, label as Text, sound as sound ID, recurring either empty for once, "DAILY" for daily or "WEEKLY=MO,TU,WE,TH,FR,SA,SU" with comma separated weekly day list. Fields in example above in brackets mean that they are optional!
-
@surfer09 sagte: Datenpunkt "alexa2.0.Echo-Devices.Seriennummer.Alarm.New"
Von Alexa habe ich keine Ahnung.
Kann man zur per Skript eingestellten Uhrzeit (CRON) den Weckton nicht direkt an das Echo-Gerät ausgeben? -
@paul53 Ja, das scheint auch zu funktionieren. Aber dann gibt er immer vor und nach dem eigentlichen abspielenden Ton einen einzelnen Ton aus.
Also "Tut" - abspielender Ton "Tut"
Das ist der Datenpunkt für den Ton (aus einer Liste auswählbar):
alexa2.0.Echo-Devices.Seriennummer.Commands.soundund dieser hier für die Lautstärke (1-100):
alexa2.0.Echo-Devices.Seriennummer.Commands.speak-volumeIch habe gerade noch etwas herausgefunden. Wenn dieser Datenpunkt auf "false" gesetzt wird, wird der Ton vor und nach dem abzuspielenden Ton nicht abgespielt.
alexa2.0.Echo-Devices.Seriennummer.Commands.cleanup