371 lines
21 KiB
JavaScript
371 lines
21 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const Gateway = require('./Sensors/Gateway');
|
||
|
const THSensor = require('./Sensors/THSensor');
|
||
|
const DoorSensor = require('./Sensors/DoorSensor');
|
||
|
const MotionSensor = require('./Sensors/MotionSensor');
|
||
|
const VibrationSensor = require('./Sensors/VibrationSensor');
|
||
|
const Plug = require('./Sensors/Plug');
|
||
|
const Button = require('./Sensors/Button');
|
||
|
const Cube = require('./Sensors/Cube');
|
||
|
const WallButtons = require('./Sensors/WallButtons');
|
||
|
const WallWiredSwitch = require('./Sensors/WallWiredSwitch');
|
||
|
const Alarm = require('./Sensors/Alarm');
|
||
|
const Curtain = require('./Sensors/Curtain');
|
||
|
const WaterSensor = require('./Sensors/WaterSensor');
|
||
|
const Lock = require('./Sensors/Lock');
|
||
|
|
||
|
const states = {
|
||
|
voltage: {name: 'Battery voltage', role: 'battery.voltage', write: false, read: true, type: 'number', unit: 'V', icon: '/icons/battery_v.png', desc: 'Battery voltage'},
|
||
|
percent: {name: 'Battery percent', role: 'battery.percent', write: false, read: true, type: 'number', unit: '%', icon: '/icons/battery_p.png', desc: 'Battery level in percent', min: 0, max: 100},
|
||
|
|
||
|
temperature: {name: 'Temperature', role: 'value.temperature', write: false, read: true, type: 'number', unit: '°C'},
|
||
|
humidity: {name: 'Humidity', role: 'value.humidity', write: false, read: true, type: 'number', unit: '%', min: 0, max: 100},
|
||
|
|
||
|
doublePress: {name: 'Double press', role: 'state', write: false, read: true, type: 'boolean', desc: 'You can press connect button twice'},
|
||
|
|
||
|
opened: {name: 'Is opened', role: 'state', write: false, read: true, type: 'boolean'},
|
||
|
description: {name: 'Alarm description', role: 'state', write: false, read: true, type: 'string'},
|
||
|
|
||
|
motion: {name: 'Is motion', role: 'indicator.motion', write: false, read: true, type: 'boolean'},
|
||
|
no_motion: {name: 'Last motion', role: 'state', write: false, read: true, type: 'number', unit: 'seconds', desc: 'Last motion for at least X seconds'},
|
||
|
fing_verified: {name: 'Finger verified', role: 'value', write: false, read: true, type: 'number'},
|
||
|
|
||
|
psw_verified: {name: 'Password verified', role: 'value', write: false, read: true, type: 'number'},
|
||
|
card_verified: {name: 'Card verified', role: 'value', write: false, read: true, type: 'number'},
|
||
|
verified_wrong: {name: 'Wrong verification', role: 'value', write: false, read: true, type: 'number'},
|
||
|
|
||
|
click: {name: 'Simple click', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
double: {name: 'Double click', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
long: {name: 'Long click', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
|
||
|
channel_0: {name: 'First button pressed', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
channel_0_double: {name: 'First button pressed double', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
channel_1: {name: 'Second button pressed', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
channel_1_double: {name: 'Second button pressed double', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
dual_channel: {name: 'Both buttons pressed', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
|
||
|
power: {name: 'Socket plug', role: 'switch', write: true, read: true, type: 'boolean'},
|
||
|
load_power: {name: 'Load power', role: 'value.power', write: false, read: true, type: 'number', unit: 'W'},
|
||
|
power_consumed: {name: 'Power consumed', role: 'value.consumption', write: false, read: true, type: 'number', unit: 'W'},
|
||
|
inuse: {name: 'Is in use', role: 'state', write: false, read: true, type: 'number'},
|
||
|
|
||
|
wall_switch: {name: 'Wall switch', role: 'switch', write: true, read: true, type: 'boolean'},
|
||
|
wall_switch0: {name: 'Wall switch 0', role: 'switch', write: true, read: true, type: 'boolean'},
|
||
|
wall_switch1: {name: 'Wall switch 1', role: 'switch', write: true, read: true, type: 'boolean'},
|
||
|
|
||
|
rotate: {name: 'Rotation angle', role: 'state', write: false, read: true, type: 'number'},
|
||
|
rotate_position: {name: 'Rotation angle', role: 'state', write: true, read: true, type: 'number', min: 0, max: 100, unit: '%'},
|
||
|
flip90: {name: 'Flip on 90°', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
flip180: {name: 'Flip on 180°', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
move: {name: 'Move action', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
tap_twice: {name: 'Tapped twice', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
shake_air: {name: 'Shaken in air', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
swing: {name: 'Swing action', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
alert: {name: 'Alert action', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
free_fall: {name: 'Free fall action', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
rotate_left: {name: 'Rotate left', role: 'button', write: false, read: true, type: 'boolean'},
|
||
|
rotate_right: {name: 'Rotate right', role: 'button', write: false, read: true, type: 'boolean'}
|
||
|
};
|
||
|
|
||
|
// type - name as delivered by gateway
|
||
|
// fullName - Name of the device
|
||
|
// ClassName - handler class
|
||
|
// states - list of states for this sensor
|
||
|
|
||
|
const devices = {
|
||
|
gateway: {type: 'gateway', fullName: 'Xiaomi RGB Gateway', ClassName: Gateway, states: {
|
||
|
illumination: {name: 'Illumination', role: 'value.lux', write: false, read: true, type: 'number', unit: 'lux'},
|
||
|
rgb: {name: 'RGB', role: 'level.rgb', write: true, read: true, type: 'string'},
|
||
|
on: {name: 'Light', role: 'switch', write: true, read: true, type: 'boolean'},
|
||
|
dimmer: {name: 'Light', role: 'level.dimmer', write: true, read: true, type: 'number', unit: '%', min: 0, max: 100},
|
||
|
volume: {name: 'Volume', role: 'level.volume', write: true, read: true, type: 'number', unit: '%', min: 0, max: 100},
|
||
|
mid: {name: 'Music ID', role: 'state', write: true, read: false, type: 'number', desc: '10000 - stop, 10005 - custom ringtone'},
|
||
|
connected: {name: 'Is gateway connected', role: 'indicator.reachable', write: true, read: false, type: 'boolean', desc: 'Will be set to false if no packets received in 20 seconds'}
|
||
|
}
|
||
|
},
|
||
|
th: {type: 'sensor_ht', fullName: 'Xiaomi Temperature/Humidity', ClassName: THSensor, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
temperature: states.temperature,
|
||
|
humidity: states.humidity,
|
||
|
doublePress: states.doublePress
|
||
|
}
|
||
|
},
|
||
|
weather: {type: 'weather.v1', fullName: 'Xiaomi Temperature/Humidity/Pressure', ClassName: THSensor, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
temperature: states.temperature,
|
||
|
humidity: states.humidity,
|
||
|
pressure: {name: 'Pressure', role: 'value.pressure', write: false, read: true, type: 'number', unit: 'Pa', min: 0, max: 100},
|
||
|
doublePress: states.doublePress
|
||
|
}
|
||
|
},
|
||
|
button: {type: 'switch', fullName: 'Xiaomi Wireless Switch', ClassName: Button, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
click: states.click,
|
||
|
double: states.double,
|
||
|
long: states.long
|
||
|
}
|
||
|
},
|
||
|
button2: {type: 'sensor_switch.aq2', fullName: 'Xiaomi Wireless Switch Sensor', ClassName: Button, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
click: states.click,
|
||
|
double: states.double,
|
||
|
long: states.long
|
||
|
}
|
||
|
},
|
||
|
button3: {type: 'sensor_switch.aq3', fullName: 'Xiaomi Wireless Switch Sensor', ClassName: Button, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
click: states.click,
|
||
|
double: states.double,
|
||
|
long: states.long
|
||
|
}
|
||
|
},
|
||
|
button4: {type: 'remote.b1acn01', fullName: 'Xiaomi Aqara Smart Wireless Switch', ClassName: Button, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
click: states.click,
|
||
|
double: states.double,
|
||
|
long: states.long
|
||
|
}
|
||
|
},
|
||
|
plug: {type: 'plug', fullName: 'Xiaomi Smart Plug', ClassName: Plug, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
state: states.power,
|
||
|
load_power: states.load_power,
|
||
|
power_consumed: states.power_consumed,
|
||
|
inuse: states.inuse
|
||
|
}
|
||
|
},
|
||
|
plug86: {type: '86plug', fullName: 'Xiaomi Smart Wall Plug', ClassName: Plug, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
state: states.power,
|
||
|
load_power: states.load_power,
|
||
|
power_consumed: states.power_consumed,
|
||
|
inuse: states.inuse
|
||
|
}
|
||
|
},
|
||
|
remote_b286acn01: {type: 'remote.b286acn01', fullName: 'Xiaomi Aqara Wireless Remote Switch (Double Rocker)', ClassName: WallButtons, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
channel_0: states.channel_0,
|
||
|
channel_1: states.channel_1,
|
||
|
dual_channel: states.dual_channel,
|
||
|
channel_0_double: states.channel_0_double,
|
||
|
channel_1_double: states.channel_1_double
|
||
|
}
|
||
|
},
|
||
|
|
||
|
remote_b186acn01: {type: 'remote.b186acn01', fullName: 'Xiaomi Aqara Wireless Remote Switch (Single Rocker)', ClassName: WallButtons, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
channel_0: states.channel_0,
|
||
|
channel_0_double: states.channel_0_double
|
||
|
}
|
||
|
},
|
||
|
|
||
|
sw2_86: {type: '86sw2', fullName: 'Xiaomi Wireless Dual Wall Switch', ClassName: WallButtons, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
channel_0: states.channel_0,
|
||
|
channel_1: states.channel_1,
|
||
|
dual_channel: states.dual_channel,
|
||
|
channel_0_double: states.channel_0_double,
|
||
|
channel_1_double: states.channel_1_double
|
||
|
}
|
||
|
},
|
||
|
sw1_86: {type: '86sw1', fullName: 'Xiaomi Wireless Single Wall Switch', ClassName: WallButtons, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
channel_0: states.click,
|
||
|
channel_0_double: states.double
|
||
|
}
|
||
|
},
|
||
|
natgas: {type: 'natgas', fullName: 'Xiaomi Mijia Honeywell Gas Alarm Detector', ClassName: Alarm, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
state: {name: 'Alarm state', role: 'indicator.alarm.CO2', write: false, read: true, type: 'boolean'},
|
||
|
description: states.description
|
||
|
}
|
||
|
},
|
||
|
smoke: {type: 'smoke', fullName: 'Xiaomi Mijia Honeywell Fire Alarm Detector', ClassName: Alarm, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
state: {name: 'Alarm state', role: 'indicator.alarm.fire', write: false, read: true, type: 'boolean'},
|
||
|
description: states.description
|
||
|
}
|
||
|
},
|
||
|
ctrl_ln1: {type: 'ctrl_ln1', fullName: 'Xiaomi Aqara 86 Fire Wall Switch One Button', ClassName: WallWiredSwitch, states: {
|
||
|
channel_0: states.wall_switch
|
||
|
}
|
||
|
},
|
||
|
ctrl_ln1_aq1: {type: 'ctrl_ln1.aq1', fullName: 'Xiaomi Aqara Wall Switch LN', ClassName: WallWiredSwitch, states: {
|
||
|
channel_0: states.wall_switch
|
||
|
}
|
||
|
},
|
||
|
ctrl_ln2: {type: 'ctrl_ln2', fullName: 'Xiaomi 86 zero fire wall switch double key', ClassName: WallWiredSwitch, states: {
|
||
|
channel_0: states.wall_switch0,
|
||
|
channel_1: states.wall_switch1
|
||
|
}
|
||
|
},
|
||
|
ctrl_ln2_aq1: {type: 'ctrl_ln2.aq1', fullName: 'Xiaomi Aqara Wall Switch LN double key', ClassName: WallWiredSwitch, states: {
|
||
|
channel_0: states.wall_switch0,
|
||
|
channel_1: states.wall_switch1
|
||
|
}
|
||
|
},
|
||
|
ctrl_86plug_aq1: {type: 'ctrl_86plug.aq1', fullName: 'Xiaomi Aqara Wall Socket', ClassName: Plug, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
state: states.power,
|
||
|
load_power: states.load_power,
|
||
|
power_consumed: states.power_consumed,
|
||
|
inuse: states.inuse
|
||
|
}
|
||
|
},
|
||
|
ctrl_neutral2: {type: 'ctrl_neutral2', fullName: 'Xiaomi Wired Dual Wall Switch', ClassName: WallWiredSwitch, states: {
|
||
|
channel_0: states.wall_switch0,
|
||
|
channel_1: states.wall_switch1
|
||
|
}
|
||
|
},
|
||
|
ctrl_neutral1: {type: 'ctrl_neutral1', fullName: 'Xiaomi Wired Single Wall Switch', ClassName: WallWiredSwitch, states: {
|
||
|
channel_0: states.wall_switch
|
||
|
}
|
||
|
},
|
||
|
cube: {type: 'cube', fullName: 'Xiaomi Cube', ClassName: Cube, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
rotate: states.rotate,
|
||
|
rotate_position: states.rotate_position,
|
||
|
flip90: states.flip90,
|
||
|
flip180: states.flip180,
|
||
|
move: states.move,
|
||
|
tap_twice: states.tap_twice,
|
||
|
shake_air: states.shake_air,
|
||
|
swing: states.swing,
|
||
|
alert: states.alert,
|
||
|
free_fall: states.free_fall,
|
||
|
rotate_left: states.rotate_left,
|
||
|
rotate_right: states.rotate_right,
|
||
|
}
|
||
|
},
|
||
|
cube2: {type: 'sensor_cube.aqgl01', fullName: 'Xiaomi Cube 01', ClassName: Cube, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
rotate: states.rotate,
|
||
|
rotate_position: states.rotate_position,
|
||
|
flip90: states.flip90,
|
||
|
flip180: states.flip180,
|
||
|
move: states.move,
|
||
|
tap_twice: states.tap_twice,
|
||
|
shake_air: states.shake_air,
|
||
|
swing: states.swing,
|
||
|
alert: states.alert,
|
||
|
free_fall: states.free_fall,
|
||
|
rotate_left: states.rotate_left,
|
||
|
rotate_right: states.rotate_right,
|
||
|
}
|
||
|
},
|
||
|
magnet: {type: 'magnet', fullName: 'Xiaomi Door Sensor', ClassName: DoorSensor, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
state: states.opened
|
||
|
}
|
||
|
},
|
||
|
magnet2: {type: 'sensor_magnet.aq2', fullName: 'Xiaomi Door Sensor', ClassName: DoorSensor, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
state: states.opened
|
||
|
}
|
||
|
},
|
||
|
curtain: {type: 'curtain', fullName: 'Xiaomi Aqara Smart Curtain', ClassName: Curtain, states: {
|
||
|
curtain_level: {name: 'Curtain level', role: 'level.blinds', write: true, read: true, type: 'number', min: 0, max: 100, unit: '%'},
|
||
|
open: {name: 'Open', role: 'button.open', write: true, read: false, type: 'boolean'},
|
||
|
close: {name: 'Close', role: 'button.close', write: true, read: false, type: 'boolean'},
|
||
|
stop: {name: 'Stop', role: 'button.stop', write: true, read: false, type: 'boolean'}
|
||
|
}
|
||
|
},
|
||
|
motion: {type: 'motion', fullName: 'Xiaomi Motion Sensor', ClassName: MotionSensor, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
state: states.motion,
|
||
|
no_motion: states.no_motion
|
||
|
}
|
||
|
},
|
||
|
lock_aq1: {type: 'lock.aq1', fullName: 'Xiaomi Lock', ClassName: Lock, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
fing_verified: states.fing_verified,
|
||
|
psw_verified: states.psw_verified,
|
||
|
card_verified: states.card_verified,
|
||
|
verified_wrong: states.verified_wrong
|
||
|
}
|
||
|
},
|
||
|
lock_v1: {type: 'lock.v1', fullName: 'Xiaomi Vima Smart Lock', ClassName: Lock, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
fing_verified: states.fing_verified,
|
||
|
psw_verified: states.psw_verified,
|
||
|
card_verified: states.card_verified,
|
||
|
verified_wrong: states.verified_wrong
|
||
|
}
|
||
|
},
|
||
|
motion2: {type: 'sensor_motion.aq2', fullName: 'Xiaomi Motion Sensor', ClassName: MotionSensor, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
state: states.motion,
|
||
|
no_motion: states.no_motion,
|
||
|
lux: {name: 'Brightness', role: 'indicator.brightness', write: false, read: true, type: 'number', unit: 'lux'}
|
||
|
}
|
||
|
},
|
||
|
vibration: {type: 'vibration', fullName: 'Xiaomi Vibration Sensor', ClassName: VibrationSensor, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
state: {name: 'Is vibration', role: 'indicator.vibration', write: false, read: true, type: 'boolean', desc: 'Last tilt angle'},
|
||
|
tilt_angle: {name: 'Tilt angle', role: 'value', write: false, read: true, type: 'number', unit: '°'},
|
||
|
orientationX: {name: 'Orientation X', role: 'value', write: false, read: true, type: 'number', desc: 'Last X orientation'},
|
||
|
orientationY: {name: 'Orientation Y', role: 'value', write: false, read: true, type: 'number', desc: 'Last Y orientation'},
|
||
|
orientationZ: {name: 'Orientation Z', role: 'value', write: false, read: true, type: 'number', desc: 'Last Z orientation'},
|
||
|
bed_activity: {name: 'Bed activity', role: 'value', write: false, read: true, type: 'number', desc: 'Last bed activity'}
|
||
|
}
|
||
|
},
|
||
|
wleak1: {type: 'sensor_wleak.aq1', fullName: 'Xiaomi Aqara Water Sensor', ClassName: WaterSensor, states: {
|
||
|
voltage: states.voltage,
|
||
|
percent: states.percent,
|
||
|
|
||
|
state: {name: 'Is water detected', role: 'indicator.leakage', write: false, read: true, type: 'boolean'}
|
||
|
}
|
||
|
},
|
||
|
};
|
||
|
|
||
|
module.exports = devices;
|