Espruino:Примеры/IoT-сервисы: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighligh...»)
 
Нет описания правки
 
(не показаны 4 промежуточные версии 2 участников)
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


=<ref>[ www.espruino.com - ]</ref>=
=IoT-сервисы<ref>[https://www.espruino.com/IoT+Services www.espruino.com - IoT Services]</ref>=


В настоящий момент есть множество различных облачных [[IoT-сервис]]ов. В этой статье мы собрали несколько примеров кода для работы с некоторыми из них. Если у вас тоже есть код для работы с [[IoT-сервис]]ами, то вы, если хотите, тоже можете внести свой вклад в эту статью (присылайте его через [https://github.com/espruino/EspruinoDocs/blob/master/info/IoT%20Services.md эту страницу на GitHub]).


<syntaxhighlight lang="html5" enclose="div">
{{Примечание1|Чтобы не дублировать здесь информацию из других статей и руководств, подразумевается, что [https://www.espruino.com/Internet интернет-соединение] у вас уже есть.}}
 
== Vizibles ==
 
[https://vizibles.com/ Vizibles] – это [[IoT-платформа]], которую можно использовать и для сбора данных, и для активации действий.
 
Её разработчики сделали [https://github.com/Enxine/ViziblesArduino/releases кастомную прошивку для ESP8266], которая делает за вас всю грязную работу по подключению к платформе, а также [[Espruino-модуль]], который служит интерфейсом с этой прошивкой. Совокупно это всё очень упрощает написание приложений с использованием устройств ввода/вывода [[Espruino]] для платформы [[Vizibles]].
 
<syntaxhighlight lang="javascript">
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();
  }
});
</syntaxhighlight>
 
== Cubitic.io ==
 
[http://www.cubitic.io/ Cubitic.io] – это платформа предсказательной аналитики для [[IoT]].
 
В данный момент она работает в режиме закрытой беты, так что, если вы хотите поэкспериментировать с их сервисом, отправьте им электронное письмо.
 
<syntaxhighlight lang="javascript">
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
      }
    });
</syntaxhighlight>
 
== Dweet.io ==
 
Это до абсурда простой сервис для отправки сообщений (и предупреждений) для [[IoT]].
 
[http://dweet.io/ Dweet] – это как очень простой в использовании [[Твиттер]]. В этом сервисе можно постить сообщения, а также получать последние ''«двиты»'' и потоки данных, обновляемые в режиме реального времени. У бесплатной версии нет средств защиты (но и регистрации тоже) – так что она идеально подойдёт для прототипирования в ситуациях, когда вам нужна коммуникация с устройствами без запуска сервера.
 
<syntaxhighlight lang="javascript">
// 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);
</syntaxhighlight>
 
== Xively ==
 
[[Xively]] – это сервис для передачи данных, предоставляющий доступ к сайту, где можно просматривать графики на основе вашей информации, управлять устройствами, создавать запросы [[HTTP POST]] и задавать условия, при которых будут отправляться эти запросы.
 
Создайте аккаунт в [[Xively]], а затем, добавляя устройство, найдите [[ID]] фида ('''feed ID''') и [[API-ключ]] ([[API key]]) – их нужно будет добавить в код. Они показаны с правой стороны.
 
<syntaxhighlight lang="javascript">
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 });
</syntaxhighlight>
 
== IFTTT – If This Then That ==
 
Сервис [https://ifttt.com/home IFTTT] позволяет создавать так называемые ''«рецепты»'' в формате ''«если случится то-то, сделать то-то»''. У них есть [https://ifttt.com/maker_webhooks сервис Webhooks], значительно упрощающий активацию действий с помощью самых разных сервисов и устройств (публикацию твита, отправку имейла и т.д.).
 
Чтобы воспользоваться им:
* Перейдите на [https://ifttt.com/home IFTTT] и создайте аккаунт
* Перейдите на сервис [https://ifttt.com/maker_webhooks Webhooks] и активируйте его, нажав на кнопку '''Connect'''
* Кликните на кнопку '''Documentation''' справа вверху. Откроется новая страница, после этого скопируйте ключ, который следует за фразой '''«Your key is:»''' и вставьте его в код ниже
* Начните создавать рецепт – для этого кликните на '''Create''' справа вверху
* Кликните на кнопку '''«If This»''' в центре, выберите сервис '''Webhooks''', а затем пункт '''Receive a web request'''
* В поле '''Event name''' введите '''«button_pressed»''', а затем нажмите на '''Create trigger'''
* Теперь кликните на кнопку '''«Then That»''' и выберите какое-нибудь действие из предложенных
* Убедитесь, что прошли все необходимые этапы, необходимые для создания рецепта
 
<syntaxhighlight lang="javascript">
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");
</syntaxhighlight>
 
В данный момент использовать [[Espruino]] в качестве устройства для «Then That» немного затруднительно. [https://ifttt.com/home IFTTT] ожидает отправку запроса [[HTTP POST]] к веб-серверу, а это значит, что вы должны сделать так, чтобы вашу [[Espruino]] можно было найти в интернете (настроив свой роутер таким образом, чтобы он направлял подключения к [[Espruino]]). Вы, впрочем, можете создать в [[IFTTT]] запрос к сервису [http://dweet.io/ Dweet] (см. выше), а затем опросить его с помощью [[Espruino]].
 
== Google Таблицы / Google Формы ==
 
Руководство по их использованию можно почитать [https://www.espruino.com/Logging+to+Google+Sheets тут].
 
В данный момент ими можно пользоваться только с помощью [https://www.espruino.com/Pico Espruino Pico], так как это требует [[HTTPS]]-коммуникации.


=См.также=
=См.также=


{{ads}}
 


=Внешние ссылки=
=Внешние ссылки=
Строка 16: Строка 270:
<references />
<references />


{{Навигационная таблица/Espruino}}
{{Навигационная таблица/Портал/Espruino}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 17:01, 22 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


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-коммуникации.

См.также

Внешние ссылки