Skip to content

Instantly share code, notes, and snippets.

@mpvader
Created November 23, 2017 21:22
Show Gist options
  • Save mpvader/c3e45fe00303a2bf31a538f049ceca9c to your computer and use it in GitHub Desktop.
Save mpvader/c3e45fe00303a2bf31a538f049ceca9c to your computer and use it in GitHub Desktop.
const dbus = require('dbus-native');
const bus = dbus.sessionBus();
if (!bus) {
throw new Error('Could not connect to the DBus session bus.');
}
var services = {};
function signal_receive(m) {
if (m.interface == 'com.victronenergy.BusItem' && m.member == 'PropertiesChanged') {
properties_changed(m);
} else if (m.interface == 'org.freedesktop.DBus' && m.member == 'NameOwnerChanged') {
name_owner_changed(m);
}
}
function name_owner_changed(m) {
name = m.body[0];
old_owner = m.body[1];
new_owner = m.body[2];
if (new_owner != '') {
services[new_owner] = name;
} else {
delete services[old_owner];
}
}
function properties_changed(m) {
// Message contents:
// { serial: 5192,
// path: '/Dc/0/Power',
// interface: 'com.victronenergy.BusItem',
// member: 'PropertiesChanged',
// signature: 'a{sv}',
// sender: ':1.104',
// type: 4,
// flags: 1,
// body: [ [ [Object], [Object] ] ]}
m.text = m.body[0][0][1][1][0];
m.value = m.body[0][1][1][1][0];
console.log("Receiving signal %d", m.serial);
console.log(" " + m.path); // '/Dc/0/Voltage'
console.log(" " + m.sender); // ':1.104'
console.log(" " + services[m.sender]); // 'com.victronenergy.battery.ttyO1'
console.log(" " + m.text); // The new value as a (sometimes formatted) string
console.log(" " + m.value); // The new value as a plain value
console.log(" " + Object.prototype.toString.call(m.value))
return true;
}
bus.connection.on('message', signal_receive);
bus.addMatch("type='signal',interface='com.victronenergy.BusItem',member='PropertiesChanged'", d => {});
bus.addMatch("type='signal',member='NameOwnerChanged'", d => {});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment