ARCUS

دليل Arcus — نظام النافورة الموسيقية

كيف تعمل النافورة الموسيقية، وكيف تُصمَّم وتُشغَّل — الدليل الميداني الكامل لنظام Arcus.

البداية

ما هو Arcus

نافورة موسيقية: مضخات تدفع الماء عبر الفوهات وإضاءة LED تضيئه، وكل ذلك يُنسَّق مع الموسيقى تلقائيًا بواسطة ذكاء اصطناعي يكتب العرض.

يتكوّن الحوض من سلسلة وحدات طرفية (كل واحدة نفّاثة: محرك يشغّل مضختها و/أو إضاءة RGB) متصلة عبر مجمّعات ترتبط بوحدة رئيسية واحدة. الرئيسية تملك الوقت والجدولة؛ وبوابة Raspberry Pi تمنحها الإنترنت والصوت والتحكّم عن بُعد. في السحابة، يتحدث الموقع وتطبيق الهاتف مع خادم خلفي يخزّن العروض ويشغّل المُلحّن الذكي ويحفظ الملكية.

موسيقى → المُلحّن الذكي → عرض → الرئيسيةالمجمّعاتالوحدات الطرفية  ·  Pi = إنترنت + صوت + تحديث

مثال مُباع: نافورة من 150 وحدة = 75 محرك (Driver) + 75 إضاءة (RGB)، على نحو 10 مجمّعات، 15 وحدة لكلٍّ منها.

العتاد

التخطيط والتوصيل

وحدة رئيسية واحدة، حتى 30 مجمّعًا، وحتى 30 وحدة طرفية لكل مجمّع — الجميع متسلسلون على خط مشترك واحد.

تُعرَّف كل وحدة بـموضعها في السلسلة: على أي مجمّع هي، ورقمها داخل ذلك المجمّع. يُسنَد هذا الموضع أثناء عملية بحث ولا يُكتب يدويًا — لذا فإن إدخال وحدة جديدة يزيح ترقيم كل ما تحته، ويعيد النظام اكتشاف الترتيب بدل تخمينه.

حدّ صارم: 30 وحدة لكل مجمّع. حوض 150 وحدة يُوزَّع على نحو 10 مجمّعات للبقاء دون الحد.

الصناديق

خمسة أنواع من اللوحات. كل واحدة متحكم PIC مع ذاكرة FRAM عبر I²C لإعداداتها وناقل RS485 مشترك.

A الرئيسية

الدماغ — كتالوج الأغاني، قوائم التشغيل، 10 مجدولات + 100 مُطلِق + قائمة دائمة، ساعة الحوض وسقف المضخة. تبثّ التحضير/التشغيل/الوقت. قد تحمل BLE.

S المجمّع

يكرّر الناقل نزولًا إلى ≤30 وحدة وعودةً، ويبوّب المرور المُعنوَن، وينقل التحديث. شفّاف غالبًا.

M Driver

يشغّل مضخة عبر VFD (INVT GD10/GD20/CHF100، Modbus). يملك الفوهة والارتفاع الأقصى والتسارع وحدود المضخة والعكس. 75 في الحوض المُباع.

C RGB

يشغّل إضاءة نفّاثة واحدة؛ يحرّك اللون ليتدرّج عبر النفّاثات كالماء. 75 في الحوض المُباع.

V صمّام

وحدة ستارة/صمّام، مُعنوَنة بمعرّف ستارة. ليست في حوض 150.

إضافات

بوابة Pi، ووحدة RN4871 BLE على UART5، وعنصر ATECC608B الآمن المطلوب.

التكبيل والتوصيلات

الحوض كله ناقل RS485 واحد بسلسلة متتابعة. يخرج من الرئيسية، ويمرّ عبر كل مجمّع، وكل مجمّع يوزّع على وحداته الطرفية — خط واحد متّصل، لا نجمة.

  • سلسلة لا نجمة — لكل صندوق دخل ناقل وخرج؛ صِل الخرج ← الدخل على طول الخط. الـ RS485 يريد سلسلة نظيفة؛ والفروع المتدلّية والتفرّعات النجمية تضرّ الإشارة.
  • حافظ على اتساق الزوج — الـ RS485 خطّا بيانات (A / B) زائد مرجع مشترك. أبقِ A→A و B→B طوال الطريق؛ زوج مقلوب واحد يُسكِت كل ما بعده.
  • الترتيب هو العنوان — لأن المعرّفات موضعية، فالترتيب المادي الذي تسلسل به الوحدات يصبح ترقيمها. سلسلها بالترتيب الذي تريده ثم شغّل بحثًا لإسناد المعرّفات.
  • الطاقة + البيانات معًا — كل صندوق يحتاج تغذيته وزوج البيانات؛ ومحرّكات المضخات تُشغَّل بـ VFD على تغذيته الخاصة. انتبه لطول الخط الكلي وهبوط الجهد في السلاسل الطويلة.
ترقيم أطراف الموصّل لكل صندوق — أي طرف هو A / B / GND / الطاقة على الرئيسية والمجمّع وكل وحدة — مكانه هنا. سيُضاف من مخطّط التوصيل ليتمكّن المُركِّب من التوصيل دون تخمين.

بوابة Pi

