الإشعارات¶
رسالة على هاتفك عندما تحتاجك الطابعة. وإن أردت، رسالة أيضًا عند انتهاء كل طباعة.
| يصلك إشعار عندما… | |
|---|---|
| تبقى قطعة على السرير بعد الإزالة ومحاولات إعادتها | تتوقف قائمة الطباعة |
| تكون الطبعة أرفع من أن تمسكها الشفرة، فتُترك على السرير | تنتظرك قائمة الطباعة |
تنتهي طباعة دون إزالة (لا يوجد AUTO_EJECT في كود النهاية، أو أُلغيت الطباعة) |
القطع ما زالت على السرير |
| لا تبدأ الطباعة التالية لأن قطعًا قديمة ما زالت على السرير | الحارس AUTO_EJECT_GUARD (بالإنجليزية) |
يقترب صندوق القطع من الامتلاء، أو يمتلئ (bin_capacity، بالإنجليزية) |
عند الامتلاء، تنتظر الطبعة التالية حتى تفرغه |
| مع Spoolman: البكرة لا تكفي المهمة التالية، أو قد تنفد أثناء الطباعة | تتوقف القائمة قبل تلك المهمة (spool_low_action) |
| تتوقف طباعة بخطأ، أو تُلغى | |
| يحين وقت صيانة طابعة، والتقرير اليومي للمزرعة (مزرعة الطابعات) | في التطبيق، مع المزرعة |
| تحذير من العتاد: مروحة لها حساس سرعة توقفت، أو تحذير من مشغّل محرك، أو محرك ساخن، أو اتصال لوحة يعيد إرسال البيانات، أو ناقل CAN غير سليم، أو سخان لا يحافظ على حرارته، أو الكمبيوتر ساخن أو جهده منخفض أو ذاكرته أو تخزينه على وشك النفاد (العتاد) | في التطبيق، ويفتح تبويب العتاد. ويمكن لكل هاتف إيقافها: وتحذيرات العتاد أيضًا |
| تنتهي كل طباعة (اختياري) | مع AUTO_EJECT في كود النهاية، يصل هذا الإشعار بعد أن يصبح السرير فارغًا |
الضغط على الإشعار يفتح صفحة auto-eject. ومع مزرعة الطابعات، يستقبل التطبيق أيضًا إشعارات كل الطابعات الأخرى في المزرعة، وعلى كل إشعار اسم طابعته.
توجد ثلاث طرق لاستقبالها:
| في تطبيق auto-eject | عبر ntfy | على Telegram أو Discord | |
|---|---|---|---|
| تطبيق آخر على الهاتف | لا: الإشعارات تأتي من تطبيق auto-eject نفسه | تطبيق ntfy المجاني | Telegram أو Discord |
| والتطبيق مغلق | نعم | نعم | نعم |
| يحتاج | HTTPS (remote-access.md)، وsudo مرة واحدة |
لا شيء آخر | بوت Telegram خاص بك، أو webhook في Discord (دقائق قليلة) |
| من يستطيع قراءة الرسائل | أجهزتك فقط: الرسائل مشفّرة من طرف إلى طرف | أي شخص يعرف اسم الموضوع (topic) | أنت، أو أعضاء قناتك في Discord |
في تطبيق auto-eject (الموصى به)¶
خدمة صغيرة على الطابعة تراقبها، وترسل كل إشعار مشفّرًا إلى خدمة الإشعارات (push) لكل جهاز فعّلها: خدمة Google لـ Chrome وAndroid، وخدمة Apple لـ iPhone وiPad، وخدمة Mozilla لـ Firefox. تعمل والتطبيق مغلق، بل وحتى عندما يكون Tailscale مطفأً في الهاتف: فتح التطبيق فقط هو الذي يحتاج Tailscale.
- اضبط أولًا التحكم عن بعد مع HTTPS: الهواتف لا تسمح بالإشعارات إلا عبر HTTPS.
- على الطابعة، عبر SSH:
يثبّت خدمة
klipper-auto-eject(وتُثبَّت حزمةcryptographyالخاصة بـ Python في~/klipper-auto-eject-envإن لم تكن موجودة)، ويسمح لـ Moonraker بإعادة تشغيلها بعد التحديثات. يطلب كلمة المرور مرة واحدة. - على الهاتف، افتح تطبيق auto-eject عبر HTTPS، ثم تبويب الشفرة والإعداد، ثم الإشعارات، ثم تفعيل، واسمح بالإشعارات. سيصلك إشعار تجريبي.
- كرّر ذلك على كل هاتف أو جهاز لوحي أو حاسوب تريد أن تصله الإشعارات. كل جهاز يختار وحده هل يريد أيضًا إشعارًا عند انتهاء كل طباعة.
| الجهاز | هل يعمل |
|---|---|
| Android: Chrome وEdge وSamsung Internet وFirefox | نعم، سواء ثُبّت كتطبيق أو لا |
| iPhone وiPad | iOS 16.4 أو أحدث، وفقط في التطبيق المضاف إلى الشاشة الرئيسية |
| الحواسيب: Chrome وEdge وFirefox وSafari | نعم، طالما المتصفح يعمل |
كيف يعمل: يشترك الجهاز عبر متصفحه، ويُحفظ الاشتراك في قاعدة بيانات Moonraker (namespace
auto_eject_push)، لذلك لا تحتاج الخدمة منفذًا خاصًا بها. كل رسالة تُشفَّر لهذا الجهاز وحده
(RFC 8291)، وخدمات الإشعارات تنقلها دون أن تستطيع قراءتها.
مفتاح الخدمة نفسها يبقى في ~/.config/klipper-auto-eject/vapid.pem. وسجلّها:
journalctl -u klipper-auto-eject.
عبر ntfy¶
تمر الإشعارات عبر ntfy، وهو تطبيق إشعارات مجاني ومفتوح المصدر.
- على الطابعة، عبر SSH: يسألك إلى أين تذهب الإشعارات (اختر 1) تطبيق ntfy)، ثم قبل كل خطوة:
- هل تريد أيضًا إشعارًا عند انتهاء كل طباعة،
- وفي النهاية، هل يرسل إشعارًا تجريبيًا.
يضيف قسمين [notifier] إلى moonraker.conf (بعد أخذ نسخة احتياطية)، ويعيد تشغيل Moonraker
عندما لا تكون الطابعة مشغولة، ويضبط إعداد auto-eject المسمى notify على auto_eject. وفي
النهاية يعرض الموضوع (topic) الخاص بك، وهو اسم عشوائي مثل auto-eject-3f9a1c2b7d4e5f60.
2. على هاتفك، ثبّت تطبيق ntfy (من Google Play أو F-Droid أو App Store)، واضغط +، ثم
اشترك في هذا الموضوع على الخادم الافتراضي ntfy.sh.
3. يمكنك تشغيل المثبّت مرة أخرى في أي وقت: يحتفظ بالموضوع نفسه.
نجح الإعداد إذا وصل الإشعار التجريبي إلى الهاتف. أرسل إشعارًا تجريبيًا آخر في أي وقت بالأمر
AUTO_EJECT_NOTIFY_TEST في نافذة الأوامر (console)، أو بزر أرسل تجربة في الصفحة. يمر الإشعار
بالطريق كله، من Klipper عبر Moonraker إلى الهاتف، بكل طريقة مضبوطة من الطريقتين.
تعرض صفحة auto-eject الموضوع في تبويب الشفرة والإعداد، مع زر يفتحه في تطبيق ntfy.
احتفظ بالموضوع لنفسك¶
على الخادم العام ntfy.sh، أي شخص يعرف اسم موضوع يستطيع قراءة رسائله. لذلك يختار المثبّت اسمًا
عشوائيًا لا يمكن تخمينه، فلا تنشره في أي مكان. الرسائل فيها أسماء الملفات وأسماء القطع فقط، ولا شيء
غير ذلك.
لتُبقي كل شيء على شبكتك أنت، شغّل خادم ntfy خاصًا بك وغيّر أسطر
url: في moonraker.conf:
على Telegram أو Discord¶
على الطابعة، عبر SSH، شغّل ~/klipper-auto-eject/install.sh --notify واختر 2) Telegram أو
3) Discord. ثم:
Telegram
- في Telegram، افتح @BotFather وأرسل
/newbot، واختر اسمًا واسم مستخدم للبوت (يجب أن ينتهي بـbot). يرد BotFather بـ رمز (token) مثل123456789:AAH…. - الصق الرمز عندما يطلبه المثبّت. لا يظهر على الشاشة؛ يتحقق منه المثبّت مع Telegram ويخبرك باسم البوت.
- افتح البوت في Telegram وأرسل له أي رسالة: يجد المثبّت محادثتك وحده. ولمجموعة، أضف البوت إليها وأرسل الرسالة فيها.
Discord
- في سيرفر Discord: Server Settings ← Integrations ← Webhooks ← New Webhook، واختر القناة، ثم Copy Webhook URL.
- الصقه عندما يطلبه المثبّت (لا يظهر على الشاشة).
ثم، كما مع ntfy، يسأل هل تريد رسالة عند انتهاء كل طباعة، ويضيف أقسام [notifier] إلى
moonraker.conf، ويعيد تشغيل Moonraker عندما لا تطبع الطابعة، ويرسل رسالة تجريبية. وزر أرسل تجربة
في الصفحة يرسل غيرها في أي وقت.
رمز البوت ورابط الـ webhook يسمحان لمن يملكهما بالنشر باسم البوت أو في قناتك. هما في moonraker.conf
فقط: تعرض الصفحة كلمة Telegram أو Discord فقط، وزر الإبلاغ عن مشكلة لا يقرأ moonraker.conf.
البريد الإلكتروني وخدمات أخرى¶
يرسل Moonraker الإشعارات عبر Apprise، الذي يعرف حوالي
100 خدمة. ضع أي رابط Apprise في سطر url: في القسمين، ثم أعد تشغيل Moonraker.
باليد، بدون المثبت¶
# moonraker.conf
[notifier auto_eject]
url: ntfys://<your-topic>?priority=high&tags=warning
events: gcode
title: Auto-eject
body: {event_message}
[notifier auto_eject_jobs]
url: ntfys://<your-topic>?tags=printer
events: complete, error, cancelled
title: Print {event_name}
body: {event_args[1].filename}{(': ' ~ event_args[1].message) if event_args[1].message else ''}
أعد تشغيل Moonraker، ثم أخبر auto-eject أي notifier يستخدم، بهذا الأمر في نافذة الأوامر:
القسم [notifier auto_eject] يستقبل رسائل auto-eject (events: gcode)، والقسم
[notifier auto_eject_jobs] يستقبل أحداث Moonraker نفسه عن الطباعات الكاملة. احذف القسم الثاني إن
كنت تريد أن تعرف بالمشاكل فقط.
بدون الخدمة¶
بدون install.sh --push، يبقى زر تفعيل يعمل طالما تطبيق auto-eject مفتوح أو يعمل في الخلفية:
الصفحة نفسها تعرض الإشعارات. أما عندما يكون التطبيق مغلقًا، فلا يصل إليك إلا الخدمة أو ntfy.
Mobileraker¶
لتطبيق Mobileraker إشعاراته الخاصة عن الطباعات والأخطاء، عندما يكون البرنامج المرافق له مثبتًا على الطابعة (remote-access.md). ويعمل إلى جانب ntfy.
المشاكل وحلولها¶
| ما تراه | ما تفعله |
|---|---|
| لا يوجد زر تفعيل في التطبيق | الصفحة ليست على HTTPS (remote-access.md)، أو الإشعارات محظورة لها في إعدادات الموقع في المتصفح |
| يعرض التطبيق أن الإشعارات مفعّلة والتطبيق يعمل فقط | الخدمة غير مثبتة أو لا تعمل: شغّل install.sh --push، ثم systemctl status klipper-auto-eject |
| لا يصل أي شيء على iPhone | أضف التطبيق إلى الشاشة الرئيسية، وفعّل الإشعارات من هناك (iOS 16.4 أو أحدث) |
| الإشعار التجريبي لا يصل | في تطبيق ntfy، تأكد من الموضوع والخادم (ntfy.sh). وعلى الطابعة، يجب أن يصل الأمر curl -d test https://ntfy.sh/<topic> إلى الهاتف |
| التجربة تعمل، لكن لا يصل شيء من الطابعة | لم يُعَد تشغيل Moonraker بعد التغيير، أو notify غير مضبوط: AUTO_EJECT_SET KEY=notify VALUE=auto_eject |
Remote method 'notify' not registered |
notify يشير إلى notifier غير موجود في Moonraker. راجع أسماء الأقسام في moonraker.conf، أو أرجع notify إلى "" |
| إشعارات كثيرة جدًا | شغّل install.sh --notify مرة أخرى، وأجب بـ «لا» عند سؤاله عن إشعار لكل طباعة |