
في الآونة الأخيرة ، تقرر تركيب حاجز مع التحكم عبر GSM في مبنى سكني. الأسباب والحاجة إلى هذا الحل تتجاوز نطاق المقالة ، لكني أريد أن أكتب عن كيف ، "على ركبتي" قمت بعمل واجهة للتحكم في الوحدة عبر الإنترنت. وحتى قليلاً مع لعبة ورق ، إدارة قاعدة السيارات من هاتف محمول وصور لحظات الدخول من كاميرا الشارع. ربما يريد شخص ما تقديمه في المنزل.
سأحذرك من أن المقالة لا تصف حلاً جاهزًا خارج الصندوق ، بل دليل على المفهوم.
الجزء 1. لماذا مثل وحدة تحكم
قبل تثبيت وحدة GSM ، تم إجراء بعض مراجعة السوق لهذه الأنظمة. كنت أرغب في الحصول على حل غير مكلف وموثوق وثبت. حسنًا ، حتى يكون لدى "المثبتات" المثبتون ، لديهم بعض الخبرة في العمل معه ، إلخ.
تم تقديم أدوات التثبيت للاختيار من بينها إما ESIM 110/120 لـ ~ 12000r مع الوصول إلى الإنترنت ، أو Doorhan GSM لـ ~ 6000r مع التحكم في الرسائل القصيرة أو التكوين عبر سلك USB.
لم يتم النظر في خيار "جعل جهازك من وحدة arduino + gsm مقابل 3 دولارات" ، لذلك يجب أن يكون الحل موثوقًا ومختبرًا تمامًا. تخيل أحدا لا يستطيع الاتصال بالمنزل؟ ثم ستحصل على كل المشاكل.
كما أنني لم أرغب في اليانصيب عند شراء جهاز
في الصين على علي مرة أخرى لتجنب مشاكل الموثوقية. على الرغم من أن الأسعار تبدأ عند 1500r.
كان الجانب السلبي لـ ESIM120 ، بالإضافة إلى تكلفة x2 ، هو استخدام الإنترنت GPRS للوصول إلى الإنترنت. بالنسبة للبعض ، قد يكون هذا زائدًا ، ولكن في حالتنا ، فإنه يجلب تكلفة الاتصالات المحمولة - سيكون عليك أن تأخذ تعريفة مع الإنترنت. الآن ، يتم تعريف تعريفة بدون رسوم شهرية لبطاقة SIM ، ولمنع حظر الرقم ، أخطط لربط نوع من الاشتراك المدفوع من المنطقة الشخصية للمشغل كل 2-3 أشهر مقابل 2-3 روبل في اليوم الواحد ، لمدة يوم واحد. على سبيل المثال ، "الطقس" أو "النكات" أو أي شيء آخر مفيد للحاجز)
حول Doorhan GSM ، علمت أنه بالإضافة إلى الإدارة عبر الرسائل القصيرة (ليست مثيرة للاهتمام للغاية) ، فهي تتصل عبر USB بجهاز كمبيوتر ومن خلال برمجياتها الخاصة تسمح لك بإدارة قاعدة الأرقام.
الجزء 2. مراقبة الشحن
نظرًا لأنه كان من المخطط تثبيت وحدة التحكم في الحاجز على بعد 20 مترًا من الغرفة حيث يوجد مسجل فيديو IP المنزلي ومركز الاتصال لمزود الإنترنت المحلي ، فقد تقرر استخدام Doorhan و "بناء" USB عبر جهاز توجيه مثل TP-Link MR3020 بقيمة 1200 روبل و OpenWRT والبرامج من مشروع
USBIPاتضح أنه أبسط قليلاً مع جهاز التوجيه - لقد وجدت ASUS WL500gP القديم في الصناديق ، وهو غير مناسب جدًا للإنترنت بمعايير اليوم ، ولكنه يحتوي على منفذي USB. استخدمه.
بالنسبة لـ usbip ، اضطررت إلى تثبيت الإصدار القديم من OpenWRT ، 12 سبتمبر ، لأن وحدة النواة هذه لا تعمل على الوحدات الجديدة. لن أصف اتصال جهاز التوجيه بالشبكة. إذا لم يكن هناك شخص ما على الشبكة المحلية ، فهناك خيارات مع إعادة توجيه المنفذ أو UPNP أو إعداد VPN حسب ذوقك.
قم بتثبيت kmod-usbip-server وتحقق من أنه يمكنك التصدير منا
root@OpenWrt:~
نحن بحاجة إلى جهاز Busid ، 1-1.1 حيث توجد وحدة تحكم GSM المتصلة. بالنظر إلى المستقبل ، اتضح أن هذا محول COM-> USB عادي على شريحة CH341
نقوم بتنفيذ:
root@OpenWrt:~
وفي dmesg
usbip-host 1-1.1:1.0: usbip-host: register new device (bus 1 dev 57 ifn 0)
على جهاز كمبيوتر يعمل بنظام Windows ، قم بتثبيت برامج تشغيل USBIP وتشغيلها
usbip -a 10.16.19.19 1-1.1
حيث 10.16.19.19 عنوان IP لجهاز التوجيه لدينا مع OpenWRT. بالطبع ، تحتاج أولاً إلى فتح الوصول إما من IP الخاص بك إلى جهاز التوجيه في جدار الحماية ، أو الاتصال من الشبكة المحلية ، أو أي من الخيارات 1000 الأخرى من VPN إلى P2P.
إذا سار كل شيء على ما يرام ، فإن Windows يعلن بسعادة أنه تم اكتشاف جهاز USB-to-Serial Converter CH340 ، فنحن نقدمه برنامج تشغيل ويظهر منفذ COM في النظام.
الآن يمكننا تشغيل البرنامج من المجموعة باستخدام وحدة التحكم وإدارة الأرقام في قاعدة البيانات أثناء الجلوس في المنزل على الأريكة