جهاز Raspberry Pi على ناقل J2 يحوّل الرئيسية المستقلة إلى نافورة متّصلة قابلة للتحكّم والتحديث.

  • الإنترنت والمُرحِّل — الحضور/الأوامر/الأغاني عبر مُرحِّل سحابي (دفع)، ونبضات لإظهار «متّصل».
  • الصوت — يشغّل مقطع العرض متزامنًا مع الماء.
  • التحديث OTA — يجلب البرنامج الثابت ويبرمج اللوحات عبر الناقل.
  • نقطة اتصال خاصة — نقطة WPA2 بكلمة مرور لكل جهاز، فتتحكّم بالحوض دون شبكة الموقع.
  • تحديث ذاتي — يجلب حزمة برنامجه من السحابة.

بوابة Pi بتفصيل أعمق

جهاز Raspberry Pi المُركَّب هو عقل النافورة وجسرها إلى الإنترنت؛ يصل إلى السحابة والهاتف دون أي تغيير في موجّه الموقع.

الوصول إلى Pi خلف شبكة الموقع

يحمل الاتصالَ مُرحِّلٌ شفّاف: يتصل Pi للخارج بالمُرحِّل، ويتصل الهاتف للخارج بالمُرحِّل، فكلا الطرفين يتصل صادراً ولا حاجة لإعادة توجيه المنافذ أبداً. والاتصال مُشفَّر أثناء النقل، وتظل كلمة مرور التحكم بالنافورة تحرس التحكم من الطرف إلى الطرف.

استلام اللوحة عند فقد الوصلة

يرسل Pi إلى لوحة Main إشارة إبقاء مستمرة كل 2.5 ثانية تقريباً. وطالما استمرت في الوصول تبقى Main مقودة من Pi وتُبقي محرك جدولتها متوقفاً؛ وإن توقفت لمدة ~8 ثوانٍ تتولّى Main وتشغّل جدولها الخاص — فلا تنطفئ النافورة أبداً.

  • الحضور / الإبقاء — أثناء عمل المُرحِّل يبلّغ عن حضور الأسطول كامله في خطوة واحدة، فتبقى حالة الاتصال لكل نافورة حديثة؛ ولا يرسل Pi إشارة الإبقاء الخاصة به (كل 20 ثانية) إلا عند غياب المُرحِّل. ويعرض التطبيق النافورة غير متصلة بعد أن تصمت 60 ثانية.
  • إقران Pi — يُصدر المبرمج أو المالك مفتاح بوابة Pi مرة واحدة (يُعرَض مرة واحدة فقط، ثم يُحفَظ كبصمة فقط). يقدّم Pi هذا المفتاح ليُثبت أنه بوابة نافورة واحدة بعينها.
  • التحديث الذاتي — يبلّغ Pi عن إصدار برمجياته، ويمكن للهاتف تحفيز تحديث أو إعادة تشغيل. تُطبَّق التحديثات مع فحص سلامة وتراجع تلقائي، ويُحدَّث Pi أخيراً — بعد وحداته.

أسلاك VFD وModbus

تتحدث لوحة Driver ببروتوكول Modbus القياسي إلى مُحرّك INVT متغيّر التردد (VFD) عبر أسلاكها الخاصة المنفصلة، وتختار اتجاه الدوران حسب ما إذا كان هناك عرض قيد التشغيل.

إعداد المُحرّكالقيمة التي تُضبَط على المُحرّك
المُحرّكاتINVT GD20/GD27/GD350 (افتراضي)، GD10، CHF100
النمطModbus RTU (افتراضي) أو ASCII
عنوان المُحرّك1
التسلسلي19200 باود، 8 بتات بيانات، تكافؤ زوجي، بت توقف واحد (8E1)
  • تشغيل / عكس / إيقاف — تخبر Driver المُحرّك أن يدور للأمام أو للعكس أو يتوقف، بناءً على حالة العرض وعلى إعداد Reverse لكل محرك.
  • السرعة — تُقاس سرعة المضخة 0–100 نسبةً إلى أقصى تردد للمُحرّك نفسه وإلى سقف مضخة الحوض، ثم تُرسَل إلى المُحرّك.
  • حسب الطراز — في GD20 يُرسَل التشغيل والسرعة معًا في رسالة واحدة؛ وفي GD10 وCHF100 يُرسَلان كرسالتين منفصلتين. وتتولّى Driver ذلك تلقائيًا.
تستخدم وصلة المُحرّك هذه أسلاك لوحة Driver الخاصة، منفصلةً عن سلسلة وحدات النافورة.

البرنامج الثابت

كيف تتخاطب الصناديق

تشترك كل صناديق النافورة في لغة داخلية واحدة. أنت لا تكتب منها شيئًا — الموقع والهاتف يتحدثانها نيابةً عنك.

عندما تضغط تحضير أو تشغيل أو إيقاف، أو تضبط ساعة العرض، أو تعدّل سقف المضخة، أو تُعِدّ فوهة وحدة أو ارتفاعها أو عكسها؛ يحوّل التطبيق ذلك إلى الرسالة الصحيحة ويوصّلها إلى الوحدة الصحيحة تلقائيًا.

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

ماذا يعني لك هذا: اختلاف إصدارات البرنامج داخل الحوض آمن، والعناصر التي تراها في التطبيق تقابل تمامًا ما يفعله كل صندوق.

أين تُخزَّن الإعدادات

تتذكّر كل لوحة مجموعة من القيم — هويتها، وكيف أُعِدّت، وكيف حالها. والموقع والهاتف يقرآنها ويكتبانها نيابةً عنك.

