Geburtstage von Google Kontakten mit IFTTT auslesen

Solltest du deine Kontakte mit Google synchronisieren, werden dir automatisch deren Geburtstage in deinem Google Kalender angezeigt. Wie du diese nun im ioBroker oder deiner VIS verwenden kannst, zeige ich dir in diesem Artikel.

Voraussetzung

Damit das Auslesen der Geburtstage funktioniert, musst du bei folgenden Services angemeldet sein:

Einrichtung

Im „IoT Assistants“-Adapter meldest du dich zuerst mit deinen Zugangsdaten für ioBroker Pro an:

Danach wechselst du zu IFTTT und installierst dort das Applet „Webhooks„. Nach der Installation klickst du unter „Webhooks“ oben rechts auf „Documentation“:

Dort erhältst du deinen individuellen API-Kley, um die Webhooks nutzen zu können:

Zurück im ioBroker gibst du diesen Key im „IoT Assistants“-Adapter im Reiter „Services und IFTTT“ ein:

Unter dem Feld „IFTTT-Key“ erhältst du eine URL („Link für IFTTT“, die du gleich für den neuen Webhooks benötigst. Wechsle zurück zu IFTTT in die „Webhooks„. Indem du oben rechts auf dein Profilbild klickst, kannst du mit „Create“ einen neuen „Webhook“ erstellen:

Danach klickst du auf „This“ und suchst nach „google calendar“:

Klicke auf „Event from search starts“:

Im nächsten Schritt wählst du unter „Which calendar?“ den Eintrag „Contacts“ aus. Als „Keyword or phrase“ gibst du „hat Geburtstag“ ein. Danach speicherst du den Trigger:

Damit hast du einen Trigger erstellt, der auf „hat Geburtstag“ im „Contacts-Kalender“ reagiert. Als nächstes wählst du „That“ und suchst nach „webhooks“:

Klicke auf „Make a web request“:

Im letzten Schritt fügst du unter „URL“ die Adresse vom IoT Assistant-Adapter ein. Als „Method“ wählst du „POST“ und als „Content type“ den Eintrag „text/plain“. Zuletzt fügst du im Feld „Body“ den Wert „{{Title}} ein. Diesen Wert kannst du auch über „add ingredient“ auswählen.

Nachdem du gespeichert hast, beschreibt IFTTT – sobald ein Geburtstag ansteht – folgenden Datenpunkt:

iot.0.services.ifttt

Problem

Der Datenpunkt bleibt solange bestehen, bis ein neuer Geburtstag ansteht. Solltest du damit eine Anzeige in deiner VIS steuern, ist das ein unschöner Nebeneffekt.

Über folgendes zeitgesteuertes Script kannst du daher den Datenpunkt jeden Tag um 23:55 Uhr wieder zurücksetzen:

Blockly

<xml xmlns="https://developers.google.com/blockly/xml">
  <block type="schedule" id="rnxSuvS)m3efje!l2L%Z" x="38" y="-287">
    <field name="SCHEDULE">55 23 * * *</field>
    <statement name="STATEMENT">
      <block type="control" id=")wYHnV2C4/[Arm*/!!K.">
        <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
        <field name="OID">iot.0.services.ifttt</field>
        <field name="WITH_DELAY">FALSE</field>
        <value name="VALUE">
          <block type="text" id="/f0+_B0NWjvN!u^70i[;">
            <field name="TEXT"></field>
          </block>
        </value>
      </block>
    </statement>
  </block>
</xml>

Mehrere Geburtstage verarbeiten

Wenn in deinem Google-Kalender mehrere Geburtstage anstehen, wird nur der letzte Eintrag in den Datenpunkt geschrieben. Denn IFTTT überschreibt seinen eigenen Datenpunkt mit dem neusten Ereignis.

Damit du trotzdem alle anstehenden Geburtstage erhältst, legst du folgenden neuen Datenpunkt an:

Dann erstellst du ein neues Blockly-Script, dass den ursprünglichen IFTTT-Datenpunkt überwacht. Sobald dieser geändert wurde, ließt das Script den Namen des Geburtstagskind aus und schreibt ihn in deinen eben angelegten Datenpunkt. Sofern dort schon ein Name steht, wird der neue einfach hinten dran gehängt:

Blockly

<xml xmlns="https://developers.google.com/blockly/xml">
  <variables>
    <variable id="imY9zDm$`C!4+yL=_(5}">Text</variable>
  </variables>
  <block type="on" id="oDju.|X!~5x:#,42L?1A" x="38" y="-562">
    <field name="OID">iot.0.services.ifttt</field>
    <field name="CONDITION">ne</field>
    <field name="ACK_CONDITION"></field>
    <statement name="STATEMENT">
      <block type="controls_if" id="s$%UTr-@psmwh)AsZA*:">
        <mutation else="1"></mutation>
        <value name="IF0">
          <block type="on_source" id="Yx+R,FA)qNZu?XRik*9I">
            <field name="ATTR">state.val</field>
          </block>
        </value>
        <statement name="DO0">
          <block type="variables_set" id="!,7LixP=w6e#`+sTm{Hz">
            <field name="VAR" id="imY9zDm$`C!4+yL=_(5}">Text</field>
            <value name="VALUE">
              <block type="text_getSubstring" id="R.^UxBNb7;U};8NwQVK/">
                <mutation at1="false" at2="true"></mutation>
                <field name="WHERE1">FIRST</field>
                <field name="WHERE2">FROM_END</field>
                <value name="STRING">
                  <block type="on_source" id="T)PsV.%ytCOcgqqTG]U?">
                    <field name="ATTR">state.val</field>
                  </block>
                </value>
                <value name="AT2">
                  <block type="math_number" id="v6mS|3nfJbFF1/aDmD6O">
                    <field name="NUM">16</field>
                  </block>
                </value>
              </block>
            </value>
            <next>
              <block type="controls_if" id="q.`h]7Tpg%*PG#)I^H9N">
                <mutation else="1"></mutation>
                <value name="IF0">
                  <block type="get_value" id="4P~cQ)9H3:iM/,|-B[c:">
                    <field name="ATTR">val</field>
                    <field name="OID">Eigene.0.Vis.Geburtstag</field>
                  </block>
                </value>
                <statement name="DO0">
                  <block type="control" id="M##:V{pko$_k(n4r82m[">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                    <field name="OID">Eigene.0.Vis.Geburtstag</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="text_join" id="0:svAqw,2_raCVu}]k9:" inline="false">
                        <mutation items="3"></mutation>
                        <value name="ADD0">
                          <block type="get_value" id="OOFlE6r[$!-klLM|ptPr">
                            <field name="ATTR">val</field>
                            <field name="OID">Eigene.0.Vis.Geburtstag</field>
                          </block>
                        </value>
                        <value name="ADD1">
                          <block type="text" id="nB+_:O@zSR~dhtasq?u5">
                            <field name="TEXT">, </field>
                          </block>
                        </value>
                        <value name="ADD2">
                          <block type="variables_get" id="G_fQ0h)wW*[!5^nF+$85">
                            <field name="VAR" id="imY9zDm$`C!4+yL=_(5}">Text</field>
                          </block>
                        </value>
                      </block>
                    </value>
                  </block>
                </statement>
                <statement name="ELSE">
                  <block type="control" id="x~70EOYsijr4wG0{O*EL">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                    <field name="OID">Eigene.0.Vis.Geburtstag</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="variables_get" id="xlN:|/$_cF*K7GVF_oI3">
                        <field name="VAR" id="imY9zDm$`C!4+yL=_(5}">Text</field>
                      </block>
                    </value>
                  </block>
                </statement>
              </block>
            </next>
          </block>
        </statement>
        <statement name="ELSE">
          <block type="control" id="|LLM{;UU4a$.~3g+WPnb">
            <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
            <field name="OID">Eigene.0.Vis.Geburtstag</field>
            <field name="WITH_DELAY">FALSE</field>
            <value name="VALUE">
              <block type="text" id="W./!pA#rY^`AEt#gf%K}">
                <field name="TEXT"></field>
              </block>
            </value>
          </block>
        </statement>
      </block>
    </statement>
    <next>
      <block type="schedule" id="rnxSuvS)m3efje!l2L%Z">
        <field name="SCHEDULE">55 23 * * *</field>
        <statement name="STATEMENT">
          <block type="control" id="L(UapN@R,O?:B(*X2t/E">
            <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
            <field name="OID">iot.0.services.ifttt</field>
            <field name="WITH_DELAY">FALSE</field>
            <value name="VALUE">
              <block type="text" id="ERiIV:dn?YC%.Cs_d8MH">
                <field name="TEXT"></field>
              </block>
            </value>
          </block>
        </statement>
      </block>
    </next>
  </block>
</xml>

3 Kommentare

Kommentieren

Schreibe einen Kommentar