rf-protocols 3.1.0__tar.gz → 3.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/PKG-INFO +1 -1
  2. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/pyproject.toml +1 -1
  3. rf_protocols-3.3.0/rf_protocols/codes/novy/cooker_hood/__init__.py +47 -0
  4. rf_protocols-3.3.0/rf_protocols/commands/ev1527.py +124 -0
  5. rf_protocols-3.3.0/rf_protocols/commands/novy.py +94 -0
  6. rf_protocols-3.3.0/rf_protocols/commands/pilota_casa.py +154 -0
  7. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols.egg-info/PKG-INFO +1 -1
  8. rf_protocols-3.3.0/rf_protocols.egg-info/SOURCES.txt +26 -0
  9. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/__init__.py +0 -8
  10. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_1/ambient_light.sub +0 -7
  11. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_1/light.sub +0 -7
  12. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_1/minus.sub +0 -7
  13. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_1/plus.sub +0 -7
  14. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_1/power.sub +0 -7
  15. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_10/ambient_light.sub +0 -7
  16. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_10/light.sub +0 -7
  17. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_10/minus.sub +0 -7
  18. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_10/plus.sub +0 -7
  19. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_10/power.sub +0 -7
  20. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_2/ambient_light.sub +0 -7
  21. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_2/light.sub +0 -7
  22. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_2/minus.sub +0 -7
  23. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_2/plus.sub +0 -7
  24. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_2/power.sub +0 -7
  25. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_3/ambient_light.sub +0 -7
  26. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_3/light.sub +0 -7
  27. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_3/minus.sub +0 -7
  28. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_3/plus.sub +0 -7
  29. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_3/power.sub +0 -7
  30. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_4/ambient_light.sub +0 -7
  31. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_4/light.sub +0 -7
  32. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_4/minus.sub +0 -7
  33. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_4/plus.sub +0 -7
  34. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_4/power.sub +0 -7
  35. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_5/ambient_light.sub +0 -7
  36. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_5/light.sub +0 -7
  37. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_5/minus.sub +0 -7
  38. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_5/plus.sub +0 -7
  39. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_5/power.sub +0 -7
  40. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_6/ambient_light.sub +0 -7
  41. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_6/light.sub +0 -7
  42. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_6/minus.sub +0 -7
  43. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_6/plus.sub +0 -7
  44. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_6/power.sub +0 -7
  45. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_7/ambient_light.sub +0 -7
  46. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_7/light.sub +0 -7
  47. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_7/minus.sub +0 -7
  48. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_7/plus.sub +0 -7
  49. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_7/power.sub +0 -7
  50. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_8/ambient_light.sub +0 -7
  51. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_8/light.sub +0 -7
  52. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_8/minus.sub +0 -7
  53. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_8/plus.sub +0 -7
  54. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_8/power.sub +0 -7
  55. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_9/ambient_light.sub +0 -7
  56. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_9/light.sub +0 -7
  57. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_9/minus.sub +0 -7
  58. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_9/plus.sub +0 -7
  59. rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_9/power.sub +0 -7
  60. rf_protocols-3.1.0/rf_protocols.egg-info/SOURCES.txt +0 -73
  61. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/LICENSE +0 -0
  62. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/README.md +0 -0
  63. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/__init__.py +0 -0
  64. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/codes/honeywell/string_lights/__init__.py +0 -0
  65. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/codes/honeywell/string_lights/turn_off.sub +0 -0
  66. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/codes/honeywell/string_lights/turn_on.sub +0 -0
  67. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/codes/somfy/rts/__init__.py +0 -0
  68. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/commands/__init__.py +0 -0
  69. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/commands/kaku.py +0 -0
  70. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/commands/ook.py +0 -0
  71. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/commands/pt2262.py +0 -0
  72. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/commands/somfy_rts.py +0 -0
  73. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/loader.py +0 -0
  74. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/parser.py +0 -0
  75. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols.egg-info/dependency_links.txt +0 -0
  76. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols.egg-info/requires.txt +0 -0
  77. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols.egg-info/top_level.txt +0 -0
  78. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/setup.cfg +0 -0
  79. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/tests/test_loader.py +0 -0
  80. {rf_protocols-3.1.0 → rf_protocols-3.3.0}/tests/test_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rf-protocols
