-
Notifications
You must be signed in to change notification settings - Fork 0
/
weather-display.js
95 lines (75 loc) · 2.35 KB
/
weather-display.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
const readline = require('readline');
const rpio = require('rpio');
const hd44780 = require('gpio-hd44780-driver');
const displayTypes = {
date: 1,
temp: 2,
};
const weatherDisplay = () => {
var tempData = 'Temp: not updated\nHumidity: not updated';
var display = displayTypes.temp;
var timeUpdate = false;
// this is the physical pin where your LED is connected
rpio.open(26, rpio.OUTPUT, rpio.LOW);
// physical pins for HD77480 connection, change as appropriate
const lcd = new hd44780({
pinRs: 18,
pinEnable: 22,
pinsData: [11, 12, 15, 16],
lcdColumns: 16,
lcdRows: 2
});
// open stdin to receive data from rtl_433
const rl = readline.createInterface({
input: process.stdin
});
// update temperature data when a new line is read
rl.on('line', (input) => {
// update data
const data = JSON.parse(input);
tempData = `Temp: ${data.temperature_F}F\nHumidity: ${data.humidity}%`;
// pulse LED
rpio.write(26, rpio.HIGH);
setTimeout(() => {
rpio.write(26, rpio.LOW);
}, 1500);
});
// initial display
dateTimeDisplay();
timeUpdate = setInterval(dateTimeDisplay, 1000);
// update display every 5 seconds
const displayInterval = setInterval(() => {
if (timeUpdate) {
clearInterval(timeUpdate);
timeUpdate = false;
}
lcd.clear();
if (display === displayTypes.temp) {
lcd.print(tempData);
display = displayTypes.date;
return;
}
if (display === displayTypes.date) {
// do initial display update
dateTimeDisplay();
// update the date/time every second
timeUpdate = setInterval(dateTimeDisplay, 1000);
display = displayTypes.temp;
return;
}
}, 5000);
// cleanup and close the program on SIGINT
process.on('SIGINT', () => {
rl.close();
clearInterval(displayInterval);
console.log('Done!');
process.exit();
});
function dateTimeDisplay() {
lcd.setCursor(0, 0);
// print the date and time on the display
const now = new Date();
lcd.print(`${now.toDateString()}\n${now.toTimeString().slice(0, 8)}`);
}
};
weatherDisplay();