mirror of
https://github.com/koush/scrypted.git
synced 2026-02-12 18:12:04 +00:00
42 lines
1.7 KiB
TypeScript
42 lines
1.7 KiB
TypeScript
import { ScriptDevice } from "@scrypted/common/src/eval/monaco/script-device"; // SCRYPTED_FILTER_EXAMPLE_LINE
|
|
import { OnOff, Brightness, ScryptedDeviceBase } from "@scrypted/sdk"; // SCRYPTED_FILTER_EXAMPLE_LINE
|
|
import { MqttClient, MqttEvent } from "../../src/api/mqtt-client"; // SCRYPTED_FILTER_EXAMPLE_LINE
|
|
declare const device: ScriptDevice & ScryptedDeviceBase; // SCRYPTED_FILTER_EXAMPLE_LINE
|
|
declare const mqtt: MqttClient; // SCRYPTED_FILTER_EXAMPLE_LINE
|
|
|
|
/**
|
|
* This is an example of a loopback light device.
|
|
* Turning the light on or off will publish a set command on the MQTT broker.
|
|
* This command will update the status on the MQTT broker.
|
|
* The status update will then be reported back to Scrpyted and will update the device state.
|
|
* View the Console and the Logs to watch it in action.
|
|
*/
|
|
mqtt.subscribe({
|
|
// watch for set commands on the server, and publish status updates
|
|
'/brightness/set': value => updateStatus(value),
|
|
'/light/set': value => updateStatus(value),
|
|
|
|
// status updates from the server update the status on Scrypted
|
|
'/status': value => {
|
|
device.on = value.json.on;
|
|
device.brightness = value.json.brightness;
|
|
},
|
|
});
|
|
|
|
function updateStatus(value: MqttEvent) {
|
|
mqtt.publish('/status', Object.assign({}, {
|
|
on: device.on,
|
|
brightness: device.brightness,
|
|
}, value.json));
|
|
}
|
|
|
|
/**
|
|
* Commands from Scrypted (via the web dashboard, HomeKit, Google Home, etc)
|
|
* get handled here and sent to the MQTT broker.
|
|
*/
|
|
export default {
|
|
turnOff: () => mqtt.publish('/light/set', { on: false }),
|
|
turnOn: () => mqtt.publish('/light/set', { on: true }),
|
|
setBrightness: brightness => mqtt.publish('/brightness/set', { brightness }),
|
|
} as OnOff & Brightness;
|