المجموعةما يمكنك فعلهمحتواها
الهويةقراءة فقطنوع اللوحة، إصدار البرنامج، إصدار المُقلِع، الرقم التسلسلي، نتيجة آخر تحديث
إعداد الوحدةقراءة وضبطالفوهة، نوع المحرك، الارتفاع الأقصى، العكس، الإزاحة، التسارع، الحد الأدنى/الأقصى للمضخة — ونوع RGB في الوحدات الملوّنة
إعداد الحوضقراءة وضبطسقف المضخة على مستوى الحوض، ومفتاح التعطيل (الإيقاف)، وقيد مكافحة السرقة — وكلها محفوظة في الوحدة الرئيسية
التشخيصقراءة فقطمدة التشغيل، رايات الأعطال، حالة المُحرِّك (VFD)

قراءة القيمة وضبطها يسلكان المسار نفسه، فما تحفظه يُقرأ تمامًا كما هو — دون انحراف بين ما ضبطته وما تشغّله اللوحة.

الذاكرة على اللوحة

تحفظ كل لوحة إعداداتها في ذاكرة دائمة على اللوحة تبقى حتى بعد انقطاع الطاقة.

  • قيم افتراضية آمنة — إن كانت أي قيمة مخزَّنة فارغة أو خارج المدى، ترجع اللوحة بهدوء إلى قيمة افتراضية آمنة. فلا تُولَد لوحة جديدة أو مُمسوحة للتوّ بإعداد خاطئ.
  • آمنة أثناء التحديث — يُخصَّص جزء صغير من الذاكرة لعملية التحديث، فلا يستطيع تحديثٌ للبرنامج انقطع في منتصفه أن يُفسد إعدادات اللوحة المعتادة.
لماذا يهمّ: تبقى الإعدادات التي تضبطها عند التركيب في مكانها رغم انقطاعات الكهرباء، وتحمي النافورة نفسها من القيم نصف المكتوبة أو الفارغة تلقائيًا.

التحديثات عن بُعد

تُسلَّم تحديثات البرنامج عن بُعد من الموقع — دون زيارة ميدانية للمجمّعات والوحدات الطرفية. وتفحص كل لوحة التحديث قبل أن تعتمده.

  • مُتحقَّق منه قبل التثبيت — كل تحديث يُشفَّر ويُفحَص سلامته أثناء وصوله، فلا تثبّت اللوحة إلا صورة أصلية سليمة.
  • آمن إن انقطع — إن انقطعت الطاقة أو توقّف التحديث في منتصفه، ترجع اللوحة إلى برنامجها العامل بدل أن تتعطّل نهائيًا. وحدها لحظة أخيرة قصيرة يجب أن تكتمل، والعملية مبنيّة على تجاوز كل ما قبلها بأمان.
  • الوحدة الرئيسية تُبرمَج في الموقع — لا تُحدَّث الوحدة الرئيسية المركزية عن بُعد؛ بل يبرمجها المُركِّب يدويًا بـ PICkit. وأثناء ذلك تصمت النافورة — وهذه هي الحالة المتوقَّعة الآمنة.

التزويد والهوية

  • يُحرَق رقم تسلسلي عشوائي من 10 خانات ومفتاح جهاز 256-بت في User ID بالـ PIC (64 بايت) عند البرمجة، ويُسجَّل في الخادم.
  • مكافحة الاستنساخ عبر الموقع فقط — كشف الأرقام المكرّرة في السحابة يُنبِّه المقر بدليل جنائي ولا يعطّل تلقائيًا؛ ولا يوجد عمدًا تحقّق من مفتاح الجهاز وقت التشغيل.
  • حارس الرقم الحقيقي: الرقم الصفري 00000000 «شبح» — لا يُطالَب به ولا يُملَك ولا يُدرَج.

التحكّم بالمضخة والمحرّك

  • سقف المضخة (1–8) — الحدّ على مستوى الحوض لمدى قوة تشغيل أي مضخة. يُضبَط مرة واحدة من الموقع للحوض كله، ويُطبّق على كل مضخة، ويُعاد تأكيده عند بدء كل عرض. ويفشل مفتوحًا — إن تعذّرت قراءة القيمة تُعامَل كأنها بلا سقف، فلا يخنق إعداد سيّئ النافورة أبدًا.
  • عكس المحرّك — مفتاح لكل مضخة يقلب اتجاه دوران المُحرّك؛ يصلح مضخة معكوسة الطور دون إعادة توصيل. يُضبَط عند التركيب من الموقع.
  • حدود لكل وحدة — الفوهة، الارتفاع الأقصى، التسارع، حدود المضخة % — كلها تُضبَط لكل وحدة عند التركيب.
مؤشرات الأعطال (حمراء): يومض Driver رمزًا — ≈1 هرتز = عدم تطابق الرقم/العنوان، سريع = أغنية طويلة جدًا، متوسط = المُحرّك/المضخة غير قابلة للوصول. لا يبقى LED الأحمر ثابتًا على Driver/RGB؛ والأحمر الثابت هو إيقاف الرئيسية الطارئ لا وحدة طرفية. الجدول الكامل لكل لوحة ← استكشاف الأخطاء ← مرجع مؤشرات الأعطال.

عمليات الميدان للبرنامج الثابت ومؤشرات اللوحة

تُحدّث الوحدات عن بُعد من الموقع — لكل buffer ووحدة طرفية زرّها الخاص — بينما يشير الإصدار 0 إلى لوحة قابعة في مُحمّل بدء التشغيل بلا برنامج عامل بعد.

تحديث / إعادة كتابة

