Skip to content
This repository has been archived by the owner on Mar 4, 2022. It is now read-only.

Latest commit

 

History

History

cloud

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Cloud Dienste


Home


In der Cloud stehen einen Reihe von Services zur Verfügung womit die Boards mit Steuerungsinformationen, wie Sonnen Auf- und Untergang, Wetterentwicklung etc. versorgt werden können.

Die gebräuchlichsten Format sind HTML, XML oder JSON (JavaScript Object Notation).

ProgrammableWeb liefert eine Übersicht dieser Dienste.

Anwendungen

  • Intelligente Dämmerungsschaltung mit Berücksichtigung Sonnen Auf- und Untergang
  • Intelligente, Vorausschauende Heizung, z.B. Heizung nicht aktivieren, wenn Sonnenschein angekündigt ist
  • Vorbeugung von Unwetterschäden, z.B. durch Einfahren der Sonnenstoren bei aufkommenden Sturm

Beispiele

Grundlagen

Cloud Services

JSON (JavaScript Object Notation)


Nach oben

{ "my_array": [ "demo_string", 10], 
              "my_boolean": true }                              

Beispiel JSON Code


label: [ string, int ],
          label: int              

Abbildung JSON Code im Speicher


Die JavaScript Object Notation, kurz JSON, ist ein kompaktes Datenformat in einer einfach lesbaren Textform zum Zweck des Datenaustauschs zwischen Anwendungen. Jedes gültige JSON-Dokument soll ein gültiges JavaScript sein und per eval() interpretiert werden können. JSON ist unabhängig von der Programmiersprache. Parser existieren in praktisch allen verbreiteten Sprachen.

Mittels der MbedJSONValue Library können JSON Strukturen geparst oder erzeugt werden.

Beispiel(e)

Das Beispiel JSONParser erzeugt eine JSON Struktur und parst diese nach C++.

Compilieren

Umgebung/Board Link/Befehl
Online Compiler JSONParser
CLI (IoTKit K64F) mbed compile -m K64F --source . --source ../IoTKitV3/cloud/JSONParser;
cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK
CLI (DISCO_L475VG_IOT01A) mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/cloud/JSONParser
CLI (nucleo_f303re) mbed compile -m nucleo_f303re -f --source . --source ../IoTKitV3/cloud/JSONParser

XML (Extensible Markup Language)


Nach oben

<a>
    <b>
        <c>
            <d c="123">eins</d>
            <e>zwei</e>
            <f>drei</f>
        </c>
    </b>
</a>

Beispiel XML Code


SP_XmlDocument a
    SP_XmlElementNode b
        SP_XmlElementNode c
            SP_XmlElementNode d c=123
                SP_XmlCDataNode eins
            SP_XmlElementNode e 
                SP_XmlCDataNode zwei
            SP_XmlElementNode f
                SP_XmlCDataNode drei               

Abbildung XML Code im Speicher


Die Extensible Markup Language (engl. „erweiterbare Auszeichnungssprache“), abgekürzt XML, ist eine Auszeichnungssprache zur Darstellung hierarchisch strukturierter Daten in Form von Textdateien. XML wird u. a. für den plattform- und implementationsunabhängigen Austausch von Daten zwischen Computersystemen eingesetzt, insbesondere über das Internet.

Mittels der spxml (Simple Plain Xml parser) Library können XML Strukturen geparst und anschliessend traversiert werden.

Beispiel(e)

Das Beispiel XMLParser erzeugt eine XML Struktur und parst diese nach C++.

Compilieren

Umgebung/Board Link/Befehl
Online Compiler XMLParser
CLI (IoTKit K64F) mbed compile -m K64F --source . --source ../IoTKitV3/cloud/XMLParser;
cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK
CLI (DISCO_L475VG_IOT01A) mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/cloud/XMLParser
CLI (nucleo_f303re) mbed compile -m nucleo_f303re -f --source . --source ../IoTKitV3/cloud/XMLParser

Sunset Sunrise (JSON)


Nach oben


Sunrise Sunset stellt ein API zur Verfügung, mittels dem die Sonnen Auf- und Untergangszeiten für einen bestimmten Ort abgefragt werden können.

Links

Beispiel: Abfrage für Zürich

http://api.sunrise-sunset.org/json?lat=47.3686498&lng=8.5391825

