node 控制 树莓派做的天气闹钟
node 控制 树莓派做的天气闹钟
在成都上班,下雨天堵车,迟到的概率会很大。
正好手上有一块树莓派 ,做了一个晴雨闹钟。
下雨天 早上 7:00叫我起床
晴天 早上 7:30叫我起床
将自己喜欢的歌曲放在一个文件夹中,随机播放,防止听腻
以下是代码
const UID = "U785B76FC9"; // 测试用 用户ID,请更换成您自己的用户ID
const KEY = "4r9bergjetiv1tsd"; // 测试用 key,请更换成您自己的 Key
let LOCATION = "双流"; // 除拼音外,还可以使用 v3 id、汉语等形式
let Api = require('./lib/api.js');
let api = new Api(UID, KEY);
let rainRegexp = /雨/;
let exec = require('child_process').exec;
let fs = require("fs");
let schedule = require("node-schedule");
function alarmClockTime(isRain) {
let today = new Date();
let Y = today.getFullYear();
let M = today.getMonth();
let D = today.getDate();
let week = today.getDay();
if (week === 0 || week === 6) {
return new Date(Y, M, D, 9, 30, 0);
}
if (isRain) {
return new Date(Y, M, D, 7, 0, 0);
}
return new Date(Y, M, D, 7, 30, 0);
}
//调用音乐
function playMusic() {
let shellStr;
let musicArray;
try {
musicArray = fs.readdirSync("/media/hd/music/alarm/");
let fileNmae=musicArray[Math.floor(musicArray.length * Math.random())].replace(/ /g,"\\ ");
shellStr = "mplayer /media/hd/music/alarm/" +fileNmae;
} catch (err) {
shellStr = "mplayer /media/hd/music/qiyue.mp3";
}
console.log(shellStr);
exec(shellStr, function (err, data) {
if (err) {
console.log(err);
return;
}
console.log("播放完成");
})
}
function setAlarmClock(time) {
schedule.scheduleJob(time, function () {
playMusic();
});
}
/**
* 获取天气信息
*/
function getWetherInfo() {
let getNowWeather = api.getWeather("/weather/now.json", {
location: LOCATION
});
let getNextWeather = api.getWeather("/weather/daily.json", {
location: LOCATION
});
Promise.all([getNowWeather, getNextWeather]).then(function (data) {
let nowWeatherText = data[0].results[0].now.text;
let dayWeatherText = data[1].results[0].daily[0].text_day;
console.log(new Date() + " :" + dayWeatherText);
if (rainRegexp.test(nowWeatherText) || rainRegexp.test(dayWeatherText)) {
//当天有雨 提前设置闹钟
setAlarmClock(alarmClockTime(true));
} else {
//没有雨 延后设置闹钟
setAlarmClock(alarmClockTime());
}
}).catch(function (err) {
console.log(err);
//如果保存
setAlarmClock(alarmClockTime(true));
});
}
schedule.scheduleJob("0 50 6 * * *", function () {
getWetherInfo();
});
在成都上班,下雨天堵车,迟到的概率会很大。
正好手上有一块树莓派 ,做了一个晴雨闹钟。
下雨天 早上 7:00叫我起床
晴天 早上 7:30叫我起床
将自己喜欢的歌曲放在一个文件夹中,随机播放,防止听腻
在成都上班,下雨天堵车,迟到的概率会很大。
正好手上有一块树莓派 ,做了一个晴雨闹钟。
下雨天 早上 7:00叫我起床
晴天 早上 7:30叫我起床
将自己喜欢的歌曲放在一个文件夹中,随机播放,防止听腻
node 控制 树莓派做的天气闹钟的更多相关文章
- android智能天气闹钟应用开发经过
开发这个应用的初衷是这样产生滴,和我一块租房的同学每天早上都是骑单车上班,所以手机闹钟就会定一个刚好适合骑车的起床时间点.但是呢,有一天早上起床以后发现外面下挺大雨,肯定是不能骑车去上班了,于是就只好 ...
- 云中树莓派(3):通过 AWS IoT 控制树莓派上的 Led
云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...
- 我为什么选择采用node.js来做新一代的EasyDarwin RTSP开源流媒体服务器
在去年我们还未开始开发基于node.js的新版本EasyDarwin RTSP开源流媒体服务器的时候,我写了一篇博客<对EasyDarwin开源项目后续发展的思考:站在巨人的肩膀上再跳上另一个更 ...
- C#控制树莓派入门
何为树莓派 许久没有写博客了,十二月份西安疫情的影响,居家隔离了一个多月,在其期间,学习了一下树莓派,觉得硬件还是挺有意思的,刚好也看到了巨硬有提供使用c#用来开发树莓派应用的解决方案叫Net Iot ...
- 用备份控制文件做不完全恢复下的完全恢复(全备<老>--备份控制文件<次新>--删除表空间andy--日志文件<新>)
为什么会使用备份的控制文件? 实际工作中主要有两种情况:第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同SCN版本,它们之间又增加过表空间(数据文件).第二种:当前控制文件 ...
- 树莓派进阶之路 (023) - Windows下用串行连接控制树莓派(转)
转载:http://shumeipai.nxez.com/2014/05/04/under-windows-serial-connection-control-raspberry-pi.html 在没 ...
- python idea 利用树莓派做家庭报警系统
1 利用树莓派做家庭报警系统idea 功能如下: 1.程序家侧人不在家(7:00-6:00) 2.树莓派搭配摄像头,对这门进行图像识别,如果变化,门开了,就报警: 3.报警的方式是给我发短信,采信,或 ...
- Node.js能够做什么?
正如 JavaScript 为client而生.Node.js 为网络而生.Node.js 能做的远不止开发一个网 站那么简单,使用 Node.js,你能够轻松地开发: 具有复杂逻辑的站点: ...
- 极客圈(一)树莓派3B协同Python打造个性化天气闹钟
人生苦短,我用Python~ 一直想自己折腾些极客的东西出来,供自己使用或者是供他人使用.一则可能对自己的生活是一种帮助,二则是对自己技能的提高,三则显得高大上,一直努力,一直提高,一直Happy!~ ...
随机推荐
- js编写简单的贪吃蛇游戏
css代码 *{ margin:; padding:; } td{ width: 4px; height: 4px; background: #ccc; border: 2px solid #ccc; ...
- Day1 - Python基础1 Python介绍、基本语法、流程控制习题集
1.打印Hello World! print("Hello World!") 或 name="你好,世界!" print(name) 2.声明变量:打印name ...
- Docker 网络命令
docker network create docker network connect docker network ls docker network rm docker network disc ...
- SQL SERVER 自动生成 MySQL 表结构及索引 的建表SQL
SQL SERVER的表结构及索引转换为MySQL的表结构及索引,其实在很多第三方工具中有提供,比如navicat.sqlyog等,但是,在处理某些数据类型.默认值及索引转换的时候,总有些 ...
- python装饰器大详解
1.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我要理解两点:a.在全局不能访问到局部定 ...
- # ? & 号在url中的的作用
1. # 10年9月,twitter改版.一个显著变化,就是URL加入了"#!"符号.比如,改版前的用户主页网址为http://twitter.com/username改版后,就变 ...
- Log4PHP 配置和使用
Log4PHP2.3.0使用解释 1. 什么是Log4PHP Log4php它为apche组织维护项目,是Log4xx系列日志组件之一,log4j在JAVA中可算是大名鼎鼎的日志开发包.Log4PHP ...
- 基于Java SE的模拟双色球彩票系统
1.双色球规则: ①双色球分为红球和蓝球,红球选择的范围为1-33,而且红球选择6个数字:蓝球选择的范围为1-16,而且只能选择1个数字. ②选择方式为随机选择号码和手动输入选择号码. ③生成号码的顺 ...
- php取出数组中的最大值
<?php /** * @param $arr * @return mixed * php取出数组中的最大值(方法一) */ function getMax($arr){ $max=$arr[0 ...
- Spring配置注解详解