继续填坑,domoticz默认的 darksky 貌似是要停运了,所以准备将domoticz的天气信息换成和风天气的

1. 使用浏览器拿到需要的数据

首先建议 你去获取一个开发者账号(需要实名) ,因为开发者账号的每天刷新次数比较多 网址是这个 https://dev.qweather.com/

接下来 你能通过你的key 拿到天气的信息

你的 http 的请求应该是这样的 :

https://devapi.qweather.com/v7/weather/now?location=101280604&key=3b6955c71xxxxxx

上面的 location 是你的城市代码 101280601 代表的是深圳
关于城市代码 你可以去这里查找到你想要的信息

https://github.com/qwd/LocationList/blob/master/China-City-List-latest.csv
https://github.com/qwd/LocationList

关于 key 你需要去自己注册账号 自己去申请,这里不多说。开发者认证也很好过的,只要实名就可以了。

2. HTTP/HTTPS poller 的使用

这个是最常见的一个工具,他会定时的去请求一个http的地址,然后拿到返回的数据。
拿到返回数据之后它还可以指定一个处理脚本去处理这个请求拿到的数据!
如此你应该能添加一个 http 的poller ,他现在会去执行某一个路径下的一个叫做
weather_forcast.lua 的脚本, 我们感兴趣的信息 将会被这个脚本回传。
如果你的domoticz 也是安装在root 路径下,那么 你的 文件路径可能是这个

/root/domoticz/scripts/lua_parsers

如果你找不到这个路径的话 你可以尝试着全局查找 这几个文件 他们挨得很近
domoticz.conf restart_domoticz 等等
找到路径创建文件,然后 现在就可以去打印一下hello world
lua 脚本的hello是这样的 :

print("hello world")

你的输出信息将会显示到 domoticz的日志中,日志在这里:
你没有看到你的打印信息? 可能是你的刷新频率太低了!
测试阶段 可以将刷新频率设置的高一些 这里的5 代表的意思是 5 s钟去请求一次
实际的使用过程中其实一分钟去获取一次都完全够用。 这里只是为了更快的看到效果
注意 : 正常使用的时候请将刷新频率调整回来 保证不会过多的消耗请求次数!
我推荐60 ms 刷新一次,这样每天刷新1440 次,对服务器压力不大,而且天气信息也没必要更新太快!
至此 我们就已经实现了 周期的去调用我们的解析脚本,接下来就是进行数据的解析了,这一部分我就不去班门弄斧了 懂得都懂,不懂抄就完事了。

s = request['content'];
JSON = (loadfile "/root/domoticz/scripts/lua/JSON.lua")() -- 这里要加载一个系统里面带的json 转table的库   他的作用就是将json 数据转换为lua 的table
-- { -- 一个数据包的格式,你可以参考这个去解析你的参数
--     "code":"200",
--     "updateTime":"2021-05-09T21:02+08:00",
--     "fxLink":"http://hfx.link/1u0z1",
--     "now":{--         "obsTime":"2021-05-09T20:48+08:00",
--         "temp":"27",
--         "feelsLike":"30",
--         "icon":"150",
--         "text":"晴",
--         "wind360":"135",
--         "windDir":"东南风",
--         "windScale":"1",
--         "windSpeed":"5",
--         "humidity":"82",
--         "precip":"0.0",
--         "pressure":"1000",
--         "vis":"30",
--         "cloud":"10",
--         "dew":"25"
--     },
--     "refer":{--         "sources":[
--             "Weather China"
--         ],
--         "license":[
--             "no commercial use"
--         ]
--     }
-- }
local json_table  = JSON:decode(s)
table_now = json_table["now"]
domoticz_updateDevice(1,"",tonumber(table_now["temp"]))
domoticz_updateDevice(4,table_now["pressure"],1)num_humi = tonumber(table_now["humidity"])
humi_level = 0;
if num_humi > 90 then   -- 这一部分是我自己猜的   。。。。。humi_level = 3
elseif num_humi > 70  thenhumi_level = 1
elseif num_humi > 50 thenhumi_level = 0
else humi_level = 2
end
domoticz_updateDevice(5,table_now["humidity"],humi_level)
-- 0 标准  1 舒适 2 干燥 3 潮湿
--domoticz.HUM_NORMAL
--domoticz.HUM_COMFORTABLE
--domoticz.HUM_DRY
--domoticz.HUM_WET

3. domoticz的API:domoticz_updateDevice

domoticz_updateDevice 这个接口的解析函数在这里,这里使用的是lua 调用c++ 的库的方法,这个函数就是最终的解析函数,他从堆栈里面拿出lua 传入的参数。
参数的解释是这个
// - deviceId (integer), svalue (string), nvalue (string), [rssi(integer)], [battery(integer)]
// - deviceId (integer), svalue (string), nvalue (integer), [rssi(integer)], [battery(integer)]