3
- Version: 3.1.0
3
+ Version: 3.3.0
4
4
  Summary: Library to decode and encode radio frequency signals.
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/home-assistant-libs/rf-protocols
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "rf-protocols"
7
- version = "3.1.0"
7
+ version = "3.3.0"
8
8
  license = "MIT"
9
9
  description = "Library to decode and encode radio frequency signals."
10
10
  readme = "README.md"
@@ -0,0 +1,47 @@
1
+ """Novy cooker-hood button codes."""
2
+
3
+ from enum import Enum
4
+
5
+ from ....commands.novy import NovyCookerHoodCommand
6
+
7
+
8
+ class NovyCookerHoodButton(Enum):
9
+ """Novy cooker-hood button identifiers.
10
+
11
+ Each member's value is the (key_code, key_width_bits) pair
12
+ transmitted in the frame.
13
+ """
14
+
15
+ MINUS = (0x1, 2)
16
+ PLUS = (0x2, 2)
17
+ AMBIENT = (0x3, 2)
18
+ POWER = (0x2C, 8)
19
+ LIGHT = (0x2E, 8)
20
+ LIGHT_MINUS = (0x31, 8)
21
+ LIGHT_PLUS = (0x34, 8)
22
+ AMBIENT_MINUS = (0x29, 8)
23
+ AMBIENT_PLUS = (0x32, 8)
24
+ MINUS_PLUS = (0x37, 8)
25
+
26
+ def __init__(self, code: int, width: int) -> None:
27
+ """Initialize the button with its key code and frame width."""
28
+ self.code = code
29
+ self.width = width
30
+
31
+ def to_command(
32
+ self,
33
+ *,
34
+ channel: int,
35
+ timebase_us: int = 360,
36
+ frequency: int = 433_920_000,
37
+ repeat_count: int = 5,
38
+ ) -> NovyCookerHoodCommand:
39
+ """Build a NovyCookerHoodCommand for this button."""
40
+ return NovyCookerHoodCommand(
41
+ channel=channel,
42
+ key=self.code,
43
+ key_width=self.width,
44
+ timebase_us=timebase_us,
45
+ frequency=frequency,
46
+ repeat_count=repeat_count,
47
+ )
@@ -0,0 +1,124 @@
1
+ """Protocol for EV1527 compatible devices
2
+
3
+ EV1527, RT1527, FP1527 is a simple 24-bit RF protocol used by self-learning remote controls
4
+ and RF switches. It uses Pulse Width Modulation (PWM) encoding where a wide
5
+ pulse represents 1 and a short pulse represents 0.
6
+ The chip has a fixed 20-bit device id and 4 data pin inputs, which are typically used to encode a button or channel number.
7
+ The protocol uses a configurable time base (step duration). Common manufacturers
8
+ and their step durations:
9
+ - Logilight radio controlled sockets EC0001-EC0004: ~300 µs
10
+ - eMylo switches: ~350 µs
11
+
12
+ Encoding:
13
+ Each bit is encoded as follows:
14
+
15
+ ____
16
+ Bit 0 : _| |____________
17
+ |<1a>|<---3a---->|
18
+
19
+ ____________
20
+ Bit 1 : _| |____
21
+ |<----3a---->|<1a>|
22
+
23
+ ____
24
+ Sync : _| |___________ _ _ _ ____________
25
+ |<1a>|<-----------31a------------->|
26
+
27
+ Telegram layout:
28
+ - Sync
29
+ - 24 data bits
30
+ - End of transmission
31
+
32
+ Common data layout:
33
+ - 20 bits: device/unit code
34
+ - 4 bits: button/channel
35
+
36
+ Reference:
37
+ https://www.seegel-systeme.de/2015/09/05/funksteckdosen-mit-dem-raspberry-pi-steuern/
38
+ http://www.sc-tech.cn/en/EV1527.pdf
39
+ """
40
+
41
+ from __future__ import annotations
42
+
43
+ from typing import override
44
+
45
+ from . import ModulationType, RadioFrequencyCommand
46
+
47
+ _DEFAULT_FREQUENCY = 433_920_000
48
+ _DEFAULT_REPEATS = 4
49
+ _DEFAULT_TIMEBASE_US = 275
50
+
51
+
52
+ class EV1527Command(RadioFrequencyCommand):
53
+ """Encode an EV1527-compatible RF command.
54
+
55
+ Data layout:
56
+ - 20 bits: device ID
57
+ - 4 bits: data/button (0..15)
58
+ """
59
+
60
+ device_id: int
61
+ data: int
62
+ timebase_us: int
63
+
64
+ def __init__(
65
+ self,
66
+ *,
67
+ device_id: int,
68
+ data: int,
69
+ frame_repeats: int = _DEFAULT_REPEATS,
70
+ frequency: int = _DEFAULT_FREQUENCY,
71
+ timebase_us: int = _DEFAULT_TIMEBASE_US,
72
+ ) -> None:
73
+ """Initialize the EV1527 command.
74
+
75
+ Args:
76
+ device_id: 20-bit device ID (0..1048575)
77
+ data: Data/button bits (0..15)
78
+ frame_repeats: Number of times to repeat the frame
79
+ frequency: RF frequency in Hz
80
+ timebase_us: Time base in microseconds
81
+ """
82
+
83
+ if device_id < 0 or device_id >= (1 << 20):
84
+ raise ValueError("device_id must be in range 0..1048575 (20-bit)")
85
+ if data < 0 or data > 15:
86
+ raise ValueError("data must be in range 0..15")
87
+
88
+ super().__init__(
89
+ frequency=frequency,
90
+ modulation=ModulationType.OOK,
91
+ repeat_count=frame_repeats,
92
+ )
93
+ self.device_id = device_id
94
+ self.data = data
95
+ self.timebase_us = timebase_us
96
+
97
+ @override
98
+ def get_raw_timings(self) -> list[int]:
99
+ """Compute EV1527 frame timings using PWM encoding.
100
+
101
+ Encodes: sync + 24 data bits (LSB first).
102
+ """
103
+ # PWM symbol definitions (1a = short, 3a = long)
104
+ _symbols = {
105
+ "0": [self.timebase_us, -3 * self.timebase_us],
106
+ "1": [3 * self.timebase_us, -self.timebase_us],
107
+ "sync": [self.timebase_us, -31 * self.timebase_us],
108
+ }
109
+
110
+ # Encode 20-bit device ID in LSB (reverse bits)
111
+ device_id_bits = format(self.device_id, "020b")[::-1]
112
+ symstr: list[str] = [*device_id_bits]
113
+
114
+ # Encode 4-bit data in LSB (reverse bits)
115
+ data_bits = format(self.data, "04b")[::-1]
116
+ symstr.extend(data_bits)
117
+
118
+ # Build timings: sync + symbols
119
+ timings: list[int] = []
120
+ timings.extend(_symbols["sync"])
121
+ for s in symstr:
122
+ timings.extend(_symbols[s])
123
+
124
+ return timings
@@ -0,0 +1,94 @@
1
+ """Encoder for Novy cooker-hood RF remotes.
2
+
3
+ 433.92 MHz OOK. Compatible with Novy 4-button remotes (models 840029,
4
+ 840039, 840049). The remote has 10 user-selectable channels; pair this
5
+ encoder to the channel your hood is set to.
6
+
7
+ References:
8
+ - https://github.com/martijndierckx/novy-433
9
+ - https://github.com/renedis/ESP32_Novy_Controller
10
+ - https://github.com/RFD-FHEM/RFFHEM (Protocol 86, also implemented in
11
+ ``14_SD_UT.pm`` as ``Novy_840029`` / ``Novy_840039``)
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from typing import override
17
+
18
+ from . import ModulationType, RadioFrequencyCommand
19
+
20
+ _DEFAULT_FREQUENCY = 433_920_000
21
+ _DEFAULT_REPEATS = 5
22
+ _DEFAULT_TIMEBASE_US = 360
23
+ _INTER_FRAME_US = 10_000
24
+
25
+ _CHANNEL_CODES: dict[int, int] = {
26
+ 1: 0x2AA,
27
+ 2: 0x1AA,
28
+ 3: 0x3AA,
29
+ 4: 0x06A,
30
+ 5: 0x26A,
31
+ 6: 0x16A,
32
+ 7: 0x36A,
33
+ 8: 0x0EA,
34
+ 9: 0x2EA,
35
+ 10: 0x1EA,
36
+ }
37
+
38
+
39
+ class NovyCookerHoodCommand(RadioFrequencyCommand):
40
+ """Encode a Novy cooker-hood RF remote frame.
41
+
42
+ Sends one of the 10 channels with the given key. Button names and
43
+ their key codes are exposed by ``rf_protocols.codes.novy.cooker_hood``.
44
+ """
45
+
46
+ channel: int
47
+ key: int
48
+ key_width: int
49
+ timebase_us: int
50
+
51
+ def __init__(
52
+ self,
53
+ *,
54
+ channel: int,
55
+ key: int,
56
+ key_width: int,
57
+ timebase_us: int = _DEFAULT_TIMEBASE_US,
58
+ frequency: int = _DEFAULT_FREQUENCY,
59
+ repeat_count: int = _DEFAULT_REPEATS,
60
+ ) -> None:
61
+ """Initialize the Novy command."""
62
+ if channel not in _CHANNEL_CODES:
63
+ raise ValueError("channel must be in range 1..10")
64
+ if key < 0 or key >= (1 << key_width):
65
+ raise ValueError(f"key must fit in {key_width} bits")
66
+
67
+ super().__init__(
68
+ frequency=frequency,
69
+ modulation=ModulationType.OOK,
70
+ repeat_count=repeat_count,
71
+ )
72
+ self.channel = channel
73
+ self.key = key
74
+ self.key_width = key_width
75
+ self.timebase_us = timebase_us
76
+
77
+ @override
78
+ def get_raw_timings(self) -> list[int]:
79
+ """Compute the frame timings as signed mark/space microseconds."""
80
+ short_us = self.timebase_us
81
+ long_us = 2 * short_us
82
+ channel_code = _CHANNEL_CODES[self.channel]
83
+
84
+ channel_bits = [(channel_code >> i) & 1 for i in range(9, -1, -1)]
85
+ key_bits = [(self.key >> i) & 1 for i in range(self.key_width - 1, -1, -1)]
86
+
87
+ timings: list[int] = [short_us] # leading start mark
88
+ for bit in channel_bits + key_bits:
89
+ if bit:
90
+ timings += [-short_us, long_us]
91
+ else:
92
+ timings += [-long_us, short_us]
93
+ timings.append(-_INTER_FRAME_US)
94
+ return timings
@@ -0,0 +1,154 @@
1
+ """Protocol for Pilota Casa compatible devices.
2
+
3
+ Pulse Width Modulation with 32 symbols, used by Pilota Casa remote controls.
4
+
5
+ Symbols use a time base ``T`` of 600 µS:
6
+
7
+ ______________
8
+ Bit 0 : _| |______
9
+ |<----2T------>|-<1T>-|
10
+
11
+ ______
12
+ Bit 1 : _| |______________
13
+ |-<1T>-|<----2T----->|
14
+
15
+ Telegram layout:
16
+ - 32 data bits
17
+ - 2 bits device type (01 = remote control)
18
+ - 6 bits group, channel, command (via lookup table)
19
+ - 16 bits ID
20
+ - 8 bits always 1 (11111111)
21
+
22
+ Each transmission is typically repeated multiple times.
23
+
24
+ Reference chapter:
25
+ https://www.seegel-systeme.de/2015/09/05/funksteckdosen-mit-dem-raspberry-pi-steuern/
26
+ """
27
+
28
+ from __future__ import annotations
29
+
30
+ from typing import override
31
+
32
+ from . import ModulationType, RadioFrequencyCommand
33
+
34
+ _DEFAULT_FREQUENCY = 433_920_000
35
+ _DEFAULT_REPEATS = 5
36
+ _DEFAULT_TIMEBASE_US = 600
37
+
38
+ # Lookup table: (group, channel, on) -> 6-bit data value
39
+ _CMD_TABLE = {
40
+ (1, 1, True): 0b110001,
41
+ (1, 1, False): 0b111110,
42
+ (1, 2, True): 0b011001,
43
+ (1, 2, False): 0b010001,
44
+ (1, 3, True): 0b101001,
45
+ (1, 3, False): 0b100001,
46
+ (2, 1, True): 0b111010,
47
+ (2, 1, False): 0b110010,
48
+ (2, 2, True): 0b010110,
49
+ (2, 2, False): 0b011010,
50
+ (2, 3, True): 0b100110,
51
+ (2, 3, False): 0b101010,
52
+ (3, 1, True): 0b110111,
53
+ (3, 1, False): 0b111011,
54
+ (3, 2, True): 0b011111,
55
+ (3, 2, False): 0b010111,
56
+ (3, 3, True): 0b101111,
57
+ (3, 3, False): 0b100111,
58
+ (4, 1, True): 0b111101,
59
+ (4, 1, False): 0b110101,
60
+ (4, 2, True): 0b010011,
61
+ (4, 2, False): 0b011101,
62
+ (4, 3, True): 0b100011,
63
+ (4, 3, False): 0b101101,
64
+ (0, 0, True): 0b101100,
65
+ (0, 0, False): 0b011100,
66
+ }
67
+
68
+
69
+ class PilotaCasaCommand(RadioFrequencyCommand):
70
+ """Encode a Pilota Casa PWM frame."""
71
+
72
+ id: int
73
+ group: int
74
+ channel: int
75
+ on: bool
76
+ timebase_us: int
77
+
78
+ def __init__(
79
+ self,
80
+ *,
81
+ id: int,
82
+ group: int,
83
+ channel: int,
84
+ on: bool,
85
+ frame_repeats: int = _DEFAULT_REPEATS,
86
+ frequency: int = _DEFAULT_FREQUENCY,
87
+ timebase_us: int = _DEFAULT_TIMEBASE_US,
88
+ ) -> None:
89
+ """Initialize the Pilota Casa command.
90
+
91
+ Args:
92
+ id: 16-bit device ID (0-65535)
93
+ group: Group number (1-4) or 0 for all groups
94
+ channel: Channel number (1-4) or 0 for all channels
95
+ on: True for on command, False for off command
96
+ frame_repeats: Number of frame repetitions
97
+ frequency: RF frequency in Hz
98
+ timebase_us: Time base in microseconds
99
+ """
100
+
101
+ if id < 0 or id >= (1 << 16):
102
+ raise ValueError("id must be in range 0..65535 (16-bit)")
103
+ if group < 0 or group > 4:
104
+ raise ValueError("group must be in range 0..4 (0=all, 1-4=specific group)")
105
+ if channel < 0 or channel > 4:
106
+ raise ValueError(
107
+ "channel must be in range 0..4 (0=all, 1-4=specific channel)"
108
+ )
109
+ if (group, channel, on) not in _CMD_TABLE:
110
+ raise ValueError(
111
+ f"Invalid group/channel/on combination: ({group}, {channel}, {on})"
112
+ )
113
+
114
+ super().__init__(
115
+ frequency=frequency,
116
+ modulation=ModulationType.OOK,
117
+ repeat_count=frame_repeats,
118
+ )
119
+ self.id = id
120
+ self.group = group
121
+ self.channel = channel
122
+ self.on = on
123
+ self.timebase_us = timebase_us
124
+
125
+ @override
126
+ def get_raw_timings(self) -> list[int]:
127
+ """Compute Pilota Casa PWM frame timings."""
128
+ _symbols = {
129
+ "0": [2 * self.timebase_us, -self.timebase_us],
130
+ "1": [self.timebase_us, -2 * self.timebase_us],
131
+ "pause": [self.timebase_us, -11 * self.timebase_us],
132
+ }
133
+
134
+ # Build the 32-bit data string
135
+ # 2 bits: device type (01 for remote control)
136
+ symstr: list[str] = ["0", "1"]
137
+
138
+ # 6 bits: encoded group, channel, and on/off from lookup table
139
+ data_byte = _CMD_TABLE[(self.group, self.channel, self.on)]
140
+ symstr.extend(format(data_byte, "06b"))
141
+
142
+ # 16 bits: ID
143
+ symstr.extend(format(self.id, "016b"))
144
+
145
+ # 8 bits: always 1
146
+ symstr.extend("11111111")
147
+
148
+ # Convert symbol string to timings
149
+ timings: list[int] = []
150
+ for s in symstr:
151
+ timings.extend(_symbols[s])
152
+ timings.extend(_symbols["pause"])
153
+
154
+ return timings
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rf-protocols
3
- Version: 3.1.0
3
+ Version: 3.3.0
4
4
  Summary: Library to decode and encode radio frequency signals.
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/home-assistant-libs/rf-protocols
@@ -0,0 +1,26 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ rf_protocols/__init__.py
5
+ rf_protocols/loader.py
6
+ rf_protocols/parser.py
7
+ rf_protocols.egg-info/PKG-INFO
8
+ rf_protocols.egg-info/SOURCES.txt
9
+ rf_protocols.egg-info/dependency_links.txt
10
+ rf_protocols.egg-info/requires.txt
11
+ rf_protocols.egg-info/top_level.txt
12
+ rf_protocols/codes/honeywell/string_lights/__init__.py
13
+ rf_protocols/codes/honeywell/string_lights/turn_off.sub
14
+ rf_protocols/codes/honeywell/string_lights/turn_on.sub
15
+ rf_protocols/codes/novy/cooker_hood/__init__.py
16
+ rf_protocols/codes/somfy/rts/__init__.py
17
+ rf_protocols/commands/__init__.py
18
+ rf_protocols/commands/ev1527.py
19
+ rf_protocols/commands/kaku.py
20
+ rf_protocols/commands/novy.py
21
+ rf_protocols/commands/ook.py
22
+ rf_protocols/commands/pilota_casa.py
23
+ rf_protocols/commands/pt2262.py
24
+ rf_protocols/commands/somfy_rts.py
25
+ tests/test_loader.py
26
+ tests/test_parser.py
@@ -1,8 +0,0 @@
1
- """Novy cooker-hood RF codes."""
2
-
3
- from rf_protocols.loader import CodeCollection, get_codes
4
-
5
-
6
- def get_codes_for_code(code: int) -> CodeCollection:
7
- """Return the bundled `rf-protocols` collection for a Novy cooker-hood code."""
8
- return get_codes(f"novy/cooker_hood/code_{code}")
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -788 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -788 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -788 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -788 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -788 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -394 788 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -394 788 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -394 788 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -394 788 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -394 788 -788 394 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -788 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -788 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -788 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -788 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -788 394 -788 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -394 788 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -10000
@@ -1,7 +0,0 @@
1
- Filetype: Flipper SubGhz RAW File
2
- Version: 1
3
- Frequency: 433920000
4
- Preset: FuriHalSubGhzPresetOok650Async
5
- Protocol: RAW
6
- Repeat: 5
7
- RAW_Data: 394 -394 788 -788 394 -394 788 -394 788 -394 788 -788 394 -394 788 -788 394 -394 788 -788 394 -788 394 -788 394 -394 788 -788 394 -394 788 -394 788 -788 394 -788 394 -10000
@@ -1,73 +0,0 @@
1
- LICENSE
2
- README.md
3
- pyproject.toml
4
- rf_protocols/__init__.py
5
- rf_protocols/loader.py
6
- rf_protocols/parser.py
7
- rf_protocols.egg-info/PKG-INFO
8
- rf_protocols.egg-info/SOURCES.txt
9
- rf_protocols.egg-info/dependency_links.txt
10
- rf_protocols.egg-info/requires.txt
11
- rf_protocols.egg-info/top_level.txt
12
- rf_protocols/codes/honeywell/string_lights/__init__.py
13
- rf_protocols/codes/honeywell/string_lights/turn_off.sub
14
- rf_protocols/codes/honeywell/string_lights/turn_on.sub
15
- rf_protocols/codes/novy/cooker_hood/__init__.py
16
- rf_protocols/codes/novy/cooker_hood/code_1/ambient_light.sub
17
- rf_protocols/codes/novy/cooker_hood/code_1/light.sub
18
- rf_protocols/codes/novy/cooker_hood/code_1/minus.sub
19
- rf_protocols/codes/novy/cooker_hood/code_1/plus.sub
20
- rf_protocols/codes/novy/cooker_hood/code_1/power.sub
21
- rf_protocols/codes/novy/cooker_hood/code_10/ambient_light.sub
22
- rf_protocols/codes/novy/cooker_hood/code_10/light.sub
23
- rf_protocols/codes/novy/cooker_hood/code_10/minus.sub
24
- rf_protocols/codes/novy/cooker_hood/code_10/plus.sub
25
- rf_protocols/codes/novy/cooker_hood/code_10/power.sub
26
- rf_protocols/codes/novy/cooker_hood/code_2/ambient_light.sub
27
- rf_protocols/codes/novy/cooker_hood/code_2/light.sub
28
- rf_protocols/codes/novy/cooker_hood/code_2/minus.sub
29
- rf_protocols/codes/novy/cooker_hood/code_2/plus.sub
30
- rf_protocols/codes/novy/cooker_hood/code_2/power.sub
31
- rf_protocols/codes/novy/cooker_hood/code_3/ambient_light.sub
32
- rf_protocols/codes/novy/cooker_hood/code_3/light.sub
33
- rf_protocols/codes/novy/cooker_hood/code_3/minus.sub
34
- rf_protocols/codes/novy/cooker_hood/code_3/plus.sub
35
- rf_protocols/codes/novy/cooker_hood/code_3/power.sub
36
- rf_protocols/codes/novy/cooker_hood/code_4/ambient_light.sub
37
- rf_protocols/codes/novy/cooker_hood/code_4/light.sub
38
- rf_protocols/codes/novy/cooker_hood/code_4/minus.sub
39
- rf_protocols/codes/novy/cooker_hood/code_4/plus.sub
40
- rf_protocols/codes/novy/cooker_hood/code_4/power.sub
41
- rf_protocols/codes/novy/cooker_hood/code_5/ambient_light.sub
42
- rf_protocols/codes/novy/cooker_hood/code_5/light.sub
43
- rf_protocols/codes/novy/cooker_hood/code_5/minus.sub
44
- rf_protocols/codes/novy/cooker_hood/code_5/plus.sub
45
- rf_protocols/codes/novy/cooker_hood/code_5/power.sub
46
- rf_protocols/codes/novy/cooker_hood/code_6/ambient_light.sub
47
- rf_protocols/codes/novy/cooker_hood/code_6/light.sub
48
- rf_protocols/codes/novy/cooker_hood/code_6/minus.sub
49
- rf_protocols/codes/novy/cooker_hood/code_6/plus.sub
50
- rf_protocols/codes/novy/cooker_hood/code_6/power.sub
51
- rf_protocols/codes/novy/cooker_hood/code_7/ambient_light.sub
52
- rf_protocols/codes/novy/cooker_hood/code_7/light.sub
53
- rf_protocols/codes/novy/cooker_hood/code_7/minus.sub
54
- rf_protocols/codes/novy/cooker_hood/code_7/plus.sub
55
- rf_protocols/codes/novy/cooker_hood/code_7/power.sub
56
- rf_protocols/codes/novy/cooker_hood/code_8/ambient_light.sub
57
- rf_protocols/codes/novy/cooker_hood/code_8/light.sub
58
- rf_protocols/codes/novy/cooker_hood/code_8/minus.sub
59
- rf_protocols/codes/novy/cooker_hood/code_8/plus.sub
60
- rf_protocols/codes/novy/cooker_hood/code_8/power.sub
61
- rf_protocols/codes/novy/cooker_hood/code_9/ambient_light.sub
62
- rf_protocols/codes/novy/cooker_hood/code_9/light.sub
63
- rf_protocols/codes/novy/cooker_hood/code_9/minus.sub
64
- rf_protocols/codes/novy/cooker_hood/code_9/plus.sub
65
- rf_protocols/codes/novy/cooker_hood/code_9/power.sub
66
- rf_protocols/codes/somfy/rts/__init__.py
67
- rf_protocols/commands/__init__.py
68
- rf_protocols/commands/kaku.py
69
- rf_protocols/commands/ook.py
70
- rf_protocols/commands/pt2262.py
71
- rf_protocols/commands/somfy_rts.py
72
- tests/test_loader.py
73
- tests/test_parser.py
File without changes
File without changes
File without changes