{"results":
   { "sunrise":"5:38:12 AM",
     "sunset":"5:31:12 PM",
     "solar_noon":"11:34:42 AM",
     "day_length":"11:53:00",
     "civil_twilight_begin":"5:07:47 AM",
     "civil_twilight_end":"6:01:38 PM",
     "nautical_twilight_begin":"4:32:04 AM",
     "nautical_twilight_end":"6:37:21 PM",
     "astronomical_twilight_begin":"3:55:32 AM",
     "astronomical_twilight_end":"7:13:52 PM"
   },
   "status":"OK"}

Beispiel(e)

Das Beispiel SunriseSunset holt die Informationen für Sonnenauf- und Untergang von http://sunrise-sunset.org

Compilieren

Umgebung/Board Link/Befehl
Online Compiler SunriseSunset
CLI (IoTKit K64F) mbed compile -m K64F --source . --source ../IoTKitV3/cloud/SunriseSunset;
cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK
CLI (DISCO_L475VG_IOT01A) mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/cloud/SunriseSunset
CLI (nucleo_f303re) mbed compile -m nucleo_f303re -f --source . --source ../IoTKitV3/cloud/SunriseSunset

IFTTT ("If This Then That")


Nach oben


IFTTT (die Abkürzung von "If This Then That") ist ein Dienstanbieter, der es Benutzern erlaubt, verschiedene Webanwendungen (zum Beispiel Facebook, Evernote, Dropbox usw.) mit einfachen Bedingten Anweisungen zu verknüpfen..

IFTTT ermöglicht Benutzern "Applets" nach dem Motto "If this then that" ("Wenn dies dann das") zu verknüpfen

  • Der "this"-Teil eines Applets wird "Trigger"
  • Der "that"-Teil eines Applets wird Aktion genannt.

Die eigentlichen Geräte / Dienste werden als Services bezeichnet.

Alternative (nicht getestet)

Webhook Service

Der Webhook Service ermöglicht es, IFTTT mit dem IoTKit zu verbinden.

Mit dem Webhook Service kann die IFTTT Plattform HTTP Aufrufe empfangen (Triggers) und Aktionen (Actions) auslösen.

IFTTT einrichten und Applet erstellen

Um eine Aktion mittels Web Request auslösen:

In dieser Variante löst das IoTKit einen Event mittels HTTP GET aus, welcher z.B. weiter an ein Smartphone geleitet wird um Musik abzuspielen.

  • New Applet anwählen
  • if: Webhooks und receive a web request wählen und Event-Name erfassen.
  • then: Add action, z.B. Android Device und Play a ... wählen
  • Name vergeben und speichern.
  • Service Webhooks suchen und Documentation, oben rechts, anwählen.
  • Es erscheint eine Seite mit der Beschreibung URL, API-Key wie der Service aufgerufen werden kann. Der Aufruf ist in etwa wie folgt:
    curl https://maker.ifttt.com/trigger/<Event-Name>/with/key/<your key>

Nach dem Ersetzen des Event-Names, durch den oben erfassten Event-Name, kann der URL 1:1 in das main.cpp in die Variable finishMsg übertragen werden. Das Programm compilieren. Wird nun ein Magnet über den Hall-Sensor geführt, wird der Alarm ausgelöst, ein HTTP an die IFTTT Plattform gesendet welche diese weiter an die Aktion leitet.

Beispiel(e)

Das Beispiel HallSensorAlarm löst eine Aktion auf der IFTTT Plattform aus, wenn jemand einen Magneten an den Hallsensor hält.

Compilieren

Umgebung/Board Link/Befehl
Online Compiler HallSensorAlarm
CLI (IoTKit K64F) mbed compile -m K64F --source . --source ../IoTKitV3/cloud/HallSensorAlarm;
cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK
CLI (DISCO_L475VG_IOT01A) mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/cloud/HallSensorAlarm
CLI (nucleo_f303re) mbed compile -m nucleo_f303re -f --source . --source ../IoTKitV3/cloud/HallSensorAlarm

ThingSpeak


Nach oben


ThingSpeak ist eine "Internet der Dinge" Anwendung um Daten zu sammeln, analysieren und mittels Triggern darauf zu reagieren.

Um ThingSpeak verwenden zu könnnen ist zuerst ein Login SigUp zu lösen und anschliessend ein neuer Channel mit folgenden Feldern einzurichten:

  • Field 1: Temp
  • Field 2: Hum

Auf den Data Import / Export Tab zu wechseln und die Variablen host und key entsprechend den Update Channel Feed - POST (rechts) Angaben anzupassen.

Programm compilieren und auf das Board downloaden. Unter Private View sollten zwei Grafiken mit den aktuellen Sensorwerten sichtbar werden.

