Espruino:Примеры/IoT-сервисы
IoT-сервисы[1]
В настоящий момент есть множество различных облачных IoT-сервисов. В этой статье мы собрали несколько примеров кода для работы с некоторыми из них. Если у вас тоже есть код для работы с IoT-сервисами, то вы, если хотите, тоже можете внести свой вклад в эту статью (присылайте его через эту страницу на GitHub).
Vizibles
Vizibles – это IoT-платформа, которую можно использовать и для сбора данных, и для активации действий.
Её разработчики сделали кастомную прошивку для ESP8266, которая делает за вас всю грязную работу по подключению к платформе, а также Espruino-модуль, который служит интерфейсом с этой прошивкой. Совокупно это всё очень упрощает написание приложений с использованием устройств ввода/вывода Espruino для платформы Vizibles.
var vz-options = {
'keyID': 'MY KEY ID',
'keySecret' : 'MY KEY SECRET',
'id' : 'example'
};
// Подключаемся к платформе Vizibles:
var cloud = require('Vizibles').init(Serial2, function (d) {
cloud.connect(vz-options, null, connected);
});
// Задаём некоторые функции, которые будут вызываться из облака:
var lightOn = function(d) {
// Включаем светодиод:
digitalWrite(LED2,1);
// Публикуем изменение в облако:
cloud.update({status : 'on'});
};
var lightOff = function(d) {
// Выключаем светодиод:
digitalWrite(LED2,0);
// Публикуем изменение в облако:
cloud.update({status : 'off'});
};
// Публикуем эти функции после подключения:
var connected = function(d) {
cloud.expose('lightOn', lightOn, function(d){
if(d=='Ok'){
cloud.expose('lightOff', lightOff, function(d){
if(d!='Ok'){
connected();
}
});
} else {
connected();
}
});
Cubitic.io
Cubitic.io – это платформа предсказательной аналитики для IoT.
В данный момент она работает в режиме закрытой беты, так что, если вы хотите поэкспериментировать с их сервисом, отправьте им электронное письмо.
var CUBITIC = {
APPID : YOUR_APP_ID,
TOKEN : YOUR_TOKEN
};
function putCubitic(event, data) {
content = JSON.stringify(data);
var options = {
host: 'api.cubitic.io',
port: '80',
path:'/v1/event/'+event,
method:'POST',
headers: {
"Content-Type":"application/json",
"cubitic-appid":CUBITIC.APPID,
"Authorization":"Bearer "+CUBITIC.TOKEN,
"Content-Length":content.length
}
};
require("http").request(options, function(res) {
var d = "";
res.on('data', function(data) { d+= data; });
res.on('close', function(data) {
console.log("Closed: "+d);
});
}).end(content);
}
function getCubitic(event, callback) {
var options = {
host: 'api.cubitic.io',
port: '80',
path:'/v1/event/'+event,
method:'GET',
headers: {
"cubitic-appid":CUBITIC.APPID,
"Authorization":"Bearer "+CUBITIC.TOKEN
}
};
require("http").request(options, function(res) {
var d = "";
res.on('data', function(data) { d+= data; });
res.on('close', function(data) {
var j = JSON.parse(d);
if (callback) callback((j&&j.result)?j.result:undefined);
});
}).end();
}
// Отправляем данные...
putCubitic("TemperatureMeasured",
{
"value": E.getTemperature(),
"units": "C",
"location" : {
"lat": 51.652,
"long": -1.268
}
});
Dweet.io
Это до абсурда простой сервис для отправки сообщений (и предупреждений) для IoT.
Dweet – это как очень простой в использовании Твиттер. В этом сервисе можно постить сообщения, а также получать последние «двиты» и потоки данных, обновляемые в режиме реального времени. У бесплатной версии нет средств защиты (но и регистрации тоже) – так что она идеально подойдёт для прототипирования в ситуациях, когда вам нужна коммуникация с устройствами без запуска сервера.
// Espruino 1v81 и новее эта функция не нужна:
function encodeURIComponent(s) {
var ok = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~";
var r = "";
for (var i=0;i<s.length;i++) {
if (ok.indexOf(s[i])>=0) r+=s[i];
else r+= "%"+(256+s.charCodeAt(i)).toString(16).toUpperCase().substr(-2);
}
return r;
}
function putDweet(dweet_name, a, callback) {
var data = "";
for (var n in a) {
if (data.length) data+="&";
data += encodeURIComponent(n)+"="+encodeURIComponent(a[n]);
}
var options = {
host: 'dweet.io',
port: '80',
path:'/dweet/for/'+dweet_name+"?"+data,
method:'POST'
};
require("http").request(options, function(res) {
var d = "";
res.on('data', function(data) { d+=data; });
res.on('close', function(data) {
if (callback) callback(d);
});
}).end();
}
function getDweet(dweet_name, callback) {
require("http").get('dweet.io/get/latest/dweet/for/'+dweet_name, function(res) {
var d = "";
res.on('data', function(data) { d+=data; });
res.on('close', function(data) {
var j = JSON.parse(d);
if (callback) callback((j&&j.with&&j.with.length)?j.with[0].content:undefined);
});
});
}
putDweet("espruino", {hello:"world2"}, function(response) {
console.log(response);
});
// Чтение двитов осуществляется при помощи
// http://dweet.io/get/latest/dweet/for/espruino
// И считываем самые последние данные:
getDweet("espruino", console.log);
Xively
Xively – это сервис для передачи данных, предоставляющий доступ к сайту, где можно просматривать графики на основе вашей информации, управлять устройствами, создавать запросы HTTP POST и задавать условия, при которых будут отправляться эти запросы.
Создайте аккаунт в Xively, а затем, добавляя устройство, найдите ID фида (feed ID) и API-ключ (API key) – их нужно будет добавить в код. Они показаны с правой стороны.
var XIVELY = {
ID : YOUR_FEED_ID,
APIKEY : "YOUR_API_KEY"
};
function putXively(a, callback) {
var data = {
version : "1.0.0",
datastreams : []
};
for (var i in a)
data.datastreams.push({id:i, current_value:a[i]});
content = JSON.stringify(data);
var options = {
host: 'api.xively.com',
port: '80',
path:'/v2/feeds/'+XIVELY.ID,
method:'PUT',
headers: { "X-ApiKey": XIVELY.APIKEY, "Content-Length":content.length }
};
var req = require("http").request(options, function(res) {
var d = "";
res.on('data', function(data) { d += data; });
res.on('close', function(data) {
if (callback) callback(data);
});
});
req.end(content);
}
putXively({ humidity : 0.5, temperature : 25 });
IFTTT – If This Then That
Сервис IFTTT позволяет создавать так называемые «рецепты» в формате «если случится то-то, сделать то-то». У них есть сервис Webhooks, значительно упрощающий активацию действий с помощью самых разных сервисов и устройств (публикацию твита, отправку имейла и т.д.).
Чтобы воспользоваться им:
- Перейдите на IFTTT и создайте аккаунт
- Перейдите на сервис Webhooks и активируйте его, нажав на кнопку Connect
- Кликните на кнопку Documentation справа вверху. Откроется новая страница, после этого скопируйте ключ, который следует за фразой «Your key is:» и вставьте его в код ниже
- Начните создавать рецепт – для этого кликните на Create справа вверху
- Кликните на кнопку «If This» в центре, выберите сервис Webhooks, а затем пункт Receive a web request
- В поле Event name введите «button_pressed», а затем нажмите на Create trigger
- Теперь кликните на кнопку «Then That» и выберите какое-нибудь действие из предложенных
- Убедитесь, что прошли все необходимые этапы, необходимые для создания рецепта
var IFTTTKEY = "...";
function sendEvent(event, callback) {
require("http").get("http://maker.ifttt.com/trigger/"+event+"/with/key/"+IFTTTKEY, function(res) {
var d = "";
res.on('data', function(data) { d += data; });
res.on('close', function() {
if (callback) callback(d);
});
});
}
sendEvent("button_pressed");
В данный момент использовать Espruino в качестве устройства для «Then That» немного затруднительно. IFTTT ожидает отправку запроса HTTP POST к веб-серверу, а это значит, что вы должны сделать так, чтобы вашу Espruino можно было найти в интернете (настроив свой роутер таким образом, чтобы он направлял подключения к Espruino). Вы, впрочем, можете создать в IFTTT запрос к сервису Dweet (см. выше), а затем опросить его с помощью Espruino.
Google Таблицы / Google Формы
Руководство по их использованию можно почитать тут.
В данный момент ими можно пользоваться только с помощью Espruino Pico, так как это требует HTTPS-коммуникации.
См.также
Внешние ссылки