الجزء 3. مراقبة الدخول
بعد إعداد العمل مع وحدة التحكم على جهاز الكمبيوتر في المنزل وتسجيل أرقام المستخدم ، قررت أن أتعمق أكثر في ما هو متاح على منفذ COM.
اتضح أن وحدة GSM الخاصة بوحدة التحكم ترسل بشكل دوري أوامر AT بمستوى الإشارة إلى وحدة التحكم ، كما تكتب رقم الهاتف الذي يتم استلام المكالمة منه عند إجراء مكالمة. لم يعمل لإدارة وحدة AT ، على ما يبدو لم يتم بثها من وحدة التحكم إلى وحدة المودم.

إنه أمر مثير للاهتمام على أي حال. أثناء العمل على الفكرة مع وحدة تحكم GSM ، كنت آمل أن يتم تسجيل هذه المكالمات بالتفصيل من قبل المشغل. ولكن نظرًا لعدم حدوث اتصال ، فلا توجد سجلات في عملية البحث. يمكنك الآن مباشرة من وحدة التحكم لتجميع سجلات الشخص الذي فتح الحاجز. أو من حاول القيام بذلك.
للقيام بذلك ، قم بتثبيت kmod-usb-serial-ch341 على OpenWRT ، وقم بتعطيل ترجمة USBIP باستخدام الأمر usbip unind -b 1-1.1 وقم بإجراء insmod ch341.
بعد ذلك ، مباشرة على جهاز التوجيه ، يمكنك الاتصال بـ / dev / ttyUSB0 ومشاهدة ما يحدث مع المكالمات في وحدة التحكم.
لمعالجة البيانات ، بالنسبة للمبتدئين ، كتبت برنامجًا نصيًا بسيطًا استخدم curl لإرسال البيانات حول مكالمة واردة إلى خادم خارجي مع PHP للمعالجة وحفظها في قاعدة البيانات. يمكنك الكتابة إلى الملف المحلي بنفس النجاح ، على الرغم من أن الذاكرة على جهاز التوجيه ليست سميكة.
على الخادم ، قمت بإنشاء قاعدة بيانات في الخلية ومجموعة من اللوحات: مع أرقام هواتف سكاننا ، ومع سجل المكالمات. أصبح من الممكن مقارنة من فتح الحاجز في أي وقت ، وما إذا كانوا يحاولون استخدامه من أرقام مجهولة.
كانت الفكرة الثانية التي فكرت في ذهني هي عمل رابط بين حدث فتح الحاجز وصورة لهذا الحدث. الشيء ، كما ذكرت أعلاه ، حول المنزل هي كاميرات AHD التي تكتب إلى المسجل مع الوصول إلى الدفق عبر IP. علاوة على ذلك ، تم تشغيل إحدى الكاميرات بشكل خاص على الحاجز ، تحسبًا لكسرها.
لم أتمكن من العثور على كيفية إزالة jpeg من المسجل الصيني ، على الرغم من وجود رابط معاينة في العديد من الكاميرات. لذلك ، ذهبت مباشرة - في وقت المكالمة أحصل على RTSP وجعله JPG منه.
ffmpeg -i "rtsp://2.3.4.5:554/user=user&password=password&channel=1&stream=0.sdp?" -y -f image2 -t 0.001 -ss 00:00:3 -s 1280*720 /tmp/screenshot.jpg
بنفس النجاح ، كان من الممكن كتابة مقاطع صغيرة في mp4 ، لكني وجدت هذا غير ضروري.
قررت الصور تخزين النقط في MySQL. حل الأداء سهل للغاية ، ولكن "سحب" المشروع سيكون أسهل ، لا تحتاج إلى نسخ قاعدة البيانات والملفات ، كل شيء موجود في قاعدة البيانات. والحمل عليه هو في الأساس لا شيء.
ونتيجة لذلك ، يبدو سجل الإدخال على النحو التالي:

