
مما لا شك فيه أن Apple iOS لا يزال أحد أكثر أنظمة التشغيل المحمولة شعبية ، مما يعني أن أنظمة التشغيل الآلي الحديثة يجب أن تكون قادرة على الاندماج في هذا النظام البيئي وتوفير إمكانية التشغيل البيني. هذا هو بالضبط ما تم تصميم إطار Homekit له ، والذي يسمح لك بالعمل مع الأجهزة الذكية من شاشة iPhone / iPad / iWatch ، ومؤخرا Mac (macOS Mojave).
تضمنت معظم أنظمة التشغيل الآلي (لا أحب اسم التسويق "المنزل الذكي") وحدات طويلة للتكامل مع Homekit ، ولكن حتى المستخدم المدرب لا يمكنه دائمًا اكتشاف كيفية جعل أجهزته متوفرة في تطبيق الصفحة الرئيسية (أو حواء).
سأخبرك اليوم عن كيفية القيام بهذه التلاعبات في نظام ioBroker (هذا نظام أتمتة مفتوح ومجاني). ولكن حتى لا أعطي كل الأمثلة العديدة للأجهزة بغباء ، أريد أن أشرح بعض المبادئ وأظهر الأساليب ، ومعرفة أي منها ، يمكنك بسهولة تنفيذ أمثلة أخرى.
"معرفة بعض المبادئ يعوض بسهولة عن جهل بعض الحقائق."
كلود أدريان هلفتيوس
ioBroker. برامج التشغيل والأجهزة والحالات
بادئ ذي بدء ، أود أن أوضح ما هو الجهاز في نظام ioBroker ، وكيف يتم تقديمه.
دعني أذكرك بأن نظام ioBroker نظامي ، وأن وحدات الامتداد تسمى برامج التشغيل (أو المحولات). برنامج التشغيل عبارة عن وحدة تكامل مع بعض الأجهزة أو مجموعة من الأجهزة ، موحد بواسطة وظيفة أو بروتوكول أو مُصنّع شائع ، وبالتالي يمكنه "سحب" جهاز واحد أو عدة أجهزة في نظام ioBroker. ميزة أخرى هي القدرة على إنشاء مثيلات متعددة لنفس برنامج التشغيل ، تختلف في أي إعدادات.
لكن كل جهاز فريد من نوعه وغير قابل للفك ، له خصائص وقدرات مختلفة. بناءً على هذا ، لا يركز ioBroker بشكل أساسي على الجهاز نفسه ، ولكن على خصائصه ، التي تمثلها الولايات. الحالة هي كائن ioBroker داخلي يقبل ويخزن قيمة. يمكن اعتبار مرادفات الحالة: علامات وسمات وخصائص وخصائص وأحداث. أمثلة للظروف: "درجة الحرارة" ، "مستوى السطوع" ، "مستوى البطارية" ، "إشارة التشغيل" ، "إشارة الخطأ" ، "إشارة الضغط" ، "إشارة الضغط المزدوج" ، إلخ. وبالتالي ، يتم تمثيل كل جهاز من قبل العديد من الدول المختلفة.

يمكن تقسيم الحالات إلى حالات مفيدة - تعرض المعلومات من الجهاز ، وحالة قابلة للتغيير - يمكن تغييرها بواسطة المستخدم أو البرنامج النصي وإرسال هذه التغييرات إلى الجهاز. وفقًا لذلك ، عندما يتغير شيء ما على الجهاز - يتم عرض هذه البيانات في الولايات ، وعندما تتغير الحالة من ioBroker (من قبل المستخدم أو بواسطة البرنامج النصي) - يتلقى الجهاز إشارة حول التغيير ويجب أن يستجيب وفقًا لذلك (يعتمد ذلك على الجهاز نفسه وبرنامج التشغيل معه. يعمل).
يتم دمج كل حالات الجهاز في شجرة واحدة (سجل) من الحالات. يتم تجميعها أولاً حسب الجهاز (في بعض الحالات لا تزال القنوات مستخدمة) ، ثم بواسطة مثيلات برنامج التشغيل.
مفهوم مواضيع بروتوكول MQTT يناسب بسهولة شجرة شجرة من هذا القبيل. وبهذه الطريقة ، يمكنك توصيل معدات إضافية أو أنظمة خارجية تدعم بروتوكول MQTT. يكفي تثبيت برنامج التشغيل MQTT - سيظهر الفرع المقابل في شجرة الحالة.
وهناك جميع أنواع الخدمات عبر الإنترنت التي يمكن أن توفر معلومات مفيدة و / أو تجعل من الممكن السيطرة على المعدات الأخرى (أجهزة الإنذار سيارة ، على سبيل المثال). يتم تمثيل نتيجة التفاعل مع هذه الخدمات أيضًا كمجموعة من الحالات.

