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 控制 树莓派做的天气闹钟的更多相关文章

  1. android智能天气闹钟应用开发经过

    开发这个应用的初衷是这样产生滴,和我一块租房的同学每天早上都是骑单车上班,所以手机闹钟就会定一个刚好适合骑车的起床时间点.但是呢,有一天早上起床以后发现外面下挺大雨,肯定是不能骑车去上班了,于是就只好 ...

  2. 云中树莓派(3):通过 AWS IoT 控制树莓派上的 Led

    云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...

  3. 我为什么选择采用node.js来做新一代的EasyDarwin RTSP开源流媒体服务器

    在去年我们还未开始开发基于node.js的新版本EasyDarwin RTSP开源流媒体服务器的时候,我写了一篇博客<对EasyDarwin开源项目后续发展的思考:站在巨人的肩膀上再跳上另一个更 ...

  4. C#控制树莓派入门

    何为树莓派 许久没有写博客了,十二月份西安疫情的影响,居家隔离了一个多月,在其期间,学习了一下树莓派,觉得硬件还是挺有意思的,刚好也看到了巨硬有提供使用c#用来开发树莓派应用的解决方案叫Net Iot ...

  5. 用备份控制文件做不完全恢复下的完全恢复(全备<老>--备份控制文件<次新>--删除表空间andy--日志文件<新>)

    为什么会使用备份的控制文件? 实际工作中主要有两种情况:第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同SCN版本,它们之间又增加过表空间(数据文件).第二种:当前控制文件 ...

  6. 树莓派进阶之路 (023) - Windows下用串行连接控制树莓派(转)

    转载:http://shumeipai.nxez.com/2014/05/04/under-windows-serial-connection-control-raspberry-pi.html 在没 ...

  7. python idea 利用树莓派做家庭报警系统

    1 利用树莓派做家庭报警系统idea 功能如下: 1.程序家侧人不在家(7:00-6:00) 2.树莓派搭配摄像头,对这门进行图像识别,如果变化,门开了,就报警: 3.报警的方式是给我发短信,采信,或 ...

  8. Node.js能够做什么?

    正如 JavaScript 为client而生.Node.js 为网络而生.Node.js 能做的远不止开发一个网 站那么简单,使用 Node.js,你能够轻松地开发:  具有复杂逻辑的站点:  ...

  9. 极客圈(一)树莓派3B协同Python打造个性化天气闹钟

    人生苦短,我用Python~ 一直想自己折腾些极客的东西出来,供自己使用或者是供他人使用.一则可能对自己的生活是一种帮助,二则是对自己技能的提高,三则显得高大上,一直努力,一直提高,一直Happy!~ ...

随机推荐

  1. VMware 创建多台Linux机器并配置IP

    1.查看并分配虚拟网络 我们首先要知道 VMware 三种网络模式的区别. ①.Bridged(桥接模式):就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信.在桥接的作用下,类似于把物理主机虚拟为 ...

  2. (整理)使用tomcat搭建HTTP文件下载服务器

    本文是整理,非原创,由网络资料组成上自己踩的坑整理而成. 1. 假设需要下载的文件目录是D:\download1(注意这里写了个1,跟后面的名称区分) 2. 设置 tomcat 的虚拟目录.在 {to ...

  3. 深度解析 H.265 视频解决方案

    又拍云上线了 H.265 从编码解码到 CDN 分发,完整的端到端的自适应解决方案:提供视频上传.视频存储.视频编码.视频分发适配.视频解码等功能.又拍云希望能以云服务的方式将大公司才能长期支付使用的 ...

  4. oracle查询第一篇

    第一个小知识点: clear 在oracle中也可以用以清除屏幕上的内容 第二个小知识点: 在一个表中插入自身的查询结果 insert into my_table (id,name,age) sele ...

  5. idea无法正常使用SVN的解决方法

    问题描述: IntelliJ IDEA安装之后,使用SVN进行提交或更新以及检出代码的时候会出现如下错误: Cannot load supported formats: Cannot run prog ...

  6. window.close()方法对谷歌和火狐浏览器无效

    在近期的项目中,遇到了一个问题,就是用户到新浪支付进行操作,操作成功后,指定到一个网页,需求是点击确定,关闭该网页.需求出来以后认为这种就是小菜一碟,直接用 window.close()方法就可以实现 ...

  7. Here文档

    Here文档为需要输入的程序,例如,mail.sort和cat等接收在线文本,直到遇到用户定义的结束符号为止.最常用的用户是在Shell脚本中和case命令一起创建菜单.自动登录等等. 1.建立菜单 ...

  8. 流畅的python学习笔记:第三章

    字典的变种: OrderedDict 首先来看下面的代码,在一个字典中,有name,age,city,在遍历这个字典的时候.顺序却是随机的,不是按照我们添加的顺序也就是name->age-> ...

  9. python制作pdf电子书

    python制作pdf电子书 准备 制作电子书使用的是python的pdfkit这个库,pdfkit是 wkhtmltopdf 的Python封装包,因此在安装这个之前要安装wkhtmltopdf 安 ...

  10. 用JS来实现于截取中英文混合字符串方法(转载)

    网站制作过程中,提示层文字超出,需要JS做字符串截取,但是呢,我们常常会烦恼文字中英文混合如何判断,因为我们知道在JS中 string.length这个值是不考虑中英文的,但是计算机对中英文的识别是  ...