بالشرح الوثائقي

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

MQTT هو بروتوكول إنترنت مع وسيط رسائل مركزي. وباستخدام وسيط الرسائل هذا، يمكن للمشاركين الاشتراك في "مواضيع" معينة وإرسال رسائل حول مواضيع معينة. يمكن لمدير الشحن cFos Charging Manager الاستماع إلى الرسائل على مواضيع معينة، وبالتالي يمكن التحكم فيه عبر MQTT. ويمكنه أيضًا نقل حالة الأجهزة التي يديرها. يمكن أيضًا التحكم في cFos Power Brain Wallbox عبر MQTT ونقل حالته. وهذا مفيد للاتصال بنظام التشغيل الآلي للمنزل، وللتحكم الصناعي (M2M) وللمراقبة والتسجيل. تبدأ جميع المواضيع بـ cfos_mqtt. إذا كنت ترغب في توصيل العديد من أجهزة cFos MQTT بوسيط MQTT، يمكن أن يبدأ الموضوع اختياريًا بـ cfos_mqtt_<الرقم التسلسلي>/، والذي يمكن تعيينه ضمن التهيئة. يمكنك أيضًا تحديد عنوان URL لوسيط MQTT القياسي في التهيئة. يمكن أن تبدأ عناوين URL اختياريًا بـ mqtt:// و mqtts://. باستخدام mqtts: //، يقوم مدير شحن cFos أو cFos Power Brain Wallbox بإنشاء اتصال TLS. يتم استخدام المنفذين القياسيين 1883 للاتصالات غير المشفرة و8883 للاتصالات TLS. ومع ذلك، يمكنك أيضاً تحديد منفذ في عنوان URL. يمكنك تحديد اسم المستخدم وكلمة المرور في تدوين عنوان URL المعتاد، على سبيل المثال mqtt://user:password@192.168.2.111. إذا قمت بتحديد وسيط MQTT في تكوين مدير الشحن cFos، يمكنك إما تحديد وسيط فردي أو ببساطة كتابة mqtt. ثم يتم استخدام الوسيط الافتراضي المخزن في التكوين.

يدعم cFos Charging Manager كلاً من MQTT 3.1.1 و MQTT 5. إذا قمت ببدء عنوان URL باستخدام mqtt3:// أو mqtt5:// (mqtts3:// و mqtts5:// للاتصال المشفر)، فإنك تحدد إصدار البروتوكول. الإصدار الافتراضي هو MQTT 3.1.1. مع MQTT 5، يحاول مدير الشحن cFos الرجوع إلى MQTT 3.1.1 إذا ظهرت رسالة خطأ مطابقة. يعمل هذا مع وسطاء موسكيتو الأقدم، ولكن ليس بالضرورة مع الوسطاء الآخرين.

ملاحظة: نظرًا لأن إعداد MQTT يتطلب كلمة مرور المسؤول، فإن مدير الشحن يتعامل مع البيانات وفقًا لذلك. هذا يعني أنه يتم إرسال البيانات التي لا يمكن الوصول إليها إلا باستخدام كلمة مرور المسؤول.