لكل وحدة زرّها الخاص، يستهدف تلك الوحدة بالضبط حسب موقعها في السلسلة. يعرض الزر تحديث إلى vN عندما تكون الوحدة متأخرة، أو إعادة كتابة vN لإعادة تثبيت قسرية. يؤكّد أولاً ويعرض % حياً + الوقت المتبقي؛ ولا يعمل إلا تحديث واحد في المرة.

تحديث مُحمّل بدء التشغيل

زر منفصل للمدير فقط (مفروض في الخادم أيضًا). التحديث المعتاد للتطبيق إجراؤه كهرماني؛ والإجراء الأحمر يعيد تثبيت مُحمّل بدء التشغيل نفسه. لا تُحدّث Main أبدًا عن بُعد — بل تُحدّث يدوياً بـ PICkit في الموقع.

  • الإصدار 0 = لا برنامج عامل — يُخفى كل عنصر ضبط/ذاكرة/اختبار ولا يمكن إلا تحديث الوحدة. تعرض شريحة كهرمانية تحديث التطبيق بنقرة واحدة، ويُوسَم buffer في هذه الحالة بـ BOOTLOADER.
  • الترتيب: الوحدات الطرفية أولاً — يمرّر buffer التحديث إلى الوحدات الطرفية تحته بغضّ النظر عن إصداره، فتبقى الوحدات الطرفية تعمل أثناء تحديث buffer.
  • نتيجة التحديث — إن فشل تحديث، تعود الوحدة تلقائياً إلى برنامجها السابق — رجوع آمن غير مُتلف يعرضه الموقع بشارة "فشل التحديث".

البرمجيات

طبقات البرمجيات

الموقع — arcusl

لوحة المُبرمج/المشغّل: إعداد الوحدات عبر Web-Serial، المُلحّن الذكي، الخزانة، صفحات الإدارة/الأسطول.

الخادم — RestAPI

الحسابات والملكية وخزانة العروض والفوترة وخط المُلحّن الذكي.

تطبيق الهاتف — arcus_app

أداة المشغّل بعد التركيب: تشغيل العروض، التلحين، المراقبة، مفتاح الإيقاف، BLE.

خدمة Pi — pi-gateway

تحكّم موقعي: رابط اللوحة، نقطة الاتصال، التحديث الذاتي، المُرحِّل، فرض مفتاح الإيقاف.

فصل الأدوار: المُبرمج يجهّز الحوض على الويب عند التركيب؛ وتطبيق الهاتف أداة المشغّل لما بعد ذلك — يشغّل ويلحّن، ولا يُجهّز.

المُلحّن الذكي

مؤلّف واعٍ بالفيزياء يحوّل الأغنية إلى عرض نافورة — إشارات لكل نفّاثة وإضاءة، متزامنة مع الإيقاع.

  • خطّط ثم لحّن — محادثة فردية تخطّط العرض أولًا؛ ثم تُبنى الخطة المتّفق عليها إلى إشارات.
  • حركات — لوحة ثابتة (نمو، سقوط، موجة، مطاردة، ارتداد، تموّج، تناوب، انقسام). التنوّع من الموسيقى لا من كتالوج.
  • قواعد التجهيز — إعدادات المُبرمج: المرايا، اقترانات المحرّك↔الإضاءة، الاستثناءات المتبادلة، استثناءات المجموعات والمراكز. المُلحّن يطيع؛ والمشغّل يحترم.
  • إعدادات التلحين الافتراضية — أسلوب الحوض الثابت للّون/الكثافة/الوميض/الارتفاع. الويب يضبطها؛ والهاتف يرثها ويحترمها؛ وتعديل العرض يُركَّب فوقها لكل حقل.

الرصيد والفوترة

سعر العرض هو طول الأغنية — لا شيء آخر.

  • السعر: {{PRICE}} لكل ثانية من الموسيقى. أغنية مدتها 218 ثانية تكلّف 218 × {{PRICE}} — قبل التوليد وأثناءه وبعده. إنها عملية ضرب لا تقدير، فلا تتغيّر أبدًا.
  • ثابت قبل Compose: النموذج والجهد وعدد المجموعات واستهلاك الرموز لا تُغيّر السعر. ترى المبلغ النهائي الدقيق ويُقفل زر Compose بناءً عليه.
  • توليد فاشل = $0: إن لم يُسلَّم عرض، يُعاد المبلغ كاملًا حتى لو عمل النموذج واستهلك رموزًا — أنت تشتري عرضًا لا محاولة.
  • حارس الرصيد (402): كل من رصيده أقل من السعر يُمنع برسالة "لا يوجد رصيد كافٍ للتوليد. اشحن للمتابعة." فقط الدور 100 (المشرف) يُولّد مجانًا.
  • الحد الأدنى للمدة: يحتاج التوليد إلى طول قابل للفوترة (≥ 60 ثانية) وإلا رُفض.
  • التخطيط يكلّف قليلًا: كل دور في محادثة التخطيط يُحاسَب بثلاثة أضعاف تكلفة Anthropic الفعلية فورًا؛ أما تحليل الأغنية الذي يؤسّس الخطة فمجاني. الرصيد شبه الصفري يمنع المحادثة أيضًا.
  • الشحن يدوي اليوم — يُضاف الرصيد إلى الحساب، ولا يوجد شحن تلقائي.
فقط الدور 100 يرى ما كلّفنا التوليد (فاتورة Anthropic والهامش)؛ العميل يرى دائمًا ما دفعه فقط.

قواعد النظام: المرايا، المراكز، الاقترانات، mutex، الاستثناءات

