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.
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/PKG-INFO +1 -1
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/pyproject.toml +1 -1
- rf_protocols-3.3.0/rf_protocols/codes/novy/cooker_hood/__init__.py +47 -0
- rf_protocols-3.3.0/rf_protocols/commands/ev1527.py +124 -0
- rf_protocols-3.3.0/rf_protocols/commands/novy.py +94 -0
- rf_protocols-3.3.0/rf_protocols/commands/pilota_casa.py +154 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols.egg-info/PKG-INFO +1 -1
- rf_protocols-3.3.0/rf_protocols.egg-info/SOURCES.txt +26 -0
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/__init__.py +0 -8
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_1/ambient_light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_1/light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_1/minus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_1/plus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_1/power.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_10/ambient_light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_10/light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_10/minus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_10/plus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_10/power.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_2/ambient_light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_2/light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_2/minus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_2/plus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_2/power.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_3/ambient_light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_3/light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_3/minus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_3/plus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_3/power.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_4/ambient_light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_4/light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_4/minus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_4/plus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_4/power.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_5/ambient_light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_5/light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_5/minus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_5/plus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_5/power.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_6/ambient_light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_6/light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_6/minus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_6/plus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_6/power.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_7/ambient_light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_7/light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_7/minus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_7/plus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_7/power.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_8/ambient_light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_8/light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_8/minus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_8/plus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_8/power.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_9/ambient_light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_9/light.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_9/minus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_9/plus.sub +0 -7
- rf_protocols-3.1.0/rf_protocols/codes/novy/cooker_hood/code_9/power.sub +0 -7
- rf_protocols-3.1.0/rf_protocols.egg-info/SOURCES.txt +0 -73
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/LICENSE +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/README.md +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/__init__.py +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/codes/honeywell/string_lights/__init__.py +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/codes/honeywell/string_lights/turn_off.sub +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/codes/honeywell/string_lights/turn_on.sub +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/codes/somfy/rts/__init__.py +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/commands/__init__.py +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/commands/kaku.py +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/commands/ook.py +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/commands/pt2262.py +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/commands/somfy_rts.py +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/loader.py +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/parser.py +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols.egg-info/dependency_links.txt +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols.egg-info/requires.txt +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols.egg-info/top_level.txt +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/setup.cfg +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/tests/test_loader.py +0 -0
- {rf_protocols-3.1.0 → rf_protocols-3.3.0}/tests/test_parser.py +0 -0
|
@@ -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
|
|
@@ -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
|
{rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/codes/honeywell/string_lights/__init__.py
RENAMED
|
File without changes
|
{rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/codes/honeywell/string_lights/turn_off.sub
RENAMED
|
File without changes
|
{rf_protocols-3.1.0 → rf_protocols-3.3.0}/rf_protocols/codes/honeywell/string_lights/turn_on.sub
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|