Arduino Mega Server (AMS) - погодная станция

Модератор: Alex

serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Ср окт 18, 2017 11:47 pm

Доброго времени суток Всем. В интернете есть множество примеров погодных информеров для ESP32, когда контроллер обращается к сайту погоды , получает ответ ( обычно в JSON) и в лучшем случае выводит информацию на OLED экран. Наглядный пример расписан ТУТ. Регистрируемся на сайте , получаем API ключ, вводим в скетч ,а также название страны и города в международном формате и в итоге на четырех сменных экранах получаем прогноз погоды.( Для чистоты эксперимента можно сравнить с реальными данными своих датчиков).
Все отлично работает и показывает , за исключением пары моментов. Первый - время сервер отдает в формате strftime , то есть готовое (год, месяц, день, час, минуты и секунды).Так вот на экране отображается время по Гринвичу , хотя в ответе есть местное время. И вторая главная проблема - как этот код вставить в AMS ?
Вот полный ответ сервиса в JSON
СпойлерПоказать

Код: Выделить всё

{
  "response": {
  "version":"0.1",
  "termsofService":"http://www.wunderground.com/weather/api/d/terms.html",
  "features": {
  "conditions": 1
  }
    }
  ,    "current_observation": {
        "image": {
        "url":"http://icons.wxug.com/graphics/wu2/logo_130x80.png",
        "title":"Weather Underground",
        "link":"http://www.wunderground.com"
        },
        "display_location": {
        "full":"Chisinau, Republic of Moldova",
        "city":"Chisinau",
        "state":"CU",
        "state_name":"Republic of Moldova",
        "country":"M1",
        "country_iso3166":"MD",
        "zip":"00000",
        "magic":"1",
        "wmo":"33815",
        "latitude":"47.02999878",
        "longitude":"28.82999992",
        "elevation":"24.1"
        },
        "observation_location": {
        "full":"Kisinev, ",
        "city":"Kisinev",
        "state":"",
        "country":"Moldova",
        "country_iso3166":"MD",
        "latitude":"47.01666641",
        "longitude":"28.98333359",
        "elevation":"591 ft"
        },
        "estimated": {
        },
        "station_id":"33815",
        "observation_time":"Last Updated on October 18, 9:00 PM EEST",
        "observation_time_rfc822":"Wed, 18 Oct 2017 21:00:00 +0300",
        "observation_epoch":"1508349600",
        "local_time_rfc822":"Wed, 18 Oct 2017 22:10:22 +0300",
        "local_epoch":"1508353822",
        "local_tz_short":"EEST",
        "local_tz_long":"Europe/Chisinau",
        "local_tz_offset":"+0300",
        "weather":"Clear",
        "temperature_string":"63 F (17 C)",
        "temp_f":63,
        "temp_c":17,
        "relative_humidity":"51%",
        "wind_string":"From the SSW at 4 MPH",
        "wind_dir":"SSW",
        "wind_degrees":210,
        "wind_mph":4,
        "wind_gust_mph":0,
        "wind_kph":7,
        "wind_gust_kph":0,
        "pressure_mb":"1018",
        "pressure_in":"30.08",
        "pressure_trend":"+",
        "dewpoint_string":"49 F (10 C)",
        "dewpoint_f":49,
        "dewpoint_c":10,
        "heat_index_string":"NA",
        "heat_index_f":"NA",
        "heat_index_c":"NA",
        "windchill_string":"NA",
        "windchill_f":"NA",
        "windchill_c":"NA",
        "feelslike_string":"63 F (17 C)",
        "feelslike_f":"63",
        "feelslike_c":"17",
        "visibility_mi":"12.0",
        "visibility_km":"20.0",
        "solarradiation":"--",
        "UV":"-1","precip_1hr_string":"0.00 in (0 mm)",
        "precip_1hr_in":"0.00",
        "precip_1hr_metric":"0",
        "precip_today_string":"0.00 in (0 mm)",
        "precip_today_in":"0.00",
        "precip_today_metric":"0",
        "icon":"clear",
        "icon_url":"http://icons.wxug.com/i/c/k/nt_clear.gif",
        "forecast_url":"http://www.wunderground.com/global/stations/33815.html",
        "history_url":"http://www.wunderground.com/history/airport/33815/2017/10/18/DailyHistory.html",
        "ob_url":"http://www.wunderground.com/cgi-bin/findweather/getForecast?query=47.01666641,28.98333359",
        "nowcast":""
    }
} 
А вот что в сериал-порту
СпойлерПоказать
  • Connecting to: mega
    ..WiFi connected

    IP address: 192.168.2.103
    Connecting to api.wunderground.com
    Requesting URL: http://api.wunderground.com/api/4...... ... sinau.json
    Receiving API weather data.................
    Closing connection
    Wed Oct 18 20:09:11 2017



    Wed Oct 18 20:09:16 2017

    Creating object...
    root object created...
    CurrentObservation object created...
    Wed Oct 18 20:09:16 2017
