I've developed small library that can be used to access Yahoo Weather over NodeMCU and than provide it over serial port. This can be connected to anything with serial port with - for example Arduino. In such case you have simple way of accessing weather for your Arduino projects :)
When connecting ESP8266 to Arduino you will need voltage divider to convert 5v from Arduino to 3.3v.
Here is the source code: https://github.com/maciejmiklas/NodeMCUUtils
Step 1: YahooWeather.lua
yahooWeather.lua script provides access to Yahoo weather.
yaw.start() will obtain weather immediately and keep refreshing it every yaw.syncPeriodSec seconds. Weather data itself is stored in yahooWeather.lua -> yaw.weather, you will find there further documentation. In the example below you can see how to get wether for Munich and update it periodically:
require "yahooWeather" require "wlan" yaw.city = "munich" yaw.country = "de" wlan.setup("free wlan", "12345678") -- update weather every 17 minutes yaw.syncPeriodSec = 1020 yaw.responseCallback = function() print("Weather for today:", yaw.weather.date) print(yaw.weather.low, yaw.weather.high, yaw.weather.text) print("Weather for tomorrow:", yaw.weather.date) print(yaw.weather.low, yaw.weather.high, yaw.weather.text) end -- start weather update timer yaw.start()
Weather for today: 01 Sep 2016 18 25 Partly Cloudy Weather for tomorrow: 02 Sep 201616 25 Partly Cloudy
Step 2: Serial API
Script below registers Serial API Interface providing access to weather. Weather itself will get updated every 17 minutes.
require "serialAPI" require "serialAPIYahooWeather" yaw.city = "munich" yaw.country = "de" yaw.syncPeriodSec = 1020 -- 17 min -- setup wlan required by NTP clokc wlan.setup("fred", "1234567890") -- start serial API by enabling gpio and uart sapi.start() -- start yahoo weather with serial API yaw.start()
Now you can execute few simple commands over serial:
# weather description for today YF1 text Rain And Snow # weather description for tomorrow YF2 text Showers # not existing command YF1 min ERR:serialAPIYahooWeather.lua:6: attempt to concatenate field '?' (a nil value) # max temp for tomorrow >YF2 low 1 # weather date for today >YF1 date 09 Nov 2016