domoticz添加和风天气与彩云天气

上一次我在domoticz中嵌入和风api H5页面,是因为和风api的json格式解析不对,但是我不死心,今天终于弄明白了!!,在这里记录一下。

  • 和风天气API格式

  • 彩云天气API格式

  • 分别在domoticz中添加和风天气和彩云天气

  • 后记

1.和风API的格式和返回json格式解析

https://free-api.heweather.net/s6/weather/{weather-type}?{parameters}


# 获取北京实况天气
https://free-api.heweather.net/s6/weather/now?location=beijing&key=api key
请求参数

上面是和风免费api的请求格式,{weather-type}是请求参数,多个参数用&分割,另一个是api请求的示例,location为城市地点在官网上有详细的城市id对应表,还可以用经纬度代替。

上面是返回的json格式文件,可以返回的有温度,湿度,压强等数据,上回我就是因为json格式解析不正确,我在上次的lua脚本报错中,分析出来lua是通过jsonpath对json格式文件进行解析的,原来json是一种很方便的解析json格式的方法,可以很方便的在各种编程语言中使用,比如Python。解析函数是domoticz_applyJsonPath(),有两个参数,示例文件中只给了一个简单的示例其他的什么都没说,就是这个

-- Example of JSON parser handling data with the following structure
--{
--  "id": 13,
--  "name": "outside",
--  "temperature": 12.50,
--  "tags": ["France", "winter"]
--}


-- Retrieve the request content
s = request['content'];

-- Update some devices (index are here for this example)
local id = domoticz_applyJsonPath(s,'.id')
domoticz_updateDevice(id,'',s)

domoticz_updateDevice(),第一个id参数是对应设备的idx编号,第二个参数s是数据,不知道是不是对应的lua中的字符串类型。

对和风api的json格式进行jsonpath解析,以天气情况为例,标签是cond_txt,在json文件的path是$.HeWeather6[0].now.cond_txt,先前出错的原因是因为我对json格式不太熟悉,它返回的json格式是数组和对象的嵌套格式,HeWeather6是一个数组,里面包含着对象。

s = request['content'];


local temperature = domoticz_applyJsonPath(s, '.HeWeather6[0].now.tmp')
local cond_txt = domoticz_applyJsonPath(s,'.HeWeather6[0].now.cond_txt')

domoticz_updateDevice(10,' ',tostring(temperature)) --温度
domoticz_updateDevice(11,' ',cond_txt)

在domoticz中的command lua脚本。

2.彩云天气API的格式和返回json格式解析

上面是我在彩云天气文档中的截图:

彩云天气的api示例

https://api.caiyunapp.com/v2.5/api key /121.6544,25.1552/realtime.json
https://api.caiyunapp.com/v2.5/api key/121.6544,25.1552/realtime.jsonp?callback=MYCALLBACK

 api key替换为自己的api key文档有一个测试的api key,不过地理位置只能用经纬度表示没有城市的代码,经度在前保留四位小数,这一点和dark sky差不多。

其中温度的在json的键值路径并不正确,反正我是没有获取正确的数据,网上的都是基于这个的,疑惑。

 temperature明明是在realtime的路径下面的,根本就不是$.result.temperature

 明明是在result.realtime.temperature,缺少了realtime路径,根本解析不成功!!!

s = request['content'];


local temperature = domoticz_applyJsonPath(s, '.result.realtime.temperature')
domoticz_updateDevice(12,' ',tostring(temperature)) 

上面是在domoticz中添加彩云天气的api的lua脚本,idx一定要对应上。

3.在domoticz中分别添加彩云与和风天气

 在url中添加请求的api地址,命令是在domoticz中的scrpits文件夹下的lua_parsers的lua脚本,刷新的时间写1000,彩云天气的添加方法也是一样的,

之后添加虚拟传感器,选择温度类型和文本类型的显示。

 添加成功之后的截图,终于成功的获取到了数据!!!

4.后记

前一次我在domoticz中添加天气失败的原因或许是出现在我使用的编辑器上,我用的是nano编辑器,用vi打开之后,发现出现了一堆的~M乱码,可能是因为这个原因,所以不要用nano编辑器,太坑了,还是老老实实的用vim吧。

彩云的api使用起来很详细,但是返回的天气状况比如多云什么的都是用代号表示的,而和风天气的api可以直接返回天气状况这一点挺方便的。还有一点,彩云与和风天气的温度好像不一样。

参考的链接

https://www.domoticz.cn/forum/viewtopic.php?p=1059

https://blog.csdn.net/myself8202/article/details/80724968

https://blog.csdn.net/oAlevel/article/details/87287162?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

json path格式的在线解析器的地址是

http://jsonpath.herokuapp.com/  在线解析

https://github.com/json-path/JsonPath  #github地址

发布了10 篇原创文章 · 获赞 2 · 访问量 4153

猜你喜欢

转载自blog.csdn.net/lionwerson/article/details/104470554
今日推荐