logo elektroda
logo elektroda
X
logo elektroda

How to Change Firmware on PH-W218 WiFi 8-in-1 Water Quality Tester with CB3S Chip?

Upright6771 13290 99
Best answers

How can I change the firmware on a PH-W218 water quality tester with a CB3S chip and get started with Home Assistant integration?

Treat it as a TuyaMCU device and start with the TuyaMCU flashing/setup guide for dpID mapping in Home Assistant; since you already know the datapoints, the integration should be straightforward [#21131597] Before changing anything, make a 2 MB backup with the BK7231GUIFlashTool so you can restore the original firmware later [#21132998] The display should keep working after flashing because the Wi‑Fi module only handles communication and the secondary MCU does the actual processing, so you mainly need to configure OpenBeken to send/receive the right data [#21134253] For the CB3S flashing step, use ltchiptool with TX→RX, RX→TX, GND→GND, VCC→VCC; start the read/flash process and then power the module, trying 3 V first and 5 V if needed [#21134490] If a channel type is missing, you can use ReadOnly or custom MQTT/Home Assistant discovery, and the firmware itself can be updated via OTA to the latest public release when needed [#21132998] [#21137789] [#21137820]
Generated by the language model.
ADVERTISEMENT
  • #61 21150612
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    It is possible to make a custom panel with HTML, JS and CSS:
    Alternative control html page for TOMPD-63-WIFI
    This way you can also do rounding in the any way you like.
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #62 21166867
    Nordlicht77
    Level 9  
    Posts: 67
    Board Language: german
    I have ordered another device.
    I think the manufacturer has had a tinkering session again. I can't get the device flashed and this message
    Code: Arduino
    Log in, to see the code


    Code: Arduino
    Log in, to see the code
  • #63 21177106
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    So as usual, make sure to disconnected TuyaMCU first (desolder the MCU or cut traces or put it in reset), make sure you power your device well, shorten your wires, try lower baud, etc...

    Let me know if you've fixed the issue @Nordlicht77 , I've flashed hundreds of devices, this just straight up has to work. Check out our Elektroda flashing guides, by the way:
    https://www.youtube.com/playlist?list=PLzbXEc2ebpH0CZDbczAXT94BuSGrd_GoM
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #64 21198642
    alfredtorch
    Level 3  
    Posts: 6
    Hi,

    Completely new to OpenBeken, I was able to desolder the MCU and flash a new firmware on it.

    However, I used the current bat script and I don't have the same output.


    What should I do?

    thank you
    Max

    Screenshot of the OpenBK7231N user interface showing sensor status and settings.
    Microcontroller on a workbench with connected wires. Computer screen displaying the BK7231 firmware flashing tool and a file explorer window.
  • #65 21199762
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    Remove starting of tmSensor driver in autoexec.bat. Someone must have put it there by mistake.
    Helpful post? Buy me a coffee.
  • #66 21201772
    alfredtorch
    Level 3  
    Posts: 6
    Thank you for your feedback. I made the update in the bat file. However, it didn't solve the empty values. How can I check the communication with the Co-MCU is working?

    Maybe the issue origin is a weak solder connection. Do you think it's hardware or more software related?

    Sorry for all my questions. I'm new to OpenBeken and wondering about its ingredients.

    Have a great weekend

    OpenBK7231N user interface showing temperature readings and switch statuses.
  • #67 21201832
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    Is the WiFI module connected physically to the MCU? Some people desolder WiFi module and forget to solder back the pads.

    What is happening in the Web App log, are there heartbeat packets from TuyaMCU?

    Maybe you need to change baud to 115200?
    Helpful post? Buy me a coffee.
  • #68 21202760
    alfredtorch
    Level 3  
    Posts: 6
    Thank you for your fast reply.

    HeartBeat responded with an OK. Is this the expected result? Does this mean that the baud rate is correct?
    I changed it to 115200. However there is no value change in the dashboard

    The only thing I did is to upload the firmware and the autostart.bat procedure.
    Is there a crucial step missing?

    Screenshot of OpenBK7231N_0DE014F4 Command Tool showing confirmation of the tuyaMcu_sendHeartbeat command. Screenshot of the OpenBK7231N_0DE014F4 command tool interface. User interface showing the status of two switches and measurements of temperature, pH, and other values, all showing 0.00C.
  • #69 21202813
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    OK just means that console command was sent.

    You need to open the Web App, check the log, and check the log for TuyaMCU information, like heartbeat_valid, etc. Something like:
    
    ExtraDebug:TuyaMCU:TuyaMCU heartbeat_valid = 0, product_information_valid=0, self_processing_mode = 1, wifi_state_valid = 0, wifi_state_timer=0
    

    Enable extradebug log level just to be sure.

    It should be valid for either 9600 baud or 115200...
    Helpful post? Buy me a coffee.
  • #70 21202951
    alfredtorch
    Level 3  
    Posts: 6
    Good morning,

    I had some feedback received from TuyaMCU. I think I'm missing some important steps in the configuration like pinout or...

    Thank you,


    Screenshot of log messages from TuyaMCU. Screenshot of TuyaMCU interface logs containing a series of debugging information about network status and heartbeat.
  • #71 21203038
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    That's very strange, I haven't seen that path used before by the TuyaMCU. It seems it does not respect forced WiFi state yet, so I've added a patch:
    https://github.com/openshwprojects/OpenBK7231...mmit/ead3ef589be69afba614df942647785d778c14f4
    Can you do OTA, then power off and on, and retry?


    PS: so which baud turned out to be ok?
    Helpful post? Buy me a coffee.
  • #72 21203116
    alfredtorch
    Level 3  
    Posts: 6
    I uploaded the latest version. And changed the baud rate to 115200. It started to provide some values on the dashboard (even if they are not completely the same as on the display). However at this speed a lot of errors are also thrown. Setting it back to 9600 doesn't change at all, only the debug output is reduced.


    Screenshot of OpenBK7231N interface displaying temperature, pH, TDS, and ORP data.
    Screenshot of the dashboard OpenBK7231N_0DE014F4 displaying various data and indicators. Screenshot of debugging console showing messages related to TuyaMCU interface operation and commands changing transmission speed.
  • #73 21203123
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    The baud setting you had in this post:
    https://www.elektroda.com/rtvforum/topic4061780-60.html#21202951
    was good. Please do NOT change it. Please revert the correct baud setting, save autoexec, and do full power off and on (disconnect device from the grid so MCU reboot) and then check.

    Then retry and report here, along with log screenshots.
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #74 21203138
    alfredtorch
    Level 3  
    Posts: 6
    Seems to be better working now! 9600 was the right number.

    
    //starte TuyaMCU
    startDriver TuyaMCU
    tuyaMcu_defWiFiState 4
    tuyaMcu_setBaudRate 9600
    //starte set ip to NTP
    startDriver NTP
    ntp_setServer 172.20.48.1
    ntp_timeZoneOfs 2
    setChannelType 1  temperature_div10
    setChannelLabel 1 "Water temperature"
    linkTuyaMCUOutputToChannel 8 val 1
    addRepeatingEvent 15 -1 publishFloat temperatur $CH1/10 0 2 
    
    setChannelType 2 temperature_div10
    setChannelLabel 2 "High temperature alarm value"
    linkTuyaMCUOutputToChannel 102 val 2
    addRepeatingEvent 15 -1 publishFloat temperatur_max $CH2/10 0 2 
    //set value to Channel 102 TuyaMcu
    //set virtual button temp max
    setChannelLabel 20 "Temp max"
    setChannelType 20  Toggle
    setChannel 20 0
    
    setChannelType 3 temperature_div10
    setChannelLabel 3 "Low temperature alarm value"
    linkTuyaMCUOutputToChannel 103 val 3
    addRepeatingEvent 15 -1 publishFloat temperatur_min $CH3/10 0 2 
    //set value to Channel 103 TuyaMcu
    //set virtual button temp min
    setChannelLabel 21 "Temp min"
    setChannelType 21  Toggle
    
    setChannelType 4  Ph
    setChannelLabel 4 "PH Aktuell"
    linkTuyaMCUOutputToChannel 106 val 4
    addRepeatingEvent 15 -1 publishFloat ph $CH4/100 0 2 
    
    setChannelType 5  Ph
    setChannelLabel 5 "Warning pH value higher than set"
    linkTuyaMCUOutputToChannel 107 val 5
    addRepeatingEvent 15 -1 publishFloat ph_max $CH5/100 0 2 
    //set value to Channel 107 TuyaMcu
    //set virtual button ph max
    setChannelLabel 22 "PH max"
    setChannelType 22  Toggle
    
    setChannelType 6  Ph
    setChannelLabel 6 "Warning pH value lower than set"
    linkTuyaMCUOutputToChannel 108 val 6
    addRepeatingEvent 15 -1 publishFloat ph_min $CH6/100 0 2 
    //set value to Channel 108 TuyaMcu
    //set virtual button ph min
    setChannelLabel 23 "PH min"
    setChannelType 23  Toggle
    
    setChannelType 7  Tds
    setChannelLabel 7 "TDS value"
    linkTuyaMCUOutputToChannel 111 bool 7
    addRepeatingEvent 15 -1 publishFloat tds $CH7 0 2 
    
    setChannelType 8  Tds
    setChannelLabel 8 "Warning TDS value higher than set"
    linkTuyaMCUOutputToChannel 112 val 8
    addRepeatingEvent 15 -1 publishFloat tds_max $CH8 0 2 
    //set value to Channel 108 TuyaMcu
    //set virtual button tds max
    setChannelLabel 24 "Tds max"
    setChannelType 24  Toggle
    
    setChannelType 9  Tds
    setChannelLabel 9 "Warning TDS  value lower than set"
    linkTuyaMCUOutputToChannel 113 val 9
    addRepeatingEvent 15 -1 publishFloat tds_min $CH9 0 2 
    //set value to Channel 113 TuyaMcu
    fakeTuyaPacket 55AA03070008710200040000000088
    //set virtual button tds min
    setChannelLabel 25 "Tds min"
    setChannelType 25  Toggle
    
    setChannelType 10  Orp
    setChannelLabel 10 "ORP value"
    linkTuyaMCUOutputToChannel 131 val 10
    addRepeatingEvent 15 -1 publishFloat orp $CH10 0 0 
    
    setChannelType 11  Orp
    setChannelLabel 11 "ORP high alarm value"
    linkTuyaMCUOutputToChannel 132 val 11
    addRepeatingEvent 15 -1 publishFloat orp_max $CH11 0 0 
    //set value to Channel 132 TuyaMcu
    //set virtual button orp max
    setChannelLabel 26 "Orp max"
    setChannelType 26  Toggle
    
    setChannelType 12  Orp
    setChannelLabel 12 "ORP low alarm value"
    linkTuyaMCUOutputToChannel 133 val 12
    addRepeatingEvent 15 -1 publishFloat orp_low $CH12 0 0 
    //set value to Channel 1133 TuyaMcu
    //set virtual button orp min
    setChannelLabel 27 "Orp min"
    setChannelType 27  Toggle
    
    tuyaMcu_sendQueryState
    delay_s 120 // first start wait values
    again:
    delay_s 15
    // temperature values check set  temperatur_max or  temperatur_min Buttom to on or off
    if $CH1>$CH2 then setChannel 20 1 
    if $CH1<$CH2 then setChannel 20 0 
    if $CH1<$CH3 then setChannel 21 1 
    if $CH1>$CH3 then setChannel 21 0 
    // Ph value check set  ph_max or  ph_min Butt
    


    OpenBK7231N interface display with temperature, pH, and TDS information.
  • #75 21508482
    danededane
    Level 2  
    Posts: 3
    Hi guys, you seem to know a lot about the PH-W218 WiFi 8-in-1 Water Quality Tester with CB3S Chip.

    My device keeps detecting my PH buffer wrong and I would really just like to make it forget everything and start over.

    Does anyone know how to reset all info the device has about PH calibration?

    I've tried all button combinations but nothing reset the calibration nor factory reset the device completely.
  • #76 21508535
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    Are you still using Tuya firmware?
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #77 21508540
    danededane
    Level 2  
    Posts: 3
    >>21508535 Hi, yes so far I am.
    I just, right now, took a new pH sensor and tried to calibrate without trouble so maybe it was just defective?
    I still think it's a little odd that it's not possible to like reset the calibration or factory reset the whole thing.
  • #78 21508816
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    Maybe you can force it by removing and wiping data from Tuya app? There is this option - "Remove and wipe data"
    Helpful post? Buy me a coffee.
  • #79 21509970
    danededane
    Level 2  
    Posts: 3
    >>21508816 I'll try that next time the issue occurs. Thanks.
  • #80 21600487
    Dinner
    Level 5  
    Posts: 3
    Hello everyone,
    I’ve been following the progress on the above-mentioned pH meter for some time, and I’d like to ask – has anyone actually managed to get this pH meter fully working with OpenBeken, including reading temperature, pH, and EC?

    I’d like to integrate this pH meter into Home Assistant for my aeroponics system, but from the discussion, I’m not entirely sure if it has been successfully done.

    Would it be possible to create a step-by-step guide specifically for this pH meter? I’ve tried flashing it in the past but didn’t get to the point of reading any values. Unfortunately, I haven’t been able to find any other reliable instructions for this particular device.

    Thank you for your help!
  • #81 21600492
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    Hey, have you tried the latest autoexec.bat from this thread? Do you have original firmware backup?
    Helpful post? Buy me a coffee.
  • #82 21600508
    Dinner
    Level 5  
    Posts: 3
    >>21600492 Hi, thanks for the quick reply. Is this the correct code? There are several versions in the thread, and I’m not sure which one contains the correct values.
    I’ll be ordering a new device where I plan to set this up, so as soon as I can, I’ll back up the original firmware (without connecting to the Tuya Cloud) and let you know.

    Is it possible to flash other types of pH meters from Yieryi in the same way? For example, this one:
    https://www.yieryi.com/products/real-time-water-quality-monitor

    //starte TuyaMCU
    startDriver TuyaMCU
    tuyaMcu_defWiFiState 4
    tuyaMcu_setBaudRate 9600
    //starte set ip to NTP
    startDriver NTP
    ntp_setServer 172.20.48.1
    ntp_timeZoneOfs 2
    setChannelType 1  temperature_div10
    setChannelLabel 1 "Water temperature"
    linkTuyaMCUOutputToChannel 8 val 1
    addRepeatingEvent 15 -1 publishFloat temperatur $CH1/10 0 2 
    
    setChannelType 2 temperature_div10
    setChannelLabel 2 "High temperature alarm value"
    linkTuyaMCUOutputToChannel 102 val 2
    addRepeatingEvent 15 -1 publishFloat temperatur_max $CH2/10 0 2 
    //set value to Channel 102 TuyaMcu
    //set virtual button temp max
    setChannelLabel 20 "Temp max"
    setChannelType 20  Toggle
    setChannel 20 0
    
    setChannelType 3 temperature_div10
    setChannelLabel 3 "Low temperature alarm value"
    linkTuyaMCUOutputToChannel 103 val 3
    addRepeatingEvent 15 -1 publishFloat temperatur_min $CH3/10 0 2 
    //set value to Channel 103 TuyaMcu
    //set virtual button temp min
    setChannelLabel 21 "Temp min"
    setChannelType 21  Toggle
    
    setChannelType 4  Ph
    setChannelLabel 4 "PH Aktuell"
    linkTuyaMCUOutputToChannel 106 val 4
    addRepeatingEvent 15 -1 publishFloat ph $CH4/100 0 2 
    
    setChannelType 5  Ph
    setChannelLabel 5 "Warning pH value higher than set"
    linkTuyaMCUOutputToChannel 107 val 5
    addRepeatingEvent 15 -1 publishFloat ph_max $CH5/100 0 2 
    //set value to Channel 107 TuyaMcu
    //set virtual button ph max
    setChannelLabel 22 "PH max"
    setChannelType 22  Toggle
    
    setChannelType 6  Ph
    setChannelLabel 6 "Warning pH value lower than set"
    linkTuyaMCUOutputToChannel 108 val 6
    addRepeatingEvent 15 -1 publishFloat ph_min $CH6/100 0 2 
    //set value to Channel 108 TuyaMcu
    //set virtual button ph min
    setChannelLabel 23 "PH min"
    setChannelType 23  Toggle
    
    setChannelType 7  Tds
    setChannelLabel 7 "TDS value"
    linkTuyaMCUOutputToChannel 111 bool 7
    addRepeatingEvent 15 -1 publishFloat tds $CH7 0 2 
    
    setChannelType 8  Tds
    setChannelLabel 8 "Warning TDS value higher than set"
    linkTuyaMCUOutputToChannel 112 val 8
    addRepeatingEvent 15 -1 publishFloat tds_max $CH8 0 2 
    //set value to Channel 108 TuyaMcu
    //set virtual button tds max
    setChannelLabel 24 "Tds max"
    setChannelType 24  Toggle
    
    setChannelType 9  Tds
    setChannelLabel 9 "Warning TDS  value lower than set"
    linkTuyaMCUOutputToChannel 113 val 9
    addRepeatingEvent 15 -1 publishFloat tds_min $CH9 0 2 
    //set value to Channel 113 TuyaMcu
    fakeTuyaPacket 55AA03070008710200040000000088
    //set virtual button tds min
    setChannelLabel 25 "Tds min"
    setChannelType 25  Toggle
    
    setChannelType 10  Orp
    setChannelLabel 10 "ORP value"
    linkTuyaMCUOutputToChannel 131 val 10
    addRepeatingEvent 15 -1 publishFloat orp $CH10 0 0 
    
    setChannelType 11  Orp
    setChannelLabel 11 "ORP high alarm value"
    linkTuyaMCUOutputToChannel 132 val 11
    addRepeatingEvent 15 -1 publishFloat orp_max $CH11 0 0 
    //set value to Channel 132 TuyaMcu
    //set virtual button orp max
    setChannelLabel 26 "Orp max"
    setChannelType 26  Toggle
    
    setChannelType 12  Orp
    setChannelLabel 12 "ORP low alarm value"
    linkTuyaMCUOutputToChannel 133 val 12
    addRepeatingEvent 15 -1 publishFloat orp_low $CH12 0 0 
    //set value to Channel 1133 TuyaMcu
    //set virtual button orp min
    setChannelLabel 27 "Orp min"
    setChannelType 27  Toggle
    
    tuyaMcu_sendQueryState
    delay_s 120 // first start wait values
    again:
    delay_s 15
    // temperature values check set  temperatur_max or  temperatur_min Buttom to on or off
    if $CH1>$CH2 then setChannel 20 1 
    if $CH1<$CH2 then setChannel 20 0 
    if $CH1<$CH3 then setChannel 21 1 
    if $CH1>$CH3 then setChannel 21 0 
    // Ph value check set  ph_max or  ph_min Butt
  • #84 21621920
    Upright6771
    Level 4  
    Posts: 20
    Rate: 1
    Board Language: german
    Hi @p.kaczmarek2 there is an issue with ph using the latest Homeassistant mqtt version. I also have updated the openbeken Firmware to the latest one.

    My Log:
    Error 'The unit of measurement `Ph` is not valid together with device class `ph`' when processing MQTT discovery message topic: 'homeassistant/sensor/OpenBK7231N_0DE01654_sensor_4/config', message: '{'qos': 1, 'unique_id': 'OpenBK7231N_0DE01654_sensor_4', 'state_topic': 'obk0DE01654/4/get', 'value_template': "{{ '%0.2f'|format(float(value)*0.01) }}", 'name': 'PH Aktuell', 'device': {'model': 'BK7231N', 'name': 'obk0DE01654', 'configuration_url': 'http://192.168.20.5/index', 'manufacturer': 'Beken Corporation', 'identifiers': ['OpenBK7231N_0DE01654'], 'sw_version': 'Add'}, 'unit_of_measurement': 'Ph', 'state_class': 'measurement', 'device_class': 'ph'}'

    I have found an issue, that discussed the same problem: https://github.com/home-assistant/core/issues/148308
  • #85 21622013
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    So basically you want to remove unit_of_meas?
    Here:
    https://github.com/openshwprojects/OpenBK7231T_App/pull/1744
    Check this
    Helpful post? Buy me a coffee.
  • #87 21645887
    Upright6771
    Level 4  
    Posts: 20
    Rate: 1
    Board Language: german
    Hi @p.kaczmarek2 the problem still exists.

    I have installed to the latest version.

    I can solve it temporarily by using the MQTT Explorer to publish the sensor once without unit_of_meas. But after a few days the problem is back. Is there maybe another part in the code, who are submitting the unit_of_meas attribute?
  • #88 21645894
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    Are you saying that latest release still publishes unit_of_meas for PH?
    Code line with unit_of_meas for PH is commented out in WATER_QUALITY_PH case
    Helpful post? Buy me a coffee.
  • #89 21645897
    Upright6771
    Level 4  
    Posts: 20
    Rate: 1
    Board Language: german
    Yes, I have installed the Firmware: OpenBK7231N_1.18.159.rbl
  • #90 21645899
    p.kaczmarek2
    Moderator Smart Home
    Posts: 14400
    Help: 650
    Rate: 12332
    Well, this is very strange, I must admit. And it still emits unit of meas for Ph, when you check in MQTT Explorer?

    Let me try in Simulator to verify...
    Helpful post? Buy me a coffee.

Topic summary

✨ The discussion focuses on changing the firmware of the PH-W218 WiFi 8-in-1 Water Quality Tester equipped with a CB3S chip, which uses a TuyaMCU architecture. Users share experiences and solutions for flashing the device with OpenBeken firmware, integrating it with Home Assistant, and handling TuyaMCU datapoints (dpIDs) for various water quality parameters such as temperature, pH, TDS, ORP, salinity, and others. Key technical points include establishing reliable UART communication between the WiFi module and the secondary MCU, setting the correct baud rate (commonly 9600), and ensuring physical RX/TX connections are intact to receive TuyaMCU heartbeat packets. Firmware backup and restoration using BK7231GUIFlashTool is recommended before flashing. Configuration involves scripting autoexec.bat with commands to start drivers, define channel types, link dpIDs, and publish data with proper formatting and decimal precision. Challenges discussed include initial lack of data updates due to connection issues, formatting numeric values correctly, and occasional unreliability of tuyaMcu_sendState commands. Users also explore disabling unnecessary drivers like tmSensor and managing button labels. OTA updates and applying recent OpenBeken commits add support for missing channel types and improve functionality. For calibration reset issues on the original Tuya firmware, suggestions include using the Tuya app's "Remove and wipe data" option. Overall, successful firmware replacement and integration require careful hardware inspection, correct UART settings, and tailored configuration scripts to map sensor data accurately to Home Assistant.
Generated by the language model.

FAQ

TL;DR: With a 2MB backup and the right baud rate, the PH-W218 can be moved to OpenBeken; as one expert put it, "fakeTuyaPacket simulated TuyaMCU" and should not be used to write real thresholds. This FAQ helps Home Assistant and OpenBeken users flash the CB3S module, confirm TuyaMCU communication, and map pH, ORP, TDS, EC, and temperature correctly. [#21146899]

Why it matters: The thread shows that most PH-W218 failures come from power, baud, UART traces, or wrong command choice, not from the sensor hardware itself.

Option Use it for Worked result in thread Main risk
9600 baud Normal TuyaMCU link on this device Stable values reported after full setup No data if the module is miswired
115200 baud Diagnostic retry when 9600 fails Some users saw values, but also more errors Noisy logs and unstable parsing
fakeTuyaPacket Testing parser input only Changes Wi-Fi-side values only Does not write real MCU settings
tuyaMcu_sendState Writing real dpID values to TuyaMCU Correct method for thresholds Can fail if sent too early after boot

Key insight: OpenBeken replaces only the CB3S Wi-Fi module. The PH-W218’s secondary MCU still runs the measurement logic and keeps the built-in displays working, so success depends on reliable TuyaMCU serial communication, not on rewriting the whole device. [#21134253]

Quick Facts

  • The recommended safety step is a 2MB firmware backup with the BK7231 GUI flasher before any flashing, so you can restore stock later if needed. [#21132998]
  • The PH-W218 thread maps at least 17 dpIDs, including 8 for temperature, 106 for pH, 111 for TDS, 116 for EC, 121 for salinity, 131 for ORP, and 141 for RH. [#21131505]
  • The device has 3 built-in displays, and they continue to work after migrating to OpenBeken because the secondary MCU still handles most processing. [#21134253]
  • A practical startup script in the thread uses tuyaMcu_setBaudRate 9600, delay_s 120 on first start, and a 15-second loop for periodic checks and MQTT publishing. [#21203138]
  • For Home Assistant formatting, publishFloat gained a decimal-place argument, so publishFloat ph_aktuell $CH4/100 0 2 publishes 7.40 instead of 7.400000. [#21138792]

How do I start flashing and configuring a PH-W218 WiFi 8-in-1 water quality tester with a CB3S chip for OpenBeken and Home Assistant?

Start by treating the PH-W218 as a TuyaMCU device with a CB3S Wi-Fi module. 1. Make a full backup first, then flash OpenBeken to the CB3S. 2. Start the TuyaMCU driver, set the baud, and map dpIDs such as 8, 106, and 111 to channels. 3. Check the Web App log and only then add MQTT or Home Assistant publishing. The thread’s working examples use tuyaMcu_defWiFiState 4, then channel mapping, then tuyaMcu_sendQueryState. [#21131597]

What is TuyaMCU, and how does it affect firmware replacement on the PH-W218 water quality tester?

"TuyaMCU" is a device architecture that uses a separate secondary MCU to run measurements and local logic, while the Wi-Fi module only handles communication. On the PH-W218, OpenBeken replaces the CB3S Wi-Fi firmware, not the main measurement controller. That is why the three displays keep working after migration, and why success depends on UART communication between the Wi-Fi board and the original MCU. [#21134253]

What are Tuya dpIDs in the PH-W218, and how do I map datapoints like pH, ORP, TDS, EC, and temperature to OpenBeken channels?

"dpID" is a Tuya datapoint identifier that labels one sensor or setting value, such as pH, temperature, or an alarm threshold, and lets OpenBeken bind that value to a channel. In this thread, temperature is dpID 8, pH is 106, TDS is 111, EC is 116, salinity is 121, ORP is 131, and RH is 141. Use setChannelType, setChannelLabel, and linkTuyaMCUOutputToChannel [dpID] val [channel] to map them. [#21131505]

What is the best way to back up the original PH-W218 firmware before flashing OpenBeken, and how can I restore it later?

Use the flasher to make a 2MB backup before you change anything. The thread explicitly recommends the BK7231 GUI Flash Tool for this job, and the same tool can later restore the saved image if you want to return to stock firmware. One warning from the thread: do not share a backup if the device was already paired to Tuya Cloud. [#21132998]

Why does the OpenBeken AP sometimes not appear after flashing a CB3S module, and how can I fix power supply problems during setup?

The AP can stay invisible when the UART adapter does not supply enough current. In the thread, the flashed module booted correctly only after the user switched from a weak UART converter supply to a lab power supply. If the flash succeeds but no AP appears, first check power quality before changing firmware again. [#21134812]

How do I check whether the PH-W218 WiFi module is actually communicating with the TuyaMCU, including heartbeats and query-state responses in the Web App log?

Open the Web App log and look for real TuyaMCU traffic, not just command results. 1. Start TuyaMCU, save the config, and power the whole device fully off and on. 2. In the log, look for heartbeat or state lines such as cmd 0 (Hearbeat) or cmd 7 (State). 3. If needed, run tuyaMcu_sendQueryState and verify that the MCU actually answers. A console OK only means the command was accepted, not that the MCU replied. [#21202813]

Why do all sensor values stay at zero in OpenBeken even though the PH-W218 display still shows readings?

Values stay at zero when the Wi-Fi module is not receiving usable TuyaMCU state packets. In the thread, this happened with wrong mapping syntax, missing MQTT-triggered state behavior, missing product information, bad UART links, and even a hairline crack on the RX/TX path. The display still showed readings because the original MCU continued measuring locally. [#21146858]

How should I choose between 9600 and 115200 baud rate for TuyaMCU communication on the PH-W218, and what symptoms indicate the wrong setting?

Use 9600 baud as the preferred setting for this PH-W218, and test 115200 only as a fallback. The thread ended with a stable working setup at tuyaMcu_setBaudRate 9600, while 115200 produced values for one user but also “a lot of errors.” If neither speed shows TuyaMCU messages after a full power cycle, suspect flags, broken traces, or lost UART connection instead of firmware logic. [#21203138]

What happens to the three built-in displays after replacing the PH-W218 WiFi firmware with OpenBeken, and what still remains controlled by the original MCU?

The three displays normally keep working after the Wi-Fi firmware change. The PH-W218 uses a secondary MCU for processing, so the MCU continues handling most measurement and display behavior while OpenBeken handles Wi-Fi, MQTT, and Home Assistant integration on the CB3S. That separation is why the device can still look normal on its screen even when OpenBeken sees zero values. [#21134253]

How can I send or set alarm threshold values like temperature max/min, pH max/min, TDS max/min, and ORP max/min correctly in OpenBeken without misusing fakeTuyaPacket?

Send real threshold values with tuyaMcu_sendState, not with simulated packets. The maintainer’s example was a short boot sequence such as delay_s 1, then tuyaMcu_sendState 103 2 2300, then another delay before the next dpID. He also warned that addRepeatingEvent 15 -1 tuyaMcu_sendState ... sends forever every 15 seconds, which is usually wrong for fixed alarm limits. [#21147072]

Why is fakeTuyaPacket not the right way to write real values back to the PH-W218 TuyaMCU, and when should tuyaMcu_sendState be used instead?

fakeTuyaPacket is the wrong tool because it only simulates packets arriving from the MCU to the Wi-Fi module. It can change what OpenBeken displays or publishes, but it does not write real settings into the PH-W218 controller. Use tuyaMcu_sendState [dpID] [dpType] [value] whenever you want the actual TuyaMCU to receive a threshold or setting and calculate the checksum automatically. [#21146899]

How can I format PH, temperature, TDS, and ORP values correctly for MQTT and Home Assistant, including decimal scaling and publishFloat rounding?

Use channel scaling plus publishFloat formatting. The thread shows pH published as $CH4/100 0 2, so a raw value like 740 becomes 7.40; temperature used /10, while ORP was often published with 0 decimals. For PH specifically, the maintainer added a decimal-place argument, so publishFloat ph_aktuell $CH4/100 0 2 fixes outputs like 7.400000 and publishes 7.40 instead. [#21138792]

What causes Home Assistant to reject the PH sensor discovery message with 'unit of measurement Ph is not valid together with device class ph', and how can I fix it?

Home Assistant rejects it when the discovery payload still contains unit_of_measurement: Ph together with device class ph. In the thread, a fix was proposed so the PH channel type stops publishing unit_of_meas, and the maintainer later said current releases should not send it for PH. If the error returns, remove the device and re-pair through Home Assistant discovery so stale discovery data is cleared. [#21645909]

How can I troubleshoot a PH-W218 that stopped reporting TuyaMCU data after flashing, including checking UART flags, broken RX/TX traces, and full power-cycle behavior?

First verify physical UART integrity, then settings. 1. Fully cut power for about 15 seconds, not just a soft restart. 2. Check that no wrong flag redirects communication, such as using the second UART. 3. Inspect RX/TX lines closely; one user found a hairline crack only with a magnifier and restored communication by bridging it with solder. If no TuyaMCU messages appear at 9600 or 115200, the fault is usually wiring, flags, or a broken trace. [#21146858]

How do I open the PH-W218 enclosure safely after removing the four visible screws, and where are the hidden clips or internal fixings that still hold it together?

The thread does not provide a confirmed opening procedure after the four visible screws. A later user asked whether hidden fixings or clips still held the enclosure, but no posted answer in the supplied thread explains where those clips are or how to release them safely. The safest conclusion from this thread alone is that the enclosure may have additional internal retention points beyond the four screws. [#21763873]
Generated by the language model.
ADVERTISEMENT