物联网服务NodeJs-5天学习第三天实战篇① ——10行代码给她造个熬夜提醒睡觉机器人
Posted 单片机菜鸟哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物联网服务NodeJs-5天学习第三天实战篇① ——10行代码给她造个熬夜提醒睡觉机器人相关的知识,希望对你有一定的参考价值。
【NodeJs-5天学习】第三天实战篇① ——给女朋友造个熬夜提醒睡觉机器人
面向读者群体
- ❤️ 电子物联网专业同学,想针对硬件功能构造简单的服务器,不需要学习专业的服务器开发知识 ❤️
- ❤️ 业余爱好物联网开发者,有简单技术基础,想针对硬件功能构造简单的服务器❤️
- ❤️ 本篇创建记录 2023-03-12 ❤️
- ❤️ 本篇更新记录 2023-03-12 ❤️
技术要求
- 有HTML、CSS、JavaScript基础更好,当然也没事,就直接运行实例代码学习
专栏介绍
- 通过简短5天时间的渐进式学习NodeJs,可以了解到基本的服务开发概念,同时可以学习到npm、内置核心API(FS文件系统操作、HTTP服务器、Express框架等等),最终能够完成基本的物联网web开发,而且能够部署到公网访问。
🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝
1. 前言
假设你有个女朋友,整天拖延症熬夜刷抖音,那么可以给她造个熬夜提醒睡觉机器人 —— 每天晚上12点准时提醒睡觉。当然,前提你得有个女朋友或者假装以后会有一个来继续完成代码编写。
2. 实现思路
这里肯定要使用到国民第一大社交应用 —— 微信。
这就不得不说微信开放平台的一些能力 —— 微信消息推送(一般也叫作推送消息提醒)。
这里我们对接的是企业微信api
(后面有说明),然后再通过微信app关注企业微信
即可以在微信上同步收到企业微信的推送消息。
所以整个实现思路:
通过NodeJS对接微信推送平台,每天晚上12点的时候主动推送一条提醒消息。
接下来,请根据我的步骤来配置环境。
2.1 企业微信配置
2.1.1 第一步,用她的微信账号注册企业
用电脑打开企业微信官网 (https://work.weixin.qq.com/),注册一个企业,名称随意。
比如博主这里注册了一个叫做单片机菜鸟的企业
2.1.2 第二步,获取企业ID
进入「我的企业」页面,拉到最下边,可以看到企业ID
(后续会用到,这里了解即可)
2.1.3 第三步,创建应用
注册成功后登录,点「应用管理」进入应用管理界面,选择 → 「自建」 → 「创建应用
」
这里博主创建了一个叫做机器人推送提醒‘’。「应用logo」随意上传图片,「应用名称」随意填写
- 这里会得到应用ID( agentid ),应用密钥Secret( secret ),这两个参数在后期对接也是非常有用的。
2.1.4 第四步,微信接收企业微信通知
进入「我的企业」 → 「微信插件
」,扫描下方二维码,关注以后即可收到推送的消息。
比如博主关注了单片机菜鸟企业。
2.1.5 第五步,测试消息推送
这时候我们可以测试一下消息推送,也就是步骤三的创建应用里面的发送消息。
2.2 对接企业微信开放者平台
企业微信提供了通讯录管理、客户联系、身份验证、应用管理、消息推送
(这是我们重点关注的内容)、素材管理、OA、效率工具、企业支付、企业互联、会话内容存档、电子发票、家校沟通、家校应用、政民沟通等API,企业可以使用这些API,为企业接入更多个性化的办公应用。
- 第一步,获取access_token
- 第二步,构造消息体
- 第三步,发送消息
后面我们实现Arduino代码或者NodeJs代码也是依赖于这三个步骤来。
2.2.1 access_token 接口凭证
access_token是应用调用api的凭证(官方总不能让你无限制调用接口),由 corpid
(企业ID)和corpsecret
(应用密钥)换取。
请求方式:GET(HTTPS)
请求URL:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
通过这个请求我们即可得到 access_token 。
2.2.2 构造消息体
支持非常多的消息类型。
- 官方文档说明 https://developer.work.weixin.qq.com/document/path/90236#10167 强烈建议多看看官方文档说明
可以发送文本、图片、视频等多种类型的应用消息,这里以最简单的文本消息为例:(注意修改touser、agentid为自己想要的接收者userid列表、应用id)。
"touser" : "单片机菜鸟1|单片机菜鸟2",
"msgtype" : "text",
"agentid" : 1000002,
"text" :
"content" : "来自于单片机菜鸟的通知"
,
"safe":0
2.2.3 发送消息
以上面两步得到的access_token和消息体为参数。发起一个HTTP post请求
请求方式:POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
很多注意事项也要看看。
原理讲完,接下来我们看看NodeJs代码如何实现。
2.3 NodeJS代码实现
2.3.1 对接微信模块
// 1、导入所需插件模块
const request = require('request')
/******** 企业微信相关配置信息 填写自己的信息 ***********/
// 企业ID 替换成自己
const corpId = 'xxxxxxx'
// 应用密钥 替换成自己
const corpSecret = 'xxxxxxx'
// 应用ID 替换成自己
const agentId = 1000002
// 发送给所有人
const toUser = '@all'
const tokenUrl = `https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpId&corpsecret=$corpSecret`
const sendMsgUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=";
/******** 企业微信相关配置信息 填写自己的信息 ***********/
/**
* 获取令牌
*/
function getToken(success, error)
request(tokenUrl, function (error, response, body)
if (!error && response.statusCode == 200)
var json = JSON.parse(body);
console.log(json)
success(json.access_token)
else
error('获取token失败')
)
/**
* 真正发送消息
*/
function sendMessage(token, content)
const requestData =
touser: toUser,
msgtype: "text",
agentid: agentId,
safe: 0,
text:
content: content
request(
url: `$sendMsgUrl$token`,
method: "POST",
json: true,
headers:
"content-type": "application/json",
,
body: requestData
, function(error, response, body)
console.log(body)
if (!error && response.statusCode == 200)
);
/***
* 发送具体消息
*/
function sendText(content)
getToken((token)=>
sendMessage(token, content)
, (error) =>
console.log(error)
)
// 4、向外导出路由对象
module.exports =
sendText,
这里需要安装一个request库。
npm install request --save
2.3.2 定时任务模块
终端输入:
npm install node-schedule --save
安装定时任务模块。
范例:
const schedule = require('node-schedule');
const scheduleCronstyle = ()=>
//每分钟的第30秒定时执行一次:
schedule.scheduleJob('30 * * * * *',()=>
console.log('scheduleCronstyle:' + new Date());
);
scheduleCronstyle();
注意规则:
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
6个占位符从左到右分别代表:秒、分、时、日、月、周几。
每分钟的第30秒触发: '30 * * * * *'
每小时的1分30秒触发 :'30 1 * * * *'
每天的凌晨1点1分30秒触发 :'30 1 1 * * *'
每月的1日1点1分30秒触发 :'30 1 1 1 * *'
2022年的1月1日1点1分30秒触发 :'30 1 1 1 2022 *'
每周1的1点1分30秒触发 :'30 1 1 * * 1'
每个参数还可以传入数值范围。
const task1 = ()=>
//每分钟的1-10秒都会触发,其它通配符依次类推
schedule.scheduleJob('1-10 * * * * *', ()=>
console.log('scheduleCronstyle:'+ new Date());
)
task1()
2.3.3 编写10行代码
const alarmWechat = require('./alarm/alarm_wechat.js') // 微信告警模块
const schedule = require('node-schedule');
const scheduleCronstyle = ()=>
//每天0点0分30秒执行一次
schedule.scheduleJob('30 0 0 * * *',() =>
console.log('scheduleCronstyle:' + new Date());
alarmWechat.sendText('亲爱的 12点钟了 该睡觉了~')
);
scheduleCronstyle();
代码很简单,就做一个定时任务,每天0点0分30秒进行一次提醒。
3. 总结
篇①以10行代码做了一个简单熬夜提醒功能,接入微信推送功能,给心爱的她造一个微信机器人。
以上是关于物联网服务NodeJs-5天学习第三天实战篇① ——10行代码给她造个熬夜提醒睡觉机器人的主要内容,如果未能解决你的问题,请参考以下文章
物联网服务NodeJs-5天学习第三天实战篇③ ——基于MQTT的环境温度检测
物联网服务NodeJs-5天学习第三天实战篇④ ——QQ机器人,实现自动回复重要提醒
物联网服务NodeJs-5天学习第二天篇① ——fs文件系统
物联网服务NodeJs-5天学习第四天存储篇① ——安装使用mysql 8.0