Skip to content

Commit 16467ce

Browse files
committed
feat(subghz): add Honeywell 5834-4 keyfob protocol (#4339)
Add Sub-GHz protocol for the Honeywell 5834-4 wireless security keyfob (345 MHz, AM/OOK, 48-bit PWM-encoded frames). Implements encoder, decoder, and Add Manually menu entry with button mapping (Arm Away/Stay, Disarm, Panic), 20-bit serial extraction, battery status, and parity validation.
1 parent c9ab2b6 commit 16467ce

File tree

7 files changed

+542
-51
lines changed

7 files changed

+542
-51
lines changed

applications/debug/unit_tests/resources/unit_tests/Manifest_test

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ F:54ceacb8c156f9534fc7ee0a0911f4da:11380:subghz/holtek_ht12x_raw.sub
4040
F:4a9567c1543cf3e7bb5350b635d9076f:31238:subghz/holtek_raw.sub
4141
F:ca86c0d78364d704ff62b0698093d396:162:subghz/honeywell_wdb.sub
4242
F:f606548c935adc8d8bc804326ef67543:38415:subghz/honeywell_wdb_raw.sub
43+
F:14edaac76a69457b795c5c391cf581b1:12281:subghz/honeywell_5834_arm_away.sub
44+
F:a958447531d0ea1a1f6ee3ccb3501842:10041:subghz/honeywell_5834_disarm.sub
45+
F:d8f736cc1c020e9c062bb8ced371dcba:10239:subghz/honeywell_5834_panic.sub
46+
F:f406deee6ecb957cb40a8edcad58f842:13442:subghz/honeywell_5834_stay.sub
4347
F:20bba4b0aec006ced7e82513f9459e31:15532:subghz/hormann_hsm_raw.sub
4448
F:3392f2db6aa7777e937db619b86203bb:10637:subghz/ido_117_111_raw.sub
4549
F:cc5c7968527cc233ef11a08986e31bf2:167:subghz/intertechno_v3.sub

applications/main/subghz/helpers/subghz_custom_event.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ typedef enum {
2222
SubmenuIndexSecPlus_v2_310_00,
2323
SubmenuIndexSecPlus_v2_315_00,
2424
SubmenuIndexSecPlus_v2_390_00,
25+
SubmenuIndexHoneywell5834_345,
2526

2627
//SubGhzCustomEvent
2728
SubGhzCustomEventSceneDeleteSuccess = 100,

applications/main/subghz/scenes/subghz_scene_set_type.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ void subghz_scene_set_type_on_enter(void* context) {
109109
SubmenuIndexSecPlus_v2_390_00,
110110
subghz_scene_set_type_submenu_callback,
111111
subghz);
112+
submenu_add_item(
113+
subghz->submenu,
114+
"Honeywell5834_345",
115+
SubmenuIndexHoneywell5834_345,
116+
subghz_scene_set_type_submenu_callback,
117+
subghz);
112118

113119
submenu_set_selected_item(
114120
subghz->submenu, scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneSetType));
@@ -212,6 +218,16 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
212218
generated_protocol = subghz_txrx_gen_secplus_v2_protocol(
213219
subghz->txrx, "AM650", 390000000, key, 0x68, 0xE500000);
214220
break;
221+
case SubmenuIndexHoneywell5834_345: {
222+
/* 20-bit random serial in bits [47:28], default Arm Away state */
223+
uint64_t serial_20 = (uint64_t)(key & 0xFFFFF) << 28;
224+
uint64_t state_bits = (uint64_t)0x40 << 4; /* Arm Away in state byte */
225+
uint64_t frame = serial_20 | state_bits;
226+
/* Set parity: bit 0 = popcount parity of bits [47:1] */
227+
frame |= subghz_protocol_blocks_get_parity(frame >> 1, 47);
228+
generated_protocol = subghz_txrx_gen_data_protocol(
229+
subghz->txrx, "AM650", 345000000, SUBGHZ_PROTOCOL_HONEYWELL_5834_NAME, frame, 48);
230+
} break;
215231
default:
216232
return false;
217233
break;

0 commit comments

Comments
 (0)