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

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

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

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

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

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

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

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

مثال:
لقد قمت بإنشاء عداد إدخال HTTP ولديه M3 كمعرف للجهاز. كعنوان قد أعطيت عنوان Mosquitto Broker ، على سبيل المثال mqtt://. إذا قمت بإدخال الأمر التالي في سطر الأوامر على جهاز الكمبيوتر الذي يقوم بتشغيل 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] }'
يجب أن يحتوي العداد بعد ذلك على القيم أعلاه.

انقل حالة أجهزة Charging Manager

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

التحكم في واجهة برمجة تطبيقات cFos Charging Manager عبر MQTT

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

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

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

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

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

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

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

عدادات مخصصة مع MQTT

يمكنك إنشاء عدادات مخصصة باستخدام rtype = 2 لـ MQTT. يتم تعريف هذه العدادات على غرار عدادات HTTP (rtype = 1). ومع ذلك ، فإن العناوين هنا ليست عناوين HTTP URL ، ولكن مواضيع MQTT. مثال:
"power_w": {
"address": "/test_topic3",
"type": "float",
"query": "power_w"
}

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