محرّر AutoShow هو برمجة الفيزياء الأساسية بذاتها — يخبر المُلحّن كيف تم توصيل حوضك.

  • أزواج المرايا: مجموعتان تعملان كجناحين متماثلين. المرايا هندسية — رتّب أجهزة كل مجموعة من الخارج إلى الداخل كي يعكس المؤشر 0 لأحد الجناحين المؤشر 0 للآخر فيزيائيًا. (فعّل swap فقط إن لم يُعكس ترتيب أحد الجانبين.)
  • المراكز: معرّفات الأجهزة التي تختارها لتكون الوسط بين زوج المرايا. اختيار صريح فقط — إن تركتها فارغة يبقى الوسط مظلمًا؛ لا شيء يُختار تلقائيًا.
  • الاقترانات: رابط موجّه من المحرّك→LED، "الضوء يتبع الماء" — مجموعة LED تلك تضيء مجموعة المحرّك تلك.
  • الاستبعاد المتبادل (Mutex): أزواج لا تعمل معًا أبدًا (مجموعات أو وحدات مفردة)؛ لن يشغّلها المُلحّن في اللحظة نفسها.
  • الاستثناءات: مجموعات كاملة يجب ألّا يمسّها المُلحّن؛ وتخطّي وحدة يُسقط وحدة طرفية معطوبة (عبر SlaveID) من كل مجموعة من جهة الخادم.
  • كيف يلتزم المُلحّن: هذه القوائم هي الحقيقة الدائمة المطبَّقة عند التوليد. يمكن لتجاوز خاص بعرض واحد أن يُطفئ فئة كاملة (المرايا أو اقتران الضوء أو mutex) لكنه لا يخترع أخرى.
الضبط الخاطئ يفشل بصمت — الأجنحة المرتّبة خطأً تعكس النافورات الخطأ، وغياب المركز يترك فجوة مظلمة في الوسط، وmutex أو استثناء مفرط يترك مجموعات مظلمة. تحقّق على الماء.

مُلحّن الذكاء الاصطناعي: إلى أي عمق تصل المحادثة

محادثة التخطيط سطح تحكّم حقيقي، لا مجرّد حديث.

  • تُغيّر البناء: "اجعلها 3 دقائق"، "بلا ripple"، "أنعم" تُطبَّق مباشرةً في الإعدادات — المدة وكل قاعدة (الوميض، الكثافة، الارتفاعات، المنحدرات، الأبيض، الصمت، الانتقالات، القوس، اللوحة، المرايا، الاقتران، الإقصاء المتبادل، اللون، الرسوم الممنوعة) تصبح فعّالة حقًا. يؤكّد المخطّط ما طبّقه فعلًا فقط.
  • أرفق مقطعًا: ثبّت أغنية فيحمل المخطّط شبكة كتلها الكاملة ويخطّط لتلك الموسيقى (مقطع واحد في كل مرة — الجديد يحلّ محل القديم).
  • أرفق عرضًا: ثبّت عرضًا قائمًا لـتحسينه؛ ثم يُعيد Compose التوليد من المدخلات المحفوظة (الموجز / الكتل / المقطع) دون إعادة إرسال الرسوم الثقيلة.
  • النموذج: يعمل المُلحّن دائمًا على نموذج علوي ثابت واحد. ولأن السعر ثابت للثانية، يُولّد العملاء دائمًا بهذا الافتراضي؛ واختيار نموذج آخر أداة للمُصنّع فقط.
  • الجهد: low / medium / high / xhigh هو قرص الجودة — يتحكّم بمدى عمق تفكير النموذج. أما محادثة التخطيط فتعمل على نموذج أخف.
  • اللغة: يردّ المخطّط بلغة موقعك (التركية أو الإنجليزية).

إعدادات التوليد: المفردات الكاملة

كل تجاوز سيلتزم به المُلحّن. اضبطها كنمط بيت الحوض (افتراضات دائمة) أو لكل عرض في المحادثة — التغيير الخاص بعرض يفوز حقلًا حقلًا.

الإعدادماذا يفعل — الخيارات (الافتراضي)
useMirrorsالالتزام بأزواج المرايا (مُفعّل)
coupleLightأضواء LED تتبع محرّكاتها (مُفعّل)
useMutexالالتزام بقواعد لا-تعمل-معًا (مُفعّل)
strictColourألوان مُشبعة فقط (مُفعّل)
minRampSأبطأ منحدر للمحرّك، 0.2–2 ثانية (0.2)
heightFloorأدنى مستوى قد يستقر عليه العرض، 0–60 (0)
heightCeilingأعلى مستوى قد يبلغه، 40–100 (100)
flashAmountnone / rare / normal / heavy (normal)
cueDensitycalm / normal / busy (normal)
whiteUsagepunctuation / free / never (punctuation)
silenceModedark / bridge / feature — ماذا يحدث في المقاطع الصامتة (dark)
transitionsflow (تسليم دون ماء ميت) / cut (تغييرات مشهد حادة) (flow)
showArcauto / build / waves / calmend (auto)
paletteauto / warm / cool / contrast (auto)
bannedAnimsامنع أيًّا من: grow, fall, wave, chase, bounce, ripple, alternating, split (لا شيء؛ لا يمكن منع الكل)

المتجر والطلب

المتجر قائم على عرض السعر أولاً: يصمّم العميل نافورة، وتملأ السلة القطع مسبقاً، ويُعيد المُصنّع سعراً — دون تحريك أموال عبر الإنترنت.

