mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-11-15 03:02:17 -05:00
add beeps for overcurrent, HELP clear, and low battery
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
const logger = require('../../globals/logger').child('batteryManager');
|
const logger = require('../../globals/logger').child('batteryManager');
|
||||||
const { publishEvent } = require('../eventBus');
|
const { publishEvent } = require('../eventBus');
|
||||||
const { managerEvents, lockRover, rovers } = require('../roverManager');
|
const { managerEvents, lockRover, rovers } = require('../roverManager');
|
||||||
|
const { issueCommand } = require('../commandService');
|
||||||
|
|
||||||
const STATES = {
|
const STATES = {
|
||||||
NORMAL: 'normal',
|
NORMAL: 'normal',
|
||||||
@@ -61,6 +62,11 @@ function handleSensorEvent({ roverId, sensors, batteryState }) {
|
|||||||
}
|
}
|
||||||
if (!state.urgent && batteryState?.urgentActive) {
|
if (!state.urgent && batteryState?.urgentActive) {
|
||||||
state.urgent = true;
|
state.urgent = true;
|
||||||
|
try {
|
||||||
|
issueCommand(roverId, { type: 'song', song: { notes: [{ note: 72, duration: 8 }, { note: 0, duration: 8 }, { note: 72, duration: 16 }] } });
|
||||||
|
} catch (err) {
|
||||||
|
logger.warn('Failed to play urgent battery warning', { roverId, error: err.message });
|
||||||
|
}
|
||||||
publishEvent({
|
publishEvent({
|
||||||
source: 'batteryManager',
|
source: 'batteryManager',
|
||||||
type: 'battery.urgent',
|
type: 'battery.urgent',
|
||||||
|
|||||||
@@ -400,6 +400,7 @@ function createOvercurrentProtectionService(options = {}) {
|
|||||||
type: 'drive',
|
type: 'drive',
|
||||||
driveDirect: { left: 0, right: 0 },
|
driveDirect: { left: 0, right: 0 },
|
||||||
});
|
});
|
||||||
|
issueAdjustedCommand(roverId, { type: 'song', song: { notes: [{ note: 76, duration: 8 }, { note: 72, duration: 8 }, { note: 67, duration: 16 }] } });
|
||||||
logger.warn('Stopped rover after persistent wheel overcurrent', {
|
logger.warn('Stopped rover after persistent wheel overcurrent', {
|
||||||
roverId,
|
roverId,
|
||||||
motor: stalledWheel,
|
motor: stalledWheel,
|
||||||
|
|||||||
@@ -2,20 +2,19 @@
|
|||||||
// Purpose: Publishes sustained 600-series Roomba trouble as roster and alert state.
|
// Purpose: Publishes sustained 600-series Roomba trouble as roster and alert state.
|
||||||
// Scope: Integrates the pure monitor with roverManager, browser alerts, and the event bus.
|
// Scope: Integrates the pure monitor with roverManager, browser alerts, and the event bus.
|
||||||
const roverManager = require('../roverManager');
|
const roverManager = require('../roverManager');
|
||||||
|
const { issueCommand } = require('../commandService');
|
||||||
const { sendAlert } = require('../alertService');
|
const { sendAlert } = require('../alertService');
|
||||||
const { publishEvent } = require('../eventBus');
|
const { publishEvent } = require('../eventBus');
|
||||||
const { REASON_LABELS, createRoverHelpMonitor } = require('./monitor');
|
const { REASON_LABELS, createRoverHelpMonitor } = require('./monitor');
|
||||||
const { createHelpHornNotifier } = require('./hornNotifier');
|
const { createHelpHornNotifier } = require('./hornNotifier');
|
||||||
|
const logger = require('../../globals/logger').child('roverHelpService');
|
||||||
|
|
||||||
const HELP_ALERT_COLOR = '#ef4444';
|
const HELP_ALERT_COLOR = '#ef4444';
|
||||||
|
|
||||||
const hornNotifier = createHelpHornNotifier({
|
const hornNotifier = createHelpHornNotifier({
|
||||||
getRover: (roverId) => roverManager.rovers.get(String(roverId)),
|
getRover: (roverId) => roverManager.rovers.get(String(roverId)),
|
||||||
// commandService imports roverManager, so resolving it only when a chirp is
|
issueCommand,
|
||||||
// actually issued avoids turning server startup order into a circular module
|
logger,
|
||||||
// dependency while retaining the established command transport.
|
|
||||||
issueCommand: (roverId, payload) => require('../commandService').issueCommand(roverId, payload),
|
|
||||||
logger: require('../../globals/logger').child('roverHelpService'),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const monitor = createRoverHelpMonitor({
|
const monitor = createRoverHelpMonitor({
|
||||||
@@ -42,6 +41,11 @@ const monitor = createRoverHelpMonitor({
|
|||||||
});
|
});
|
||||||
} else if (wasNeedingHelp && !needsHelp) {
|
} else if (wasNeedingHelp && !needsHelp) {
|
||||||
hornNotifier.stop(roverId);
|
hornNotifier.stop(roverId);
|
||||||
|
try {
|
||||||
|
issueCommand(roverId, { type: 'song', song: { notes: [{ note: 72, duration: 8 }, { note: 79, duration: 16 }] } });
|
||||||
|
} catch (err) {
|
||||||
|
logger.warn('Failed to play HELP-cleared confirmation', { roverId, error: err.message });
|
||||||
|
}
|
||||||
publishEvent({
|
publishEvent({
|
||||||
source: 'roverHelpService',
|
source: 'roverHelpService',
|
||||||
type: 'rover.helpCleared',
|
type: 'rover.helpCleared',
|
||||||
|
|||||||
Reference in New Issue
Block a user