Skip to content

Instantly share code, notes, and snippets.

@lakewik
Created December 25, 2017 21:35
Show Gist options
  • Save lakewik/16ade559d715551487e6952beda3b8ea to your computer and use it in GitHub Desktop.
Save lakewik/16ade559d715551487e6952beda3b8ea to your computer and use it in GitHub Desktop.
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