التصميم في المحاكاة (المُهيّئ) → السلة معبّأة مسبقاً → طلب عرض سعر → يسعّر المقر ويردّ → القبول
  • المحاكاة هي المُهيّئ — مصمّم الأجهزة على نمط TIA. تملأ السلة كميات الوحدات مسبقاً من ذلك التصميم وتبقى قابلة للتعديل.
  • الكتالوج — Main وBuffer/Splitter وDriver وRGB وValve وTerminator. يحتفظ المُصنّع بالأسعار في صفحة Database.
  • الخادم يسعّر، لا متصفّحك — عند طلب عرض سعر لا يُرسَل للأعلى سوى الكميات وتصميمك؛ ويسعّر الخادم كل سطر من الكتالوج ومن خصمك الثابت، فلا يستطيع متصفّح مُتلاعَب اختلاق سعره. والكميات محدودة بـ 1000 لكل سطر.
  • عرض السعر طلب — تسير حالته new → quoted → accepted → closed. والسجل مُصمَّم عمداً على شكل طلب استعداداً لوصول بوّابة دفع.
وضع عرض-السعر-فقط مُفعَّل: لا يرى العملاء أي أسعار في أي مكان — فقط بنودهم والحالة. والتسعير العلني مفتاح واحد عند عودته.

الملكية والأمان

الأدوار والملكية

الدورمنيستطيع
المالكالزبونتحكّم كامل — تشغيل، تلحين، إعداد، نقل، مفتاح الإيقاف؛ ويرى المُبرمج
المُبرمجالصانع/المُركِّبصلاحية كاملة حتى البيع؛ وبعد وجود مالك حقيقي → دعم فقط (يفقد التشغيل/التحرير/البوابة/إعادة الضبط) لكنه يحتفظ بمفتاح الإيقاف + القيد
Masterالمقر (دور 100)مدير الأسطول — كل شيء، شامل الإلغاء

النقل/إعادة البيع: البيع يعيد تعيين المالك ويمسح مشاركات البائع؛ ويرث المشتري خزانة العروض.

مفتاح الإيقاف ومكافحة السرقة

أطفئ نافورة (وشغّلها) عن بُعد — تحكّم أمان للمالك ورافعة عدم-دفع للصانع — بطبقات، فتصمد حتى لو نُزِعت البوابة.

السحابة + الهاتف

عطّل أو فعّل من الموقع أو الهاتف (المالك، المُبرمج، Master). حالة التعطيل دائمة — تصمد أمام إعادة الضبط؛ ومفتاح تشغيل/إيقاف بسيط في الهاتف.

فرض البوابة

تُبقي البوابة حالة التعطيل (تصمد أمام إعادة التشغيل)، وتوقف أي عرض جارٍ، وترفض كل تشغيل — يدوي وقائمة ومجدول على السواء.

قفل على مستوى اللوحة

تتذكّر اللوحة الرئيسية مفتاح التعطيل (الإيقاف) في ذاكرتها على اللوحة: حتى مستقلّة مع نزع البوابة ترفض كل قائمة ومنفرد وحلقة دائمة.

قيد نبض المالك

اختياري. تتوقّع النافورة الاطمئنان إلى السحابة بين حين وآخر؛ ووحدة تُترك غير متّصلة تمامًا بعد المهلة تقفل نفسها. معطّل افتراضيًا.

رمز BLE والوصول

قف بجانب الحوض دون شبكة وتحكّم بالرئيسية عبر Bluetooth — خلف رمز PIN.

  • بوابة الرمز — رمز من 6 خانات يفتح جلسة BLE. غيّره من التطبيق؛ ويُودَع الرمز الجديد في السحابة قدر الإمكان للاسترداد.
  • قفل ضدّ التخمين — عدّاد محفوظ في FRAM (يصمد أمام إعادة التشغيل وإعادة الاتصال): بعد 10 محاولات خاطئة تتوقف اللوحة عن الفحص حتى يمسحه إعادة سلكية.
  • إعادة الرمز سلكية فقط — الوصول الفيزيائي للخزانة هو إثبات الملكية، فلا يعطّل رمز ضائع الـ BLE أبدًا.

الحسابات وتسجيل الدخول

يعمل الجميع عبر حساب مُسجَّل الدخول، فيعرف النظام دائمًا من يُجري التغيير.

  • تسجّل الدخول على الموقع أو الهاتف بحساب Arcus؛ وتؤكّد السحابة هويتك قبل الوثوق بأي طلب.
  • دورك — مالك أو مُبرمج أو مشغّل أو Master — يحدّد ما يُسمح لك بفعله.
الإجراءات الحسّاسة تتطلّب دائمًا هوية مُتحقَّقة ومُخوَّلة — إعادة الضبط، والنسخ الاحتياطي والاستعادة، وكشف رمز إقران Bluetooth للنافورة، ونقل الملكية، ومفتاح الإيقاف لا يمكن أبدًا القيام بها دون هوية.

دورة حياة المطالبة والملكية

تمر كل نافورة بسلسلة ملكية ثابتة: يطالب بها المبرمج، وقد يشاركها، ثم يسلّمها للمشتري عند البيع — وبعدها لا يحتفظ المُركِّب إلا بصلاحيات الدعم.