في المجموع ، يتم تمثيل الجهاز في ioBroker بمجموعة من الحالات التي تميز الجهاز وتسمح بالتفاعل معه.
Homekit الملحقات والخدمات والمواصفات
أنتقل الآن إلى Homekit. هنا يتم تصنيف الأجهزة ، وظائفها وخصائصها.

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

تقرأ التطبيقات التي تعمل مع Homekit الخدمات وخصائص الملحقات ، ثم تعرض وتتيح لك تغيير القيم في الخصائص من خلال واجهة المستخدم. يتم إرسال القيم التي تم تغييرها إلى أجهزة Homekit لتطبيقها ، ومن أجهزة Homekit ، على التوالي ، يتم أيضًا إرسال قيم الخصائص مع بعض التغييرات من جانب الجهاز.
في المجموع ، يبدو أن الجهاز الموجود في HomeKit هو ملحق به مجموعة من الخدمات والميزات.
ياهكا. ننضم إلى المفهوم
للعمل مع Homekit ، يستخدم ioBroker برنامج تشغيل Yahka (يجب عليك تثبيت وحدات إضافية قبل التثبيت) - وظيفة إضافية إلى مكتبة معروفة https://github.com/KhaosT/HAP-NodeJS ، الذي يبني أيضًا مشروع HomeBridge الشهير. تم تصميم هذه المكتبة لإنشاء بوابة / جسر افتراضي يوفر مجموعة من الأجهزة الافتراضية في HomeKit. تكوين الأجهزة والخدمات الافتراضية وفقًا لذلك ، وتحديد قيم الخصائص ، نحصل على الجهاز النهائي في Homekit والتطبيق المنزلي ، ويمكننا أيضًا مطالبة Siri بإدارته.
تم تصميم برنامج Yahka لتكوين الملحقات ، وإضافة خدمات إليها والإشارة إلى توافق الخصائص (HomeKit) والشروط (ioBroker).
لكن أولاً ، بعد التثبيت ، تحتاج إلى تكوين العبارة وإدخالها في التطبيق Home. بعد التكوين ، ستتم إضافة جميع الأجهزة المضافة إلى البوابة تلقائيًا إلى الصفحة الرئيسية. للقيام بذلك ، حدد "اسم الجهاز" (من المرغوب فيه تحديد الحروف اللاتينية فقط) وتذكر الرمز السري (أو تعيين الخاصة بك).

نذهب إلى تطبيق المنزل ونضيف ملحق جديد. الآن دعونا ننكب على الأجهزة. سيكون كل شيء على ما يرام إذا كانت مجموعة الحالات للجهاز في ioBroker تتوافق بوضوح مع مجموعة الخدمات والميزات في HomeKit. وسيكون من الأفضل لو كانت القيم في الولايات مناسبة لقيم الخصائص. ولكن في كثير من الأحيان هذا ليس كذلك ، وعليك التوصل إلى طرق غير عادية لرسو السفن. سأتحدث عن بعضها أدناه ، وسوف يتعين عليك تنفيذ جميع الخيارات الأخرى بنفسك ، "في الصورة ومثالها".
للراحة ، قمت بإنشاء مستند مع ترجمة الخدمات والأنواع ، وكذلك القيم المحتملة للخصائص. تتوافق جميع الأنواع والخدمات المستخدمة مع مكتبة HAP-NodeJS .
استشعار درجة الحرارة
هذا هو أبسط مثال - كل ما عليك فعله هو وجود حالة واحدة تحتوي على القيمة العددية لدرجة الحرارة. يمكن الحصول عليها من أي مكان: من أجهزة الاستشعار أو من خدمات الإنترنت (الطقس).
تحتاج إلى إضافة جهاز من فئة Sensor ، وإضافة خدمة TemperatureSensor إلى الجهاز ، وإعطاء اسم لهذه الخدمة. هناك 5 خصائص في هذه الخدمة ، أهمها بالنسبة لنا هي CurrentTemperature.


