美文网首页玩转树莓派
node 控制 树莓派做的天气闹钟

node 控制 树莓派做的天气闹钟

作者: setfocus | 来源:发表于2017-07-24 23:28 被阅读295次

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();
});


相关文章

  • node 控制 树莓派做的天气闹钟

    node 控制 树莓派做的天气闹钟 在成都上班,下雨天堵车,迟到的概率会很大。正好手上有一块树莓派 ,做了一个晴雨...

  • 1.项目结构

    Ras-Node(Aero-Node) 使用树莓派控制小车或者无人机,同时树莓派通过无线自组织网络的方式连接起来,...

  • 利用树莓派制作天气闹钟

    NOTE 由于讯飞API升级,旧的语音合成接口已不可用,新的实现方式直接扔github了。 前言 为了能让刚买的树...

  • 树莓派——opencv读取摄像头

    7寸触摸屏设置与串口 禁用串口的控制台功能:树莓派io口引出串口默认是用来做控制台使用的,即是为了用串口控制树莓派...

  • 基于Node-Red树莓派智能车实现

    基于Node-Red树莓派智能车实现 特性: Android手机通过WiFi网络控制进行图像传输,小车速度\转向\...

  • 让你的树莓派支持微信

    有人不解,树莓派支持微信有什么用。树莓派支持微信,就意味着通过微信可以控制树莓派了, 可以做任何你想做的事情。甚至...

  • 树莓派QT入门教程——使用Qt开发界面程序控制GPIO

    树莓派QT入门教程——使用Qt开发界面程序控制GPIO 玩转树莓派2017-07-12 12:36 树莓派入门教程...

  • 树莓派语音闹钟

    导语: 由于家里的树莓派是24小时开机的,也连着音箱,于是想弄个真人语音闹钟提醒。虽然手机上也有闹钟功能,而且很方...

  • 树莓派重启计划part1

    最近又想重新折腾下闲置依旧的树莓派。打算基于树莓派做一个远程控制设备。 控制端 控制端打算采用微信控制,配合itc...

  • 新手教程:如何 SSH 进入树莓派

    在这篇树莓派文章中,你将学到如何在树莓派中启用 SSH 以及之后如何通过 SSH 进入树莓派。 在你可以用树莓派做...

网友评论

    本文标题:node 控制 树莓派做的天气闹钟

    本文链接:https://www.haomeiwen.com/subject/pdmikxtx.html