
Meshyface هي لوحة تحكم لـ Meshtastic تعتمد على المحادثة أولاً، وتعمل كخدمة Python واحدة وتقدّم واجهة ويب من صفحة واحدة عبر HTTP.
توفّر الواجهة الحالية ما يلي:
مساحة عمل Console هي سطح تحكم بأسلوب طرفية لحركة الحزم، والبحث في السجل، وأوامر أدوات الشبكة.
Tab أو Enter
للقبول، وArrowRight لقبول اللاحقة المعروضة باهتة، وArrowUp /
ArrowDown للتنقل داخل النافذة المنبثقة.! يضيّق حسب معرّف العقدة.live يبث حركة الحزم حتى Ctrl+C أو q. استخدم
live grep <text> أو live rg <text> أو live filter=<text> أو
live <text> فقط لبث مجموعات الحزم المباشرة المطابقة فقط. ما تزال فلاتر الطبقة
والتفصيل (verbosity) مطبَّقة، على سبيل المثال
live rg TEXT_MESSAGE_APP -vv --layer=2.grep <text> وrg <text> يبحثان في سجل الحزم/المحادثة المحتفظ به مع
نوافذ سياق، وحدود، وفلاتر مصدر الحزم/المحادثة، وفلاتر نطاق الملخص/الحزم./search <text> يفلتر مخرجات Console المرئية من موجه الأوامر دون
بدء بحث في السجل المحتفظ به.
عرض الخريطة مع مواقع العقد، والروابط، والمسارات الشائعة، والعناقيد، وخريطة حرارة الإشارة.

عرض السجل لأعداد العقد، وحالة الاتصال، والعقد الجديدة، وتقارير المواقع.

عرض الطوبولوجيا الذي يظهر الروابط المرصودة من العقدة الجذرية المحددة.

عرض التتبع لمصدر ووجهة وروابط قريبة وتفاصيل الحزم لكل قفزة.

مخطط القياس عن بُعد الذي يقارن سجل أجهزة الاستشعار عبر عقد متعددة.

