[RELEASE] Tasmota Sync - Native and Real-time Synchronization between Hubitat and Tasmota 11 or later

Change the IP address of the device in HE and save it. It will update the DNI.

Asking for trouble having two device drivers with the same IP. Only one will receive all rhe responses.

Dimmer, sensor and switch is not a configuration supported by a current driver.

Getting the following error frequently for the devices that use this driver - Any ideas on how to fix it?

I’m using the code with some single outlet Tasmota PMP power plugs and they are working great otherwise. I also have logging disabled, so I find it odd that I have this error…

Thoughts?

I think that's the same problem I had earlier.

The fix was to change the driver to dual-port (instead of single-port) and then click on the "Delete Child Devices". Then switch back to the single-port driver.

2 Likes

Ah! I had missed that - Thanks! I’ll give it a try.

So far these drivers are working with all the OpenBeken new Tuya BK7231 chips I have tried which is nice.

1 Like

FYI I submitted this project to Tasmota documentation since it is now standalone and very mature (I had a friend ask why Hubitat wasnt supported!)!

2 Likes

Don’t know how I missed you message but thanks for doing that. I have no idea how many people are using it but I’ve not had much in the way of bug reports for a while.

Hi @garyjmilne. Thank you so much for developing Tasmota Sync! It is awesome. I am one of those migrating from Markus' Tasmota Driver suite. I have been able to migrate all my devices very easily except for a modified SONOFF device I am using for a garage door opener. As you suggested in the thread to @bigrizz , I have installed the Universal Multi-Sensor Single Relay. The switch to open/close the garage door works fine. However, the driver does not seem to be correctly reading in the data from Switch3, which is the sensor that is supposed to indicate if the door is open or closed.

This is the configuration I have for the Tasmota device:

In the Tasmota Console, I can see the information being sent to Tasmota includes the Sensor data from Switch 3.

