SmartgridOne logo
SmartgridOne logo
إرشادات التوصيل والاتصالإشعارات السلامة والصيانة والإشعارات القانونية
استكشاف الأخطاء وإصلاحها
الأجهزة
الإشارات الخارجية
DSO

AgrolaAutarcoAxpoBEE EnergyCKWCompanion EnergyDexterDNO Relay ControlEdmijElia
Elindus
EnervalisEngieEPEX Spot SolarEuropean CommoditiesFleco PowerFlowerFrank EnergieFuseboxGreenchoiceHallostroomHive PowerImbyKratTrade
Mqtt
FCRإعداد MQTTالتحكم المباشر عبر MQTTالتحكم المجدول عبر MQTTتدفق الإعداد الأوليخطوط الأساسمحطة الطاقة الافتراضية
Next EnergyOpinumPleeviPowernautRepoweredScholt
TrevionVGT EnergyvZEV - مجتمع الطاقةYuso - التحكم في البطاريةYuso - تقليل إنتاج الطاقة الشمسيةالاختبارات التشخيصيةالتداول الديناميكي للطاقةالتكاملات الجديدة
المراقبة
تكامل الفقرة 14aحلول مرونة الطاقة (EFS)واجهة برمجة تطبيقات التخطيط المسبق
البدء السريعالتثبيتالترخيص
التكوين من الألف إلى الياء
الشبكةالشهادات
الملحقات
المواصفاتتطبيق
خاص بالعميل
دروس الفيديوزمن استجابة التحكم
صندوق الأدوات
مصابيح LED للحالةوحدة التحكم
الإشارات الخارجيةMqtt

التحكم المجدول عبر MQTT

نصيحة
نصيحة

يُستخدم التحكم المجدول عبر MQTT لإرسال الرسائل المجدولة مسبقًا. للتحكم المباشر، راجع التحكم المباشر عبر MQTT بدلًا من ذلك.

سيساعدك هذا الدليل على تكوين MQTT على SmartgridOne Controller للتحكم عن بُعد في تركيبات البطاريات والألواح الشمسية ومراقبتها.

سيساعدك هذا الدليل على تكوين MQTT على SmartgridOne Controller للتحكم عن بُعد في تركيبات البطاريات والألواح الشمسية ومراقبتها.

التكوين لأول مرة (نقطة البداية للمستخدمين الجدد)

لديّ SmartgridOne Controller وأرغب في إعداده للتحكم عن بُعد عبر MQTT.

قبل المتابعة، تأكد من أن شبكتك وأجهزتك جاهزة من خلال اتباع دليل إعداد MQTT.

1. إضافة الإشارة الخارجية لـ MQTT

Image 1
Image 1
Image 1

2. تمكين الإشارة البعيدة لـ MQTT

حدد جميع الأجهزة التي ترغب في تضمينها في التحكم عن بُعد عبر MQTT.

Image 1

3. تمت إضافة الإشارة البعيدة

تم الآن تفعيل واجهة التحكم عن بُعد عبر MQTT على SmartgridOne Controller.

نحن الآن مستعدون لإرسال بعض الأوامر الأساسية باستخدام مثال بسيط. يوضح لك عمود الحالة ما إذا كان أي أمر نشطًا.

نص برمجي تجريبي بلغة Python

من أفضل نقاط البداية اختبار التكامل الذي أعددته حديثًا باستخدام مثال بسيط.

ينفذ هذا الرمز البرمجي مهمة بسيطة تتمثل في إرسال الجدول التالي باستمرار:

  • البطارية: الشحن بقدرة 5 كيلوواط لمدة 15 دقيقة بعد 10 دقائق
  • الطاقة الشمسية: ضبط القدرة على 0 كيلوواط لمدة ساعة بعد 30 دقيقة

تستجيب SmartgridOne Controller برسالة إقرار تحتوي على معرّف الجدول الفريد، أو برسالة خطأ.

بعد ذلك، نجلب الجدول التالي لكلا نوعي الجهازين، للتأكد من نجاح الأمر.

يُرجى تنزيل الملف أدناه في بيئة تطوير Python المفضلة لديك. أدخل الرقم التسلسلي وبيانات اعتماد MQTT ثم نفّذ البرنامج النصي:

عند نجاح ما سبق، يمكنك متابعة إرسال أنواع أخرى من الرسائل. نوضح جميع الرسائل أدناه.

وثائق MQTT لإرسال الأوامر

يوضح هذا القسم تنسيق رسائل MQTT ومتطلبات الحمولة لإعداد التحكم المجدول بالأجهزة ضمن شبكة SmartgridOne Controller.

مواضيع MQTT

  • موضوع الاشتراك: standard1/rp_one_s/remoteScheduleMetrics/<controller SN>
  • موضوع الملاحظات: standard1/outbound/remoteScheduleMetrics/feedback/<controller SN>

