logo elektroda
logo elektroda
X
logo elektroda

Seeking Template for [BK7231N] Tuya 8-in-1 Air Quality Monitor PV28-CW After OpenBeken Flash

markiespark 5403 30
ADVERTISEMENT
  • #31 21371022
    markiespark
    Level 4  
    >>21361285 Ok, this has helped a lot. After much testing I've ruled out dp 5,6,7 and 104 using TextFields. All is accounted for apart from 107 which is valid but still unknown. I set it to 1 but it sets itself back to 0. Also I set the alarm off and repeated that test - no different. So yes it could possibly be a calibration setting as mentioned before. Here's a revised autoexec, based on the JSON:

    // Tuya PV28-CW 8-in-1 Air Quality Sensor autoexec.bat
    
    // Clear previous autoexec settings
    clearIO
    
    // clear flags
    // flags 0
    
    // set flag 46
    SetFlag 46 1
    
    // Start TuyaMCU driver at Baud 9600
    startDriver TuyaMCU
    tuyaMCU_setBaudRate 9600
    
    // If not using MQTT comment out waitFor MQTTState 1 or
    // If using MQTT comment out tuyaMcu_defWiFiState 4
    
    waitFor MQTTState 1
    // tuyaMcu_defWiFiState 4
    
    // Force update from TuyaMCU every 10 sec
    addRepeatingEvent 10 -1 tuyaMcu_sendQueryState
    
    // Mappings [dpID] [varType] [tgChannel]
    
    // CO2 (ppm) - Dp 2 - Ch 1
    setChannelLabel 1 "CO2 (ppm)"
    setChannelType 1 ReadOnly
    linkTuyaMCUOutputToChannel 2 val 1
    
    // PM2.5 (ug/m3) - Dp 20 -Ch 2
    setChannelLabel 2 "PM2.5 (ug/m3)"
    setChannelType 2 ReadOnly
    linkTuyaMCUOutputToChannel 20 val 2
    
    // PM1.0 (ug/m3 - Dp 102 - Ch 3
    setChannelLabel 3 "PM1.0 (ug/m3)"
    setChannelType 3 ReadOnly
    linkTuyaMCUOutputToChannel 102 val 3
    
    // PM10 (ug/m3) - Dp 101 - Ch 4
    setChannelLabel 4 "PM10 (ug/m3)"
    setChannelType 4 ReadOnly
    linkTuyaMCUOutputToChannel 101 val 4
    
    // HCHO (ug/m3) - Dp 22 - Ch 5
    setChannelLabel 5 "HCHO Formaldehyde (ug/m3)"
    setChannelType 5 ReadOnly
    linkTuyaMCUOutputToChannel 22 val 5
    
    // TVOC (ug/m3) - Dp 21 - Ch 6
    setChannelLabel 6 "TVOC (ug/m3)"
    setChannelType 6 ReadOnly
    linkTuyaMCUOutputToChannel 21 val 6
    
    // Temperature - Dp 18 - Ch 7
    setChannelType 7 Temperature
    setChannelLabel 7 "Temperature"
    linkTuyaMCUOutputToChannel  18 val 7
    
    // Humidity ID19 (%) - Dp 19 - Ch 8
    setChannelLabel 8 "Humidity"
    setChannelType 8 Humidity
    linkTuyaMCUOutputToChannel 19 val 8
    
    // Humidity Current ID103 (%) - Dp 103 - Ch 9
    setChannelLabel 9 "Humidity Current"
    setChannelType 9 Humidity
    linkTuyaMCUOutputToChannel 103 val 9
    
    // Battery Level (%) - Dp 15 - Ch 10
    setChannelLabel 10 "Battery Level"
    setChannelType 10 BatteryLevelPercent
    linkTuyaMCUOutputToChannel 15 val 10
    
    // Brightness Level Detected - Dp 17 - Ch 11
    setChannelLabel 11 "Brightness Level Detected (0-100)"
    setChannelType 11 ReadOnly
    linkTuyaMCUOutputToChannel 17 val 11
    
    // CO2 Alarm State - Dp 1 - Ch 12
    setChannelLabel 12 "CO2 Alarm State (1 Normal, 0 Alarm)"
    setChannelType 12 ReadOnly
    linkTuyaMCUOutputToChannel 1 enum 12
    
    // Battery State - Dp 14 - Ch 13
    setChannelLabel 13 "Battery State (1 Charging, 0 Discharging)"
    setChannelType 13 ReadOnly
    linkTuyaMCUOutputToChannel 14 enum 13
    
    // PM2.5 Alarm State - Dp 106 - Ch 14
    setChannelLabel 14 "PM2.5 Alarm State (1 Normal, 0 Alarm)"
    setChannelType 14 ReadOnly
    linkTuyaMCUOutputToChannel 106 enum 14
    
    // CO2 Alarm Threshold - Dp 26 - Ch 15
    setChannelLabel 15 "CO2 Alarm Threshold (400-5000 ppm - Default: 1500)"
    setChannelType 15 TextField
    linkTuyaMCUOutputToChannel 26 val 15
    
    // PM2.5 Alarm Threshold - Dp 105 - Ch 20
    setChannelLabel 20 "PM2.5 Alarm Threshold (0-1000 - Default: 75)"
    setChannelType 20 TextField
    linkTuyaMCUOutputToChannel 105 val 20
    
    // Temperature Unit Display - Dp 31 - Ch 16
    setChannelLabel 16 "Temperature Unit (0=Celsius, 1=Fahrenheit)"
    setChannelType 16 Toggle
    linkTuyaMCUOutputToChannel 31 enum 16
    
    // Check Time Unknown - stays set - Dp 107 - Ch 17
    setChannelLabel 17 "Check Time? Unknown."
    setChannelType 17 TextField
    linkTuyaMCUOutputToChannel 107 bool 17
    
    // Display Sleep - Dp 108 - Ch 18
    setChannelLabel 18 "Display Sleep (0=Off, 1=On)"
    setChannelType 18 Toggle
    linkTuyaMCUOutputToChannel 108 bool 18
    
    // Display Sleep Time - Dp 109 - Ch 19
    setChannelLabel 19 "Display Sleep Time (1-3600 sec - Default: 30)"
    setChannelType 19 TextField
    linkTuyaMCUOutputToChannel 109 val 19
    
    // Alarm Setting - Dp 13 - Ch 21
    setChannelLabel 21 "Alarm Setting"
    setChannelType 21 Toggle
    linkTuyaMCUOutputToChannel 13 bool 21


    I've also found a workaround for the save crashes (autoexec only) by keeping web tabs open.
    One for the display interface where I can click Restart
    One from the Web Application - Filesystem tab
    One from the Web Application - Logs tab
    This way, when the save corrupts after a restart, I can tab over and save again, tab back and restart. This works 100%. It's just unfortunate that most times it means 2x saves, occasionally 3, sometimes 4 just to get it to load right. Not good for flash wear but it is what it is.
    After much experimentation, looking through the commands, and ChatGPT getting it wrong, I've given up on decimalisation in the autoexec. Looks like it can only de done in HTML, which if it wasn't guaranteed to crash the device I'd love to try and work on again. So instead of trying to copy the nice display on the web inferface, I'll see if I can get the values from MQTT into Home Assistant and then modify them.

    Thanks everyone for your help with this. With just dp107 left we're almost there.
  • ADVERTISEMENT