03:08:27.083 RSL: STATE = {"Time":"2023-10-29T03:08:27","Uptime":"0T00:27:32","UptimeSec":1652,"Heap":24,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":20,"MqttCount":0,"POWER":"OFF","Wifi":{"AP":1,"SSId":"garage","BSSId":"24:5A:4C:4C:11:E8","Channel":11,"Mode":"11n","RSSI":58,"Signal":-71,"LinkCount":1,"Downtime":"0T00:00:04"}}
03:08:27.089 RSL: SENSOR = {"Time":"2023-10-29T03:08:27","Switch3":"OFF"}

The Sensor data from Switch3 changes from OFF to ON, as expected, when the garage door is open.

When I follow the instructions under "Add\Change Sensor on an existing Hubitat Device." on page 7 of "Tasmota Sync Sensor Drivers", in the Hubitat Devices screen, I get this:
image

In the section under State Variablies, I get this:

It doesn't look like it is reading the data from Switch3 correctly.

I notice that Tasmota is reporting the status of the switch for the sensor by prepending it with SENSOR. However, I think your code is looking for STATUSSNS. Is that perhaps something that was changed in Tasmota?

03:08:27.089 RSL: SENSOR = {"Time":"2023-10-29T03:08:27","Switch3":"OFF"}

If I execute Status 10, the response is:

05:47:13.484 RSL: STATUS10 = {"StatusSNS":{"Time":"2023-10-29T05:47:13","Switch3":"OFF"}}

I am using Version 1.02 of the Tasmota Sync Driver and Tasmota 13.2.0.

Any idea what I am doing wrong? Thanks!

You should see lines like this in your Tasmota log. Can you send me one of those.
VAR15#STATE$!%VAR16% performs "backlog ; var16 0,34.1,42,56.8 ; webquery http://192.168.0.200:39501/ POST {'TSync':'True','Switch1':'0','dewPoint':'34.1','humidity':'42','temperature':'56.8'}"

One thing to remember is that the driver builds the rule based on what it knows about the device. If that devices properties change then the rule is probably no longer valid.

1 Like

Sorry for the delayed response.

I am not sure if this is exactly what you are looking for, but below is the log data I could gather. This is from doing the following steps:

  1. Click “Clear Attributes”
  2. Perform a browser refresh.
  3. Click “Initialize” and wait for the attributes to populate.
  4. Perform a browser refresh and check the discovered sensors\switches look correct.
  5. Click “tasmotaInjectRule”

The log data from Hubitat for the Tasmota device is:

[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:45.353 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣hubitatResponse: Setting device handler values to match device.
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:45.082 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣📞 callTasmota: Sending command: STATE
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:44.548 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣🐶 watchdog: Last command was a BACKLOG. Initiating STATE refresh for current settings.
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:39.714 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣hubitatResponse: Backlog Command acknowledged.
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:39.511 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣📞 callTasmota: Sending command: BACKLOG RULE3 ON
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:34.616 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣🔄 syncTasmota: Data received: {"RULE3":{"STATE":"ON","ONCE":"OFF","STOPONERROR":"OFF","LENGTH":239,"FREE":272,"RULES":"ON POWER1#STATE DO BACKLOG VAR14 %VALUE% ; RULETIMER1 1 ENDON ON RULES#TIMER=1 DO VAR15 %VAR14% ENDON ON VAR15#STATE$!%VAR16% DO BACKLOG ; VAR16 %VAR15% ; WEBQUERY HTTP://192.168.1.79:39501/ POST {"TSYNC":"TRUE","SWITCH1":"%VAR14%"} ENDON "}}
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:34.531 PM[info](http://192.168.1.79/logs#)Tasmota Sync - Universal Multi Sensor Driver reloaded with sensor type All
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:34.525 PM[info](http://192.168.1.79/logs#)SwitchCount is: 1
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:34.431 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣📞 callTasmota: Sending command: RULE3 ON Power1#state DO backlog var14 %value% ; RuleTimer1 1 ENDON ON Rules#Timer=1 DO var15 %var14% ENDON ON var15#State$!%var16% DO backlog ; var16 %var15% ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'%var14%'} ENDON
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:34.426 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣tasmotaInjectRule: Rule3 is: ON Power1#state DO backlog var14 %value% ; RuleTimer1 1 ENDON ON Rules#Timer=1 DO var15 %var14% ENDON ON var15#State$!%var16% DO backlog ; var16 %var15% ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'%var14%'} ENDON
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:34.420 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣tasmotaInjectRule: varString2 is: 'Switch1':'%var14%'
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:34.416 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣tasmotaInjectRule: varString1 is: %var14%
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:34.407 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣⚡ Action - tasmotaInjectRule: Injecting Rule3 into Tasmota Host. To verify go to Tasmota console and type: rule 3
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:15.076 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣hubitatResponse: Setting device handler values to match device.
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:14.827 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣📞 callTasmota: Sending command: STATE
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:09.795 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣💨 statusResponse: Exiting
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:09.786 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣statusResponse: STATUS 8 - SENSOR values processed.
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:09.418 PM[info](http://192.168.1.79/logs#)Tasmota Sync - Universal Multi Sensor Driver reloaded with sensor type All
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:09.415 PM[info](http://192.168.1.79/logs#)SwitchCount is: 1
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:09.296 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣📞 callTasmota: Sending command: STATUS 8
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:09.292 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣⚡ Action: Refresh started....
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:09.270 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣⚡ Action: Initialize/Update Device
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:02.342 PM[info](http://192.168.1.79/logs#)Tasmota Sync - Universal Multi Sensor Driver reloaded with sensor type All
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:32:02.338 PM[info](http://192.168.1.79/logs#)SwitchCount is: 1
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:31:59.285 PM[info](http://192.168.1.79/logs#)Tasmota Sync - Universal Multi Sensor Driver reloaded with sensor type All
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:31:59.281 PM[info](http://192.168.1.79/logs#)SwitchCount is: 1
[dev:512](http://192.168.1.79/logs#)2023-11-12 04:31:58.999 PM[info](http://192.168.1.79/logs#)Garage Door - 0️⃣clearAttributes: Clearing All Attributes

The log data for the Tasmota device itself is:

01:32:07.227 SRC: WebCommand from 192.168.1.79
01:32:07.229 CMD: Grp 0, Cmd 'STATUS', Idx 1, Len 1, Pld 8, Data '8'
01:32:07.235 RSL: STATUS8 = {"StatusSNS":{"Time":"2023-11-13T01:32:07","Switch3":"OFF"}}
01:32:12.801 HTP: Command
01:32:12.806 SRC: WebCommand from 192.168.1.79
01:32:12.809 CMD: Grp 0, Cmd 'STATE', Idx 1, Len 4, Pld -99, Data 'None'
01:32:12.814 RSL: RESULT = {"Time":"2023-11-13T01:32:12","Uptime":"0T00:20:33","UptimeSec":1233,"Heap":22,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"POWER":"OFF","Wifi":{"AP":1,"SSId":"garage","BSSId":"24:5A:4C:4C:11:E8","Channel":11,"Mode":"11n","RSSI":58,"Signal":-71,"LinkCount":1,"Downtime":"0T00:00:04"}}
01:32:32.318 HTP: Command
01:32:32.323 SRC: WebCommand from 192.168.1.79
01:32:32.326 CMD: Grp 0, Cmd 'RULE', Idx 3, Len 239, Pld -99, Data 'ON Power1#state DO backlog var14 %value% ; RuleTimer1 1 ENDON ON Rules#Timer=1 DO var15 %var14% ENDON ON var15#State$!%var16% DO backlog ; var16 %var15% ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'%var14%'} ENDON '
01:32:32.339 RUL: Stored uncompressed, would compress from 239 to 190 (-20%)
01:32:32.343 RSL: RESULT = {"Rule3":{"State":"ON","Once":"OFF","StopOnError":"OFF","Length":239,"Free":272,"Rules":"ON Power1#state DO backlog var14 %value% ; RuleTimer1 1 ENDON ON Rules#Timer=1 DO var15 %var14% ENDON ON var15#State$!%var16% DO backlog ; var16 %var15% ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'%var14%'} ENDON "}}
01:32:37.485 HTP: Command
01:32:37.490 SRC: WebCommand from 192.168.1.79
01:32:37.493 CMD: Grp 0, Cmd 'BACKLOG', Idx 1, Len 8, Pld -99, Data 'RULE3 ON'
01:32:37.615 SRC: Backlog
01:32:37.618 CMD: Grp 0, Cmd 'RULE', Idx 3, Len 2, Pld 1, Data 'ON'
01:32:37.624 RSL: RESULT = {"Rule3":{"State":"ON","Once":"OFF","StopOnError":"OFF","Length":239,"Free":272,"Rules":"ON Power1#state DO backlog var14 %value% ; RuleTimer1 1 ENDON ON Rules#Timer=1 DO var15 %var14% ENDON ON var15#State$!%var16% DO backlog ; var16 %var15% ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'%var14%'} ENDON "}}
01:32:43.074 HTP: Command
01:32:43.078 SRC: WebCommand from 192.168.1.79
01:32:43.081 CMD: Grp 0, Cmd 'STATE', Idx 1, Len 4, Pld -99, Data 'None'
01:32:43.087 RSL: RESULT = {"Time":"2023-11-13T01:32:43","Uptime":"0T00:21:04","UptimeSec":1264,"Heap":22,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"POWER":"OFF","Wifi":{"AP":1,"SSId":"garage","BSSId":"24:5A:4C:4C:11:E8","Channel":11,"Mode":"11n","RSSI":58,"Signal":-71,"LinkCount":1,"Downtime":"0T00:00:04"}}

Is there anything else I can get you to help troubleshoot the issue?

Thanks.

I need the Tasmota Webquery command like this:

Here it is:

06:47:12.336 RSL: RESULT = {"POWER1":"ON"}
06:47:12.338 RSL: POWER1 = ON
06:47:12.657 SRC: Switch
06:47:12.661 RSL: RESULT = {"POWER2":"ON"}
06:47:12.663 RSL: POWER2 = ON
06:47:12.677 RUL: POWER1#STATE performs "backlog var14 1 ; RuleTimer1 1"
06:47:12.680 SRC: Rule
06:47:12.682 CMD: Grp 0, Cmd 'BACKLOG', Idx 1, Len 22, Pld -99, Data 'var14 1 ; RuleTimer1 1'
06:47:12.700 SRC: PulseTimer
06:47:12.704 RSL: RESULT = {"POWER1":"OFF"}
06:47:12.706 RSL: POWER1 = OFF
06:47:12.719 SRC: Switch
06:47:12.722 RSL: RESULT = {"POWER2":"OFF"}
06:47:12.725 RSL: POWER2 = OFF
06:47:12.727 SRC: Backlog
06:47:12.729 CMD: Grp 0, Cmd 'VAR', Idx 14, Len 1, Pld 1, Data '1'
06:47:12.733 RSL: RESULT = {"Var14":"1"}
06:47:12.754 RUL: POWER1#STATE performs "backlog var14 0 ; RuleTimer1 1"
06:47:12.756 SRC: Rule
06:47:12.759 CMD: Grp 0, Cmd 'BACKLOG', Idx 1, Len 22, Pld -99, Data 'var14 0 ; RuleTimer1 1'
06:47:12.785 SRC: Switch
06:47:12.789 RSL: RESULT = {"POWER2":"ON"}
06:47:12.791 RSL: POWER2 = ON
06:47:12.793 SRC: Backlog
06:47:12.795 CMD: Grp 0, Cmd 'RULETIMER', Idx 1, Len 1, Pld 1, Data '1'
06:47:12.800 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
06:47:13.028 SRC: Backlog
06:47:13.031 CMD: Grp 0, Cmd 'VAR', Idx 14, Len 1, Pld 0, Data '0'
06:47:13.035 RSL: RESULT = {"Var14":"0"}
06:47:13.280 SRC: Backlog
06:47:13.283 CMD: Grp 0, Cmd 'RULETIMER', Idx 1, Len 1, Pld 1, Data '1'
06:47:13.288 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
06:47:14.147 CFG: Saved to flash at F4, Count 48, Bytes 4096
06:47:14.463 RUL: RULES#TIMER=1 performs "var15 0"
06:47:14.465 SRC: Rule
06:47:14.467 CMD: Grp 0, Cmd 'VAR', Idx 15, Len 1, Pld 0, Data '0'
06:47:14.472 RSL: RESULT = {"Var15":"0"}
06:47:48.952 SRC: WebGui from 192.168.1.125
06:47:48.956 RSL: RESULT = {"POWER1":"ON"}
06:47:48.958 RSL: POWER1 = ON
06:47:49.080 RUL: POWER1#STATE performs "backlog var14 1 ; RuleTimer1 1"
06:47:49.081 SRC: Rule
06:47:49.084 CMD: Grp 0, Cmd 'BACKLOG', Idx 1, Len 22, Pld -99, Data 'var14 1 ; RuleTimer1 1'
06:47:49.093 SRC: PulseTimer
06:47:49.097 RSL: RESULT = {"POWER1":"OFF"}
06:47:49.100 RSL: POWER1 = OFF
06:47:49.103 SRC: Backlog
06:47:49.106 CMD: Grp 0, Cmd 'VAR', Idx 14, Len 1, Pld 1, Data '1'
06:47:49.110 RSL: RESULT = {"Var14":"1"}
06:47:49.132 RUL: POWER1#STATE performs "backlog var14 0 ; RuleTimer1 1"
06:47:49.133 SRC: Rule
06:47:49.136 CMD: Grp 0, Cmd 'BACKLOG', Idx 1, Len 22, Pld -99, Data 'var14 0 ; RuleTimer1 1'
06:47:49.154 SRC: Backlog
06:47:49.157 CMD: Grp 0, Cmd 'RULETIMER', Idx 1, Len 1, Pld 1, Data '1'
06:47:49.162 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
06:47:49.405 SRC: Backlog
06:47:49.408 CMD: Grp 0, Cmd 'VAR', Idx 14, Len 1, Pld 0, Data '0'
06:47:49.412 RSL: RESULT = {"Var14":"0"}
06:47:49.656 SRC: Backlog
06:47:49.659 CMD: Grp 0, Cmd 'RULETIMER', Idx 1, Len 1, Pld 1, Data '1'
06:47:49.664 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
06:47:51.270 RUL: RULES#TIMER=1 performs "var15 0"
06:47:51.272 SRC: Rule
06:47:51.275 CMD: Grp 0, Cmd 'VAR', Idx 15, Len 1, Pld 0, Data '0'
06:47:51.279 RSL: RESULT = {"Var15":"0"}
06:48:01.269 SRC: Switch
06:48:01.273 RSL: RESULT = {"POWER2":"OFF"}
06:48:01.275 RSL: POWER2 = OFF
06:48:01.395 CFG: Saved to flash at FB, Count 49, Bytes 4096

No, that's not it. The command "webquery http://........." should appear within the text. It's possible it is logging things differently in that version of Tasmota, but I'm not going down that path unless you can tell me with 100% certainty that the command "webquery ......" does not appear in the Tasmota log.

Thanks for the great project. Overall, I've had great success with this driver. I have a couple of issues, however:

1:
I posed an issue in the GitHub project here:

It's regarding a 3-Way switch, and how best to configure it, as I'm having an issue using Tasmota Sync. If you need me to repost the body of the issue here, just let me know.

2:
I'm using the Sonoff iFan04 module and the Fan driver. I have enabled it in HomeKit as well. While the Fan shows up fine in Apple Home, the light does not. I needed to create a Virtual Switch in Hubitat and use the Mirror app to keep it in sync. But it's only a one-way sync and not ideal. Ideally, the light should be made into a child device.

Is it possible to split the light into a child device within the driver?

Thanks again!

So I think I found out why the "webquery http://........." command was not being called. In my tasmota configuration, I had entered the following commands:

switchmode1 1
pulsetime1 10

These commands are to cause a pulse to occur on relay1, which is what triggers the garage door to close or open.

What I found is that this was causing the state of SWITCH1 to revert back to OFF before trigger of

DO var15 %var14%

and then the ON statement with the webquery command was never triggered.

ON var15#State$!%var16% DO backlog ; var16 %var15% ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'%var14%'} ENDON

Changing the duration of the pulse for relay1 to a longer time (10 seconds) fixed this issue. Here is now the log with the webquery command. Please note that I also reverted back to Tasmota 11.1.0 to eliminate any potential configuration differences in Tasmota.

00:00:00.001 HDW: ESP8285
00:00:00.050 CFG: Loaded from flash at F7, Count 45
00:00:00.055 QPC: Count 1
00:00:00.085 Project tasmota - Tasmota Version 11.1.0(tasmota)-2_7_4_9(2022-04-13T06:40:42)
00:00:00.531 WIF: Connecting to AP1 garage Channel 11 BSSId 24:5A:4C:4C:11:E8 in mode 11n as tasmota-FA2AFD-2813...
00:00:06.519 QPC: Reset
00:00:10.454 WIF: Connected
00:00:10.707 HTP: Web server active on tasmota-FA2AFD-2813 with IP address 192.168.1.24
21:49:51.208 RSL: INFO1 = {"Info1":{"Module":"Sonoff Basic","Version":"11.1.0(tasmota)","FallbackTopic":"cmnd/DVES_FA2AFD_fb/","GroupTopic":"cmnd/tasmotas/"}}
21:49:51.220 RSL: INFO2 = {"Info2":{"WebServerMode":"Admin","Hostname":"tasmota-FA2AFD-2813","IPAddress":"192.168.1.24"}}
21:49:51.230 RSL: INFO3 = {"Info3":{"RestartReason":"Software/System restart","BootCount":9}}
21:49:51.239 RSL: RESULT = {"POWER1":"OFF"}
21:49:51.240 RSL: POWER1 = OFF
21:49:51.242 RSL: RESULT = {"POWER2":"OFF"}
21:49:51.243 RSL: POWER2 = OFF
21:49:58.901 RSL: STATE = {"Time":"2023-11-13T21:49:58","Uptime":"0T00:00:20","UptimeSec":20,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":59,"MqttCount":0,"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"garage","BSSId":"24:5A:4C:4C:11:E8","Channel":11,"Mode":"11n","RSSI":54,"Signal":-73,"LinkCount":1,"Downtime":"0T00:00:12"}}
21:49:58.927 RSL: SENSOR = {"Time":"2023-11-13T21:49:58","Switch3":"OFF"}
21:50:26.263 RSL: STATUS8 = {"StatusSNS":{"Time":"2023-11-13T21:50:26","Switch3":"OFF"}}
21:50:32.882 RSL: RESULT = {"Time":"2023-11-13T21:50:32","Uptime":"0T00:00:54","UptimeSec":54,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"garage","BSSId":"24:5A:4C:4C:11:E8","Channel":11,"Mode":"11n","RSSI":50,"Signal":-75,"LinkCount":1,"Downtime":"0T00:00:12"}}
21:50:57.763 RUL: Stored uncompressed, would compress from 239 to 190 (-20%)
21:50:57.766 RSL: RESULT = {"Rule3":{"State":"ON","Once":"OFF","StopOnError":"OFF","Length":239,"Free":272,"Rules":"ON Power1#state DO backlog var14 %value% ; RuleTimer1 1 ENDON ON Rules#Timer=1 DO var15 %var14% ENDON ON var15#State$!%var16% DO backlog ; var16 %var15% ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'%var14%'} ENDON "}}
21:51:05.234 RSL: RESULT = {"Rule3":{"State":"ON","Once":"OFF","StopOnError":"OFF","Length":239,"Free":272,"Rules":"ON Power1#state DO backlog var14 %value% ; RuleTimer1 1 ENDON ON Rules#Timer=1 DO var15 %var14% ENDON ON var15#State$!%var16% DO backlog ; var16 %var15% ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'%var14%'} ENDON "}}
21:51:11.050 RSL: RESULT = {"Time":"2023-11-13T21:51:11","Uptime":"0T00:01:33","UptimeSec":93,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"garage","BSSId":"24:5A:4C:4C:11:E8","Channel":11,"Mode":"11n","RSSI":50,"Signal":-75,"LinkCount":1,"Downtime":"0T00:00:12"}}
21:51:17.873 RSL: RESULT = {"POWER1":"ON"}
21:51:17.876 RSL: POWER1 = ON
21:51:17.891 RUL: POWER1#STATE performs "backlog var14 1 ; RuleTimer1 1"
21:51:17.905 RSL: RESULT = {"POWER1":"ON"}
21:51:17.907 RSL: POWER1 = ON
21:51:18.156 RSL: RESULT = {"Var14":"1"}
21:51:18.212 RSL: RESULT = {"POWER1":"OFF"}
21:51:18.214 RSL: POWER1 = OFF
21:51:18.227 RUL: POWER1#STATE performs "backlog var14 0 ; RuleTimer1 1"
21:51:18.262 RSL: RESULT = {"POWER1":"ON"}
21:51:18.264 RSL: POWER1 = ON
21:51:18.269 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
21:51:18.291 RUL: POWER1#STATE performs "backlog var14 1 ; RuleTimer1 1"
21:51:18.311 RSL: RESULT = {"POWER1":"OFF"}
21:51:18.313 RSL: POWER1 = OFF
21:51:18.318 RSL: RESULT = {"Var14":"0"}
21:51:18.337 RUL: POWER1#STATE performs "backlog var14 0 ; RuleTimer1 1"
21:51:18.356 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
21:51:18.607 RSL: RESULT = {"Var14":"1"}
21:51:18.856 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
21:51:19.106 RSL: RESULT = {"Var14":"0"}
21:51:19.309 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
21:51:20.952 RUL: RULES#TIMER=1 performs "var15 0"
21:51:20.958 RSL: RESULT = {"Var15":"0"}
21:51:20.009 RUL: VAR15#STATE$!%VAR16% performs "backlog ; var16 0 ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'0'}"
21:51:21.026 RSL: RESULT = {"Var16":"0"}
21:51:21.311 RSL: RESULT = {"WebQuery":"Done"}
21:51:23.403 RSL: RESULT = {"Time":"2023-11-13T21:51:23","Uptime":"0T00:01:45","UptimeSec":105,"Heap":24,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"garage","BSSId":"24:5A:4C:4C:11:E8","Channel":11,"Mode":"11n","RSSI":50,"Signal":-75,"LinkCount":1,"Downtime":"0T00:00:12"}}
21:51:39.957 CMD: Status 8
21:51:39.964 RSL: STATUS8 = {"StatusSNS":{"Time":"2023-11-13T21:51:39","Switch3":"ON"}}
21:51:53.221 RSL: RESULT = {"POWER1":"ON"}
21:51:53.224 RSL: POWER1 = ON
21:51:53.240 RUL: POWER1#STATE performs "backlog var14 1 ; RuleTimer1 1"
21:51:53.257 RSL: RESULT = {"POWER1":"ON"}
21:51:53.259 RSL: POWER1 = ON
21:51:53.509 RSL: RESULT = {"Var14":"1"}
21:51:53.760 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
21:51:54.919 RUL: RULES#TIMER=1 performs "var15 1"
21:51:54.924 RSL: RESULT = {"Var15":"1"}
21:51:54.976 RUL: VAR15#STATE$!%VAR16% performs "backlog ; var16 1 ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'1'}"
21:51:55.009 RSL: RESULT = {"Var16":"1"}
21:51:55.313 RSL: RESULT = {"WebQuery":"Done"}
21:51:58.962 RSL: RESULT = {"Time":"2023-11-13T21:51:58","Uptime":"0T00:02:20","UptimeSec":140,"Heap":22,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":72,"MqttCount":0,"POWER1":"ON","POWER2":"OFF","Wifi":{"AP":1,"SSId":"garage","BSSId":"24:5A:4C:4C:11:E8","Channel":11,"Mode":"11n","RSSI":46,"Signal":-77,"LinkCount":1,"Downtime":"0T00:00:12"}}
21:52:03.560 RSL: RESULT = {"POWER1":"OFF"}
21:52:03.562 RSL: POWER1 = OFF
21:52:03.634 RUL: POWER1#STATE performs "backlog var14 0 ; RuleTimer1 1"
21:52:03.674 RSL: RESULT = {"Var14":"0"}
21:52:03.925 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
21:52:04.955 RUL: RULES#TIMER=1 performs "var15 0"
21:52:04.960 RSL: RESULT = {"Var15":"0"}
21:52:04.013 RUL: VAR15#STATE$!%VAR16% performs "backlog ; var16 0 ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'0'}"
21:52:05.026 RSL: RESULT = {"Var16":"0"}
21:52:05.346 RSL: RESULT = {"WebQuery":"Done"}
21:52:05.623 RSL: RESULT = {"POWER1":"ON"}
21:52:05.625 RSL: POWER1 = ON
21:52:05.641 RUL: POWER1#STATE performs "backlog var14 1 ; RuleTimer1 1"
21:52:05.667 RSL: RESULT = {"Var14":"1"}
21:52:06.293 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
21:52:07.920 RUL: RULES#TIMER=1 performs "var15 1"
21:52:07.925 RSL: RESULT = {"Var15":"1"}
21:52:07.977 RUL: VAR15#STATE$!%VAR16% performs "backlog ; var16 1 ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'1'}"
21:52:08.011 RSL: RESULT = {"Var16":"1"}
21:52:08.677 RSL: RESULT = {"WebQuery":"Done"}
21:52:15.887 RSL: RESULT = {"POWER1":"OFF"}
21:52:15.890 RSL: POWER1 = OFF
21:52:15.958 RUL: POWER1#STATE performs "backlog var14 0 ; RuleTimer1 1"
21:52:15.998 RSL: RESULT = {"Var14":"0"}
21:52:16.233 RSL: RESULT = {"T1":1,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}
21:52:17.915 RUL: RULES#TIMER=1 performs "var15 0"
21:52:17.921 RSL: RESULT = {"Var15":"0"}
21:52:17.974 RUL: VAR15#STATE$!%VAR16% performs "backlog ; var16 0 ; webquery http://192.168.1.79:39501/ POST {'TSync':'True','Switch1':'0'}"
21:52:18.006 RSL: RESULT = {"Var16":"0"}
21:52:18.733 RSL: RESULT = {"WebQuery":"Done"}
21:52:40.424 CMD: status 8
21:52:40.431 RSL: STATUS8 = {"StatusSNS":{"Time":"2023-11-13T21:52:40","Switch3":"OFF"}}

It is not clear to me how your driver is supposed to read the value of Switch3 and report it in the Hubitat. "Switch3" never shows up in the driver GUI under "Current States"
image
Is it supposed to?
It also doesn't add anything to the WebQuery command to report on the status of Switch3 either. Is it supposed to be included in that command?

Thanks for all your help. Hopefully I am not wasting your time.

The answer to your questions is yes and yes.

Have you done an Initialize? That is what gathers the info from the device to see what is connected and based on what it collects it can build the rule.

Do an Initialize and send me a picture of your state variables.

I don't have one of these 3 way switches to test with and based on what I'm seeing here:


......I don't think I could figure this out without some hands on. My guess is that the rules are conflicting and you are getting a race condition on/off/on/off etc.

I can help you on the other one though. Give me a few days and I'll add the option to have child devices for the fan. I have a couple of iFan04 so I can thoroughly test it out before releasing it.

Thanks for looking into this. For the 3-way switch, that's exactly what I suspect: racing condition. However, I haven't figured out how it gets triggered between the 4 rules. And I understand not being able to validate this without having the device on hand. I'll try to tinker with it.

Is it easy to change the driver to have your Tasmota Sync rule go into another position, besides 3? Or is that a difficult change? Not asking for a new driver, but if it's an easy change and you can tell me the line number, I can do the change myself.

And I'll await news on the iFan04 driver. Thanks again!

Try this: You can rename the child device after it is created.
https://github.com/GaryMilne/Temp

I get 404 error on that link.