خادم بيانات GPS بسيط
جمع موقع GPS من الأجهزة (الهاتف الذكي، جهاز تعقب GPS)، وتخزينه في قاعدة بيانات SQLite والسماح بعرضه على الخريطة (OSM أو Google).
- يتم استقبال البيانات من الجهاز إما عبر HTTPS (PHP) أو حزمة tcp/udp (خادم GO)
- يمكن تنزيل المسارات المخزنة كملف GPX
- واجهة إدارية بسيطة لإضافة وتعديل الأجهزة الجديدة
متطلبات
- خادم الويب (Apache أو ما شابه ذلك)، الذي يدعم المصادقة (لصفحة الإدارة)
- PHP مع SQLITE3 API (على سبيل المثال، حزمة php-sqlite3 ) ومآخذ توصيل (على سبيل المثال، حزمة php-sockets) مثبتة
- مترجم GO لجسر TCP/UDP-HTTP (مطلوب فقط لأجهزة التتبع التجارية مثل TK103 أو GPS Logger في وضع UDP). مطلوب حزمة إضافية golang.org/x/crypto. التثبيت باستخدام "اذهب واحصل على golang.org/x/crypto"
- java script GPXViewer بواسطة Jürgen Berkemeier (مجلد
js/GM_utils/
)
تثبيت
- باستخدام عامل الميناء
- انسخ المجلد
docker
إلى خادمك (أعد تسميته على سبيل المثال إلى gps-server
) - انسخ مجلد
webapp
(وإذا لزم الأمر tcp_udp_http_bridge
) إلى دليل gps-server
- اتبع الإرشادات الموجودة في مجلد عامل الإرساء
- قم بتثبيت كل مكون على حدة
- انسخ جميع الملفات الموجودة في مجلد webapp إلى مجلد مساحة الويب (في ما يلي ./gpstracker/ يُفترض)
- قم بإنشاء الإدخال المقابل في تكوين خادم الويب للسماح بالوصول إلى الويب وتشغيل php
- اضبط ملف .htaccess ذي المستوى الأعلى (Apache)، أو قم بتقييد الوصول في تكوين Nginx (مثال nginx.conf)
- قم بتعيين المصادقة لواجهة المسؤول
- في ملف
auth/.htpasswd
يتم تضمين admin
مستخدم واحد مع changeme
كلمة المرور - يجب تعديل المسار إلى ملف .htpasswd في
admin/.htaccess
. المسار المطلق مطلوب! - قم بتحديث .htpasswd بمستخدمين/كلمات مرور جديدة. من الأفضل استخدام سطر الأوامر
htpasswd /path-to-htpasswd-file/.htpasswd myusername mypassword
أو منشئ عبر الإنترنت
- تحرير البرامج النصية/config.php: ضبط الإعدادات
- تحديد المنطقة الزمنية، والخريطة التي سيتم استخدامها، وتنسيق التاريخ/الوقت
- حدد الفترة الزمنية بدون الحركة ليتم التعرف عليها كتوقف مؤقت
- حدد الوقت بدون الحركة لبدء مسار جديد
- تمكين أو تعطيل بدء تشغيل خادم tcp/udp Bridge GO
- احصل على javascript GPXViewer من
https://www.j-berkemeier.de/GPXViewer/
وانسخ المجلد GM_Utils إلى gpstracker/js/
- من أجل استخدام خرائط جوجل، يلزم وجود مفتاح API للبحث عن
google maps api key application
- قم بتحرير الملف
./js/GM_Utils/GPX2GM_Defs.js
وقم بإلغاء تعليق السطر الذي يحتوي على JB.GPX2GM.GM_Api_key
وأضف مفتاح API كقيمة
- TCP/UDP-HTTP-جسر
- تمكين/تعطيل في البرامج النصية/config.php
- تجميع التعليمات البرمجية باستخدام GO في tcp_udp_http_bridge (انتقل للبناء)
- نسخ قابل للتنفيذ إلى دليل exe على مساحة الويب
- اضبط config.php وفقًا لذلك (اسم ومسار/إلى الملف القابل للتنفيذ)
- استدعاء واجهة المسؤول لبدء الخادم
- أضف إدخال crontab للتحقق مرة واحدة كل ساعة، إذا كان الخادم قيد التشغيل (يتطلب "wget")
1 * * * * /usr/bin/wget -O /dev/null -o /dev/null https://servername/gpstracker?checkserver=SECRETKEY >/dev/null 2>&1
- سيتم إنشاء ملف قاعدة البيانات تلقائيًا
أدخل أجهزة التتبع
- افتح الصفحة https://servername/gpstracker/admin واملأ النموذج
عرض البيانات
- افتح الصفحة https://servername/gpstracker?id=ID-of-device
- معلمة اختيارية لتحديد النطاق الزمني: dt= بالحد الأدنى (م)، أو الساعات (ح)، أو الأيام (د) أو السنوات (ص)، على سبيل المثال "10د" لمدة 10 أيام
أجهزة التتبع
- سيعمل أي تطبيق تتبع متوافق مع OpenGTS أو Traccar
- أمثلة: مسجل نظام تحديد المواقع العالمي (GPS) لنظام Android، عميل Traccar ...
- مسجل GPS لنظام Android
- افتح الإعدادات -> تفاصيل التسجيل -> "تسجيل الدخول إلى خادم OpenGTS" لتنشيط التتبع في الوقت الفعلي
- الخادم: "<servername.com>"
- المنفذ: 443
- طريقة الاتصال: HTTPS
- مسار الخادم: /gpstracker
- معرف الجهاز: المعرف الذي أدخلته في واجهة الإدارة
- اختبر الاتصال بالضغط على "التحقق من شهادة SSL"
- طريقة الاتصال البديلة UDP: استخدم رقم المنفذ الوارد في config.php (الافتراضي 20202) -> يتطلب تشغيل الخادم
- إذا كانت تكلفة نقل البيانات المتنقلة تمثل مشكلة، فإن UDP هو الخيار الأفضل، نظرًا لأن كمية البيانات ضئيلة
- الإعدادات->الأداء
- حدد الفاصل الزمني (على سبيل المثال 20 ثانية)
- إبقاء نظام تحديد المواقع العالمي (GPS) نشطًا بين عمليات الإصلاح: يكون ذلك منطقيًا لفترة قصيرة، ولكنه يحتاج إلى المزيد من البطارية
- ضبط المسافة بين نقاط البيانات: لا ترسل أي بيانات، عندما تكون المسافة أقل من حد معين (على سبيل المثال 10 أمتار)
- تفعيل "إيقاف التسجيل إذا لم يتم اكتشاف أي حركة"
- تطبيق العميل الخاص به
- يرسل التطبيق بيانات الموقع إلى خادم MQTT (يمكن تشفيره). الموضوع:
owntracks/<username>
على سبيل المثال owntracks/gps
- يتوفر رمز الجسر، الذي يستخرج البيانات من خادم MQTT ويرسلها إلى خادم بيانات GPS البسيط، ضمن
mqtt-bridge
- يتضمن المثال خادم MQTT أيضًا
- هذا هو تطبيق عامل إرساء خالص
- كيف
- اضبط ملف
docker-compose.yml
على الإعداد الخاص بك أو قم بتعيين متغيرات البيئة المقابلة (الخادم، كلمات المرور، الأسرار ...) - قم ببناء حاوية
docker-compose build
كود الجسر - ابدأ
docker-compose up -d
- قم بتعيين اسم المستخدم وكلمة المرور:
sudo docker exec gps-mqtt sh -c "mosquitto_passwd -b mosquitto/config/password.txt <username> <password>"
- عادةً ما ترسل الأجهزة التجارية موقع GPS عبر tcp/udp. وهذا يتطلب تشغيل الخادم
- قم بتعيين خادم ومنفذ TCP/IP في config.php
- تكوين الخادم والمنفذ في جهاز التتبع (يتم ذلك عادةً عبر الرسائل القصيرة. راجع دليل كيفية القيام بذلك)
- يجب تجميع الخادم ووضعه في دليل ./exe/
- انسخ
devices.config
إلى الدليل ./exe/. يحتوي هذا على تعبيرات عادية لتنسيقات مختلفة (مثل OpenGTS، TK103)- يمكن إضافة المزيد من الأجهزة
- قم بتشغيل الخادم باستخدام الخيار -verbose لدراسة التنسيق وإضافة التعبيرات العادية المقابلة إلى
devices.config
- يتم تشغيل الخادم تلقائيًا، عند فتح واجهة الإدارة.
- يتطلب هذا السماح لـ PHP ببدء تشغيل الخادم عبر استدعاء "exec()".
- إذا لم يكن ذلك ممكنًا، فيجب تشغيل الخادم يدويًا أو عبر مهمة cron.
تكوين الخريطة
- يتم تضمين الخريطة والمسارات بواسطة Java script GPX Viewer بواسطة Jürgen Berkemeier (https://www.j-berkemeier.de/GPXViewer/)
- يمكن التحكم في الشكل والسلوك عن طريق إضافة معلمات اختيارية (مدرجة في صفحة الويب أعلاه) إلى قالب html في
html/gpxviewer_html.template
- يتم تحديد الخريطة الافتراضية في config.php (OpenStreet-Map (OSM,OSMDE) و Google-Map (Karte))
- من أجل استخدام خرائط جوجل، مطلوب مفتاح API. يجب إدخال المفتاح في البرنامج النصي
js/GM_utils/GPX2GM_Defs.js
خادم TCP/UDP
يفتح رمز GO منفذًا ويقبل الاتصالات عبر TCP وUDP. يقوم الخادم فقط بهضم الحزمة ولا يستجيب (عادةً). تتم مطابقة البيانات المستلمة بالتعبيرات العادية لتنسيقات الأجهزة المعروفة (./exe/devices.config). إذا تم العثور على تطابق وكان معرف الجهاز معروفًا، فسيتم تحويل بيانات GPS إلى التنسيق المتوقع بواسطة كود PHP وتمريرها عبر اتصال HTTP إلى الخادم (على سبيل المثال، localhost/gpstracker/index.php). ثم يتم تخزين موقع GPS في قاعدة البيانات. المعلمات التي سيتم تمريرها إلى الخادم:
-port <portnumber>
-httpserver <server name - e.g. localhost>
-urlpath <path on server>
-key <secret key in order to check the status of the server - used by PHP>
-verbose - print raw messages, which allows to determine the format send by the device
مثال المكالمة
nohup tcp_udp_http_bridge -port 20202 -httpserver localhost -urlpath /gpstracker/index.php -key 123456
تشفير بيانات UDP
يمكن لخادم tcp/udp التعامل مع الحزم المشفرة AES. يتطلب هذا وجود PSK على مستوى الخادم بتنسيق ./exe/encrypt_psk.config
. يتم تنفيذ هذا حاليًا فقط في الإصدار الخاص بي من مسجل GPS لنظام Android.
معلومات حول تنسيقات بيانات GPS
توفر معظم الأجهزة البيانات كسجل NMEA GPRMC (راجع https://de.wikipedia.org/wiki/NMEA_0183)
$GPRMC,162614,A,5230.5900,N,01322.3900,E,10.0,90.0,131006,1.2,E,A*13
identifier, time, Active/Void, latitude, N/S, longitude, E/W, speed, angle, date, magnetic deviation, E/W, signal integrity, check sum
يتم تحديد خطوط الطول والعرض بالدرجة والدقائق (ddmm.mmmm)، ويتم تخزينها بواسطة الخادم بالدرجة. السرعة المحددة بالعقدة ويتم تخزينها بواسطة الخادم بوحدة م/ثانية.
غالبًا ما يتم استخدام سجل GPRMC مخفض (بدون انحراف مغناطيسي)، مع معرفات إضافية لنوع الجهاز، وتحديد الجهاز. غالبًا ما يكون المحدد هو رقم IMEI الخاص بالجهاز. نظرًا لأن GPRMC تفتقر إلى الارتفاع والدقة، يتم إضافة ذلك أحيانًا. يتم حساب مجموع الشيك بواسطة XOR لجميع الأحرف (رموز ASCII) بين $ و*
تنسيق HTTP
https://my-server.com?time=UTC&lat=LATITUDE&lon=LONGITUDE&alt=ALTITUDE&acc=ACCURACY&id=DEVICEID (lat and lon given in degree 0-180 and 0-360, respectively) or
https://my-server.com?id=DEVICEID&gprmc=<GPRMC-RECORD> or
تنسيق TCP/UDP
مسجل GPS لنظام Android (تنسيق OpenGTS)
uabcde/Y0xXyY/$GPRMC,180725,A,5637.37477,N,1211.26495,E,0.000000,0.000000,021017,,*20
username/deviceid/GPRMC-RECORD
مسجل GPS لنظام Android مع الارتفاع الملحق
uabcde/Y0xXyY/$GPRMC,180725,A,5637.37477,N,1211.26495,E,0.000000,0.000000,021017,,*20,alt=100.5
الأجهزة التجارية (TCP/UDP)
توجد صيغ مختلفة. عادةً ما يتبع رأس قصير مكون من 2-3 أحرف رقم تعريف IMEI/الجهاز الخاص بالجهاز، وحالة مكونة من حرفين وسجل GPRMC كامل إلى حد ما (بدون رأس GPRMC $). يمكن إضافة بعض بتات الحالة في النهاية. ترسل معظم الأجهزة بالإضافة إلى ذلك رسالة نبض القلب، والتي لها تنسيق مختلف. تتطلب بعض الأجهزة تسجيل الدخول لبدء الاتصال. تم تضمين هذا البروتوكول في تكوين الخادم والجهاز، ولكنه لم يتم اختباره حاليًا. حاليًا، يتم تضمين جهاز TK103B H02 فقط في devices.config.
مثال لرسالة موقع GPS عبر UDP
*HQ,7893267561,V1,050316,A,2212.8745,N,11346.6574,E,14.28,028,220902,FFFFFFFF#
المقر الرئيسي هو معرف الشركة المصنعة، متبوعًا برقم التعريف ونوع الرسالة "V1". يفتقد سجل GPRMC رأس $GPRMC والانحراف المغناطيسي ومبلغ الشيك. وفي نهاية الرسالة، يتم توفير معلومات الحالة.