ভাষার মৌলিক বিষয়

YAML বুঝুন

YAML হল সফ্টওয়্যার কনফিগারেশন নির্দিষ্ট করার জন্য ব্যবহৃত একটি জনপ্রিয় ভাষা। এটি কাঠামোগত তথ্য উপস্থাপনের জন্য একটি স্পষ্ট, মানুষের দ্বারা পাঠযোগ্য উপায় প্রদান করে। আপনার প্রথম স্ক্রিপ্টেড অটোমেশন তৈরি করার আগে YAML সম্পর্কে আপনার কিছু মৌলিক বিষয় বুঝতে হবে। সাধারণভাবে YAML সম্পর্কে আরও জানতে, সংস্করণ 1.1 স্পেসিফিকেশন দেখুন।

কী-মান জোড়া

YAML ডকুমেন্টগুলি মূলত কী-মান জোড়ার একটি সংগ্রহ। নিম্নলিখিত উদাহরণে, কী হল name এবং মান হল TV on lights off । কী এবং মান একটি কোলন দ্বারা সীমাবদ্ধ করা হয়েছে এবং তারপরে একটি স্থান দেওয়া হয়েছে। সুগঠিত YAML এর জন্য উভয় অক্ষরই প্রয়োজন।

name: TV on lights off

মূল্যবোধ

একটি কী-এর সাথে যুক্ত মান একটি স্ট্রিং, একটি সংখ্যা, অথবা একটি তারিখের মতো মৌলিক হতে পারে, অথবা কী-মান জোড়ার অন্য সংগ্রহের মতো জটিল হতে পারে।

স্ট্রিং

