about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthew Garrett <mjg59@google.com>2017-11-25T20·38-0800
committerMatthew Garrett <mjg59@google.com>2017-11-25T20·38-0800
commitdd6eb8767e7a7f1f54aa1e7a7b57309bc4fc5fba (patch)
tree12f19fc58a3fef2ca1e4e619c6b6a21c3efa35d3
parent8bc67af6d73c75587d40f6dbfa3b975c7d69a8a4 (diff)
Experimental RF code
-rw-r--r--README.md39
-rw-r--r--broadlink/__init__.py27
2 files changed, 65 insertions, 1 deletions
diff --git a/README.md b/README.md
index 1305ea0f5a7b..48708827ce36 100644
--- a/README.md
+++ b/README.md
@@ -37,6 +37,23 @@ Enter learning mode:
 devices[0].enter_learning()
 ```
 
+Sweep RF frequencies:
+```
+devices[0].sweep_frequency()
+```
+
+Check whether a frequency has been found:
+```
+found = devices[0].check_frequency()
+```
+(This will return True if the RM has locked onto a frequency, False otherwise)
+
+Attempt to learn an RF packet:
+```
+found = devices[0].find_rf_packet()
+```
+(This will return True if a packet has been found, False otherwise)
+
 Obtain an IR or RF packet while in learning mode:
 ```
 ir_packet = devices[0].check_data()
@@ -76,4 +93,24 @@ devices[0].set_power(1, True)
 Check power state on a SmartPowerStrip:
 ```
 state = devices[0].check_power()
-```
\ No newline at end of file
+```
+
+Learning RF packets
+-------------------
+
+timeout = 10
+devices[0].sweep_frequency()
+# Hold down the rf button
+for i in range(0, timeout):
+  found = devices[0].check_frequency()
+  if found == True:
+    break
+  time.sleep(1)
+# Tap the rf button
+for i in range(0, timeout):
+  found = devices[0].find_rf_packet()
+  if found == True:
+    break
+  time.sleep(1)
+# Obtain the code
+code = devices[0].check_data()
diff --git a/broadlink/__init__.py b/broadlink/__init__.py
index ea4cbc5fab34..a4c8a4841aff 100644
--- a/broadlink/__init__.py
+++ b/broadlink/__init__.py
@@ -501,6 +501,33 @@ class rm(device):
     packet[0] = 3
     self.send_packet(0x6a, packet)
 
+  def sweep_frequency(self):
+    packet = bytearray(16)
+    packet[0] = 0x19;
+    self.send_packet(0x6a, packet)
+
+  def check_frequency(self):
+    packet = bytearray(16)
+    packet[0] = 0x1a
+    response = self.send_packet(0x6a, packet)
+    err = response[0x22] | (response[0x23] << 8)
+    if err == 0:
+      payload = self.decrypt(bytes(response[0x38:]))
+      if payload[0x04] == 1:
+          return True
+    return False
+
+  def find_rf_packet(self):
+    packet = bytearray(16)
+    packet[0] = 0x1b
+    response = self.send_packet(0x6a, packet)
+    err = response[0x22] | (response[0x23] << 8)
+    if err == 0:
+      payload = self.decrypt(bytes(response[0x38:]))
+      if payload[0x04] == 1:
+          return True
+    return False
+
   def check_temperature(self):
     packet = bytearray(16)
     packet[0] = 1