То есть время отличается на два часа , хотя в ответе есть правильное

Код: Выделить всё

        "observation_time_rfc822":"Wed, 18 Oct 2017 21:00:00 +0300",
        "observation_epoch":"1508349600",
        "local_time_rfc822":"Wed, 18 Oct 2017 22:10:22 +0300" // правильное местное       
В конечном итоге хочется на домашней странице получить краткий прогноз погоды , примерно так же как и в модуле OpenWM на МД со сменными картинками.
Полный код для ESP32
ESP32_WU_13OLED_TIme_v03.rar
(7.52 КБ) 202 скачивания
Чтобы научить AMS работать с JSON в сервер-ажакс добавить пару строк
СпойлерПоказать

Код: Выделить всё

void sendJsonAnswer (WiFiClient cl) {
  cl.println(makeAnswer("text/json"));
}
//========================
    else if (StrContains(HTTP_req, "GET /") && StrContains(HTTP_req, ".json")) {
    fileName = strtok(HTTP_req, "GET /");
    webFile = SD.open("/" + (String)fileName);
    if (webFile) {
      sendJsonAnswer(cl);
    }
    else {
      sendErrorAnswer(fileName, cl);
    }
  } 
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение nick7zmail » Чт окт 19, 2017 6:17 am

К АМС можно прикрутить что угодно))

Если хотите json получать - достаточно её (строку) "cклеить" в АМС, и выдавать по какому-нить запросу....
То что вы привели ответ json и вывод сериал порта - вообще информативной нагрузки не несет.

На домашней странице АМС, или на домашней странице МД инфу видеть хотите?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение alexsis_76 » Чт окт 19, 2017 9:25 am

К АМС можно прикрутить что угодно))
я бы не был столь категоричен
по разбираем, посмотрим.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Чт окт 19, 2017 10:49 am

nick7zmail писал(а):....
То что вы привели ответ json и вывод сериал порта - вообще информативной нагрузки не несет.
В сериале мы видим , что АМС достучался до сайта и получил в ответ всю эту километровую строку JSON. Пока ничего клеить не надо ). Внутри код распарсивает и пока выводит на OLED экран некоторые данные.
Сейчас меня больше всего интересует - что надо вырезать из скетча ,что бы интегрировать в AMS . ( Например инициализацию WiFi , открытие и закрытие сессии ....).
nick7zmail писал(а):..На домашней странице АМС, или на домашней странице МД инфу видеть хотите?
Конечно же AMS. Под домашней страницей понимаю какой нибудь экран с нужной информацией , который открыт постоянно . Примеры выкладывал , но очень давно.
PS На работе комп сдох , могу только ответить коротко. Все ссылки и скриншоты только вечером.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение nick7zmail » Чт окт 19, 2017 11:35 am

А, сори немного не понял вопрос тогда...я думал нужно было, чтобы АМС выдавал такую же json-строку.

Скачал скетчик глянул...для того чтобы к АМС прикрутить - достаточно вырезать всё кроме зашитого в функции loop, и всех подфункций и инклудов, которые оно за собой тянет...то есть приемущественно функцию Call_API, (ну и впихнуть в АМС в функцию loop периодический вызов этого Call_API).
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Чт окт 19, 2017 11:44 am