يكفي الإشارة إلى اسم الحالة المطابقة لدرجة الحرارة في خاصية CurrentTemperature.
أضف خدمة HumiditySensor للرطوبة هنا أيضًا ، وسيتم إنشاء رمز ملحق منفصل في Homekit.

حفظ ، والانتهاء من ذلك. الآن يمكنك اللجوء إلى سيري ، ويسألها عن درجة الحرارة والرطوبة.

البطارية
خدمة أخرى بسيطة. خدعة هي أنه يمكن إضافتها إلى أي ملحق تقريبًا. أضف خدمة BatteryService وأشر في خاصية BatteryLevel إلى حالة تحتوي على نسبة شحن البطارية. بعد ذلك ، ستظهر بيانات الشحن في البيانات الإضافية حول الجهاز.

يمكنك على الفور تعيين علامة "انخفاض الشحن" (السمة المميزة StatusLowBattery) ، إذا كانت قيمة الحالة المحددة تساوي 1 ، فسيتم عرض الرمز المقابل على صورة الجهاز.
ولكن ماذا لو لم يكن لديك مثل هذه الحالة ، ولكنك تريد أن ترى أيقونة البطارية المنخفضة؟ تحتاج إلى إنشاء هذه الحالة يدويًا أو باستخدام برنامج نصي ، والإشارة إلى الحالة التي تم إنشاؤها في الخصائص.
الآن يبقى فقط لتعيين القيمة الحقيقية بشكل صحيح في هذه الحالة. للقيام بذلك ، سوف نستخدم البرنامج النصي - سيتم ضبطه عندما تصل البطارية إلى 30 بالمائة.
createState(""); on({id: "zigbee.0.00158d0001f41725.battery", change: "ne"}, function (obj) { var value = obj.state.val; setState("javascript.0.", (value <= 30)); });
بعد التشغيل الأول ، سينشئ البرنامج النصي حالة ، ويمكن تحديده في الخصائص.

سيتم عرض هذه العلامة على صور الملحقات

مصابيح
المصابيح الكهربائية مختلفة - مشرق ، دافئ ، أحمر. هناك 4 حالات:
- بسيطة - التي تسيطر عليها وخارجها
- عكس الضوء - تسيطر عليها أيضا مستوى السطوع
- مع درجة الحرارة - من الممكن التحكم في درجة حرارة التوهج
- اللون - يمكنك التحكم في لون التوهج
لكل حالة من هذه الحالات ، هناك خاصية مماثلة في خدمة Lightbulb:
- على - على / قبالة
- السطوع - مستوى السطوع
- هوى الظل
- التشبع - التشبع
- ColorTemperature - درجة حرارة اللون
في الحالة البسيطة ، في خاصية "On" ، نشير إلى الحالة المسؤولة عن التبديل وإيقاف التشغيل.

إذا كان المصباح خافتًا ، فسنشير بالإضافة إلى ذلك إلى الحالة بمستوى السطوع.

بالإضافة إلى تعيين الحالات الصحيحة ، من المهم مراعاة الفاصل الزمني للقيم المقبولة!
على سبيل المثال: في بعض الحالات ، يمكن أن تأخذ الحالة المسؤولة عن سطوع المصباح قيمًا من 0 إلى 255 ، ولكن في Homekit تقتصر هذه القيم على فاصل زمني من 0 إلى 100. في هذه الحالة ، يمكنك استخدام وظائف تحويل برنامج تشغيل Yahka. تعمل الدالة "level255" على تحويل الفاصل الزمني للقيم من 0.55 إلى الفاصل الزمني 0..100 (والعكس صحيح).
قد تنشأ الصعوبات التالية إذا كان المصباح ملونًا ، ولكن اللون المستخدم هو RGB. يمكن أن يكون إما ثلاث حالات مختلفة ، أو رقم واحد (أو سلسلة). في هذه الحالة ، ستحتاج إلى التحويل من مساحة ألوان RGB إلى مساحة XYB أخرى (يتم استخدام هذه المساحة بواسطة HomeKit) ، أو إلى الطائرة XY.
للقيام بذلك ، تحتاج إلى إنشاء حالتين جديدتين (الصبغة والتشبع) ، حيث سنقوم بتحويل القيم من حالة RGB والعكس.
البرنامج النصي الناتج للون هو يمكن إجراء درجة حرارة اللون بسهولة - إذا كان نطاق القيم المتاحة للمصباح معروفًا ، فيمكن تحويله إلى الفاصل الزمني المتاح لـ HomeKit (عبر وظيفة scaleInt ).


