Created
December 25, 2017 21:35
-
-
Save lakewik/16ade559d715551487e6952beda3b8ea to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function log(part, str) { | |
console.log("[" + (new Date().toLocaleString()) + " / " + part + "] " + str); | |
} | |
var rpio = require('rpio'), | |
WebSocketClient = require('websocket').client, | |
request = require('request'), | |
ds18b20 = require('ds18b20'); | |
var tempsensor = ""; | |
ds18b20.sensors(function(err, ids) { | |
console.log(ids); | |
if(ids.length !== 0){ | |
tempsensor = ids[0]; | |
} | |
}); | |
//var gpio_relays = [40, 38, 36, 32, 26, 24, 22, 18, 16, 12]; | |
var gpio_relays = [3, 5, 7, 35, 11, 13, 15, 19, 21, 23]; | |
var gpio_relays_len = gpio_relays.length; | |
var max_btn = 10; | |
var card_id = 20; | |
var card_token = "iGSjBcaO"; | |
gpio_relays.forEach(function(item, index){ | |
log("gpio", "init " + item + " set to OUTPUT LOW"); | |
rpio.open(item, rpio.OUTPUT, rpio.LOW); | |
}); | |
var client = new WebSocketClient(); | |
client.on('connectFailed', function(error) { | |
console.log('Connect Error: ' + error.toString()); | |
setTimeout(function(){ | |
client.connect('ws://vps.thekrzos.eu:8000/?c=' + card_id); | |
}, 2000); | |
}); | |
client.on('connect', function(connection) { | |
console.log('WebSocket Client Connected'); | |
connection.on('error', function(error) { | |
console.log("Connection Error: " + error.toString()); | |
}); | |
connection.on('close', function() { | |
console.log('Connection Closed'); | |
setTimeout(function(){ | |
client.connect('ws://vps.thekrzos.eu:8000/?c=' + card_id); | |
}, 2000); | |
}); | |
connection.on('message', function(data) { | |
if (data.type === 'utf8') { | |
try{ | |
data = JSON.parse(data.utf8Data); | |
console.log(data); | |
switch (data.event) { | |
case 'steruj': | |
if(data.card_id!=card_id) return; | |
if(data.button<max_btn){ | |
if(data.state==1){ | |
bin_on(data.button); | |
}else{ | |
bin_off(data.button); | |
} | |
} | |
break; | |
} | |
} catch(error){log('Problem z wiadomsocia (' + error.message + '): ' + data.utf8Data);} | |
} | |
}); | |
setInterval(function(){ | |
connection.send('{"event":"ping", "data":"' + Date.now() + '"}'); | |
}, 5000); | |
}); | |
client.connect('ws://vps.thekrzos.eu:8000/?c=' + card_id); | |
setInterval(function(){ | |
if(tempsensor!==""){ | |
ds18b20.temperature(tempsensor, function(err, value) { | |
console.log('Current temperature is', value); | |
updateCard(value); | |
}); | |
}else{ | |
updateCard(-666); | |
} | |
}, 5000); | |
function getAPI(url, body, callback){ | |
request.post({ | |
url: "http://sterowanie24.pl/api/" + url + ".php", | |
json: true, | |
headers: {'content-type' : 'application/x-www-form-urlencoded'}, | |
form: body | |
}, (err, res, data) => { | |
if(typeof callback == "function"){ | |
if (err || res.statusCode !== 200) { | |
return callback(err || {statusCode: res.statusCode}); | |
} | |
callback(data); | |
} | |
}); | |
} | |
function updateCard(temperature){ | |
getAPI("update_socket_client_card", { | |
card_id: card_id, | |
card_token: card_token, | |
card_online: 1, | |
card_temperature: parseFloat(temperature), | |
}); | |
} | |
function bin_on(btn){ | |
var gpio_num = gpio_relays[btn]; | |
log("gpio", gpio_num + " set to OUTPUT HIGH"); | |
rpio.write(gpio_num, rpio.HIGH); | |
} | |
function bin_off(btn){ | |
var gpio_num = gpio_relays[btn]; | |
log("gpio", gpio_num + " set to OUTPUT LOW"); | |
rpio.write(gpio_num, rpio.LOW); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment