التحكم المباشر عبر MQTT
نصيحة
يُستخدم التحكم المباشر عبر MQTT للتحكم الفوري. لإرسال الجداول مسبقًا، راجع التحكم المجدول عبر MQTT بدلًا من ذلك.
سيساعدك هذا الدليل على تكوين MQTT على SmartgridOne Controller للتحكم عن بُعد في تركيبات البطاريات والألواح الشمسية ومراقبتها.
التكوين لأول مرة (نقطة البداية للمستخدمين الجدد)
لديّ SmartgridOne Controller وأرغب في إعداده للتحكم عن بُعد عبر MQTT.
قبل المتابعة، تأكد من أن شبكتك وأجهزتك جاهزة من خلال اتباع دليل إعداد MQTT.
1. إضافة الإشارة الخارجية لـ MQTT




2. تمكين الإشارة البعيدة لـ MQTT
توضح مهلة آلية الرجوع إلى الوضع الاحتياطي لـ SmartgridOne Controller المدة التي ينبغي أن ينتظرها للحصول على أوامر جديدة. عندما يتوقف SmartgridOne Controller عن تلقي الأوامر، فإنه يفعّل الاستراتيجية الافتراضية تلقائيًا بعد انتهاء هذه المهلة.
بعد ذلك، حدد جميع الأجهزة التي ترغب في تضمينها في التحكم عن بُعد عبر MQTT.


3. تمت إضافة الإشارة البعيدة
تم الآن تفعيل واجهة التحكم عن بُعد عبر MQTT على SmartgridOne Controller.
نحن الآن مستعدون لإرسال بعض الأوامر الأساسية باستخدام مثال بسيط. يوضح لك عمود الحالة ما إذا كان أي أمر نشطًا.

نص برمجي تجريبي بلغة Python
من أفضل نقاط البداية اختبار التكامل الذي أعددته حديثًا باستخدام مثال بسيط.
ينفذ هذا الكود الاختباري مهمة بسيطة تتمثل في إرسال الأوامر التالية باستمرار:
- البطارية: الشحن بقدرة 5 kW
- الطاقة الشمسية: ضبط القدرة على 0 kW
يستجيب SmartgridOne Controller باستمرار برسالة «feedback» تتضمن قيم قدرة الشبكة والأصول المرصودة. وهذه الميزة مضمنة أيضًا في هذا المثال.
يُرجى تنزيل الملف أدناه في بيئة تطوير Python المفضلة لديك. أدخل الرقم التسلسلي وبيانات اعتماد MQTT ثم نفّذ البرنامج النصي:
بعد نجاح ما سبق، يمكنك متابعة إرسال أنواع أخرى من الأوامر. جميع الأوامر موضحة في وثائق التحكم عن بُعد عبر MQTT.
وثائق MQTT لإرسال الأوامر
يوضح هذا القسم تنسيق رسائل MQTT ومتطلبات الحمولة للتحكم عن بُعد في سياسات القدرة على الأجهزة الموجودة ضمن شبكة SmartgridOne Controller.
موضوع MQTT
يُهيكل موضوع MQTT المستخدم لإرسال الأوامر كما يلي:
standard1/rp_one_s/remoteControlMetrics/'controller SN'يجب استبدال 'controller SN' بالرقم التسلسلي الفعلي لـ SmartgridOne Controller الذي تريد التحكم فيه.
بنية حمولة MQTT
تُرسل الأوامر كحمولات JSON. صُممت بنية الحمولة لتحديد سياسات مختلفة لإدارة القدرة ونقاط الضبط لمكونات مختلفة من نظام الشبكة الذكية. فيما يلي مخطط الحمولة مع أوصاف تفصيلية للحقول:
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": "<Unix Timestamp>",
"fields": {
"<Component Policy>": "<Policy Type>",
"<Component Power Setpoint>": <Setpoint in watts>,
"site_<policy>": "<Value in watts>"
}
}وصف الحقول
نصيحة
يمكن التحكم في أنواع متعددة من الأجهزة (مثل البطاريات والطاقة الشمسية) في الوقت نفسه.
- extraTags (Object):
- nodeId (String): معرّف فريد للعقدة ضمن شبكة SmartgridOne Controller. ويساوي رقمك التسلسلي متبوعًا بـ '_site_0' لمعظم أجهزة SmartgridOne Controller.
- time (Integer): طابع زمني لـ Unix بالثواني يحدد وقت إرسال الرسالة.
- fields (Object):
- <Component>_policy (String): نوع السياسة للمكوّن. هذا الحقل اختياري، وإذا لم يُحدد فسيعود النظام إلى الإعداد الافتراضي لـ SmartgridOne Controller.
- <Component>_power_setpoint_w (Float): نقطة ضبط القدرة المطلوبة للمكوّن بالواط. هذا الحقل اختياري ولا يكون ذا صلة إلا عند تحديد سياسة مقابلة.
المكونات والسياسات
ملاحظة
ستُدمج الأصول من النوع نفسه (مثل بطاريتين) في مكوّن واحد. على سبيل المثال، عند تركيب بطاريتين بسعة 5 kWh، ستُعاملان كبطارية واحدة بسعة 10 kWh.
يمكن أن يتضمن كل مكوّن في كائن fields سياسة ونقطة ضبط للقدرة. ويمكن التحكم في المكونات التالية:
-
solar_policy و solar_power_setpoint_w:
- يتحكمان في سياسة توليد الطاقة الشمسية ونقطة ضبطها. السياسات المدعومة:
- Policy setpoint: ضبط الحد الأقصى للقدرة التي تنتجها جميع التركيبات الشمسية المتصلة مجتمعة. يجب ضبط الحقل solar_power_setpoint_w على حد قدرة الإنتاج بالواط.
- Policy feed-in-restriction: الإنتاج بالقدرة الكاملة مع اتباع حدود الشبكة الحالية.
- Policy cost: تمكين تقليل تكلفة إنتاج الطاقة الشمسية استنادًا إلى سعر اليوم التالي (سوق EPEX Spot). عند حدوث أسعار حقن سالبة، نحد من الإنتاج إلى الاستهلاك الذاتي. وعندما يكون كل من سعري السحب والحقن سالبًا، نوقف جميع التركيبات الشمسية. يُتجاهل الحقل solar_power_setpoint_w.
- Policy off: تعطيل جميع التفاعلات مع أصول الطاقة الشمسية. تحذير: لا تتم حماية الحدود في هذا الوضع. يُتجاهل الحقل solar_power_setpoint_w.
- يتحكمان في سياسة توليد الطاقة الشمسية ونقطة ضبطها. السياسات المدعومة:
-
storage_policy و storage_power_setpoint_w:
- يتحكمان في سياسة نظام تخزين الطاقة ومعدل التفريغ أو الشحن.
- Policy setpoint: ضبط إجمالي قدرة الشحن (نقطة ضبط موجبة) أو قدرة التفريغ (نقطة ضبط سالبة) لمجموعة البطاريات. عند توصيل عدة بطاريات، تُقسّم نقطة الضبط وفق قدرة الشحن/التفريغ المتاحة لتوزيع الحمل بالتساوي على البطاريات. يُضبط الحقل storage_power_setpoint_w على قدرة البطارية المطلوبة.
- Policy peak-shaving-only: تمكين تحسين خفض ذروة الحمل على البطارية. يجب دمج ذلك مع أربعة معاملات لخفض الذروة على مستوى الموقع.
- Policy cost: تمكين تحسين التكلفة استنادًا إلى سعر اليوم التالي (سوق EPEX Spot) على البطاريات، عبر شحنها خلال الساعات منخفضة التكلفة واستخدام الطاقة خلال الساعات مرتفعة التكلفة. يُتجاهل الحقل storage_power_setpoint_w.
- Policy self-consumption: تمكين خوارزمية بسيطة للاستهلاك الذاتي على البطاريات. يُخزّن فائض الإنتاج الشمسي في البطارية أثناء النهار، وعند غروب الشمس تُسحب الطاقة من البطارية. يُتجاهل الحقل storage_power_setpoint_w.
- Policy off: تعطيل جميع التفاعلات مع أصول البطاريات. تحذير: لا تتم حماية الحدود في هذا الوضع. يُتجاهل الحقل storage_power_setpoint_w.
- يتحكمان في سياسة نظام تخزين الطاقة ومعدل التفريغ أو الشحن.
-
heat_pump_policy:
- تبديل تشغيل/إيقاف أنظمة المضخات الحرارية. ستتم دائمًا مراعاة الحدين الأدنى والأقصى لمدد التشغيل.
- Policy cost: تمكين تحسين التكلفة استنادًا إلى سعر اليوم التالي (سوق EPEX Spot) على المضخات الحرارية. تحدد خوارزمية التسعير الديناميكي المحلية أفضل فترات التشغيل.
- Policy self-consumption: تشغيل المضخات الحرارية عند إنتاج فائض من الطاقة الشمسية.
- Policy power_off: إيقاف تشغيل المضخات الحرارية.
- Policy power_on: تشغيل المضخات الحرارية.
- تبديل تشغيل/إيقاف أنظمة المضخات الحرارية. ستتم دائمًا مراعاة الحدين الأدنى والأقصى لمدد التشغيل.
-
switched_load_policy:
- تبديل تشغيل/إيقاف الأنظمة التي تتحكم فيها المرحلات. وقد تكون المرحلات مدمجة أو متصلة بالشبكة.
- Policy cost: تمكين تحسين التكلفة استنادًا إلى سعر اليوم التالي (سوق EPEX Spot) على المرحل.
- Policy self-consumption: تشغيل المرحل عند إنتاج فائض من الطاقة الشمسية.
- Policy power_off
- Policy power_on
- تبديل تشغيل/إيقاف الأنظمة التي تتحكم فيها المرحلات. وقد تكون المرحلات مدمجة أو متصلة بالشبكة.
-
variable_power_load_policy و variable_power_load_power_setpoint_w:
- إدارة سياسة استهلاك القدرة ونقطة ضبطها للمركبات الكهربائية.
- Policy setpoint: ضبط إجمالي قدرة الشحن لمجموعة المركبات الكهربائية. يُضبط الحقل variable_power_load_power_setpoint_w على قدرة الشحن المطلوبة.
- Policy cost: تمكين تحسين التكلفة استنادًا إلى سعر اليوم التالي (سوق EPEX Spot) على البطاريات، عبر شحنها خلال الساعات منخفضة التكلفة. يُتجاهل الحقل variable_power_load_power_setpoint_w.
- Policy self-consumption: تمكين الشحن عند إنتاج فائض من الطاقة الشمسية. يُتجاهل الحقل variable_power_load_power_setpoint_w.
- Policy off: تعطيل جميع التفاعلات مع أصول المركبات الكهربائية. يُتجاهل الحقل variable_power_load_power_setpoint_w.
- إدارة سياسة استهلاك القدرة ونقطة ضبطها للمركبات الكهربائية.
حدود القدرة
بدلًا من ضبط استراتيجيات التحكم ونقاط الضبط، يمكن أيضًا ضبط حدود القدرة لأجهزة التخزين والطاقة الشمسية.
على سبيل المثال:
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": "<Unix Timestamp>",
"fields": {
"{prefix}_maxChargePower_W": <Max Charge Power W>,
"{prefix}_maxDischargePower_W": <Max Discharge Power W>,
"{prefix}_maxProductionPower_W": <Max Production Power W>,
}
}حيث إن prefix إما storage أو solar أو nodeID الخاص بالجهاز المعني.
التحكم في الموقع
يمكن التحكم في الموقع بشكل منفصل. ويمكن إرسال أوامر الموقع التالية إلى وحدة التحكم:
defaultأوfallbackإزالة أي أوامر نشطة للموقعexportضبط حد تصدير الموقعimportضبط حد استيراد الموقعsetpointيمكن أن تتغير نقطة ضبط الموقع بنسبة تصل إلى 5% في كلا الاتجاهينsetpoint_Aلم يُنفذ بعد
المتغيرات التالية هي معاملات خفض الذروة، ولن تُطبق إلا عند ضبط استراتيجية البطارية على خفض الذروة.
startChargeBelow_WstopChargeAbove_WstartDischargeAbove_WstopDischargeBelow_W
نقطة ضبط الموقع غير متوافقة مع حد الاستيراد/التصدير.
على سبيل المثال:
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": "<Unix Timestamp>",
"fields": {
"<Component Policy>": "<Policy Type>",
"<Component Power Setpoint>": <Setpoint in watts>,
"site_export": <Export Limit W>,
"site_import": <Import Limit W>,
"site_setpoint": <Setpoint W>,
"site_startChargeBelow_W": <Value_W>
}
}التحكم في الأجهزة
يمكن أيضًا التحكم في أجهزة محددة بدلًا من مجموعات الأجهزة المستندة إلى أنواعها. وتكون الرسالة منظمة بالطريقة نفسها:
nodeId_policy وnodeId_power_setpoint_w
ملاحظة
عند إرسال أمرين إلى الأصل نفسه (مثل أمر خاص بجهاز إلى عاكس شمسي، وأمر إلى جميع الأجهزة الشمسية)، ستُعطى الأولوية لطريقة التحكم الخاصة بالجهاز على التحكم حسب نوع الجهاز.
السلوك الاحتياطي
لكل مكوّن، إذا لم يتم تحديد _policy و _power_setpoint_w، فسيستخدم النظام تلقائيًا السياسة الاحتياطية المكوّنة في SmartgridOne Controller. ويضمن ذلك تشغيل كل جهاز أو مجموعة أجهزة بأمان واستمرار عملها حتى عند عدم توفير تعليمات محددة.
إذا لم يتم إرسال أي أمر على الإطلاق، فستُعاد تفعيل السياسات الافتراضية للأصول بعد 60 ثانية (أو بعد فترة المهلة المكوّنة).
إلغاء الأوامر الحالية والرجوع إلى أوضاع التحكم المحلية
يمكن إلغاء أمر نشط بإرسال رسالة أمر احتياطي.
الأمر الاحتياطي
سيؤدي الأمر الاحتياطي إلى إلغاء الأمر الحالي فورًا، وستتولى SmartgridOne Controller التحكم في التركيب. وتعتمد السياسة المنفذة على الإعداد المحدد في "إعدادات" SmartgridOne Controller.
يمكن استخدام ذلك أيضًا في الحالات التي تُستخدم فيها إشارة تحكم ثانوية، مثل جدول، كإجراء احتياطي.
أمثلة على الرسائل:
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": "<Unix Timestamp>",
"fields": {
"<Component Policy>": "fallback",
}
}الأمر الفارغ
يمكن إرسال أمر فارغ في أي وقت لجمع معلومات الموقع. ولن يؤدي ذلك إلى إلغاء الأمر الحالي.
تكون بنية الأمر الفارغ كما يلي:
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": "<Unix Timestamp>",
"fields": {}
}مثال على الحمولة
فيما يلي مثال على حمولة لضبط سياسات ونقاط ضبط مختلفة:
{
"extraTags": {
"nodeId": "OM12404080000000000_site_0"
},
"time": 1714652046,
"fields": {
"solar_policy": "setpoint",
"solar_power_setpoint_w": 5000,
"storage_policy": "setpoint",
"storage_power_setpoint_w": -5000
}
}في هذا المثال، تُضبط قدرة الطاقة الشمسية لإنتاج ما يصل إلى 5000 واط، ويُضبط نظام تخزين الطاقة للشحن أو التفريغ بمعدل 5000 واط، تبعًا لإشارة قيمة نقطة الضبط. إذا تم حذف solar_policy أو storage_policy، فسيعود الجهاز المعني إلى الإعدادات الافتراضية التي يحددها SmartgridOne Controller.
وثائق MQTT لتلقي رسائل feedback
يوضح هذا القسم بنية ومحتوى رسائل feedback التي يرسلها SmartgridOne Controller عبر MQTT. وتُنشر هذه الرسائل في الموضوع standard1/outbound/remoteControlMetrics/feedback/<Controller SN> بعد معالجة الأمر.
موضوع MQTT لرسائل feedback
يُهيكل موضوع MQTT لرسائل feedback كما يلي:
standard1/outbound/remoteControlMetrics/feedback/<Controller SN>
يجب استبدال <Controller SN> بالرقم التسلسلي لـ SmartgridOne Controller الذي يرسل رسالة feedback.
بنية حمولة MQTT لرسائل feedback
ملاحظة
تُجمع جميع الأصول حسب نوعها. وهذا يعني أن تركيبتين شمسيتين منفصلتين بقدرة 3 kW ستُعاملان كأصل واحد بقدرة 6 kW.
تُنسق رسائل feedback كحمولات JSON. وتوفر هذه الحمولات معلومات تفصيلية عن حالة النظام بعد تطبيق أوامر نقاط الضبط، مع مراعاة حدود الشبكة/الجهاز. فيما يلي بنية حمولة feedback مع أوصاف حقولها:
{
"time": "<Unix Timestamp>",
"data": {
"state": {
"grid": {
"active_power_W": <Grid Active Power in Watts>,
"today_imported_energy_Wh": <Grid Imported Energy in Watt-hours>,
"today_exported_energy_Wh": <Grid Exported Energy in Watt-hours>,
"import_limit_W": <Grid Import Limit in Watts>,
"export_limit_W": <Grid Export Limit in Watts>,
},
"storage": {
"energy_stored_Wh": <Energy Stored in Watt-hours>,
"energy_capacity_Wh": <Total Energy Capacity in Watt-hours>,
"mean_soc_perc": <Mean State of Charge Percentage>,
"active_power_W": <Active Power in Watts>,
"executed_power_W": <Power Setpoint Sent to Devices in Watts>,
"executed_policy": <Policy Executed by the Controller>,
"max_charge_power_W": <Maximum Charge Power in Watts>,
"max_discharge_power_W": <Maximum Discharge Power in Watts>,
"today_charged_Wh": <Energy Charged Today in Watt-hours>,
"today_discharged_Wh": <Energy Discharged Today in Watt-hours>,
"realised_charge_power_W": <Adapted maximum charge power>,
"realised_discharge_power_W": <Adapted maximum discharge power>,
"constraint_ph0_label": <Constraint reason for limiting power setpoint>,
"errorCodes": <Error status messages per device>,
"nr_devices": <Number of Controlled Storage Devices Installed>
},
"solar": {
"active_power_W": <Solar Active Power in Watts>,
"executed_power_W": <Power Setpoint Sent to Devices in Watts>,
"executed_policy": <Policy Executed by the Controller>,
"capacity_W": <Solar Capacity in Watts>,
"today_energy_Wh": <Energy Produced Today in Watt-hours>,
"constraint_ph0_label": <Constraint reason for limiting power setpoint>,
"errorCodes": <Error status messages per device>,
"nr_devices": <Number of Controlled Solar Devices Installed>
},
"heat_pump": {
"executed_policy": <Policy Executed by the Controller>,
"operation_modes": <Heatpump Operation Modes>,
"executed_power_W": <Power Setpoint Sent to Devices in Watts>,
"constraint_ph0_label": <Constraint reason for limiting power setpoint>,
"errorCodes": <Error status messages per device>,
"nr_devices": <Number of Controlled Heat Pump Devices Installed>
},
"switched_load": {
"executed_policy": <Policy Executed by the Controller>,
"devices_on": <Number of Devices On>,
"devices_off": <Number of Devices Off>,
"executed_power_W": <Power Setpoint Sent to Devices in Watts>,
"constraint_ph0_label": <Constraint reason for limiting power setpoint>,
"errorCodes": <Error status messages per device>,
"nr_devices": <Number of Controlled Switched Load Devices Installed>
},
"variable_load": {
"active_power_W": <Power of the device in Watts>,
"ev_charging": <How many EVs are currently charging>,
"ev_not_charging": <How many EVs are currently unconnected>,
"executed_policy": <Policy Executed by the Controller>,
"executed_power_W": <Power Setpoint Sent to Devices in Watts>,
"ev_requiring_charge": <Does the EV require charge>,
"currentL1_A": <Current of the device on phase 1 in Ampere>,
"currentL2_A": <Current of the device on phase 2 in Ampere>,
"currentL3_A": <Current of the device on phase 3 in Ampere>,
"executed_current_A": <Current Setpoint Sent to Devices in Ampere>,
"today_charged_Wh": <Energy Charged Today in Watt-hours>,
"today_discharged_Wh": <Energy Discharged Today in Watt-hours>,
"total_charged_Wh": <Total Energy Charged in Watt-hours>,
"total_discharged_Wh": <Total Energy Discharged in Watt-hours>,
"min_charge_current_A": <Minimum Charge in Ampere>,
"max_charge_current_A": <Maximum Charge in Ampere>,
"allow_zero_current": <Does the Charger Support Pausing>,
"current_charging_session": {
"pluginTime": <The session start time>,
"endTime": <The session end time>,
"firstChargingStartTime": <The time when the vehicle first charged>,
"isFull": <Is the vehicle fully charged or not>,
"chargedEnergy_Ws": <How much energy has been charged this session>,
"usedPhases": <The list of phases used during charging>,
"historicMaxChargeCurrent_A": <The maximum current at which the vehicle was charged during the session>
},
"previous_charging_session": {
"pluginTime": <The session start time>,
"endTime": <The session end time>,
"firstChargingStartTime": <The time when the vehicle first charged>,
"isFull": <Is the vehicle fully charged or not>,
"chargedEnergy_Ws": <How much energy has been charged this session>,
"usedPhases": <The list of phases used during charging>,
"historicMaxChargeCurrent_A": <The maximum current at which the vehicle was charged during the session>
},
"constraint_ph0_label": <Constraint reason for limiting power setpoint>,
"errorCodes": <Error status messages per device>,
"nr_devices": <Number of Variable Power Load Devices Installed>
}
},
"error": {
<Errors occured during driver execution>
}
"response_code": <Response Code>
},
"fields": {},
"requestTime": "<Unix Timestamp>",
"time": "<Unix Timestamp>",
"siteNodeId": "<Controller SN>_site_0"
}وصف الحقول
- time (Integer): طابع زمني لـ Unix يحدد وقت إرسال رسالة feedback.
- requestTime (Integer): طابع زمني لـ Unix يحدد وقت إرسال رسالة التحكم الأصلية.
- siteNodeId (String): معرّف nodeId للموقع الذي يرسل رسالة feedback.
- fields (Object): كائن فارغ
- data (Object):
- state (Object):
- vpp_id (String): معرّف محطة الطاقة الافتراضية المرتبطة بهذا الجهاز.
- grid (Object):
- active_power_W (Float): القدرة الفعالة الحالية على الشبكة بالواط.
- today_imported_energy_Wh (Float): إجمالي الطاقة المسحوبة من الشبكة اليوم بالواط-ساعة. ملاحظة: يُحتسب اليوم وفق توقيت UTC.
- today_exported_energy_Wh (Float): إجمالي الطاقة المحقونة إلى الشبكة اليوم بالواط-ساعة. ملاحظة: يُحتسب اليوم وفق توقيت UTC.
- import_limit_W (Float): حد استيراد الشبكة بالواط.
- export_limit_W (Float): حد تصدير الشبكة بالواط.
- storage (Object): معلومات نظام التخزين، بما في ذلك الطاقة المخزنة والسعة وحالة الشحن والقدرات المنفذة والحدود والأخطاء وعدد الأجهزة.
- solar (Object): معلومات القدرة الشمسية الحالية والسعة والطاقة المنتجة والسياسة المنفذة والحدود والأخطاء وعدد الأجهزة.
- heat_pump (Object): معلومات سياسة المضخة الحرارية ووضع التشغيل والقدرة والأخطاء والحدود وعدد الأجهزة.
- switched_load (Object): معلومات السياسة والأجهزة قيد التشغيل والإيقاف والقدرة والحدود والأخطاء وعدد الأجهزة.
- variable_load (Object): معلومات قدرة شحن المركبات الكهربائية، والتيارات على الأطوار، والطاقة المشحونة والمفرغة، وجلسات الشحن، والحدود والأخطاء وعدد الأجهزة.
- nodeId (Object): إذا تم تضمين nodeId في الأمر، فستتضمن رسالة feedback حالة الجهاز المقابلة.
- response_code (Int): يوضح حالة العملية. تشير القيمة 0 عادةً إلى النجاح، بينما قد تشير القيم الأخرى إلى أنواع مختلفة من الأخطاء أو معلومات الحالة.
- state (Object):
تسميات قيود التخزين
يمكن أن يحد نظام EMS داخليًا من نقاط الضبط المرسلة بواسطة إشارة خارجية. يقدم الجدول أدناه نظرة عامة على القيود المحتملة لحقل feedback constraint_ph0_label.
| التسمية | أنواع العقد | الوصف |
|---|---|---|
breaker_current | الموقع | تيار قاطع الدائرة على مستوى الموقع |
max_charge_current (EV) | EV | الحد الأقصى لتيار الشحن. |
min_charge_current | EV | الحد الأدنى لتيار الشحن. |
nom_current | EV | حد التيار الاسمي للجهاز. |
max_export_power | الموقع | حد تصدير الموقع |
max_import_power | الموقع | حد استيراد الموقع |
max_charge_power | EV، Storage | الحد الأقصى لقدرة الشحن. |
max_discharge_power | Storage | الحد الأقصى لقدرة التفريغ. |
nom_charge_power | EV، Storage | حد قدرة الشحن الاسمية. |
nom_discharge_power | Storage | حد القدرة الاسمية للتفريغ. |
nom_production_power | PV | حد القدرة الاسمية للإنتاج. |
device_reported_max_charge_power | Storage | حد أقصى لقدرة الشحن يبلّغ بها الجهاز. |
device_reported_max_charge_current | Storage | حد أقصى لتيار الشحن يبلّغ به الجهاز. |
device_reported_max_discharge_power | Storage | حد أقصى لقدرة التفريغ يبلّغ بها الجهاز. |
device_reported_max_discharge_current | Storage | حد أقصى لتيار الشحن يبلّغ به الجهاز. |
ev_charging_suspended | EV | تم إيقاف شحن المركبة الكهربائية مؤقتًا |
setpoint_power | All | نقطة الضبط هي العامل المحدِّد - لا توجد قيود داخلية. |
high_soc_limit_charge_power | Storage | الشحن محدود بسبب ارتفاع حالة شحن البطارية. |
low_soc_limit_discharge_power | Storage | التفريغ محدود بسبب انخفاض حالة شحن البطارية. |
soc_power_curve_max_charge_power | Storage | الشحن محدود بسبب منحنى القدرة لحالة الشحن. |
soc_power_curve_max_discharge_power | Storage | التفريغ محدود بسبب منحنى القدرة لحالة الشحن. |
too_low_soc_force_charge_power | Storage | الحد الأدنى لقدرة الشحن بسبب انخفاض حالة الشحن بدرجة كبيرة. |
peakshaving_charge_threshold | Storage | الشحن بسبب معلمات تقليل ذروة الحمل. |
peakshaving_discharge_threshold | Storage | التفريغ بسبب معلمات تقليل ذروة الحمل. |
self_consumption_charge_power | EV, Storage | الشحن بسبب استراتيجية الاستهلاك الذاتي. |
self_consumption_discharge_power | EV, Storage | التفريغ بسبب استراتيجية الاستهلاك الذاتي. |
self_consumption_load_power | Switched Load | الاستهلاك بسبب استراتيجية الاستهلاك الذاتي. |
external_signal_device_power_consumption_limit | EV, Switched Load | الإشارة الخارجية تحد من استهلاك الجهاز. |
external_signal_device_power_production_limit | PV | الإشارة الخارجية تحد من إنتاج الجهاز. |
external_signal_battery_charge_power_limit | Storage | الإشارة الخارجية تحد من قدرة شحن البطارية. |
external_signal_battery_discharge_power_limit | Storage | الإشارة الخارجية تحد من قدرة تفريغ البطارية. |
setpoint_current | EV | حد نقطة ضبط التيار. |
observed_max_current_demand | EV | أقصى تيار مُلاحظ تستخدمه المركبة الكهربائية. |
near_fully_charged | EV | التيار محدود بسبب اقتراب امتلاء شحن المركبة الكهربائية. |
fully_charged | EV | المركبة الكهربائية مشحونة بالكامل |
dynamic_derated_min_power | Storage | نقطة الضبط محدودة لأن الجهاز غير قادر على الوصول إلى قدرة نقطة الضبط المتوقعة. |
dynamic_derated_max_power | Storage | نقطة الضبط محدودة لأن الجهاز غير قادر على الوصول إلى قدرة نقطة الضبط المتوقعة. |
رموز أخطاء MQTT
تُجمَّع رموز الأخطاء في نطاقات تشير إلى الفئة العامة للمشكلة:
| النطاق | الفئة |
|---|---|
-200 | أخطاء الاتصال |
-300 | أخطاء الاستجابة |
-500 | أخطاء برنامج التشغيل |
-600 | أخطاء التحكم |
ترد رموز الأخطاء الفردية أدناه.
أخطاء الاتصال (200)
مشكلات الاتصال بين EMS والجهاز.
| الرمز | التسمية | الحقول الإضافية |
|---|---|---|
-204 | رفض الاتصال | |
-209 | لا يوجد مسار إلى المضيف | |
-210 | لا يوجد عنوان IP لعنوان MAC |
أخطاء الاستجابة (300)
الجهاز متصل، لكن استجاباته غير صالحة.
| الرمز | التسمية | الحقول الإضافية |
|---|---|---|
-300 | خطأ: الجهاز غير متاح | |
-310 | خطأ: لا توجد استجابة | |
-402 | خطأ في حالة الجهاز | Message |
أخطاء التحكم (600)
| الرمز | التسمية | الحقول الإضافية |
|---|---|---|
-600 | خطأ: تم تجاهل نقطة الضبط | |
-602 | خطأ: تم رفض نقطة الضبط |
أخطاء القياس ونقطة الضبط (1000)
| الرمز | التسمية | الحقول الإضافية |
|---|---|---|
-1000 | لا توجد قياسات | |
-1001 | لا توجد قياسات للقدرة | |
-1003 | لا توجد نقطة ضبط للقدرة | |
-1005 | لم تتم متابعة نقاط الضبط | nomPowerDeviation_frac, setpointDeviation_frac |
-1006 | لم تتم متابعة الحدود |
إصدارات MQTT المدعومة والسلوك عند استخدام مواضيع غير مصرّح بها
عند استخدام MQTT، من المهم مراعاة الاختلافات في المواصفات بين الإصدارات 3.1 و3.1.1 و5.0، لا سيما فيما يتعلق بسلوك الوسيط عندما ينشر العملاء إلى مواضيع غير مصرّح بها.
وفقًا لمواصفة MQTT 3.1.1 (راجع مواصفة OASIS MQTT 3.1.1، القسم MQTT-3.3.5-2)، يجب على الوسيط إنهاء الاتصال بمجرد أن يرسل العميل رسالة PUBLISH إلى موضوع لا يملك صلاحية الوصول إليه. وقد يؤدي هذا السلوك إلى قطع اتصال غير متوقعة للعملاء الذين يحاولون النشر إلى مواضيع تمت تهيئتها بشكل غير صحيح أو غير مصرّح بها.
لا يوجد هذا المتطلب في MQTT 3.1. عندما ينشر العميل إلى موضوع غير مصرّح به في هذا الإصدار، يتجاهل الوسيط عادةً الرسالة (إسقاط صامت) من دون إنهاء الاتصال. وهذا يجعل MQTT 3.1 أكثر ملاءمة في بعض الحالات عندما تكون المتانة في مواجهة أخطاء التكوين أو الصلاحيات المفقودة مؤقتًا أهم من التطبيق الصارم للأمان.
على الرغم من أن MQTT 5.0 يتيح استخدام رموز السبب (مثل PUBACK مع سبب الرفض)، فإن ذلك يتطلب دعمًا من جانبَي العميل والخادم. ولذلك، يتطلب الانتقال إلى MQTT 5.0 جهدًا إضافيًا في التنفيذ.
عواقب تجاهل التوافق: إذا اتصل العميل باستخدام MQTT 3.1.1 وحاول نشر رسائل إلى مواضيع غير مصرّح بها، فسينهي الوسيط الجلسة بشكل مفاجئ. وقد يؤدي ذلك إلى عدم الاستقرار أو فقدان الاتصال أو زيادة الحمل بسبب محاولات إعادة الاتصال المتكررة.
النهج الموصى به: بالنسبة إلى الأنظمة التي قد يحاول فيها العملاء (مؤقتًا) النشر إلى مواضيع غير مصرّح بها، أو التي لم تُنفَّذ فيها معالجة الأخطاء بشكل صارم، نوصي باستخدام MQTT 3.1. فهذا يضمن اتصالات أكثر استقرارًا ويتجنب قطع الاتصال غير المقصود أثناء وقت التشغيل.
