面向读者群体
- ❤️ 电子物联网专业同学,想针对硬件功能构造简单的服务器,不需要学习专业的服务器开发知识 ❤️
- ❤️ 业余爱好物联网开发者,有简单技术基础,想针对硬件功能构造简单的服务器❤️
技术要求
- 有HTML、CSS、JavaScript基础更好,当然也没事,就直接运行实例代码学习
专栏介绍
- 通过简短5天时间的渐进式学习NodeJs,可以了解到基本的服务开发概念,同时可以学习到npm、内置核心API(FS文件系统操作、HTTP服务器、Express框架等等),最终能够完成基本的web开发,而且能够部署到公网访问。
学习交流群
- NodeJs物联网五天入门学习之旅(搜索:
729040020
)🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝
假设你有个女朋友,整天拖延症熬夜刷抖音,那么可以给她造个熬夜提醒睡觉机器人 —— 每天晚上12点准时提醒睡觉。当然,前提你得有个女朋友或者假装以后会有一个来继续完成代码编写。
这里肯定要使用到国民第一大社交应用 —— 微信。
这就不得不说微信开放平台的一些能力 —— 微信消息推送(一般也叫作推送消息提醒)。
这里我们对接的是企业微信api
(后面有说明),然后再通过微信app关注企业微信
即可以在微信上同步收到企业微信的推送消息。
所以整个实现思路:
通过NodeJS对接微信推送平台,每天晚上12点的时候主动推送一条提醒消息。
接下来,请根据我的步骤来配置环境。
用电脑打开企业微信官网 (https://work.weixin.qq.com/),注册一个企业,名称随意。
比如博主这里注册了一个叫做单片机菜鸟的企业
进入「我的企业」页面,拉到最下边,可以看到企业ID
(后续会用到,这里了解即可)
注册成功后登录,点「应用管理」进入应用管理界面,选择 → 「自建」 → 「创建应用
」
这里博主创建了一个叫做机器人推送提醒‘’。「应用logo」随意上传图片,「应用名称」随意填写
进入「我的企业」 → 「微信插件
」,扫描下方二维码,关注以后即可收到推送的消息。
比如博主关注了单片机菜鸟企业。
这时候我们可以测试一下消息推送,也就是步骤三的创建应用里面的发送消息。
企业微信提供了通讯录管理、客户联系、身份验证、应用管理、消息推送
(这是我们重点关注的内容)、素材管理、OA、效率工具、企业支付、企业互联、会话内容存档、电子发票、家校沟通、家校应用、政民沟通等API,企业可以使用这些API,为企业接入更多个性化的办公应用。
后面我们实现Arduino代码或者NodeJs代码也是依赖于这三个步骤来。
access_token是应用调用api的凭证(官方总不能让你无限制调用接口),由 corpid
(企业ID)和corpsecret
(应用密钥)换取。
请求方式:GET(HTTPS)
请求URL:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
通过这个请求我们即可得到 access_token 。
支持非常多的消息类型。
可以发送文本、图片、视频等多种类型的应用消息,这里以最简单的文本消息为例:(注意修改touser、agentid为自己想要的接收者userid列表、应用id)。
{
"touser" : "单片机菜鸟1|单片机菜鸟2",
"msgtype" : "text",
"agentid" : 1000002,
"text" : {
"content" : "来自于单片机菜鸟的通知"
},
"safe":0
}
以上面两步得到的access_token和消息体为参数。发起一个HTTP post请求
请求方式:POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
很多注意事项也要看看。
原理讲完,接下来我们看看NodeJs代码如何实现。
// 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
终端输入:
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()
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秒进行一次提醒。
篇①以10行代码做了一个简单熬夜提醒功能,接入微信推送功能,给心爱的她造一个微信机器人。