Ключевое ?лово

vk

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Софт:обсуждение программного обеспечения для умного дома

ТЕМА: прогноз погоды от гисметео

прогноз погоды от гисметео 20 Дек 2016 10:10 #16457

  • Pilnikov
  • Pilnikov аватар
  • Не в сети
  • Захожу иногда
  • Интересующийся
  • Сообщений: 63
  • Спасибо получено: 3
  • Репутация: 0
void get_gm()
{
  if (!web_cli && !web_ap) web_cli = start_client();
  if (web_cli)
  {
    String addr = "http://informer.gismeteo.ru/xml/";
    addr += String(eeprom_data.pp_city_id);
    addr += ".xml";
    String inStr = http_client (addr);
    /*<MMWEATHER>
      <REPORT type="frc3">
      <TOWN index="28438" sname="%CC%E8%F5%E0%E9%EB%EE%E2%F1%EA" latitude="56" longitude="59">
      <FORECAST day="17" month="11" year="2016" hour="20" tod="3" predict="0" weekday="5">
      <PHENOMENA cloudiness="3" precipitation="10" rpower="0" spower="0"/>
      <PRESSURE max="756" min="754"/>
      <TEMPERATURE max="-19" min="-17"/>
      <WIND min="1" max="3" direction="2"/>
      <RELWET max="81" min="79"/>
      <HEAT min="-22" max="-20"/>
      </FORECAST>
      <FORECAST day="18" month="11" year="2016" hour="02" tod="0" predict="0" weekday="6">
      <PHENOMENA cloudiness="3" precipitation="10" rpower="0" spower="0"/>
      <PRESSURE max="756" min="754"/>
      <TEMPERATURE max="-20" min="-18"/>
      <WIND min="1" max="3" direction="2"/>
      <RELWET max="79" min="77"/>
      <HEAT min="-21" max="-19"/>
      </FORECAST>
      <FORECAST day="18" month="11" year="2016" hour="08" tod="1" predict="0" weekday="6">
      <PHENOMENA cloudiness="3" precipitation="10" rpower="0" spower="0"/>
      <PRESSURE max="758" min="756"/>
      <TEMPERATURE max="-21" min="-19"/>
      <WIND min="1" max="3" direction="2"/>
      <RELWET max="80" min="78"/>
      <HEAT min="-24" max="-22"/>
      </FORECAST>
      <FORECAST day="18" month="11" year="2016" hour="14" tod="2" predict="0" weekday="6">
      <PHENOMENA cloudiness="3" precipitation="10" rpower="0" spower="0"/>
      <PRESSURE max="759" min="757"/>
      <TEMPERATURE max="-17" min="-15"/>
      <WIND min="1" max="3" direction="2"/>
      <RELWET max="68" min="66"/>
      <HEAT min="-20" max="-18"/>
      </FORECAST>
      </TOWN>
      </REPORT>
      </MMWEATHER>
    */
    Serial.println();

    char inChr; //Обрабатываемый символ
    byte    i = 0;
    bool tag_t = false, tag_v = false;

    String nStr = ""; // Имя переменной
    String vStr = ""; // значение
    String tStr = ""; // Имя тега

    for ( uint16_t n = 0; n < inStr.length(); n++)
    {
      if (!(inStr[n] == '"' || inStr[n] == '/'))
      {
        inChr = inStr[n];
        if (inStr[n] == ' ' || inStr[n] == '>')
        {
          if (vStr > "")
          {
            //Serial.print("name...") ; Serial.println(nStr);
            //Serial.print("value..."); Serial.println(vStr);

            byte vInd = 0;
            if      (tStr == "FORECAST"    && nStr == "tod")           vInd =  1;
            else if (tStr == "PHENOMENA"   && nStr == "cloudiness")    vInd =  2;
            else if (tStr == "PHENOMENA"   && nStr == "precipitation") vInd =  3;
            else if (tStr == "PHENOMENA"   && nStr == "rpower")        vInd =  4;
            else if (tStr == "PHENOMENA"   && nStr == "spower")        vInd =  5;
            else if (tStr == "PRESSURE"    && nStr == "max")           vInd =  6;
            else if (tStr == "PRESSURE"    && nStr == "min")           vInd =  7;
            else if (tStr == "TEMPERATURE" && nStr == "max")           vInd =  8;
            else if (tStr == "TEMPERATURE" && nStr == "min")           vInd =  9;
            else if (tStr == "WIND"        && nStr == "max")           vInd = 10;
            else if (tStr == "WIND"        && nStr == "min")           vInd = 11;
            else if (tStr == "WIND"        && nStr == "direction")     vInd = 12;
            else if (tStr == "RELWET"      && nStr == "max")           vInd = 13;
            else if (tStr == "RELWET"      && nStr == "min")           vInd = 14;
            else if (tStr == "HEAT"        && nStr == "min")           vInd = 15;
            else if (tStr == "HEAT"        && nStr == "max")           vInd = 16;

            //Serial.print("vInd..."); Serial.println(vInd);
            if (vInd > 0) Serial.print(' ');

            switch (vInd)
            {
              case 1:
                prog[i].tod = vStr.toInt();
                Serial.print(prog[i].tod);
                break;
              case 2:
                prog[i].cloud = vStr.toInt();
                Serial.print(prog[i].cloud);
                break;
              case 3:
                prog[i].prec = vStr.toInt();
                Serial.print(prog[i].prec);
                break;
              case 4:
                prog[i].rpower = vStr.toInt();
                Serial.print(prog[i].rpower);
                break;
              case 5:
                prog[i].spower = vStr.toInt();
                Serial.print(prog[i].spower);
                break;
              case 6:
                prog[i].press_max = vStr.toInt();
                Serial.print(prog[i].press_max);
                break;
              case 7:
                prog[i].press_min = vStr.toInt();
                Serial.print(prog[i].press_min);
                break;
              case 8:
                prog[i].temp_max = vStr.toInt();
                Serial.print(prog[i].temp_max);
                break;
              case 9:
                prog[i].temp_min = vStr.toInt();
                Serial.print(prog[i].temp_min);
                break;
              case 10:
                prog[i].wind_min = vStr.toInt();
                Serial.print(prog[i].wind_min);
                break;
              case 11:
                prog[i].wind_max = vStr.toInt();
                Serial.print(prog[i].wind_max);
                break;
              case 12:
                prog[i].wind_dir = vStr.toInt();
                Serial.print(prog[i].wind_dir);
                break;
              case 13:
                prog[i].hum_max = vStr.toInt();
                Serial.print(prog[i].hum_max);
                break;
              case 14:
                prog[i].hum_min = vStr.toInt();
                Serial.print(prog[i].hum_min);
                break;
              case 15:
                prog[i].heat_min = vStr.toInt();
                Serial.print(prog[i].heat_min);
                break;
              case 16:
                prog[i].heat_max = vStr.toInt();
                Serial.print(prog[i].heat_max);
                break;
            }
          }

          if (tStr == "HEAT" && inStr[n] == '>')
          {
            i++;
            Serial.println();
          }
          nStr = ""; // clear the string "low name" for new input:
          vStr = ""; // clear the string "value"    for new input:
          tag_v = false;
          tag_t = false;
        }
        else
        {
          if (tag_t && isAlpha(inChr) && isUpperCase(inChr)) tStr += (char)inChr; //Формируем Имя тега
          else
          {
            if (!tag_v && isAlpha(inChr) && isLowerCase(inChr)) nStr += (char)inChr; //Формируем Имя переменной
            else
            {
              if (tag_v && (isDigit(inChr) || inChr == '-')) vStr += (char)inChr; //Формируем значение
              if (inStr[n] == '=') tag_v = true;
            }
            if (inStr[n] == '<')
            {
              //Serial.print("Tag...");
              //Serial.println(tStr);
              tStr = "";
              tag_t = true;
            }
          }
        }
      }
    }
  }
}
Администратор запретил публиковать записи гостям.
Спасибо сказали: SerjNSK