الجزء 4. تحميل أرقام من قاعدة بيانات SQL على الموقع إلى وحدة التحكم
إذا قرأت بعناية ، فربما لاحظت أنه من أجل تسجيل الإدخالات ، عمل منفذ USB لجهاز التوجيه في وضع المحول التسلسلي إلى USB ، ولعمل مع قاعدة الأرقام داخل وحدة التحكم ، كان علي "دفعه" من خلال USBIP إلى جهاز الكمبيوتر في المنزل وهناك ، من خلال برنامج Windows ، جعله التغييرات. هذا ليس مناسبًا للغاية ، كان عليك القيام بفك الارتباط / الربط وحتى تشغيل وحدة تحكم USBip على جهاز الكمبيوتر المنزلي. حسنًا ، يمكنك فقط القيام بذلك من المنزل (حسنًا ، مرة أخرى ، RDP / VPN ، وما إلى ذلك) ، وخاصةً ليس من هاتف محمول. تم تسخينه بشكل مضاعف أنه يجب الحفاظ على قاعدة بيانات الأرقام بتنسيق mdb (يمكن لبرنامج التحكم تحميل البيانات في Access) وفي إصدار الويب.
لم ينجح غوغل بطلاقة بروتوكول Doorhan GSM. أنا لا أستبعد أن هذا هو نوع من الجهاز الصيني تحت العلامة التجارية Doorhan ، ولكن. لذلك ، سلح نفسه بشاشة (الشم) لمنفذ COM وأخذ عدة مقالب عند العمل من التطبيق الأصلي.