المطالبة (المبرمج) → المشاركة (المالك، 4 كحد أقصى) → النقل إلى المشتري → تخفيض المُركِّب إلى الدعم
  • المطالبة — لا يطالب بالنافورة إلا مبرمج؛ المشغّلون لا يمكنهم ذلك أبداً. تُرفض النافورة التي ما زالت لوحة Main فيها تحمل الرقم التسلسلي النائب المكوّن من أصفار (أعطِ Main رقمها الحقيقي أولاً)، والنافورة التي طالب بها مبرمج آخر تعود بحالة مُطالَب بها بالفعل. ويصبح المُطالِب المبرمج وأول مالك معاً.
  • المشاركة — للمالك فقط. تحدّد الحساب بالبريد الإلكتروني أو المعرّف ويجب أن يكون حساباً مسجّلاً حقيقياً؛ حتى 4. يمكن للمستخدم المُشارَك التشغيل لكن لا يعدّل ولا ينقل ولا يعيد المشاركة، ولا يزيل سوى نفسه.
  • النقل / إعادة البيع — يقوم به المالك أو المبرمج أو المدير. إنه تسليم كامل: تُمسح مشاركات البائع، ويرث المشتري خزانة العروض، ويحصل أول مالك غير مبرمج على طبقة الرصيد المجاني للمالك مرة واحدة.
  • الدعم بعد البيع — يُحتفظ برابط المبرمج عمداً، لكن بمجرد وجود مالك حقيقي يُخفَّض المبرمج إلى الدعم فقط: لا تشغيل ولا تعديل ولا بوابة ولا إعادة ضبط مصنع.
الصلاحية الوحيدة التي يحتفظ بها المبرمج المُخفَّض هي مفتاح التعطيل (الإيقاف) — ذراع عدم الدفع لدى المُصنّع، والتحكم الوحيد للمُصنّع الذي يبقى بعد البيع.

عمليات الأمان

أربع طبقات مستقلة تحمي النافورة من السرقة والاستنساخ وعدم الدفع — ومعظمها يفشل مغلقاً اليوم حتى قبل فرض تسجيل الدخول.

قيد مكافحة السرقة

يُضبَط من المبرمج أو المدير فقط، لا من المالك أبداً (إذ يمكنه إبطاله على وحدة مموّلة). يجدّد Pi تاريخ انتهاء Main عند كل اتصال بالسحابة؛ والوحدة التي تمرّ عدد الأيام المضبوط دون اتصال توقف نفسها. وضبط النافذة على صفر يُبطِل القيد.

مفتاح الإيقاف

يستطيع المالك أو المبرمج (يُحتفظ به بعد البيع) أو المدير تعطيل نافورة أو تفعيلها. يثبّت راية دائمة تبقى بعد إعادة ضبط المصنع وإعادة التشغيل؛ ويحفظها Pi أيضاً ويرفض كل تشغيل حتى إعادة التمكين.

  • استرجاع PIN عبر BLE — رمز PIN المكوّن من 6 أرقام عشوائي في المصنع، وتقفل اللوحة بعد 10 محاولات. يمكن للمالك (أو المدير) إيداعه وكشفه، مُشفَّراً في التخزين؛ ويُسترجَع الرمز المفقود خلاف ذلك عبر إعادة ضبط سلكية. وإن لم يُضبط مفتاح إيداع تكون الميزة غير متاحة.
  • مكافحة الاستنساخ / حارس الرقم الحقيقيفي الموقع فقط، دون أي فحص على النافورة نفسها أو على Pi. الرقم النائب المكوّن من أصفار لا يمكنه المطالبة ولا التملّك ولا الظهور في أي قائمة. أما الرقم المكرّر (الرقم نفسه بمفتاح مختلف) الذي يُرى في المصنع فيُبلَّغ به المقر بأدلة جنائية (IP، اسم الشبكة، الحاسوب، الموظف) ويُرفض — لكن لا يُعطَّل تلقائياً أبداً؛ فالنسخة المستنسخة مجرّد قالب حتى يمنحها إنسان مطالبة مبرمج.
فرض تسجيل الدخول مُهيَّأ لكنه مُطفأ على مراحل؛ يُفعَّل خطوة بخطوة (هيّئ نظام الدخول → العملاء يرسلون الرموز → الخادم يتحقق → الفرض). والإجراءات الخطِرة — الإيداع، النقل، التعطيل، إعادة ضبط المصنع — تفشل مغلقة أصلاً في كل الأحوال.

التشغيل

التركيب والتشغيل

  1. ثبّت وأوصِل الخزانة: الرئيسية والمجمّعات والوحدات على سلسلة RS485 واحدة؛ الطاقة؛ الـ Pi على J2.
  2. ابحث من الرئيسية لتسجيل كل وحدة — يُسنِد المعرّفات الموضعية.
  3. اضبط كل وحدة على الويب (Web-Serial): النوع، الفوهة، الارتفاع، التسارع، الحدود، العكس. مهمّة مُبرمج.
  4. اضبط قواعد الحوض + أسلوب التلحين.
  5. هيّئ الإنترنت (واي فاي الموقع أو نقطة الـ Pi) واضبط المالك.
  6. سلّم — يشغّلها الزبون من الهاتف.

البرمجة والتحديثات

  • على الطاولة: تكتب أداة ArcusFlash البرنامج والرقم التسلسلي والمفتاح على لوحة جديدة وتسجّلها. الوصول طلب → موافقة؛ ويُسحَب البرنامج من السحابة.
  • في الميدان: تسير التحديثات عن بُعد، يقودها الـ Pi من الإصدارات المنشورة. الرئيسية تحتاج PICkit موقعياً فقط لأعمق شيفرة إقلاع فيها.
  • النشر: يبني المُصنّع البرنامج الجديد ويفحصه وينشره إلى السحابة. المُركّبون والمشغّلون يبرمجون النسخة المنشورة فقط.

