Skip to content

Commit 08f0af7

Browse files
committed
hue.js
1 parent 0300cff commit 08f0af7

File tree

2 files changed

+225
-0
lines changed

2 files changed

+225
-0
lines changed

hue.js

+225
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
const request = require('request');
2+
const hueAPI = require('node-hue-api');
3+
const hue = require("node-hue-api");
4+
var sleep = require('sleep');
5+
6+
var spawn = require('child_process').spawn;
7+
8+
if ( ! process.argv[2] ){
9+
console.log("City not defined, please run node hue.js <city>")
10+
process.exit(1)
11+
}
12+
13+
function weatherNow(wc){
14+
if (wc >=31 && wc <=36 && wc != 33) {
15+
16+
return ("Sunny");
17+
}
18+
else
19+
if (wc <=4 || wc >=37) {
20+
return ("Thunder");
21+
}
22+
else
23+
{
24+
return ("Cloudy");
25+
}
26+
27+
}
28+
29+
var displayResult = function(result) {
30+
console.log(result);
31+
};
32+
33+
var displayError = function(err) {
34+
console.error(err);
35+
};
36+
37+
38+
39+
function setHue(weather)
40+
{
41+
42+
var r,g,b;
43+
44+
switch (weather){
45+
case "Thunder":
46+
break;
47+
case "Sunny":
48+
r=255,g=255,b=51;
49+
break;
50+
case "Cloudy":
51+
r=100,g=100,b=100;
52+
break;
53+
case "Sunset":
54+
r=230,g=139,b=0;
55+
break;
56+
case "Moonlight":
57+
r=102,g=0,b=102;
58+
break;
59+
case "White":
60+
r=0, g=0, b=0
61+
break;
62+
case "Red":
63+
r=255,g=0,b=0;
64+
break;
65+
case "Green":
66+
r=0,g=255,b=0;
67+
break;
68+
case "Blue":
69+
r=0,g=0,b=255;
70+
break;
71+
case "Yellow":
72+
r=255,g=255,b=0;
73+
break;
74+
case "Orange":
75+
r=230,g=139,b=0;
76+
break;
77+
case "Purple":
78+
r=102,g=0,b=102;
79+
break;
80+
default:
81+
r=0,g=70,b=100;
82+
}
83+
84+
var state=lightState.create().on().rgb(r,g,b);
85+
api.setLightState(bulbNumber, state)
86+
.then(displayResult)
87+
.fail(displayError)
88+
.done();
89+
90+
}
91+
92+
93+
94+
function lightning()
95+
{
96+
97+
function shspawn(command) {
98+
spawn('sh', ['-c', command], { stdio: 'inherit' });
99+
}
100+
101+
shspawn('afplay thunder_strike_2-Mike_Koenig-2099467696.wav');
102+
103+
var state=lightState.create().on().white(250,100);
104+
105+
api.setLightState(bulbNumber, state)
106+
.then(displayResult)
107+
.fail(displayError)
108+
.done();
109+
sleep.sleep(1);
110+
state=lightState.create().on().white(250,50);
111+
api.setLightState(bulbNumber, state)
112+
.then(displayResult)
113+
.fail(displayError)
114+
.done();
115+
sleep.sleep(1);
116+
state=lightState.create().on().white(250,200);
117+
api.setLightState(bulbNumber, state)
118+
.then(displayResult)
119+
.fail(displayError)
120+
.done();
121+
sleep.sleep(1);
122+
state=lightState.create().off().white(250,200);
123+
api.setLightState(bulbNumber, state)
124+
.then(displayResult)
125+
.fail(displayError)
126+
.done();
127+
sleep.sleep(1);
128+
state=lightState.create().on().white(250,200);
129+
api.setLightState(bulbNumber, state)
130+
.then(displayResult)
131+
.fail(displayError)
132+
.done();
133+
134+
135+
136+
}
137+
138+
var bulbNumber=23; // was 2 for oldHue
139+
140+
var hueOldusername="aDRZYBIO3EJ-JeFSxPQHXZhi2OvclOF7s5ga6jRT";
141+
// var hueNewusername="FWuScIwopktU8j8JvrwfvnB5SRopJQOM46hLmS9J";
142+
var hueNewusername="omEnscXeuN2t-vblvt4CC8QgywiM4sTCRmqf3GqY"; // {"devicetype":"terrarium#arw Andy"}
143+
var hueusername=hueNewusername;;
144+
145+
var HueApi = hue.HueApi;
146+
var lightState = hue.lightState;
147+
var huehost = "192.168.2.46"; // Hue v2
148+
// var huehost = "9.173.152.69";
149+
// var huehost = "192.168.2.2"; // Ethernet Adapter
150+
hueusername = hueNewusername;
151+
api = new HueApi(huehost, hueusername);
152+
153+
154+
const city = process.argv[2]
155+
var isColor = false;
156+
switch (city){
157+
case "Sunset":
158+
isColor=true;
159+
break;
160+
case "Moonlight":
161+
isColor=true;
162+
break;
163+
case "Red":
164+
isColor=true;
165+
break;
166+
case "White":
167+
isColor=true;
168+
break;
169+
case "Green":
170+
isColor=true;
171+
break;
172+
case "Blue":
173+
isColor=true;
174+
break;
175+
case "Yellow":
176+
isColor=true;
177+
break;
178+
case "Orange":
179+
isColor=true;
180+
break;
181+
case "Purple":
182+
isColor=true;
183+
break;
184+
default:
185+
isColor=false;
186+
187+
}
188+
if (isColor == true)
189+
{
190+
console.log("Just set the color");
191+
setHue(city);
192+
} else
193+
{
194+
let geolocation = "http://open.mapquestapi.com/geocoding/v1/address?key=BrlRnuf0IpXHl1ubie8ZeBY7BLhlu86W&location=" + city;
195+
196+
request(geolocation, { json: true }, (err, res, body) => {
197+
if (err) { return console.log(err); }
198+
let lat = JSON.stringify(body.results[0].locations[0].latLng.lat)
199+
let long = JSON.stringify(body.results[0].locations[0].latLng.lng)
200+
201+
console.log(lat, long)
202+
203+
let url="https://40e8a128-041e-43ef-8940-dc633dad734f:[email protected]/api/weather/v1/geocode/" + lat + "/" + long + "/observations.json?language=en-US";
204+
205+
request(url, { json: true }, (err, res, body) => {
206+
if (err) { return console.log(err); }
207+
208+
var observation=body.observation;
209+
var city=observation.obs_name;
210+
var forecast=observation.wx_phrase;
211+
var weather_code=observation.wx_icon;
212+
213+
console.log("The Weather in ",process.argv[2]," is ",forecast,"[",weather_code,"]");
214+
console.log("Set Hue Bulb to ",weatherNow(weather_code) );
215+
216+
function shspawn(command) {
217+
spawn('sh', ['-c', command], { stdio: 'inherit' });
218+
}
219+
//shspawn(`say The Weather in ${process.argv[2]} is ${forecast}`);
220+
// var rc=setHue(weatherNow(weather_code));
221+
var rc=lightning();
222+
});
223+
}
224+
);
225+
}

thunder.wav

6.35 MB
Binary file not shown.

0 commit comments

Comments
 (0)