物联网服务NodeJs-5天学习第三天实战篇① ——10行代码给她造个熬夜提醒睡觉机器人

Posted 单片机菜鸟哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物联网服务NodeJs-5天学习第三天实战篇① ——10行代码给她造个熬夜提醒睡觉机器人相关的知识,希望对你有一定的参考价值。

【NodeJs-5天学习】第三天实战篇① ——给女朋友造个熬夜提醒睡觉机器人

面向读者群体

  • ❤️ 电子物联网专业同学,想针对硬件功能构造简单的服务器,不需要学习专业的服务器开发知识 ❤️
  • ❤️ 业余爱好物联网开发者,有简单技术基础,想针对硬件功能构造简单的服务器❤️
  • ❤️ 本篇创建记录 2023-03-12 ❤️
  • ❤️ 本篇更新记录 2023-03-12 ❤️

技术要求

  • HTMLCSSJavaScript基础更好,当然也没事,就直接运行实例代码学习

专栏介绍

  • 通过简短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 构造消息体

支持非常多的消息类型。

可以发送文本、图片、视频等多种类型的应用消息,这里以最简单的文本消息为例:(注意修改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 * * * * *'

每小时的130秒触发 :'30 1 * * * *'

每天的凌晨1130秒触发 :'30 1 1 * * *'

每月的11130秒触发 :'30 1 1 1 * *'

2022年的111130秒触发 :'30 1 1 1 2022 *'

每周11130秒触发 :'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

物联网服务NodeJs-5天学习第二天篇③ ——Express Web框架 和 中间件

基于物联网的NodeJs-5天学习入门指引