ZCL Advanced Platform (ZAP)

ZCL Advanced Platform (ZAP) হল একটি node.js টেমপ্লেট ইঞ্জিন যা Matter ক্লাস্টার-এর উপর ভিত্তি করে তৈরি।

ZAP, Matter অ্যাপ ও SDK-এর জন্য নিম্নলিখিত ফিচার প্রদান করে:

  • GUI ইন্টারফেস থেকে Matter এন্ডপয়েন্ট, ক্লাস্টার, অ্যাট্রিবিউট ও অন্যান্য ডিভাইস ফিচার কনফিগার করুন।
  • এমন টেমপ্লেট তৈরি করুন যা অটোমেটিক ডেটা মডেলের সংজ্ঞা, কলব্যাক এবং অন্যান্য Matter সোর্স কোড জেনারেট করে।
  • আপনার SDK-এর সাথে অন্তর্ভুক্ত করার জন্য আগে থেকে কনফিগার করা ZAP ফাইল তৈরি ও ব্যবহার করুন।
ZAP টুল

ইনস্টল করুন

  1. ZAP রিলিজ পৃষ্ঠায় যান।

  2. "লেটেস্ট" ট্যাগ করা রিলিজটি খুঁজুন (বেশিরভাগই "প্রি-রিলিজ" ট্যাগ করা হবে)।

  3. এই রিলিজের অধীনে, অ্যাসেট শীর্ষক বিকল্পের অধীনে, আপনার অপারেটিং সিস্টেমের জন্য নির্দিষ্ট করা প্যাকেজটি বেছে নিন এবং এটি ডাউনলোড করুন।

  4. Debian বা Ubuntu-তে চলা মেশিনে, এটি রান করে ZAP ইনস্টল করুন:

    sudo dpkg -i path/to/zap_installation_package

Debian বা Ubuntu Linux-এ, zap বাইনারি /usr/bin/-এ ইনস্টল করা হয়। অন্যান্য অপারেটিং সিস্টেমে, বাইনারি অন্য কোথাও ইনস্টল করা হতে পারে। যেকোনও ক্ষেত্রে, এক্সিকিউটেবল ফাইলের লোকেশন আপনার PATH এনভায়রনমেন্ট ভেরিয়েবলে আছে কিনা তা চেক করে দেখুন।

ZAP ফাইল

ZAP-এ টেমপ্লেট ফাইল ব্যবহার করা হয়, যেগুলিকে ZAP ফাইল বলা হয়। ZAP ফাইল হল একটি JSON ফাইল যা এন্ডপয়েন্ট, কমান্ড, অ্যাট্রিবিউট এবং অন্যান্য ডিভাইসের ফিচার সংজ্ঞায়িত করে। ZAP ফাইলের নামের শেষে .zap থাকে। যেমন, connectedhomeip/examples/lighting-app/lighting-common-এ lighting-app.zap।

all-clusters-app.zap ফাইলটি, connectedhomeip/examples/all-clusters-app/all-clusters-common-এ পাওয়া গেছে, সাধারণ Matter ক্লাস্টার এবং তিনটি এন্ডপয়েন্ট সহ আগে থেকে কনফিগার করা আছে, যার মধ্যে একটি Matter সেকেন্ডারি নেটওয়ার্ক কমিশনিং ডিভাইসের ধরন অন্তর্ভুক্ত। বিভিন্ন ক্লাস্টার কনফিগারেশন এক্সপ্লোর করার জন্য এটি একটি ভালো উদাহরণ।

চালান

  1. Matterটি উদাহরণের মধ্যে থেকে একটি ZAP ফাইল বেছে নিন।
  2. Matter রিপোজিটরির (connectedhomeip) রুট ডিরেক্টরি থেকে, run_zaptool.sh র‍্যাপার স্ক্রিপ্ট রান করুন, এটি .zap ফাইলের পাথ পাস করে।

যেমন:

./scripts/tools/zap/run_zaptool.sh ./examples/lighting-app/lighting-common/lighting-app.zap

সেট-আপ করুন

সেটিংস থেকে আপনি ZAP ইউজার ইন্টারফেস কনফিগার করতে পারবেন, যার মধ্যে রয়েছে লাইট বা ডার্ক থিম বেছে নেওয়া এবং ডেভেলপার টুল চালু বা বন্ধ করা।

বিকল্প-এ ক্লিক করলে আপনি প্রোডাক্ট প্রস্তুতকারক, ডিফল্ট উত্তর দেওয়ার নীতি বেছে নিতে এবং কমান্ড ডিসকভারি চালু বা বন্ধ করতে পারবেন।

ZAP গ্লোবাল বিকল্প

Zigbee Clusters Configurator-এ কাস্টম ZCL ক্লাস্টার বা কমান্ড যোগ করতে, এক্সটেনশন বিকল্পে ক্লিক করুন।

ব্যবহার করুন

এন্ডপয়েন্ট