حيث يجب استبدال <controller SN> بالرقم التسلسلي الفعلي لـ SmartgridOne Controller الذي تنوي التحكم فيه.

أنواع رسائل MQTT

1. تعيين جدول (set_schedule)

ينشئ جدولًا جديدًا لنوع من الأجهزة.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "set_schedule",
    "fields": {
        "device_type": "<Device Type>",
        "node_id": "<Node ID>" (Optional),
        "start_time": <Unix Timestamp>,
        "end_time": <Unix Timestamp>,
        "policy": "<Policy>",
        "power_setpoint_w": <Setpoint in watts>,
        "site_import": <Site Import in Watts>,
        "site_export": <Site Export in Watts>,
        "remove_overlap": <True/False> (Optional) (default=False),
        "tag": <Tag String> (Optional) (default=None),
    }
}

الاستجابة (نجاح):

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "set_schedule_ack",
        "state": {
            "schedule_id": <Schedule ID>,
            "deleted_ids": <Schedulde IDs deleted if remove_overlap=True>
            "tag": <Tag String> (default=None),
        },
        "responseCode": 0
    }
}

2. تعيين جداول (set_schedules)

ينشئ جداول جديدة متعددة.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "set_schedules",
    "fields": 
        "0": "{
            "device_type": "<Device Type>",
            "node_id": "<Node ID>" (Optional),
            "start_time": <Unix Timestamp>,
            "end_time": <Unix Timestamp>,
            "policy": "<Policy>",
            "power_setpoint_w": <Setpoint in watts>,
            "site_import": <Site Import in Watts>,
            "site_export": <Site Export in Watts>,
            "remove_overlap": <True/False> (Optional) (default=False),
        }",
        "1": "{
            "device_type": "<Device Type>",
            "node_id": "<Node ID>" (Optional),
            "start_time": <Unix Timestamp>,
            "end_time": <Unix Timestamp>,
            "policy": "<Policy>",
            "power_setpoint_w": <Setpoint in watts>,
            "site_import": <Site Import in Watts>,
            "site_export": <Site Export in Watts>,
            "remove_overlap": <True/False> (Optional) (default=False),
        }",
        ...
}

الاستجابة (نجاح):

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "set_schedules_ack",
        "state": {
            "schedule_ids": <Schedule IDs>,
            "deleted_ids": <Schedulde IDs deleted if remove_overlap=True>
        },
        "responseCode": 0
    }
}

3. الحصول على جدول (get_schedule)

يسترد جدولًا محددًا حسب المعرّف.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_schedule",
    "fields": {
        "id": <Schedule ID>
    }
}

الاستجابة:

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_schedule_ack",
        "state": <Schedule>,
        "responseCode": 0
    }
}

4. الحصول على الجدول النشط (get_active_schedule)

يسترد الجدول النشط حاليًا لنوع من الأجهزة.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_active_schedule",
    "fields": {
        "device_type": "<Device Type>",
        "node_id": "<Node ID>" (Optional),
    }
}

الاستجابة (نجاح):

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_active_schedule_ack",
        "state": <Schedule>,
        "responseCode": 0
    }
}

5. الحصول على الجدول التالي (get_next_schedule)

يسترد الجدول القادم التالي لنوع من الأجهزة.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_next_schedule", 
    "fields": {
        "device_type": "<Device Type>",
        "node_id": "<Node ID>" (Optional),
    }
}

الاستجابة (نجاح):

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_next_schedule_ack",
        "state": <Schedule>,
        "responseCode": 0
    }
}

6. الحصول على الجداول (get_schedules)

يسترد جميع الجداول لتاريخ محدد.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_schedules",
    "fields": {
        "date": "<Date String of Format dd/mm/yyyy>"
    }
}

الاستجابة (نجاح):

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_schedules_ack",
        "state": {
            "schedules": [<Schedule>, ...]
        },
        "responseCode": 0
    }
}

7. الحصول على الجداول المستقبلية (get_future_schedules)

يسترد جميع الجداول المستقبلية.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_future_schedules",
    "fields": {}
}

الاستجابة (نجاح):

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_future_schedules_ack",
        "state": {
            "schedules": [<Schedule>, ...]
        },
        "responseCode": 0
    }
}

8. إزالة جدول (remove_schedule)

يزيل جدولًا محددًا حسب المعرّف.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "remove_schedule",
    "fields": {
        "id": <Schedule ID>
    }
}

الاستجابة (نجاح):

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "remove_schedule_ack",
        "state": "Schedule <Schedule ID> removed successfully",
        "responseCode": 0
    }
}

9. الحصول على ملاحظات الموقع (get_feedback)