int CLuaHandler::l_domoticz_updateDevice(lua_State* lua_state)
{int nargs = lua_gettop(lua_state);if (nargs >= 3 && nargs <= 5)     // 参数是3~5 个  有两个是可选的参数{// Supported format ares :// - deviceId (integer), svalue (string), nvalue (string), [rssi(integer)], [battery(integer)]// - deviceId (integer), svalue (string), nvalue (integer), [rssi(integer)], [battery(integer)]if (lua_isnumber(lua_state, 1) && (lua_isstring(lua_state, 2) || lua_isnumber(lua_state, 2)) && lua_isstring(lua_state, 3)){// Extract the parameters from the lua 'updateDevice' functionint ideviceId = (int)lua_tointeger(lua_state, 1);std::string nvalue = lua_tostring(lua_state, 2);std::string svalue = lua_tostring(lua_state, 3);if (((lua_isstring(lua_state, 3) && nvalue.empty()) && svalue.empty())){_log.Log(LOG_ERROR, "CLuaHandler (updateDevice from LUA) : nvalue and svalue are empty ");return 0;}// Parseint invalue = (!nvalue.empty()) ? atoi(nvalue.c_str()) : 0;int signallevel = 12;if (nargs >= 4 && lua_isnumber(lua_state, 4)){signallevel = (int)lua_tointeger(lua_state, 4);}int batterylevel = 255;if (nargs == 5 && lua_isnumber(lua_state, 5)){batterylevel = (int)lua_tointeger(lua_state, 5);}_log.Log(LOG_NORM, "CLuaHandler (updateDevice from LUA) : idx=%d nvalue=%s svalue=%s invalue=%d signallevel=%d batterylevel=%d", ideviceId, nvalue.c_str(), svalue.c_str(), invalue, signallevel, batterylevel);m_mainworker.UpdateDevice(ideviceId, invalue, svalue, signallevel, batterylevel);}else{_log.Log(LOG_ERROR, "CLuaHandler (updateDevice from LUA) : Incorrect parameters type");}}else{_log.Log(LOG_ERROR, "CLuaHandler (updateDevice from LUA) : Not enough parameters");}return 0;
}

智能家居--domoticz配置和风天气 HTTP/HTTPS poller 的使用以及domoticz_updateDevice的介绍相关推荐

  1. domoticz添加和风天气,让domoticz显示天气信息

    1.domoticz添加天气信息 domoticz中可以很方便的通过dark sky api显示天气信息,但是dark sky的信息不太准确,想添加国内天气的信息,网上的都是通过彩云的api获取jso ...

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

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

  3. 绿米开关如何重置_智能家居基础配置之人体传感器—绿米Aqara 人体传感器

    前言 关注过楼主的朋友应该知道,楼主在智能家居的路上越走越远,围绕小米全家桶一步一步地部署了入门级的智能家居系统.人体传感器作为智能家居实现的最基础单位,应用非常广泛.下面楼主就为大家介绍这款绿米出品 ...

  4. lte核心网由哪些设备组成_一整套无线智能家居,是由哪些设备组成?这份清单告诉你答案...

    经过AI科技报前几期对智能家居的分析.讲解后,有网友留言问AI君:无线智能家居都由哪些设备组成,如何购买搭配才是合理的?今天AI君就来聊聊这个问题,希望能给他以及有需求的各位,提供一点点帮助. 触摸触 ...

  5. 基于ZigBee和STM32的智能家居控制系统的设计与实现(三)

    基于ZigBee和STM32的智能家居控制系统的设计与实现(三) 自从前两篇博客介绍了智能家居系统的基本实现机理后,收到了好多朋友的来信,和我讨论了好多的这方面的知识,在此很高兴,虽然自己做的这个所谓 ...

  6. 推荐一个免费7天天气预报API服务:和风天气

    最近的一个项目中需要获取国内城市的7天内天气预报,说实话,目前的开源环境中仅存的天气预报API太少,找了许久才发现知乎里面提到的"和风天气"(https://www.heweath ...

  7. vue中如何使用和风天气插件

      想给我的个人博客添个展示天气的,网上一找看到了中国天气.和风天气这两种,附一下这两个的官网链接. 中国天气:https://cj.weather.com.cn/plugin/index 和风天气: ...

  8. Java调用和风天气台API查看天气

    创建一个Java Project即可 import java.io.*; import java.net.URL; import java.net.URLConnection; import java ...

  9. 5G物联网智能家居实战课程 第一章

    前言 大家好,今天开始我们的课程--5G物联网智能家居实战项目 视频教程链接: https://edu.csdn.net/course/detail/26678 目前已经更新了7节 01 课程安排 0 ...

最新文章

  1. python 文件获取绝对路径
  2. 【华为云技术分享】物体检测yolo3算法 学习笔记2
  3. jlpt报名系统显示网络错误和服务器忙,批改网作文提交不了一直显示服务器或网络错误...
  4. 帅帅什么意思_为什么99%的花艺师都害怕创作?
  5. Visual SVN的安装
  6. 数据库提示日志文件不可用
  7. 《OpenGL ES应用开发实践指南:Android卷》—— 3.7 练习
  8. JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?
  9. select * 排除字段_interesting数据库查找语句Select还能这样用
  10. 不要把Linux和Windows比较
  11. CCS6.2.0 安装步骤详解
  12. 次世代教程_角色《佛特艾斯》制作具体分析
  13. 30种EMC标准电路
  14. VLAN_Trank使用
  15. 大数据职业理解_大数据职业发展方向
  16. 安全性测试(一)--网页安全检查
  17. 日志过滤实体中的属性
  18. Unity 扫描 二维码
  19. 题解 - HDU 6638 Snowy Smile (线段树)
  20. crontab——定时周期性执行任务

热门文章

  1. c语言考试排座位系统源程序,c语言_排考场座位问题:.doc
  2. 软件工程复习题-快来划重点
  3. 拉伸——CAD做三维图的常用指令
  4. 基于区块链的去中心化存储(区块链存储)的工作流程
  5. 数字计算机之父——冯·诺依曼
  6. phpstorm+xdebug远程调试
  7. 爬虫笔记41之反爬系列四:字体反爬、JS反爬
  8. 在CentOS下运行exe的方法
  9. 框架学习(1)——service层,dao层和service实现类进行数据库操作
  10. 详解SQL中Groupings Sets 语句的功能和底层实现逻辑