点击链接加入群聊【Node-RED与IoT开发交流】https://jq.qq.com/?_wv=1027&k=5owlJfm
新创立的群,欢迎加入!

总览



这个小项目的目标是通过API请求 获取OpenWeatherMap的基础天气信息和WAQI的空气质量信息, 并将这些信息存入MySQL数据库, 并从前端展示出来. 展示Node-RED在可视化编程和UI界面快速构建方面的强大能力.
相关资源可在Github获取, https://github.com/bing-zhub/WeatherNode. 如果对您有用也请赏个Star吧

数据库设计


以Weather表为主表其余为副表, 通过外键关联各个副表. 大体含义可以通过域名推测.

API Token获取

OpenWeatherMap

  1. https://home.openweathermap.org/users/sign_up 注册
  2. https://home.openweathermap.org/api_keys 添加项目
  3. 在2的页面中可以查看到你获取的Token
    具体的API参数参照 https://openweathermap.org/current

WAQI

  1. https://aqicn.org/data-platform/token/# 注册
  2. 注册成功后便可以在当前页面获取到Token
    具体的API参数参照 https://aqicn.org/json-api/doc/

Node-RED编写

如果曾看过之前的文章, 应该知道 Node-RED每个flow是通过一个msg对象进行传递数据的. 所以这里我们在init节点生成一个msg对象, 来替代Node-RED本身生成的msg对象(这样可以更加方便添加键值对).

msg = {city:"",country:"",basic_api:"",air_api:"",data:{basic:{},air:{}},topic:"",ids:{location:0,temp:0,wind:0,air:0,iaqi:0},payload:{urls:""}
}return msg;

city/country用来放置即将在config节点中即将添加的城市和国家. data用来存储从API获取的数据. topic在后续节点主要用于存放SQL语句. ids用于存放,在存入副表数据过程中产生的副表ID, 主要用于主表外键关联.

从数据源获取数据

在初始化完成后, 下面构造API

city = "London";
country = "UK";
basic_token = "OpenWeatherMap token";
air_token = "WAQI token";msg.city = city;
msg.country = country;
msg.basic_api = `http://api.openweathermap.org/data/2.5/weather?q=${city},${country}&appid=${basic_token}`;
msg.air_api = `https://api.waqi.info/feed/${city}/?token=${air_token}`;msg.url = msg.basic_api;
return msg;

构造完成后, API地址被放入了msg对象, 在下一步的Request请求便可以调用.
Request节点可以通过可视化配置的方式配置API地址, 也可通过msg.url动态配置, 所以我们把基础天气信息的API放入msg.url.

Request(GET)请求后, 返回的数据通过JSON节点, 将字符串转为JavaScript对象, 这样更加方便操作. 转换好之后, 将获得的数据放入事先为数据预留的msg.data.

这是我们就已经获取到了对应城市的基础天气.

空气质量信息与之类似, 不赘述.

数据库存储

数据源数据获取后, 我们便可以操作msg, 将需要的信息存储进入数据库.
首先我们安装Mysql Connector

latitude = msg.data.basic.coord.lon;
longitude = msg.data.basic.coord.lat;sql = `insert into Location (latitude, longitude) values(${latitude}, ${longitude});`;
msg.topic = sql;
return msg;

首先获取msg对象中的latitudelongitude.
接下来构造DML, 这里使用JavaScript的模板语法, 把获取的latitudelongitude填入SQL语句.
由于Node-RED中的MySQL驱动从以msg.topic为SQL, 所以我们要将构造好的SQL放入msg.topic.

之后, 从左侧节点栏拖出MySQL, 配置数据库, 完成后用连线将二者(function节点与MySQL节点)进行连接, 如总图.

当数据到来时, MySQL节点便会执行msg.topic中的SQL语句, 将对应的信息存入数据库. 数据存储成功后, MySQL节点会将SQL执行的结果返回到msg.payload, 其中包含插入的id, 我们将获取到的id放入ids对应的键中, 以便后续使用.

其余过程相似性很大, 不再赘述.
在对主表进行操作时, 将msg.ids中的数据获取出来, 便可以产生外键约束, 保持数据整体性.

可视化

未完待续…

本人水平极为有限, 存在的不足还请各位海涵. 有问题欢迎交流. 如果有时间我会写一篇真正的关于物联网的小文.

