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

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.

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

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

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

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

গঠন

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

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

চাবি টাইপ বর্ণনা

name

স্ট্রিং

ঐচ্ছিক।

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

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

starters

[ Starter ]

প্রয়োজন।

শুরুর একটি তালিকা.

condition

শর্ত

ঐচ্ছিক।

অবস্থা।

actions

[ Action ]

প্রয়োজন।

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

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

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

সম্ভাব্য মান প্রকারগুলি হল:

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

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

  • প্রয়োজনীয় বনাম ঐচ্ছিক, ক্ষেত্রটি বাধ্যতামূলক কিনা বা এটি বাদ দেওয়া যেতে পারে কিনা তা নির্দেশ করে।
  • ক্ষেত্র নির্ভরতা। শুধুমাত্র ঐচ্ছিক ক্ষেত্র নির্ভরতা আছে. এটি এই ক্ষেত্রটি ব্যবহার করার সময় অতিরিক্ত চেকগুলি বর্ণনা করে, যেমন ক্ষেত্র 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.OnOffcondition এবং action কাঠামো টাইপ করা হয়.

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

অ্যারে

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

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

# 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। সময়ের বিন্যাস [সময়](#সময়) এর মতোই। টাইম জোন সমর্থিত নয়।

  • 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

ফিল্ডপাথ

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

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

অন্যান্য FieldPaths প্রয়োজনীয় আইটেম পেতে একাধিক স্তরের প্রয়োজন হতে পারে, এবং বিন্যাস স্টার্টার এবং কর্মের মধ্যে পৃথক।

স্টার্টাররা একই ক্ষেত্রের পুরো পথ সহ একটি ডট নোটেশন ব্যবহার করে। এটি প্রাথমিকভাবে স্টার্টার লজিকে তুলনা করার উদ্দেশ্যে করা হয়। উদাহরণস্বরূপ, স্টার্টার হিসাবে রঙের তাপমাত্রা ব্যবহার করতে, আপনি রাজ্যের জন্য 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