يسترد ملاحظات مفصلة حول حالة النظام.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_feedback",
    "fields": {
        "device": <Device (node) level>
    }
}

الاستجابة (نجاح):

بنية حمولة الملاحظات

10. طوبولوجيا الموقع (get_toplogy)

يحصل على طوبولوجيا الموقع.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_topology",
    "fields": {}
}

الاستجابة (نجاح):

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_topology_ack",
        "state": {
            "nodeId": <nodeId>,
            "isControllable": <boolean>,
            "nodeType": <nodeType>,
            "nomCurrent": <nominalCurrent>
            "children": [{<ChildObject>}]
            },
        "responseCode": 0
    }
}

تنسيق استجابة الجدول القياسي

{
    "id": <Schedule ID>,
    "device_type": "<Device Type>",
    "node_id": "<Node ID>" (Optional),
    "start_time": <Unix Timestamp>,
    "end_time": <Unix Timestamp>,
    "policy": "<Schedule Policy>",
    "power_setpoint_w": <Setpoint in watts>,
    "created_at": <Unix Timestamp>
}

أنواع المكونات والسياسات

للحصول على تفاصيل حول المكونات والسياسات المتاحة التي يمكن جدولتها، راجع قسم مكونات وسياسات MQTT في وثائق التحكم المباشر عبر MQTT.

يمكن إرسال جداول خاصة بجهاز معين باستخدام الحقل الاختياري node_id، الذي يشير إلى معرّف عقدة الجهاز القابل للتحكم.

معالجة الأخطاء

يمكن أن تُرجع جميع الرسائل استجابة خطأ مع responseCode: 1 عند حدوث خطأ:

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "<Message Type>_ack",
        "error": <Error Body>,
        "responseCode": 1
    }
}

عند حدوث خطأ غير ذي صلة، سيكون نوع الرسالة هو (general_error).

تشمل الأخطاء الشائعة ما يلي:

  • تداخل الجدول مع جداول موجودة
  • نطاق زمني غير صالح
  • لم يتم العثور على نوع الجهاز
  • لم يتم العثور على معرّف الجدول
  • سياسة غير صالحة لنوع الجهاز

قواعد إدارة الجداول

  1. قواعد التداخل
    • لا يمكن أن تتداخل الجداول لنوع الجهاز نفسه
    • لا يمكن أن تتداخل الجداول للجهاز نفسه
    • لا يمكن أن تتداخل الجداول للجهاز نفسه ونوع الجهاز نفسه
    • ستُحذف الجداول الموجودة والمتداخلة إذا تم تعيين المتغير remove_overlap على True عند إنشاء جدول جديد.
  2. يجب أن يتضمن كل جدول:
    • نوع جهاز صالح
    • وقت بدء (طابع زمني Unix)
    • وقت انتهاء (طابع زمني Unix)
    • سياسة (متوافقة مع السياسات المتاحة لنوع الجهاز)
    • قيمة قدرة مستهدفة (للسياسات التي تتطلبها)
  3. يجب أن يسبق وقت البدء وقت الانتهاء
  4. إذا كان وقت البدء في الماضي، فسيتم تغييره تلقائيًا ليبدأ الآن
  5. لا يمكن حذف الجداول إلا إذا لم تكن قد بدأت بعد. لا يمكن حذف الجداول النشطة.
  6. يمكن تعيين الجداول لأنواع أجهزة مختلفة بشكل مستقل
  7. يطبّق النظام السياسة المناسبة تلقائيًا عند تنشيط الجدول
Last updated August 7, 2026Edit this page

التحكم المباشر عبر MQTT

Previous Page

تدفق الإعداد الأولي

Next Page

On this page

التحكم المجدول عبر MQTTالتكوين لأول مرة (نقطة البداية للمستخدمين الجدد)1. إضافة الإشارة الخارجية لـ MQTT2. تمكين الإشارة البعيدة لـ MQTT3. تمت إضافة الإشارة البعيدةنص برمجي تجريبي بلغة Pythonوثائق MQTT لإرسال الأوامرمواضيع MQTTأنواع رسائل MQTT1. تعيين جدول (set_schedule)2. تعيين جداول (set_schedules)3. الحصول على جدول (get_schedule)4. الحصول على الجدول النشط (get_active_schedule)5. الحصول على الجدول التالي (get_next_schedule)6. الحصول على الجداول (get_schedules)7. الحصول على الجداول المستقبلية (get_future_schedules)8. إزالة جدول (remove_schedule)9. الحصول على ملاحظات الموقع (get_feedback)10. طوبولوجيا الموقع (get_toplogy)تنسيق استجابة الجدول القياسيأنواع المكونات والسياساتمعالجة الأخطاءقواعد إدارة الجداول