lighting-app.zap ফাইলটি Matter রুট নোড (এন্ডপয়েন্ট - ০) এবং একটি Matter ডিম করা যায় এমন আলো (এন্ডপয়েন্ট - ১) দিয়ে আগে থেকে কনফিগার করা আছে।

Endpoint - 0-এ সাধারণ ক্লাস্টার অন্তর্ভুক্ত থাকে যা সম্পূর্ণ নোডের সাথে প্রাসঙ্গিক, যেমন নেটওয়ার্কিং, কমিশনিং, ডেসক্রিপ্টর, অপারেশনাল ক্রেডেনশিয়াল ও OTA ক্লাস্টার।

ZAP এন্ডপয়েন্ট ০

পরবর্তী ধাপে, আপনি Endpoint - 1 Matter ডিম করা যায় এমন আলো lighting-app উদাহরণ থেকে পর্যালোচনা ও কনফিগার করবেন।

  1. Matter রেপো connectedhomeip থেকে, ZAP চালান।

    scripts/tools/zap/run_zaptool.sh \
    examples/lighting-app/lighting-common/lighting-app.zap
  2. এন্ডপয়েন্ট - ১, তারপর এডিট করুন বিকল্পে ক্লিক করুন।

  3. ঐচ্ছিক: Matter বিভিন্ন ধরনের ডিভাইসে কাজ করে। ডিভাইস ড্রপডাউন মেনুতে, আপনার ডিভাইস পরিবর্তন করতে matter টাইপ করা শুরু করুন, তারপর সেভ করুন বিকল্পে ক্লিক করুন।

    ZAP Select Device

আরও জানতে, Matter প্রাইমারে ডিভাইস ও এন্ডপয়েন্ট দেখুন।

ক্লাস্টার

Endpoint - 1-এ আগে থেকে নির্ধারিত ক্লাস্টার, অ্যাট্রিবিউট ও রিপোর্টিং সংক্রান্ত বিকল্প ডিফল্ট হিসেবে চালু করা থাকে।

শুধুমাত্র চালু থাকা ক্লাস্টার দেখতে, Endpoint - 1-এ ক্লিক করুন এবং দেখুন মেনু থেকে চালু থাকা ক্লাস্টার বেছে নিন। এছাড়াও, আপনি নাম দিয়ে ক্লাস্টার সার্চ করতে পারবেন, যেমন on।

ZAP চালু করা ক্লাস্টার

ক্লায়েন্ট, সার্ভার বা ক্লায়েন্ট ও সার্ভার হিসেবে যেকোনও ক্লাস্টার চালু করতে, চালু করুন ড্রপডাউন ব্যবহার করুন। এছাড়াও, আপনার ডিভাইসের ধরনের ক্ষেত্রে প্রযোজ্য নয় এমন প্রি-কনফিগার করা ক্লাস্টার বন্ধ করতে, আপনি চালু নেই বিকল্প বেছে নিতে পারেন।

ZAP ক্লাস্টার বন্ধ করুন

আরও জানতে, Matter প্রাইমারে ক্লাস্টার দেখুন।

অ্যাট্রিবিউট ও কমান্ড

অ্যাট্রিবিউট ও কমান্ড কনফিগার করতে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:

  1. On/Off ক্লাস্টারের লোকেশন নির্ণয় করুন।
  2. একই সারিতে, 'কনফিগার করুন' আইকনে ক্লিক করুন।

    ZAP কনফিগার করুন

এখানে আপনি অ্যাট্রিবিউট চালু বা বন্ধ করতে, বিভিন্ন অ্যাট্রিবিউট বিকল্প সেট করতে এবং নাম দিয়ে অ্যাট্রিবিউট সার্চ করতে পারবেন।

ZAP অ্যাট্রিবিউট

এই ক্লাস্টারের জন্য অ্যাকশন কনফিগার করতে কমান্ড বিকল্পে ক্লিক করুন। যেমন, কোনও লাইটের জন্য চালু/বন্ধ ক্লাস্টারে চালু, বন্ধ এবং টগল কমান্ড অন্তর্ভুক্ত থাকবে। কিছু ক্লাস্টার, যেমন Temperature Measurement ক্লাস্টারের সাথে কোনও কমান্ড যুক্ত নাও থাকতে পারে।

ZAP কমান্ড

আরও জানতে, Matter প্রাইমারে অ্যাট্রিবিউট ও কমান্ড দেখুন।

ZAP সোর্স ফাইল জেনারেট করুন

Matter উদাহরণ ZAP জেনারেটেড সোর্স কোড ব্যবহার করে, যা connectedhomeip/zzz_generated ডিরেক্টরিতে উপলভ্য। কিছু ফাইল অ্যাপ-নির্দিষ্ট, অন্যান্য সাধারণ ZAP ফাইল app-common-এ গ্রুপ করা হয়।

#include <app-common/zap-generated/ids/Attributes.h>
#include <app-common/zap-generated/ids/Clusters.h>