прогноз погоды от гисметео 28 Дек 2016 21:38 #16554

  • vapes
  • vapes аватар
  • Не в сети
  • Новый участник
  • Сообщений: 9
  • Репутация: 0
На странице ESP http://192.168.1.105 вижу данные с сервера GISMETEO.RU:

Hour 21: -2 °C. 90 %. 748 mmHg.
Hour 3: -2 °C. 90 %. 752 mmHg.
Hour 9(y): -2 °C. 89 %. 757 mmHg.
Hour 15(y): -3 °C. 82 %. 761 mmHg.

Вот таким гет запросом http://192.168.1.105/sensors, я могу вызвать данные с ds18b20

Получаю:
...dsw1:23.4;
Разбор этой строки использую для мобильного приложения.

Вопрос?
Есть ли гет запрос, чтобы вызывать данные с GISMETEO.RU в аналогичном формате в строку?
Или эти данные можно использовать только как метрики с конструктором строк и только для дисплея?
Администратор запретил публиковать записи гостям.

прогноз погоды от гисметео 29 Дек 2016 07:37 #16557

  • Adminhs
  • Adminhs аватар
  • Не в сети
  • Администратор
  • Сообщений: 7195
  • Спасибо получено: 1114
  • Репутация: 194
Эти метрики для локального использования, для внешнего вывода оно не имеет смысла , внешние устройства/системы сами могут эти данные получить без посредников.
Основной канал проекта в Telegram t.me/wifi_iot
Администратор запретил публиковать записи гостям.
Спасибо сказали: vapes