В меру своих сил я вставил код в ESP32... Пока споткнулся на инициализации дисплея , но это мелочь и можно пока убрать. Хуже обстоит дело с WIFI.
Вот как раз Call_API компилятору не нравиться. Хотя у ESP32 есть фишка - она очень придирчива к месту расположения переменных то есть до Сетапа или на самой вкладке. С такой бедой столкнулся когда прикручивал NRF24 к ESP32.
За это сообщение автора serghei поблагодарил:
Петр (Чт окт 19, 2017 12:17 pm)
Рейтинг: 1.16%
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение Alex » Чт окт 19, 2017 12:59 pm

С такой бедой столкнулся когда прикручивал NRF24 к ESP32.
Я уже потерял нить — к ESP8266 nRF24 прикрутили, а к ESP32 кажется нет. Скиньте ссылку на этот вариант (с пояснениями по пинам) или скетч с nRF24 и ESP32.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Чт окт 19, 2017 1:03 pm

Тут всё намного сложнее - скетч то скомпилировал , пакеты идут ( от ESP32 к сенсору). А физически сенсора нет и до конца не разобрался с пинами CS и вторым. Вечером скину код.
Во-первых расположение переменных для NRF-24 пришлось изменить , а во вторых eGorka "перепилил" библиотеку для радио модуля. Но я думаю он не обидится насчет авторства? (шутка).
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Ср окт 25, 2017 10:35 pm

Если вырезать обращение к дисплею и распарсивание ответа , то получается так
СпойлерПоказать

Код: Выделить всё

 #ifdef FEATURE_WUNDERGR
#include <ArduinoJson.h>   // https://github.com/bblanchon/ArduinoJson
#include "time.h"
String apikey   = "4d.................6cfe4f";
String country  = "MD"; //e.g. "UK";
String city     = "Chisinau";    //e.g. "LONDON";

const char* host     = "api.wunderground.com"; 

String currCondString, time_str; // strings to hold received API weather data and current time

WiFiClient wclient; // wifi client object

void initTwundergr() {


  moduleTwundergr = ENABLE;
  started(F("WU"), true);
//=======================================
timeStamp();
 //====================================== 
  Call_API(&currCondString);      // Get data with an API call and place response in a String
  

}

  void workTwundergr(){
    

   if (cycle5m){
      Call_API(&currCondString);      // Get data with an API call and place response in a String
      Serial.println(currCondString); // Display the response
     // lastConnectionTime = millis();
    }
    //delay(remainingTimeBudget);
  }
int Call_API(String* resultString) {
  wclient.stop();  // Clear any current connections
  Serial.println("Connecting to "+String(host)); // start a new connection
 // Serial.println("Connecting to "); // start a new connection
  const int httpPort = 80;
  
  if (!wclient.connect(host, httpPort)) {
   Serial.println("Connection failed");
   return false;
  }
  
  // Weather Underground API address http://api.wunderground.com/api/YOUR_API_KEY/conditions/q/YOUR_STATE/YOUR_CITY.json
  String url = "http://api.wunderground.com/api/"+apikey+"/conditions/q/"+country+"/"+city+".json";
  Serial.println("Requesting URL: "+String(url));
  
  wclient.print(String("GET ") + url + " HTTP/1.1\r\n" +
  "Host: " + host + "\r\n" +
  "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (wclient.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Connection Timeout...Stopping");
      wclient.stop();
      return false;
    }
  }
  Serial.print("Receiving API weather data");
  while(wclient.available()) {
    *(resultString) = wclient.readStringUntil('\r');
    Serial.print(".");
  }
  Serial.println("\r\nClosing connection");
  return true;
} 
И вот тут затык - нет соединения с сервисом.
СпойлерПоказать
  • 2017-10-25 22:09:59 Module Temp... started
    2017-10-25 22:09:59 Module Contacts... started
    2017-10-25 22:09:59 Module PIR... started
    2017-10-25 22:09:59 Module LED... started
    2017-10-25 22:09:59 Module Keys... started
    2017-10-25 22:09:59 Module Robotdyn... started
    2017-10-25 22:09:59 Module DHT... started
    2017-10-25 22:09:59 Base Receiving
    2017-10-25 22:09:59 Module nRF24... started
    2017-10-25 22:09:59 Module TLog... started
    2017-10-25 22:09:59 Module WU... started
    2017-10-25 22:09:59 Connecting to api.wunderground.com
    Connection failed
    GLOBAL Init DONE (19s)

    AMS WORK
    2017-10-25 22:09:59 : 132524 (46%) 132524
    Request: -> 2 1 0 255 1 0 0 0 0
    SEND FAILED
    ?esp=1
    2017-10-25 22:9:59 ,0.00,0.00,0.00,nan,nan,36.11
