Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Скрипт для Narodmon.ru

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    640

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

Скрипт для Narodmon.ru

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
5 Beiträge 5 Kommentatoren 5.5k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • B Offline
    B Offline
    bondrogeen
    schrieb am zuletzt editiert von
    #1

    Скрипт для забора данных датчика с narodmon.ru.

    Запрос данных каждые 5 мин.

    api_key подставляем свой, получаемый в разделе Мои Приложения после регистрации в проекте.

    ID датчика смотрим тут.
    380_4.jpg

     schedule("*/5 * * * *", function () {      //запускаем наш скрипт каждые 5 мин
    createState('Narodmon.sensor.temp', '');    //Создаем переменную в iobroker  
    var request = require('request');
    var crypto = require('crypto');                                   
    var random = Math.random().toString();       // создаем переменную случайного числа и преобразуем ее в строку 
    var hash = crypto.createHash('md5').update(random).digest('hex'); //генерируем md5 в переменную hash
    
    request({                                             //Отправляем запрос на narodmon
        url: 'http://narodmon.ru/api',           //URL api народного мониторинга
        method: 'POST',                               // Метод POST
        json: {                                            // запрос в формате json
            "cmd":"sensorsValues",               
            "sensors":"12345",                     //ID датчика. (вместо 12345 подставить нужный нам ID датчика)
            "uuid":hash,                         //наш сгенерированный MD5
            "api_key":"123456789ABCDF",           // Вводим вместо 123456789ABCDF наш api_key ключ API для разработчика, получаемый в разделе Мои Приложения после регистрации в проекте. 
            "lang":"ru"                          
        }
    }, function(error, response, body){       //обрабатываем результат
        if(error) {
            log(error);                       //выводим в лог в случаи ошибки ответа от сервера
            } else {
            log(JSON.stringify(body));        //выводим в лог ответа в виде строки. 
            var sensor = body.sensors[0].value;       //вытаскиваем наше значение из ответа от сервера
            setState("javascript.0.Narodmon.sensor.temp"/*Narodmon.sensor.temp*/, sensor);       Записываем значение в переменную iobroker
        }
    });
    });
    
    1 Antwort Letzte Antwort
    0
    • Z Offline
      Z Offline
      znammut
      schrieb am zuletzt editiert von
      #2

      Здравствуйте, я ваш скрипт немного поправил, чтобы несколько датчиков опрашивать

      `schedule("*/5 * * * *", function () {
      var IDs = '12345,6789'; //ID датчика. (вместо 12345 и 6789 подставить нужные нам ID датчиков, последующий датчик указать через запятую)
      var apiKey = "123456789ABCDF"; // Вводим вместо 123456789ABCDF наш api_key ключ API для разработчика, получаемый в разделе Мои Приложения после регистрации в проекте.
      var request = require('request');
      var crypto = require('crypto');
      var hash = crypto.createHash('md5').update(apiKey).digest('hex');
      
      request({
          url: 'http://narodmon.ru/api',
          method: 'POST',
          json: {
              "cmd":"sensorsValues",               
              "sensors":IDs,
              "uuid":hash,
              "api_key":apiKey,
              "lang":"ru"
          }
      }, function(error, response, body){
          if(error) {
              log(error);
              } else {
              log(JSON.stringify(body));
              for (var i = 0; i < body.sensors.length; i++) {
                var valueSensor = Math.round(body.sensors[i].value); //тут еще округление результата идет
      	      var idSensor = body.sensors[i].id;
                createState("Narodmon.sensor." + idSensor, '');
                setState("javascript.0.Narodmon.sensor." + idSensor, valueSensor);
              }
          }
      });
      });` 
      
      Не совсем понятно как при создании сразу тип указать, чтобы уже сразу правильно было
      
      С уважением[/i][/i]
      
      1 Antwort Letzte Antwort
      0
      • BluefoxB Offline
        BluefoxB Offline
        Bluefox
        schrieb am zuletzt editiert von
        #3

        Я бы поменял так:

        `var request = require('request');
        var crypto  = require('crypto');
        
        var IDs     = ['12345', '6789']; // ID датчиков. (вместо 12345 и 6789 подставить нужные нам ID датчиков, как массив)
        var apiKey  = '123456789ABCDF';  // Вводим вместо 123456789ABCDF наш api_key ключ API для разработчика, получаемый в разделе Мои Приложения после регистрации в проекте.
        var hash    = crypto.createHash('md5').update(apiKey).digest('hex');
        
        for (var i = 0; i < IDs.length; i++) {
            createState('narodmon.sensor.' + IDs[i], {
                name:   'Sensor from narodmon',
                type:   'number',
                role:   'level.temperature',
                read:   true,
                unit:   'C°',
                write:  false
            });
        }
        
        // every 5 minutes
        schedule('*/5 * * * *', function () {
            request({
                url: 'http://narodmon.ru/api',
                method: 'POST',
                json: {
                    cmd:     'sensorsValues',
                    sensors: IDs.join(','),
                    uuid:    hash,
                    api_key: apiKey,
                    lang:    'ru'
                }
            }, function(error, response, body) {
                if (error || !body || !body.sensors) {
                    console.error(error || JSON.stringify(body));
                } else {
                    console.log(JSON.stringify(body));
        
                    for (var i = 0; i < body.sensors.length; i++) {
                        var valueSensor = Math.round(body.sensors[i].value * 10) / 10; // round to 0.1 step
                        setState('javascript.0.narodmon.sensor.' + body.sensors[i].id, valueSensor, true);
                    }
                }
            });
        });`[/i][/i][/i]
        
        1 Antwort Letzte Antwort
        0
        • D Offline
          D Offline
          dimon
          schrieb am zuletzt editiert von
          #4

          C кодом Bluefox не заработало. Сервер народного мониторинга отдает данные но с ошибкой

          javascript.0 2017-01-20 11:26:00.593 error script.js.common.narodmon: "{"error":"NO_USER_AGENT","errno":400}{"sensors":[{"id":2709,"value":0.4,"time":1484900366},{"id":19004,"value":0,"time":1484900404}]}"

          Вот что написано на сайте Народного мониторинга - Без HTTP-заголовка User-Agent: MyAppName (название Вашего приложения на латинице) веб-сервер может счесть запрос за "мусорный".

          Исправил вот так:

          `var request = require('request');
          var crypto  = require('crypto');
          
          var IDs     = ['12345', '6789']; // ID датчиков. (вместо 12345 и 6789 подставить нужные нам ID датчиков, как массив)
          var apiKey  = '123456789ABCDF';  // Вводим вместо 123456789ABCDF наш api_key ключ API для разработчика, получаемый в разделе Мои Приложения после регистрации в проекте.
          var hash    = crypto.createHash('md5').update(apiKey).digest('hex');
          
          for (var i = 0; i < IDs.length; i++) {
              createState('narodmon.sensor.' + IDs[i], {
                  name:   'Sensor from narodmon',
                  type:   'number',
                  role:   'level.temperature',
                  read:   true,
                  unit:   'C°',
                  write:  false
              });
          }
          
          // every 5 minutes
          schedule('*/5 * * * *', function () {
              request({
                  url: 'http://narodmon.ru/api',
                  method: 'POST',
                  headers: ({'User-Agent': 'Name_Of_Your_App'}), // Заменить Name_Of_Your_App на название Вашего приложения на латинице
                  json: {
                      cmd:     'sensorsValues',
                      sensors: IDs.join(','),
                      uuid:    hash,
                      api_key: apiKey,
                      lang:    'ru'
                  }
              }, function(error, response, body) {
                  if (error || !body || !body.sensors) {
                      console.error(error || JSON.stringify(body));
                  } else {
                      console.log(JSON.stringify(body));
          
                      for (var i = 0; i < body.sensors.length; i++) {
                          var valueSensor = Math.round(body.sensors[i].value * 10) / 10; // round to 0.1 step
                          setState('javascript.0.narodmon.sensor.' + body.sensors[i].id, valueSensor, true);
                      }
                  }
              });
          });`[/i][/i][/i]
          
          1 Antwort Letzte Antwort
          0
          • B Offline
            B Offline
            Brujerizmo
            schrieb am zuletzt editiert von
            #5

            Чутка перепилил скрипт. Указываете несколько датчиков и скрипт считает среднее значение температуры. На мой взгляд так получится точнее)

            `var request = require('request');
            var crypto  = require('crypto');
            
            var IDs     = ['12345','6789']; // ID датчиков. (вместо 12345 и 6789 подставить нужные нам ID датчиков, как массив)
            var apiKey  = '23456789ABCD';  // Вводим вместо 123456789ABCDF наш api_key ключ API для разработчика, получаемый в разделе Мои Приложения после регистрации в проекте.
            var hash    = crypto.createHash('md5').update(apiKey).digest('hex');
            
                createState('narodmon.sensor.mid', {
                    name:   'Sensor from narodmon',
                    type:   'number',
                    role:   'level.temperature',
                    read:   true,
                    unit:   'C°',
                    write:  false
                });
            
            // every 5 minutes
            schedule('*/5 * * * *', function () {
                request({
                    url: 'http://narodmon.ru/api',
                    method: 'POST',
                    headers: ({'User-Agent': 'Name_Of_Your_App'}), // Заменить Name_Of_Your_App на название Вашего приложения на латинице
                    json: {
                        cmd:     'sensorsValues',
                        sensors: IDs.join(','),
                        uuid:    hash,
                        api_key: apiKey,
                        lang:    'ru'
                    }
                }, function(error, response, body) {
                    if (error || !body || !body.sensors) {
                        console.error(error || JSON.stringify(body));
                    } else {
                        //console.log(JSON.stringify(body));
                        var summval = 0;
                        for (var i = 0; i < body.sensors.length; i++) {
                            var valueSensor = Math.round(body.sensors[i].value * 10) / 10; // round to 0.1 step
                            summval = summval + valueSensor; 
                        }
                        var midval = summval / body.sensors.length;
                        setState('javascript.0.narodmon.sensor.mid', Math.round(midval * 10) / 10, true);
                    }
                });
            });` [/i]
            
            1 Antwort Letzte Antwort
            0

            Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

            Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

            Mit deinem Input könnte dieser Beitrag noch besser werden 💗

            Registrieren Anmelden
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            340

            Online

            32.7k

            Benutzer

            82.6k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe