mirror of
https://github.com/Koenkk/zigbee2mqtt.git
synced 2024-11-17 02:48:31 -07:00
ba7a85bbb5
* Initial implementation of backend for frontend. * Frontend fixes (#4205) * Send data to frontend api withoud baseTopic preffix * Send frontend api requests to mqtt * Fix topic name sanitisation * Fix base_topic trimming * Update frontend.js * Add zigbee2mqtt-frontend dependency Co-authored-by: Koen Kanters <koenkanters94@gmail.com> * Dont' setup separate MQTT connection. * Correctly stop * Add frontend tests. * [WIP] Bindings structure change (#4233) * Change bindings location * Bump frontend version * Republish devices on bindings change * Fix data structure * Fix payload double encoding * Change endpoints structure * Expose config to bridge/info * Fix typo * Updates Co-authored-by: Koen Kanters <koenkanters94@gmail.com> * Resend states on ws reconnect * Update deps * Bump frontend (#4264) Co-authored-by: John Doe <nurikk@users.noreply.github.com>
44 lines
1.4 KiB
JavaScript
44 lines
1.4 KiB
JavaScript
const events = require('events');
|
|
const assert = require('assert');
|
|
|
|
const allowedEvents = [
|
|
'deviceRemoved', // Device has been removed
|
|
'deviceRenamed', // Device has been renamed
|
|
'groupRenamed', // Group has been renamed
|
|
'publishEntityState', // Entity state will be published
|
|
'stateChange', // Entity changes its state
|
|
'groupMembersChanged', // Members of a group has been changed
|
|
'reportingDisabled', // Reporting is disabled for a device
|
|
'deviceBindingsChanged', // Device bindings changed
|
|
];
|
|
|
|
class EventBus extends events.EventEmitter {
|
|
constructor() {
|
|
super();
|
|
this.callbackByExtension = {};
|
|
}
|
|
|
|
emit(event, data) {
|
|
assert(allowedEvents.includes(event), `Event '${event}' not supported`);
|
|
super.emit(event, data);
|
|
}
|
|
|
|
on(event, callback, extension=null) {
|
|
assert(allowedEvents.includes(event), `Event '${event}' not supported`);
|
|
if (extension) {
|
|
if (!this.callbackByExtension[extension]) this.callbackByExtension[extension] = [];
|
|
this.callbackByExtension[extension].push({event, callback});
|
|
}
|
|
|
|
super.on(event, callback);
|
|
}
|
|
|
|
removeListenersExtension(extension) {
|
|
for (const entry of this.callbackByExtension[extension] || []) {
|
|
super.removeListener(entry.event, entry.callback);
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = EventBus;
|