بطاقات علوية لنشاط الراديو، وأعداد العقد، والحزم، والروابط، والبطارية، واستخدام القنوات.
يمكن للمظاهر إعادة تشكيل لوحة التحكم بالكامل بألوان مخصصة، وتدرجات لونية، وشفافية، وضبابية، وخطوط، وجسيمات، أو خلفية خريطة مباشرة. هذه اللوحات مثال على مظاهر مخصصة؛ اختر أي معاينة لفتح لقطة الشاشة بدقة كاملة.
يمكن لعقد Meshyface مشاركة حزم مظهر مضغوطة تحتوي على وصفة مظهر للعقدة
وعلامة مائية أو شبح اختيارية. هيّئ عقدتك وعاينها في
Settings > Appearance > Node Appearance، وفعّل Share node appearance،
ثم استخدم Broadcast appearance لنشرها.
flowchart LR
Browser["Browser<br/>single-page UI"]
CDN["Vendored browser assets<br/>Leaflet + leaflet.heat + particles.js"]
Tiles["Basemap provider<br/>OpenStreetMap tile service"]
Server["ThreadingHTTPServer<br/>HTML shell + JSON API"]
Assets["Python template assembly<br/>meshdash/html* + meshdash/assets/*"]
State["State loaders<br/>live snapshot + history readers"]
Services["Write services<br/>chat, settings, tools, games, optional files"]
Tracker["DashboardTracker<br/>live receive path + in-memory buffers"]
History["HistoryStore / SQLite (WAL)<br/>chat, packets, rollups, settings"]
Radio["Meshtastic interface<br/>serial or TCP"]
Mesh["Meshtastic radio / mesh"]
Atlas["Bundled offline atlas<br/>reference basemap fallback"]
Browser -->|GET /| Server
Browser -->|GET /api/*| Server
Browser -->|POST write APIs| Server
Browser --> CDN
Browser --> Tiles
Browser -->|fallback basemap data| Atlas
Server --> Assets
Server --> State
Server --> Services
State <--> Tracker
State <--> History
Services <--> History
Services <--> Radio
Radio <--> Mesh
Radio -->|receive callbacks| Tracker
ابدأ بـ المتطلبات والتبعيات، ثم اختر مسار تثبيت واحد:
/opt/meshyface لاستضافة مستمرة قابلة للتحديث عبر GitHub./data للحالة المستمرة.--history-db هو اسم ملف SQLite النهائي على القرص. لم تعد لوحة التحكم
تضيف لاحقة الراديو المتصل، لذا فإن أي راديو يُوصَل بلوحة التحكم
يساهم في نفس سجل الحزم والمحادثة والعقد والتجميعات المحفوظ.
--no-history يعطّل التخزين المستمر ويبقي فقط المخازن المؤقتة الحية في الذاكرة.mesh_dashboard_theme_settings.json افتراضيًا، أو في الملف المقدَّم عبر
--theme-settings-file.الأوامر التشغيلية التي تفحص بيانات لوحة التحكم المحلية أو تصلحها موثقة في docs/maintenance.md.
العرض الفرعي Links هو عرض طوبولوجيا، وليس إعادة تشغيل لمسار الحزم.
History يرسم من سجل الروابط المخزَّن المحفوظ في SQLite.Live يرسم من ملاحظات روابط الجلسة الحالية فقط.الجذر الحالي هو العقدة التي يتمحور حولها الرسم البياني. اختيار عقدة مختلفة يغيّر الجذر ويعيد حساب حلقات المسافة المرقّمة من تلك العقدة.
--mesh-host <ip-or-dns>: مضيف راديو TCP--mesh-tcp-port <port>: منفذ راديو TCP، الافتراضي 4403--mesh-port <path>: مسار جهاز تسلسلي (serial)--default-gateway-host <host>: مضيف TCP احتياطي إذا لم يتم توفير --mesh-host
وكان المنفذ التسلسلي ما يزال على المسار الافتراضي--default-gateway-port <port>: منفذ TCP احتياطي لـ
--default-gateway-host--no-default-gateway: فرض التسلسلي ما لم يتم تعيين --mesh-host صراحةًمتغيرات البيئة ذات الصلة:
MESH_GATEWAY_HOSTMESH_GATEWAY_PORTMESH_DASH_MESH_PORT للمسار التسلسلي الافتراضي--http-host <host>: مضيف الربط، الافتراضي 0.0.0.0--http-port <port>: منفذ الربط، الافتراضي 8877--refresh-ms <ms>: فترة استطلاع المتصفح، الافتراضية 3000--packet-limit <n>: حجم مخزن الحزم المباشرة الأخيرة، الافتراضي 250--reset-ticker-scale-on-restart /
--no-reset-ticker-scale-on-restart--show-secrets: إظهار المفاتيح الخاصة/كلمات المرور/مفاتيح PSK في لوحات JSON الخام--debug-mode / --no-debug-mode: إظهار أسطح لوحة تحكم خاصة بالتصحيح مثل
تشخيصات الشبكة المتقدمةمتغيرات البيئة ذات الصلة:
MESH_DASH_PRIVATE_MODEMESH_DASH_API_TOKENMESH_DASH_GAMES_ENABLEMESH_DASH_VERSIONMESH_DASH_GIT_COMMITMESH_DASH_PR_NUMBERالهوية في وقت التشغيل تأتي من التزام git المكوّن من 12 حرفًا، متبوعًا برقم
طلب سحب اختياري، على سبيل المثال abc123456789 · PR #43. لوحة Software
تعرض هذا التنقيح الواحد بدلاً من إصدار حزمة. يتم اكتشاف مواضيع التزامات
الدمج/الضغط في GitHub تلقائيًا؛ ويمكن لنشر المعاينة غير المدمج
تعيين MESH_DASH_PR_NUMBER صراحةً.
/api/revision هي نقطة نهاية الهوية الأساسية. حقلا revision و
build_ref يبلغان عن تنقيح وقت التشغيل، بينما يبقيان commit وpr_number
متاحين كحقلين منظمين. تبقى /api/version نقطة نهاية قديمة،
ويحتفظ حقل version فيها ببيانات وصفية للإصدار/الحزمة.
MESH_DASH_VERSION محجوز بالمثل للتعبئة الإصدارية الصريحة و
لا يظهر في لوحة التحكم.
--file-transfer-enable: تفعيل تطبيق Files؛ يتطلب
--accept-file-transfer-traffic-disclaimer--file-transfer-auto-accept: قبول عمليات النقل الواردة المباشرة دون
تأكيد من المتصفح--file-transfer-max-bytes <bytes>: حد لكل ملف، الافتراضي 65536 و
مقيد بـ 1024-524288تستخدم عمليات النقل بروتوكول MF_FILE_V2 التجريبي على المنفذ الخاص 258 وهي
غير متوافقة مع نقل الرسائل النصية السابق. عندما يكون لدى الوجهة
عدد قفزات مكتشف قابل للاستخدام، تستخدم Meshyface ذلك العدد زائد واحد، مع سقف
حد قفزات الراديو المكوّن. بيانات القفزات الأقدم من ساعة واحدة ترجع إلى
الحد المكوّن. يعرض تطبيق Files الحد المحدد ومصدره.
متغيرات البيئة ذات الصلة:
MESH_DASH_FILE_TRANSFER_ENABLEMESH_DASH_FILE_TRANSFER_AUTO_ACCEPTMESH_DASH_FILE_TRANSFER_MAX_BYTESMESH_DASH_ACCEPT_FILE_TRANSFER_TRAFFIC_DISCLAIMER--history-db <path>: مسار قاعدة بيانات SQLite الأساسي--history-max-rows <n>: الافتراضي 200000--history-retention-days <days>: الافتراضي 30، استخدم 0 لتعطيل
تقليم العمر--history-event-max-rows <n>: سقف أحداث الحزم للإلحاق فقط، الافتراضي
200000--history-event-retention-days <days>: الافتراضي 30--history-rollup-retention-days <days>: الافتراضي 365--no-history: وضع الذاكرة فقطمتغيرات البيئة ذات الصلة:
MESH_DASH_HISTORY_DB--theme-presets <json>: ملف مظاهر مسبقة مخصص اختياري--theme-preset <name>: اسم المظهر المسبق المحدد--theme-settings-file <json>: ملف اختيار المظهر المحفوظ في وقت التشغيلالمظاهر المسبقة المدمجة:
default (أزرق Meshyface الآمن، الجسيمات معطلة)custom (مظهر عرض مع جسيمات وتأثيرات خلفية مفعّلة)التثبيتات الجديدة تكون افتراضية على default ما لم يحدد ملف إعدادات مظهر محفوظ أو
MESH_DASH_THEME_PRESET مظهرًا مسبقًا آخر.
متغيرات البيئة ذات الصلة:
MESH_DASH_THEME_PRESETSMESH_DASH_THEME_PRESETMESH_DASH_THEME_SETTINGS_FILE--private-mode و/أو رمز API للتحكم الأكثر صرامة في مسار الكتابة.MESH_DASH_API_TOKEN على --api-token على المضيفات المشتركة أو متعددة
المستخدمين. يمكن أن يكون رمز سطر الأوامر مرئيًا في قوائم العمليات ومحفوظًا
في سجل الصدفة.Join Meshyface للقناة يستخدم PSK خاص بـ Meshyface
عامًا عمدًا للتوافق بين مستخدمي هذا البرنامج. لا
تستخدم تلك القناة العامة لحركة مرور خاصة.--show-secrets يعرض قيمًا حساسة في لوحات JSON الخام؛ لا تفعّله
بشكل عابر على شاشات مشتركة.--no-allow-tokenless-raw-packet-download.شغّل مجموعة الاختبارات العادية:
python -m pytest
شغّل Ruff بنفس الطريقة التي يعمل بها CI:
scripts/run_ruff_local.sh
شغّل تقرير تغطية التطبيق الاستشاري:
python -m pytest \
--cov=meshdash \
--cov=mesh_dashboard \
--cov=mesh_connection \
--cov-report=term
شغّل بوابة التغطية المحلية بالحد الأدنى الأكثر صرامة وهو 85%:
scripts/run_coverage_local.sh
شغّل معيار استجابة واجهة المستخدم الرسومية المحلي قبل طلبات السحب:
scripts/run_gui_responsiveness_local.sh
تستثني التغطية عمدًا حزمة محرك Zork المنقولة من التسجيل، لكن اختبارات Zork المستقلة والتوجيه ما تزال تعمل. ينشر GitHub Actions نفس تقرير التغطية كتعليق استشاري وقطعة أثرية على طلب السحب. يفشل CI تحت 80%. تبقى البوابة المحلية أعلى من CI بـ 5 نقاط مئوية.
![]() |
--private-mode / --no-private-mode: إزالة شرائح المحادثة العامة ومنع
نقاط نهاية عامة محددة--api-token <token>: طلب مصادقة على نقاط نهاية الكتابة عبر
Authorization: Bearer <token> أو X-API-Token؛ يُفضَّل استخدام
MESH_DASH_API_TOKEN على المضيفات المشتركة لأن رموز سطر الأوامر قد تظهر
في قوائم العمليات وسجل الصدفة--allow-tokenless-raw-packet-download /
--no-allow-tokenless-raw-packet-download: السماح بتنزيلات قاعدة بيانات الحزم الخام
دون رمز مميز لعملاء loopback/الشبكة المحلية الخاصة؛ مفعّل افتراضيًا--games-enable / --no-games-enable: تفعيل نقاط نهاية Console المستقلة
القابلة للعب لـ Zork--seed-from-node-db--backfill-environment-rollups: إعادة بناء تجميعات البيئة مرة واحدة ثم الخروج؛
انظر docs/maintenance.md--backfill-environment-rollups-reset: مسح التجميعات الموجودة قبل إعادة البناء--node-history-hours <hours>: نافذة العقدة المحددة الافتراضية، الافتراضي 72--node-history-max-points <n>: الحد الأقصى للنقاط التي يعيدها
/api/history/node، الافتراضي 1440