ملاحظة على وسطاء MQTT: بفضل ستيفان ج. (#diebestenuserderwelt) تمكنا من الاختبار ضد وسيط MQTT المدمج في ioBroker. لا يتوافق وسيط MQTT 3.1.1 هذا (اعتبارًا من فبراير 2023) مع المعيار في عدة جوانب: يتم إنهاء محاولات الاتصال بصمت دون رسالة خطأ، وأحيانًا تكون الحمولة مفقودة في حزم PUBLISH، ويبدو أن حزم PUBLISH تُرسل مرتين (هل يمكن إيقاف تشغيل هذا من خلال إعداد التكوين؟). هذا يعني أن هذا الوسيط غير مناسب للتحكم في واجهة برمجة تطبيقات مدير الشحن، حيث قد يتم تنفيذ طلبات واجهة برمجة التطبيقات عدة مرات. على الرغم من أننا مهتمون بأن يكون تطبيق MQTT الخاص بنا متوافقًا مع أكبر عدد ممكن من الوسطاء، فإننا نوصي حاليًا باستخدام Mosquitto لـ ioBroker.

دمج العدادات وصناديق الحائط باستخدام نوع الجهاز "إدخال HTTP".

بدلاً من تزويد هذه الأجهزة عبر HTTP (انظر HTTP API -> عدادات HTTP وصناديق الحائط)، يمكن لهذه الأجهزة أيضًا الاستماع إلى MQTT. أدخل mqtt أو عنوان URL لوسيط MQTT كعنوان الجهاز. يستمع المقياس أو صندوق الحائط المقابل بعد ذلك إلى الموضوع cfos_mqtt/ set/<dvice ID>، على سبيل المثال بالنسبة لمقياس بمعرف الجهاز M1 إلى cfos_mqtt/ set/M1. ثم يتوقع مقياس إدخال HTTP بعد ذلك سلسلة JSON كرسالة، كما هو موضح في واجهة برمجة تطبيقات HTTP تحت عنوان "عدادات HTTP وصناديق الحائط". لذلك يجب أن يقوم مصدر MQTT الخاص بك بتسليم البيانات بهذا التنسيق. يسمح لك هذا بدمج الأجهزة التي لا يدعمها مدير الشحن cFos Charging Manager من خلال الحصول على البيانات من مصدر آخر (مثل نظام التشغيل الآلي المنزلي) ثم استيرادها إلى مدير الشحن.
ملاحظة: إذا كانت البيانات من المصدر بتنسيق مختلف عما يتوقعه مقياس HTTP، يمكنك أيضًا إنشاء مقياس مخصص. هذا موضح أدناه بالنسبة ل MQTT.

مثال:
لقد قمت بإنشاء عداد إدخال HTTP وهذا يحتوي على M3 كمعرف الجهاز. لقد قمت بإدخال عنوان وسيط Mosquitto كعنوان، على سبيل المثال mqtt://192.168.2.30. إذا قمت بإدخال الأمر التالي في سطر الأوامر على الكمبيوتر الذي يعمل عليه Mosquitto:
mosquitto_pub -h localhost -t cfos_mqtt/set/M3 -m '{ "model": "TestModell", "import_wh": 12345, "export_wh": 23456, "voltage": [231, 232, 233], "current": [10001, 10002, 10003] }'
يجب أن يحتوي العداد بعد ذلك على القيم المذكورة أعلاه.

نقل حالة أجهزة مدير الشحن

في تهيئة مدير الشحن، يمكنك تحديد عنوان URL لوسيط MQTT (أو mqtt للوسيط القياسي)، حيث يقوم مدير الشحن بعد ذلك بنشر حالة جميع الأجهزة تحت الموضوع cfos_mqtt/get/dev_info. وينقل ذلك بالتنسيق المعروف من HTTP get_dev_info_info. يوفر لك هذا جميع قيم الأجهزة كما هي مرئية أيضًا في واجهة المستخدم، مثل قيم طاقة العدادات أو حالة صناديق الحائط. إذا كنت ترغب فقط في الاشتراك في الأجهزة الفردية، يمكنك إلغاء تنشيط خانة الاختيار "نشر المعلومات عبر MQTT" وبدلاً من ذلك ضع علامة على خيار "نشر المعلومات عبر MQTT" ضمن "العرض" في الإعدادات الخاصة بالأجهزة الفردية. يتم بعد ذلك نشر سلسلة JSON مطابقة حول الجهاز المعني ضمن الموضوع cfos_mqtt/get/<device ID>. يمكنك أيضًا الاشتراك في جميع القيم العامة تحت الموضوع cfos_mqtt/get/params، حيث يتم إخراجها بالتنسيق المعروف في HTTP get_dev_info تحت "params".

التحكم في واجهة برمجة تطبيقات مدير شحن cFos عبر MQTT

في تهيئة مدير الشحن cFos Charging Manager، يمكنك تحديد عنوان URL لوسيط MQTT ضمن "وسيط للوصول إلى واجهة برمجة التطبيقات عبر MQTT" (أو mqtt للوسطاء القياسيين). إذا لم تكن هذه القيمة فارغة، يشترك مدير الشحن cFos Charging Manager في جميع المواضيع التي تبدأ ب cfos_mqtt/API/. ثم يفسر الرسائل الواردة تحت هذه المواضيع كما لو كان اسم الموضوع عنوان URL ل HTTP يبدأ بـ /cnf? ثم يقوم مدير الشحن بنشر الاستجابة من واجهة برمجة تطبيقات HTTP على هيئة JSON تحت الموضوع cfos_mqtt/api_res. هذا يعني أن لديك واجهة برمجة تطبيقات HTTP بأكملها تقريبًا تحت سيطرتك عبر MQTT. الاستثناءات هي مكالمات واجهة برمجة التطبيقات التي تقدم استجابات JSON طويلة. مثال: يستخدم cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1 دالة واجهة برمجة التطبيقات set_cm_var لتعيين متغير مدير الشحن x إلى 1. رسالة تحت cfos_mqtt/api/cmd=إدخال_rfid&rfid=5678&dev_id=E1 تدخل RFID 5678 لصندوق الحائط بمعرف الجهاز E1 (انظر أيضًا وظائف RFID الموسعة الخاصة بنا).
يمكن وضع البيانات التي يتم إرسالها عبر HTTP POST في الرسالة تحت الموضوع.

مثال: قم بتغيير الحد الأقصى للتيار الكلي المتاح لمدير الشحن بشكل دوري:
أدخل الوسيط الخاص بك ضمن الإعدادات العامة لمدير الشحن ضمن "وسيط للوصول إلى واجهة برمجة التطبيقات عبر MQTT" (أو ببساطة mqtt إذا كان الوسيط الافتراضي المخزن تحت "التكوين" هو الذي سيتم استخدامه). ثم استخدم MQTT لنشر كائن JSON بالمحتوى التالي إلى الموضوع
cfos_mqtt/API/cmd=set_params
:
{{"max_total_cur_cur_prc": p}
حيث p هي نسبة مئوية من الحد الأقصى للتدفق الإجمالي المحدد مسبقًا الذي سيتم أخذه.
ملاحظة: تتسبب بعض استدعاءات واجهة برمجة تطبيقات HTTP في قيام مدير الشحن بحفظ التكوين. إذا قمت بتنفيذها كثيرًا، فإن الفلاش (في cFos Power Brain أو cFos Wallbox Booster) أو بطاقة SD في جهاز Raspberry سوف يتآكل. وبالتالي فإن استدعاء واجهة برمجة التطبيقات "set_params" مع المعلمة الواحدة "max_total_cur_cur_prc" لا يحفظ المعلمات.

التحكم في الصناديق الحائطية عبر MQTT

إذا لم يكن مدير شحن cFos في وضع "إدارة التحميل"، ولكن في وضع "المراقبة"، يمكنك استخدام MQTT للتحكم في جميع صناديق الحائط بنفسك. ينطبق هذا على وجه الخصوص على علب حائط cFos Power Brain التي يتم تشغيلها كعبد في وضع "المراقبة". للقيام بذلك، يجب عليك تحديد خيار "تنشيط التحكم في علب الحائط" ضمن MQTT في إعدادات مدير الشحن. يستمع مدير الشحن cFos Charging Manager بعد ذلك إلى موضوع MQTT cfos_mqtt/ctl ويتوقع الرسائل مع كائن JSON. يحتوي هذا الكائن على كائنات فرعية مع معرف الجهاز كاسم كخصائص. تبدو الكائنات الفرعية على النحو التالي: {"cur": c، و"ena": b، و"wke": b، و"phs": p}، حيث c هو تيار الشحن بالمللي أمبير، وb يمكن أن يكون كل منهما صواب أو خطأ. "ena": خطأ لإلغاء تنشيط الشحن في صندوق الحائط، "wke": صواب لمحاولة إرسال أمر "إيقاظ السيارة" إلى صندوق الحائط (ممكن حاليًا فقط مع صناديق حائط cFos Power Brain). p يمكن أن يكون 1 أو 3 للتبديل بين الشحن على مرحلتين أو ثلاث مراحل. يمكنك أيضًا حذف "cur" و"ena" و"wke" و"phs" وبالتالي تنفيذ وظائف تحكم معينة فقط. مثال:
{"E1":
{cur: 8000، ena: صحيح، wke: صحيح}،
"E2":
{"cur: 10000، phs: 3}}}

يضبط تيار الشحن لصندوق الحائط الذي يحمل معرّف الجهاز على 8 أمبير، وينشط الشحن ويحاول إيقاظ السيارة. علاوة على ذلك، يتم ضبط تيار الشحن للصندوق الحائطي E2 على 10 أمبير وتحويله إلى الشحن على 3 مراحل.

إرسال السجلات وسجل المعاملات عبر MQTT

يمكنك تحديد عنوان URL لوسيط MQTT لنقل إدخالات السجل في سجل النظام ضمن "التكوين". ثم يقوم مدير الشحن cFos Charging Manager بعد ذلك بنشر جميع إدخالات السجل تحت الموضوع cfos_mqtt/log. يتيح لك ذلك تحليل السجلات عن بُعد لمراقبة مدير الشحن. يمكنك أيضًا تحديد عنوان URL لوسيط MQTT لإدخالات سجل المعاملات ضمن "التكوين". ثم يتم إرسال جميع معاملات الشحن تحت الموضوع cfos_mqtt/ta_log. يسمح ذلك بتحليل بيانات الفوترة الخاصة بمعاملات الشحن عن بُعد وإنشاء نسخ احتياطية من معاملات الشحن على نظام آخر. تبدأ معاملة الشحن عند توصيل قابس الشحن وتنتهي عند فصله.

العدادات المعرفة من قبل المستخدم مع MQTT

يمكنك إنشاء عدادات مخصصة باستخدام النوع r = 2 ل MQTT. تُعرّف هذه العدادات بشكل مشابه لعدادات HTTP (النوع r = 1). ومع ذلك، فإن العناوين هنا ليست عناوين URL لـ HTTP، ولكن مواضيع MQTT. مثال:
"power_w": {
"العنوان": "/test_topic3"،
"النوع": "عائم"،
"الاستعلام": "power_w"
}

هنا، يشترك العداد المعرّف من قبل المستخدم في الموضوع /test_topic3 ويتوقع كائن JSON بخاصية "power_w"، على سبيل المثال {"power_w": 1234}. يمكن أن يكون لمتغيرات العدادات المختلفة مواضيع مختلفة ويتم تحديثها بمجرد نشر رسالة تحت الموضوع المقابل.

مثال على عداد محدد من قبل المستخدم مع MQTT

تنزيل تعريف العداد لعداد مخصص مع MQTT.


                           لقطة شاشة لإعدادات العداد المخصص مع MQTT
                        إعدادات العداد المخصص باستخدام MQTT

ملاحظة: يجب نشر البيانات عبر MQTT على فترات زمنية قصيرة حتى لا تنتهي مهلة cFos PowerBrain. على سبيل المثال، يجب تنفيذ الأمر "TelePeriod 30" لعداد MQTT مع برنامج Tasmota بحيث يتم نشر البيانات عبر MQTT كل 30 ثانية.