حصلت على شيء مثل:
أمر
aa 02 09 00 00 03 e8 01 00 00 00 00 ee
الذاكرة
aa 02 09 00 00 03 e8 01 00 00 00 00 ee
الجواب هو أن كل شيء سار على ما يرام
aa 20 00 ee
فريق لتسجيل رقم واحد +79999999999
aa 03 10 00 01 2b 37 39 39 39 39 39 39 39 39 39 39 00 00 ee
استخلص منها الاستنتاجات التالية:
بداية إرسال AA ، نهاية إرسال EE
الجواب هو أن الفريق مقبول 20 00
الأمر لبدء تسجيل الرقم 03. ثم يأتي عدد الأرقام في الحزمة. يمكن أن يكون من 1 إلى 5 ، أي أنه بالنسبة لطرد واحد ، يمكنك إرسال عدة أرقام مرة واحدة على التوالي ، وإنهاء الطرد باستخدام أمر EE ، والحصول على تأكيد واحد لكل كتلة.
بعد الأمر لبدء التسجيل ، هناك 2 بايت (الثانية دقيقة ، ربما سيتم استخدام الأولى عندما يكون عدد الأرقام أكثر من 256 ولكن لم يتم التحقق) تشير إلى الرقم التسلسلي للسجل في الخلية. أي إذا كنت تكتب إلى ذاكرة فارغة ، فهي أولاً 1 ، ثم 2 ، وهكذا. ثم تأتي 14 بايت من رقم الهاتف. نظرًا لأن أرقامنا "مضمنة" في 12 بايت (+79999999999) ، فإن آخر 2 بايت مشغولة بالأصفار. ربما لجميع أنواع التنسيقات الدولية مثل +10. هذا ليس دقيقًا ، لم أتعمق كثيرًا ، لأن هذه البيانات كانت كافية.
ينتهي الإرسال بواسطة بايت EE.
مع الرقم التسلسلي للخلية ، فإن الوضع ليس واضحًا تمامًا. لنفترض أن 10 أرقام مكتوبة على وحدة التحكم ، ولم يتم مسح الذاكرة. إذا قمت بإرسال الأمر "كتابة الرقم في الخلية 5" ، فلن يتغير الرقم الموجود في هذه الخلية بعد طرح عنصر التحكم ، ولكن جهاز التحكم سيسجل 11 رقمًا ، وسيكون الرقم 11 فارغًا. وإذا أعطيت الأمر "كتابة الرقم في الخلية 11" ، فسيتم كتابته عليه. من المحتمل أن يكون هذا بسبب أوامر ADD و REPLACE (إضافة وتغيير) ، والتي يمكن إرسالها عبر الرسائل القصيرة. ولكن نظرًا لأن التطبيق الأصلي لا يكتمل سوى المحو وإعادة الكتابة اللاحقة للقائمة ، فلا يمكن التحقق من الفرضية. لذلك ، قام أيضًا بعمل نسخته عن طريق إرسال أمر محو وكتابة متسلسلة إلى رقم واحد (للبساطة).
لذا ، فقد جئنا لكتابة أوامر لإدارة قائمة المشتركين في وحدة التحكم من خلال المنفذ التسلسلي. لكن المنفذ موجود في جهاز التوجيه ، وقاعدة البيانات مع المستخدمين على خادم خارجي. بالطبع ، يمكنك نقله إلى جهاز توجيه (تحصل على حل كامل "خارج الصندوق") ، لكنني كنت كسولًا جدًا. ذهبت في الاتجاه الآخر - رميت / dev / ttyUSB0 على TCP باستخدام حزمة ser2net ، الموجودة في حزمة openwrt.
يعد config /etc/ser2net.conf أمرًا بسيطًا وغير لائق
3333:raw:0:/dev/ttyUSB0:9600,remctl
بعد بدء تشغيل ser2net ، يمكنك الاتصال بجهاز التوجيه telnet على المنفذ 3333 والتحقق من النتيجة.
أريد إجراء حجز: بعد إعادة تشغيل جهاز التوجيه ، لم يعمل cat / dev / ttyUSB0 فجأة. هذا ، بالطبع ، نجح ، لكنني كتبت القمامة إلى وحدة التحكم. تذكرت أنه أثناء التجارب على جهاز التوجيه ، قمت بتشغيل minicom ، والذي ربما قام بتهيئة المنفذ. لم يعمل فقط ضبط الوضع 9600 8n1 ، لذلك بحثت مع stty عن إعدادات المنفذ الموجودة في حالة "العمل" وأدخلت التهيئة في rc.local
stty -F /dev/ttyUSB0 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
من المؤكد أن شيئًا غير ضروري ، سيصححه القراء ربما. حسنًا ، إذا حددت معلمات المنفذ في ser2net.conf ، فلا يمكنك وضع الحزمة stty على جهاز التوجيه.
نتيجة لهذه التلاعبات على الخادم بواجهة WEB ، أصبحت وحدة التحكم متاحة لنا. لذلك ، سنعيد كتابة كود معالجة المكالمات قليلاً. كتبت في PHP. من العار إظهار جميع الشفرات (أنا لست مبرمجًا في النهاية ، لقد استخدمت الإدخالات من البرنامج التعليمي) ، لذا فإن النقطة هي:
$re = '/CLIP: ".(7\d{10})"/m';
أعتقد أن الجميع ينفذ عملية_العمل كما يشاء ، من كتابة المعلومات إلى ملف السجل ، وإنشاء إدخال صورة / فيديو وإرسالها من خلال برنامج Telegram إلى هاتف زوجته / زوجها ، بالإضافة إلى فريق لصنع القهوة أو لتسخين البرش.
سوف أسهب في الحديث عن sync_phones بمزيد من التفصيل ، لأنها تنفذ الخوارزمية "غير العامة" لوحدة التحكم Doorhan GSM. ونعم ، وجه صغير ، لقد استخدمت الخلية بدلاً من pdo أو mysqli.
function sync_phones($f) { $result=mysql_query("SELECT * FROM config WHERE name='update' AND val=1"); if (mysql_num_rows($result)==0) return; $init = pack('H*','aa1100ee');
الجزء 5. الخلاصة
ونتيجة لذلك ، تلقيت (كتبت) واجهة WEB للحاجز ، حيث يمكنني تصفح متصفح الجوال ، إضافة / إزالة / تغيير أرقام سكان المنزل لدينا هناك ، تدوين الملاحظات مع الإشارة إلى الشقة ، الاسم ، رقم الهاتف ، رقم السيارة. هناك صور لسيارة ، سجل إدخالات عبر الحاجز مع صورة. في المستقبل ، وفقًا للسجلات ، سأرى من يخلق أكبر حمولة على الحاجز - سيدفع للإصلاح :)
حسنًا ، كانت المكافأة نقطة WIFI في موقف السيارات بالقرب من المنزل.
سعر الإصدار هو 0 روبل ويوم العطلة على الكمبيوتر.