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. git代码回滚

    有时候我们用git提交代码后发生了错误,代码冲突了啊等等,我们需要将代码回到以前的某个版本 git代码回退有两种办法 一.git reset(推荐): 它是将最新的commit删除,用以前的某个版本的 ...

  2. 模拟对象测试——EasyMock

    一.EasyMock 使用动态代理实现模拟对象创建,一般可以满足以下测试需求 1.要测试的模块依赖于其它自己控制不了的模块,如第三方服务,其它组员在开发的服务等,它们都没办法配合你来测试: 2.涉及到 ...

  3. FastReport.NET 中使用二维码

    FastReport.net 是一个比较好用的报表控件,在编辑器中编辑以后 可以直接在vs 中引用. 最近在研究fastreport 现在讲解一下 如何使用它的二维码. fastreport 没有单独 ...

  4. js继承的常用方法

    写在前面的话:这篇博客不适合对面向对象一无所知的人,如果你连_proto_.prototype...都不是很了解的话,建议还是先去了解一下JavaScript面向对象的基础知识,毕竟胖子不是一口吃成的 ...

  5. 我的第一个jQuery插件--表格隔行变色

    虽然网上有大量的插件供我们去使用,但不一定有一款适合你的,必要的时候还是要自己动手去敲的.下面,开始我的第一个插件... 参考<锋利的JQuery>,JQuery为开发插件增设了俩个方法: ...

  6. python网络爬虫之初始网络爬虫

    第一次接触到python是一个很偶然的因素,由于经常在网上看连载小说,很多小说都是上几百的连载.因此想到能不能自己做一个工具自动下载这些小说,然后copy到电脑或者手机上,这样在没有网络或者网络信号不 ...

  7. node项目的基本构建流程或者打开一个node项目的流程

    1.  确立项目所需要的所有依赖.框架(比如bootstrap,vue,angular等) 2. 在项目的根目录下创建一个package.json文件,package.json文件是项目的最重要文件之 ...

  8. python 标准库 -- re

    re 正则表达式 语法 import re m = re.search('[0-9]','abc4def67') # 匹配字符及匹配范围 print m.group(0) # 返回匹配结果 re.se ...

  9. w3c编程挑战-初级脚本算法

    之前偶然看到了w3c上的编程挑战题,就像拿来试试手,先做的是初级脚本算法,总体不难,如果有更好的方法,希望能一起交流! 1.翻转字符串 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序 ...

  10. .Net Mvc Automated Migration 数据迁移

    1.打开程序包管理器控制台 PM> enable-migrations –EnableAutomaticMigration:$true 2.项目工程文件中会生成Migrations文件夹 3.找 ...