
Available from:
Amazon.de
Conrad.com
Manufacturer:
Proficook.de
Flashed with:
Tuya-Convert
GPIO # | Component |
---|---|
GPIO00 | None |
GPIO01 | Tuya Tx |
GPIO02 | None |
GPIO03 | Tuya Rx |
GPIO04 | None |
GPIO05 | None |
GPIO09 | None |
GPIO10 | None |
GPIO12 | None |
GPIO13 | None |
GPIO14 | None |
GPIO15 | None |
GPIO16 | None |
FLAG | None |
{"NAME":"PC-WKS 1167G","GPIO":[0,107,0,108,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54}
Flashing
Tuya-Convert is the more convenient option for installing Tasmota but it is possible to flash over serial.
When flashing using Tuya-Convert press and hold 45°C button for 5 seconds to enter fast flashing mode and follow the normal tuya-convert procedure.
When flashing via serial connection remember to pull the MCU Reset Pin to ground. It’s a HR7P169BFGSF from Easysoft so pin 4 must be connected to ground.
Functions
MCU Product ID: {“p”:”h6MjwrnldNTu4kX3”,”v”:”1.0.0”,”m”:1}
dpID 101
controls kettle modes (corresponds to device buttons)
0
- heat to 45°C then maintain temperature for 2 hours1
- heat to 60°C then maintain temperature for 2 hours2
- heat to 85°C then maintain temperature for 2 hours3
- heat to 100°C then maintain temperature for 3 minutes4
- heat to 100°C (power button flashing when active)5
- heat to preset temperature (70°C by default, can be changed usingdpID 102
) then maintain temperature for 2 hours (keep warm button)6
- reset any running program and enter standby mode (pulsating power button)
dpID 102
sets water temperature for mode 5
(keep warm button), recommended 35 - 100 range
dpID 104
error notification:
0x00
- no error0x01
- kettle empty0x04
- kettle overheated due to too much or too little water
dpID 105
reports current water temperature
dpID 106
reports kettle status:
1
- kettle removed from base2
- standby mode3
- heating to programmed target temperature4
- cooling down to programmed target temperature5
- maintaining programmed target temperature
dpID 107
reports approximate time until programmed target temperature is reached or remaining time for maintaining programmed target temperature when in mode 5
. Cannot be changed!
dpID 108
is still unknown, it is always reporting 5
and doesn’t respond to any of the TuyaSend commands.
Configuration
After applying the template and configuring Wi-Fi and MQTT the preconfigured relay will not control anything.
For controlling the kettle modes you’ll have to use the TuyaSend
command:
TuyaSend4 101,0
- 45°CTuyaSend4 101,1
- 60°CTuyaSend4 101,2
- 85°CTuyaSend4 101,3
- 100°CTuyaSend4 101,4
- 100°C without maintaining tempTuyaSend4 101,5
- keep warmTuyaSend4 101,6
- standby mode and reset if running a program It is required to use101,6
if you want to switch from one temperature to another.
Set target temperature with:
TuyaSend2 102,<value>
or
TuyaMCU 21,102
to use dimmer to set temperature. With this you can use the slider or Dimmer
command and it will prevent you from accidentally setting temperatures higher than 100°C. Might potentially create issues if you don’t have another relay configured.
If you don’t have an external solution for easy control you can map a dummy relay for controlling kettle modes and link them with TuyaSend using rules. States will not be in sync if controlled with other means. Set PowerOnState 0
to avoid weirdness on device reset.
Example:
Use preconfigured Relay1 to activate 45°C mode.
Rule ON Power1#State=1 DO TuyaSend4 101,0 ENDON ON Power1#State=0 DO TuyaSend4 101,6 ENDON
Send water temperature to an MQTT topic:
Rule ON TuyaReceived#DpType2Id105 DO Publish stat/%topic%/TEMPERATURE %value% ENDON
Override device button action and TuyaSend4 101,x
command. Has a minor side effect of multiple beeps.
Example overrides 45°C (mode 0
) and instead controls another Tasmota light.
Rule ON TuyaReceived#DpType4Id101=0 DO Backlog TuyaSend4 101,6; Publish cmnd/coffee_light/POWER toggle ENDON
Put kettle in standby mode when keep warm timer reaches 110 minutes aka keep warm function lasts only 10 minutes now.
Rule ON TuyaReceived#DpType2Id107=110 DO TuyaSend4 101,6 ENDON
I’m using this rule because I mostly heat water to custom temps with mode 5 and I don’t need the kettle to keep heating the water for the next 2 hours.
TuyaMCU 11,108
sets the relay to dpID 108
which avoids superfluous MCU messages that are sent when issuing a command to a nonexistent dpID.
Home Assistant Configuration
This implementation is suited to my specific needs and should serve as a blueprint, not a definite solution.
First set SetOption66 1
to enable sending all TuyaReceived data over MQTT!
sensor:
- platform: mqtt
name: "Kettle Temperature"
state_topic: "tele/kettle/RESULT"
value_template: >
{% if value_json.TuyaReceived is defined and value_json['TuyaReceived'].DpType2Id105 is defined %}
{{ value_json['TuyaReceived'].DpType2Id105 }}
{% else %}
{{ states('sensor.kettle_temperature') }}
{% endif %}
unit_of_measurement: "°C"
availability_topic: "tele/kettle/LWT"
payload_available: "Online"
payload_not_available: "Offline"
device_class: temperature
- platform: mqtt
name: "Kettle Time Remaining"
state_topic: "tele/kettle/RESULT"
value_template: >
{% if value_json.TuyaReceived is defined and value_json['TuyaReceived'].DpType2Id107 is defined %}
{{ value_json['TuyaReceived'].DpType2Id107 | int }}
{% elif is_state('sensor.kettle_status', 'Standby') %}
0
{% else %}
{{ states('sensor.kettle_time_remaining') | int }}
{% endif %}
unit_of_measurement: "min"
availability_topic: "tele/kettle/LWT"
payload_available: "Online"
payload_not_available: "Offline"
icon: mdi:timer
- platform: mqtt
name: "Kettle Status"
state_topic: "tele/kettle/RESULT"
availability_topic: "tele/kettle/LWT"
payload_available: "Online"
payload_not_available: "Offline"
value_template: >
{% if value_json.TuyaReceived is defined and value_json['TuyaReceived'].DpType4Id106 is defined %}
{% if value_json['TuyaReceived'].DpType4Id106 == 1 %}
Kettle removed
{% elif value_json['TuyaReceived'].DpType4Id106 == 2 %}
Standby
{% elif value_json['TuyaReceived'].DpType4Id106 == 3 %}
Heating water
{% elif value_json['TuyaReceived'].DpType4Id106 == 4 %}
Cooling down
{% elif value_json['TuyaReceived'].DpType4Id106 == 5 %}
Maintaining temperature
{% endif %}
{% else %}
{{ states('sensor.kettle_status') }}
{% endif %}
icon: mdi:kettle-steam
- platform: mqtt
name: "Kettle Error"
state_topic: "tele/kettle/RESULT"
availability_topic: "tele/kettle/LWT"
payload_available: "Online"
payload_not_available: "Offline"
value_template: >
{% if value_json.TuyaReceived is defined and value_json['TuyaReceived'].DpType5Id104 is defined %}
{% if value_json['TuyaReceived'].DpType5Id104 == "0x00" %}
OK
{% elif value_json['TuyaReceived'].DpType5Id104 == "0x01" %}
Empty
{% elif value_json['TuyaReceived'].DpType5Id104 == "0x04" %}
Overheated
{% endif %}
{% else %}
{{ states('sensor.kettle_error') }}
{% endif %}
icon: mdi:kettle-alert
Switch is created to easily turn the kettle off and read whether its running or in standby for automations. Change “payload_on” to your favorite mode.
switch:
- platform: mqtt
name: "Kettle"
state_topic: "tele/kettle/RESULT"
value_template: >
{% if value_json.TuyaReceived is defined and value_json['TuyaReceived'].DpType4Id106 is defined %}
{% if value_json['TuyaReceived'].DpType4Id106 <= 2 %}
OFF
{% elif value_json['TuyaReceived'].DpType4Id106 >= 3 %}
ON
{% endif %}
{% endif %}
state_on: "ON"
state_off: "OFF"
command_topic: "cmnd/kettle/TuyaSend4"
payload_on: "101,4"
payload_off: "101,6"
availability_topic: "tele/kettle/LWT"
payload_available: "Online"
payload_not_available: "Offline"
retain: false
icon: mdi:kettle
qos: 1
Create a modular “switch” where input select triggers automation for complete control.
input_select:
kettle_set:
name: Set Kettle Mode
options:
- 'Keep Warm 45C :101,0'
- 'Keep Warm 60C :101,1'
- 'Keep Warm 85C :101,2'
- 'Keep Warm 100C :101,3'
- 'Quick 100C :101,4'
- 'Keep Warm Custom :101,5'
- 'Standby :101,6'
automation:
- id: turn on kettle mode
initial_state: true
alias: Turn on Kettle Mode
trigger:
- entity_id: input_select.kettle_set
platform: state
action:
service: mqtt.publish
data_template:
topic: 'cmnd/kettle/TuyaSend4'
payload: >
{% set dta = trigger.to_state.state %}
{{dta.split(':')[1]}}
Set temperature where input number triggers an automation.
input_number:
kettle_temp:
name: Kettle Temperature
initial: 95
min: 35
max: 100
step: 1
unit_of_measurement: "°C"
automations:
- id: set kettle temperature
initial_state: true
alias: Set Kettle Temperature
trigger:
- entity_id: input_number.kettle_temp
platform: state
action:
service: mqtt.publish
data_template:
topic: 'cmnd/kettle/TuyaSend2'
payload: "102,{{ trigger.to_state.state | int }}"
by sthope and blakadder