Links

Beispiel(e)

Das Beispiel ThingSpeak schickt Sensordaten an den ThingSpeak Cloud Dienst.

Compilieren

Umgebung/Board Link/Befehl
Online Compiler ThingSpeak
CLI (IoTKit K64F) mbed compile -m K64F --source . --source ../IoTKitV3/cloud/ThingSpeak;
cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK
CLI (DISCO_L475VG_IOT01A) mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/cloud/ThingSpeak
CLI (nucleo_f303re) -

Yahoo Wetter (XML/RSS-Feed)


Nach oben


Mittels Yahoo Weather kann das aktuelle Wetter und eine Vorhersage für einen Bestimmten Ort abgefragt werden.

ACHTUNG: der Dienst ändert relativ oft, so kann die Funktion des Beispiel nicht gewährleistet werden, bzw. muss URL und Format evtl. angepasst werden.

Links

Beispiel: Abfrage für Zürich

Aufruf mittels curl

    curl http://query.yahooapis.com/v1/public/yql  \
           -d q="select * from weather.forecast where woeid=784794"    -d format=xml                        
<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2016-07-22T13:17:05Z"
    yahoo:lang="en-US">
    <results>
        <channel>
            <yweather:units xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" distance="mi" pressure="in"
                speed="mph" temperature="F" />
            <title>Yahoo! Weather - Zurich, ZH, CH</title>
            <link>http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-784794/</link>
            <description>Yahoo! Weather for Zurich, ZH, CH</description>
            <language>en-us</language>
            <lastBuildDate>Fri, 22 Jul 2016 03:17 PM CEST</lastBuildDate>
            <ttl>60</ttl>
            <yweather:location xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" city="Zurich"
                country="Switzerland" region=" ZH" />
            <yweather:wind xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" chill="72" direction="150"
                speed="11" />
            <yweather:atmosphere xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" humidity="72"
                pressure="957.0" rising="0" visibility="16.1" />
            <yweather:astronomy xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" sunrise="5:54 am"
                sunset="9:10 pm" />
            <image>
                <title>Yahoo! Weather</title>
                <width>142</width>
                <height>18</height>
                <link>http://weather.yahoo.com</link>
                <url>http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif</url>
            </image>
            <item>
                <title>Conditions for Zurich, ZH, CH at 02:00 PM CEST</title>
                <geo:lat xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">47.38427</geo:lat>
                <geo:long xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">8.52959</geo:long>
                <link>http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-784794/</link>
                <pubDate>Fri, 22 Jul 2016 02:00 PM CEST</pubDate>
                <yweather:condition xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="39"
                    date="Fri, 22 Jul 2016 02:00 PM CEST" temp="72" text="Scattered Showers" />
                <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="4" date="22 Jul 2016"
                    day="Fri" high="77" low="66" text="Thunderstorms" />
                <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="47" date="23 Jul 2016"
                    day="Sat" high="76" low="64" text="Scattered Thunderstorms" />
                <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="39" date="24 Jul 2016"
                    day="Sun" high="78" low="63" text="Scattered Showers" />
                <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="47" date="25 Jul 2016"
                    day="Mon" high="77" low="64" text="Scattered Thunderstorms" />
                <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="47" date="26 Jul 2016"
                    day="Tue" high="75" low="64" text="Scattered Thunderstorms" />
                <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="4" date="27 Jul 2016"
                    day="Wed" high="75" low="61" text="Thunderstorms" />
                <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="30" date="28 Jul 2016"
                    day="Thu" high="76" low="60" text="Partly Cloudy" />
                <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="30" date="29 Jul 2016"
                    day="Fri" high="79" low="59" text="Partly Cloudy" />
                <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="39" date="30 Jul 2016"
                    day="Sat" high="80" low="58" text="Scattered Showers" />
                <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="30" date="31 Jul 2016"
                    day="Sun" high="78" low="59" text="Partly Cloudy" />
                <description></description>
                <guid isPermaLink="false" />
            </item>
        </channel>
    </results>
</query>

Beispiel(e)

Das Beispiel YahooWheater holt die Wetterdaten von Yahoo.

Compilieren

Umgebung/Board Link/Befehl
CLI (IoTKit K64F) mbed compile -m K64F --source . --source ../IoTKitV3/cloud/YahooWheater;
cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK
CLI (DISCO_L475VG_IOT01A) mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/cloud/YahooWheater
CLI (nucleo_f303re) -