А по идее должен получить ответ
СпойлерПоказать
  • Connecting to api.wunderground.com
    Requesting URL: http://api.wunderground.com/api/4...... ... sinau.json
    Receiving API weather data.................
    Closing connection
    Wed Oct 18 20:09:11 2017
Разбираюсь дальше.

*** Сообщение запрещено. Сообщение похоже на спам. ***
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) - погодная станция

Сообщение serghei » Вс окт 29, 2017 12:19 am

nick7zmail писал(а):К АМС можно прикрутить что угодно))
Прикрутил всё таки !!! Когда полтора года назад выложили подобную картинку - все ахнули. Теперь это реальность. ( Той картинки больше нет на форуме).
Конкретно эта "снята" со страницы АМС , поэтому статична. Но ответ от сервиса АМС получает. Теперь дело быстроты нажатия на клавиши , чтобы все данные через ажакс вытащить на страницу. Ну и главное " въехать" как облако посадить на свое место в квадратик :lol:
СпойлерПоказать
AMS_Weather.jpg
AMS_Weather.jpg (147.66 КБ) 6662 просмотра
Первым делом надо убрать белый фон и тучки скачать локально.
Да , и это на ESP8266 . С дровами 2.0.4 все летает как угорелое...
СпойлерПоказать
  • AMS for WeMos_SD_6_wg started...
    Modul Hardware...
    SDK version: 2.0.0(656edbf)
    Boot version: 5
    Boot mode: 1
    Reset info: Fatal exception:0 flag:6 (EXT_SYS_RST) epc1:0x00000000 epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000000 depc:0x00000000
    CPU freq: 80 MHz
    Free memory: 14272 (30%)
    Flash speed: 40 MHz
    Flash mode: 2
    Flash size: 4194304
    SPIFFS size: 3146000
    Program size: 1048304
    Sketch size: 343792
    Free for sketch: 704512
    started
    Modul Wi-Fi...
    Connecting to mega
    .
    WiFi connected
    IP address: 192.168.2.45
    started
    Modul SD...
    SD init... OK
    index.htm... found
    Check................
    Files: 169
    Size: 3698808
    started
    Modul SD Info...
    SD type: SDHC
    Filesystem: FAT32
    Cluster: 4096
    SD size: 7930 MB
    started
    Modul Random... started
    Modul EEPROM...
    Name: WeMos_D1_mini S
    started
    Modul NTP...
    Local port: 2390
    started
    Modul RTC...
    Set time provider
    sending NTP packet...
    packet received, length=48
    Unix time = 1509197962
    started
    2017-10-28 13:39:22 Modul HTTP...
    2017-10-28 13:39:22 HTTP port: 8080
    2017-10-28 13:39:22 started
    2017-10-28 13:39:22 Modul Server... started
    2017-10-28 13:39:22 Modul nRF24...
    2017-10-28 13:39:22 Base Receiving
    2017-10-28 13:39:22 started
    2017-10-28 13:39:22 Modul RobotDyn... started
    2017-10-28 13:39:22 Modul WD...
    Use this URL to connect: http://192.168.2.45/
    GET /api/4d.......................4f/forecast/q/MD/Chisinau.json HTTP/1.1
    User-Agent: Weather Webserver v3.0
    Accept: */*
    Host: api.wunderground.com
    Connection: close


    Connecting to api.wunderground.com
    GET /api/4.........................4f/forecast/q/MD/Chisinau.json HTTP/1.1
    User-Agent: Weather Webserver v3.0
    Accept: */*
    Host: api.wunderground.com
    Connection: close

    respLen 7701
    2017-10-28 13:39:23 started
    GLOBAL Init DONE (5s)

    AMS WORK
    2017-10-28 13:39:23 : 12512 (27%) 12512
*** Сообщение запрещено. Сообщение похоже на спам. ***
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Ответить