又是很长一段时间没写博客了,最近工作繁忙,加班多,也是无奈啊~但是好习惯还是应该坚持下去的,平时工作钉钉作为主要的沟通工具,发现它除了是个聊天软件以外,还有一个好玩的东西-钉钉机器人,做些自动化推送提醒还是不错的,之前在telegram看到过类似的东西,它有一套专属api,可发送一些自定义的消息,实现一些自动化功能,目前推送提醒的解决方案一般是app推送,短信,企业微信,邮件,为了推送提醒单独开发一个app成本太高,短信现在几乎都是收费的,企业微信注册麻烦,而邮件一般都不会及时去看的。钉钉机器人创建成本低,又是主力聊天工具之一,对于个人或群组推送还是很实用的,随便拉两个人创建一个群就可以添加机器人了,如果只是做个人提醒的话,创建好后可以把这两个人T掉。唯一的限制是1秒最多发送20条~由于个人用iphone手机,本土化做得不好,节假日后补班那几天经常因为忘记定闹钟而睡过头,又不想下载第三方app,准备用家里有个树莓派做个人小型服务器,每天晚上定时跑一个python脚本,提醒我明天是否上班,如果上班提醒我设好闹钟,并请求天气预报,如果明天上班且下雨,提醒我闹钟提前半个小时,下雨早点出门不堵啊。
创建钉钉机器人
只要是个群组即可创建钉钉机器人,先拉两个人组成群组,在群组菜单中选择群组助手,添加机器人选择自定义机器人,创建的时候填写机器人名字,这里需要复制webhook的url链接,安全设置中可勾选自定义关键字,签名,ip地址,这里为了简单选择自定义关键字,设置为“提醒”,只要发送内容中带了关键字“提醒”即可。如果选择签名的话需要参考官方的签名算法,签名需添加到webhook的url上,如果选择ip地址的话,只有该ip地址的服务器才可以调用api发送消息。
钉钉机器人发送消息
发起post请求,参数为json格式,就是机器人发送的内容,请求的地址就是创建机器人的webhook,如果安全设置选择了签名的话要带上签名参数。
1 | import requests |
获取日期信息
找了一个免费api,http://timor.tech/api/holiday/info/{yyyy-MM-dd}
,{yyyy-MM-dd}为要查询的日期,请求结果如下:
如果该接口请求失败,code = 1,也需要给自己发送接口请求失败的消息,及时处理
type = 0, 明天是正常的工作日
request url:http://timor.tech/api/holiday/info/2019-10-11
1 | { |
type = 1, 明天是正常的双休日
request url: http://timor.tech/api/holiday/info/2019-10-13
1 | { |
type = 2, 明天是法定节假日
request url:http://timor.tech/api/holiday/info/2019-10-1
1 | { |
type = 3, 明天是补班的特殊日子
request url:http://timor.tech/api/holiday/info/2019-10-12
1 | { |
获取天气预报
也是找了一个免费Api,http://t.weather.sojson.com/api/weather/city/{citycode}
,参数是城市编码,以成都为例,请求结果如下:
1 | { |
如果请求成功status=200,data的forecast字段是包括今天以及未来14天的天气情况,所以这个字段下的第二个元素就是明天的天气预报,判断该元素下的type字段是否包含“雨”,并返回调用结果,如果接口请求失败也给自己发送一条消息,及时处理
python3实现
每天定时跑脚本,给自己发钉钉消息,并结合明天的天气预报,如果要下雨给自己发送要早起的提示
1 | import json |
每日晚上11点23在服务端运行这个脚本,请求钉钉机器人接口,给自己发送一个钉钉推送提醒,要定好闹钟
树莓派设置定时任务
将python脚本上传到树莓派,用ftp,ssh,samba都可以,这里就不详细说明了,设置定时任务前需要注意的是校准树莓派的时间,树莓派默认采用欧洲时区,如果树莓派的时间校准过,可略过此步骤。
校准树莓派时间
查看当前树莓派时间date
设置树莓派时区sudo dpkg-reconfigure tzdata
选择亚洲时区Asia,选择上海时间Shanghai
contab设置定时任务
linux定时任务可利用contab设置,crontab -e
,进入文件编辑,选择编辑工具,nano或vim
格式为:Minute Hour Day Month Dayofweek command
Minute 每个小时的第几分钟执行该任务
Hour 每天的第几个小时执行该任务
Day 每月的第几天执行该任务
Month 每年的第几个月执行该任务
DayOfWeek 每周的第几天执行该任务
Command 要执行的命令
设置23点22分执行python3的脚本,并输出日志,利于维护和问题排查22 23 * * * python3 /home/pi/upload/test123.py >>/home/pi/mylog.log
保存文件,并重启contab服务sudo service cron restart
ip变化提醒(2020/03/07更新)
家里申请了电信的公网ip,之前买了域名,一直在用端口转发+动态域名服务访问家里的树莓派,最近域名过期了,不打算续了,但希望仍然能在外网访问到家里的树莓派,电信的公网ip一直都是变动的,让电信固定ip需要繁杂的手续且需要企业申请,所以是不可能的了。最后想了一个可行的方法,如果能利用钉钉机器人在ip变化时给自己发送一条消息,告知最新的ip,那么仍然可以访问到家里的树莓派,这个问题就解决了。那如何知道ip变化了呢?还是利用linux的定时任务,每个小时跑一次python脚本,获取当前的外网ip,并将第一次的结果写入本地文件记录下来,每次运行脚本将当前外网ip与上一次记录的外网ip对比,如果不一致则ip变化,给自己发送钉钉消息告知最新的ip并再次写入文件刷新本地记录,如果ip一致则不用发送。
获取本机外网ip
找了一个免费的接口,http://members.3322.org/dyndns/getip
,直接返回本机外网ip,如果为空就请求失败了,也给自己发送钉钉消息,及时处理,python实现如下:
1 | import json |