mirror of
https://github.com/karl0ss/orvibo-b25-server-kex.git
synced 2025-04-29 12:53:40 +01:00
latest
This commit is contained in:
parent
87bf26a731
commit
088c4dac3d
@ -1,12 +1,5 @@
|
|||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
## 1.1.0
|
|
||||||
|
|
||||||
* Add try-catch around packet decryption to guard against a service crash resulting from an occasional packet decryption error.
|
|
||||||
* Pluralize getConnectedSocket + alias previous name
|
|
||||||
* Enhance settings handling
|
|
||||||
* Enhance Orvibo logging
|
|
||||||
|
|
||||||
## 1.0.0
|
## 1.0.0
|
||||||
|
|
||||||
Initial release
|
Initial release
|
||||||
|
@ -10,4 +10,4 @@ COPY . .
|
|||||||
|
|
||||||
EXPOSE 3000 10001
|
EXPOSE 3000 10001
|
||||||
|
|
||||||
CMD [ "node", "Docker.js" ]
|
CMD [ "node", "server.js" ]
|
||||||
|
77
Example.js
77
Example.js
@ -1,77 +0,0 @@
|
|||||||
const Orvibo = require('./Orvibo');
|
|
||||||
const http = require('http');
|
|
||||||
const url = require('url');
|
|
||||||
|
|
||||||
const httpPort = 3000;
|
|
||||||
|
|
||||||
// Create a settings object to pass PK key and map sockets to names
|
|
||||||
const settings = {
|
|
||||||
LOG_PACKET: false, //Show incoming packet data from the socket
|
|
||||||
ORVIBO_KEY: '', // put your PK key here as plain text (See Readme)
|
|
||||||
plugInfo : [
|
|
||||||
// Add uid and a name so you can easily identify the connected sockets
|
|
||||||
{
|
|
||||||
uid :'53dd7fe74de7',
|
|
||||||
name: "Lamp in Kitchen"
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
let orvibo = new Orvibo(settings);
|
|
||||||
|
|
||||||
// When a socket first connects and initiates the handshake it will emit the connected event with the uid of the socket;
|
|
||||||
orvibo.on('plugConnected', ({uid, name}) => {
|
|
||||||
console.log(`Connected ${uid} name = ${name}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// If the socket state is updated this event will fire
|
|
||||||
orvibo.on('plugStateUpdated', ({uid, state , name}) => {
|
|
||||||
console.log(`Plug ${name} ${uid} updated state ${state}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// The plug sends a hearbeat to let the server know it's still alive
|
|
||||||
orvibo.on('gotHeartbeat', ({uid, name}) => {
|
|
||||||
console.log(`Plug ${name} ${uid} sent heartbeat`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Called when the plug disconnects
|
|
||||||
orvibo.on('plugDisconnected', ({uid, name }) => {
|
|
||||||
console.log(`Plug ${uid} - ${name} disconnected`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Called when the plug disconnects with an error ie it's been unplugged
|
|
||||||
orvibo.on('plugDisconnectedWithError', ({uid, name }) => {
|
|
||||||
console.log(`Plug ${uid} - ${name} disconnected with error`);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Start the Orvibo socket server
|
|
||||||
orvibo.startServer();
|
|
||||||
|
|
||||||
// Create a basic example HTTP server
|
|
||||||
// If there are no parameters it will return the uid, state, modelId and name of the socket
|
|
||||||
// You can then use the uid to toggle the state of the switch like
|
|
||||||
// http://localhost:3000?uid=5dcf7ff76e7a
|
|
||||||
|
|
||||||
const requestHandler = (request, response) => {
|
|
||||||
response.writeHead(200, {'Content-Type': 'application/json'});
|
|
||||||
let q = url.parse(request.url, true).query;
|
|
||||||
if (q.uid != null) {
|
|
||||||
orvibo.toggleSocket(q.uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get all currently connected sockets, their names and states
|
|
||||||
let sockets = orvibo.getConnectedSocket();
|
|
||||||
|
|
||||||
response.end(JSON.stringify(sockets));
|
|
||||||
};
|
|
||||||
|
|
||||||
const httpServer = http.createServer(requestHandler);
|
|
||||||
|
|
||||||
httpServer.listen(httpPort, (err) => {
|
|
||||||
if (err) {
|
|
||||||
return console.log('something bad happened', err)
|
|
||||||
}
|
|
||||||
console.log(`http server is listening on ${httpPort}`)
|
|
||||||
});
|
|
84
dock.js
84
dock.js
@ -1,84 +0,0 @@
|
|||||||
const Orvibo = require('./utils/Orvibo');
|
|
||||||
const http = require('http');
|
|
||||||
const url = require('url');
|
|
||||||
|
|
||||||
const httpPort = 3000;
|
|
||||||
|
|
||||||
const createArray = str => {
|
|
||||||
// split on each comma
|
|
||||||
const arr = str.split(',');
|
|
||||||
// put back elements by pairs
|
|
||||||
const pairs = [];
|
|
||||||
for (let i=0; i<arr.length; i+=2) {
|
|
||||||
let o = {};
|
|
||||||
o.uid = arr[i].split(':')[1];
|
|
||||||
o.name = arr[i+1].split(':')[1];
|
|
||||||
pairs.push(o);
|
|
||||||
}
|
|
||||||
return pairs;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a settings object to pass PK key and map sockets to names
|
|
||||||
const settings = {
|
|
||||||
LOG_PACKET: true, //Show incoming packet data from the socket
|
|
||||||
ORVIBO_KEY: process.env.orviboPK,
|
|
||||||
plugInfo :
|
|
||||||
createArray(process.env.plugArray)
|
|
||||||
,
|
|
||||||
};
|
|
||||||
let orvibo = new Orvibo(settings);
|
|
||||||
// When a socket first connects and initiates the handshake it will emit the connected event with the uid of the socket;
|
|
||||||
orvibo.on('plugConnected', ({uid, name}) => {
|
|
||||||
console.log(`Connected ${uid} name = ${name}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// If the socket state is updated this event will fire
|
|
||||||
orvibo.on('plugStateUpdated', ({uid, state , name}) => {
|
|
||||||
console.log(`Plug ${name} ${uid} updated state ${state}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// The plug sends a hearbeat to let the server know it's still alive
|
|
||||||
orvibo.on('gotHeartbeat', ({uid, name}) => {
|
|
||||||
console.log(`Plug ${name} ${uid} sent heartbeat`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Called when the plug disconnects
|
|
||||||
orvibo.on('plugDisconnected', ({uid, name }) => {
|
|
||||||
console.log(`Plug ${uid} - ${name} disconnected`);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Called when the plug disconnects with an error ie it's been unplugged
|
|
||||||
orvibo.on('plugDisconnectedWithError', ({uid, name }) => {
|
|
||||||
console.log(`Plug ${uid} - ${name} disconnected with error`);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Start the Orvibo socket server
|
|
||||||
orvibo.startServer();
|
|
||||||
|
|
||||||
// Create a basic example HTTP server
|
|
||||||
// If there are no parameters it will return the uid, state, modelId and name of the socket
|
|
||||||
// You can then use the uid to toggle the state of the switch like
|
|
||||||
// http://localhost:3000?uid=5dcf7ff76e7a
|
|
||||||
|
|
||||||
const requestHandler = (request, response) => {
|
|
||||||
response.writeHead(200, {'Content-Type': 'application/json'});
|
|
||||||
let q = url.parse(request.url, true).query;
|
|
||||||
if (q.uid != null) {
|
|
||||||
orvibo.toggleSocket(q.uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get all currently connected sockets, their names and states
|
|
||||||
let sockets = orvibo.getConnectedSocket();
|
|
||||||
response.end(JSON.stringify(sockets));
|
|
||||||
};
|
|
||||||
|
|
||||||
const httpServer = http.createServer(requestHandler);
|
|
||||||
|
|
||||||
httpServer.listen(httpPort, (err) => {
|
|
||||||
if (err) {
|
|
||||||
return console.log('something bad happened', err)
|
|
||||||
}
|
|
||||||
console.log(`http server is listening on ${httpPort}`)
|
|
||||||
});
|
|
@ -23,9 +23,6 @@ body {
|
|||||||
margin-bottom: 50px;
|
margin-bottom: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
width: 960px;
|
width: 960px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
@ -34,44 +31,18 @@ body {
|
|||||||
grid-gap: 20px;
|
grid-gap: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.socket {
|
||||||
|
|
||||||
.person {
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.person > * {
|
.socket > * {
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.person-image {
|
.socket-image {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 300px;
|
height: 300px;
|
||||||
}
|
}
|
||||||
.profile {
|
|
||||||
display: flex;
|
|
||||||
height: 100vh;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.profile-image {
|
|
||||||
height: 100%;
|
|
||||||
flex-grow: 1;
|
|
||||||
flex-basis: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.profile-details {
|
|
||||||
flex-basis: 30%;
|
|
||||||
flex-grow: 1;
|
|
||||||
padding: 50px;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.profile-details > * {
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.button {
|
.button {
|
||||||
height: 50px;
|
height: 50px;
|
||||||
@ -81,9 +52,3 @@ body {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 20px
|
font-size: 20px
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-twitter {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #659AF1;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
17
server.js
17
server.js
@ -60,6 +60,23 @@ orvibo.startServer();
|
|||||||
app.get('/', (req, res) => {
|
app.get('/', (req, res) => {
|
||||||
let sockets = orvibo.getConnectedSocket();
|
let sockets = orvibo.getConnectedSocket();
|
||||||
|
|
||||||
|
const q = req.query
|
||||||
|
if (q.uid != null) {
|
||||||
|
orvibo.toggleSocket(q.uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
sockets.forEach(socket => {
|
||||||
|
switch(socket.state) {
|
||||||
|
case 1:
|
||||||
|
socket.status = 'off'
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
socket.status = 'on'
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
res.render('index', {
|
res.render('index', {
|
||||||
title: 'Orvibo b25 Server',
|
title: 'Orvibo b25 Server',
|
||||||
sockets
|
sockets
|
||||||
|
@ -2,11 +2,13 @@ extends default
|
|||||||
|
|
||||||
block content
|
block content
|
||||||
div.container
|
div.container
|
||||||
each modelId in sockets
|
each socket in sockets
|
||||||
div.person
|
div.socket
|
||||||
h2.person-name
|
h2.socket-name
|
||||||
| #{modelId.name}
|
| #{socket.name}
|
||||||
h2.person-name2
|
h2.socket-name2
|
||||||
| #{modelId.uid}
|
| #{socket.uid}
|
||||||
a(href=`/?uid=${modelId.uid}`)
|
h2.socket-name2
|
||||||
|
| #{socket.status}
|
||||||
|
a(href=`/?uid=${socket.uid}`)
|
||||||
| Toggle
|
| Toggle
|
Loading…
x
Reference in New Issue
Block a user