прогноз погоды от гисметео 09 Фев 2017 21:41 #17115

  • SerjNSK
  • SerjNSK аватар
  • Не в сети
  • Новый участник
  • Сообщений: 11
  • Спасибо получено: 1
  • Репутация: 0
По результату месяца тестирования. Прогноз с гисметео, как для моего региона (Новосибирск), херня. Данные которые гисметео отдает забесплатно никак не похожи на реальные, разница легко может составить десять! градусов. Второе, прогноз доже лжив. Третье. Прогноз появляется в 14-00 по местному и исчезает в 24-00 по местному, нахер такой нужен. Четвертое, программа в еспэшке чегото глючит часто, и выдает на экран вместо реальных цифр их текстовые метрики с вебморды.
Администратор запретил публиковать записи гостям.

прогноз погоды от гисметео 10 Фев 2017 07:37 #17119

  • nik_nik
  • nik_nik аватар
  • Не в сети
  • Новый участник
  • Сообщений: 2
  • Репутация: 0
Согласен с вами .
Прогноз действительно не сходится ,а вернее очень не сходиться с реальной температурой за окном .Практически не пользуемся им ,так пробегает в строке для красоты
Администратор запретил публиковать записи гостям.

прогноз погоды от гисметео 10 Фев 2017 07:41 #17120

  • Adminhs
  • Adminhs аватар
  • Не в сети
  • Администратор
  • Сообщений: 7195
  • Спасибо получено: 1114
  • Репутация: 194
Модуль выдает данные с гисметео как есть. Прогноз - на то он и прогноз, что он не может быть точный на 100%.. Данные на следующий день добавляются в 10 часов по москве - уж как есть.. По мне - прогноз хоть и не точный, но приблизительный по моему региону.

На счет "программа глючит" - это просто модуль не может получить данные из-за низкого качества связи самого интернета или wifi.
Основной канал проекта в Telegram t.me/wifi_iot
Администратор запретил публиковать записи гостям.
Модераторы: FlyRouter, Dolfik
Время создания страницы: 0.153 секунд

Home`s Smart © 2013-2016. г.Киров.
Цитирование материалов возможно только со ссылкой на сайт. Использование фотоматериалов только с разрешения авторов.