Compare commits

...

3 Commits

Author SHA1 Message Date
Lucas Pleß 83c395dcce Dockerfile hinzugefügt, README.md erweitert, listen port auf 0.0.0.0 gestellt 2022-09-04 15:20:05 +02:00
Lucas Pleß 4a5cfe55ac ip-poll von nmap auf ping geändert 2022-09-04 15:11:02 +02:00
Lucas Pleß ec191271b0 Text auf der Seite angepasst 2022-09-04 15:10:37 +02:00
6 changed files with 60 additions and 14 deletions

2
.dockerignore Normal file
View File

@ -0,0 +1,2 @@
node_modules
npm-debug.log

17
Dockerfile Normal file
View File

@ -0,0 +1,17 @@
FROM node:16
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 9911
CMD [ "node", "raumstatus.js" ]

View File

@ -31,3 +31,20 @@ Das meiste an Funktionn wurde wiede raus geworfen weil sich die CTDO infrastrukt
sehr verändert hat und einiges kaputt war.
Der Status zeit nur noch Power und Raumstatus an. Es läuft wie gehabt via nmap-Ping.
## Dev hinweise
Man braucht dieses repo, nodejs ~16 mit npm.
Dependencies installieren und Server lokal laufen lassen:
npm install
node raumstatus.js
Docker container bauen:
docker build . -t ctdo/ctdo-raumstatus

View File

@ -3,23 +3,32 @@ var EventEmitter = require('events').EventEmitter;
var exec = require('child_process').exec;
var IpPoll = function(switchaddr, hostsaddr) {
var IpPoll = function(target) {
var self = this;
var regexp = /\(([0-9]+) hosts* up\)/;
var nmap = "nmap -n -sP ";
var regexp = /([0-9]+)% packet loss/m;
var command = "LANG=C ping -c 2";
this.pollState = function() {
exec(nmap + switchaddr, function (error, stdout, stderr) {
if(error == null) {
try {
exec(command + " " + target, function (error, stdout, stderr) {
// console.log(stdout);
var matches = regexp.exec(stdout);
if(matches != null && matches.length === 2) {
self.emit('doneState', matches[1] === "1");
if (matches != null) {
// console.log("matches " + JSON.stringify(matches));
// console.log("length: " + matches.length);
// console.log("matches 1: " + matches[1]);
if (matches.length === 2) {
self.emit('doneState', matches[1] === "0");
}
}
} else {
self.emit('doneState', "unknown");
}
});
});
} catch(err) {
self.emit('doneState', "unknown");
}
};
};

View File

@ -68,8 +68,9 @@ var flukso = new Flukso("flukso.raum.ctdo.de", "/sensor/cf00e0b22230f4a8870af58f
var mqtt = mqttClient.connect('mqtt://raum.ctdo.de');
var connected = false;
//express js settings
var port = '9911';
var address = 'localhost';
var address = '0.0.0.0';
ippoll.on('doneState', function (state) {

View File

@ -5,7 +5,7 @@ block content
.intro
p
| Hier siehst du den aktuellen Status von uns. Die Daten werden vom Router und unserem Flukso
| eingesammelt. Die Anzahl der Geräte und der Status selber werden Minütlich abgefragt. Unseren
| eingesammelt. Der Status selber werden Minütlich abgefragt. Unseren
| Energieverbrauch bekommst du alle fünf Sekunden neu. Den Status "geöffnet" oder "geschlossen"
| bestimmt das Programm mit einem ping auf ein Gerät im Raum.