Topic summary

The discussion centers on flashing the Tuya PV28-CW 8-in-1 Air Quality Monitor, which uses the BK7231N chip, with OpenBeken firmware after initial flashing via Tuya Cloudcutter. The device requires USB power due to a short battery life. Initial challenges included lack of a dedicated OpenBeken template and handling TuyaMCU communication, including baud rate settings and command queries. Users identified and mapped TuyaMCU datapoint IDs (dpIDs) corresponding to sensor readings such as CO2, PM2.5, PM1.0, PM10, HCHO, TVOC, temperature, humidity, battery level, and screen wake timeout. The dpIDs were linked to OpenBeken channels with appropriate labels and read-only types. Issues with data scaling (e.g., _div10) and autoexec.bat file corruption were noted. The community shared JSON configurations extracted from Tuya firmware, aiding in understanding dpID functions and enabling more complete autoexec.bat scripts. Calibration and alarm dpIDs were discussed, with some remaining unknown or unconfirmed. Guidance on flashing hardware, including removing the Tuya module or cutting TX/RX lines, was provided. The device supports MQTT integration, and custom web interfaces can be created using OpenBeken’s scripting capabilities. Overall, a near-complete OpenBeken configuration for the PV28-CW was developed, enabling sensor data acquisition and MQTT publishing, with ongoing refinement of calibration and alarm features.
Summary generated by the language model.
ADVERTISEMENT