Подскажите по отправки показаний на web сервер.

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем russish, 16 сен 2017.

Метки:
  1. russish

    russish Нерд

    Пишу свой web service для обработки показаний датчиков.
    При вызове http://192.1.1.190/Home/RegisterSensor?name=DHT11, сервис должен зарегистрировать датчик и в ответе возвращать id (например, число 1).
    Дальше Искра должна отправлять показания датчика используя этот id:
    http://192.1.1.190/Home/PostSensor?id=0&value=25
    Вся работа строится через Wi-Fi модуль и в локальной сети.
    Проблема в том, что Искра не отправляет сформированные мной запросы на сервис. (к wi-fi подключается нормально) . т.е. даже не заходит в callback функцию
    require('http').get('http://192.1.1.190/Home/RegisterSensor?name=DHT15', function(res) {
    console.log('insight http'); //это на выполняется
    };
    P.S. JavaScript пока только изучаю...
    P.P.S. Всегда работаю в офлайн режиме, настроил Искру по FAQ, обновил прошивку до 1v92.194. При работе в WebIDE пишет warning: http module not found. Пример с espruino по отображению показаний датчика, когда wi-fi модуль в качестве web Server'a работает.

    Ниже весь код:

    var dht = require("@amperka/DHT11").connect(P9);
    var temper = "-1";

    setInterval(function() {

    dht.read(function (a) {
    temper = a.temp.toString();
    require('http').get('http://192.1.1.190');
    var textUrl = "http://192.1.1.190/Home/PostSensor?id=0&value="+temper;
    console.log(temper);
    require('http').get(textUrl, function(res) {
    var contents = "";
    res.on('data', function(data) { contents += data; });
    res.on('close', function() { console.log(contents); });
    console.log(textUrl);
    });
    });
    }, 10000);

    var wlan;
    function onInit() {

    PrimarySerial.setup(115200);

    var SSID = 'DIR-300';
    var PSWD = '123456';

    var wifi = require('@amperka/wifi').setup(PrimarySerial, function(err) {

    wifi.connect(SSID, PSWD, function(err) {
    console.log('Connected');
    wifi.getIP(function(err,ip) {console.log(ip);});
    console.log('http://192.1.1.190');
    require('http').get('http://192.1.1.190');
    console.log("http://192.1.1.190/Home/RegisterSensor?name=DHT15");
    require('http').get('http://192.1.1.190/Home/RegisterSensor?name=DHT15', function(res) {
    console.log('insight http');
    var contents = "";
    res.on('data', function(data) { contents += data;});
    res.on('close', function() { console.log(contents); }).on('error',function(e) {console.log("ERROR", e);});
    });
    });
    });
    }

    onInit();
     
  2. sys

    sys Злобный Буратино Модератор

    Во-первых, оформите код как положено с использованием специальной вставки "Код".
    И еще. Системная функция onInit() отвечает за выполнения кода при загрузке платы. Переименуйте ее.
    http://www.espruino.com/Notes
     
  3. FomaLSSJ

    FomaLSSJ Нерд

    Я бы посоветовал не делать два запроса подряд, скорее всего не получите ответа ни от того, ни от другого.
    Еще бы посоветовал бы из адреса убрать http:// и оставить только get('192.1.1.190');. Так же ожидать завершение запроса с помощью res.on('end', *);

    Для себя еще давно сделал в помощь небольшой модуль для отправки запросов - https://github.com/FomaLSSJ/mcu-modules/tree/master/client
    Использует Promise, в модуле работает все просто.
    На скрине первый запрос через модуль, после получения ответа второй запрос обычный http.get.
     

    Вложения:

    • request.png
      request.png
      Размер файла:
      55,5 КБ
      Просмотров:
      760
    sys нравится это.
  4. russish

    russish Нерд

    Спасибо, попробую вашу библиотеку, отпишусь.
     
  5. russish

    russish Нерд

    Код с клиетом пока прикрутить не удалось - выдает много ошибок, буду разбираться позже. Но зато решил вопрос с отправкой данных: просто был включен брэндмауэр веб сервере, когда выключил, показания стали отправляться!