feat: use mqtt power, update dependencies

This commit is contained in:
neri 2025-07-29 23:09:16 +02:00
parent 0c69e35d9c
commit 4448106b56
6 changed files with 4337 additions and 59 deletions

View file

@ -1,29 +0,0 @@
var util = require('util');
var EventEmitter = require('events').EventEmitter;
var request = require('request');
var Flukso = function(hostname, pathname) {
var self = this;
this.pollPower = function() {
request({url: "http://" + hostname + pathname}, function(error, res, response) {
if (error) {
self.emit('failed', error)
} else {
try {
var jsondata = JSON.parse(response);
var power = jsondata[jsondata.length-1][1];
self.emit('done', parseInt(power));
} catch(err) {
console.log("error parsing fluxo data");
}
}
});
};
};
util.inherits(Flukso, EventEmitter);
module.exports = Flukso;

2658
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,19 +1,18 @@
{
"name": "ctdo-raumstatus",
"description": "ctdo raumstatus app",
"version": "1.0.0",
"version": "1.1.0",
"private": true,
"dependencies": {
"connect-flash": "0.1.1",
"events": "1.1.0",
"express": "4.13.3",
"events": "3.3.0",
"express": "5.1.0",
"jade": "1.11.0",
"mqtt": "2.1.3",
"mqtt": "5.13.3",
"path": "0.12.7",
"request": "2.67.0",
"socket.io": "1.4.3",
"underscore": "1.8.3",
"util": "0.10.3"
"request": "2.88.2",
"socket.io": "4.8.1",
"util": "0.12.5"
},
"main": "raumstatus.js",
"scripts": {

View file

@ -1,9 +1,9 @@
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
server = require('http').createServer(app);
const { Server } = require("socket.io");
var flash = require('connect-flash');
var Flukso = require("./flukso");
const io = new Server(server);
var IpPoll = require("./ip-poll");
var routes = require("./routes");
var path = require('path');
@ -65,8 +65,6 @@ var simpleanswer = {state: "unknown", lastchange: 0, power: 0};
var ippoll = new IpPoll(process.env.STATUS_POLL_HOST || "snapserv.raum.ctdo.de");
var flukso = new Flukso(process.env.FLUKSO_HOST || "flukso.raum.ctdo.de",
process.env.FLUKSO_URL || "/sensor/cf00e0b22230f4a8870af58f2b8719dd");
var mqtt = mqttClient.connect(process.env.MQTT_SERVER || 'mqtt://mqtt.ctdo.de');
var connected = false;
@ -89,25 +87,22 @@ ippoll.on('doneState', function (state) {
console.log("room state changed: " + JSON.stringify(simpleanswer))
});
flukso.on('done', function (num) {
simpleanswer.power = num;
spaceanswer.sensors.power_consumption[0].value = num;
io.sockets.emit('sdata', {data: simpleanswer});
});
flukso.on('failed', function (error) {
console.log("Flukso: " + error);
});
mqtt.on('connect', function () {
console.log("connected to mqtt");
mqtt.subscribe('raumstatus/simple');
mqtt.subscribe('sml2mqtt/ctdo-keller/active_power');
});
mqtt.on('message', function (topic, message) {
if (topic === 'raumstatus/simple') {
connected = (message.toString() === 'true');
}
if (topic === 'sml2mqtt/ctdo-keller/active_power') {
power = Number(message.toString());
simpleanswer.power = power;
spaceanswer.sensors.power_consumption[0].value = power;
io.sockets.emit('sdata', {data: simpleanswer});
}
});
function sendSimple() {
@ -122,9 +117,6 @@ function work() {
setInterval(work, process.env.PING_INTERVAL_MS || 60000);
work();
setInterval(flukso.pollPower, 5000);
flukso.pollPower();
app.use(express.static('public'));
app.use(flash());

View file

@ -4,10 +4,11 @@ block content
.intro
p
| Hier siehst du den aktuellen Status von uns. Die Daten werden vom Router und unserem Flukso
| 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.
| Hier siehst du den aktuellen Status von uns.
| Die Daten werden von unserem Pi am Stromzähler per sml2-mqtt und von unserem Router eingesammelt.
| Der Status selber wird 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.
.ink-grid(ng-controller='StatusCtrl')
.column-group.gutters

1657
yarn.lock Normal file

File diff suppressed because it is too large Load diff