مقدمة
بطريقة ما سقط جهاز تعقب GPS الصيني ST-901 في يدي. تم تصميم الجهاز بشكل أساسي للاستخدام في تكنولوجيا السيارات والدراجات النارية ، ويحتوي على وحدة gsm 2G للتواصل مع العالم الخارجي ، وحافظة مقاومة للماء مختومة ، وبطارية صغيرة مدمجة تسمح لك بالعمل لمدة 2-3 أيام بدون طاقة خارجية عند إرسال إشارة كل 3 دقائق ، بالإضافة إلى سلك إشعال الإشارة ، والذي يسمح لك بالتحذير من بدء تشغيل المحرك. يمكنك إدارة هذا المتتبع عبر أوامر SMS لرقم المتتبع ، والتواصل وتلقي الإخطارات عن طريق الرسائل القصيرة وتوصيله بالسحابة عبر GPRS. بعد اللعب معه لفترة من الوقت ، رميته في درج حتى ظهر HomeAssistant في المنزل. كانت هناك فكرة لربطه بمنزل ذكي.
المهام
لتوصيل المتتبع بـ HomeAssistant ، تحتاج إلى حل مشكلتين: الحصول على الإحداثيات من المتتبع وكتابتها في HomeAssistant. إذا كانت هناك عدة حلول ممكنة للمهمة الثانية في وقت واحد (على سبيل المثال ،
gpslogger أو
owntracks_http ) ، فإن حل المهمة الأولى في حالتي كان معقدًا لأنه في إعدادات المتتبع لنقل الإحداثيات ، يمكنك تحديد عنوان IP فقط ، وليس اسم المجال. نظرًا لعدم امتلاك عنوان ثابت في المنزل ، نشأت فكرة استخدام وسيط.
ألاحظ أنه بهذه الطريقة ، يمكنك توصيل أي جهاز تعقب GPS تقريبًا (وليس فقط في مقالتي) ، متوافق مع موارد الوسيط . كل من يهتم بما جاء به ، مرحبًا بك في القط.
فكرة
كما قلت أعلاه ، يمكن توصيل هذا المتتبع بالعديد من الخدمات السحابية. يتيح لك بعضها مع بعض القيود استخدام الخدمات مجانًا. تحتوي بعض الخدمات على واجهات برمجة تطبيقات كاملة للتفاعل معها ، لكني لم أجد مثل هذه التطبيقات المجانية. ولكن جميع الخدمات تقريبًا توفر خدمة "مشاركة" موقع المتتبع عبر رابط دائم. بعد مراجعة العديد من هذه الخدمات والتفتيش في شفرة المصدر للصفحات المشتركة ، وجدت ما كنت أبحث عنه في خدمة
livegpstracks : طلب إحداثيات. وبالتالي ، فإن المخطط العام للعمل على النحو التالي: يتصل المتعقب بخدمة livegpstracks وينقل إحداثياتها ، ويقوم HomeAssistant بشكل دوري بطلب http إلى الخدمة ويتلقى آخر الإحداثيات المسجلة ، والتي تتم كتابتها إلى HomeAssistant بواسطة طلب http آخر. هنا
رابط لقائمة بجميع المتتبعات المتوافقة مع الخدمة.
التنفيذ
1. الحصول على إحداثيات حسب الطلبنحن نسجل في خدمة
livegpstracks ونقوم بتوصيل جهاز التتبع الخاص بنا (يحتوي الموقع على تعليمات تفصيلية لمختلف الموديلات). بعد ذلك ، من خلال شريط الأدوات على الموقع ، قم بإنشاء ارتباط خاص للتتبع. يحتوي الرابط على الشكل:
https://livegpstracks.com/dv_USERID.html
حيث USERID هو المعرف الرقمي لكراتك.
هذا كل شيء. يمكنك الوصول إلى الخدمة من خلال الطلبات. لكي لا تعذبك لفترة طويلة ، سأقدم فقط تنسيق الطلب:
https://livegpstracks.com/viewer_coos_s.php?username=USER&ctp=one&code=USERID&tgst=site&tgsv=12&tkv11=TIMENOWMS
هنا USER هو المستخدم الذي قمت بتسجيله في خدمة livegpstracks ، USERID هو المعرف الرقمي الذي تم تعيينه للارتباط المشترك ، TIMENOWMS هو الوقت الحالي بالمللي ثانية (وقت unix).
الإجابة النموذجية هي:
[{"code":"xxx","id":"xxx","lat":"44","lng":"48","speed":"0","azimuth":"0","d":"2018-06-19","t":"09:35:17","altitude":"0","battery":"0","gpsaccuracy":""}]
ملاحظة: قمت بتقليل الناتج بشكل كبير ، وقمت أيضًا بتغيير رمز المعلمات ، id ، lat ، lng.
تبدو طريقة الحصول على الإحداثيات في الثعبان كما يلي:
def getInfoFrom(self): timenow = int(datetime.now().strftime("%s")) * 1000 response = requests.get('https://livegpstracks.com/viewer_coos_s.php', params={'username': self._user, 'ctp': 'one', 'code': self._myid, 'tgst': 'site', 'tgsv': 12, 'tkv11': timenow}) data = response.json() self._lat = data[0]["lat"] self._lon = data[0]["lng"] self._speed = data[0]["speed"] self._direction = data[0]["azimuth"] self._last_time_rcv = data[0]["d"] + ' ' + data[0]["t"]
أعتقد أنك لست بحاجة إلى شرح أي شيء في هذا الرمز: نحصل على الوقت الحالي ، ونطلب الحصول على ، ونستجيب json ، ونحلله ونحصل على خط العرض وخط الطول والسرعة واتجاه الحركة والوقت الذي استلم فيه الخادم الإحداثيات.
2. سجل الإحداثياتللتسجيل ، استخدمت وحدة GPSLogger لـ HomeAssistant ، لأنها تعمل من خلال طلب http وتسمح لك باستخدام كلمة مرور منفصلة ، تختلف عن كلمة المرور لـ HA بالكامل. توضح الوثائق (
gpslogger ) أن الطلب به التنسيق التالي:
https://HAADRESS:HAPORT/api/gpslogger?latitude=LAT&longitude=LON&device=DEV&accuracy=ACC&speed=SPD&direction=DIR&api_password=PASS
هنا HAADRESS هو عنوان IP أو اسم الخادم مع HA ، HAPORT هو منفذ الخادم ، LAT هو خط العرض ، LON هو خط الطول ، DEV هو اسم الجهاز الذي سيتم عرضه في HA ، ACC هي دقة تحديد الإحداثيات (لسبب ما لا يعمل في HA ، فإنه يعطي خطأ ، I لم تستخدمه) ، SPD - السرعة ، DIR - اتجاه الحركة ، PASS - كلمة المرور لإرسال الإحداثيات
تبدو طريقة كتابة الإحداثيات في python كما يلي:
def putInfoTo(self): if self._lat != '' and self._lon != '': req_str = self._haddr+'/api/gpslogger' response = requests.get(req_str, params={'latitude': self._lat, 'longitude': self._lon, 'accuracy': 30, 'speed': self._speed, 'direction': self._direction, 'device': self._name, ' api_password': self._pwd}) self._last_time_upd = time.strftime("%Y.%m.%d %H:%M")
أعتقد هنا أيضا أن التعليقات غير ضرورية.
3. الوحدةفيما يلي الكود الكامل للوحدة لاستقبال الإحداثيات وتسجيلها.
لتوصيل هذه الوحدة ، يجب نسخ الرمز إلى دليل "config_folder_homeassistant / custom_components / sensor / car_location.py" ، وإضافة الأسطر التالية إلى التكوين:
device_tracker: - platform: gpslogger password: !secret gpslogger_password sensor: - platform: car_location name: car_sensor user: USER myid: USERID haddr: YOUR_HA_ADDRESS pwd: !secret gpslogger_password
إليك جميع المتغيرات من قسم "الحصول على الإحداثيات حسب الطلب".
تعمل هذه الوحدة في HA منذ أكثر من شهر دون أي فشل أو مشاكل أخرى.
هذا كل شيء ، شكرا لاهتمامكم.
تحديث:قام HomeAssistant بتحديث مكون GPSLogger ، والذي تم بموجبه إصدار جديد من التعديل والإعدادات:
إعدادات جديدة device_tracker: - platform: gpslogger sensor: - platform: car_location name: car_sensor user: USER myid: USERID haddr: YOUR_HA_ADDRESS_WEBHOOK
YOUR_HA_ADDRESS_WEBHOOK - عنوان مدونة الويب لـ GPSLogger ، يمكنك الحصول عليه في قسم الإعدادات - عمليات التكامل - قسم GPSLogger.
UPD2:قام HomeAssistant بتحديث منطق العمل من الإصدار 0.88 ، فيما يتعلق بالإصدار الجديد من mod:
sensorUPD3:نسخة جديدة من التكامل. انتقل المشروع إلى
جيثب . الإصدار الحالي هناك.