ioBrokerioBroker Tutorials

ioBroker Datenupload zu ThingSpeak

In diesem kleinen Artikel zeige ich Dir, wie ich Sensordaten aus ioBroker per API an die ThingSpeak Plattform übertrage. ThingSpeak ist eine Online-Plattform zum Speichern und Abrufen von Daten über das HTTP-Protokoll. Mittels einer HTTP-API können Sensordaten einfach und komfortabel an die Online-Plattform übertragen werden. Auf der Plattform werden die Daten dann dargestellt und können privat oder öffentlich publiziert werden. In meinem Beispiel möchte ich die ermittelten Sensordaten des Outdoorsensors an die Plattform übertragen und öffentlich publizieren. Natürlich bietet ThingSpeak auch direkt für den ESP866 eine library an, mit der die Daten direkt in die Plattform übertragen werden können. Ich wollte hier aber einen alternativen Weg aufzeigen, mit dem auch andere Werte aus ioBroker heraus publiziert werden können.

Im ersten Schritt müssen wir uns einen Account erstellen. Dazu gehen wir auf die ThingSpeak Webseite und registrieren uns.

Nach dem wir den Account angelegt haben melden wir uns jetzt an der ThingSpeak Plattform an und erstellen im ersten Schritt einen neuen Channel. Dem Chanel vergeben wir einen Namen und definieren zudem bis zu 8 Felder, in die später die übertragenen Daten gespeichert werden. Der Name der Felder hat dabei keinen Einfluss auf die beinhalteten Daten und kann später auch noch geändert werden. Für mein Beispiel definiere ich nun folgende Felder:

Field1: Bodenfeuchtigkeit
Field2: Lufttemperatur
Field3: Luftfeuchtigkeit

Zusätzlich können noch weitere Informationen wie Tags, Beschreibung, Adresse sowie ein Link zu einem Video oder einer Webseite hinzugefügt werden. Nach dem nun alle Felder definiert sind können wir den Channel speichern. Unter dem Bereich „Sharing“ des neuen Channels kann nun die Sichtbarkeit des Channels eingestellt werden. Der Channel kann privat, public oder für bestimmte E-Mail Adressen freigegeben weren. Ich habe den Channel zunächst auf privat eingestellt um die weitere Konfiguration abzuschließen.

Im nächsten Schritt wechseln wir jetzt auf den Bereich „API“. Hier sehen wir oben links unseren „Write API Key“. Diesen Key benötigen wir im nächsten Schritt um Daten an die Plattform übertragen zu können. Im Bereich „API“ sehen wir zudem die API-Aufrufe, mit denen wir Daten an den Channel übertragen können.

Nun wechseln wir in ioBroker in den Bereich Skripts und erstellen uns ein neues Skript, mit dem wir auf Veränderungen unserer Sensordaten reagieren wollen. Für das Übertragen der Daten an ThingSpeak erstelle ich nun zwei Funktionen:

function ExportToThingspeak(ChannelApiKey,Field,FieldValue,TimeOutSek)
{
var ChannelUrl = "https://api.thingspeak.com/update?api_key="+ChannelApiKey+"&"+Field+"="+FieldValue;
setTimeout(DoThingSpeakRequest, TimeOutSek*1000, ChannelUrl);
}

function DoThingSpeakRequest(ChannelUrl)
{
request( { url: ChannelUrl, json: true }, function (error, response, body)
{
log('DoThingSpeakRequest - ChannelUrl: ' + ChannelUrl);
} );
}

Die Funktion ExportToThingspeak bekommt als Parameter den Write API Key das entsprechende Feld (Field1,…,Field8) sowie den neuen Wert des Feldes. Die Funktion ruft selber per setTimeOut die Funktion DoThingSpeakRequest auf und übergibt der Funktion die API-Url. Der Grund für diese Vorgehensweise liegt darin, dass die API nur alle 15 Sekunden im kostenlosen Tarif aufgerufen werden kann. Aus diesem Grund kann ich so den Abstand zwischen den einzelnen Aufrufen besser steuern.

on({id: "mqtt.0.outdoor1_Bodenfeuchtigkeit", change: "any"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
ExportToThingspeak("<YOURKEYHERE>","field1",value.toString(),20);
});

on({id: "mqtt.0.outdoor1_Luftfeuchtigkeit", change: "any"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
ExportToThingspeak("<YOURKEYHERE>","field2",value.toString(),40);
});

on({id: "mqtt.0.outdoor1_Lufttemperatur", change: "any"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
ExportToThingspeak("<YOURKEYHERE>","field3",value.toString(),60);
});

Alternativ können die Sensordaten natürlich auch zu jeder vollen Stunde übertragen werden. Dann könnte man den API-Aufruf auch folgendermaßend aufbauen:


https://api.thingspeak.com/update?api_key=<YOURAPIKEY>&field1=600&field2=80&field3=25

Der API-Aufruf überträgt dann mit einem Aufruf alle Werte komplett zur Plattform.

 

In der ThingSpeak Plattform sehen wir dann ja nach Übertragungsintervall unsere Sensordaten.

Ich habe meinen Outdoorsensor mittlerweile auf „public“ umgestellt, sodass die Werte öffentlich eingesehen werden können.

Outdoorsensor auf ThingSpeak

 

Ich hoffe euch gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder per E-Mail freue ich mich wie immer ?

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

2 Gedanken zu „ioBroker Datenupload zu ThingSpeak

  • Tobbes

    Danke für den Beitrag.

    Ich habe leider das Problem, dass die Zeitintervalle bei mir ignoriert werden.
    Es wird nur ein Sensor übertragen und der alle 15 Sekunden.

    Woran kann das liegen?

    Gruß Tobbes

    Antwort
  • Mark der Zweite

    Hallo Mathias,

    danke für den Beitrag. Hat nach einigen selbstgemachten Problemchen gut funktioniert.
    Du sprichst in Deinem Beitrag einen alternativen Upload an. Auch diesen würde ich gern nutzen, mir ist nur nicht klar, was Du damit meinst. Was muss da wo und wie geändert werden?

    „https://api.thingspeak.com/update?api_key=&field1=600&field2=80&field3=25“
    Was bedeuten die Zahlenwerte field1=600 bzw. …80 bzw. …25?

    Danke im Voraus viele Grüße

    Antwort

Schreibe einen Kommentar zu Mark der Zweite Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht.