ISSUE-4339: Add Sub-GHz protocol for Honeywell 5834-4#4348
ISSUE-4339: Add Sub-GHz protocol for Honeywell 5834-4#4348herbenderbler wants to merge 1 commit intoflipperdevices:devfrom
Conversation
05ac34a to
16467ce
Compare
|
How would I test this out? |
Since I'm in the US, these were the steps I had to take for as comprehensive of an end-to-end test as I could get. Let me know if you run into any issues. It's altogether possible I forgot to document a step 😅 Testing Honeywell 5834-4 SubGHz TX on a US FlipperThe Honeywell 5834-4 preset uses 345 MHz, which is outside US SubGHz transmit bands (304–322 MHz, 433–435 MHz, 915–928 MHz). To test transmit on a US Flipper, the firmware uses a region override: when built with Implementation: In Testing steps1. Checkout the branchcd /path/to/flipperzero-firmware
git checkout ISSUE-4339/add-honeywell-5834-42. Build with the region overrideUse the same ./fbt --extra-define=FURI_HAL_REGION_OVERRIDE_UNLOCKEDFor a full updater package (firmware + resources, e.g. for USB install): ./fbt --extra-define=FURI_HAL_REGION_OVERRIDE_UNLOCKED updater_package3. Flash the FlipperOption A — USB (Flipper on, connected via USB): ./fbt --extra-define=FURI_HAL_REGION_OVERRIDE_UNLOCKED flash_usbOption B — Debugger (ST-Link or compatible probe): ./fbt --extra-define=FURI_HAL_REGION_OVERRIDE_UNLOCKED flashIf you built 4. (Optional) Run SubGHz unit testsBuild and flash with the unit-tests app set and the same region override: ./fbt --extra-define=FURI_HAL_REGION_OVERRIDE_UNLOCKED FIRMWARE_APP_SET=unit_tests updater_packageFlash that build, ensure SD resources are present (e.g. from the built package), then connect via CLI and run: Or run only the Honeywell 5834 tests: These tests do not transmit over the air; they use files on the SD card. 5. Test SubGHz TX at 345 MHz on the device
TX should no longer be blocked; the Flipper will transmit on 345 MHz. You can verify with a receiver or a second device running SubGHz Read on 345 MHz. 6. Restore normal region when done testingRebuild and reflash without the override so the device again uses its real hardware region (e.g. US): ./fbt updater_package
./fbt flash_usb(Or use Summary
Important: The override is for development and testing only. Do not leave the device on an unlocked build for normal use; transmitting outside your region may violate local regulations. |
|
Is there any way you could add this into the unleashed firmware fork? |
Did everything work for you? Exactly which physical card did you use to test? |
|
Yep! But unfortunately when I upgraded back to unleashed, the flipper could not parse the file.
…________________________________
From: Herbenderbler ***@***.***>
Sent: Saturday, March 14, 2026 12:15:59 AM
To: flipperdevices/flipperzero-firmware ***@***.***>
Cc: Ryan Kim ***@***.***>; Comment ***@***.***>
Subject: Re: [flipperdevices/flipperzero-firmware] ISSUE-4339: Add Sub-GHz protocol for Honeywell 5834-4 (PR #4348)
[https://avatars.githubusercontent.com/u/2105?s=20&v=4]herbenderbler left a comment (flipperdevices/flipperzero-firmware#4348)<#4348 (comment)>
Is there any way you could add this into the unleashed firmware fork?
Did it work for you?
Momentum pulls in these upstream changes. Ideally this PR will land, get merged, and pulled in downstream.
—
Reply to this email directly, view it on GitHub<#4348 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/BIJMCWYDJKWITPIIO7UHT7L4QTTI7AVCNFSM6AAAAACWO2PJRGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHM2DANJZGU3TSNZRGU>.
You are receiving this because you commented.Message ID: ***@***.***>
|
It looks like Unleashed pulls in the upstream changes from here. I think the best path forward is to ask the |
- Add Honeywell 5834-4 decoder and encoder (345 MHz, 48-bit frame, AM650, pulse-width encoding; Arm Away, Stay, Disarm, Panic) - Register protocol and add Set Type preset Honeywell5834_345 - Add unit tests and test assets (honeywell_5834.sub, Manifest_test) - Size encoder upload buffer for 48-bit frame only (H5834_UPLOAD_MAX) to save ~116 bytes RAM per encoder instance on device
What do you mean by physical card? |
f862c53 to
e5682e3
Compare
Just curious which kind of fob you're using to test this. I'd like to get my hands on one to test it in the wild. |

What's new
Add Sub-GHz Protocol: Honeywell 5834-4 Wireless Security Keyfob
Problem
There is no support for the Honeywell 5834-4 wireless security keyfob in the Sub-GHz application. This 4-button keyfob (Arm Away, Arm Stay, Disarm, Panic) operates at 345 MHz using AM/OOK modulation and is part of the Honeywell 5800 wireless security series. Users cannot decode, save, or generate these signals.
This PR closes #4339
Solution
Added a new dedicated Sub-GHz protocol (
Honeywell5834) with full encoder, decoder, and "Add Manually" support.Why a new protocol instead of extending the existing Honeywell WDB? The 5834-4 keyfob and the WDB doorbell share the same 5800-series frame structure, but they differ in meaningful ways:
Keeping them separate avoids overloading the WDB protocol with branching logic and makes each protocol's decoder state machine, timing constants, and display formatting clean and self-contained.
What Changed
New files:
honeywell_5834.h— Protocol headerhoneywell_5834.c— Full implementation: 4-step decoder state machine (sync gap → sync pulse → bit accumulation → validation), PWM encoder, parity check, button mapping,get_string()display formattingEmbedded optimizations (Honeywell 5834-4)
Encoder RAM
The transmit buffer is sized to the exact 48-bit frame:
H5834_UPLOAD_MAX = 3 + 48×2(99LevelDurationentries) instead of 128, saving ~116 bytes of heap per encoder instance when sending.Modified files:
protocol_items.h— Added#include "honeywell_5834.h"protocol_items.c— Registered&subghz_protocol_honeywell_5834in the protocol registrysubghz_custom_event.h— AddedSubmenuIndexHoneywell5834_345enum valuesubghz_scene_set_type.c— Added "Honeywell5834_345" menu entry under Add Manually; generates a random 20-bit serial with default "Arm Away" button and correct paritylib/subghz/protocols/honeywell_5834.c:H5834_UPLOAD_MAXconstant and a comment (sync + 48 data bits × 2 = 99 entries).size_uploadis set toH5834_UPLOAD_MAXand the buffer is allocated with that size instead of 128.subghz_protocol_encoder_honeywell_5834_get_upload: The “size exceeds buffer” check compares againstH5834_UPLOAD_MAXinstead ofinstance->encoder.size_upload; the comment was updated to reference the 48-bit frame andH5834_UPLOAD_MAX.Protocol Details
Verification
./fbt lint_allpasses (C format, Python format, image lint)Checklist (For Reviewer)