ترموستات
ترموستات - جهاز للحفاظ على درجة الحرارة المحددة (خدمة ترموستات). وفقا لذلك ، فإن السمة الرئيسية للحرارة هي درجة الحرارة المرغوبة (TargetTemperature). بالإضافة إلى درجة الحرارة المحددة ، يمكن الإشارة إلى درجة الحرارة الحالية (CurrentTemperature) ، وهي ذات طبيعة إعلامية (نظرًا لأن الجهاز يقرأها فقط من المستشعرات).
من التطبيق Home ، يتم ضبط درجة الحرارة المستهدفة في الترموستات ويتم مراقبة درجة الحرارة الحالية. في منظم الحرارة الخاص بي (Zont) ، لم يكن هناك سوى هاتين الحالتين - كانت متاحة من خلال واجهة الخدمة السحابية.
من أجل جمال عرض الجهاز في HomeKit ، اضطررت إلى إضافة اثنين من الثوابت: الحالة الحالية للتدفئة نشطة (1) ، والحالة المستهدفة للتدفئة تلقائية (3).


بوابات
مع باب الجراج (خدمة GarageDoorOpener) ، كل شيء أصعب من ترموستات.
من الخصائص المتاحة ، تحتوي البوابة على حالة مستهدفة (TargetDoorState) ، مما يشير إلى رغبتنا في أن تكون البوابة "مفتوحة" أو "مغلقة". لكنك تحتاج أيضًا إلى عرض الحالة الحالية للبوابة (CurrentDoorState) بشكل صحيح: هل هي مفتوحة أم مغلقة ، أو ربما تفتح أو تغلق؟
في حالتي ، تم فتح البوابات من خلال mqtt في ioBroker مع العديد من حالات المعلومات:
- علامة انفتاح البوابة (OB)
- علامة حركة البوابة (LW)

بفضل هذه الحالات ، يمكنك حساب الوضع الحالي للبوابة:
- إذا لم يكن هناك OB ولا DV ، ثم يتم إغلاق البوابات
- إذا لم يكن هناك OB وكان هناك DV ، ثم فتح البوابات
- إذا كان هناك OB وبدون DV ، فإن البوابات مفتوحة
- إذا كان هناك OB وكان هناك DV ، ثم تغلق البوابة
لإرسال إشارة لفتح وإغلاق البوابة ، لدي حالتان منفصلتان (سيكون من الممكن إدارته باستخدام حالة واحدة ، لكن لدي حالتان) ، والتي ترسل رسالة عبر mqtt إلى وحدة التحكم في البوابة:
لإرسال إشارة ، تحتاج إلى محاكاة زر "النقر": اضبط القيمة على "صحيح" ، وبعد فترة إعادة تعيينها إلى "خطأ". في هذا الصدد ، للتكامل مع HomeKit ، كان من الضروري إنشاء حالة أخرى - "الحالة الهدف للبوابة" ، عند تغييرها ، سيتم إرسال الإشارة المقابلة.
يمكن استبدال علامة انفتاح البوابة بالحالة المستهدفة (أي ما الهدف الذي يهدف إليه):
- إذا كان "المرجع المصدق" مغلقًا ولا يوجد DV ، فإن البوابة مغلقة
- إذا كان "CA" مغلقًا وكان هناك DV ، فتفتح البوابات
- إذا كان المرجع المصدق "مفتوحًا" ولم يكن هناك DV ، فإن البوابة مفتوحة
- إذا كان المرجع المصدق "مفتوحًا" وكان هناك DV ، يتم إغلاق البوابة
سنقوم أيضًا بإنشاء "حالة بوابة الحالية" منفصلة الحالة ، وسنملأها في البرنامج النصي بناءً على قيمة العلامات والحالة المستهدفة.
تغيير الدولة النصي لأبواب المرآب createState("gate_0.current");
بعد تشغيل البرنامج النصي ، يمكنك تكوين خصائص خدمة باب الجراج:


الكاميرا
لإضافة كاميرا إلى HomeKit ، سيتم استخدام الطريقة "الكلاسيكية". يتم تنظيم بث الصورة من الكاميرا عبر وحدة ffmpeg. من خلاله ، سيتم تشفير تيار الإدخال ، تشفيره وإعطائه إلى Homekit.
بادئ ذي بدء ، تحتاج إلى تثبيت ffmpeg على الخادم حيث يوجد ioBroker.
لكل منصة ، يتم تثبيتها بطرق مختلفة ، يمكنك تجميعها من المصدر ، أو البحث عن مجموعة جاهزة ، على سبيل المثال ، هنا: https://www.johnvansickle.com/ffmpeg/ يجب أن يكون لديك برنامج ترميز libx264. يمكنك التحقق من برنامج التشفير بعد تثبيت ffmpeg باستخدام الأمر:
ffmpeg -codecs | grep 264
يجب أن تحتوي النتائج على سطر من النموذج
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_vdpau ) (encoders: libx264 libx264rgb h264_v4l2m2m )
بالنسبة إلى Raspberry Pi 3 ، يمكنك استخدام التجميع الجاهز ، والذي يحتوي على برنامج ترميز مع دعم لترميز أجهزة GPU (h264_omx ، يستهلك موارد أقل). ضعها مثل هذا:
wget https://github.com/legotheboss/YouTube-files/raw/master/ffmpeg_3.1.4-1_armhf.deb sudo dpkg -i ffmpeg_3.1.4-1_armhf.deb
كل من برامج الترميز موجودة في هذا التجميع: libx264 و h264_omx
بعد ذلك ، تحتاج إلى الحصول على عنوان دفق الكاميرا الذي يجب بثه (هذه الخطوة خارج نطاق هذه المقالة). على سبيل المثال ، يمكنك أن تأخذ دفقًا عامًا جاهزًا .
أضف الآن الكاميرا إلى Yahka ، وأشر إلى عنوان الدفق ، وقم بتغيير معلمات برنامج الترميز وحجم الصورة ومعدل الإطار ، إذا لزم الأمر.
هام: مجموعات المعلمات مهمة جدًا للعرض الصحيح للكاميرا في Homekit وتعتمد على الكاميرا والدفق. كما يؤثر على أداء النظام ، كما عملية تشغيل ffmpeg تستهلك الكثير من الموارد.


تتم إضافة الكاميرات كأجهزة منفصلة خارج البوابة ، ويجب إضافتها بنفس طريقة إضافة البوابة 

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

