مرحباً
جيكتيمز هبر.
في مكاني العديد من المفاتيح اللاسلكية بتردد 433 ميجاهرتز المتراكمة في المنزل ، أصبح من المثير للاهتمام ما إذا كان يمكن استخدامها لأية مهام ، على سبيل المثال ، للتحكم في جهاز كمبيوتر أو لدمج "المنزل الذكي" في النظام.
تعتبر هذه المفاتيح ملائمة لتكلفتها المنخفضة وتشغيلها المستقر ، وهي تبدو مثل هذا:

كيف يعمل ، وماذا يمكن القيام به معهم (فرسان الهدوء :) ، التفاصيل تحت القطع.
النظرية
يجب أن أقول على الفور كيف يعمل هذا المفتاح ، لا أعرف ، على الرغم من أنني أخمن ذلك. لذلك ستحتاج إلى القيام بهندسة عكسية صغيرة.
بادئ ذي بدء ، يجب استقبال الإشارة ، التي نستخدم من أجلها مستقبل RTL-SDR المعروف بالفعل ، والذي غالبًا ما يطلق عليه ببساطة "صافرة" هواة الراديو. يتيح لك هذا الجهاز ، بسعر 10 دولارات فقط ، استقبال الإشارات اللاسلكية في النطاق من حوالي 50 إلى 1250 ميجاهرتز ، ما نحتاجه. الموضوع قديم ، ولكن إذا لم يقرأه أحد ،
فاقرأه .
نأخذ الخطوة الأولى من التحليل - نحن ننظر بعناية إلى المفتاح. نجد أنه في الجزء الخلفي من الحالة تقول "صنع في الصين" (من كان يظن؟) ، والأهم من ذلك ، يشار إلى التردد 433 ميغاهرتز. يمكنك الآن توصيل جهاز استقبال SDR وبدء SDR # والتأكد من إرسال البيانات بالفعل.

يشير تناظر الإشارة على الطيف إلى وجود تعديل AM. بالمناسبة ، تظهر إشارة "غريبة" أضعف على اليمين - يمكن أيضًا استقبالها وفك تشفيرها ، وسيتم مناقشتها بمزيد من التفصيل بشكل منفصل. ومع ذلك ، عد إلى الإشارة. نسجله بتنسيق WAV المعتاد ونضغط على الأزرار الموجودة على جهاز التحكم عن بعد - على سبيل المثال ، قمت بالضغط على زري التشغيل وإيقاف التشغيل على القناة "1".
افتح ملف الصوت في أي محرر صوتي ، واستخدم أداة تحليلات احترافية أخرى ، الرسام ، لمقارنة الإشارات. نضع إشارتين من أزرار مختلفة واحدة فوق الأخرى لنرى الفرق:

من السهل أن نرى أن لدينا تسلسل البت المعتاد ، والفرق الذي يكون فيه بت واحد فقط ، والذي يتوافق مع زر التشغيل أو الإيقاف. أثناء الضغط على الزر ، يقوم المفتاح ببساطة بتكرار هذا التسلسل على الهواء بسرعة 20 مرة في الثانية. رخيص وسهل ، حتى إذا تم تشويه تسلسل واحد أثناء الإرسال ، فسيتم قبول الآخر.
من هذا ، بالمناسبة ، يمكن التوصل إلى استنتاج واحد مهم - يتم إرسال إشارات مثل هذه المفاتيح (نحن نتحدث عن نماذج رخيصة) "كما هي" دون أي مصادقة أو حماية أو تشفير. لا ينبغي استخدام هذا المفتاح أو مأخذ لاسلكي بمثل هذا المفتاح لبعض الوظائف المهمة ، على سبيل المثال ، لتشغيل سخانات قوية أو أكثر من ذلك لفتح الباب الأمامي أو المرآب. إنها ليست مسألة قراصنة (فرصة اختراق شخص ما لمنزلي لاسلكيًا ، أقدر أقل من فرصة الوقوع في منزل ISS) ، ولكن يمكن لأحد الجيران شراء نفس المفتاح عن طريق الخطأ ، وقد تتطابق الرموز ( ولكن عند التبديل يوجد خيار بين 4 قنوات). في تجربتي في استخدامه ، 2-3 مرات في السنة قام قاطع الدائرة بتشغيل "نفسه" ، إما أن يكون هناك عائق ، أو تم استقبال إشارة بعيدة من نفس النموذج.
بالطبع ، هذا لا ينطبق على الأنظمة الأكثر تعقيدًا ، مثل Lora أو Philips Hue ، كل شيء على ما يرام مع التشفير.
ومع ذلك ، نعود إلى مهمتنا. يمكنك كتابة مفكك تشفير لهذه الإشارات بنفسك ، ولكن لحسن الحظ ، تم ذلك بالفعل قبلنا ، في مشروع يسمى "rtl_433". تم إنشاء البرنامج في الأصل لنظام Linux ، ويمكن تنزيل إصدار Windows
في إصدار Linux ويمكن تنزيله من
GitHub .
نبدأ البرنامج من سطر الأوامر: "rtl_433.exe -F json"

