لماذا يعيد Home Assistant بناء حالة مختلفة بعد إعادة تشغيل الحاوية؟

إيفا وونغ هي كاتبة تقنية و ومهندسة هاوية في ZimaSpace. مهووسة بالتكنولوجيا مدى الحياة ولديها شغف بالمختبرات المنزلية والبرمجيات مفتوحة المصدر، تتخصص في تبسيط المفاهيم التقنية المعقدة إلى أدلة عملية وسهلة الفهم. تؤمن إيفا بأن الاستضافة الذاتية يجب أن تكون ممتعة وليست مخيفة. من خلال دروسها، تمكّن المجتمع من تبسيط إعدادات الأجهزة، بدءًا من بناء أول نظام تخزين شبكي NAS وحتى إتقان حاويات Docker.

قد تؤدي إعادة تشغيل حاوية Home Assistant إلى جعل النظام يبدو مختلفًا لفترة وجيزة، حتى عندما يكون الإعداد الدائم سليمًا تمامًا. والسبب هو أن النسخة قيد التشغيل تحتوي على كلٍّ من حالة دائمة على القرص وحالة مؤقتة في الذاكرة. تؤدي إعادة تشغيل الحاوية إلى إتلاف الحالة الأخيرة وتطلب من التكاملات إعادة بنائها.

ولهذا قد يمر الكيان بحالة غير معروف أو غير متاح، وقد يظهر جهاز MQTT مجددًا فور وصول الرسائل المحتفظ بها، بينما قد تظل خدمة خارجية مفقودة إلى أن تنجح محاولة إعادة الاتصال. إعادة التشغيل هي حدث لإعادة بناء الحالة، وليست مجرد إيقاف مؤقت واستئناف للعملية نفسها الموجودة في الذاكرة.

بيئة تشغيل الحاوية قابلة للاستبدال؛ أما ‎/config‎ فهو الحد الفاصل للتخزين الدائم

تُشغَّل حاوية Home Assistant عادةً عبر إعادة إنشاء صورة الحاوية مع الإبقاء على وحدة تركيب الإعدادات. ولا ينبغي أن تتطلب ترقية الصورة أو تغيير بيئة التشغيل أو إعادة تشغيل العملية إعادة بناء المنزل الذكي من الصفر، ما دام المسار الدائم موصولًا على نحو صحيح.

إن سير عمل حاوية Home Assistant الحالي يعيد إنشاء الحاوية صراحةً عند تغيير الإصدارات. وينجح هذا النموذج لأن حالة التطبيق يُفترض أن تبقى خارج بيئة التشغيل القابلة للتخلص منها.

يختفي عند إعادة التشغيل كل ما يوجد في ذاكرة العملية فقط. ويتعين على العملية الجديدة إعادة قراءة الإعدادات والسجلات وقواعد البيانات ومدخلات التكاملات قبل أن تتمكن من إعادة إنشاء العرض المباشر نفسه.

يبدأ Core آلة حالات تشغيل جديدة

عند كل بدء تشغيل، ينشئ Home Assistant عملية Core جديدة تحتوي على حلقة أحداث جديدة، وآلة حالات، وخدمات، ومؤقتات، وكائنات تشغيل جديدة للتكاملات. ويمكن لسجل الكيانات تحديد الكيانات المعروفة، لكن القيمة الحالية للجهاز الفعلي لا تزال بحاجة إلى الاستعادة أو الجلب أو الإبلاغ عنها.

ينشئ Recorder أيضًا عملية تسجيل جديدة في كل مرة يبدأ فيها Home Assistant. وتبقى صفوف قاعدة البيانات التاريخية محفوظة، لكن العملية الحالية تمثل فترة تشغيل جديدة، لا استمرارًا للفترة القديمة.

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

تعيد التكاملات ملء حالة التشغيل بسرعات مختلفة

تتصل بعض التكاملات بجهاز محلي فورًا، بينما تنتظر تكاملات أخرى نظام DNS أو وسيطًا أو واجهة API سحابية أو جسرًا لاسلكيًا أو حاوية أخرى. لذلك تصبح كياناتها متاحة في أوقات مختلفة، رغم أن Home Assistant Core نفسه قد بدأ العمل بالفعل.

