Files
tuya-mqtt/devices/simple-dimmer.js
tsightler d61c1f7cee Release 3.0.0
3.0.0 Release

Major changes from 2.1.0:
* Completely new configuration engine
* Completely new topic structure
* New template engine for creating friendly topic structure from raw DPS values
* Pre-defined templates for some common devices
* Directly control devices via Tuya JSON topic or via DPS key topics
2020-10-18 20:53:58 -04:00

76 lines
2.9 KiB
JavaScript

const TuyaDevice = require('./tuya-device')
const debug = require('debug')('tuya-mqtt:device')
const debugDiscovery = require('debug')('tuya-mqtt:discovery')
const utils = require('../lib/utils')
class SimpleDimmer extends TuyaDevice {
async init() {
// Set device specific variables
this.config.dpsPower = this.config.dpsPower ? this.config.dpsPower : 1
this.config.dpsBrightness = this.config.dpsBrightness ? this.config.dpsBrightness : 2
this.config.brightnessScale = this.config.brightnessScale ? this.config.brightnessScale : 255
this.deviceData.mdl = 'Dimmer Switch'
// Set white value transform math
let brightnessStateMath
let brightnessCommandMath
if (this.config.brightnessScale === 255) {
// Devices with brightness scale of 255 seem to not allow values
// less then 25 (10%) without producing timeout errors.
brightnessStateMath = '/2.3-10.86'
brightnessCommandMath = '*2.3+25'
} else {
// For other scale (usually 1000), 10-1000 seems OK.
brightnessStateMath = '/('+this.config.brightnessScale+'/100)'
brightnessCommandMath = '*('+this.config.brightnessScale+'/100)'
}
// Map generic DPS topics to device specific topic names
this.deviceTopics = {
state: {
key: this.config.dpsPower,
type: 'bool'
},
brightness_state: {
key: this.config.dpsBrightness,
type: 'int',
topicMin: 0,
topicMax: 100,
stateMath: brightnessStateMath,
commandMath: brightnessCommandMath
}
}
// Send home assistant discovery data and give it a second before sending state updates
this.initDiscovery()
await utils.sleep(1)
// Get initial states and start publishing topics
this.getStates()
}
initDiscovery() {
const configTopic = 'homeassistant/light/'+this.config.id+'/config'
const discoveryData = {
name: (this.config.name) ? this.config.name : this.config.id,
state_topic: this.baseTopic+'state',
command_topic: this.baseTopic+'command',
brightness_state_topic: this.baseTopic+'brightness_state',
brightness_command_topic: this.baseTopic+'brightness_command',
brightness_scale: 100,
availability_topic: this.baseTopic+'status',
payload_available: 'online',
payload_not_available: 'offline',
unique_id: this.config.id,
device: this.deviceData
}
debugDiscovery('Home Assistant config topic: '+configTopic)
debugDiscovery(discoveryData)
this.publishMqtt(configTopic, JSON.stringify(discoveryData))
}
}
module.exports = SimpleDimmer