ioBroker скрипт часть.1

Преамбула.

Началось все с того что данные драйвера yr.no погода перестали показывать актуальную погоду, что собственно и стало причиной написания данного скрипта.

Начало.

Прежде чем использовать данный скрипт необходимо подключить в настройках драйвера JavaScript , пару модулей, это:

cheerio - быстрый и гибкий парсер на основе jQuery.

iconv-lite-конвертер кодировок.

Можно было обойтись и без конвертера но русские символы прилетали кракозябрами.

На скриншоте это будет так…

Так как кодер я начинающий, и мне понятнее на примерах что и куда, небольшой пример как найти подходящий код.

Пример: Заходим на gist.github.com
В поиске пишем iconv-lite

В результатах поиска этот jscript , который и стал базой для нашего скрипта.

А это наша жертва meteovesti.ru/pogoda_5/34214, выделенные красным значения будут записанны в объекты.

Сам скрипт:

createState('javascript.0.cast.temp', 0);//создаем обьекты в папке javascript.0=>cast с значениями 0
createState('javascript.0.cast.date', 0);
createState('javascript.0.cast.temp1', 0);
createState('javascript.0.cast.date1', 0);
schedule('*/30 * * * *', function () {//крон, парсим каждые 30 минут
var request = require("request");
var cheerio = require('cheerio');
var iconv  = require('iconv-lite');
var Dat,Temp,Dat1,Temp1
 
var requestOptions  = { method: "post"
                ,uri: "http://www.meteovesti.ru/pogoda_5/34214"//сайт погоды откуда парсим температуру и дату
                ,headers: { "User-Agent": "Mozilla/5.0" }
                ,encoding: null
            };

// request 
request(requestOptions, function(error, response, body) {
  // по рузки
  var strContents = new Buffer(body);
  var $ = cheerio.load(iconv.decode(strContents, 'windows-1251').toString());//переводим кракозябры в читаемый вид
  Dat = $('td .wpdate').eq(0).text();
  Temp = $('td .wptemp').eq(0).text();
  Dat1 = $('td .wpdate').eq(1).text();
  Temp1 = $('td .wptemp').eq(1).text();
  setState('javascript.0.cast.temp', Temp);//записываем спарсеные значения в объект
  setState('javascript.0.cast.date', Dat);
  setState('javascript.0.cast.temp1', Temp1);
  setState('javascript.0.cast.date1', Dat1);
  //console.log(Dat); 
  //console.log(Temp);
 });
});

Завершение.

Значения прилетели в объекты, что дальше можно с ними делать…