العروض والجدولة

  • الأغاني تعيش في خزانة السحابة (صوت + إشارات) وتُثبّت في الذاكرة الداخلية لكل وحدة.
  • قوائم التشغيل تجمّع الأغاني؛ وحتى 10 مجدولات و100 مُطلِق تُشعِل العروض حسب الساعة أو الشروق/الغروب، وتدور القائمة الدائمة عند عدم جدولة غيرها.
  • كيف يبدأ العرض — تثبت الوحدات ساكنة أولاً، ثم تتلقّى إشارة تحضير، ثم مقدّمة قصيرة مدتها ثانيتان، ثم يُشغّل العرض مع تحرّك كل النفّاثات على إيقاع الموسيقى.

الجدولة: المجدولات، المشغّلات، القائمة الأبدية

متى تعمل العروض — يُبنى من المجدولات والمشغّلات وتجاوز أبدي واحد، وكلها مخزّنة على اللوحة.

  • 10 مجدولات — مجموعات تشغيل/إيقاف مسمّاة. لا يُطلَق المشغّل إلا إذا كان مجدوله الأب مفعّلًا — مفتاح واحد يسلّح مجموعة كاملة أو يُسكتها.
  • 100 مشغّل — المجمع المسطّح الذي يبدأ العروض فعليًا. حقول كل مشغّل في الأسفل.
  • القائمة الأبدية — مفتاح واحد وقائمة تشغيل واحدة تدور للأبد وتتجاوز كل الجدولة؛ للوحدات ذات الشاشة فقط بلا بوابة أو GPS.
  • العرض الجاري لا يُقطع أبدًا — المشغّل المستحق أثناء عرض يُسقَط ولا يُصفّ.
  • يُحفَظ كل ذلك على اللوحة نفسها، فتقود البوابة الجدول أثناء اتصالها وتُشغّله اللوحة وحدها عند غيابها.
حقل المشغّلالمعنى
الأيامأيٌّ من أيام الأسبوع السبعة
البدايةوقت بالساعة، أو الشروق / الظهيرة / الغروب ± إزاحة بالدقائق (مراسي الشمس تحتاج تثبيت GPS)
التكراريُطلَق كل N دقيقة داخل النافذة؛ 0 = مرة واحدة
حتىوقت نهاية النافذة؛ لا شيء = طلقة واحدة
قائمة التشغيلأي قائمة تشغيل يبدأها هذا المشغّل
الأولوية0–255؛ الأعلى يفوز عند وقوع اثنين في الدقيقة نفسها

النسخ الاحتياطي والاستعادة

ملف JSON مشفّر واحد يلتقط الحوض كاملًا، واستعادة تعيد بناءه.

  • ملف واحد: مشفّر بـ AES-256-GCM بمفتاح النسخ الاحتياطي لحسابك — رمز XXXX-XXXX-XXXX-XXXX يُولَّد مرة ثم يثبت. مقاوم للعبث وغير قابل للقراءة بلا المفتاح.
  • المفتاح محفوظ في حسابك ويُطبَّق تلقائيًا بعد الدخول. اكتب نسختك: إن فُقدت نسخة السحابة فهذا سبيلك الوحيد للعودة — تُدخله يدويًا.
  • ماذا يلتقط: المبرمج، الأغاني/المخطّطات، إعداد عتاد كل وحدة (الإزاحات، الحدود، التسارع/التباطؤ، السائق/الطراز/الفوهة/نوع المحرّك، أقصى ارتفاع، العكس، نوع RGB، المواضع/الأشكال)، المجموعات، قوائم التشغيل، الجدول، مكتبة العروض كاملة، قواعد نظام الذكاء الاصطناعي، وصورة الحوض.
  • الاستعادة تمرّ ببوابة أولًا: يجب أن تطابق طوبولوجيا النسخة هذا الحوض تمامًا — العدد نفسه من المخازن، الوحدات نفسها لكل مخزن، كل خانة بنوع الجهاز نفسه — وإلا توقّفت دون أي تغيير. هذا يتيح لحوضين موصولين بالطريقة نفسها تبادل نسخة احتياطية.
  • ثم تعيد البناء: مسح → مجموعات → إعداد الوحدات → أغانٍ → قوائم تشغيل → جدول → سحابة. تندمج الأغاني مع أغاني الحوض؛ وعند تعارض الاسم يفوز النسخ الاحتياطي.
الاستعادة مدمّرة بعد اجتياز بوابة الطوبولوجيا. قد تترك الاستعادة الفاشلة الحوض مبنيًا جزئيًا — أعِد تشغيلها ببساطة؛ الملف لا يتغيّر أبدًا.

مرجع

مسرد

المصطلحالمعنى
وحدة طرفيةنفّاثة واحدة — Driver (محرك) و/أو RGB (إضاءة)
مجمّعمقسّم يحمل حتى 30 وحدة تحت الرئيسية
سقف المضخةحدّ المضخة على مستوى الحوض، 1–8؛ القيمة الخاطئة تعود إلى الفتح الكامل
الذاكرة على اللوحةذاكرة الإعدادات الدائمة لكل لوحة، تُحفظ رغم انقطاع الطاقة
OTAتحديث البرنامج لاسلكيًا، يُرسَل من الموقع
AiSettingsقواعد تجهيز المُبرمج + أسلوب التلحين
مفتاح الإيقافتعطيل/تفعيل عن بُعد، سحابة → بوابة → لوحة
القيدقفل ذاتي اختياري عند فقد الاتصال السحابي
رقم شبحلوحة 00000000 غير مبرمجة — لا تُملَك