حصلنا على البيانات ، يبقى لكتابة برنامج لمعالجتها.
التوت بي
أول شيء مثير للاهتمام للنظر هو Raspberry Pi. لتثبيت
rtl_433 على Raspbian ، قم بفك ضغط
الأرشيف وتنفيذ الأوامر التالية.
sudo apt-get install libtool libusb-1.0.0-dev librtlsdr-dev rtl-sdr build-essential autoconf cmake pkg-config cd rtl_433/ autoreconf --install ./configure make make install
الخطوة الثانية هي كتابة برنامج سيتلقى هذه البيانات ، واعتمادا عليه ، يقوم بتنفيذ الإجراءات اللازمة. كود Python بسيط جدًا:
from __future__ import print_function import os, sys, io import json import subprocess print("RTLSDR listening started") transmitter_name = "Waveman Switch Transmitter" transmitter_channel = 1 proc = subprocess.Popen(["rtl_433 -F json"], stdout=subprocess.PIPE, shell=True) while True: try: line = proc.stdout.readline().encode('ascii','ignore') proc.poll() data = json.loads(line) print(data) m,st,ch,btn= data['model'],data['state'],data['channel'],data['button'] if m==transmitter_name and ch==transmitter_channel and btn==1 and st=='on': print("ON") elif m==transmitter_name and ch==transmitter_channel and btn==1 and st=='off': print("OFF") except KeyboardInterrupt: break except: pass print("RTLSDR listening done")
لتشغيل الكود ، تحتاج إلى حفظه في ملف (على سبيل المثال rtl_listen.py) وتشغيل الأمر "python rtl_listen.py".
كما ترون ، يبدأ البرنامج العملية باستخدام عملية فرعية. قم بفتح وقراءة البيانات منه. ثم كل شيء بسيط ، الشفرة قابلة للقراءة تمامًا ، ولن يكون من الصعب إجراء تغييرات. في هذا المثال ، عند الضغط على الزر "1" ، يتم عرض طباعة الرسالة ("ON") ، بدلاً من ذلك ، يمكنك القيام بشيء آخر ، على سبيل المثال ، تنشيط دبوس GPIO ، وتشغيل التتابع ، وإرسال البيانات إلى الخادم ، وما إلى ذلك. قبل استخدامه ، ستحتاج إلى تغييره في نفس الوقت name transmitter_name في اسم طراز وحدة التحكم التي سيتم استخدامها.
بالمناسبة ، يبدو مستقبل RTL-SDR نفسه ، بالمقارنة مع Raspberry Pi ، كما يلي:

نوافذ
لسوء الحظ ، تحت Windows 10 ، لم يعمل الرمز أعلاه. ولكن كما اقترح البحث على github ، فإن القراءة غير المتزامنة للبيانات من دفق منفصل تعمل. لماذا ، كان كسولًا جدًا لمعرفة ذلك ، سأجلب كود العمل تحت المفسد.
كود المصدر from __future__ import print_function import os, sys import subprocess import time import threading import Queue import json class AsynchronousFileReader(threading.Thread):
باستخدام هذا الرمز ، يمكننا استخدام أي إجراءات في المعالج ، المنطق هو نفسه الموجود في التعليمات البرمجية على Raspberry Pi.
مثال : لنفترض أن لدينا جهاز كمبيوتر مخصص لمسرح منزلي ، ونريد إيقاف تشغيله بالضغط على الزر الموجود على جهاز التحكم عن بُعد. استبدل الرمز "print (" OFF)) بـ
os.system('shutdown -s') sys.exit(0)
بعد ذلك ، سيتم إيقاف تشغيل الكمبيوتر بالضغط على الزر المناسب. بالطبع ، بالإضافة إلى "إيقاف التشغيل" ، يمكنك استخدام أي أمر Windows آخر ، عليك فقط التفكير في أن الأوامر سيتم إرسالها بشكل متكرر ، أثناء الضغط على زر التحكم عن بعد ، لتجنب مثل هذا التكرار ، تحتاج إلى تحسين الرمز.
الخلاصة
كما ترى ، كل شيء بسيط جدًا ، وهناك مجال للتجريب. أخيرا ، مكافأة صغيرة لأولئك الذين قرأوا حتى هنا. عند 433 ميجاهرتز ، يوجد عدد كبير من الأجهزة المختلفة التي يمكن فك شفرة rtl_433 ، يمكنك فقط ترك البرنامج للعمل لعدة ساعات ، ومعرفة ما "يمسك". تحت المفسد ، تم تسجيل مثال لمثل هذا السجل في وقت سابق:
سجل2018-01-10 21:15:17 : Prologue sensor : 5 : 15
Channel: 1
Battery: OK
Button: 0
Temperature: 6.00 C
Humidity: 11 %
2018-01-10 21:15:28 : inFactory sensor
ID: 71
Temperature: 6.67 °C
Humidity: 99 %
2018-01-10 21:16:07 : Toyota : TPMS : 61511475 : 60e5006b : CRC
2018-01-10 21:20:33 : Prologue sensor : 5 : 15
Channel: 1
Battery: OK
Button: 0
Temperature: 6.00 C
Humidity: 11 %
: Waveman Switch Transmitter
id: A
channel: 2
button: 1
state: on
: Waveman Switch Transmitter
id: A
channel: 2
button: 1
state: on
: Waveman Switch Transmitter
id: A
channel: 2
button: 1
state: on
2018-01-10 21:21:21 : Akhan 100F14 remote keyless entry
ID (20bit): 0x41
Data (4bit): 0x4 (Mute)
: Waveman Switch Transmitter
id: A
channel: 2
button: 1
state: off
2018-01-10 21:32:31 : Ford : TPMS : 00268b1f : a34a0e : CHECKSUM
2018-01-10 21:32:32 : Ford : TPMS : 00268a5c : 9c440e : CHECKSUM
2018-01-10 21:32:37 : Ford : TPMS : 016dbfce : 99430e : CHECKSUM
2018-01-10 21:32:39 : Ford : TPMS : 002671a0 : 9c4a0e : CHECKSUM
هناك بيانات مثيرة للاهتمام ، على سبيل المثال ، ضغط هواء سيارة الجار (TPMS ، نظام مراقبة ضغط الإطارات) ، أو درجة الحرارة الخارجية +6 من مستشعر شخص آخر. يسمح هذا على سبيل المثال بعرض درجة الحرارة الخارجية إذا كان لدى الجيران عن طريق الخطأ محطة أرصاد جوية متوافقة مع هذا البروتوكول.
جميع التجارب الناجحة.
إخلاء المسؤولية : من الواضح أن استخدام SDR والمعالجة الرقمية لقراءة إشارات تعديل OOK هو في الأساس إطلاق نار على العصافير. ربما في aliexpress هناك أجهزة استقبال جاهزة مقابل دولار واحد - 2 تفعل نفس الشيء ، بتكلفة أقل واستهلاك أقل للطاقة. إذا كان أي شخص يعرف مثل هذه النماذج ، اكتب في التعليقات.