আপনার এন্ডপয়েন্ট কনফিগার করা হয়ে গেলে, আপনার প্রোজেক্টে ইন্টিগ্রেট করার জন্য সোর্স ফাইল জেনারেট করতে পারবেন।

  1. জেনারেট করুন বিকল্পে ক্লিক করুন।
  2. ZAP আউটপুট সেভ করার জন্য একটি ফোল্ডার বেছে নিন। যেমন, lighting-app-এর জন্য connectedhomeip/zzz_generated/lighting-app/zap-generated-এ নেভিগেট করুন।
  3. ঐচ্ছিক। আপনার পছন্দের IDE-তে ফাইল খুলুন।

ZAP আপনার ডিভাইসের ধরন ও ZAP কনফিগারেশনের জন্য কাস্টমাইজ করা সংজ্ঞা, ফাংশন ও অন্যান্য সোর্স কোড তৈরি করে।

ZAP জেনারেটেড ফাইল

যেমন, callback-stub.cpp-এ ক্লাস্টার কলব্যাক পদ্ধতি অন্তর্ভুক্ত থাকে, যেখানে শুধুমাত্র আপনার চালু করা ক্লাস্টার অন্তর্ভুক্ত থাকে:

void emberAfClusterInitCallback(EndpointId endpoint, ClusterId clusterId)
{
    switch (clusterId)
    {
     ...
     case ZCL_ON_OFF_CLUSTER_ID :
        emberAfOnOffClusterInitCallback(endpoint);
        break;
     ...
    }
}

ZAP সোর্স ফাইল ব্যবহার করুন

সাধারণ ZAP সোর্স ফাইল, যেমন Attributes.h-এ zzz_generated/app-common/app-common/zap-generated/ids/, ডিভাইসের ধরন সংক্রান্ত অ্যাট্রিবিউট পেতে ও সেট করতে ব্যবহার করা যেতে পারে:

Attributes.h

namespace DeviceTemperatureConfiguration {
  namespace Attributes {

  namespace CurrentTemperature {
    static constexpr AttributeId Id = 0x00000000;
    } // namespace CurrentTemperature

  ...

  } // namespace Attributes
} // namespace DeviceTemperatureConfiguration

main.cpp

#include <app-common/zap-generated/att-storage.h>
#include <app-common/zap-generated/attribute-id.h>
#include <app-common/zap-generated/attribute-type.h>
#include <app-common/zap-generated/attributes/Accessors.h>
#include <app-common/zap-generated/callback.h>
#include <app-common/zap-generated/cluster-id.h>
#include <app-common/zap-generated/cluster-objects.h>
#include <app-common/zap-generated/command-id.h>

using namespace ::chip;
using namespace ::chip::app::Clusters;

static void InitServer(intptr_t context)
{
    ...

    // Sets temperature to 20C
    int16_t temperature = 2000;
    auto status         = DeviceTemperatureConfiguration::Attributes::CurrentTemperature::Set(1, temperature);
    if (status != EMBER_ZCL_STATUS_SUCCESS)
    {
        ChipLogError(Shell, "Temp measurement set failed");
    }
}

Matter সোর্স কোডে ZAP ফাইল কীভাবে ব্যবহার করা যায় তা বুঝে গেলে, আপনি বিভিন্ন উপায়ে ZAP ইন্টিগ্রেট করতে পারবেন:

  • আপনার ডিভাইসের ধরন অনুযায়ী অনন্য নতুন উদাহরণ তৈরি করতে, আগে থেকে থাকা zzz_generated ফাইল ব্যবহার করুন।
  • আপনার প্রোজেক্টের জন্য কাস্টম .zap ফাইল তৈরি করুন।

কাস্টমাইজ করুন

ZAP টেমপ্লেট থেকে ZAP ফাইল তৈরি করা হয়। ZAP লঞ্চ করার জন্য আপনি run_zaptool.sh ব্যবহার করলে, এই স্ক্রিপ্ট নিম্নলিখিত টেমপ্লেট পাস করে:

node src-script/zap-start.js --logToStdout \
    --gen "$CHIP_ROOT/src/app/zap-templates/app-templates.json" \
    --zcl "$CHIP_ROOT/src/app/zap-templates/zcl/zcl.json" \
    "${ZAP_ARGS[@]}"

templates.json Matter টেমপ্লেটের নাম এবং Matter উদাহরণে ব্যবহৃত সংশ্লিষ্ট আউটপুট ফাইলকে সংজ্ঞায়িত করে।

{
    "path": "templates/app/callback-stub-src.zapt",
    "name": "ZCL callback-stub source",
    "output": "callback-stub.cpp"
}

আপনার Matter সমাধান কাস্টমাইজ করতে, ZAP-এর সাথে কাজ করার সময় আপনি নিতে পারেন এমন বেশ কয়েকটি পরবর্তী পদক্ষেপ রয়েছে:

রিসোর্স

ZAP-এর অতিরিক্ত রিসোর্সের জন্য, GitHub-এ ZAP রেপো (zap) দেখুন।