Hi Mark,
I really like your new Duofern integration 
it’s more neatly and self contained (not dependant on external python libraries like PyDuofern) like you wrote.
Also I like the push based status instead of polling and the Async communication instead of thread based stuff like PyDuofern.
Sure i’m willing to provide Duofern logs for Sun sensors. (I only have 2 9478’s)
and willing to help test it out.
Below is my “bare” Duofern log my ESP32 Duofern application captures when the solar sensor trips to Sun state or No Sun state.
6F1234 is my network key and A524A8 is my 9478 Sun sensor (solar powered).
“6F1234 A524A8 00 0015BF 142011 FF070801FF0100000000000000 1B525687BA0B”,
“6F1234 A524A8 00 0015BF 242011 FF070801FF0100000000000000 7E219F834A7F”,
“6F1234 A524A8 00 0015C0 042011 FF070801FF0100000000000000 CD4327D50969”,
“6F1234 A524A8 00 0015C0 142011 FF070801FF0100000000000000 C2176BEE7D68”,
“6F1234 A524A8 00 0015C1 042011 FF070801FF0100000000000000 B3E8B84ECBFA”,
“A524A8 6F1234 02 0015C2 042011 FF070801FF0100000000000000 908BA4DB4A47”,
“A524A8 6F1234 03 0015C0 032011 FF070801FF0100000000000000 136FF60E7E33”,
“6F1234 A524A8 00 0015C3 042011 FF070801FF0100000000000000 E9F1F2A31D7C”,
“A524A8 6F1234 02 0015C4 032011 FF070801FF0100000000000000 2103666E0A08”,
“6F1234 A524A8 00 0015C5 042011 FF070A01000100000000000000 234444292FD8”,
“A524A8 6F1234 02 0015C6 032011 FF070A01000100000000000000 5B56B8F41C64”,
“6F1234 A524A8 00 0015C7 042011 FF070801FF0100000000000000 75C65684BA4C”,
“6F1234 A524A8 00 0015C7 142011 FF070801FF0100000000000000 9C6E977D65B8”,
“A524A8 6F1234 02 0015C8 032011 FF070801FF0100000000000000 ADD8CA4FA7D8”,
“6F1234 A524A8 00 0015C9 042011 FF070A01000100000000000000 8721E1FDCDFA”,
“A524A8 6F1234 02 0015CA 042011 FF070A01000100000000000000 C9B449E749EE”,
“A524A8 6F1234 02 0015CA 032011 FF070A01000100000000000000 BF3355C8BA86”,
For comparison 407F0E is my one Rollotron attached at the moment. (think it’s a 1200 model, not sure)
You will recogize the different Duofern status stuff in the 6’th string part.
In the 4’th string part you see the incrementing counter.
I can also see “unhandled” duofern messages in your Duofern logs like:
Unhandled message type 0x0F: 0FFF070A0100010000000000000001A524A86F123400
2026-02-26 08:44:53.832 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration duofern which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2026-02-26 08:45:14.096 INFO (MainThread) [custom_components.duofern] Setting up DuoFern integration: port=/dev/ttyUSB5, system_code=6F1234, devices=2
2026-02-26 08:45:14.104 INFO (MainThread) [custom_components.duofern.stick] Connecting to DuoFern stick on /dev/ttyUSB5 (system code: 6F1234)
2026-02-26 08:45:14.113 DEBUG (MainThread) [custom_components.duofern.stick] Serial port opened: /dev/ttyUSB5
2026-02-26 08:45:14.113 DEBUG (MainThread) [custom_components.duofern.stick] Init attempt 1/4
2026-02-26 08:45:14.113 DEBUG (MainThread) [custom_components.duofern.stick] TX: 01000000000000000000000000000000000000000000
2026-02-26 08:45:14.114 DEBUG (MainThread) [custom_components.duofern.stick] Serial connection established
2026-02-26 08:45:14.128 DEBUG (MainThread) [custom_components.duofern.stick] TX: 0E000000000000000000000000000000000000000000
2026-02-26 08:45:14.144 DEBUG (MainThread) [custom_components.duofern.stick] TX: 0A6F1234000100000000000000000000000000000000
2026-02-26 08:45:14.176 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-26 08:45:14.176 DEBUG (MainThread) [custom_components.duofern.stick] TX: 14140000000000000000000000000000000000000000
2026-02-26 08:45:14.207 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-26 08:45:14.213 DEBUG (MainThread) [custom_components.duofern.stick] TX: 0300407F0E0000000000000000000000000000000000
2026-02-26 08:45:14.231 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-26 08:45:14.231 DEBUG (MainThread) [custom_components.duofern.stick] TX: 0301A524A80000000000000000000000000000000000
2026-02-26 08:45:14.270 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-26 08:45:14.270 DEBUG (MainThread) [custom_components.duofern.stick] TX: 10010000000000000000000000000000000000000000
2026-02-26 08:45:14.294 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-26 08:45:14.300 DEBUG (MainThread) [custom_components.duofern.stick] TX: 0DFF0F400000000000000000000000000000FFFFFF01
2026-02-26 08:45:14.340 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-26 08:45:14.346 INFO (MainThread) [custom_components.duofern.stick] DuoFern stick init complete (attempt 1)
2026-02-26 08:45:14.350 INFO (MainThread) [custom_components.duofern.stick] DuoFern stick initialized successfully
2026-02-26 08:45:14.351 INFO (MainThread) [custom_components.duofern.coordinator] DuoFern coordinator connected
2026-02-26 08:45:15.022 DEBUG (MainThread) [custom_components.duofern.stick] RX: 0FFF0F210000640000004100120000407F0E6F123401
2026-02-26 08:45:15.029 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-26 08:45:15.034 DEBUG (MainThread) [custom_components.duofern.coordinator] Status update for 407F0E: position=0, moving=stop
2026-02-26 08:45:15.034 DEBUG (MainThread) [custom_components.duofern.coordinator] Manually updated duofern data
2026-02-26 08:45:27.678 DEBUG (MainThread) [custom_components.duofern.cover] Adding cover entity for device 407F0E
2026-02-26 08:45:27.700 WARNING (MainThread) [homeassistant.helpers.frame] Detected that custom integration 'duofern' calls `device_registry.async_get_or_create` referencing a non existing `via_device` ('duofern', '6F1234'), with device info: {'identifiers': {('duofern', '407F0E')}, 'manufacturer': 'Rademacher', 'model': 'RolloTron Standard', 'name': 'DuoFern RolloTron Standard (407F0E)', 'sw_version': None, 'via_device': ('duofern', '6F1234')} at custom_components/duofern/cover.py, line 59: async_add_entities(entities). This will stop working in Home Assistant 2025.12.0, please create a bug report at https://github.com/MSchenkl/homeassistant-duofern/issues
2026-02-26 08:45:27.701 INFO (MainThread) [custom_components.duofern.cover] Added 1 DuoFern cover entities
2026-02-26 09:36:36.353 DEBUG (MainThread) [custom_components.duofern.stick] RX: 0FFF070801FF010000000000000001A524A86F123400
2026-02-26 09:36:36.353 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-26 09:36:36.354 DEBUG (MainThread) [custom_components.duofern.coordinator] Unhandled message type 0x0F: 0FFF070801FF010000000000000001A524A86F123400
2026-02-26 17:51:31.190 DEBUG (MainThread) [custom_components.duofern.stick] RX: 0FFF070A0100010000000000000001A524A86F123400
2026-02-26 17:51:31.190 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-26 17:51:31.191 DEBUG (MainThread) [custom_components.duofern.coordinator] Unhandled message type 0x0F: 0FFF070A0100010000000000000001A524A86F123400
2026-02-26 19:00:27.937 DEBUG (MainThread) [custom_components.duofern.stick] Command queued: 0D01070300000000000000000000006F1234407F0E00 (queue size: 1)
2026-02-26 19:00:27.937 DEBUG (MainThread) [custom_components.duofern.coordinator] Manually updated duofern data
2026-02-26 19:00:27.939 DEBUG (MainThread) [custom_components.duofern.stick] TX: 0D01070300000000000000000000006F1234407F0E00
2026-02-26 19:00:27.939 DEBUG (MainThread) [custom_components.duofern.stick] Command sent: 0D01070300000000000000000000006F1234407F0E00
2026-02-26 19:00:30.265 DEBUG (MainThread) [custom_components.duofern.stick] RX: 810100BB00000000000000000000006F1234407F0E00
2026-02-26 19:00:30.266 DEBUG (MainThread) [custom_components.duofern.stick] ACK received for command
2026-02-26 19:00:57.883 DEBUG (MainThread) [custom_components.duofern.stick] RX: 0FFF0F210000640000004164120000407F0EFFFFFF01
2026-02-26 19:00:57.883 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-26 19:00:57.884 DEBUG (MainThread) [custom_components.duofern.coordinator] Status update for 407F0E: position=100, moving=stop
2026-02-26 19:00:57.884 DEBUG (MainThread) [custom_components.duofern.coordinator] Manually updated duofern data
2026-02-27 07:02:05.887 DEBUG (MainThread) [custom_components.duofern.stick] Command queued: 0D01070100000000000000000000006F1234407F0E00 (queue size: 1)
2026-02-27 07:02:05.887 DEBUG (MainThread) [custom_components.duofern.coordinator] Manually updated duofern data
2026-02-27 07:02:05.888 DEBUG (MainThread) [custom_components.duofern.stick] TX: 0D01070100000000000000000000006F1234407F0E00
2026-02-27 07:02:05.888 DEBUG (MainThread) [custom_components.duofern.stick] Command sent: 0D01070100000000000000000000006F1234407F0E00
2026-02-27 07:02:08.213 DEBUG (MainThread) [custom_components.duofern.stick] RX: 810100BB00000000000000000000006F1234407F0E00
2026-02-27 07:02:08.213 DEBUG (MainThread) [custom_components.duofern.stick] ACK received for command
2026-02-27 07:02:41.768 DEBUG (MainThread) [custom_components.duofern.stick] RX: 0FFF0F210000640000004100120000407F0EFFFFFF01
2026-02-27 07:02:41.769 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-27 07:02:41.769 DEBUG (MainThread) [custom_components.duofern.coordinator] Status update for 407F0E: position=0, moving=stop
2026-02-27 07:02:41.769 DEBUG (MainThread) [custom_components.duofern.coordinator] Manually updated duofern data
2026-02-27 07:41:22.043 DEBUG (MainThread) [custom_components.duofern.stick] Command queued: 0D01070100000000000000000000006F1234407F0E00 (queue size: 1)
2026-02-27 07:41:22.043 DEBUG (MainThread) [custom_components.duofern.coordinator] Manually updated duofern data
2026-02-27 07:41:22.045 DEBUG (MainThread) [custom_components.duofern.stick] TX: 0D01070100000000000000000000006F1234407F0E00
2026-02-27 07:41:22.045 DEBUG (MainThread) [custom_components.duofern.stick] Command sent: 0D01070100000000000000000000006F1234407F0E00
2026-02-27 07:41:22.138 DEBUG (MainThread) [custom_components.duofern.stick] RX: 810003CC00000000000000000000006F1234407F0E00
2026-02-27 07:41:22.138 DEBUG (MainThread) [custom_components.duofern.stick] ACK received for command
2026-02-27 09:39:32.427 DEBUG (MainThread) [custom_components.duofern.stick] RX: 0FFF070801FF010000000000000001A524A86F123400
2026-02-27 09:39:32.427 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-27 09:39:32.427 DEBUG (MainThread) [custom_components.duofern.coordinator] Unhandled message type 0x0F: 0FFF070801FF010000000000000001A524A86F123400
2026-02-27 09:49:40.238 DEBUG (MainThread) [custom_components.duofern.stick] RX: 0FFF070801FF010000000000000001A524A86F123400
2026-02-27 09:49:40.239 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-27 09:49:40.239 DEBUG (MainThread) [custom_components.duofern.coordinator] Unhandled message type 0x0F: 0FFF070801FF010000000000000001A524A86F123400
2026-02-27 12:49:36.582 DEBUG (MainThread) [custom_components.duofern.stick] RX: 0FFF070A0100010000000000000001A524A86F123400
2026-02-27 12:49:36.582 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-27 12:49:36.583 DEBUG (MainThread) [custom_components.duofern.coordinator] Unhandled message type 0x0F: 0FFF070A0100010000000000000001A524A86F123400
2026-02-27 13:06:56.082 DEBUG (MainThread) [custom_components.duofern.stick] RX: 0FFF070801FF010000000000000001A524A86F123400
2026-02-27 13:06:56.082 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-27 13:06:56.083 DEBUG (MainThread) [custom_components.duofern.coordinator] Unhandled message type 0x0F: 0FFF070801FF010000000000000001A524A86F123400
2026-02-27 13:32:39.288 DEBUG (MainThread) [custom_components.duofern.stick] RX: 0FFF070A0100010000000000000001A524A86F123400
2026-02-27 13:32:39.288 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-27 13:32:39.289 DEBUG (MainThread) [custom_components.duofern.coordinator] Unhandled message type 0x0F: 0FFF070A0100010000000000000001A524A86F123400
2026-02-27 19:02:09.244 DEBUG (MainThread) [custom_components.duofern.stick] Command queued: 0D01070300000000000000000000006F1234407F0E00 (queue size: 1)
2026-02-27 19:02:09.245 DEBUG (MainThread) [custom_components.duofern.coordinator] Manually updated duofern data
2026-02-27 19:02:09.246 DEBUG (MainThread) [custom_components.duofern.stick] TX: 0D01070300000000000000000000006F1234407F0E00
2026-02-27 19:02:09.247 DEBUG (MainThread) [custom_components.duofern.stick] Command sent: 0D01070300000000000000000000006F1234407F0E00
2026-02-27 19:02:09.372 DEBUG (MainThread) [custom_components.duofern.stick] RX: 810003CC00000000000000000000006F1234407F0E00
2026-02-27 19:02:09.372 DEBUG (MainThread) [custom_components.duofern.stick] ACK received for command
2026-02-27 19:02:38.809 DEBUG (MainThread) [custom_components.duofern.stick] RX: 0FFF0F210000640000004164120000407F0EFFFFFF01
2026-02-27 19:02:38.809 DEBUG (MainThread) [custom_components.duofern.stick] TX: 81000000000000000000000000000000000000000000
2026-02-27 19:02:38.809 DEBUG (MainThread) [custom_components.duofern.coordinator] Status update for 407F0E: position=100, moving=stop
2026-02-27 19:02:38.809 DEBUG (MainThread) [custom_components.duofern.coordinator] Manually updated duofern data
2026-02-27 19:21:30.797 WARNING (SyncWorker_7) [homeassistant.loader] We found a custom integration duofern which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
A524A8 my Sun sensor is visible there 
As for backup solution instead of the USB stick, i’m develloping my own bare metal Duofern solution based on ESP32 chip & NRF905 wireless transceiver.
But this is a long work in progress since I do this in my spare time.
At the moment it’s just experimental code just to test out from a webpage on the ESP32: (marked below is the same sun sensor messages from today)
I’m just starting to learn all different Duofern packets also with the help of FHEM & PyDuofern code. Also how to send & receive since you have to retry or send some packets multiple times, include incrementing ID’s and since NRF905 sends our bare wireless also add some magic Duofern secret hash codes.
Hardware is based on a design by Joost who did an ESP32 to NRF905 board to control Zehnder air units. (discussed here: Zehnder comfofan s aansturen via RPi, Arduino - Modding, mechanica en elektronica - GoT)
You can find his ESP32/NRF905 PCB here:
Zehnder ComfoAir Home Assistant controller from JoooostB on Tindie
And his fitting 3D print case here:
Zehnder ComfoAir ESP32 nRF905 PCB Case - Free 3D Print Model - MakerWorld
It looks like this then: (my Duofern backup solution when my original Rademacher USB stick will fail):
Zehnder uses other Frequency, but you can change the NRF905 frequency to fit Duofern’s 434.5 MHz.
Other solution would be to use NRF905 ESPHOME.