使用Node-RED搭建一个天气预报面板相关推荐

  1. Node.js搭建一个简单的服务器

    文章目录 Node.js的安装 了解Node.js模块系统 服务器的搭建 一.创建一个Web服务器 注意 程序代码 运行 二.静态资源托管 静态资源 注意 程序代码 运行 三.简单接口的实现(简单服务 ...

  2. vue+node+mongodb 搭建一个完整博客

    Vue + Node + Mongodb 开发一个完整博客流程 前言 前段时间刚把自己的个人网站写完, 于是这段时间因为事情不是太多,便整理了一下,写了个简易版的博客系统 服务端用的是 koa2框架 ...

  3. 从0-1搭建一个天气预报网站

    文章目录 前言 先上图 技术支撑 用户 IP 地址获取 天气预报 API 开始搭建 beego 环境搭建 网站项目编写 部署 完工 前言 前段时间在家搭建了一台服务器<云服务器续费太贵,直接在家 ...

  4. 如何用express+node+ejs 搭建一个简单的页面

    1.建立工程文件夹my_ejs. 2.首先利用npm install express和npm install ejs 下载这两个家伙.至于要不要设置成全局的,看习惯,我习惯性的下载到本项目中的文件夹中 ...

  5. 从0开始利用宝塔linux面板+DSShop搭建一个简单的购物网站

    宝塔linux面板的安装详情在这 德尚官网 利用DSSshop搭建一个单店铺商城 在软件商店一键部署 找到DSSshop点击一键安装 在网站设置出添加一下ip 添加完之后在浏览器上方输入ip地址进行安 ...

  6. 二十七、Node.js搭建第一个Express应用框架

    @Author:Runsen @Date:2020/6/8 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  7. Node.js用6行代码1个JS文件搭建一个HTTP静态服务器

    2019独角兽企业重金招聘Python工程师标准>>> Node.js宣言:Node.js is a platform built on Chrome's JavaScript ru ...

  8. axios下载图片 node_vue+node.js手把手教你搭建一个直播平台(二)

    上一期,帅气的小羽给老铁们介绍了直播平台的项目的后端搭建,这期就让小羽带大家来搭建一下前端的框架. 1.创建前端工程 毫无疑问,搭建一个项目的框架,那第一步肯定是得创建一个工程啦.cmd命令,输入vu ...

  9. vue+node.js手把手教你搭建一个直播平台(二)

    上一期,帅气的小羽给老铁们介绍了直播平台的项目的后端搭建,这期就让小羽带大家来搭建一下前端的框架. 1.创建前端工程 毫无疑问,搭建一个项目的框架,那第一步肯定是得创建一个工程啦.cmd命令,输入vu ...

最新文章

  1. 安卓复杂的首页布局_到底该如何快速进入安卓编程?
  2. 【NLP-NER】什么是命名实体识别?
  3. JZOJ 3875. 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)
  4. sumif三个条件怎么填_函数SUMIF和SUMIFS
  5. 卷积神经网络-进化史 | 从LeNet到AlexNet
  6. Java高并发编程详解系列-内存模型
  7. Python对象特殊方法及其用法演示
  8. 软件测试用例设计方法-等价类划分法
  9. 前端向后台发送请求有几种方式?
  10. 封电脑机器码怎么解决_如何通过修改机器码解决游戏封号问题
  11. 万人血书的前端开发自学资料(书籍+教程),它来了~
  12. McAfee Epo
  13. javascript计算两个时间差
  14. 怎么将图片转换成word文档?图片转word其实很简单
  15. Python的运行加速:C究竟比python快在哪
  16. 我的回忆和有趣的故事 by李维(台湾)
  17. Shell中的while用法
  18. html代码word,Web前端
  19. Vue实战篇一: 使用Vue搭建注册登录界面
  20. 中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡,母鸡,小鸡各多少只?

热门文章

  1. 机械硬盘提示函数不正确的资料找到法子
  2. 如何关闭市计算机休眠,电脑怎么取消休眠?关闭休眠命令是什么?
  3. 生命在于学习——MSF初体验(一)
  4. ts20芯片c语言例程,种基于C语言的DSP程序通用固化方法.PDF
  5. Call to undefined function sftp\ssh2_connect();安装PHP ssh2扩展
  6. TensorRT学习第一篇:python 中 TensorRT 使用流程之onnx
  7. 股票交易接口有没有提供试用的?
  8. 信号与系统仿真实验——实验二 傅立叶变换MATLAB的实现及傅里叶变换性质的分析
  9. 《放开手》 - 尹航
  10. 滤波算法——均值滤波,中值滤波,一阶(αβ)滤波,卡尔曼滤波