Вопрос по парсингу

Тема в разделе "Arduino & Shields", создана пользователем svetozar161, 15 сен 2018.

  1. svetozar161

    svetozar161 Нуб

    Здравствуйте. Вопрос нубский наверное, так что заранее извиняйте. Есть сервер на Меге, в порт к ней приходит GET от датчика на ЕСП12 такого вида.
    Код (C++):
    parameter: espdata&idesp=ESP826600895b59&hostname=ESP05&shtt=24.9&shth=59.1&uptime=268860&errconn=1121&wanip=192.168.1
    Пытаюсь сделать термостат, чтобы он работал по температуре приходящей в порт и включал реле. В данном случае температура равна 24.9 градусов. Так вот, нужно ли распарсивать эти данные или брать это целое число и работать дальше с ним? Как правильно нужно сделать? Если возможно, то приведите небольшой пример. Спасибо за помощь.
     
  2. Mitrandir

    Mitrandir Гуру

    Странный попрос... нужны все данные? или только температура. если только температура, то наверное имхо все парсить нет смысла. можно только выделить температуру.
    получив строку ищем shtt= затем пока не найдем амперсанд складываем все в отдельную переменну и приводим к числовому виду
     
  3. А это не одно и то же?
     
  4. Daniil

    Daniil Гик

    алгоритм своей программы нарисовали?
     
  5. svetozar161

    svetozar161 Нуб

    Нужна только температура
    к сожалению еще нет
     
  6. Daniil

    Daniil Гик

    Нарисуйте, в процессе обдумывания алгоритма и составления требований к результату многие вопросы отпадут.
     
  7. b707

    b707 Гуру

    24.9 - целое число?
     
  8. parovoZZ

    parovoZZ Гуру

    ну конечно.
     
  9. svetozar161

    svetozar161 Нуб

    Подсказали добрые люди, парсится строка на наличие символов
    Код (C++):
    if (parameter.startsWith("espdata&idesp")) {        // Температура датчика в спальне ESP05
        data1 = (parameter.substring(50,55)).toInt();
    объявляется переменная
    Код (C++):
    int data1
    Но получается целое число, а хотелось бы десятичную дробь иметь. Читал, что нужно использовать оператор "atof", но как правильно оформить строку не понял. Подскажите пожалуйста
     
  10. Mitrandir

    Mitrandir Гуру

    Код (C++):
    float f = n = atof (parameter.substring(50,55).c_str());
     
  11. svetozar161

    svetozar161 Нуб

    f я так понял это моя data1? То бишь
    Код (C++):
    float data1
    а что такое n?
     
  12. Mitrandir

    Mitrandir Гуру

    Мусор. убрать
     
  13. svetozar161

    svetozar161 Нуб

    ээээ, можно для тупых разжевать?))
     
  14. Mitrandir

    Mitrandir Гуру

    float f = atof(parameter.substring(50,55).c_str());
     
  15. svetozar161

    svetozar161 Нуб

    спасибо, попробую
     
  16. svetozar161

    svetozar161 Нуб

    Спасибо, работает.
    В мониторе
    Код (C++):
    command: script
    parameter: espdata&idesp=ESP826600895b59&hostname=ESP05&shtt=22.8&shth=55.3&uptime=140&errconn=3&wanip=192.168.1.205&f
    22.80
    command: script
    parameter: espdata&idesp=ESP826600895b59&hostname=ESP05&shtt=22.8&shth=55.4&uptime=150&errconn=3&wanip=192.168.1.205&f
    22.80
     
    А ничего, что после 8 ноль идет? В условии термостата надо писать именно 22.80 или можно и 22.8?
     
  17. Mitrandir

    Mitrandir Гуру

    С точки зрения математики 22.80 тоже самое что и 22.8.
    с точки зрения типа float тоже
    что с точки зрения термостата- спросите у него
     
  18. svetozar161

    svetozar161 Нуб

    понял, спасибо
     
  19. svetozar161

    svetozar161 Нуб

    В общем скетч скомпилировался, залился, реле не работает. Странно. С int работает, с float нет...
     
  20. DetSimen

    DetSimen Гуру

    ты, пади, float на равенство проверяешь?
     
    b707 нравится это.