mirror of
https://github.com/lehanspb/tuya-mqtt.git
synced 2025-12-16 17:54:36 +00:00
UPD: README and CHANGELOG
This commit is contained in:
@@ -7,7 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
|
|
||||||
## [2.0.1]
|
## [2.0.1]
|
||||||
### Added
|
### Added
|
||||||
- Added capability to set multiple dps values ofer MQTT-Command
|
- Added capability to set multiple dps values over MQTT-Command
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- MQTT-Topic no longer requires a device type
|
- MQTT-Topic no longer requires a device type
|
||||||
@@ -16,6 +16,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
|
|
||||||
## [2.0.0]
|
## [2.0.0]
|
||||||
### Added
|
### Added
|
||||||
|
- Added supprot for OH MQTT-Binding 2.4
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
|||||||
247
README.md
247
README.md
@@ -1,4 +1,4 @@
|
|||||||
# TuyaAPI-MQTT Client
|
# tuyAPI-MQTT Client
|
||||||
MQTT interface for Tuya home automation devices sold under various names.
|
MQTT interface for Tuya home automation devices sold under various names.
|
||||||
This is a wrapper script for the Project codetheweb/tuyapi. https://github.com/codetheweb/tuyapi
|
This is a wrapper script for the Project codetheweb/tuyapi. https://github.com/codetheweb/tuyapi
|
||||||
|
|
||||||
@@ -12,143 +12,239 @@ https://community.openhab.org/t/step-by-step-guide-for-adding-tuya-bulbs-smart-l
|
|||||||
Download this project to your openhab2-script-folder "/etc/openhab2/scripts" and install tuyapi from the same folder that the tuya-mqtt.js is in
|
Download this project to your openhab2-script-folder "/etc/openhab2/scripts" and install tuyapi from the same folder that the tuya-mqtt.js is in
|
||||||
```
|
```
|
||||||
cd /etc/openhab2/scripts
|
cd /etc/openhab2/scripts
|
||||||
git clone git@github.com:TheAgentK/tuyaapi_mqtt.git // this project
|
|
||||||
cd tuyaapi_mqtt
|
// clone this project
|
||||||
npm install //downloads codetheweb/tuyapi
|
git clone git@github.com:TheAgentK/tuya-mqtt.git
|
||||||
|
|
||||||
|
// change directory to the project directory
|
||||||
|
cd tuya-mqtt
|
||||||
|
|
||||||
|
//installs this project along with codetheweb/tuyapi project
|
||||||
|
npm install
|
||||||
```
|
```
|
||||||
|
|
||||||
This involves MIM of the connection. Instructions can be found here: https://github.com/codetheweb/tuyapi/blob/master/docs/SETUP.md
|
See the setup instructions found here: https://github.com/codetheweb/tuyapi/blob/master/docs/SETUP.md
|
||||||
|
|
||||||
Create your configuration file:
|
|
||||||
|
## Basic Usage
|
||||||
|
|
||||||
|
### Create your configuration file:
|
||||||
```
|
```
|
||||||
cp config.json.sample config.json
|
cp config.json.sample config.json
|
||||||
nano config.json // edit the configuration file
|
|
||||||
|
// edit the configuration file
|
||||||
|
nano config.json
|
||||||
```
|
```
|
||||||
|
|
||||||
Start command
|
### Start command
|
||||||
```
|
```
|
||||||
node tuya-mqtt.js
|
node tuya-mqtt.js
|
||||||
|
|
||||||
// For debugging purpose
|
// For debugging purpose, to use DEBUG : https://www.npmjs.com/package/debug
|
||||||
|
|
||||||
|
//on Linux machines at the bash command prompt:
|
||||||
DEBUG=* tuya-mqtt.js
|
DEBUG=* tuya-mqtt.js
|
||||||
```
|
|
||||||
|
|
||||||
MQTT Topic
|
|
||||||
```
|
|
||||||
Current device state:
|
|
||||||
tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/state
|
|
||||||
|
|
||||||
|
// on Windows machines at the cmd.exe command prompt:
|
||||||
|
Set DEBUG=* tuya-mqtt.js
|
||||||
|
```
|
||||||
|
URL to [DEBUG](https://www.npmjs.com/package/debug)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### MQTT Topic's (send data)
|
||||||
|
```
|
||||||
Change device state (by topic):
|
Change device state (by topic):
|
||||||
tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/command/<STATE>
|
tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/<STATE>
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/command/on
|
- tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/on
|
||||||
tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/command/off
|
- tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/off
|
||||||
|
- tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/ON
|
||||||
|
- tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/OFF
|
||||||
|
- tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/1
|
||||||
|
- tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/0
|
||||||
|
- tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/toggle
|
||||||
|
- tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/TOGGLE
|
||||||
|
- tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/{ "dps": 1, "set": true }
|
||||||
|
- tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/{ "multiple": true, "data": { "1": true, "7": true } }
|
||||||
|
|
||||||
Change device state (by payload)
|
Change device state (by payload)
|
||||||
Use with OpenHAB 2.X MQTT bindings or others where only a single command topic is preferred
|
Use with OpenHAB 2.X MQTT bindings or others where only a single command topic is preferred:
|
||||||
tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/command // State as Payload (on,off)
|
NOTE: notice that nothing follows the word command, DO NOT but a "/" in after command.
|
||||||
|
|
||||||
Color for lightbulb:
|
tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
tuya/lightbulb/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/color // Color as Payload as hexColor
|
"ON"
|
||||||
|
"OFF"
|
||||||
|
"on"
|
||||||
|
"off"
|
||||||
|
"1"
|
||||||
|
"0"
|
||||||
|
"toggle"
|
||||||
|
"TOGGLE"
|
||||||
|
"{ \"dps\": 1, \"set\": true }"
|
||||||
|
"{ \"multiple\": true, \"data\": { \"1\": true, \"7\": true } }"
|
||||||
|
|
||||||
Read data from device:
|
Change color of lightbulb (payload as HSB-Color)
|
||||||
tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/dps // returns JSON.stringify(dps) values, use with care, does not always contain all dps values
|
tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/color
|
||||||
|
|
||||||
tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/dps/<tuya-dps-id> // return single dps data value
|
Example:
|
||||||
|
64,0,100
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Issues
|
### MQTT Topic's (read data)
|
||||||
|
```
|
||||||
|
Current device state (allways DPS[1]-Value):
|
||||||
|
tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/state
|
||||||
|
|
||||||
|
Device DPS-Values:
|
||||||
|
// returns JSON.stringify(dps) values, use with care, does not always contain all dps values
|
||||||
|
tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/dps
|
||||||
|
|
||||||
|
// return single dps data value
|
||||||
|
tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/dps/<tuya-dps-id>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Issues
|
||||||
There are some reliability issues with tuyapi. Latest changes changed the syntax but still getting error maybe at an even higher rate.
|
There are some reliability issues with tuyapi. Latest changes changed the syntax but still getting error maybe at an even higher rate.
|
||||||
|
|
||||||
All questions regarding the TuyaAPI please ask in the project https://github.com/codetheweb/tuyapi .
|
All questions regarding the tuyAPI please ask in the project https://github.com/codetheweb/tuyapi .
|
||||||
|
|
||||||
|
|
||||||
## Example items for OpenHAB 1.x Bindings (still works with >2.4 but only if legacy 1.x MQTT bindings are enabled)
|
## Example items for OpenHAB 1.x Bindings (still works with OH > 2.4 but only if legacy 1.x MQTT bindings are enabled)
|
||||||
#### simple switch on/off
|
### simple switch on/off
|
||||||
```
|
```
|
||||||
|
|
||||||
Switch tuya_kitchen_coffeemachine_mqtt "Steckdose Kaffeemaschine" <socket> (<GROUPS>) ["Switchable"] {
|
Switch tuya_kitchen_coffeemachine_mqtt "Steckdose Kaffeemaschine" <socket> (<GROUPS>) ["Switchable"] {
|
||||||
mqtt="<[broker:tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/state:state:default:.*],
|
mqtt="<[broker:tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/state:state:default:.*],
|
||||||
>[broker:tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/command/on:command:ON:true],
|
>[broker:tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/on:command:ON:true],
|
||||||
>[broker:tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/command/off:command:OFF:false]"
|
>[broker:tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/off:command:OFF:false]"
|
||||||
}
|
}
|
||||||
|
|
||||||
Switch tuya_livingroom_ledstrip_tv "LED Regal" <lightbulb> (<GROUPS>) ["Lighting"] {
|
Switch tuya_livingroom_ledstrip_tv "LED Regal" <lightbulb> (<GROUPS>) ["Lighting"] {
|
||||||
mqtt="<[broker:tuya/lightbulb/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/state:state:default:.*],
|
mqtt="<[broker:tuya/lightbulb/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/state:state:default:.*],
|
||||||
>[broker:tuya/lightbulb/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/command/on:command:ON:true],
|
>[broker:tuya/lightbulb/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/on:command:ON:true],
|
||||||
>[broker:tuya/lightbulb/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/command/off:command:OFF:false]"
|
>[broker:tuya/lightbulb/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command/off:command:OFF:false]"
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
#### change color of lightbulb
|
|
||||||
|
### change color of lightbulb
|
||||||
```
|
```
|
||||||
|
|
||||||
# .items
|
# .items
|
||||||
Group gTuyaLivingColor "Tuya color group" <lightbulb>
|
Group gTuyaLivingColor "Tuya color group" <lightbulb>
|
||||||
Color tuya_livingroom_colorpicker "Stehlampe farbe" (LivingDining, Wohnzimmer)
|
Color tuya_livingroom_colorpicker "Stehlampe farbe" (LivingDining)
|
||||||
|
|
||||||
String tuya_livingroom_ledstrip_tv_color "Set color [%s]" (gTuyaLivingColor, LivingDining, Wohnzimmer) {
|
String tuya_livingroom_ledstrip_tv_color "Set color [%s]" (gTuyaLivingColor, LivingDining) {
|
||||||
mqtt=">[broker:tuya/lightbulb/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/color:command:*:default]"
|
mqtt=">[broker:tuya/lightbulb/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/color:command:*:default]"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# .rules
|
# .rules
|
||||||
import org.openhab.core.library.types.HSBType;
|
import org.openhab.core.library.types.HSBType;
|
||||||
|
|
||||||
rule "Set HSB value of item RGBLed to RGB color value"
|
rule "Set HSB value of item RGBLed to RGB color value"
|
||||||
when
|
when
|
||||||
Item tuya_livingroom_colorpicker received command
|
Item tuya_livingroom_colorpicker received command
|
||||||
then
|
then
|
||||||
var appName = "Colorpicker.livingroom"
|
var appName = "Colorpicker.livingroom"
|
||||||
var color = receivedCommand.toString;
|
var color = receivedCommand.toString;
|
||||||
|
|
||||||
// get all colors and send it via mqtt if light ist enabled
|
// get all colors and send it via mqtt if light ist enabled
|
||||||
gTuyaLivingColor.members.forEach[ i |
|
gTuyaLivingColor.members.forEach[ i |
|
||||||
var name = i.name;
|
var name = i.name;
|
||||||
var stateName = name.toString.split("_color").get(0);
|
var stateName = name.toString.split("_color").get(0);
|
||||||
var stateItem = gTuyaLights.allMembers.filter [ conf | conf.name.contains(stateName.toString) ].head;
|
var stateItem = gTuyaLights.allMembers.filter [ conf | conf.name.contains(stateName.toString) ].head;
|
||||||
|
|
||||||
if(stateItem.state == ON){
|
if(stateItem.state == ON){
|
||||||
logInfo(appName, name + " change to color: " + color);
|
logInfo(appName, name + " change to color: " + color);
|
||||||
i.sendCommand(color);
|
i.sendCommand(color);
|
||||||
Thread::sleep(400);
|
Thread::sleep(400);
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Example items for OpenHAB 2.4 Bindings
|
## Example items for OpenHAB 2.4 Bindings
|
||||||
#### simple switch on/off
|
### simple switch on/off
|
||||||
|
|
||||||
With OpenHAB 2.X MQTT bindings you can add devices using a generic MQTT Thing via PaperUI or
|
With OpenHAB 2.X MQTT bindings you can add devices using a generic MQTT Thing via PaperUI or
|
||||||
configuration files. For PaperUI simply at the generic MQTT Thing and set the state and
|
configuration files. For PaperUI simply at the generic MQTT Thing and set the state and
|
||||||
command topics as follows:
|
command topics as follows:
|
||||||
```
|
```
|
||||||
tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/state
|
|
||||||
tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/command
|
tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/state
|
||||||
```
|
|
||||||
If you prefer using configuration files vs PaperUI, it should look something like this:
|
tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command
|
||||||
|
|
||||||
```
|
```
|
||||||
Bridge mqtt:broker:myUnsecureBroker [ host="192.168.0.42", secure=false ]
|
|
||||||
{
|
If you prefer using configuration files vs PaperUI, it should look something like this:
|
||||||
Thing mqtt:topic:mything {
|
See also OpenHAB 2.X MQTT binding [documentation](https://www.openhab.org/v2.4/addons/bindings/mqtt.generic/)
|
||||||
Channels:
|
|
||||||
Type switch : tuya_kitchen_coffeemachine_mqtt "Steckdose Kaffeemaschine" [ stateTopic="tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/state", commandTopic="tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/command" ]
|
```
|
||||||
}
|
|
||||||
}
|
Bridge mqtt:broker:myUnsecureBroker [ host="localhost", secure=false ]
|
||||||
|
{
|
||||||
|
|
||||||
|
Thing mqtt:topic:myCustomMQTT {
|
||||||
|
Channels:
|
||||||
|
Type switch : tuya_kitchen_coffeemachine_mqtt "Kitchen Coffee Machine MQTT Channel" [
|
||||||
|
stateTopic="tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/state",
|
||||||
|
commandTopic="tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/command",
|
||||||
|
|
||||||
|
// optional custom mqtt-payloads for ON and OFF
|
||||||
|
on="{ \"dps": 1, \"set\": true },
|
||||||
|
off="0"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# *.item Example
|
||||||
|
Switch tuya_kitchen_coffeemachine_mqtt "Kitchen Coffee Machine Switch" <socket> (gKitchen, gTuya) ["Switchable"] {
|
||||||
|
channel="mqtt:topic:myMosquitto:tuya:coffeemachine"
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
For one RGB bulb you would need a separate channel with the command topic set to
|
||||||
|
`tuya/<tuyAPI-id>/<tuyAPI-key>/<tuyAPI-ip>/color` and link that to your color item.
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Bridge mqtt:broker:myUnsecureBroker [ host="localhost", secure=false ]
|
||||||
|
{
|
||||||
|
|
||||||
|
Type colorHSB : livingroom_floorlamp_1_color "Livingroom floorlamp color MQTT Channel" [
|
||||||
|
stateTopic="tuya/lightbulb/05200399bcddc2e02ec9/b58cf92e8bc5c899/192.168.178.49/state",
|
||||||
|
commandTopic="tuya/lightbulb/05200399bcddc2e02ec9/b58cf92e8bc5c899/192.168.178.49/color"
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# *.item Example
|
||||||
|
Color tuya_livingroom_colorpicker "Floorlamp colorpicker" (gLivingroom){
|
||||||
|
channel="mqtt:topic:myMosquitto:tuya:livingroom_floorlamp_1_color"
|
||||||
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
For a light with color you would need a separate channel with the command topic set to
|
|
||||||
tuya/<tuyaAPI-type>/<tuyaAPI-id>/<tuyaAPI-key>/<tuyaAPI-ip>/color and link that to your
|
|
||||||
color item.
|
|
||||||
|
|
||||||
#### Basic UI sitemap
|
#### Basic UI sitemap
|
||||||
```
|
```
|
||||||
Switch item=tuya_kitchen_coffeemachine_mqtt mappings=[ON="On", OFF="Off"]
|
|
||||||
Switch item=tuya_livingroom_ledstrip_tv mappings=[ON="On", OFF="Off"]
|
Switch item=tuya_kitchen_coffeemachine_mqtt
|
||||||
|
|
||||||
|
|
||||||
# Colorpicker for Lightbulbs
|
# Colorpicker for Lightbulbs
|
||||||
Colorpicker item=tuya_livingroom_colorpicker label="RGB Lampenfarbe" icon="slider" sendFrequency=30000
|
Colorpicker item=tuya_livingroom_colorpicker label="RGB lamp color" sendFrequency=30000
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Contributors
|
## Contributors
|
||||||
@@ -156,6 +252,7 @@ Colorpicker item=tuya_livingroom_colorpicker label="RGB Lampenfarbe" icon="slide
|
|||||||
- [tsightler](https://github.com/tsightler)
|
- [tsightler](https://github.com/tsightler)
|
||||||
- [Tycale](https://github.com/Tycale)
|
- [Tycale](https://github.com/Tycale)
|
||||||
- [crashdummymch](https://github.com/crashdummymch)
|
- [crashdummymch](https://github.com/crashdummymch)
|
||||||
|
- [GadgetAngel](https://github.com/GadgetAngel)
|
||||||
|
|
||||||
|
|
||||||
## Related Projects:
|
## Related Projects:
|
||||||
|
|||||||
Reference in New Issue
Block a user