যদি একটি স্ট্রিং মান নিম্নলিখিত অক্ষরগুলির মধ্যে একটি দিয়ে শুরু হয়: [ , { , " , ' অথবা # , অথবা স্ট্রিংটিতে : (একটি কোলন থাকে যার পরে স্পেস থাকে), তাহলে এটি অবশ্যই উদ্ধৃত করতে হবে।

একক এবং দ্বিগুণ উদ্ধৃতি উভয়ই গ্রহণযোগ্য, তবে সমাপনী উদ্ধৃতিটি অবশ্যই শুরুর উদ্ধৃতিটির সাথে মিলতে হবে।

সঠিক উদ্ধৃতি :

name: 'TV on lights off'

name: "TV on lights off"

ভুল উদ্ধৃতি (অমিল উদ্ধৃতি):

name: 'TV on lights off"

অন্যান্য সকল ধরণের স্ট্রিংয়ের জন্য উদ্ধৃতি ঐচ্ছিক।

যদি আপনার একটি মাল্টি-লাইন স্ট্রিং প্রয়োজন হয়, তাহলে মাল্টি-লাইন স্কেলারগুলিতে YAML স্পেসিফিকেশন বিভাগটি দেখুন।

name: "[1] TV"
name: '{1} TV'
name: '#TV'
name: '"1" TV'
name: "'1' TV"
name: "\"1\" TV"
name: "TV: bedroom"

নেস্টেড কী-মান জোড়া

এখানে কী metadata মান দুটি কী-মান জোড়ার একটি তালিকা ( name এবং description ):

metadata:
  name: TV on lights off
  description: Turn off lights when TV turns on

ইন্ডেন্টেশন

YAML কাঠামো বোঝাতে ইন্ডেন্টেশন ব্যবহার করে। পূর্ববর্তী উদাহরণে, name এবং description (দুটি স্পেস দিয়ে) ইন্ডেন্ট করা হয়েছে যাতে বোঝা যায় যে এগুলি কী metadata সন্তান।

YAML-এ ইন্ডেন্টেশন কঠোর। একটি চাইল্ড স্ট্রাকচারের অবশ্যই তার প্যারেন্ট স্ট্রাকচারের চেয়ে গভীর ইন্ডেন্টেশন থাকতে হবে এবং একই স্তরের কী-মান জোড়ার একই ইন্ডেন্টেশন থাকতে হবে।

metadata:
  name:
    en: TV on lights off
  description:
    en: Turn off lights when TV turns on

একাধিক মান

যদি একটি প্রদত্ত কী-এর একাধিক মান থাকে, তাহলে প্রতিটি মান একটি নতুন লাইনে তালিকাভুক্ত করা হয় এবং প্রতিটি লাইনের শুরুতে একটি ড্যাশ এবং একটি স্পেস থাকে। নিম্নলিখিত উদাহরণে, দুটি তালিকা রয়েছে:

  1. একটি অটোমেশনে একাধিক starters থাকতে পারে এবং তাই প্রথম স্টার্টারটি একটি ড্যাশ এবং একটি স্পেস দিয়ে শুরু হয়।
  2. weekday একাধিক মান থাকতে পারে এবং তাই, প্রতিটি মান আরও ইন্ডেন্ট করা হয় এবং একটি ড্যাশ এবং একটি স্পেস দিয়ে শুরু হয়।
starters:
- type: time.schedule
  at: SUNSET
  weekday:
  - MONDAY
  - THURSDAY
  state: on

মন্তব্য

# এর পরে আসা যেকোনো লেখাকে মন্তব্য হিসেবে বিবেচনা করা হয় এবং অটোমেশন ইঞ্জিন তা উপেক্ষা করে।

# দিয়ে শুরু হওয়া লাইনটি একটি মন্তব্য।

স্ক্রিপ্টের কন্টেন্টের মতো একই লাইনে একটি মন্তব্য প্রদর্শিত হতে পারে, তবে # এর আগে একটি স্পেস থাকতে হবে

# This is a comment. It will be ignored.
name: chromecast #This is a TV.

অটোমেশন স্ক্রিপ্ট

অটোমেশন স্ক্রিপ্ট সিনট্যাক্সের স্পেসিফিকেশনকে স্কিমা বলা হয়।

অটোমেশন স্কিমা কয়েকটি ডেটা স্ট্রাকচার সংজ্ঞায়িত করে:

  • একটি একক কী-মান জোড়াকে একটি ক্ষেত্র বলা হয়।
  • স্কিমা দ্বারা সংজ্ঞায়িত ক্ষেত্রগুলির একটি সংগ্রহকে বলা হয় একটি Struct

কাঠামো

অটোমেশন স্ক্রিপ্টিং ভাষা বেশ কয়েকটি স্ট্যান্ডার্ড 'ব্লক' বা ডেটা স্ট্রাকচার সংজ্ঞায়িত করে, যাকে Structs বলা হয়।

automation স্ট্রাক্টটি একবার দেখুন, যা চারটি ক্ষেত্র সংজ্ঞায়িত করে:

চাবি আদর্শ বিবরণ

name

স্ট্রিং

ঐচ্ছিক।

অটোমেশনের নাম।

এটি ব্যবহারকারীদের দেখানো হয় না, এটি শুধুমাত্র ডেভেলপারদের রেফারেন্সের জন্য।

starters

[ শুরু ]

প্রয়োজন।

শুরু করার তালিকা।

condition

অবস্থা

ঐচ্ছিক।

অবস্থা।

actions

[ ক্রিয়া ]

প্রয়োজন।

কর্মের একটি তালিকা।

দ্য তথ্যসূত্র বিভাগটি সমস্ত উপলব্ধ স্ট্রাক্টের জন্য স্কিমা সংজ্ঞা প্রদান করে।

একটি নির্দিষ্ট স্ট্রাক্টের মধ্যে কী নামগুলি অনন্য এবং কেস-সংবেদনশীল।

সম্ভাব্য মানের ধরণগুলি হল:

  • একটি আদিম প্রকার: বুল, সংখ্যা, স্ট্রিং, সময়, এবং আরও অনেক কিছু।
  • একটি স্ট্রাক্ট টাইপ: ক্ষেত্রের একটি সংগ্রহ।
  • ডেটা টাইপের একটি অ্যারে। অ্যারে [] দ্বারা চিহ্নিত করা হয়। উদাহরণস্বরূপ, [string] হল স্ট্রিংগুলির একটি অ্যারে, এবং [Starter] হল Starter Structs এর একটি অ্যারে।
  • অন্যান্য বিশেষ প্রকার: সত্তা, ফিল্ডপাথ।

প্রতিটি ক্ষেত্রের বর্ণনায় গুরুত্বপূর্ণ তথ্য রয়েছে, যার মধ্যে রয়েছে:

  • প্রয়োজনীয় বনাম ঐচ্ছিক, যা নির্দেশ করে যে ক্ষেত্রটি বাধ্যতামূলক কিনা অথবা এটি এড়িয়ে যাওয়া যেতে পারে কিনা।
  • ক্ষেত্রের নির্ভরতা। শুধুমাত্র ঐচ্ছিক ক্ষেত্রের নির্ভরতা থাকে। এটি এই ক্ষেত্রটি ব্যবহার করার সময় অতিরিক্ত চেকগুলি বর্ণনা করে, যেমন ক্ষেত্র A সেট করা থাকলে কেবল ক্ষেত্র B ব্যবহার করুন , অথবা যখন ক্ষেত্র A ব্যবহার করা হয়, তখন ক্ষেত্র B বা ক্ষেত্র C সেট করবেন না
  • সম্ভাব্য মান। উদাহরণস্বরূপ, একটি Enum ফিল্ড টাইপ স্ট্রিংয়ের সীমিত মান সেট, অথবা সংখ্যার একটি পরিসর যা একটি ফিল্ড টাইপ নম্বরে ব্যবহার করা যেতে পারে।

টাইপ করা স্ট্রাক্ট

কিছু স্ট্রাক্ট সময়সূচী বা ডিভাইসের অবস্থার পরিবর্তনের উপর ভিত্তি করে স্টার্টারগুলিকে উপস্থাপন করতে পারে। প্রতিটি ধরণের starter অবশ্যই ক্ষেত্রগুলির একটি স্বতন্ত্র সেট প্রদান করতে হবে।

# A time schedule starter.
starter:
  type: time.schedule
  at: 10:00

# A device state change starter.
starter:
  type: device.state.OnOff
  device: TV - Living Room
  state: on
  is: true

একটি starter হল একটি টাইপড স্ট্রাক্ট, যা type ফিল্ডের অন্যান্য চাইল্ড স্ট্রাক্ট দ্বারা প্রসারিত হয়, যেমন time.schedule বা device.state.OnOff , বিভিন্ন ফাংশন প্রদান করার জন্য। condition এবং action স্ট্রাক্টগুলিও টাইপ করা হয়।

Struct-এর অতিরিক্ত ক্ষেত্রগুলি অবশ্যই চাইল্ড Struct ( type ) স্পেসিফিকেশন অনুসরণ করবে। উদাহরণস্বরূপ, device.state.OnOff type হিসাবে ব্যবহার করার সময়, শুধুমাত্রঐ ধরণের জন্য নির্দিষ্ট ক্ষেত্রগুলি সেই starter স্ট্রাক্টে বৈধ।

অ্যারে

YAML-এ, মানগুলির একটি অ্যারে - (একটি ড্যাশের পরে একটি স্পেস) দিয়ে শুরু হয়। অ্যারে একাধিক Struct মান, অথবা একাধিক Primitive মান ধারণ করতে পারে। তবে অ্যারের মানগুলি একই ধরণের হতে হবে।

যখন অ্যারেতে একটি আইটেম থাকে, তখন আপনি ড্যাশ এবং স্পেস বাদ দিতে পারেন:

# The starters field accepts an array of Starter Structs.
# This is the standard format.
starters:
- type: time.schedule
  at: sunset
- type: time.schedule
  at: sunrise

# The dash can be omitted if the array only has one item.
# This is also valid.
starters:
  type: time.schedule
  at: sunset

[[1, 2], [3, 4]] এর মতো বহুমাত্রিক অ্যারেগুলি অটোমেশন স্ক্রিপ্টিংয়ে সমর্থিত নয়। ভাষা পার্সার স্বয়ংক্রিয়ভাবে একটি বহুমাত্রিক অ্যারেকে একটি একক-মাত্রিক অ্যারেতে সমতল করবে, এই ক্ষেত্রে, [1, 2, 3, 4]

# INVALID: multi-dimensional array
- - 1
  - 2
- - 3
  - 4

আদিম

নিম্নলিখিত আদিম ডেটা টাইপগুলি অটোমেশন স্ক্রিপ্ট স্কিমা দ্বারা সমর্থিত:

বুল

  • true
  • false

সংখ্যা

পূর্ণসংখ্যা বা দশমিক সংখ্যা

স্ট্রিং

সরল লেখা

নির্দিষ্ট কিছু ক্ষেত্রে ছাড়া স্ট্রিংগুলিকে উদ্ধৃত করার প্রয়োজন নেই।

তারিখ

মাস এবং দিন। বিন্যাস হল MM-DD অথবা MM/DD।

  • 09/01
  • 09-01

সময়

দিনের সময়। এটি ঘড়ির সময় অথবা সৌর সময় হতে পারে। ঘড়ির সময়ের জন্য, এটি AM/PM ফর্ম্যাট অথবা 24H ফর্ম্যাট ব্যবহার করতে পারে। সেকেন্ড ঐচ্ছিক। সৌর সময়ের জন্য, sunrise এবং sunset হল কীওয়ার্ড, এবং এর পরে একটি অফসেট (সময়কাল অনুসারে) ব্যবহার করা যেতে পারে।

  • 12:30 am
  • 13:00:01
  • sunrise / sunset
  • sunset+30min / sunset-1hour

তারিখ সময়

বছর, মাস, দিন এবং দিনের সময়। তারিখ অংশ এবং সময় অংশের মধ্যে ফাঁকা স্থান প্রয়োজন। তারিখের ফর্ম্যাট হল YYYY-MM-DD অথবা YYYY/MM/DD। সময়ের ফর্ম্যাট [Time](#time) এর মতোই। সময় অঞ্চল সমর্থিত নয়।

  • 2022/01/01 14:00
  • 2022-12-31 sunrise+30min

সপ্তাহের দিন

  • MONDAY (অথবা MON )
  • TUESDAY (অথবা TUE )
  • WEDNESDAY (বা WED )
  • THURSDAY (অথবা THU )
  • FRIDAY (অথবা FRI )
  • SATURDAY (অথবা SAT )
  • SUNDAY (অথবা SUN )

সময়কাল

একটা সময়কাল।

  • 30min
  • 1hour
  • 20sec
  • 1hour10min20sec

কালারহেক্স

একটি ছয়-অঙ্কের হেক্সাডেসিমেল কোড যা একটি রঙের প্রতিনিধিত্ব করে।

কোন লিডিং # নেই।

  • FFFFFF
  • B5D2A1
  • DFA100

তাপমাত্রা

স্বাভাবিক তাপমাত্রার তথ্য। তাপমাত্রা পরিমাপ বোঝাতে সর্বদা মানের সাথে 'C' বা 'F' যোগ করুন।

  • 20.5C
  • 90F

রঙেরতাপমাত্রা

কেলভিনে রঙের তাপমাত্রা।

  • 5000K

ব্যবহারকারী

একজন ব্যবহারকারীর ইমেল ঠিকানা।

রঙ

রঙগুলি তিনটি উপায়ের যেকোনো একটিতে নির্দিষ্ট করা যেতে পারে - হয় ColorHex অথবা ColorTemperature আদিম প্রকার ব্যবহার করে, অথবা যৌগিক প্রকার SpectrumHSV ব্যবহার করে।

স্পেকট্রামএইচএসভি

SpectrumHSV টাইপ তিনটি সংখ্যাসূচক ক্ষেত্র ব্যবহার করে একটি রঙ নির্দিষ্ট করে:

  • রঙ রঙের তরঙ্গদৈর্ঘ্যের সাথে মিলে যায়।
  • স্যাচুরেশন রঙের তীব্রতা নির্দেশ করে।
  • মান রঙের আপেক্ষিক হালকাতা বা অন্ধকার নির্দেশ করে।

গতিশীল

কখনও কখনও, একটি কী-এর ডেটা টাইপ স্থির থাকে না। এটি অন্যান্য ক্ষেত্রের মানের উপর ভিত্তি করে আদিম ধরণের হতে পারে।

ডাইনামিক ডেটা টাইপ ফিল্ডের একটি উদাহরণ is . প্রকৃত টাইপ type এবং state ফিল্ড উভয়ের মান দ্বারা নির্ধারিত হয়।

# The 'is' field accepts a number type.
type: device.state.Volume
device: My TV - Living Room
state: currentVolume
is: 1
# The 'is' field accepts a boolean type.
type: device.state.OnOff
device: My TV - Living Room
state: on
is: false

সত্তা

ব্যবহারকারীর মালিকানাধীন সত্তা যেমন ডিভাইস বা রুমকে অনন্যভাবে সনাক্ত করার জন্য একটি বিশেষ স্ট্রিং ফর্ম্যাট।

অটোমেশনে ব্যবহৃত সবচেয়ে সাধারণ সত্তা হল ডিভাইস। সত্তার স্ট্রিং ফর্ম্যাট হল device name - room name

# The device field accepts a Device Entity type.
type: device.state.Volume
device: My TV - Living Room
state: currentVolume
is: 1

FieldPath সম্পর্কে

একটি বিশেষ স্ট্রিং ফর্ম্যাট যা ডেটা পেলোডে ডেটার একটি অংশ সনাক্ত করতে ব্যবহৃত হয়। নিম্নলিখিত উদাহরণে, currentVolume হল state ফিল্ডের জন্য FieldPath।

# The state field accepts a FieldPath type.
starters:
  type: device.state.Volume
  device: My TV - Living Room
  state: currentVolume
  is: 5

অন্যান্য FieldPath গুলিতে প্রয়োজনীয় আইটেমে পৌঁছানোর জন্য একাধিক স্তরের প্রয়োজন হতে পারে এবং স্টার্টার এবং অ্যাকশনের মধ্যে ফর্ম্যাটটি ভিন্ন।

স্টার্টারগুলিতে একটি ডট নোটেশন ব্যবহার করা হয়, যার পুরো পাথ একই ফিল্ডে থাকে। এটি মূলত স্টার্টার লজিকে তুলনা করার উদ্দেশ্যে করা হয়। উদাহরণস্বরূপ, স্টার্টার হিসেবে রঙের তাপমাত্রা ব্যবহার করতে, আপনি color.colorTemperature অবস্থা ব্যবহার করবেন:

starters:
- type: device.state.ColorSetting
  device: My Device - Room Name
  state: color.colorTemperature
  is: 2000K

তবে, ক্রিয়াগুলি নেস্টেড ক্ষেত্র ব্যবহার করে। একটি বাল্বের রঙ color.name এবং is: blue এর পরিবর্তে নীল করতে, আপনাকে অবশ্যই করতে হবে:

actions:
- type: device.command.ColorAbsolute
  devices: My Device - Room Name
  color:
    name: blue