diff --git a/docs/openHAB.md b/docs/openHAB.md index 2c0510f..fb681be 100644 --- a/docs/openHAB.md +++ b/docs/openHAB.md @@ -1,142 +1,220 @@ :exclamation: There is a greate Step-By-Step guide from user HolgiHab at openhab community ([Step-By-Step Guide]( https://community.openhab.org/t/step-by-step-guide-for-adding-tuya-bulbs-smart-life-to-oh2-using-tuya-mqtt-js-by-agentk/59371)). This guide is not only for light bulbs, but also applies to sockets. :exclamation: -## 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 +## Example items for OpenHAB 3.x Bindings + +### Tuya Smart Thermostat Radiator Valve behind Tuya Gateway + +### Things channels (configured via web): + +#### Thermostat mode: +Channel identifier: +``` +mode ``` -Switch tuya_kitchen_coffeemachine_mqtt "Steckdose Kaffeemaschine" () ["Switchable"] { - mqtt="<[broker:tuya////state:state:default:.*], - >[broker:tuya////command/on:command:ON:true], - >[broker:tuya////command/off:command:OFF:false]" +State: +``` +tuya/zgw1/1a24fkfffe6b4e24/dsp/4/state +``` +Example output: {"4":"auto"} +Possible values: auto/temp_auto/holiday/manual/comfort/eco/BOOST + + +Command: +``` +tuya/zgw1/dps/command +``` + +Outgoing Value Format: +``` +{"dps": 4, "set": "%s", "cid": "1a24fkfffe6b4e24"} +``` + +#### Temperature Setpoint +Channel identifier: +``` +setpoint +``` + +State: +``` +tuya/zgw1/1a24fkfffe6b4e24/dsp/2/state +``` +Example output: {"2": 220} + +Command: +``` +tuya/zgw1/dps/command +``` + +Incoming Value Transformations: +``` +JS:tuya-in.js +``` + +Outgoing Value Transformation: +``` +JS:tuya-out.js +``` + +Outgoing Value Format: +``` +{"dps": 2, "set": "%s", "cid": "1a24fkfffe6b4e24"} +``` + +#### Current Temperature +Channel identifier: +``` +temperature +``` + +State: +``` +tuya/zgw1/1a24fkfffe6b4e24/dsp/3/state +``` + +Incoming Value Transformations: +``` +JS:tuya-in.js +``` + +#### Valve percent +Channel identifier: +``` +valve_percent +``` + +State: +``` +tuya/zgw1/1a24fkfffe6b4e24/dsp/109/state +``` + +Command: +``` +tuya/zgw1/dps/command +``` + +Outgoing Value Format: +``` +{"dps": 109, "set": %s, "cid": "1a24fkfffe6b4e24"} +``` + +### Transformations +tuya-in.js: +``` +(function(i) { + return (i / 10) +})(input) +``` + +tuya-out.js: +``` +(function(i) { + return (i * 10) +})(input) + +``` + +### items/thermostat.items + +``` +String Radiator_Mode "Mode" { channel="mqtt:topic:home:zgw1dev1:mode" } +Number Radiator_Setpoint "Temperature setpoint [%.1f °C]" { channel="mqtt:topic:home:zgw1dev1:setpoint" } +Number Radiator_Temperature "Current temperature [%.1f °C]" { channel="mqtt:topic:home:zgw1dev1:temperature" } +Number Radiator_Valve_Percent "Valve percent [%d %%]" { channel="mqtt:topic:home:zgw1dev1:valve_percent" } +``` + +### sitemaps/home.sitemap + +``` +Frame label="Heating" { + Setpoint item=Radiator_Setpoint minValue=15 maxValue=30 step=0.5 + Selection item=Radiator_Mode mappings=[auto='Auto', temp_auto='Auto temp', manual='Manual', comfort='Comfort'] + Text item=Radiator_Setpoint + Text item=Radiator_Temperature + Text item=Radiator_Valve_Percent } - -Switch tuya_livingroom_ledstrip_tv "LED Regal" () ["Lighting"] { - mqtt="<[broker:tuya////state:state:default:.*], - >[broker:tuya////command/on:command:ON:true], - >[broker:tuya////command/off:command:OFF:false]" -} - ``` -### change color of lightbulb + + + +### Simple on/off switch with power measurement capability + +### Things channels (configured via web): + +#### Power switch +Channel identifier: +``` +power ``` -# .items -Group gTuyaLivingColor "Tuya color group" -Color tuya_livingroom_colorpicker "Stehlampe farbe" (LivingDining) - -String tuya_livingroom_ledstrip_tv_color "Set color [%s]" (gTuyaLivingColor, LivingDining) { - mqtt=">[broker:tuya////color:command:*:default]" -} - - - -# .rules -import org.openhab.core.library.types.HSBType; - -rule "Set HSB value of item RGBLed to RGB color value" - when - Item tuya_livingroom_colorpicker received command - then - var appName = "Colorpicker.livingroom" - var color = receivedCommand.toString; - - // get all colors and send it via mqtt if light ist enabled - gTuyaLivingColor.members.forEach[ i | - var name = i.name; - var stateName = name.toString.split("_color").get(0); - var stateItem = gTuyaLights.allMembers.filter [ conf | conf.name.contains(stateName.toString) ].head; - - if(stateItem.state == ON){ - logInfo(appName, name + " change to color: " + color); - i.sendCommand(color); - Thread::sleep(400); - } - ] - end +State: +``` +tuya/tuya_device_1/state +``` +Example output: {"4":"auto"} +Possible values: auto/temp_auto/holiday/manual/comfort/eco/BOOST +Command: +``` +tuya/tuya_device_1/command ``` -## Example items for OpenHAB 2.4 Bindings -### simple switch on/off - -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 -command topics as follows: +Custom On/Open Value: +``` +ON ``` - tuya////state - - tuya////command - +Custom Off/Closed Value: +``` +OFF ``` -If you prefer using configuration files vs PaperUI, it should look something like this: -See also OpenHAB 2.X MQTT binding [documentation](https://www.openhab.org/v2.4/addons/bindings/mqtt.generic/) - +#### Power consumption watts +Channel identifier: +``` +w ``` -Bridge mqtt:broker:myUnsecureBroker [ host="localhost", secure=false ] -{ - - Thing mqtt:topic:myCustomMQTT { - Channels: - Type switch : tuya_kitchen_coffeemachine_mqtt_channel "Kitchen Coffee Machine MQTT Channel" [ - stateTopic="tuya////state", - commandTopic="tuya////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" (gKitchen, gTuya) ["Switchable"] { - channel="mqtt:topic:myUnsecureBroker:myCustomMQTT:tuya_kitchen_coffeemachine_mqtt_channel" -} - +State: +``` +tuya/tuya_device_1/dps/19/state ``` -For one RGB bulb you would need a separate channel with the command topic set to -`tuya////color` and link that to your color item. +Incoming Value Transformations: +JS:tuya-energy.js +#### Power consumption volts +Channel identifier: +``` +v ``` -Bridge mqtt:broker:myUnsecureBroker [ host="localhost", secure=false ] -{ - Thing mqtt:topic:myCustomMQTT { - Channels: - Type colorHSB : livingroom_floorlamp_1_color "Livingroom floorlamp color MQTT Channel" [ - stateTopic="tuya/05200399bcddc2e02ec9/b58cf92e8bc5c899/192.168.178.49/state", - commandTopic="tuya/05200399bcddc2e02ec9/b58cf92e8bc5c899/192.168.178.49/color" - ] - } -} - -# *.item Example -Color tuya_livingroom_colorpicker "Floorlamp colorpicker" (gLivingroom){ - channel="mqtt:topic:myUnsecureBroker:myCustomMQTT:livingroom_floorlamp_1_color" -} - +State: +``` +tuya/tuya_device_1/dps/20/state ``` -#### Basic UI sitemap +Incoming Value Transformations: +JS:tuya-energy.js + +### transform/tuya-energy.js +``` +(function(i) { + return Math.ceil(i / 10) +})(input) ``` -Switch item=tuya_kitchen_coffeemachine_mqtt +### items/socket.items -# turn the color bulb off or on -Switch item=tuya_livingroom_colorpicker label="RGB lamp [%s]" +Switch Socket_Power "Socket" { channel="mqtt:topic:socket:power" } +Number Socket_W "Power (W)" { channel="mqtt:topic:socket:w" } +Number Socket_Vt "Power (V) [%s]" { channel="mqtt:topic:socket:v" } -# pick the color level to send to the color bulb via MQTT color Channel -Slider item=tuya_livingroom_colorpicker label="RGB lamp level [%s]" minValue=0 maxValue=100 step=1 +### sitemaps/home.sitempa -# color picked and sent via MQTT Color channel -Colorpicker item=tuya_livingroom_colorpicker label="RGB lamp color [%s]" icon="colorpicker" sendFrequency=30000 - - -``` +Switch item=Socket_Power +Text item=Socket_W +Text item=Socket_Vt \ No newline at end of file