Tasmota Serial (MQTT) Bridge for MQTT-CUL
Hardware
- Wemos D1 mini or equivalent ESP8266 board running Tasmota (tested with v9.3.1)
- DIY-CUL device (Arduino Pro Mini with aCULfw + C1101 Transceiver)
- RX/TX connected to Wemos D1 mini hardware UART (TX->RX and vice versa) using level shifters
Tasmota-Configuration
Set baudrate for Hardware-UART
CUL-Device uses 38400 bps
baudrate 38400
Set serial delimiter
serialdelimiter 128
- CUL finishes every message with CR+LF (\r\n)
- serialdelimiter 128 filters all unprintable chars and seems to take both CR and LF as a delimiter - at least both are filtered out and consequent messages are not concatenated, which happens if using NO serialdelimiter (value set to >128)
Set serial config
SerialConfig 8N1
Initialize CUL on Tasmota startup
Additionally, Tasmota´s Serial bridge is only active after the SerialSend function was used once after startup.
In my setup I need to get also "RAW" data from CUL, as I am using remote controls not directly supported by the aCULfw firmware, so I use the X05 command. If this is not needed, the right command is likely to be X21.
For details see: http://culfw.de/commandref.html
rule1 on system#boot do serialsend X05\r\n endon
activate the rule:
rule1 1
Additional rule for publishing SerialReceived output on another topic
rule2 on SerialReceived#Data do publish MQTTCUL/received %value% endon
- Unfortunately this rule will only work if ther is NO control char in the received string, so it is mandatory to use a SerialDelimiter setting that filters out all of them (i.E. SerialDelimiter 128 does the job).
- The output of this rule is ALWAYS UPPERCASE. Don´t know why, but that´s how Tasmota handles it. Regarding CUL output this could be a problem, as it outputs lowercase chars in most messages.
- CUL2MQTT.py handles this by putting all data received from MQTT-CUL topic to lowercase (as all of the logic has already been completed and was written based on the normal lowercase output seen on any CUL device).
- CUL2MQTT.py now also supports the Tasmota tele/TOPIC/RESULT output in JSON format directly. It is preferred to use it this way, without the additional rule.