يفرض نموذج Home Assistant الحالي لفشل الإعداد على التكاملات غير المتاحة مؤقتًا الدخول في مسار لإعادة المحاولة كي تتمكن من التعافي عندما يصبح الجهاز أو الخدمة قابلًا للوصول. وهذا يعني أن الحالة الظاهرة بعد إعادة التشغيل قد تتغير لدقائق، من دون أن يدل ذلك على تغيّر البيانات الدائمة.

قد تبدو إعادة تشغيل ثانية بعد أن تصبح كل التبعيات جاهزة أسرع بكثير من إعادة تشغيل المكدس بالكامل، لأن الشبكة والوسيط وقاعدة البيانات والأجهزة لم تعد مضطرة إلى التزامن في الوقت نفسه.

يجعل MQTT إعادة بناء الحالة أكثر وضوحًا

يُعد MQTT مثالًا مفيدًا، لأن الوسيط قد يحتفظ برسائل الاكتشاف أو الحالة بصورة مستقلة عن عملية Home Assistant. وعندما يعيد Home Assistant الاتصال، يمكن إعادة تشغيل البيانات المحتفظ بها، وقد تستعيد الكيانات آخر قيمة أبلغ عنها بسرعة.

يوثّق تكامل MQTT أن الكيانات المكتشفة تصبح غير متاحة بعد إعادة التشغيل إلى أن تتم معالجة الاكتشاف، بينما يمكن إعادة تشغيل رسائل الاكتشاف والحالة المحتفظ بها عند إعادة إنشاء الاشتراكات. كما يرسل Home Assistant رسالة ميلاد يمكن للأجهزة استخدامها لإعادة نشر الاكتشاف والحالة الحديثة.

ومع ذلك، تظل القيمة المحتفظ بها آخر تقرير معروف، ولا تُعد دليلًا على أن الجهاز الفعلي قابل للوصول حاليًا. وينبغي تقييم مواضيع التوافر والبيانات الآنية بصورة منفصلة.

يعتمد سلوك إعادة التشغيل على مكان وجود مصدر الحقيقة

  • الإعدادات والسجلات الدائمة: تُعاد قراءتها من تخزين Home Assistant الدائم.
  • حالة الجهاز الحالية: غالبًا ما يعيد التكامل جلبها أو الإبلاغ عنها.
  • حالة MQTT: قد تُعاد بناؤها من الرسائل المحتفظ بها أو من عمليات نشر جديدة.
  • الحالة المعتمدة على السحابة: تعتمد على الاتصال بواجهة API البعيدة وبيانات الاعتماد.
  • الحالة التاريخية: تبقى في Recorder، لكنها ليست الحالة المباشرة نفسها.
  • كائنات التشغيل الخالصة: تعيد عملية Home Assistant الجديدة إنشاءها.

يوضح شرح ZimaSpace لـ حالة MQTT بعد إعادة التشغيل مسارًا محددًا لإعادة البناء. أما القاعدة الأوسع فهي أن سلوك إعادة التشغيل يتبع موقع مصدر الحقيقة لكل مكوّن.

الأسئلة الشائعة

هل تؤدي إعادة تشغيل حاوية Home Assistant إلى حذف السجل؟

لا، ما دامت الإعدادات الدائمة وقاعدة بيانات Recorder موصولتين بصورة صحيحة. تستبدل إعادة التشغيل عملية التشغيل، بينما تبقى البيانات التاريخية في قاعدة البيانات الدائمة.

لماذا يمكن أن يعرض الكيان قيمته القديمة فور إعادة التشغيل؟

قد تأتي القيمة من آلية استعادة في Home Assistant، أو ذاكرة تخزين مؤقتة لدى التكامل، أو حالة MQTT محتفظ بها، أو استعلام فوري للجهاز. تحقّق من مسار التكامل والتوافر قبل اعتبار القيمة المعروضة قراءة فعلية حديثة.

مركز التكنولوجيا والذكاء الاصطناعي

المزيد للقراءة

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.