نتيجة لذلك ، يمكنك الحصول على لوحة معلومات مثيرة للاهتمام. وإذا قمت بتحديث الصورة بشكل دوري ، فستحصل على بيانات ديناميكية.
على سبيل المثال ، قمت بإظهار رسم بياني للتغيرات في بعض المؤشرات في شكل صورة (ملف على القرص). يتم تحديث هذا الرسم البياني مرة واحدة في الدقيقة والكتابة فوق الصورة في الملف.
(وظائف createImage1 ، و createImage2 ، وتشكيل الرسم البياني ، وفرض النص على صورة ما هي خارج نطاق هذه المقالة ، لكنني سأقدم تلميحًا).سأخبرك كيف يمكنك الحصول على رسم بياني في صورة.
لدى IoBroker طريقة قياسية لبناء الرسوم البيانية - برنامج التشغيل Flot. يقترن برنامج التشغيل هذا ببرنامج تشغيل ويب ويعرض النتيجة في متصفح. ولكن من أجل الحصول على الرسم البياني الذي تم إنشاؤه على الخادم (في البرنامج النصي) كصورة ، هناك حاجة إلى برنامج تشغيل إضافي PhantomJS ، والذي يأخذ "لقطة شاشة" للصفحة (التي سنرسم عليها رسم تخطيطي Flot).
ولكن سأتحدث عن طريقة بديلة لبناء الرسوم البيانية على الخادم في برنامج نصي.
يوجد مثل مكتبة Chart.js http://www.chartjs.org/ التي تسمح لك برسم رسومات جميلة في المتصفح (أمثلة http://www.chartjs.org/samples/latest/ ).
للرسم ، فإنه يستخدم "قماش" (قماش ، قماش) من المتصفح. لذلك ، لرسم استخدام هذه المكتبة على الخادم ، تحتاج إلى استخدام إصدار "server" لكائنات "canvas" و DOM. هذا هو ما تفعله الحزمة chartjs-node ( https://github.com/vmpowerio/chartjs-node ).
التبعية الرئيسية لهذه الحزمة هي الحزمة القماشية ( https://github.com/Automattic/node-canvas ) ، والتي يجب تثبيتها عالميًا (أو في مجلد iobroker). من المهم تثبيت جميع التبعيات للمنصة حيث تضع https://github.com/Automattic/node-canvas#compiling .
بعد ذلك ، يمكنك إضافة وحدات chart.js ، و chartjs-node في إعدادات برنامج تشغيل javascript. يجب تثبيت بشكل صحيح ، دون أخطاء. خلاف ذلك ، تعامل مع الأخطاء وحلها.
وبعد ذلك ، يمكنك كتابة السيناريو.
أدناه هو السيناريو للحصول على مثال ، كما يتضمن استخدام برنامج التشغيل History ويستخدم أسماء حالة محددة.
انتباه! البرنامج النصي له تعقيدات البناء للمبتدئين - وعد. هذه طريقة ملائمة لعدم كتابة وظائف مع رد الاتصال ، ولكن لإنشاء سلاسل من الخطوات. لذلك ، على سبيل المثال ، من المناسب القيام بذلك للحصول على بيانات من تاريخ الحالات.
'use strict'; const ChartjsNode = require('chartjs-node'); function sendToPromise(adapter, cmd, params) { return new Promise((resolve, reject) => { sendTo(adapter, cmd, params, (result) => { resolve(result); }); }); }

يتم تحديث الصورة المصغرة مرة واحدة تقريبًا في الدقيقة ، لذلك نقوم بتعيين الصورة ليتم تحديثها كل 10 ثوانٍ:
var fs = require('fs'); // 10 schedule("*/10 * * * * *", () => { createImage1('/tmp/1_new.jpg', ()=> { fs.renameSync('/tmp/1_new.jpg', '/tmp/1.jpg'); }); createImage2('/tmp/2_new.jpg', ()=> { fs.renameSync('/tmp/2_new.jpg', '/tmp/2.jpg'); }); });
الخصوصية هي أنه في عملية بث الصورة ، من الضروري استبدال الصورة بسرعة كافية حتى لا يتعطل ffmpeg :) وبالتالي ، يتم تكوين الصورة أولاً في ملف واحد ، ثم تتم إعادة تسمية الملف إلى الصورة المستخدمة للترجمة.
الآن في إعدادات الكاميرا ، سنحدد اسم الملف الذي تم إنشاؤه بدلاً من عنوان الدفق ، ونضيف الإعدادات التي يتم "تحديثها" للصورة (المعلمة "-loop 1"). تم تكوين هذا في خصائص الكاميرا المتقدمة. هذه الخصائص ليست أكثر من خيارات سطر الأوامر لتشغيل ffmpeg. لذلك ، يجب العثور على مجموعات من المعلمات في وثائق ffmpeg والأمثلة.
يتم تقسيم الخصائص إلى نوعين: للحصول على "معاينة" (صورة كاميرا صغيرة) وللإذاعة. لذلك ، يمكنك تحديد ملفات مصدر صور مختلفة ، على سبيل المثال بتفاصيل مختلفة.


الخاتمة
ioBroker . , . , , .
, Yahka , Material. , HomeKit.
Yahka, HomeKit — Ham, HomeBridge . .