diff --git a/1-getting-started/lessons/1-introduction-to-iot/translations/pi.zh-cn.md b/1-getting-started/lessons/1-introduction-to-iot/translations/pi.zh-cn.md index 426f26fc..dcee1b19 100644 --- a/1-getting-started/lessons/1-introduction-to-iot/translations/pi.zh-cn.md +++ b/1-getting-started/lessons/1-introduction-to-iot/translations/pi.zh-cn.md @@ -239,6 +239,6 @@ Hello World! ``` -> 💁 äŊ å¯äģĨ在[code/pi](code/pi) 文äģļ多里扞到čŋ™ä¸ĒäģŖį  +> 💁 äŊ å¯äģĨ在[code/pi](../code/pi) 文äģļ多里扞到čŋ™ä¸ĒäģŖį  😀 äŊ įš„'Hello World'ፋåēæˆåŠŸäē†! diff --git a/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-actuator.zh-cn.md b/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-actuator.zh-cn.md new file mode 100644 index 00000000..2b0da418 --- /dev/null +++ b/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-actuator.zh-cn.md @@ -0,0 +1,115 @@ +# åŧ€å‘一ä¸Ē夜ၝ - æ ‘čŽ“æ´ž + +在čŋ™ä¸Ēéƒ¨åˆ†įš„č¯žį¨‹ä¸­īŧŒäŊ äŧšæŠŠä¸€ä¸ĒLEDåŠ åˆ°æ ‘čŽ“æ´žä¸ŠåšļäŊŋį”¨åŽƒæĨ创åģē一ä¸Ēå¤œį¯ã€‚ + +## įĄŦäģļ + +įŽ°åœ¨å¤œį¯éœ€čρ䏀ä¸Ēæ‰§čĄŒå™¨ã€‚ + +čŋ™ä¸Ēæ‰§čĄŒå™¨æ˜¯**LED**īŧŒä¸€ä¸Ē[发光ä猿žįŽĄ](https://wikipedia.org/wiki/Light-emitting_diode)īŧŒåŊ“į”ĩæĩé€ščŋ‡åރæ—ļäŧšå‘光。čŋ™æ˜¯ä¸€ä¸Ē有两ä¸Ē打åŧ€æˆ–者兺闭įŠļæ€įš„æ•°å­—æ‰§čĄŒå™¨īŧŒå‘送一ä¸Ē1å€ŧæŠŠį¯æ‰“åŧ€īŧŒå‘送0æŠŠį¯å…ŗé—­ã€‚čŋ™ä¸ĒLED是一ä¸Ē外部Groveæ‰§čĄŒå™¨īŧŒč€Œä¸”需čρčĸĢčŋžæŽĨåˆ°æ ‘čŽ“æ´žä¸Šįš„GroveåŸēįĄ€æ‰Šåą•æŋ。 + +čŋ™ä¸Ēå¤œį¯įš„é€ģčž‘į”¨äŧĒäģŖį čĄ¨į¤ē是īŧš + +```output +æŖ€æŸĨ光ᅧᭉįē§ã€‚ +åĻ‚æžœå…‰į…§å°äēŽ300 + 打åŧ€LED +åĻ则 + å…ŗé—­LED +``` + +### čŋžæŽĨLED + +Grove LED äŊœä¸ē一ä¸Ēæ¨Ąå—å‡ēįŽ°īŧŒäģĨ及一įŗģ列可䞛äŊ é€‰æ‹Šéĸœč‰˛įš„LED。 + +#### äģģåŠĄ - čŋžæŽĨLED + +čŋžæŽĨLED。 + +![一ä¸Ēgrove LED](../../../../images/grove-led.png) + +1. 选拊äŊ æœ€å–œæŦĸįš„LEDį„ļ后把åŧ•č„šæ’åˆ°LEDæ¨Ąå—įš„ä¸¤ä¸Ē洞里éĸ。 + + LED是发光ä猿žįŽĄīŧŒč€Œä¸”ä猿žįŽĄæ˜¯åĒå…čŽ¸į”ĩæĩå•ä¸Ē斚向通čŋ‡įš„į”ĩå­čŽžå¤‡ã€‚čŋ™æ„å‘ŗLED需čρčĸĢčŋžæŽĨåœ¨æ­ŖįĄŽįš„æ–šå‘īŧŒä¸į„ļå°ąä¸äŧšåˇĨäŊœã€‚ + + LEDåŧ•č„šä¸­įš„ä¸€ä¸Ēæ˜¯æ­Ŗæžåŧ•脚īŧŒåĻ一ä¸Ēæ˜¯č´Ÿæžåŧ•č„šã€‚LEDä¸æ˜¯åŽŒå…¨įš„åœ†åŊĸīŧŒč€Œä¸”åœ¨ä¸€čžšæ˜¯æœ‰äē›åšŗįš„。čŋ™į•Ĩåšŗįš„ä¸€čžšæ˜¯č´Ÿæžåŧ•č„šã€‚åŊ“äŊ čŋžæŽĨLED到čŋ™ä¸Ēæ¨Ąå—įš„æ—ļ候īŧŒéœ€čĻįĄŽäŋåœ†åŊĸčŋ™čžšįš„åŧ•č„šæ˜¯čŋžæŽĨåˆ°æ¨Ąå—ä¸Šå¤–čžšæ ‡į€ **+** įš„æ’å­”īŧŒč€Œæ‰åšŗįš„čŋ™čžšæ˜¯čŋžæŽĨ到靠čŋ‘æ¨Ąå—ä¸­é—´įš„æ’å­”ã€‚ + +1. LEDæ¨Ąå—æœ‰ä¸€ä¸Ēå…čŽ¸äŊ æŽ§åˆļäēŽåēĻįš„æ—‹čŊŦ按钎īŧŒį”¨ä¸€ä¸Ē小十字čžē丝čĩˇå­é€†æ—ļ针旋čŊŦ厃拧到头æĨ厌全打åŧ€åŽƒã€‚ + +1. 把Groveįēŋįŧ†įš„一įĢ¯æ’åˆ°LEDæ¨Ąå—įš„æ’å­”ä¸­īŧŒčŋ™ä¸ĒåĒčƒŊäģŽä¸€ä¸Ē斚向插å…Ĩ。 + +1. åœ¨æ ‘čŽ“æ´žæ–­į”ĩįš„æƒ…å†ĩ下īŧŒæŠŠGroveįēŋįŧ†įš„åĻ一į̝čŋžæŽĨåˆ°æ ‘čŽ“æ´žä¸Šæ’į€įš„GroveåŸēįĄ€æ‰Šåą•æŋæ ‡į€ **D5** įš„æ•°å­—æ’å­”ã€‚čŋ™ä¸Ē插孔在靠čŋ‘GPIOåŧ•č„šįš„ä¸€æŽ’īŧŒåˇĻ数įŦŦäēŒä¸Ē。 + +![čŋžæŽĨ到D5æ’å­”įš„Grove LED](../../../../images/pi-led.png) + +## įŧ–å†™å¤œį¯į¨‹åē + +įŽ°åœ¨å¤œį¯å¯äģĨᔍGrove光ᅧäŧ æ„Ÿå™¨å’ŒGrove LEDæĨįŧ–᠁äē†ã€‚ + +### äģģåŠĄ - įŧ–å†™å¤œį¯į¨‹åē + +įŧ–å†™å¤œį¯į¨‹åē + +1. 打åŧ€æ ‘čŽ“æ´žåšļį­‰åž…å¯åŠ¨åŽŒæˆã€‚ + +1. į›´æŽĨåœ¨æ ‘čŽ“æ´žä¸Šæˆ–č€…é€ščŋ‡čŋœį¨‹SSHæ‰Šåą•īŧŒæ‰“åŧ€äŊ åœ¨čŋ™ä¸ĒäŊœä¸šä¸Šä¸€éƒ¨åˆ†åˆ›åģēįš„VS Codeä¸­įš„å¤œį¯éĄšį›Žã€‚ + +1. 把下éĸįš„äģŖį åŠ åˆ°`app.py`文äģļ中æĨå¯ŧå…Ĩ一ä¸Ē需čĻįš„å‡Ŋ数åē“。čŋ™ä¸€čĄŒéœ€čĻåŠ åœ¨æ–‡äģļéĄļ部īŧŒåœ¨å…ļäģ–`import`äģŖį čĄŒä¸‹éĸ。 + + ```python + from grove.grove_led import GroveLed + ``` + `from grove.grove_led import GroveLed`蝭åĨäģŽGrove Pythonå‡Ŋ数åē“中å¯ŧå…Ĩäē†`GroveLED`。čŋ™ä¸Ēå‡Ŋ数åē“中有和Grove LEDäē¤äē’įš„äģŖį ã€‚ + +1. 把下éĸįš„äģŖį åŠ åˆ°`light_sensor`åŖ°æ˜Žäš‹åŽæĨ创åģē一ä¸ĒįŽĄį†LEDįš„įąģįš„åŽžäž‹īŧš + + ```python + led = GroveLed(5) + ``` + + `led = GroveLed(5)`čŋ™ä¸€čĄŒåˆ›åģēäē†ä¸€ä¸ĒčŋžæŽĨ到 **D5** åŧ•č„šįš„`GroveLED`įąģįš„åŽžäž‹īŧŒ**D5** äšŸå°ąæ˜¯LEDčŋžæŽĨįš„é‚Ŗä¸Ē数字Groveåŧ•č„šã€‚ + + > 💁 æ‰€æœ‰įš„æ’å­”éƒŊæœ‰å”¯ä¸€įš„åŧ•č„šåˇīŧŒåŧ•脚0、2、4和6æ˜¯æ¨Ąæ‹Ÿåŧ•脚īŧŒåŧ•脚5、16、18、22、24和26是数字åŧ•č„šã€‚ + +1. 在`while`åžĒįŽ¯ä¸­åĸžåР䏀ä¸Ē判断īŧŒåœ¨`time.sleep`䚋前æĨæŖ€æŸĨ光ᅧᭉįē§åšļ控åˆļLED打åŧ€æˆ–者兺闭īŧš + + ```python + if light < 300: + led.on() + else: + led.off() + ``` + + čŋ™å—äģŖį æŖ€æŸĨäē†`light`įš„å€ŧīŧŒåĻ‚æžœå°äēŽ300å°ąč°ƒį”¨`GroveLED`įąģįš„`on`æ–šæŗ•īŧŒæĨ发送一ä¸Ē数字å€ŧ1到LEDīŧŒæŠŠåŽƒį‚šäēŽã€‚åĻ‚æžœ`light`å€ŧ大äēŽæˆ–į­‰äēŽ300īŧŒå°ąč°ƒį”¨`off`æ–šæŗ•īŧŒå‘送一ä¸Ē数字å€ŧ0įģ™LEDīŧŒæŠŠåŽƒå…ŗé—­ã€‚ + + > 💁 čŋ™æŽĩäģŖį éœ€čĻæ”žåˆ°whileåžĒįŽ¯é‡ŒéĸīŧŒįŧŠčŋ›åˆ°å’Œ`print('Light level:', light)`行一ä¸Ēæ°´åšŗã€‚ + + > 💁 åŊ“发送数字å€ŧåˆ°æ‰§čĄŒå™¨įš„æ—ļ候īŧŒ0å€ŧå°ąæ˜¯0vīŧŒ1å€ŧå°ąæ˜¯čŽžå¤‡įš„æœ€å¤§į”ĩ压。寚äēŽæ’į€Groveäŧ æ„Ÿå™¨å’Œæ‰§čĄŒå™¨įš„æ ‘čŽ“æ´žč€Œč¨€īŧŒ1įš„į”ĩåŽ‹å°ąæ˜¯3.3V。 + +1. äģŽVS Codeįģˆį̝īŧŒčŋčĄŒä¸‹éĸįš„å‘Ŋä줿ĨčŋčĄŒäŊ įš„Pythonåē”ᔍīŧš + + ```sh + python3 app.py + ``` + + 光ᅧå€ŧ在įģˆįĢ¯é‡Œčž“å‡ē。 + + ```output + pi@raspberrypi:~/nightlight $ python3 app.py + Light level: 634 + Light level: 634 + Light level: 634 + Light level: 230 + Light level: 104 + Light level: 290 + ``` + +1. éŽæŒĄæˆ–č€…æ­åŧ€å…‰į…§äŧ æ„Ÿå™¨īŧŒäŧšč§‚å¯Ÿåˆ°å…‰į…§į­‰įē§į­‰äēŽ300或更小æ—ļLEDäŧšį‚šäēŽīŧŒåĻ‚æžœå…‰į…§į­‰įē§æ¯”300大LEDå°ąäŧšå…ŗé—­ã€‚ + + > 💁 åĻ‚æžœLEDæ˛Ąæœ‰į‚šäēŽīŧŒįĄŽäŋåŽƒæ˜¯æ­ŖįĄŽæ–šå‘čŋžæŽĨįš„īŧŒč€Œä¸”æ—‹čŊŦæŒ‰é’Žæ˜¯čŽžįŊŽæˆå…¨åŧ€įš„。 + +![čŋžæŽĨåˆ°æ ‘čŽ“æ´žįš„LEDéšį€å…‰į…§į­‰įē§æ”šå˜į‚šäēŽå’Œå…ŗé—­](../../../../images/pi-running-assignment-1-1.gif) + +> 💁 äŊ å¯äģĨ在[code-actuator/pi](../code-actuator/pi)文äģļ多里扞到čŋ™äģŊäģŖį ã€‚ + +😀 äŊ įš„å¤œį¯į¨‹åēå°ąæˆåŠŸäē†īŧ diff --git a/1-getting-started/lessons/4-connect-internet/translations/README.bn.md b/1-getting-started/lessons/4-connect-internet/translations/README.bn.md new file mode 100644 index 00000000..99dbdc29 --- /dev/null +++ b/1-getting-started/lessons/4-connect-internet/translations/README.bn.md @@ -0,0 +1,439 @@ +# āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϕ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤāĻŋāĻ•āϰāĻŖ + +![A sketchnote overview of this lesson](../../../../sketchnotes/lesson-4.jpg) + +> [Nitya Narasimhan](https://github.com/nitya) āϤ⧈āϰ⧀ āĻ•āϰāϛ⧇āύ āĻāχ āĻ¸ā§āϕ⧇āϚāύ⧋āϟāϟāĻŋāĨ¤ āĻāϟāĻŋāϰ āĻŦ⧜ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĻ⧇āĻ–āϤ⧇ āĻšāϞ⧇ āĻ›āĻŦāĻŋāϟāĻŋāϰ āωāĻĒāϰ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ + +## āϞ⧇āĻ•āϚāĻžāϰ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϕ⧁āχāϜ + +[āϞ⧇āĻ•āϚāĻžāϰ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϕ⧁āχāϜ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/7) + +## āϏ⧂āϚāύāĻž + +IoT āĻļāĻŦā§āĻĻ⧇ **I** āĻšāϞ⧋ Internet - āφāχāĻ“āϟāĻŋāϤ⧇ "āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ" āĻŦāϞāϤ⧇ āĻ•ā§āϞāĻžāωāĻĄ āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāĻ‚āϝ⧋āĻ— āĻāĻŦāĻ‚ āϏ⧇āĻŦāĻž āĻĒā§āϰāĻĻāĻžāύ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāχāĻ“āϟāĻŋ āϝāĻ¨ā§āĻ¤ā§āϰ⧇āϰ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϏāĻŽā§‚āĻš āϚāĻžāϞ⧁ āĻ•āϰāĻž, āϝāĻ¨ā§āĻ¤ā§āϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āϏ⧇āĻ¨ā§āϏāϰ āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒāϰāĻŋāĻŽāĻžāĻĒāϏāĻŽā§‚āĻš āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰ⧇āϰāϪ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāĻ•āĻšā§ā§Ÿā§‡āϟāϰāϏāĻŽā§‚āĻšāϕ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāĻžāϕ⧇ āĻŦ⧁āĻāĻžā§ŸāĨ¤ āφāχāĻ“āϟāĻŋ āϝāĻ¨ā§āĻ¤ā§āϰāϗ⧁āϞāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ•āĻŽāĻŋāωāύāĻŋāϕ⧇āĻļāύ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋāĻŽāĻžāĻ¤ā§āϰ āĻ•ā§āϞāĻžāωāĻĄ āφāχāĻ“āϟāĻŋ āϏ⧇āĻŦāĻžāϤ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻāχ āϏ⧇āĻŦāĻžāϟāĻŋ āϏāĻŦ āφāχāĻ“āϟāĻŋ āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻĨāĻžāϕ⧇ āϝāĻž āĻ•āĻŋāύāĻž āϝāĻ¨ā§āĻ¤ā§āϰāϏāĻŽā§‚āĻš āĻĨ⧇āϕ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ āĻĄā§‡āϟāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāφāχ (āĻ•ā§ƒāĻ¤ā§āϰāĻŋāĻŽ āĻŦ⧁āĻĻā§āϧāĻŋāĻŽāĻ¤ā§āϤāĻž) āϏ⧇āĻŦāĻžāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύ⧇āĻ“ā§ŸāĻž āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ āĻ“ā§Ÿā§‡āĻŦ āĻāĻĒāϏ āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāĻž āĻŦāĻž āĻĒā§āϰāϤāĻŋāĻŦ⧇āĻĻāύāĻ“ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ + +> 🎓 āϏ⧇āĻ¨ā§āϏāϰ āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϤāĻĨā§āϝ āϏāĻ‚āĻ—ā§āϰāĻš āĻāĻŦāĻ‚ āϏ⧇āχ āϤāĻĨā§āϝ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻžāϕ⧇ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ(Telemetry) āĻŦāϞ⧇āĨ¤ + +āφāχāĻ“āϟāĻŋ āϝāĻ¨ā§āĻ¤ā§āϰāϏāĻŽā§‚āĻš āĻ•ā§āϞāĻžāωāĻĄ āĻĨ⧇āϕ⧇ āĻŦāĻžāĻ°ā§āϤāĻž āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽāĨ¤ āϤāĻŦ⧇ āĻāχ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋āϤ⧇ āφāĻĻ⧇āĻļ āĻĨāĻžāϕ⧇ - āϏ⧇āϟāĻŋ āĻšāϞ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖāĻ­āĻžāĻŦ⧇ āϕ⧋āύāĻ“ āĻ•āĻžāϜ āϏāĻŽā§āĻĒāĻ¨ā§āύ āĻ•āϰāĻžāϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻžāĻŦāϞ⧀ (āϝ⧇āĻŽāύ āϰāĻŋāĻŦ⧁āϟ āĻŦāĻž āĻĢāĻžāĻ°ā§āĻŽāĻ“āϝāĻŧā§āϝāĻžāϰ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž), āĻ…āĻĨāĻŦāĻž āĻāĻ•āĻšā§ā§Ÿā§‡āϟāϰāϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž (āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āϞāĻžāχāϟ āĻœā§āĻŦāĻžāϞāĻžāύ⧋)āĨ¤ + +āĻāχ āĻĒāĻžāĻ āϟāĻŋāϤ⧇ āφāχāĻ“āϟāĻŋ āϝāĻ¨ā§āĻ¤ā§āϰāϏāĻŽā§‚āĻš āĻ•āĻŽāĻŋāωāύāĻŋāϕ⧇āĻļāύ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšāĻ“ā§ŸāĻž āĻāĻŦāĻ‚ āĻ•āĻŋ āϧāϰāύ⧇āϰ āϤāĻĨā§āϝ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻ—ā§āϰāĻšāĻŖ āĻŦāĻž āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰ⧇ āϤāĻž āĻļāĻŋāĻ–āĻŦā§‹āĨ¤ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāĻŋāϤ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āϞāĻžāχāĻŸā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻāϞāχāĻĄāĻŋ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāύ⧇āϰ āϞāϜāĻŋāĻ• āϕ⧋āĻĄāϟāĻŋāϕ⧇ āϚāϞāĻŽāĻžāύ 'āϏāĻžāĻ°ā§āĻ­āĻžāϰ'-āĻ āύ⧇āĻ“ā§ŸāĻž, āĻāχ āĻĻ⧁āϟāĻŋ āĻ•āĻžāϜ āĻšāĻžāϤ⧇-āĻ•āϞāĻŽā§‡ āĻļāĻŋāĻ–āĻŦā§‹āĨ¤ + +āĻ āĻĒāĻžāĻ  āĻšāϤ⧇ āϝāĻž āϝāĻž āĻļāĻŋāĻ–āĻŦā§‹āσ + +* [āĻ•āĻŽāĻŋāωāύāĻŋāϕ⧇āĻļāύ āĻĒā§āϰāĻŸā§‹āĻ•āϞāϏāĻŽā§‚āĻš](#āĻ•āĻŽāĻŋāωāύāĻŋāϕ⧇āĻļāύ-āĻĒā§āϰāĻŸā§‹āĻ•āϞāϏāĻŽā§‚āĻš) +* [āĻāĻŽāĻ•āĻŋāωāϟāĻŋāϟāĻŋ (Message Queueing Telemetry Transport-MQTT)](#Message-Queueing-Telemetry-Transport-MQTT) +* [āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ](#āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ) +* [āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏāĻŽā§‚āĻš](#āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏāĻŽā§‚āĻš) + + +## āĻ•āĻŽāĻŋāωāύāĻŋāϕ⧇āĻļāύ āĻĒā§āϰāĻŸā§‹āĻ•āϞāϏāĻŽā§‚āĻš + +āφāχāĻ“āϟāĻŋ āϝāĻ¨ā§āĻ¤ā§āϰāϏāĻŽā§‚āĻš āĻ•ā§Ÿā§‡āĻ•āϟāĻŋ āϜāύāĻĒā§āϰāĻŋ⧟ āĻ•āĻŽāĻŋāωāύāĻŋāϕ⧇āĻļāύ āĻĒā§āϰāĻŸā§‹āĻ•āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšā§ŸāĨ¤ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āϜāύāĻĒā§āϰāĻŋ⧟ āĻšāĻšā§āϛ⧇ āϕ⧋āύ āϧāϰāύ⧇āϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦāĻž Broker āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰāϚāĻžāϰ/āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰāĻžāĨ¤ āφāχāĻ“āϟāĻŋ āϝāĻ¨ā§āĻ¤ā§āϰāϏāĻŽā§‚āĻš āĻāχ āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšā§Ÿā§‡ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĒā§āϰāϚāĻžāϰ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϗ⧁āϞ⧋āϤ⧇ āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰ⧇āĨ¤ āĻ•ā§āϞāĻžāωāĻĄ āϏ⧇āĻŦāĻžāϗ⧁āϞ⧋āĻ“ āĻāχ āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšā§Ÿā§‡ āϏāĻ•āϞ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋āϤ⧇ āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϗ⧁āϞ⧋āϕ⧇ āĻšā§Ÿ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āύāĻž āĻšā§Ÿ āĻ…āύ⧇āĻ•āϗ⧁āϞ⧋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āĻāĻ•āϟāĻŋ āĻ—ā§āϰ⧁āĻĒ⧇ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰ⧇āĨ¤ + +![āφāχāĻ“āϟāĻŋ āϝāĻ¨ā§āĻ¤ā§āϰāϏāĻŽā§‚āĻš āĻāχ āĻŽāĻ§ā§āϝāĻ¸ā§āĻĨāϤāĻžāĻ•āĻžāϰ⧀āϰ (Broker) āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšā§Ÿā§‡ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĒā§āϰāϚāĻžāϰ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āφāĻĻ⧇āĻļāϗ⧁āϞ⧋āϤ⧇ āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰ⧇āĨ¤ āĻ•ā§āϞāĻžāωāĻĄ āϏ⧇āĻŦāĻžāϗ⧁āϞ⧋āĻ“ āĻāχ āĻŽāĻ§ā§āϝāĻ¸ā§āĻĨāϤāĻžāĻ•āĻžāϰ⧀āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšā§Ÿā§‡ āϏāĻ•āϞ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋āϤ⧇ āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϗ⧁āϞ⧋āϕ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒā§āϰāϚāĻžāϰ āĻ•āϰ⧇āĨ¤](../../../../images/pub-sub.png) + +āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ MQTT āĻšāϞ⧋ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āϜāύāĻĒā§āϰāĻŋ⧟ āĻ•āĻŽāĻŋāωāύāĻŋāϕ⧇āĻļāύ āĻĒā§āϰāĻŸā§‹āĻ•āϞ āϝāĻž āĻāχ āĻĒāĻžāϠ⧇ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĒā§āϰāĻŸā§‹āĻ•āϞ⧇āϰ āĻŽāĻ§ā§āϝ⧇ AMQP āĻāĻŦāĻ‚ HTTP/HTTPS āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āφāϛ⧇āĨ¤ + +## Message Queueing Telemetry Transport-MQTT + +[MQTT](http://mqtt.org) āĻšāϞ āϞāĻžāχāϟāĻ“āϝāĻŧ⧇āϟ, āĻ“āĻĒ⧇āύ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻŽā§‡āϏ⧇āϜāĻŋāĻ‚ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āϝāĻž āĻĄāĻŋāĻ­āĻžāχāϏāϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ ā§§ā§Ģ āĻŦāĻ›āϰ āĻĒāϰ⧇ āĻ“āĻĒ⧇āύ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻāϟāĻŋ āφāχāĻŦāĻŋāĻāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšā§Ÿ āϝāĻž āĻĒā§‚āĻ°ā§āĻŦ⧇ āϤ⧇āϞ⧇āϰ āĻĒāĻžāχāĻĒāϞāĻžāχāύāϗ⧁āϞāĻŋ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ ⧧⧝⧝⧝ āϏāĻžāϞ⧇ āύāĻ•āĻļāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āĨ¤ + +MQTT āĻāϰ āĻāĻ•āϟāĻŋ āĻŦā§āϰ⧋āĻ•āĻžāϰ āĻāĻŦāĻ‚ āĻāĻ•āĻžāϧāĻŋāĻ• āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āϏāĻŽāĻ¸ā§āϤ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšā§Ÿ āĻāĻŦāĻ‚ āĻŦā§āϰ⧋āĻ•āĻžāϰ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟāĻĻ⧇āϰ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰ⧇āĨ¤ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋ āϕ⧋āύ⧋ āĻŦāĻŋāĻļ⧇āώ āĻ—ā§āϰāĻžāĻšāĻ•āϕ⧇ āϏāϰāĻžāϏāϰāĻŋ āĻĒā§āϰ⧇āϰāĻŖ āύāĻž āĻ•āϰ⧇ āĻŦāϰāĻ‚ āύāĻžāĻŽāĻ•āϰāĻŖ āĻ•āϰāĻž āϟāĻĒāĻŋāĻ•āϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĒāĻĨ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ āĻāĻ•āϟāĻŋ āϟāĻĒāĻŋāĻ• āĻĒā§āϰāϚāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŦāĻ‚ āϝ⧇āϕ⧋āύ⧋ āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ āϝ⧇ āϐ āϟāĻĒāĻŋāϕ⧇ āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰ⧇ āϤāĻž āϏ⧇ āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āĻŦāĻžāĻ°ā§āϤāĻž āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤ + +![IoT device publishing telemetry on the /telemetry topic, and the cloud service subscribing to that topic](../../../../images/mqtt.png) + +✅ āĻ•āĻŋāϛ⧁ āĻ—āĻŦ⧇āώāĻŖāĻž āĻ•āϰāĻŋāĨ¤ āϝāĻĻāĻŋ āĻ…āύ⧇āĻ•āϗ⧁āϞ⧋ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āύāĻŋāĻļā§āϚāĻŋāϤ āĻšāĻŦā§‹ āϝ⧇ MQTT- āĻŦā§āϰ⧋āĻ•āĻžāϰ āϏāĻŦāϗ⧁āϞ⧋ āĻŦāĻžāĻ°ā§āϤāĻž āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āĻ•āĻŋāύāĻž? + +### āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϟāĻŋ MQTT-āϤ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤāĻŋāĻ•āϰāĻŖ + +āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āύāĻžāχāϟāϞāĻžāχāϟāϕ⧇ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāĻžāϰ āĻĒā§āϰāĻĨāĻŽ āϧāĻžāĻĒ āĻšāĻšā§āϛ⧇ āϏ⧇āϟāĻŋāϕ⧇ MQTT- āĻŦā§āϰ⧋āĻ•āĻžāϰ āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻžāĨ¤ + +#### āĻ•āĻžāϜ + +āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϟāĻŋ MQTT-āĻŦā§āϰ⧋āĻ•āĻžāϰ āĻ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻžāĨ¤ + +āĻĒāĻžāϠ⧇āϰ āĻāχ āĻ…āĻ‚āĻļāϟāĻŋāϤ⧇ āφāχāĻ“āϟāĻŋ āύāĻžāχāϟāϞāĻžāχāϟāĻŋāϕ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŋ āϝāĻžāϤ⧇ āĻ•āϰ⧇ āϏ⧇āϟāĻŋāϕ⧇ āĻĻā§‚āϰ āĻĨ⧇āϕ⧇ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ āĻāχ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻžāϠ⧇, āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϟāĻŋ MQTT-āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāĻ•āϟāĻŋ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻŦāĻžāĻ°ā§āϤāĻž āϞāĻžāχāĻŸā§‡āϰ āϞ⧇āϭ⧇āϞāϏāĻš(āϏ⧇āĻ¨ā§āϏāϰ āĻāϰ āĻ­ā§āϝāĻžāϞ⧁) āĻĒāĻžāĻŦāϞāĻŋāĻ• MQTT āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇ āĻĒāĻžāĻ āĻžāĻŦ⧇ āĻāĻŦāĻ‚ āϏ⧇āϟāĻŋ āĻ•āϤāĻŋāĻĒ⧟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž āύ⧇āĻ“ā§ŸāĻž āĻšāĻŦ⧇ āϝ⧇āϟāĻžāϤ⧇ āϕ⧋āĻĄāϟāĻŋ āϞ⧇āĻ–āĻž āĻšā§Ÿā§‡āĻ›āĻŋāϞ⧋āĨ¤ āĻāχ āϕ⧋āĻĄāϟāĻŋ āϞāĻžāχāĻŸā§‡āϰ āϞ⧇āϭ⧇āϞ/āϏ⧇āĻ¨ā§āϏāϰ āĻ­ā§āϝāĻžāϞ⧁ āϝāĻžāϚāĻžāχ āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ āϝāĻžāϚāĻžāχ āĻ•āϰāĻžāϰ āĻĒāϰ āĻāĻ•āϟāĻŋ āφāĻĻ⧇āĻļāĻŽā§‚āϞāĻ• āĻŦāĻžāĻ°ā§āϤāĻž āφāχāĻ“āϟāĻŋ āϞāĻžāχāϟāϟāĻŋāϤ⧇/āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒāĻžāĻ āĻžāĻŦ⧇ āϝāĻžāϤ⧇ āφāĻĻ⧇āĻļ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāϞāĻž āĻĨāĻžāĻ•āĻŦ⧇ āϝ⧇ āĻāϞāχāĻĄāĻŋāϟāĻŋ āĻ…āύ āύāĻž āĻ…āĻĢ āĻšāĻŦ⧇āĨ¤ + +āĻŦāĻžāĻ¸ā§āϤāĻŦāĻŋāĻ• āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāĻŽāύ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϝ⧇āĻ–āĻžāύ⧇ āĻ…āύ⧇āĻ• āϞāĻžāχāϟ āϏ⧇āĻ¨ā§āϏāϰ āĻ°ā§Ÿā§‡āϛ⧇ (āϝ⧇āĻŽāύ āĻ¸ā§āĻŸā§āϝāĻžāĻĄāĻŋ⧟āĻžāĻŽ) āĻāĻŦāĻ‚ āϏ⧇āχ āϞāĻžāχāϟāϗ⧁āϞ⧋ āĻ…āύ āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύ⧇āĻ“ā§ŸāĻžāϰ āĻĒā§‚āĻ°ā§āĻŦ⧇ āĻ“āχ āĻāĻ•āĻžāϧāĻŋāĻ• āϞāĻžāχāϟ āϏ⧇āĻ¨ā§āϏāϰ āĻāϰ āϤāĻĨā§āϝ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻžāϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āϏ⧇āĻ¨ā§āϏāϰ āĻŽā§‡āϘ āĻŦāĻž āĻĒāĻžāĻ–āĻŋ āĻĻā§āĻŦāĻžāϰāĻž āφāĻŦ⧃āϤ āĻĨāĻžāϕ⧇ āϞāĻžāχāϟāϗ⧁āϞāĻŋ āĻ…āύ āĻšāĻ“ā§ŸāĻž āĻĨ⧇āϕ⧇ āĻŦāĻ¨ā§āϧ āϰāĻžāĻ–āϤ⧇ āĻĒāĻžāϰ⧇, āϝāĻĻāĻŋāĻ“ āĻ…āĻ¨ā§āϝ āϏ⧇āĻ¨ā§āϏāϰāϗ⧁āϞāĻŋ āĻĒāĻ°ā§āϝāĻžāĻĒā§āϤ āφāϞ⧋ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰ⧇āĻ“āĨ¤ + +✅ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒā§āϰ⧇āϰāϪ⧇āϰ āφāϗ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āϏ⧇āĻ¨ā§āϏāϰ āĻāϰ āϤāĻĨā§āϝ āĻŽā§‚āĻ˛ā§āϝāĻžā§Ÿāύ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āĻ¨ā§āϝ āĻ•āĻŋ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϗ⧁āϞ⧋ āĻŦāĻŋāĻŦ⧇āϚāĻŋāϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇? + +āĻāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏ⧇āĻŦ⧇ MQTT āĻŦā§āϰ⧋āĻ•āĻžāϰ āϏ⧇āϟāĻžāĻĒ⧇āϰ āĻāχ āϜāϟāĻŋāϞāϤāĻžāϰ āϏāĻžāĻĨ⧇ āĻŽā§‹āĻ•āĻžāĻŦ⧇āϞāĻž āĻ•āϰāĻžāϰ āĻšā§‡ā§Ÿā§‡ āĻŦāϰāĻ‚ āϚāĻžāχāϞ⧇ āϏ⧇āϟāĻžāĻĒāϟāĻŋ āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻŸā§‡āĻ¸ā§āϟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻŦ⧇ āϝ⧇āϟāĻŋ [Eclipse Mosquitto](https://www.mosquitto.org)(āĻāĻ•āϟāĻŋ āĻ“āĻĒ⧇āύ āϏ⧋āĻ°ā§āϏ MQTT āĻŦā§āϰ⧋āĻ•āĻžāϰ)-āĻ āϰāĻžāύ āĻšāĻŦ⧇āĨ¤ āĻāχ āĻŸā§‡āĻ¸ā§āϟ āĻŦā§āϰ⧋āĻ•āĻžāϰāϟāĻŋ [test.mosquitto.org](https://test.mosquitto.org)-āĻ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžāĻŦ⧇ āϝāĻž āϜāύāϏāĻžāϧāĻžāϰāύ⧇āϰ āϜāĻ¨ā§āϝ āωāĻ¨ā§āĻŽā§āĻ•ā§āϤāĨ¤ MQTT āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ āĻāĻŦāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻāϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ…āϏāĻžāϧāĻžāϰāĻŖ āϟ⧁āϞ āĻ•āĻžāϰāĻŖ āĻāϟāĻŋāϤ⧇ āϏ⧇āϟāĻžāĻĒ āĻ•āϰāϤ⧇ āϕ⧋āύ⧋ āĻāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āύ⧇āχāĨ¤ + +> 💁 āĻāχ āĻŸā§‡āĻ¸ā§āϟ āĻŦā§āϰ⧋āĻ•āĻžāϰāϟāĻŋ āωāĻ¨ā§āĻŽā§āĻ•ā§āϤ āϝāĻž āĻŽā§‹āĻŸā§‡āχ āϏ⧁āϰāĻ•ā§āώāĻŋāϤ āύ⧟āĨ¤ āϝ⧇ āϕ⧇āω āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āĻāϤ⧇ āĻ•āĻŋ āĻĒāĻžāĻŦāϞāĻŋāĻļ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇, āϤāĻžāχ āϝ⧇ āϤāĻĨā§āϝāϗ⧁āϞ⧋āϤ⧇ āĻ—ā§‹āĻĒāĻ¨ā§€ā§Ÿ āϰāĻžāĻ–āĻž āϜāϰ⧁āϰāĻŋ āϏ⧇āϗ⧁āϞ⧋ āĻāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻ•āϰāĻžāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āϰāχāϞāĨ¤ + +![A flow chart of the assignment showing light levels being read and checked, and the LED begin controlled](../../../../images/assignment-1-internet-flow.png) + +āĻĄāĻŋāĻ­āĻžāχāϏāϟāĻŋ MQTT āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āϧāĻžāĻĒāϗ⧁āϞ⧋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāĻŋāσ + +* [āφāϰāĻĄā§āχāύ⧋ Wio āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ](wio-terminal-mqtt.bn.md) +* [āϏāĻŋāĻ‚āϗ⧇āϞ āĻŦā§‹āĻ°ā§āĻĄ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ - āϰāĻžāĻ¸ā§āĻĒāĻŦ⧇āϰāĻŋ āĻĒāĻžāχ/āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ](single-board-computer-mqtt.bn.md) + +### MQTT āĻāϰ āφāϰ⧋ āĻ—āĻ­ā§€āϰ⧇ + +āϟāĻĒāĻŋāĻ•āϗ⧁āϞ⧋āϤ⧇ āĻļā§āϰ⧇āĻŖāĻŋāĻŦāĻŋāĻ¨ā§āϝāĻžāϏ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻžāϤ⧇ āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟāϰāĻž āĻ“ā§ŸāĻžāχāĻ˛ā§āĻĄāĻ•āĻžāĻ°ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāχ āĻļā§āϰ⧇āĻŖāĻŋāĻŦāĻŋāĻ¨ā§āϝāĻžāϏ⧇āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ¸ā§āϤāϰ⧇ āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝ⧇āĻŽāύ, āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻžāϰ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋ `/telemetry/temperature` āĻāχ āϟāĻĒāĻŋāϕ⧇ āĻāĻŦāĻ‚ āφāĻ°ā§āĻĻā§āϰāϤāĻžāϰ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋ `/telemetry/humidity` āĻāχ āϟāĻĒāĻŋāϕ⧇ āĻĒāĻžāĻ āĻžāύ⧋, āϤāĻžāϰāĻĒāϰ āĻ•ā§āϞāĻžāωāĻĄ āĻāĻĒāϟāĻŋ `/telemetry/*` āĻāχ āϟāĻĒāĻŋāϕ⧇ āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰ⧇ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻž āĻāĻŦāĻ‚ āφāĻ°ā§āĻĻā§āϰāϤāĻž āωāĻ­ā§Ÿā§‡āϰ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāĻŦ⧇āĨ¤ + +āĻŦāĻžāĻ°ā§āϤāĻž āĻ—ā§āϰāĻšāϪ⧇āϰ āύāĻŋāĻļā§āϚ⧟āϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋ āĻ•ā§‹ā§ŸāĻžāϞāĻŋāϟāĻŋ āĻ…āĻĢ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ(QoS) āĻāϰ āϏāĻžāĻĨ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āĻšā§ŸāĨ¤ + +* āϏāĻ°ā§āĻŦāĻžāϧāĻŋāĻ• āĻāĻ•āĻŦāĻžāϰ – āĻŦāĻžāĻ°ā§āϤāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āĻŦāĻžāϰāχ āĻĒāĻžāĻ āĻžāύ⧋ āĻšā§Ÿ āĻāĻŦāĻ‚ āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ āφāϰ āĻŦā§āϰ⧋āĻ•āĻžāϰ āĻŦāĻžāĻ°ā§āϤāĻžāϟāĻŋ āĻĄā§‡āϞāĻŋāĻ­āĻžāϰ⧀āϰ āĻĒā§āϰāĻžāĻĒā§āϤāĻŋ āĻ¸ā§āĻŦā§€āĻ•āĻžāϰ āĻ•āϰāϤ⧇ āϕ⧋āύ⧋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ āĻ¨ā§‡ā§Ÿ āύāĻž (fire and forget)āĨ¤ +* āĻ…āĻ¨ā§āϤāϤ āĻāĻ•āĻŦāĻžāϰ – āĻ¸ā§āĻŦā§€āĻ•āĻžāϰ⧋āĻ•ā§āϤāĻŋ āĻ—ā§ƒāĻšā§€āϤ āύāĻž āĻšāĻ“ā§ŸāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰ⧇āϰāĻ• āĻāĻ•āĻžāϧāĻŋāĻ•āĻŦāĻžāϰ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰ⧇āϰāϪ⧇āϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇āĻ›āĻŋāϞ (acknowledged delivery)āĨ¤ +* āĻ āĻŋāĻ• āĻāĻ•āĻŦāĻžāϰ – āĻļ⧁āϧ⧁ āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ°ā§āϤāĻž āĻ—ā§ƒāĻšā§€āϤ āĻšā§Ÿā§‡āϛ⧇ āϤāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āĻĒā§āϰāĻžāĻĒāĻ• āĻāĻŦāĻ‚ āĻĒā§āϰ⧇āϰāĻ• āĻāĻ•āϟāĻŋ āĻĻā§āĻŦāĻŋ-āĻ¸ā§āϤāϰ⧇āϰ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰ⧇ āϝāĻžāϕ⧇ āĻšā§āϝāĻžāĻ¨ā§āĻĄāĻļ⧇āĻ• āĻāϰ āϏāĻžāĻĨ⧇ āϤ⧁āϞāύāĻž āĻ•āϰāĻž āϝāĻžā§Ÿ (assured delivery)āĨ¤ + +✅ āϕ⧋āύ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϤ⧇ fire and forget āĻŦāĻžāĻ°ā§āϤāĻžāϰ āĻĒāϰ⧇āĻ“ āĻāĻ•āϟāĻŋ assured delivery āĻāϰ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇? + +āϝāĻĻāĻŋāĻ“ āύāĻžāĻŽāϟāĻŋ āĻŽā§‡āϏ⧇āϜ āĻ•āĻŋāĻ‰ā§ŸāĻŋāĻ‚ (āχāĻ‚āϰ⧇āϜāĻŋ āĻĒā§āϰāĻĨāĻŽ āĻ…āĻ•ā§āώāϰāϗ⧁āϞ⧋ āύāĻŋā§Ÿā§‡ MQTT), āĻāϟāĻŋ āφāϏāϞ⧇ āĻŦāĻžāĻ°ā§āϤāĻžāϰ āϏāĻžāϰāĻŋāϕ⧇ āĻŦ⧁āĻāĻžā§Ÿ āύāĻžāĨ¤ āĻāϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ āϝāĻĻāĻŋ āϕ⧋āύ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϏāĻ‚āϝ⧋āĻ— āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āĻ•āϰ⧇ āĻĒ⧁āύāϰāĻžā§Ÿ āϏāĻ‚āϝ⧋āĻ— āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻžāϰ āϏāĻŽā§Ÿ QoS āĻĒā§āϰāϏ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āχāϤ⧋āĻŽāĻ§ā§āϝ⧇ āĻĒā§āϰāϏ⧇āϏāĻ•ā§ƒāϤ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋ āĻŦāĻžāĻĻ⧇ āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āĻ…āĻŦāĻ¸ā§āĻĨāĻžā§Ÿ āĻĒā§āϰ⧇āϰāĻŋāϤ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋ āĻ—ā§ƒāĻšā§€āϤ āĻšāĻŦ⧇ āύāĻžāĨ¤ āĻ“āχ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋āϕ⧇ āĻŽāύ⧇ āϰāĻžāĻ–āĻžāϤ⧇ āĻāĻ•āϟāĻŋ āĻĢā§āĻ˛ā§āϝāĻžāĻ— āϏ⧇āϟ āĻ•āϰāĻž āĻšā§ŸāĨ¤ āϝāĻĻāĻŋ āĻāχ āĻĢā§āĻ˛ā§āϝāĻžāĻ— āϏ⧇āϟ āĻ•āϰāĻž āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ MQTT-āĻŦā§āϰ⧋āĻ•āĻžāϰ āĻāĻ•āϟāĻŋ āϟāĻĒāĻŋāϕ⧇ āĻĒā§āϰ⧇āϰāĻŋāϤ āϏāĻ°ā§āĻŦāĻļ⧇āώ āĻŦāĻžāĻ°ā§āϤāĻžāϟāĻŋ āĻ“āχ āĻĢā§āĻ˛ā§āϝāĻžāĻ—āϏāĻšāĻŋāϤ āϜāĻŽāĻž āϰāĻžāĻ–āĻŦ⧇ āĻāĻŦāĻ‚ āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āϕ⧋āύ⧋ āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ āϝāĻĻāĻŋ āĻāχ āϟāĻĒāĻŋāϕ⧇ āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰ⧇ āϤāĻžāϕ⧇ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž āĻšā§ŸāĨ¤ āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϤ⧇ āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟāϗ⧁āϞ⧋ āϏāĻŦāĻ°ā§āĻĻāĻž āϏāĻ°ā§āĻŦāĻļ⧇āώ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋ āĻĒā§‡ā§Ÿā§‡ āĻĨāĻžāϕ⧇āĨ¤ + +MQTT āĻāĻ•āϟāĻŋ āĻāϞāĻžāχāĻ­(alive) āĻĢāĻžāĻ‚āĻļāύāϕ⧇ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāχ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ āĻĻā§€āĻ°ā§āϘ āĻŦāĻŋāϰāϤāĻŋāϰ āϏāĻŽā§Ÿ āϏāĻ‚āϝ⧋āĻ—āϟāĻŋ āϚāĻžāϞ⧁ āφāϛ⧇ āĻ•āĻŋāύāĻž āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇āĨ¤ + +> đŸĻŸ [Eclipse Foundation āĻāϰ Mosquitto-āϤ⧇](https://mosquitto.org) āĻāĻ•āϟāĻŋ āĻĢā§āϰ⧀ MQTT āĻŦā§āϰ⧋āĻ•āĻžāϰ āĻ°ā§Ÿā§‡āϛ⧇ āϝāĻžāϤ⧇ MQTT-āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž āϝāĻžāĻŦ⧇, MQTT-āĻŦā§āϰ⧋āĻ•āĻžāϰ āĻāϰ āϏāĻžāĻĨ⧇ āϕ⧋āĻĄ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āϝāĻž āĻāχ [test.mosquitto.org](https://test.mosquitto.org) āĻšā§‹āĻ¸ā§āϟ āĻ•āϰāĻž āĻĨāĻžāϕ⧇āĨ¤ + +MQTT- āϏāĻ‚āϝ⧋āĻ—āϏāĻŽā§‚āĻš āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻ“ āωāĻ¨ā§āĻŽā§āĻ•ā§āϤ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇ āĻ…āĻĨāĻŦāĻž āχāωāϜāĻžāϰāύ⧇āχāĻŽ, āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻāĻŦāĻ‚ āϏāĻžāĻ°ā§āϟāĻŋāĻĢāĻŋāϕ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāύāĻ•ā§āϰāĻŋāĻĒāĻŸā§‡āĻĄ āĻ“ āϏ⧁āϰāĻ•ā§āώāĻŋāϤ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ + +> 💁 MQTT TCP/IP āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰ⧇, āĻāϟāĻŋ HTTP āĻāϰ āĻŽāϤ⧋āχ āĻāĻ•āϟāĻŋ āύ⧇āϟāĻ“ā§ŸāĻžāĻ°ā§āĻ• āĻĒā§āϰ⧋āϟāĻ•āϞ āϤāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ āĻĒā§‹āĻ°ā§āϟāĻŦ⧇āχāϜāĻĄāĨ¤ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āϚāϞāĻŽāĻžāύ āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āϗ⧇āϰ āϜāĻ¨ā§āϝ āĻ“ā§Ÿā§‡āĻŦāϏāϕ⧇āĻŸā§‡āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āĻŦāĻž āĻĢāĻžāϝāĻŧāĻžāϰāĻ“āϝāĻŧāĻžāϞāϗ⧁āϞāĻŋ āĻŦāĻž āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻŋāĻ‚ āϰ⧁āϞāϏ āϝāĻž āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āϏāĻ‚āϝ⧋āĻ—āϗ⧁āϞāĻŋāϤ⧇ MQTT āĻŦā§āϞāĻ• āĻ•āϰ⧇ āĻāĻŽāύ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϤ⧇ MQTT āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāĻŦ⧇āĨ¤ + +## āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ + +āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻļāĻŦā§āĻĻāϟāĻŋ āĻ—ā§āϰ⧀āĻ• āĻĨ⧇āϕ⧇ āωāĻĻā§āĻ­ā§‚āϤ āĻšā§Ÿā§‡āĻ›āĻŋāϞ⧋ āϝāĻžāϰ āĻ…āĻ°ā§āĻĨ āĻĻā§‚āϰāĻŦāĻ°ā§āϤ⧀ āĻĨ⧇āϕ⧇ āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻžāĨ¤ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻšāϞ āϏ⧇āĻ¨ā§āϏāϰ āĻĨ⧇āϕ⧇ āĻĄā§‡āϟāĻž āϏāĻ‚āĻ—ā§āϰāĻš āĻāĻŦāĻ‚ āϏ⧇āχ āĻĄā§‡āϟāĻž āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž āĨ¤ + +> 💁 āĻĒā§āϰāĻžāĻšā§€āύāϤāĻŽ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϗ⧁āϞāĻŋ āĻĢā§āϰāĻžāĻ¨ā§āϏ⧇ ā§§ā§Žā§­ā§Ē āϏāĻžāϞ⧇ āωāĻĻā§āĻ­āĻžāĻŦāĻŋāϤ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āĻāĻŦāĻ‚ Mont Blanc āĻĨ⧇āϕ⧇ āĻĒā§āϝāĻžāϰāĻŋāϏ⧇ āϰāĻŋāϝāĻŧ⧇āϞ-āϟāĻžāχāĻŽ āφāĻŦāĻšāĻžāĻ“āϝāĻŧāĻž āĻāĻŦāĻ‚ āϤ⧁āώāĻžāϰ⧇āϰ āĻ—āĻ­ā§€āϰāϤāĻž āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰ⧇āĻ›āĻŋāϞāĨ¤ āĻāϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻŋāĻ• āϤāĻžāϰāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ āĻ•āĻžāϰāĻŖ āĻ“āϝāĻŧā§āϝāĻžāϰāϞ⧇āϏ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāϗ⧁āϞāĻŋ āϤāĻ–āύ āĻ›āĻŋāϞ āύāĻžāĨ¤ + +āĻĒāĻžāĻ  1 āĻĨ⧇āϕ⧇ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āĻĨāĻžāĻ°ā§āĻŽā§‹āĻ¸ā§āĻŸā§‡āĻŸā§‡āϰ āωāĻĻāĻžāĻšāϰāĻŖāϟāĻŋ āĻĻ⧇āĻ–āĻŋāĨ¤ + +![āĻāĻ•āĻžāϧāĻŋāĻ• āϰ⧁āĻŽ āϏ⧇āĻ¨ā§āϏāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻāĻ•āϟāĻŋ āĻĨāĻžāĻ°ā§āĻŽā§‹āĻ¸ā§āĻŸā§āϝāĻžāϟ](../../../../images/telemetry.png) + +āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āϏāĻ‚āĻ—ā§āϰāĻšā§‡āϰ āϜāĻ¨ā§āϝ āĻĨāĻžāĻ°ā§āĻŽā§‹āĻ¸ā§āĻŸā§āϝāĻžāϟ āĻāϰ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻžāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϏ⧇āĻ¨ā§āϏāϰ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāϟāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻžāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϏ⧇āĻ¨ā§āϏāϰ āĻŦāĻŋāĻ˛ā§āϟāχāύ āĻĨāĻžāϕ⧇ āĻāĻŦāĻ‚ āĻ“ā§ŸāĻžāϰāϞ⧇āϏ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āϝ⧇āĻŽāύ [āĻŦā§āϞ⧁āϟ⧁āĻĨ āϞ⧋ āĻāύāĻžāĻ°ā§āϜāĻŋ](https://wikipedia.org/wiki/Bluetooth_Low_Energy) (BLE) āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāĻ•āĻžāϧāĻŋāĻ• āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻžāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϏ⧇āĻ¨ā§āϏāϰ āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ + +āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ āĻāĻ•āϟāĻŋ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĄā§‡āϟāĻž āϝāĻž āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž āĻšāĻŦ⧇, āϤāĻž āĻšāϞ⧋ + +| āύāĻžāĻŽ | āĻŽāĻžāύ | āĻŦāĻ°ā§āĻŖāύāĻž | +| ---- | ----- | ----------- | +| `thermostat_temperature` | 18°C | āĻĨāĻžāĻ°ā§āĻŽā§‹āĻ¸ā§āĻŸā§āϝāĻžāϟ āĻāϰ āĻŦāĻŋāĻ˛ā§āϟ-āχāύ āϤāĻžāĻĒāĻžāĻŽāĻžāĻ¤ā§āϰāĻžāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϏ⧇āĻ¨ā§āϏāϰ āĻĻā§āĻŦāĻžāϰāĻž āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻž āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻžāĨ¤ | +| `livingroom_temperature` | 19°C | āĻĻā§‚āϰāĻŦāĻ°ā§āϤ⧀ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻžāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϏ⧇āĻ¨ā§āϏāϰ(remote temperature sensor) āĻĻā§āĻŦāĻžāϰāĻž āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻž āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻž āĻšā§Ÿ āϝ⧇āϟāĻŋāϕ⧇ `livingroom` āύāĻžāĻŽāĻ•āϰāĻŖ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇ āϝāĻžāϤ⧇ āĻāϟāĻŋ āϝ⧇āχ āϰ⧁āĻŽā§‡ āφāϛ⧇ āϏ⧇āχ āϰ⧁āĻŽāϕ⧇ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ | +| `bedroom_temperature` | 21°C | āĻĻā§‚āϰāĻŦāĻ°ā§āϤ⧀ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻžāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϏ⧇āĻ¨ā§āϏāϰ(remote temperature sensor) āĻĻā§āĻŦāĻžāϰāĻž āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻž āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻž āĻšā§Ÿ āϝ⧇āϟāĻŋāϕ⧇ ` bedroom ` āύāĻžāĻŽāĻ•āϰāĻŖ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇ āϝāĻžāϤ⧇ āĻāϟāĻŋ āϝ⧇āχ āϰ⧁āĻŽā§‡ āφāϛ⧇ āϏ⧇āχ āϰ⧁āĻŽāϕ⧇ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ | + +āĻ•ā§āϞāĻžāωāĻĄ āϏ⧇āĻŦāĻž āĻāχ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĄā§‡āϟāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϤāĻžāĻĒāϕ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāϤ⧇ āϕ⧀ āφāĻĻ⧇āĻļ āĻĒāĻžāĻ āĻžāĻŦ⧇ āϤāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ + +### āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒā§āϰ⧇āϰāĻŖ + +āύāĻžāχāϟāϞāĻžāχāϟāϟāĻŋāϕ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāĻžāϰ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻ…āĻ‚āĻļāϟāĻŋ āĻšāϞ⧋ āϞāĻžāχāϟ āϞ⧇āϭ⧇āϞ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ MQTT- āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇āϰ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āϟāĻĒāĻŋāϕ⧇ āĻĒāĻžāĻ āĻžāύ⧋āĨ¤ + +#### āĻ•āĻžāϜ + +āϞāĻžāχāϟ āϞ⧇āϭ⧇āϞ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ MQTT- āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇ āĻĒāĻžāĻ āĻžāύ⧋āĨ¤ + +āĻĄā§‡āϟāĻž JSON āĻšāĻŋāϏāĻžāĻŦ⧇ āĻāύāϕ⧋āĻĄ āĻ•āϰ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāϝāĻŧ – JSON āĻšāϞ⧋ JavaScript Object Notation āĻāϰ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āϰ⧂āĻĒ, āϝāĻž āϕ⧀/āĻ­ā§āϝāĻžāϞ⧁ āĻĒā§‡ā§ŸāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĄā§‡āϟāĻžāϕ⧇ āĻāύāϕ⧋āĻĄā§‡āĻĄ āĻŸā§‡āĻ•ā§āϏāϟ āĻ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĨ¤ + +✅ JSON āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϜāĻŧ⧇āύ⧇ āύāĻž āĻĨāĻžāĻ•āϞ⧇ āϤāĻž āĻāχ [JSON.org documentation](https://www.json.org/) āĻĨ⧇āϕ⧇ āĻļāĻŋāĻ–āϤ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ + +āĻĄāĻŋāĻ­āĻžāχāϏ āĻĨ⧇āϕ⧇ MQTT-āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇āϰ āĻ•āĻžāϛ⧇ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĒā§āϰ⧇āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āύ⧀āĻšā§‡āϰ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒāϟāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāĻŋāσ + +* [āφāϰāĻĄā§āχāύ⧋ Wio āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ](wio-terminal-telemetry.bn.md) +* [āϏāĻŋāĻ‚āϗ⧇āϞ āĻŦā§‹āĻ°ā§āĻĄ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ - āϰāĻžāĻ¸ā§āĻĒāĻŦ⧇āϰāĻŋ āĻĒāĻžāχ/āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ](single-board-computer-telemetry.bn.md) + +### MQTT āĻŦā§āϰ⧋āĻ•āĻžāϰ āĻšāϤ⧇ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻ—ā§āϰāĻšāĻŖ + +āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĒāĻžāĻ āĻžāύ⧋āϰ āϕ⧋āύ āĻ…āĻ°ā§āĻĨ āύ⧇āχ āϝāĻĻāĻŋ āĻ…āĻ¨ā§āϝ āĻĒā§āϰāĻžāĻ¨ā§āϤ⧇ āĻāϟāĻŋāϕ⧇ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāĻžāϰ āĻŽāϤ⧋ āĻ•āĻŋāϛ⧁ āύāĻž āĻĨāĻžāϕ⧇āĨ¤ āϞāĻžāχāϟ āϞ⧇āϭ⧇āϞ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋāϟāĻŋāϰ āĻĄā§‡āϟāĻž āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋāϕ⧇ āĻ•āĻŋāϛ⧁ āĻ—ā§āϰāĻžāĻšāϕ⧇āϰ āĻāϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻŧāĻ¨ā§€ā§ŸāϤāĻž āφāϛ⧇āĨ¤ āĻāχ 'āϏāĻžāĻ°ā§āĻ­āĻžāϰ' āϕ⧋āĻĄāϟāĻŋ āϏ⧇āχ āϧāϰāϪ⧇āϰ āϕ⧋āĻĄ āϝāĻž āĻŦ⧃āĻšāĻ¤ā§āϤāϰ āφāχāĻ“āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻ•ā§āϞāĻžāωāĻĄ āϏ⧇āĻŦāĻžāϤ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻŦā§‹, āϤāĻŦ⧇ āĻāĻ–āĻžāύ⧇ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āĻāχ āϕ⧋āĻĄāϟāĻŋ āϞ⧋āĻ•āĻžāϞ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ⧇ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰāĻŦā§‹ (āĻŦāĻž āφāĻŽāĻžāĻĻ⧇āϰ Pi-āϤ⧇ āϏāϰāĻžāϏāϰāĻŋ āϕ⧋āĻĄāĻŋāĻ‚ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦā§‹)āĨ¤ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄā§‡ āĻāĻ•āϟāĻŋ āĻĒāĻžāχāĻĨāύ āĻ…ā§āϝāĻžāĻĒ āĻĨāĻžāϕ⧇ āϝāĻž MQTT-āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϞāĻžāχāĻŸā§‡ āϞ⧇āϭ⧇āϞāϗ⧁āϞ⧋āϰ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻŦāĻžāĻ°ā§āϤāĻž āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāχ āĻĒāĻžāϠ⧇āϰ āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇, āĻāϟāĻŋāϤ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻŽā§‡āϏ⧇āϜ āϰāĻŋāĻĒā§āϞ⧇āϤ⧇ āĻĒāĻžāĻ āĻžāĻŦā§‹ āϝāĻžāϤ⧇ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āĻĨāĻžāĻ•āĻŦ⧇ āϝ⧇ āĻāϞāχāĻĄāĻŋ āĻ…āύ āύāĻž āĻ…āĻĢ āĻšāĻŦ⧇āĨ¤ + +✅ āĻ•āĻŋāϛ⧁ āĻ—āĻŦ⧇āώāύāĻž āĻ•āϰāĻŋāσ MQTT āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋āϰ āϕ⧀ āĻšāĻŦ⧇ āϝāĻĻāĻŋ āϕ⧋āύ⧋ āĻ—ā§āϰāĻžāĻšāĻ• āύāĻž āĻĨāĻžāϕ⧇? + +#### āĻĒāĻžāχāĻĨāύ āĻāĻŦāĻ‚ āĻ­āĻŋāĻāϏ āϕ⧋āĻĄ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻŋ + +āϞ⧋āĻ•āĻžāϞāĻŋ Python āĻāĻŦāĻ‚ VS Code āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž āύāĻž āĻĨāĻžāĻ•āϞ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϕ⧋āĻĄ āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻĻ⧁āχāϟāĻŋāϕ⧇āχ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻŦā§‹āĨ¤ āϝāĻĻāĻŋ āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞ āĻĄāĻŋāĻ­āĻžāχāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋ āĻŦāĻž āϰāĻžāĻ¸ā§āĻĒāĻŦ⧇āϰāĻŋ āĻĒāĻžāχāϤ⧇ āĻ•āĻžāϜ āĻ•āϰāĻŋ āϤāĻŦ⧇ āĻāχ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒāϟāĻŋ āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āϝ⧇āϤ⧇ āĻĒāĻžāϰāĻŋ āĨ¤ + +##### āĻ•āĻžāϜ + +Python āĻāĻŦāĻ‚ VS Code āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻŋāĨ¤ + +1. āĻĒāĻžāχāĻĨāύ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻŋāĨ¤ [Python downloads page](https://www.python.org/downloads/) āĻĨ⧇āϕ⧇ āĻĒāĻžāχāĻĨāύ⧇ āϏāĻ°ā§āĻŦāĻļ⧇āώ āĻ­āĻžāĻ°ā§āϏāύāϟāĻŋ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āĻŽā§‹āϤāĻžāĻŦ⧇āĻ• āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻŋāĨ¤ + +1. Visual Studio Code (VS Code) āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻŋāĨ¤ āφāĻŽāϰāĻž āĻāχ āχāĻĄāĻŋāϟāϰāϟāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒāĻžāχāĻĨāύ⧇ āϕ⧋āĻĄ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦā§‹āĨ¤ [VS Code documentation](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) āĻĨ⧇āϕ⧇ Visual Studio Code (VS Code) āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻžāϗ⧁āϞ⧋ āĻ…āύāϏ⧁āϰāĻŖ āĻ•āϰ⧇ Visual Studio Code (VS Code) āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻŋāĨ¤ + + > 💁 āĻāχ āĻĒāĻžāϠ⧇āϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻžāϗ⧁āϞ⧋ VS Code āĻāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āϞ⧇āĻ–āĻž āĻšāϞ⧇āĻ“ āĻāχ āĻĒāĻžāϠ⧇āϰ āϜāĻ¨ā§āϝ āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āϏ⧁āĻŦāĻŋāϧāĻžāĻŽāϤ āϟ⧁āϞ āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻĒāĻžāχāĻĨāύāĻŦ⧇āχāϜāĻŧāĻĄ āϝ⧇āϕ⧇āύ⧋ āφāχāĻĄāĻŋ āĻŦāĻž āχāĻĄāĻŋāϟāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ + +1. VS Code āĻāϰ Pylance āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύāϟāĻŋ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻŋāĨ¤ āĻĒāĻžāχāĻĨāύ āϞ⧇āĻ™ā§āĻ—ā§ā§Ÿā§‡āĻœā§‡āϰ āϏāĻžāĻĒā§‹āĻ°ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋ VS Code āĻāϰ āĻāĻ•āϟāĻŋ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύāĨ¤ āĻāϟāĻŋ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύāϟāĻŋ VS Code-āĻ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāϤ⧇ āĻšā§Ÿ [Pylance extension documentation](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance&WT.mc_id=academic-17441-jabenn) āĻĨ⧇āϕ⧇ āĻĻ⧇āϖ⧇ āύ⧇āχāĨ¤ + +#### āĻĒāĻžāχāĻĨāύ⧇āϰ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ + +āĻĒāĻžāχāĻĨāύ⧇āϰ āĻ…āĻ¨ā§āϝāϤāĻŽ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āĻĢāĻŋāϚāĻžāϰāϟāĻŋ āĻšāϞ [āĻĒāĻŋāĻĒ āĻĒā§āϝāĻžāϕ⧇āϜ](https://pypi.org) āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻžāϰ āĻ•ā§āώāĻŽāϤāĻž – āĻāχ āϕ⧋āĻĄā§‡āϰ āĻĒā§āϝāĻžāϕ⧇āϜāϗ⧁āϞāĻŋ āĻ…āĻ¨ā§āϝāĻĻ⧇āϰ āĻĻā§āĻŦāĻžāϰāĻž āϞ⧇āĻ–āĻž āĻšā§Ÿ āϝāĻž āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž āĻšā§ŸāĨ¤ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒāĻŋāĻĒ āĻĒā§āϝāĻžāϕ⧇āϜ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻž āϝāĻžā§Ÿ, āϤāĻžāϰāĻĒāϰ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϕ⧋āĻĄāϟāĻŋāϤ⧇ āϏ⧇āχ āĻĒā§āϝāĻžāϕ⧇āϜāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ MQTT- āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰāϤ⧇ āφāĻŽāϰāĻž āĻĒāĻŋāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒā§āϝāĻžāϕ⧇āϜ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻŦāĨ¤ + +āφāĻŽāϰāĻž āϝāĻ–āύ āϕ⧋āύ⧋ āĻĒā§āϝāĻžāϕ⧇āϜ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻŋ āϤāĻ–āύ āϤāĻž āĻĒ⧁āϰ⧋ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ āĻœā§ā§œā§‡ āĻĨāĻžāϕ⧇ āĻāĻŦāĻ‚ āϤāĻž āĻĨ⧇āϕ⧇ āĻĒā§āϝāĻžāϕ⧇āϜāĻŧ⧇āϰ āĻ­āĻžāĻ°ā§āϏāύāϜāύāĻŋāϤ āϏāĻŽāĻ¸ā§āϝāĻž āĻĻ⧇āĻ–āĻž āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇ – āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϝāĻ–āύ āĻĒā§āϝāĻžāϕ⧇āϜāĻŧ⧇āϰ āĻāĻ•āϟāĻŋ āĻ­āĻžāĻ°ā§āϏāύ⧇āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āϚāϞ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ­āĻŋāĻ¨ā§āύ āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻ“āχ āĻāĻ•āĻŋ āĻĒā§āϝāĻžāϕ⧇āĻœā§‡āϰ āύāϤ⧁āύ āĻ­āĻžāĻ°ā§āϏāύ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāϞ⧇ āφāϗ⧇āϰ āĻ­āĻžāĻ°ā§āϏāύ⧇ āĻŦā§āϝāĻžāϘāĻžāϤ āϘāϟāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāχ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϤ⧇ āωāĻ¤ā§āϤāϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āφāĻŽāϰāĻž [Python virtual environment](https://docs.python.org/3/library/venv.html) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦā§‹ āĻāĻŦāĻ‚ āϤāĻžāϤ⧇ āĻĒāĻžāχāĻĨāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĄā§‡āĻĄāĻŋāϕ⧇āĻŸā§‡āĻĄ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ āĻĨāĻžāĻ•āĻŦ⧇ āϝāĻžāϤ⧇ āϝāĻ–āύ āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āĻĒāĻŋāĻĒ āĻĒā§āϝāĻžāϕ⧇āϜāϏāĻŽā§‚āĻš āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāϞ⧇ āϤāĻž āĻāχ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āχāĻ¨ā§āϏāϟāϞ āĻšāĻŦ⧇āĨ¤ + +##### āĻ•āĻžāϜ + +āĻĒāĻžāχāĻĨāύ⧇āϰ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻāĻŦāĻ‚ MQTT āĻĒāĻŋāĻĒ āĻĒā§āϝāĻžāϕ⧇āϜ āχāĻ¨ā§āϏāϟāϞāĨ¤ + +1. āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ āĻŦāĻž āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϞāĻžāχāύ āĻšāϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒāĻ›āĻ¨ā§āĻĻāϏāχ āϞ⧋āϕ⧇āĻļāύ⧇ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āϤ⧈āϰāĻŋ āĻāĻŦāĻ‚ āύ⧇āĻŦāĻŋāϗ⧇āχāϟ āĻ•āϰāϤ⧇ āύāĻŋāĻšā§‡āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϗ⧁āϞ⧋ āϰāĻžāύ āĻĻāĻŋāχāσ + + ```sh + mkdir nightlight-server + cd nightlight-server + ``` + +1. āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ `.venv` āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āĻŦāĻžāύāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϰāĻžāύ āĻ•āϰāĻŋāĨ¤ + + ```sh + python3 -m venv .venv + ``` + + > 💁 āϝāĻĻāĻŋ Python 2 āĻāϰ āϏāĻžāĻĨ⧇ Python 3(āϞ⧇āĻŸā§‡āĻ¸ā§āϟ āĻ­āĻžāĻ°ā§āϏāύ) āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻž āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻŦāĻžāύāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ `python3`-āϕ⧇ āĻ•āϞ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϝāĻĻāĻŋ Python 2 āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻž āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ `python` āĻ•āϞ āĻ•āϰāϞ⧇ āϤāĻž Python 3 āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ Python 2-āϕ⧇ āĻ•āϞ āĻ•āϰāĻŦ⧇āĨ¤ + +1. āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āϚāĻžāϞ⧁ āĻ•āϰāϤ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻāĻŋāχāσ + + * Windows-āĻ āϰāĻžāύ āĻ•āϰāϤ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻĻāĻŋāχāσ + + ```cmd + .venv\Scripts\activate.bat + ``` + + * macOS āĻŦāĻž Linux āĻ āϰāĻžāύ āĻ•āϰāϤ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻĻāĻŋāχāσ + + ```cmd + source ./.venv/bin/activate + ``` + +1. āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžāϰāύāĻŽā§‡āĻ¨ā§āϟāϟāĻŋ āĻāĻ•āĻŦāĻžāϰ āϚāĻžāϞ⧁ āĻšāĻ“ā§ŸāĻžāϰ āĻĒāϰ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻŦāĻžāύāĻžāϤ⧇ āĻĒāĻžāχāĻĨāύ⧇āϰ āϝ⧇ āĻ­āĻžāĻ°ā§āϏāύāϟāĻŋ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§Ÿā§‡āĻ›āĻŋāϞ⧋ āϤāĻž āĻĄāĻŋāĻĢāĻ˛ā§āϟāĻ­āĻžāĻŦ⧇ `python` āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϏ⧇āχ āĻ­āĻžāĻ°ā§āϏāύāϟāĻŋāϕ⧇ āϰāĻžāύ āĻ•āϰāĻžāĻŦ⧇āĨ¤ āĻĒāĻžāχāĻĨāύ⧇ āĻ­āĻžāĻ°ā§āϏāύ āϜāĻžāύāϤ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϰāĻžāύ āĻ•āϰāĻŦā§‹āσ + + ```sh + python --version + ``` + + āφāωāϟāĻĒ⧁āϟāϟāĻŋ āύāĻŋāĻŽā§āύ⧇āϰ āĻŽāϤ⧋ āĻšāĻŦ⧇āσ + + ```output + (.venv) ➜ nightlight-server python --version + Python 3.9.1 + ``` + + > 💁 āĻĒāĻžāχāĻĨāύ⧇āϰ āĻ­āĻžāĻ°ā§āϏāύ āĻ­āĻŋāĻ¨ā§āύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻŦ⧇ āĻ­āĻžāĻ°ā§āϏāύ ā§Š.ā§Ŧ āĻŦāĻž āϤāĻžāϰāĻ“ āĻŦ⧇āĻļāĻŋ āĻšāϞ⧇ āĻ­āĻžāϞ⧋āĨ¤ āϝāĻĻāĻŋ āĻāχ āĻ­āĻžāĻ°ā§āϏāύ āχāĻ¨ā§āϏāϟāϞ āύāĻž āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ āĻāχ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰāϟāĻŋ āĻĄāĻŋāϞāĻŋāϟ āĻ•āϰ⧇ āĻĒāĻžāχāĻĨāύ⧇āϰ āύāϤ⧁āύ āĻ­āĻžāĻ°ā§āϏāύāϟāĻŋ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰ⧇ āφāĻŦāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻŋāĨ¤ + +1. [Paho-MQTT](https://pypi.org/project/paho-mqtt/)(āĻāĻ•āϟāĻŋ āϜāύāĻĒā§āϰāĻŋ⧟ MQTT āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ) āĻĒāĻŋāĻĒ āĻĒā§āϝāĻžāϕ⧇āϜāϟāĻŋ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāϤ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϰāĻžāύ āĻ•āϰāĻŋāĨ¤ + + ```sh + pip install paho-mqtt + ``` + + āĻāχ āĻĒāĻŋāĻĒ āĻĒā§āϝāĻžāϕ⧇āϜāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ āχāĻ¨ā§āϏāϟāϞ āĻšāĻŦ⧇āĨ¤ + +#### āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄāϟāĻŋ āϞāĻŋāĻ–āĻŋ + +āĻāĻ–āύ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄāϟāĻŋ āĻĒāĻžāχāĻĨāύ⧇ āϞāĻŋāĻ–āĻŦā§‹āĨ¤ + +##### āĻ•āĻžāϜ + +āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄāϟāĻŋ āϞāĻŋāĻ–āĻŋāĨ¤ + +1. āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āĻ­āĻŋāϤāϰ⧇ `app.py` āύāĻžāĻŽā§‡ āĻāĻ•āϟāĻŋ āĻĒāĻžāχāĻĨāύ āĻĢāĻžāχāϞ āĻŦāĻžāύāĻžāϤ⧇ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ āĻŦāĻž āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϞāĻžāχāύ āĻšāϤ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻĻāĻŋāχāσ + + * Windows-āĻ āϰāĻžāύ āĻ•āϰāϤ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻĻāĻŋāχāσ + + ```cmd + type nul > app.py + ``` + + * macOS āĻŦāĻž Linux āĻ āϰāĻžāύ āĻ•āϰāϤ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻĻāĻŋāχāσ + + ```cmd + touch app.py + ``` + +1. āĻ•āĻžāϰ⧇āĻ¨ā§āϟ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰāϟāĻŋ VS Code-āĻ āĻ“āĻĒ⧇āύ āĻ•āϰāĻŋāσ + + ```sh + code . + ``` + +1. āϝāĻ–āύ VS Code-āϟāĻŋ āĻ“āĻĒ⧇āύ āĻšāĻŦ⧇ āϤāĻ–āύ āϤāĻž āĻĒāĻžāχāĻĨāύ⧇āϰ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟāϟāĻŋāϕ⧇ āϚāĻžāϞ⧁ āĻ•āϰāĻŦ⧇āĨ¤ āĻāϟāĻŋ āωāĻĒāϰ⧇ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻŦāĻžāϰ⧇ āĻĻ⧇āĻ–āĻž āϝāĻžāĻŦ⧇āσ + + ![VS Code showing the selected virtual environment](../../../../images/vscode-virtual-env.png) + +1. āϝāĻĻāĻŋ VS Code āĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻšāĻ“ā§ŸāĻžāϰ āϏāĻŽā§Ÿ VS Code āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞāϟāĻŋ āϚāĻžāϞ⧁āϰāϤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžā§Ÿ āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ VS Code-āĻ āĻāĻ•āϟāĻŋāϭ⧇āϟ āĻšāĻŦ⧇ āύāĻžāĨ¤ āĻāϰ āĻĨ⧇āϕ⧇ āωāĻ¤ā§āϤāϰāϪ⧇āϰ āϏāĻšāϜ āωāĻĒāĻžā§Ÿ āĻšāĻšā§āϛ⧇ **Kill the active terminal instance** āĻŦāĻžāϟāύāϟāĻŋāϤ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧇ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞāϟāĻŋāϕ⧇ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ āĻĻāĻŋāĻŦā§‹āĨ¤ + + ![VS Code Kill the active terminal instance button](../../../../images/vscode-kill-terminal.png) + +1. āύāϤ⧁āύ VS Code āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ āϚāĻžāϞ⧁ āĻ•āϰāϤ⧇ *Terminal -> New Terminal – āĻ āϏāĻŋāϞ⧇āĻ•ā§āϟ āĻ•āϰāĻŦā§‹ āĻŦāĻž `` CTRL+` `` āĻĒā§āϰ⧇āϏ āĻ•āϰāĻŦā§‹āĨ¤ āĻāχ āύāϤ⧁āύ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ•āϞ āĻ•āϰ⧇ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟāϟāĻŋ āĻāĻ•ā§āϟāĻŋāϭ⧇āϟ āĻ•āϰāĻŦ⧇ āϝāĻžāϰ āĻĢāϞ⧇ āĻāϟāĻŋ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āϞ⧋āĻĄ āĻšā§Ÿā§‡ āφāϏāĻŦ⧇āĨ¤ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āύāĻžāĻŽāϟāĻŋ (`.venv`) āĻĒā§āϰāĻŽā§āĻĒāĻŸā§‡ āĻĻ⧇āĻ–āĻž āϝāĻžāĻŦ⧇āσ + + ```output + ➜ nightlight source .venv/bin/activate + (.venv) ➜ nightlight + ``` + +1. VS Code explorer āĻĨ⧇āϕ⧇ `app.py` āĻĢāĻžāχāϞāϟāĻŋ āĻ“āĻĒ⧇āύ āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āύāĻŋāĻŽā§āύ⧇āϰ āϕ⧋āĻĄāϟāĻŋ āĻāĻĄ āĻ•āϰāĻŋāσ + + ```python + import json + import time + + import paho.mqtt.client as mqtt + + id = '' + + client_telemetry_topic = id + '/telemetry' + client_name = id + 'nightlight_server' + + mqtt_client = mqtt.Client(client_name) + mqtt_client.connect('test.mosquitto.org') + + mqtt_client.loop_start() + + def handle_telemetry(client, userdata, message): + payload = json.loads(message.payload.decode()) + print("Message received:", payload) + + mqtt_client.subscribe(client_telemetry_topic) + mqtt_client.on_message = handle_telemetry + + while True: + time.sleep(2) + ``` + + āφāĻŽāĻĻ⧇āϰ āĻĄāĻŋāĻ­āĻžāχāϏ āĻŦāĻžāύāĻžāύ⧋āϰ āϏāĻŽā§Ÿ āϝ⧇ āχāωāύāĻŋāĻ• āφāχāĻĄāĻŋāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĻ›āĻŋāϞāĻžāĻŽ āϤāĻž ā§ŦāύāĻ‚ āϞāĻžāχāύ⧇āϰ ``-āϤ⧇ āĻŦāϏāĻŋā§Ÿā§‡ āĻĻāĻŋāχāĨ¤ + + âš ī¸ āĻāχ āφāχāĻĄāĻŋāϟāĻŋ **āĻ…āĻŦā§āϝāĻļāχ** āφāĻŽāĻžāĻĻ⧇āϰ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻāĻ•āχ āφāχāĻĄāĻŋ āĻšāϤ⧇ āĻšāĻŦ⧇ āύ⧟āϤ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄ āϏāĻ āĻŋāĻ• āϟāĻĒāĻŋāĻ• āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻŦāĻž āĻĒāĻžāĻŦāϞāĻŋāĻļ āϕ⧋āύ⧋āϟāĻŋāχ āĻ•āϰāĻŦ⧇ āύāĻžāĨ¤ + + āĻāχ āϕ⧋āĻĄāϟāĻŋ āĻāĻ•āϟāĻŋ āχāωāύāĻŋāĻ• āύāĻžāĻŽāϏāĻš āĻāĻ•āϟāĻŋ MQTT āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϝāĻž * test.mosquitto.org * āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšā§ŸāĨ¤ āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĒā§āϰāϏ⧇āϏāĻŋāĻ‚ āϞ⧁āĻĒ āϚāĻžāϞ⧁ āĻ•āϰ⧇ āϝ⧇āϕ⧋āύ⧋ āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āϟāĻĒāĻŋāϕ⧇āϰ āĻŽā§‡āϏ⧇āϜ āϞāĻŋāϏ⧇āύāĻŋāĻ‚ āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āĻĨā§āϰ⧇āĻĄā§‡ āϰāĻžāύ āĻ•āϰ⧇ āĻ•āϰ⧇āĨ¤ + + āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āϟāĻĒāĻŋāϕ⧇āϰ āĻŽā§‡āϏ⧇āϜāϗ⧁āϞāĻŋāϤ⧇ āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰ⧇ āφāϰ āϝāĻ–āύ āĻŽā§‡āϏ⧇āϜ āĻ—ā§ƒāĻšā§€āϤ āĻšā§Ÿ āϤāĻ–āύāχ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋāϕ⧇ āĻ•āϞ āĻ•āϰāĻž āĻšā§ŸāĨ¤ āϝāĻ–āύ āĻāĻ•āϟāĻŋ āĻŸā§‡āϞ⧇āĻŽā§‡āĻŸā§āϰāĻŋ āĻŽā§‡āϏ⧇āϜ āĻ—ā§ƒāĻšā§€āϤ āĻšā§Ÿ āϤāĻ–āύāχ `handle_telemetry` āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻ•āϞ āĻ•āϰāĻž āĻšā§Ÿ āĻāĻŦāĻ‚ āĻ•āύāϏ⧋āϞ⧇ āĻ—ā§ƒāĻšā§€āϤ āĻŦāĻžāĻ°ā§āϤāĻžāϟāĻŋ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻšā§ŸāĨ¤ + + āϏāĻŦāĻļ⧇āώ⧇ āĻāĻ•āϟāĻŋ āχāύāĻĢāĻŋāύāĻŋāϟ āϞ⧁āĻĒ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āϰāĻžāύ āĻšā§ŸāĨ¤ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āĻĨā§āϰ⧇āĻĄā§‡ MQTT āĻ•ā§āϞāĻžā§Ÿā§‡āĻ¨ā§āϟ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞ⧋āϤ⧇ āϞāĻŋāϏ⧇āύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻŽā§‡āχāύ āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āϰāĻžāύ āĻšāĻ“ā§ŸāĻž āĻ…āĻŦāĻ¸ā§āĻĨāĻžā§Ÿ āĻāϟāĻŋ āϏāĻŦāϏāĻŽā§Ÿ āϰāĻžāύ āĻšā§ŸāĨ¤ + +1. āĻĒāĻžāχāĻĨāύ āĻāĻĒāϟāĻŋ āϰāĻžāύ āĻ•āϰāϤ⧇ VS Code āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ āĻšāϤ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āϕ⧋āĻĄāϟāĻŋ āϰāĻžāύ āĻ•āϰāĻŋāσ + + ```sh + python app.py + ``` + + āĻāĻĒāϟāĻŋ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āĻŽā§‡āϏ⧇āϜāϏāĻŽā§‚āĻš āϞāĻŋāϏ⧇āύ āĻ•āϰāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ⧇āĨ¤ + +1. āφāĻŽāĻžāĻĻ⧇āϰ āĻ…āĻŦā§āϝāĻļāχ āύāĻŋāĻļā§āϚāĻŋāϤ āĻšāϤ⧇ āĻšāĻŦ⧇ āϝ⧇ āĻĄāĻŋāĻ­āĻžāχāϏāϟāĻŋ āϰāĻžāύ āĻ•āϰāϛ⧇ āĻ•āĻŋāύāĻž āĻāĻŦāĻ‚ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻŽā§‡āϏ⧇āϜ āϏ⧇āĻ¨ā§āĻĄ āĻ•āϰāϛ⧇ āĻ•āĻŋāύāĻžāĨ¤ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āĻŦāĻž āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻĄāĻŋāĻ­āĻžāχāϏ āĻšāϤ⧇ āĻļāύāĻžāĻ•ā§āϤāĻ•ā§ƒāϤ āϞāĻžāχāϟ āϞ⧇āϭ⧇āϞāϟāĻŋāϕ⧇ āĻāĻĄāϜāĻžāĻ¸ā§āϟ āĻ•āϰāĻŋāĨ¤ āĻ—ā§ƒāĻšā§€āϤ āĻŦāĻžāĻ°ā§āϤāĻžāϏāĻŽā§‚āĻš āύāĻŋāĻšā§‡āϰ āĻŽāϤ⧋ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻšāĻŦ⧇āĨ¤ + + ```output + (.venv) ➜ nightlight-server python app.py + Message received: {'light': 0} + Message received: {'light': 400} + ``` + + āĻĒā§āϰ⧇āϰāĻŋāϤ āĻŽā§‡āϏ⧇āϜ āĻ—ā§āϰāĻšāϪ⧇āϰ āϜāĻ¨ā§āϝ āύāĻžāχāϟāϞāĻžāχāϟ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ app.py āĻĢāĻžāχāϞāϟāĻŋāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āϰāĻžāύ āĻ…āĻŦāĻ¸ā§āĻĨāĻžā§Ÿ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇āĨ¤ + +> 💁 āϕ⧋āĻĄāϟāĻŋ [code-server/server](code-server/server) āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžāĻŦ⧇āĨ¤ + +### āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻ•āϤāĻŦāĻžāϰ āĻĒāĻžāĻ āĻžāύ⧋ āωāϚāĻŋāϤ? + +āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻŦāĻŋāώ⧟ āĻšāϞ āĻ•āϤāĻŦāĻžāϰ āĻĄā§‡āϟāĻž āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻāĻŦāĻ‚ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž āωāϚāĻŋāϤ? āωāĻ¤ā§āϤāϰāϟāĻŋ āĻšāϞ, āĻāϟāĻŋ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϭ⧇āĻĻ⧇ āύāĻŋāĻ°ā§āĻ­āϰāĻļā§€āϞāĨ¤ āϝ⧇āĻŽāύāσ āφāĻŽāϰāĻž āϝāĻĻāĻŋ āĻĒā§āϰāĻžāϝāĻŧāχ āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻŋ āϤāĻŦ⧇ āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āĻĒā§āϰāϤāĻŋ āĻĻā§āϰ⧁āϤ āϏāĻžāϰāĻž āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰāĻŦā§‹ āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāϰāĻž āϝāĻĻāĻŋ āφāϰāĻ“ āĻĒāĻžāĻ“ā§ŸāĻžāϰ, āĻŦā§āϝāĻžāĻ¨ā§āĻĄāωāχāĻĨ, āĻĄā§‡āϟāĻž āĻŦā§āϝāĻžāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋ āϤāĻžāĻšāϞ⧇ āĻāχāϗ⧁āϞ⧋ āĻĒā§āϰāϏ⧇āϏ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāϰāĻ“ āĻ•ā§āϞāĻžāωāĻĄ āϰāĻŋāϏ⧋āĻ°ā§āϏ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāĻŦ⧇ āϝāĻžāϰ āĻĢāϞ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāĻžāϝāĻŧāχ āϝāĻĨ⧇āĻˇā§āϟ āĻĒāϰāĻŋāĻŽāĻžāϪ⧇ āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ āϤāĻŦ⧇ āϤāĻž āϖ⧁āĻŦ āĻŦ⧇āĻļāĻŋ āύāϝāĻŧāĨ¤ + +āĻāĻ•āϟāĻŋ āĻĨāĻžāĻ°ā§āĻŽā§‹āĻ¸ā§āĻŸā§āϝāĻžāϟ āϝāĻĻāĻŋ āĻ•ā§Ÿā§‡āĻ• āĻŽāĻŋāύāĻŋāϟ āĻĒāϰ āĻĒāϰ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻž āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰ⧇ āϤāĻŦ⧇ āϤāĻž āĻĒā§āĻ°ā§Ÿā§‹āϜāύ⧇āϰ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•āĻžāϰāĻŖ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻž āĻĒā§āϰāϤāĻŋāύāĻŋ⧟āϤ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšā§Ÿ āύāĻžāĨ¤ āϝāĻĻāĻŋ āφāĻŽāϰāĻž āĻĻ⧈āύāĻŋāĻ• āĻāĻ•āĻŦāĻžāϰ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻž āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻŋ āϤāĻŦ⧇ āĻ­āϰāĻĻ⧁āĻĒ⧁āϰ⧇ āύāĻžāχāϟāϟāĻžāχāĻŽā§‡āϰ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻžā§Ÿ āφāĻŽāĻžāĻĻ⧇āϰ āϘāϰāϟāĻŋāϕ⧇ āωāĻ¤ā§āϤāĻĒā§āϤ āĻ•āϰ⧇ āĻŦāϏāĻŦā§‹āĨ¤ āĻ…āĻĒāϰāĻĒāĻ•ā§āώ⧇ āφāĻŽāϰāĻž āϝāĻĻāĻŋ āĻĒā§āϰāϤāĻŋ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻŋ āϤāĻŦ⧇ āĻ…āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āϏāĻšāĻ¸ā§āϰāĻžāϧāĻŋāĻ• āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻžāϰ āĻĒāϰāĻŋāĻŽāĻžāĻĒ⧇āϰ āĻĄā§‡āϟāĻž āϤ⧈āϰāĻŋ āĻšāĻŦ⧇ āϝāĻžāϤ⧇ āχāωāϜāĻžāϰ⧇āϰ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āĻāĻŦāĻ‚ āĻŦā§āϝāĻžāĻ¨ā§āĻĄāωāχāĻĨ āĻŦ⧇āĻļāĻŋ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻŦ⧇ (āϝāĻž āϞāĻŋāĻŽāĻŋāĻŸā§‡āĻĄ āĻŦā§āϝāĻžāĻ¨ā§āĻĄāωāχāĻĨ āĻĒā§āĻ˛ā§āϝāĻžāύ⧇ āϚāϞāĻž āχāωāϜāĻžāϰāĻĻ⧇āϰ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϤ⧇ āĻĒāĻžāϰ⧇) āĻāĻŦāĻ‚ āφāϰāĻ“ āĻĒāĻžāĻ“ā§ŸāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇ āϝāĻž āĻŦā§āϝāĻžāϟāĻžāϰāĻŋ āϚāĻžāϞāĻŋāϤ āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϤ⧇ āĻĒāĻžāϰ⧇ (āϝ⧇āĻŽāύāσ āϰāĻŋāĻŽā§‹āϟ āϏ⧇āĻ¨ā§āϏāϰ) āϝāĻžāϰ āĻĢāϞ⧇ āĻ•ā§āϞāĻžāωāĻĄ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻŋāĻ‚ āϰāĻŋāϏ⧋āĻ°ā§āϏ⧇āϰ āĻĒā§āϰāϏ⧇āϏāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§‹āϰāĻŋāĻ‚ āĻāϰ āĻŦā§āϝāϝāĻŧ āĻŦā§‡ā§œā§‡ āϝāĻžāĻŦ⧇āĨ¤ + +āϝāĻĻāĻŋ āϕ⧋āύ āĻĢā§āϝāĻžāĻ•ā§āϟāϰāĻŋāϤ⧇ āϕ⧋āύ āĻŽā§‡āϏāĻŋāύāĻžāϰāĻŋ āĻĄā§‡āϟāĻž āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšā§Ÿ āĻāĻŦāĻ‚ āϝāĻĻāĻŋ āĻāχ āĻŽā§‡āϏāĻŋāύāϟāĻŋ āύāĻˇā§āϟ āĻšā§Ÿ āϤāĻŦ⧇ āĻŦāĻŋāĻĒāĻœā§āϜāύāĻ• āĻ•ā§āώāϤāĻŋ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻžāϰ āϏāĻžāĻĨ⧇ āĻ•āϝāĻŧ⧇āĻ• āĻŽāĻŋāϞāĻŋāϝāĻŧāύ āĻĄāϞāĻžāϰ⧇āϰ āϰāĻžāϜāĻ¸ā§āĻŦāĻ“ āύāĻˇā§āϟ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϤāĻžāχ āĻāĻŽāύ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤ⧇ āĻĒā§āϰāϤāĻŋ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āĻāĻ•āĻžāϧāĻŋāĻ•āĻŦāĻžāϰ āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻž āĻ…āĻŦāĻļā§āϝāχ āϝ⧁āĻ•ā§āϤāĻŋāϝ⧁āĻ•ā§āϤāĨ¤ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋāϝ⧇āϕ⧋āύ āϝāĻ¨ā§āĻ¤ā§āϰ āύāĻˇā§āϟ āĻšāĻ“ā§ŸāĻžāϰ āφāϗ⧇ āϏ⧇āϟāĻŋāϕ⧇ āĻŦāĻ¨ā§āϧ āĻāĻŦāĻ‚ āĻ āĻŋāĻ• āĻ•āϰāĻž āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āϤāĻž āχāĻ¨ā§āĻĄāĻŋāϕ⧇āϟ āĻ•āϰ⧇ āĻĻā§‡ā§Ÿ, āϤāĻžāχ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻŽāĻŋāϏ āĻšāĻ“ā§ŸāĻžāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦā§āϝāĻžāĻ¨ā§āĻĄāωāχāĻĨ āύāĻˇā§āϟ āĻšāĻ“ā§ŸāĻž āĻ­āĻžāϞāĨ¤ + +> 💁 āĻāχ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϤ⧇,āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āĻšā§āϰāĻžāϏ āĻ•āϰāϤ⧇ āĻĒā§āϰāĻĨāĻŽ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĒā§āϰāϏ⧇āϏ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻāϜ(edge) āĻĄāĻŋāĻ­āĻžāχāϏ āϰāĻžāĻ–āĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ + +### āϞāϏ āĻ…āĻĢ āĻ•āĻžāύ⧇āĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ + +āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āϏāĻ‚āϝ⧋āĻ—āϏāĻŽā§‚āĻš āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻ…āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ,āĻŦāĻŋāĻ­ā§āϰāĻžāϟāĻĒā§‚āĻ°ā§āĻŖ āĨ¤ āĻāχ āĻ…āĻŦāĻ¸ā§āĻĨāĻžā§Ÿ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āĻ•āĻŋ āĻ•āϰāĻž āωāϚāĻŋāϤ – āĻāϟāĻŋ āĻ•āĻŋ āĻĄā§‡āϟāĻžāϕ⧇ āĻšāĻžāϰāĻžāϤ⧇ āĻĻāĻŋāĻŦ⧇ āύāĻžāĻ•āĻŋ āĻ•āĻžāύ⧇āĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ āĻĒ⧁āύāϰāĻžā§Ÿ āύāĻž āφāϏāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻĄā§‡āϟāĻžāϕ⧇ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰ⧇ āϰāĻžāĻ–āĻŦ⧇? āφāĻŦāĻžāϰ⧋ āωāĻ¤ā§āϤāϰāϟāĻŋ āĻšāĻšā§āϛ⧇ āĻāϟāĻŋ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϭ⧇āĻĻ⧇ āύāĻŋāĻ°ā§āĻ­āϰāĻļā§€āϞāĨ¤ + +āĻāĻ•āϟāĻŋ āĻĨāĻžāĻ°ā§āĻŽā§‹āĻ¸ā§āĻŸā§āϝāĻžāϟ āĻāϰ āύāϤ⧁āύ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻž āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻž āĻŽāĻžāĻ¤ā§āϰāχ āφāϗ⧇āϰ āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻ•āϰāĻž āĻĄā§‡āϟāĻžāϟāĻŋ āĻšāĻžāϰāĻŋāϝāĻŧ⧇ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ ⧍ā§Ļ āĻŽāĻŋāύāĻŋāϟ āĻĒā§‚āĻ°ā§āĻŦ⧇ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻž ⧍ā§Ļ.ā§Ģ°C āĻ›āĻŋāϞ āĻŦāĻž āĻāĻ–āύ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻž ā§§ā§¯Â°C āϤāĻž āύāĻŋā§Ÿā§‡ āĻšāĻŋāϟāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒāĻ°ā§‹ā§ŸāĻž āĻ•āϰ⧇ āύāĻž, āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻŽā§āĻšā§‚āĻ°ā§āϤ⧇āϰ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻžāχ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻŦ⧇ āϝ⧇ āĻšāĻŋāϟāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϟāĻŋ āĻ…āύ āĻšāĻŦ⧇ āύāĻžāĻ•āĻŋ āĻ…āĻĢ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ + +āĻŽā§‡āĻļāĻŋāύāĻžāϰāĻŋāϰ āϜāĻ¨ā§āϝ āĻĄā§‡āϟāĻž āϰāĻžāĻ–āĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āĻŦāĻŋāĻļ⧇āώāϤ āϝāĻĻāĻŋ āĻāϟāĻŋ āĻŸā§āϰ⧇āĻ¨ā§āĻĄāϏ(trends) āϏāĻ¨ā§āϧāĻžāύ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤ āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āĻŽā§‡āĻļāĻŋāύ āϞāĻžāĻ°ā§āύāĻŋāĻ‚ āĻŽāĻĄā§‡āϞ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āϏāĻŽā§Ÿā§‡āϰ āĻŽāĻ§ā§āϝ⧇(āϝ⧇āĻŽāύ āĻļ⧇āώ āϘāĻ¨ā§āϟāĻžā§Ÿ) āĻĄā§‡āϟāĻž āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰ⧇ āĻĄā§‡āϟāĻžāϰ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽāϏāĻŽā§‚āĻšā§‡ āĻāύ⧋āĻŽā§āϝāĻžāϞāĻŋ āϚāĻŋāĻšā§āύāĻŋāϤ āĻ•āϰ⧇ āĻāύ⧋āĻŽā§āϝāĻžāϞāĻžāϏ āĻĄā§‡āϟāĻž āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāϟāĻŋ āĻĒā§āϰāĻžāϝāĻŧāχ predictive maintenance āĻāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧ, āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āϞāĻ•ā§āώāϪ⧇āϰ āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰ⧇ āϝāĻžāϤ⧇ āĻĻā§āϰ⧁āϤ āϕ⧋āύāĻ“ āĻ•āĻŋāϛ⧁ āϭ⧇āϙ⧇ āϝāĻžāĻ“ā§ŸāĻžāϰ āφāϗ⧇āχ āĻāϟāĻŋ āĻŽā§‡āϰāĻžāĻŽāϤ āĻŦāĻž āϰāĻŋāĻĒā§āϞ⧇āϏ āĻ•āϰāĻž āϝāĻžā§Ÿ āĨ¤ āĻāύ⧋āĻŽāϞāĻŋ āĻĄāĻŋāĻŸā§‡āĻ•āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻŽā§‡āĻļāĻŋāύ⧇āϰ āĻĒā§āϰ⧇āϰāĻŋāϤ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋāϟāĻŋāϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻŦāĻŋāϟāϕ⧇ āĻĒā§āϰāϏ⧇āϏ āĻ•āϰāĻž āĻšā§Ÿ āϤāĻžāχ āϝāĻ–āύ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϟāĻŋ āĻĒ⧁āύāϰāĻžāϝāĻŧ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰ⧇ āϤāĻ–āύ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āφāωāĻŸā§‡āĻœā§‡āϰ āϏāĻŽāϝāĻŧ āϤ⧈āϰāĻŋ āĻšāĻ“ā§ŸāĻž āϏāĻŽāĻ¸ā§āϤ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ + +āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āĻĄāĻŋāϜāĻžāχāύāĻžāϰāĻĻ⧇āϰ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāĻž āωāϚāĻŋāϤ āϝāĻžāϤ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āφāωāĻŸā§‡āĻœā§‡āϰ āϏāĻŽāϝāĻŧ āĻŦāĻž āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύāϜāύāĻŋāϤ āĻ•āĻžāϰāϪ⧇ āϏāĻŋāĻ—āĻ¨ā§āϝāĻžāϞ āϞāϏ⧇āϰ āϏāĻŽā§Ÿ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āĻ•āĻŋāύāĻžāĨ¤ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āĻĨāĻžāĻ°ā§āĻŽā§‹āĻ¸ā§āĻŸā§āϝāĻžāϟ āϝāĻĻāĻŋ āφāωāĻŸā§‡āĻœā§‡āϰ āĻ•āĻžāϰāύ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāϤ⧇ āύāĻž āĻĒāĻžāϰ⧇ āϤāĻŦ⧇ āĻšāĻŋāϟāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϕ⧇ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āĻ•āϰāϤ⧇ āϤāĻžāϤ⧇ āĻ…āĻŦāĻļā§āϝāχ āϏ⧀āĻŽāĻŋāϤ āϏāĻ‚āĻ–ā§āϝāĻ• āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύ⧇āĻ“ā§ŸāĻžāϰ āϏāĻ•ā§āώāĻŽāϤāĻž āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇āĨ¤ + +[![āĻāχ āĻĢ⧇āϰāĻžāϰ⧀āϟāĻŋ āφāĻšā§āĻ›āĻžāĻĻāĻŋāϤ āĻšā§Ÿā§‡ āφāϛ⧇ āĻ•āĻžāϰāĻŖ āϕ⧇āω āĻāĻ•āϜāύ āφāĻ¨ā§āĻĄāĻžāϰāĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄā§‡ āĻāϟāĻŋāϕ⧇ āφāĻĒāĻ—ā§āϰ⧇āĻĄ āĻ•āϰāϤ⧇ āĻšā§‡ā§Ÿā§‡āĻ›āĻŋāϞ āϝ⧇āĻ–āĻžāύ⧇ āϕ⧋āύ⧋ āϏ⧇āϞ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āύ⧇āχ ](../../../../images/bricked-car.png)](https://twitter.com/internetofshit/status/1315736960082808832) + +āϞāϏ āĻ…āĻĢ āĻ•āĻžāύ⧇āĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ MQTT-āĻ•āϤ⧃āĻ• āϏāĻžāĻŽāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ⧇ āĻĄāĻŋāĻ­āĻžāχāϏ āĻāĻŦāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄāϕ⧇ āĻŽā§‡āϏ⧇āϜ āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻžāϰ āĻĻāĻžā§ŸāĻ­āĻžāϰ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āωāĻĻāĻžāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāĻ•āϟāĻŋ āϰāĻŋāĻĒā§āϞāĻžāχ āϟāĻĒāĻŋāϕ⧇ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻŽā§‡āϏ⧇āϜāϏāĻŽā§‚āĻšā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒā§āϰ⧇āϰāĻŋāϤ āϏāĻŽāĻ¸ā§āϤ āĻŽā§‡āϏ⧇āϜāϏāĻŽā§‚āĻš āĻĒā§āĻ°ā§Ÿā§‹āϜāύ⧇ āϚāĻžāĻ“ā§ŸāĻž āĻāĻŦāĻ‚ āϤāĻž āϝāĻĻāĻŋ āύāĻž āĻšā§Ÿ āϤāĻŦ⧇ āϏ⧇āϗ⧁āϞ⧋ āĻŽā§āϝāĻžāύ⧁⧟āĻžāϞāĻŋ āĻāĻ•āϟāĻŋ āϏāĻžāϰāĻŋāϤ⧇ āĻĨāĻžāĻ•āĻŦ⧇ āϝāĻžāϤ⧇ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϰāĻŋāĻĒā§āϞ⧇āϤ⧇ āĻĻāĻŋāĻŦ⧇āĨ¤ + +## āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏāĻŽā§‚āĻš + +āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏ āĻšāĻšā§āϛ⧇ āĻŽā§‡āϏ⧇āϜ āϝāĻž āĻ•ā§āϞāĻžāωāĻĄ āĻĻā§āĻŦāĻžāϰāĻž āϕ⧋āύ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž āĻšā§Ÿ āϝāĻžāϤ⧇ āĻ•āĻŋāϛ⧁ āĻ•āϰāĻžāϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āĻĻ⧇āĻ“ā§ŸāĻž āĻĨāĻžāϕ⧇āĨ¤ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ—āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāĻ•āĻšā§ā§Ÿā§‡āϟāϰ⧇āϰ āφāωāϟāĻĒ⧁āϟ āϏāĻŽā§āĻŦāϞāĻŋāϤ āĻ•āĻŋāϛ⧁ āĻĨāĻžāϕ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϤ⧇ āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āύāĻŋāĻœā§‡āϰ āϜāĻ¨ā§āϝ āĻ•āĻŋāϛ⧁ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻžāĻ“ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇ (āϝ⧇āĻŽāύāσ āϰāĻŋāĻŦā§āϝ⧁āϟ āĻ•āϰāĻž) āĻŦāĻž āĻāĻ•ā§āϏāĻŸā§āϰāĻž āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻœā§œā§‹ āĻ•āϰāĻž āĻāĻŦāĻ‚ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϕ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻžāĨ¤ + +![āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻāĻ•āϟāĻŋ āĻĨāĻžāĻ°ā§āĻŽā§‹āĻ¸ā§āĻŸā§āϝāĻžāϟ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāĻŋāϏāĻŋāϭ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻšāĻŋāϟāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϕ⧇ āϚāĻžāϞ⧁ āĻ•āϰāϛ⧇](../../../../images/commands.png) + +āĻšāĻŋāϟāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϚāĻžāϞ⧁ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĨāĻžāĻ°ā§āĻŽā§‹āĻ¸ā§āĻŸā§āϝāĻžāϟ āĻ•ā§āϞāĻžāω āĻĨ⧇āϕ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝāĻĻāĻŋ āĻ•ā§āϞāĻžāωāĻĄ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϏāĻŽāĻ¸ā§āϤ āϏ⧇āĻ¨ā§āϏāϰ āĻšāϤ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĄāĻžāϟāĻžāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āĻ¨ā§‡ā§Ÿ āϝ⧇ āĻšāĻŋāϟāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϟāĻŋ āϚāĻžāϞ⧁ āĻ•āϰāĻž āϜāϰ⧁āϰāĻŋ āϤāĻŦ⧇ āϤāĻž āϏ⧇ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻŦ⧇āĨ¤ + +### āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏāĻŽā§‚āĻš MQTT āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇ āĻĒā§āϰ⧇āϰāĻŖ + +āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āύāĻžāχāϟāϞāĻžāχāϟāϕ⧇ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāύ⧇āϰ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒāϟāĻŋ āĻšāϞ⧋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄ āĻ•āϤ⧃āĻ• āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž āϝāĻžāϤ⧇ āϞāĻžāχāĻŸā§‡āϰ āϞ⧇āϭ⧇āϞ āωāĻĒāϞāĻĻā§āϧāĻŋ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϞāĻžāχāϟāϕ⧇ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ + +1. āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄāϟāĻŋ VS Code āĻ āĻ“āĻĒ⧇āύ āĻ•āϰāĻŋāĨ¤ + +1. āύāĻŋāĻšā§‡āϰ āϞāĻžāχāύāϟāĻŋ `client_telemetry_topic` āĻĄāĻŋāĻ•ā§āĻ˛ā§‡ā§ŸāĻžāϰ⧇āϰ āĻĒāϰ āĻāĻĄ āĻ•āϰāĻŋ āϝāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻŦ⧇ āϕ⧋āύ āϟāĻĒāĻŋāϕ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϏ⧇āĻ¨ā§āĻĄ āĻ•āϰāĻŦ⧇āσ + + ```python + server_command_topic = id + '/commands' + ``` + +1. āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄāϟāĻŋ `handle_telemetry` āĻĢāĻžāĻ‚āĻļ⧇āύ āĻļ⧇āώ⧇ āĻāĻĄ āĻ•āϰāĻŋāσ + + ```python + command = { 'led_on' : payload['light'] < 300 } + print("Sending message:", command) + + client.publish(server_command_topic, json.dumps(command)) + ``` + + āĻāχ āϕ⧋āĻĄāϟāĻŋ āĻāĻ•āϟāĻŋ JSON āĻŽā§‡āϏ⧇āϜ `led_on` āĻāϰ āĻ­ā§āϝāϞ⧁āϏāĻš āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϟāĻĒāĻŋāϕ⧇ āĻĒāĻžāĻ āĻžā§Ÿ āϝāĻž āϞāĻžāχāĻŸā§‡āϰ āĻ­ā§āϝāĻžāϞ⧁ ā§Šā§Ļā§Ļ āĻāϰ āĻŦ⧇āĻļāĻŋ āĻŦāĻž āĻ•āĻŽā§‡āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āϤāĻž āĻŸā§āϰ⧁ āĻŦāĻž āĻĢāϞāϏ-āĻ āϏ⧇āϟ āĻšā§ŸāĨ¤ āϝāĻĻāĻŋ āϞāĻžāχāĻŸā§‡āϰ āĻ­ā§āϝāĻžāϞ⧁ (`led_on`<ā§Šā§Ļā§Ļ) ā§Šā§Ļā§Ļ āĻāϰ āĻ•āĻŽ āĻšā§Ÿ āϤāĻŦ⧇ āĻŸā§āϰ⧁ āϏ⧇āĻ¨ā§āĻĄ āĻ•āϰāĻž āĻšā§Ÿ āϝāĻžāϤ⧇ āĻāϞāχāĻĄāĻŋ āĻ…āύ āĻ•āϰāĻžāϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āĻĨāĻžāϕ⧇āĨ¤ + +1. āϕ⧋āĻĄāϟāĻŋ āĻĒā§‚āĻ°ā§āĻŦ⧇āϰ āĻŽāϤ⧋ āϰāĻžāύ āĻ•āϰāĻŋāĨ¤ + +1. āφāĻŽāĻžāĻĻ⧇āϰ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āĻŦāĻž āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻ•āϤ⧃āĻ• āĻļāύāĻžāĻ•ā§āϤāĻ•ā§ƒāϤ āϞāĻžāχāĻŸā§‡āϰ āϞ⧇āϭ⧇āϞ āĻ…āύ⧁āϏāĻžāϰ⧇ āϞ⧇āϭ⧇āϞāϟāĻŋ āĻāĻĄāϜāĻžāĻ¸ā§āϟ āĻ•āϰāĻŋāĨ¤ āĻ—ā§āϰāĻšā§€āϤ āĻŽā§‡āϏ⧇āϜ āĻāĻŦāĻ‚ āĻĒā§āϰ⧇āϰāĻŋāϤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϗ⧁āϞ⧋ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āφāωāϟāĻĒ⧁āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻ°ā§āĻŖāĻŋāϤ āĻšāĻŦ⧇āσ + + ```output + (.venv) ➜ nightlight-server python app.py + Message received: {'light': 0} + Sending message: {'led_on': True} + Message received: {'light': 400} + Sending message: {'led_on': False} + ``` + +> 💁 āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻŋāĻ‚āϗ⧇āϞ āϟāĻĒāĻŋāϕ⧇ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻāĻŦāĻ‚ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏāĻŽā§‚āĻš āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇āĨ¤ āϝāĻžāϰ āĻ…āĻ°ā§āĻĨ āĻĻāĻžāρ⧜āĻžā§Ÿ āĻāĻ•āĻžāϧāĻŋāĻ• āĻĄāĻŋāĻ­āĻžāχāϏ āĻĨ⧇āϕ⧇ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻāĻ•āχ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āϟāĻĒāĻŋāϕ⧇āϰ āωāĻĒāϰ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻāĻ•āĻžāϧāĻŋāĻ• āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϗ⧁āϞāĻŋāĻ“ āĻāĻ•āχ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āϟāĻĒāĻŋāϕ⧇ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāĻŦ⧇āĨ¤ āϝāĻĻāĻŋ āϕ⧋āύ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāϤ⧇ āϚāĻžāχ āϤāĻŦ⧇ āĻāĻ•āϟāĻŋ āχāωāύāĻŋāĻ• āĻĄāĻŋāĻ­āĻžāχāϏ āφāχāĻĄāĻŋ āύāĻžāĻŽāĻ•āϰāĻŖ (āϝ⧇āĻŽāύāσ `/commands/device1`, `/commands/device2`) āĻ•āϰ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āϟāĻĒāĻŋāĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ āĻāχāĻ­āĻžāĻŦ⧇ āϕ⧋āύ āĻĄāĻŋāĻ­āĻžāχāϏ āϕ⧇āĻŦāϞ āϏ⧇āχ āĻāĻ• āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āϜāĻ¨ā§āϝ āĻŦāϰāĻžāĻĻā§āĻĻāĻ•ā§ƒāϤ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞāĻŋ āϞāĻŋāϏ⧇āύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ + +> 💁 āφāĻŽāϰāĻž [code-commands/server](code-commands/server) āĻāχ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āϕ⧋āĻĄāϟāĻŋ āĻĒāĻžāĻŦā§‹āĨ¤ + +### āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏāĻŽā§‚āĻšā§‡āϰ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻž + +āĻāĻ–āύ⧇ āϝ⧇āĻšā§‡āϤ⧁ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻšāϤ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏāĻŽā§‚āĻš āĻĒā§āϰ⧇āϰāĻŋāϤ āĻšāĻšā§āϛ⧇ āϏ⧇āĻšā§‡āϤ⧁ āφāĻŽāϰāĻž āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϕ⧇ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻŦāĻ‚ āĻāϞāχāĻĄāĻŋāϕ⧇ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āϤāĻžāϤ⧇ āϕ⧋āĻĄ āĻāĻĄ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ + +MQTT āĻŦā§āϰ⧋āĻ•āĻžāϰ āĻšāϤ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏāĻŽā§‚āĻš āĻ—ā§āϰāĻšāϪ⧇āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻšā§‡āϰ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒāϗ⧁āϞ⧋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāĻŋāσ + +* [āφāϰāĻĄā§āχāύ⧋ Wio āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ](wio-terminal-commands.bn.md) +* [āϏāĻŋāĻ‚āϗ⧇āϞ āĻŦā§‹āĻ°ā§āĻĄ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ - āϰāĻžāĻ¸ā§āĻĒāĻŦ⧇āϰāĻŋ āĻĒāĻžāχ/āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ](single-board-computer-commands.bn.md) + +āĻāχ āϕ⧋āĻĄāϟāĻŋ āϞ⧇āĻ–āĻž āĻāĻŦāĻ‚ āϰāĻžāύ āĻ•āϰāĻž āĻšā§Ÿā§‡ āϗ⧇āϞ⧇ āφāĻŽāϰāĻž āϞāĻžāχāĻŸā§‡āϰ āϞ⧇āϭ⧇āϞ āĻšā§‡āĻžā§āϜ āĻ•āϰ⧇ āĻāĻ•ā§āϏāĻĒ⧇āϰāĻŋāĻŽā§‡āĻ¨ā§āϟ āĻ•āϰāĻŦā§‹āĨ¤ āϞāĻžāχāĻŸā§‡āϰ āϞ⧇āϭ⧇āϞ āĻšā§‡āĻžā§āĻœā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāϞāχāĻĄāĻŋāϟāĻŋāϤ⧇ āĻāĻŦāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āφāϰ āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āφāωāϟāĻĒ⧁āϟāϟāĻŋāϤ⧇ āϞāĻ•ā§āĻˇā§āϝ āϰāĻžāĻ–āĻŋāĨ¤ + +### āϞāϏ āĻ…āĻĢ āĻ•āĻžāύ⧇āĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ + +āϝāĻĻāĻŋ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒā§āϰ⧇āϰāϪ⧇āϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻšā§Ÿ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĄāĻŋāĻ­āĻžāχāϏāϟāĻŋ āĻ…āĻĢāϞāĻžāχāύ⧇ āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ āĻāĻŽāϤāĻžāĻŦāĻ¸ā§āĻĨāĻžā§Ÿ āĻ•ā§āϞāĻžāωāĻĄ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ āĻ•āĻŋ āĻ•āϰāĻž āωāϚāĻŋāϤ? āφāĻŦāĻžāϰāĻ“, āωāĻ¤ā§āϤāϰāϟāĻŋ āĻšāϞ⧋ āϤāĻž āύāĻŋāĻ°ā§āĻ­āϰāĻļā§€āϞāĨ¤ + +āϝāĻĻāĻŋ āϞ⧇āĻŸā§‡āĻ¸ā§āϟ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϤāĻžāϰ āĻĒā§‚āĻ°ā§āĻŦ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋāϕ⧇ āĻ“āĻ­āĻžāϰāϰāĻžāχāϟ āĻ•āϰ⧇ āϤāĻŦ⧇ āĻĒā§‚āĻ°ā§āĻŦ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āωāĻĒ⧇āĻ•ā§āώāĻŋāϤ āĻšāĻŦ⧇āĨ¤ āϝāĻĻāĻŋ āϕ⧋āύ āĻ•ā§āϞāĻžāωāĻĄ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻĒā§āϰāĻĨāĻŽā§‡ āĻšāĻŋāϟāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϟāĻŋ āϚāĻžāϞ⧁ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒāĻžāĻ āĻžāϝāĻŧ āϤāĻžāϰāĻĒāϰ āĻšāĻŋāϟāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϟāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĻā§āĻŦāĻŋāĻ¤ā§€ā§Ÿ āφāϰ⧇āĻ•āϟāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒāĻžāĻ āĻžā§Ÿ āϤāĻŦ⧇ āĻ…āύ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻ…āĻ°ā§āĻĨāĻžā§Ž ā§§āĻŽ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻž āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϤāĻž āϰāĻŋāϏ⧇āĻ¨ā§āϟ āĻšāĻŦ⧇ āύāĻžāĨ¤ + +āϝāĻĻāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏāĻŽā§‚āĻšā§‡āϰ āĻ•ā§āϰāĻŽāĻžāύ⧁āϏāĻžāϰ⧇ āĻĒā§āϰāϏ⧇āϏ⧇āϰ āĻĒā§āĻ°ā§ā§Ÿā§‹āϜāύ āĻšā§Ÿ āϝ⧇āĻŽāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻĒā§āϰāĻĨāĻŽā§‡ āĻāĻ•āϟāĻŋ āϰ⧋āĻŦāĻŸā§‡āϰ āĻšāĻžāϤ āωāĻĒāϰ⧇ āωāĻ āĻžāύ⧋ āĻĻā§āĻŦāĻŋāĻ¤ā§€ā§ŸāϤ āϏ⧇āϟāĻŋāϰ āĻ—ā§āĻ°ā§āϝāĻžāĻŦāĻžāϰ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž, āϤāĻžāχ āĻ•āĻžāύ⧇āĻ•ā§āϟāĻŋāĻ­āĻŋāϟāĻŋ āĻĒ⧁āύāϰāĻžā§Ÿ āϚāĻžāϞ⧁ āĻšāϞ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏāĻŽā§‚āĻšāϕ⧇ āύāĻŋ⧟āĻŽāĻžāύ⧁āϝāĻžā§Ÿā§€ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž āĻĒā§āĻ°ā§Ÿā§‹āϜāύāĨ¤ + +✅ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻĄāĻŋāĻ­āĻžāχāϏ āĻŦāĻž āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄāϟāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āĻšāĻŦ⧇ āϝ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϏāĻŽā§‚āĻš āϏāĻ°ā§āĻŦāĻĻāĻž āĻĒā§āϰ⧇āϰāĻŋāϤ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻĒāϰāϞ⧇ āϤāĻž MQTT-āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āύāĻŋ⧟āĻŽāĻžāύ⧁āϝāĻžā§Ÿā§€ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāĻŦ⧇? + +--- + +## 🚀 āĻšā§āϝāĻžāϞ⧇āĻžā§āϜ + +āĻļ⧇āώ āϤāĻŋāύāϟāĻŋ āĻĒāĻžāĻ ā§āϝ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻšā§āϝāĻžāϞ⧇āĻžā§āϜāϟāĻŋ āĻ›āĻŋāϞ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦāĻžāĻĄāĻŧāĻŋ, āĻ¸ā§āϕ⧁āϞ āĻŦāĻž āĻ•āĻ°ā§āĻŽāĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϝāϤāϗ⧁āϞ⧋ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āϰāϝāĻŧ⧇āϛ⧇ āϤāĻžāϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻāĻŦāĻ‚ āϤāĻžāϰāĻž āĻŽāĻžāχāĻ•ā§āϰ⧋āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻžāϰ āĻŦāĻž āĻāĻ•āĻ•-āĻŦā§‹āĻ°ā§āĻĄ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ āĻŦāĻž āωāĻ­āϝāĻŧ⧇āϰ āĻŽāĻŋāĻļā§āϰāϪ⧇ āύāĻŋāĻ°ā§āĻŽāĻŋāϤ āĻ•āĻŋāύāĻž āϤāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ⧇ āωāĻĒāύāĻŋāϤ āĻšāĻ“ā§ŸāĻž āĻāĻŦāĻ‚ āϤāĻžāϰāĻž āϕ⧀ āϧāϰāύ⧇āϰ āϏ⧇āĻ¨ā§āϏāϰ āĻ“ āĻāĻ•āĻšā§ā§Ÿā§‡āϟāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϛ⧇ āϤāĻž āύāĻŋā§Ÿā§‡ āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰāĻžāĨ¤ + +āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻŋ āϝ⧇ āĻāχ āĻĄāĻŋāĻ­āĻžāχāϏāϗ⧁āϞ⧋ āϕ⧀ āϧāϰāύ⧇āϰ āĻŽā§‡āϏ⧇āϜ āĻĒā§āϰ⧇āϰāĻŖ āĻŦāĻž āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϛ⧇āĨ¤ āĻ•āĻŋ āϧāϰāύ⧇āϰ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāϛ⧇? āĻ•āĻŋ āĻŽā§‡āϏ⧇āϜ āĻŦāĻž āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāĻŋāϏāĻŋāĻ­ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇? āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻŋ āĻāϗ⧁āϞ⧋ āĻ•āĻŋ āϏāĻ¤ā§āϝāĻŋāχ āϏ⧁āϰāĻ•ā§āώāĻŋāϤ? + +## āϞ⧇āĻ•āϚāĻžāϰ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϕ⧁āχāϜ + +[āϞ⧇āĻ•āϚāĻžāϰ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϕ⧁āχāϜ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/8) + +## āϰāĻŋāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ¸ā§āĻŦ-āĻ…āĻ§ā§āϝ⧟āύ + +[MQTT Wikipedia page](https://wikipedia.org/wiki/MQTT) āϟāĻŋ āĻĒā§œā§‡ MQTT āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰ⧋ āϜāĻžāύāϤ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ + +[Mosquitto](https://www.mosquitto.org) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ MQTT āĻŦā§āϰ⧋āĻ•āĻžāϰ āϰāĻžāύ āĻ•āϰāϤ⧇ āĻŸā§āϰāĻžāχ āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻāϟāĻŋāϕ⧇ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āĻ“ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄā§‡āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŋāĨ¤ + +> 💁 āϟāĻŋāĻĒ â€“ āĻŦāĻžāχ āĻĄāĻŋāĻĢāĻ˛ā§āϟ Mosquitto āĻ•āĻ–āύ⧋ anonymous āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰ⧇ āύāĻž (anonymous āĻ•āĻžāύ⧇āĻ•āĻļāύ⧇āϰ āĻ…āĻ°ā§āĻĨ āĻšāĻšā§āϛ⧇ āχāωāϜāĻžāϰāύ⧇āĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻŦā§āϝāĻžāϤ⧀āϤ āĻ•āĻžāύ⧇āĻ•ā§āϟ āĻšāĻ“ā§ŸāĻž) āĻāĻŦāĻ‚ āϝ⧇āχ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ⧇ āĻāϟāĻŋ āϰāĻžāύ āĻšāĻšā§āϛ⧇ āϏ⧇āχ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ āĻŦā§āϝāĻžāϤ⧀āϤ āĻ…āĻ¨ā§āϝ āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰ⧇ āύāĻžāĨ¤ +> āĻāϟāĻŋāϕ⧇ [`mosquitto.conf` config file](https://www.mosquitto.org/man/mosquitto-conf-5.html) āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĢāĻŋāĻ•ā§āϏ āĻ•āϰāϤ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻĻāĻŋāχāσ +> +> ```sh +> listener 1883 0.0.0.0 +> allow_anonymous true +> ``` + +## āĻāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āϟ + +[MQTT-āĻāϰ āϏāĻžāĻĨ⧇ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ•āĻŽāĻŋāωāύāĻŋāϕ⧇āĻļāύ āĻĒā§āϰāĻŸā§‹āĻ•āϞ⧇āϰ āϤ⧁āϞāύāĻž āĻ•āϰ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻĻāĻžāρ⧜ āĻ•āϰāĻžāύ⧋](assignment.bn.md) diff --git a/1-getting-started/lessons/4-connect-internet/translations/assignment.bn.md b/1-getting-started/lessons/4-connect-internet/translations/assignment.bn.md new file mode 100644 index 00000000..788fc220 --- /dev/null +++ b/1-getting-started/lessons/4-connect-internet/translations/assignment.bn.md @@ -0,0 +1,14 @@ +# MQTT-āĻāϰ āϏāĻžāĻĨ⧇ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ•āĻŽāĻŋāωāύāĻŋāϕ⧇āĻļāύ āĻĒā§āϰāĻŸā§‹āĻ•āϞ⧇āϰ āϤ⧁āϞāύāĻž āĻ•āϰ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻĻāĻžāρ⧜ āĻ•āϰāĻžāύ⧋ + +## āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž + +āĻāχ āĻĒāĻžāĻ āϟāĻŋāϤ⧇ MQTT āĻ•āĻŽāĻŋāωāύāĻŋāϕ⧇āĻļāύ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āύāĻŋā§Ÿā§‡ āφāϞ⧋āϚāύāĻž āĻšā§Ÿā§‡āϛ⧇ āĨ¤ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ⧇āϰ āĻŽāĻ§ā§āϝ⧇ AMQP āĻāĻŦāĻ‚ HTTP/HTTPS āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ°ā§Ÿā§‡āϛ⧇āĨ¤ + +AMQP āĻāĻŦāĻ‚ HTTP/HTTPS āωāϭ⧟āϟāĻŋ āύāĻŋā§Ÿā§‡ āĻ—āĻŦ⧇āώāĻŖāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ MQTT āĻāϰ āϏāĻžāĻĨ⧇ āϤ⧁āϞāύāĻž āĻ•āϰ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻĻāĻžāρ⧜ āĻ•āϰāĻžāϤ⧇ āĻšāĻŦ⧇ āĨ¤ āϝāĻĻāĻŋ āĻ•āĻžāύ⧇āĻ•āĻļāύāϏāĻŽā§‚āĻš āϚāϞ⧇ āϝāĻžā§Ÿ āϤāĻŦ⧇ āĻĒāĻžāĻ“ā§ŸāĻžāϰ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ, āϏāĻŋāĻ•āωāϰāĻŋāϟāĻŋ āĻāĻŦāĻ‚ āĻŽā§‡āϏ⧇āϜ āĻĒāĻžāϰāϏāĻŋāϏāĻŸā§‡āĻ¨ā§āϏ āύāĻŋā§Ÿā§‡ āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰāĻŋ āĨ¤ + +## āĻāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āϟ āĻŽā§‚āĻ˛ā§āϝāĻžā§Ÿāύ āĻŽāĻžāύāĻĻāĻ¨ā§āĻĄ + +| āĻ•ā§āϰāĻžāχāĻŸā§‡āϰāĻŋ⧟āĻž | āĻĻ⧃āĻˇā§āϟāĻžāĻ¨ā§āϤāĻŽā§‚āϞāĻ• āĻŦā§āϝāĻ–ā§āϝāĻž (āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ) | āĻĒāĻ°ā§āϝāĻžāĻĒā§āϤ āĻŦā§āϝāĻ–ā§āϝāĻž (āĻŽāĻžāĻāĻžāϰāĻŋ) | āφāϰ⧋ āωāĻ¨ā§āύāϤāĻŋāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ (āύāĻŋāĻŽā§āύ) | +| -------- | --------- | -------- | ----------------- | +| AMQP āĻāϰ āϏāĻžāĻĨ⧇ MQTT āϤ⧁āϞāύāĻž āĻ•āϰāĻžāĨ¤ | AMQP āĻāϰ āϏāĻžāĻĨ⧇ MQTT āϤ⧁āϞāύāĻž āĻ•āϰ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻĻāĻžāρ⧜ āĻ•āϰāĻžāϤ⧇ āĻāĻŦāĻ‚ āĻĒāĻžāĻ“ā§ŸāĻžāϰ, āϏāĻŋāĻ•ā§āϝ⧁āϰāĻŋāϟāĻŋ āĻāĻŦāĻ‚ āĻŽā§‡āϏ⧇āϜ āĻĒāĻžāϰāϏāĻŋāϏāĻŸā§‡āĻ¨ā§āϏ āύāĻŋā§Ÿā§‡ āĻĒā§āϰāϤāĻŋāĻŦ⧇āĻĻāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšā§Ÿā§‡āϛ⧇āĨ¤ | AMQP āĻāϰ āϏāĻžāĻĨ⧇ MQTT āϤ⧁āϞāύāĻž āĻ•āϰ⧇ āφāĻ‚āĻļāĻŋāĻ• āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻĻāĻžāρ⧜ āĻ•āϰāĻžāϤ⧇ āĻāĻŦāĻ‚ āĻĒāĻžāĻ“ā§ŸāĻžāϰ, āϏāĻŋāĻ•ā§āϝ⧁āϰāĻŋāϟāĻŋ āĻāĻŦāĻ‚ āĻŽā§‡āϏ⧇āϜ āĻĒāĻžāϰāϏāĻŋāϏāĻŸā§‡āĻ¨ā§āϏ āύāĻŋā§Ÿā§‡ āĻĻ⧁āϟāĻŋ āĻĒā§āϰāϤāĻŋāĻŦ⧇āĻĻāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšā§Ÿā§‡āϛ⧇āĨ¤ | AMQP āĻāϰ āϏāĻžāĻĨ⧇ MQTT āϤ⧁āϞāύāĻž āĻ•āϰ⧇ āφāĻ‚āĻļāĻŋāĻ• āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻĻāĻžāρ⧜ āĻ•āϰāĻžāϤ⧇ āĻāĻŦāĻ‚ āĻĒāĻžāĻ“ā§ŸāĻžāϰ, āϏāĻŋāĻ•ā§āϝ⧁āϰāĻŋāϟāĻŋ āĻāĻŦāĻ‚ āĻŽā§‡āϏ⧇āϜ āĻĒāĻžāϰāϏāĻŋāϏāĻŸā§‡āĻ¨ā§āϏ āύāĻŋā§Ÿā§‡ āĻāĻ•āϟāĻŋ āĻĒā§āϰāϤāĻŋāĻŦ⧇āĻĻāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšā§Ÿā§‡āϛ⧇āĨ¤ | +| HTTP/HTTPS āĻāϰ āϏāĻžāĻĨ⧇ MQTT āϤ⧁āϞāύāĻž āĻ•āϰāĻžāĨ¤ | HTTP/HTTPS āĻāϰ āϏāĻžāĻĨ⧇ MQTT āϤ⧁āϞāύāĻž āĻ•āϰ⧇ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻĻāĻžāρ⧜ āĻ•āϰāĻžāϤ⧇ āĻāĻŦāĻ‚ āĻĒāĻžāĻ“ā§ŸāĻžāϰ, āϏāĻŋāĻ•ā§āϝ⧁āϰāĻŋāϟāĻŋ āĻāĻŦāĻ‚ āĻŽā§‡āϏ⧇āϜ āĻĒāĻžāϰāϏāĻŋāϏāĻŸā§‡āĻ¨ā§āϏ āύāĻŋā§Ÿā§‡ āĻĒā§āϰāϤāĻŋāĻŦ⧇āĻĻāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšā§Ÿā§‡āϛ⧇āĨ¤ | HTTP/HTTPS āĻāϰ āϏāĻžāĻĨ⧇ MQTT āϤ⧁āϞāύāĻž āĻ•āϰ⧇ āφāĻ‚āĻļāĻŋāĻ• āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻĻāĻžāρ⧜ āĻ•āϰāĻžāϤ⧇ āĻāĻŦāĻ‚ āĻĒāĻžāĻ“ā§ŸāĻžāϰ, āϏāĻŋāĻ•ā§āϝ⧁āϰāĻŋāϟāĻŋ āĻāĻŦāĻ‚ āĻŽā§‡āϏ⧇āϜ āĻĒāĻžāϰāϏāĻŋāϏāĻŸā§‡āĻ¨ā§āϏ āύāĻŋā§Ÿā§‡ āĻĻ⧁āϟāĻŋ āĻĒā§āϰāϤāĻŋāĻŦ⧇āĻĻāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšā§Ÿā§‡āϛ⧇āĨ¤ | HTTP/HTTPS āĻāϰ āϏāĻžāĻĨ⧇ MQTT āϤ⧁āϞāύāĻž āĻ•āϰ⧇ āφāĻ‚āĻļāĻŋāĻ• āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻĻāĻžāρ⧜ āĻ•āϰāĻžāϤ⧇ āĻāĻŦāĻ‚ āĻĒāĻžāĻ“ā§ŸāĻžāϰ, āϏāĻŋāĻ•ā§āϝ⧁āϰāĻŋāϟāĻŋ āĻāĻŦāĻ‚ āĻŽā§‡āϏ⧇āϜ āĻĒāĻžāϰāϏāĻŋāϏāĻŸā§‡āĻ¨ā§āϏ āύāĻŋā§Ÿā§‡ āĻāĻ•āϟāĻŋ āĻĒā§āϰāϤāĻŋāĻŦ⧇āĻĻāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšā§Ÿā§‡āϛ⧇āĨ¤ | diff --git a/2-farm/lessons/5-migrate-application-to-the-cloud/translations/.dummy.md b/2-farm/lessons/5-migrate-application-to-the-cloud/translations/.dummy.md deleted file mode 100644 index 6e7db247..00000000 --- a/2-farm/lessons/5-migrate-application-to-the-cloud/translations/.dummy.md +++ /dev/null @@ -1,9 +0,0 @@ -# Dummy File - -This file acts as a placeholder for the `translations` folder.
-**Please remove this file after adding the first translation** - -For the instructions, follow the directives in the [translations guide](https://github.com/microsoft/IoT-For-Beginners/blob/main/TRANSLATIONS.md) . - -## THANK YOU -We truly appreciate your efforts! diff --git a/2-farm/lessons/5-migrate-application-to-the-cloud/translations/README.bn.md b/2-farm/lessons/5-migrate-application-to-the-cloud/translations/README.bn.md new file mode 100644 index 00000000..462b1646 --- /dev/null +++ b/2-farm/lessons/5-migrate-application-to-the-cloud/translations/README.bn.md @@ -0,0 +1,607 @@ +# āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϞāϜāĻŋāĻ•āϕ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ + +![A sketchnote overview of this lesson](../../../../sketchnotes/lesson-9.jpg) + +> āĻ¸ā§āϕ⧇āϚāύ⧋āϟāϟāĻŋ āϤ⧈āϰ⧀ āĻ•āϰ⧇āϛ⧇āύ [Nitya Narasimhan](https://github.com/nitya). āĻŦ⧜ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇ āĻĻ⧇āĻ–āĻžāϰ āϜāĻ¨ā§āϝ āĻ›āĻŦāĻŋāϟāĻŋāϤ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ + +## āϞ⧇āĻ•āϚāĻžāϰ-āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϕ⧁āχāϜ + +[āϞ⧇āĻ•āϚāĻžāϰ-āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϕ⧁āχāϜ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/17) + +## āϏ⧂āϚāύāĻž + +āĻ—āϤ āĻĒāĻžāϠ⧇ āφāĻŽāϰāĻž āĻļāĻŋāϖ⧇āĻ›āĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•ā§āϞāĻžāωāĻĄ-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āφāχāĻ“āϟāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āωāĻĻā§āĻ­āĻŋāĻĻāϕ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖ āĻāĻŦāĻ‚ āϰāĻŋāϞ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻāϰ āĻŽāϤ⧋ āĻ•āĻžāϜāϗ⧁āϞ⧋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•ā§āϞāĻžāωāĻĄ āĻĨ⧇āϕ⧇ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ āĻāĻ–āύ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒāϟāĻŋ āĻšāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄāϕ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻž āϝāĻž āϰāĻŋāϞ⧇ āĻāϰ āϟāĻžāχāĻŽāĻŋāĻ‚ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰ⧇āĨ¤ āĻāχ āĻĒāĻžāϠ⧇ āφāĻŽāϰāĻž āϏāĻžāĻ°ā§āĻ­āĻžāϰāĻŦāĻŋāĻšā§€āύ (serverless) āĻĢāĻžāĻ‚āĻļāύ āĻĻā§āĻŦāĻžāϰāĻž āĻāχ āĻ•āĻžāϜāϟāĻŋ āĻ•āϰāϤ⧇ āĻļāĻŋāĻ–āĻŦāĨ¤ + +āĻāχ āϞ⧇āϏāύ⧇ āĻ°ā§Ÿā§‡āϛ⧇āσ + +* [āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻŦāϞāϤ⧇ āϕ⧀ āĻŦā§‹āĻāĻžā§Ÿ?](#āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ-āĻŦāϞāϤ⧇-āϕ⧀-āĻŦā§‹āĻāĻžā§Ÿ) +* [āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϤ⧈āϰāĻŋ](#āĻāĻ•āϟāĻŋ-āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ-āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ-āϤ⧈āϰāĻŋ-āĻ•āϰāĻž) +* [āĻāĻ•āϟāĻŋ IoT Hub āχāϭ⧇āĻ¨ā§āϟ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϤ⧈āϰāĻŋ](#āĻāĻ•āϟāĻŋ-āφāχāĻ“āϟāĻŋ-āĻšāĻžāĻŦ-āχāϭ⧇āĻ¨ā§āϟ-āĻŸā§āϰāĻŋāĻ—āĻžāϰ-āϤ⧈āϰāĻŋ-āĻ•āϰāĻž) +* [āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āϕ⧋āĻĄ āĻĨ⧇āϕ⧇ āĻĄāĻŋāϰ⧇āĻ•ā§āϟ āĻŽā§‡āĻĨāĻĄ āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāĻ āĻžāύ⧋](#āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ-āϕ⧋āĻĄ-āĻĨ⧇āϕ⧇-āĻĄāĻŋāϰ⧇āĻ•ā§āϟ-āĻŽā§‡āĻĨāĻĄ-āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āϟ-āĻĒāĻžāĻ āĻžāύ⧋) +* [āĻ•ā§āϞāĻžāωāĻĄā§‡ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āϕ⧋āĻĄ āĻĄā§‡āĻĒā§āϞ⧟ āĻ•āϰāĻž](#āĻ•ā§āϞāĻžāωāĻĄā§‡-āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ-āϕ⧋āĻĄ-āĻĄā§‡āĻĒā§āϞ⧟-āĻ•āϰāĻž) + +## āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻŦāϞāϤ⧇ āϕ⧀ āĻŦā§‹āĻāĻžā§Ÿ? + +āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻŦāĻž āϏāĻžāĻ°ā§āĻ­āĻžāϰāĻŦāĻŋāĻšā§€āύ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻŋāĻ‚ āĻŦāϞāϤ⧇ āĻŦā§‹āĻāĻžāύ⧋ āĻšā§Ÿ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āϧāϰāϪ⧇āϰ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻšāĻŋāϏāĻžāĻŦ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āϚāĻžāϞāĻŋāϤ āϕ⧋āĻĄā§‡āϰ āϛ⧋āϟ āϛ⧋āϟ āĻŦā§āϞāĻ• āĨ¤ āχāϭ⧇āĻ¨ā§āϟ āϘāϟāϞ⧇ āϕ⧋āĻĄ āϚāĻžāϞāĻŋāϤ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻāϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āĻĄā§‡āϟāĻž āĻĒāĻžāϏ āĻ•āϰ⧇āĨ¤ āĻāχ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻŦāĻŋāώ⧟ āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϝ⧇āĻŽāύ, āĻ“āϝāĻŧ⧇āĻŦ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ, āϏāĻžāϰāĻŋāϤ⧇ āĻ…āĻĒ⧇āĻ•ā§āώāĻžāϰāϤ āĻŦāĻžāĻ°ā§āϤāĻžāϏāĻŽā§‚āĻš, āĻāĻ•āϟāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻĄā§‡āϟāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āĻŦāĻž āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϗ⧁āϞāĻŋāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāχāĻ“āϟāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϤ⧇ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰ⧇āϰāĻŖ āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤ + +![Events being sent from an IoT service to a serverless service, all being processed at the same time by multiple functions being run](../../../../images/iot-messages-to-serverless.png) + +> 💁 āϝāĻĻāĻŋ āφāϗ⧇ 'āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŸā§āϰāĻŋāĻ—āĻžāϰ' āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻ…āĻ­āĻŋāĻœā§āĻžāϤāĻž āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āĻāϟāĻžāϕ⧇āĻ“ āĻāĻ•āχ āϜāĻŋāύāĻŋāϏ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻ­āĻžāĻŦāĻž āϝāĻžā§Ÿ āϝāĻž āϕ⧋āύ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϕ⧋āĻĄ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ•āϰāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āĻžāϜ āĻ•āϰāϛ⧇, āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āϏāĻžāϰāĻŋ āĻŦāĻž row āϝ⧋āĻ— āĻ•āϰāĻž āĨ¤ + +![When many events are sent at the same time, the serverless service scales up to run them all at the same time](../../../../images/serverless-scaling.png) + +āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄāϟāĻŋ āϕ⧇āĻŦāϞ āϤāĻ–āύāχ āϰāĻžāύ āĻšāϝāĻŧ, āϝāĻ–āύ āχāϭ⧇āĻ¨ā§āϟāϟāĻŋ āϘāĻŸā§‡ ; āĻ…āĻ¨ā§āϝ āϏāĻŽā§Ÿ āϕ⧋āĻĄ āϏāĻ•ā§āϰāĻŋ⧟ āĻĨāĻžāϕ⧇āύāĻžāĨ¤ āχāϭ⧇āĻ¨ā§āϟāϟāĻŋ āϘāϟāĻžāĻŽāĻžāĻ¤ā§āϰ āϕ⧋āĻĄāϟāĻŋ āϞ⧋āĻĄ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āϤāĻž āϚāĻžāϞāĻžāύ⧋ āĻšā§ŸāĨ¤ āĻāϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏāϕ⧇ āϖ⧁āĻŦ āĻ¸ā§āϕ⧇āϞ⧇āĻŦāϞ (scalable) āĻ•āϰ⧇ āϤ⧋āϞ⧇ - āϝāĻĻāĻŋ āĻāĻ•āχ āϏāĻžāĻĨ⧇ āĻ…āύ⧇āĻ•āϗ⧁āϞāĻŋ āχāϭ⧇āĻ¨ā§āϟ āϘāĻŸā§‡, āϤāĻŦ⧇ āĻ•ā§āϞāĻžāωāĻĄ āϏāϰāĻŦāϰāĻžāĻšāĻ•āĻžāϰ⧀ āϝāϤāĻŦāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āϤāϤāĻŦāĻžāϰ āϕ⧋āĻĄ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϤāĻŦ⧇ āĻāϟāĻŋāϰ āĻ…āύ⧇āĻ• āϏ⧁āĻŦāĻŋāϧāĻž āĻĨāĻžāĻ•āϞ⧇āĻ“, āĻāϰ āύ⧇āϤāĻŋāĻŦāĻžāϚāĻ• āĻĻāĻŋāĻ•āϟāĻŋ āĻšāϞ āϝāĻĻāĻŋ āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋāϰ āĻŽāĻ§ā§āϝ⧇ āϤāĻĨā§āϝ āφāĻĻāĻžāύ-āĻĒā§āϰāĻĻāĻžāύ⧇āϰ āĻĻāϰāĻ•āĻžāϰ āĻšāϝāĻŧ, āϤāĻŦ⧇ āĻāϟāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āĻŽāϤ⧋ āϕ⧋āĻĨāĻžāĻ“ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ + +āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āφāĻ•āĻžāϰ⧇ āϞ⧇āĻ–āĻž āĻšāϝāĻŧ⧇āϛ⧇, āϝāĻž āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻšāĻŋāϏāĻžāĻŦ⧇ āχāϭ⧇āĻ¨ā§āϟāϟāĻŋāϰ āϤāĻĨā§āϝ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤ āĻāχ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋ āϞāĻŋāĻ–āϤ⧇ āφāĻŽāϰāĻž āĻ…āύ⧇āĻ•āϗ⧁āϞ⧋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ + +> 🎓 āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏāϕ⧇ āĻ…āύ⧇āĻ•āϏāĻŽā§Ÿ Functions as a service (FaaS) āĻšāĻŋāϏāĻžāĻŦ⧇āĻ“ āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰāĻž āĻšāϝāĻŧ āĻ•āĻžāϰāĻŖ āĻĒā§āϰāϤāĻŋāϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āĻŸā§āϰāĻŋāĻ—āĻžāϰāϕ⧇ āϕ⧋āĻĄ āĻ āĻĢāĻžāĻ‚āĻļāύ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ + +āύāĻžāĻŽ "āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ" āĻšāϞ⧇āĻ“, āĻāϟāĻŋ āφāϏāϞ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āύāĻžāĻŽāĻ•āϰāĻŖāϟāĻŋ āĻāĻŽāύ āĻšāĻ“ā§ŸāĻžāϰ āĻĒāĻŋāĻ›āύ⧇ āĻ•āĻžāϰāĻŖ āĻšāϞ āφāĻŽāϰāĻž āĻĄā§‡āĻ­āϞāĻžāĻĒāĻžāϰ āĻšāĻŋāϏāĻžāĻŦ⧇ āϕ⧋āĻĄ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āϕ⧋āύ āϚāĻŋāĻ¨ā§āϤāĻžāχ āĻ•āϰāĻŋ āύāĻž, āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻ•āϞ āĻŽāύ⧋āϝ⧋āĻ— āĻĨāĻžāϕ⧇ āϕ⧋āύ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϤ⧇ āϕ⧋āĻĄāϟāĻŋ āϚāĻžāϞāĻžāύ⧋ āĻšāĻšā§āϛ⧇ āĻ•āĻŋāύāĻž āϏ⧇ āĻŦāĻŋāĻˇā§Ÿā§‡āĨ¤ āĻ•ā§āϞāĻžāωāĻĄ āϏāϰāĻŦāϰāĻžāĻšāĻ•āĻžāϰ⧀āϰ āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ *āϰāĻžāύāϟāĻžāχāĻŽ* āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āϏāĻžāĻ°ā§āĻ­āĻžāϰ, āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻŋāĻ‚, āĻ¸ā§āĻŸā§‹āϰ⧇āϜ, āϏāĻŋāĻĒāĻŋāχāω, āĻŽā§‡āĻŽāϰāĻŋ āĻāĻŦāĻ‚ āϕ⧋āĻĄ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏāĻŽāĻ¸ā§āϤ āĻ•āĻŋāϛ⧁āϰ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻž āĻ•āϰ⧇āĨ¤ āĻāχ āĻŽāĻĄā§‡āϞāϟāĻŋāϤ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āύ⧇āχ āĻŦāϞ⧇, āφāĻŽāϰāĻž āĻāχ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āĻ…āĻ°ā§āĻĨ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ āύāĻžāĨ¤ āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āĻŦāϰāĻ‚ āϕ⧋āĻĄāϟāĻŋāϰ āϚāϞāĻŽāĻžāύ āϏāĻŽāϝāĻŧ āĻāĻŦāĻ‚ āĻŽā§‡āĻŽāϰāĻŋāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻĒāϰāĻŋāĻŽāĻžāϪ⧇āϰ āωāĻĒāϰ āĻ…āĻ°ā§āĻĨ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ + +> 💰 āĻ•ā§āϞāĻžāωāĻĄā§‡ āϕ⧋āĻĄ āĻ•āĻŽ āĻ–āϰāĻšā§‡ āϰāĻžāύ āĻ•āϰāĻžāϰ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻ­āĻžāϞ⧋ āωāĻĒāĻžāϝāĻŧ āĻšāϞ⧋ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, (āĻāχ āϞ⧇āϏāύ āϞ⧇āĻ–āĻžāϰ āϏāĻŽāϝāĻŧ) āϝ⧇āϕ⧋āύ āĻ•ā§āϞāĻžāωāĻĄ āϏāϰāĻŦāϰāĻžāĻšāĻ•āĻžāϰ⧀ āĻāχ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋāϤ⧇ āϚāĻžāĻ°ā§āϜ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻāĻ•āĻŽāĻžāϏ⧇ 1000,000 āĻŦāĻžāϰ āϰāĻžāύ āĻ•āϰāĻžāϰ āϏ⧁āϝ⧋āĻ— āĻĻā§‡ā§Ÿ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ āϤāĻžāϰāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ 1,000,000 āĻŦāĻžāϰ āϕ⧋āĻĄ āĻāĻ•ā§āϏ⧇āĻ•āĻŋāωāϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ $0.20 āϚāĻžāĻ°ā§āϜ āĻ•āϰ⧇āĨ¤ āϝāĻ–āύ āϕ⧋āĻĄ āϚāϞāϛ⧇ āύāĻž, āϤāĻ–āύ āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āĻ…āĻ°ā§āĻĨ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āύāĻžāĨ¤ + +āφāχāĻ“āϟāĻŋ āĻĄā§‡āĻ­āϞāĻžāĻĒāĻžāϰ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻŽāĻĄā§‡āϞāϟāĻŋ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽāĨ¤ āĻāĻ–āĻžāύ⧇ āϚāĻžāχāϞ⧇ āφāĻŽāϰāĻž āĻāĻŽāύ āĻĢāĻžāĻ‚āĻļāύ āϞāĻŋāĻ–āϤ⧇ āĻĒāĻžāϰāĻŋ āϝāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āϞāĻžāωāĻĄ-āĻšā§‹āĻ¸ā§āĻŸā§‡āĻĄ āφāχāĻ“āϟāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϤ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āϝ⧇āϕ⧋āύ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āĻĨ⧇āϕ⧇ āĻĒā§āϰ⧇āϰāĻŋāϤ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āϝ⧁āĻ•ā§āϤ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄ āĻāχāϏāĻŦ āĻĒā§āϰ⧇āϰāĻŋāϤ āĻŽā§āϝāĻžāϏ⧇āϜāϗ⧁āϞ⧋āϕ⧇ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻŦ⧇, āϤāĻŦ⧇ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻŦā§āϝāĻžāϤ⧀āϤ āϰāĻžāύ āĻ•āϰāĻŦ⧇āύāĻžāĨ¤ + +✅ āĻāĻŽāĻ•āĻŋāωāϟāĻŋāϟāĻŋ-āϤ⧇ āĻŦāĻžāĻ°ā§āϤāĻž āĻ—ā§āϰāĻšāϪ⧇āϰ āϜāĻ¨ā§āϝ āϝ⧇ āϕ⧋āĻĄāϟāĻŋāϕ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϕ⧋āĻĄ āĻšāĻŋāϏāĻžāĻŦ⧇ āϞāĻŋāϖ⧇āĻ›āĻŋ, āϏ⧇āϟāĻŋāϰ āĻĻāĻŋāϕ⧇ āφāϰ⧇āĻ•āĻŦāĻžāϰ āϞāĻ•ā§āĻˇā§āϝ āĻ•āϰāĻž āϝāĻžāĻ•! āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āϚāϞāϤ⧇ āĻĒāĻžāϰ⧇? āϕ⧀āĻ­āĻžāĻŦ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϞ⧇, āĻāχ āϕ⧋āĻĄāϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻŋāĻ‚ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇? + +> 💁 āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻŽāĻĄā§‡āϞ āϕ⧋āĻĄ āϰāĻžāύ āĻ•āϰāĻžāϰ āĻĒāĻžāĻļāĻĒāĻžāĻļāĻŋ āĻ•āĻŋāϛ⧁ āĻŦāĻŋāĻˇā§Ÿā§‡ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ•ā§āϞāĻžāωāĻĄ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϰ āĻĻāĻŋāϕ⧇ āϝāĻžāĻšā§āϛ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϏāĻžāĻ°ā§āĻ­āĻžāϰāĻšā§€āύ āĻĄāĻžāϟāĻžāĻŦ⧇āϏāϗ⧁āϞāĻŋ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžāĻšā§āϛ⧇ āϝ⧇āĻ–āĻžāύ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āĻŸā§‡āϰ āϏāĻ‚āĻ–ā§āϝāĻž āĻ…āύ⧁āϏāĻžāϰ⧇ āĻĢā§€ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇, āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ query āĻŦāĻž row āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž, āϤāĻŦ⧇ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ•āϤāϟāĻž āĻ•āĻžāϜ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇ āϤāĻžāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇ āĻŽā§‚āĻ˛ā§āϝ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻž āĻšā§ŸāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻĒā§āϰāĻžāχāĻŽāĻžāϰāĻŋ āϕ⧀ āĻāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāϰāĻŋ āϏāĻŋāϞ⧇āĻ•ā§āϟ āĻ•āϰāĻž āĻšāϞ⧇, āϤāĻžāϰ āĻ–āϰāϚ āĻ…āύ⧇āĻ• āĻ•āĻŽ āĻšāĻŦ⧇ - āĻ…āύ⧇āĻ•āϗ⧁āϞ⧋ āĻŸā§‡āĻŦāϞ āϝ⧋āĻ— āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āϜāϟāĻŋāϞ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϤ⧁āϞāύāĻžā§ŸāĨ¤ + +## āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰāĻž + +āĻŽāĻžāχāĻ•ā§āϰ⧋āϏāĻĢāĻŸā§‡āϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϕ⧇ āĻŦāϞāĻž āĻšā§Ÿ Azure Function āĨ¤ + +![The Azure Functions logo](../../../../images/azure-functions-logo.png) + +āύ⧀āĻšā§‡āϰ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āĻ­āĻŋāĻĄāĻŋāĻ“āϟāĻŋāϤ⧇ āĻ…ā§āϝāĻžāϜ⧁āϰ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āϰāϝāĻŧ⧇āϛ⧇ + +[![Azure Functions overview video](https://img.youtube.com/vi/8-jz5f_JyEQ/0.jpg)](https://www.youtube.com/watch?v=8-jz5f_JyEQ) + +> đŸŽĨ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĻ⧇āĻ–āϤ⧇ āωāĻĒāϰ⧇āϰ āĻ›āĻŦāĻŋāϤ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ + +✅ āĻāχ āĻĒāĻ°ā§āϝāĻžā§Ÿā§‡ āĻāĻ•āϟ⧁ āϏāĻŽā§Ÿ āύāĻŋā§Ÿā§‡ āĻ•āĻŋāϛ⧁ āĻĒ⧜āĻžāĻļā§‹āύāĻž āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤ āφāϰ āĻ…ā§āϝāĻžāϜ⧁āϰ āĻĢāĻžāĻ‚āĻļāύ āĻāϰ āĻŦā§āϝāĻĒāĻžāϰ⧇ āϜāĻžāύāϤ⧇ āĻšāϞ⧇ [Microsoft Azure Functions documentation](https://docs.microsoft.com/azure/azure-functions/functions-overview?WT.mc_id=academic-17441-jabenn) āĻĒ⧜āĻž āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ⧋ āωāĻĒāĻžā§ŸāĨ¤ + +āĻ…ā§āϝāĻžāϜ⧁āϰ āĻĢāĻžāĻ‚āĻļāύ āϞāĻŋāĻ–āϤ⧇ āĻšāϞ⧇, āφāĻŽāĻžāĻĻ⧇āϰ āĻĒāĻ›āĻ¨ā§āĻĻāĻŽāϤ⧋ āϕ⧋āύ āĻ˛ā§āϝāĻžāĻ‚āĻ—ā§ā§Ÿā§‡āĻœā§‡ āĻ…ā§āϝāĻžāϜ⧁āϰ āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āĻ āĻ•āĻžāϜ āĻ•āϰāĻž āĻļ⧁āϰ⧁ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ Python, JavaScript, TypeScript, C#, F#, Java, āĻāĻŦāĻ‚ Powershell āϖ⧁āĻŦāϏāĻšāĻœā§‡āχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ āĻāχ āĻ…āĻ§ā§āϝāĻžā§Ÿā§‡ āφāĻŽāϰāĻž āĻĒāĻžāχāĻĨāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻ…ā§āϝāĻžāϜ⧁āϰ āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āϞ⧇āĻ–āĻž āĻļāĻŋāĻ–āĻŦā§‹āĨ¤ + +> 💁 āĻ…ā§āϝāĻžāϜ⧁āϰ āĻĢāĻžāĻ‚āĻļāύ āφāĻŦāĻžāϰ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰāĻ“ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇, āϤāĻžāχ āϝ⧇āϕ⧋āύ āĻ­āĻžāώāĻžā§Ÿ āĻāĻŽāύāĻ•āĻŋ COBOLāĻāϰ āĻŽāϤ⧋ āĻĒ⧁āϰāύ⧋ āĻ˛ā§āϝāĻžāĻ™ā§āĻ—ā§ā§Ÿā§‡āĻœā§‡āĻ“ āϤāĻž āϞ⧇āĻ–āĻž āϝāĻžā§Ÿ, āϝāĻĻāĻŋ HTTP āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇āĨ¤ + +āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϗ⧁āϞāĻŋāϤ⧇ āĻāĻ• āĻŦāĻž āĻāĻ•āĻžāϧāĻŋāĻ• *āĻŸā§āϰāĻŋāĻ—āĻžāϰ* āĻĨāĻžāϕ⧇ - āĻāĻŽāύ āĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϞāĻžāĻĒ āϝāĻž āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋāϤ⧇ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϜāĻžāύāĻžāϝāĻŧāĨ¤ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇, āϏāĻžāϧāĻžāϰāĻŖ āĻāĻ•āϟāĻŋ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āύāĻŋā§Ÿā§‡āχāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋāϰ āϜāĻ¨ā§āϝ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĢāĻžāχāϞ⧇ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āϏāĻ‚āϝ⧋āϗ⧇āϰ āϏāĻ•āϞ āϤāĻĨā§āϝ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋā§āϰ āϏāĻŽāĻ¸ā§āϤ āĻĢāĻžāĻ‚āĻļāύ āĻāϟāĻŋ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋāϰ āϤāĻĨā§āϝ āĻ—ā§āϰāĻšāϪ⧇ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ + +### āĻ•āĻžāϜ - Azure Functions tooling āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻž + +āĻ…ā§āϝāĻžāϜ⧁āϰ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻĻ⧁āĻ°ā§āĻĻāĻžāĻ¨ā§āϤ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻšāϞ āĻāϗ⧁āϞāĻŋ āφāĻŽāϰāĻž āϞ⧋āĻ•āĻžāϞāĻŋ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āĻ•ā§āϞāĻžāωāĻĄā§‡āϰ āϏāĻŽāĻžāύ āϰāĻžāύāϟāĻžāχāĻŽā§‡ āĻāϟāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ⧇ āϚāĻžāϞāĻžāύ⧋ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇, āϝāĻž āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āφāχāĻ“āϟāĻŋ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞāĻŋāϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϜāĻžāύāĻžāϝāĻŧ āĻāĻŦāĻ‚ āϞ⧋āĻ•āĻžāϞāĻŋ āϚāϞāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŽāύ āϕ⧋āĻĄ āϞ⧇āĻ–āĻžāϰ āϏ⧁āϝ⧋āĻ— āĻĻ⧇āϝāĻŧāĨ¤ āĻāĻŽāύāĻ•āĻŋ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻšāĻ“āϝāĻŧāĻžāϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āφāĻŽāϰāĻž āύāĻŋāĻœā§‡āϰ āϕ⧋āĻĄāϟāĻŋ āĻĄāĻŋāĻŦāĻžāĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦāĨ¤ āĻāĻ•āĻŦāĻžāϰ āϕ⧋āĻĄ āύāĻŋāϝāĻŧ⧇ āϏāĻ¨ā§āϤ⧁āĻˇā§āϟ āĻšāϞ⧇āχ, āĻāϟāĻŋ āφāĻŽāϰāĻž āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ + +Azure Functions tooling āφāĻŽāϰāĻž CLI āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ āϝāĻžāϕ⧇ Azure Functions Core Tools āĻ“ āĻŦāϞāĻž āĻšā§ŸāĨ¤ + +1. Azure Functions Core Tools āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ [Azure Functions Core Tools documentation](https://docs.microsoft.com/azure/azure-functions/functions-run-local?WT.mc_id=academic-17441-jabenn) āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāĻŋāĨ¤ + +1. VS Code āĻ Azure Functions extension āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāχ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ⧇ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ Azure functions āϤ⧈āϰ⧀, āĻĄāĻŋāĻŦāĻžāĻ— āĻāĻŦāĻ‚ āĻĄā§‡āĻĒā§āϞ⧟ āĻ•āϰāĻž āϝāĻžāĻŦ⧇āĨ¤ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž [Azure Functions extension documentation](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions&WT.mc_id=academic-17441-jabenn) āĻ āĻ°ā§Ÿā§‡āϛ⧇āĨ¤ + +āφāĻŽāϰāĻž āϝāĻ–āύ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻ…ā§āϝāĻžāϜ⧁āϰ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻļ⧁āϰ⧁ āĻ•āϰāĻŦā§‹, āϤāĻ–āύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻĢāĻžāχāϞ āĻāĻŦāĻ‚ āϞāĻ— āĻĢāĻžāχāϞ⧇āϰ āĻŽāϤ⧋ āϜāĻŋāύāĻŋāϏāϗ⧁āϞāĻŋ āϏ⧇āĻ­ āϰāĻžāĻ–āϤ⧇ āϖ⧁āĻŦ āĻ…āĻ˛ā§āĻĒ āĻĒāϰāĻŋāĻŽāĻžāϪ⧇ āĻ•ā§āϞāĻžāωāĻĄ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻĻāϰāĻ•āĻžāϰāĨ¤ āϝāĻ–āύ āϞ⧋āĻ•āĻžāϞāĻŋ āφāĻŽāϰāĻž āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϚāĻžāϞāĻžāχ āϤāĻ–āύ āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āĻ•ā§āϞāĻžāωāĻĄ āĻ¸ā§āĻŸā§‹āϰ⧇āĻœā§‡āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇, āϤāĻŦ⧇ āĻĒā§āϰāĻ•ā§ƒāϤ āĻ•ā§āϞāĻžāωāĻĄā§‡āϰ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻāĻŽā§āϞ⧇āϟāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝ⧇āĻŽāύ [Azurite](https://github.com/Azure/Azurite)āĨ¤ āĻāϟāĻŋ āϞ⧋āĻ•āĻžāϞ āĻ­āĻžāĻŦ⧇ āϚāϞ⧇, āϤāĻŦ⧇ āĻ•ā§āϞāĻžāωāĻĄ āĻ¸ā§āĻŸā§‹āϰ⧇āĻœā§‡āϰ āĻŽāϤ⧋ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ + +> 🎓 āĻ…ā§āϝāĻžāϜ⧁āϰ⧇, āĻ…ā§āϝāĻžāϜ⧁āϰ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋ āϝ⧇ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϤāĻž āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāϜ⧁āϰ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāĨ¤ āĻāχ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϗ⧁āϞāĻŋ āĻĢāĻžāχāϞ, āĻŦā§āϞāĻŦāϏ, āĻŸā§‡āĻŦāĻŋāϞāϗ⧁āϞāĻŋāϤ⧇ āĻĄā§‡āϟāĻž āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ āϚāĻžāχāϞ⧇āχ āĻ…āύ⧇āĻ•āϗ⧁āϞāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻ­āĻžāĻ— āĻ•āϰāĻž āϝāĻžā§Ÿ āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ āĻāĻ•āχ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāĨ¤ + +1. Azurite āĻšāϞ⧋ āĻāĻ•āϟāĻŋ Node.js āĻāĻĒāĨ¤ āϤāĻžāχ āĻāϟāĻŋāϰ āϜāĻ¨ā§āϝ āφāϗ⧇ Node.js āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ [Node.js website](https://nodejs.org/)āĻ āϏāĻ•āϞ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āφāϛ⧇āĨ¤ āĻŽā§āϝāĻžāĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž [Homebrew](https://formulae.brew.sh/formula/node) āĻĨ⧇āϕ⧇āĻ“ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āĨ¤ + +1. āύāĻŋāĻšā§‡āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Azurite āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻŋ : + + ```sh + npm install -g azurite + ``` + +1. `azurite` āύāĻžāĻŽā§‡ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ āϖ⧁āϞāĻŋ, āĻāϟāĻŋāϰ āĻĄā§‡āϟāĻž āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ + + ```sh + mkdir azurite + ``` + +1. Azurite āϰāĻžāύ āĻ•āϰāĻŋ - + + ```sh + azurite --location azurite + ``` + + Azurite āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āχāĻŽā§āϝ⧁āϞ⧇āϟāϰ launch āĻšā§Ÿā§‡ āϞ⧋āĻ•āĻžāϞ āĻĢāĻžāĻ‚āĻļāύ āϰāĻžāύāϟāĻžāχāĻŽā§‡āϰ āϜāĻ¨ā§āϝ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻŦ⧇ + + ```output + ➜ ~ azurite --location azurite + Azurite Blob service is starting at http://127.0.0.1:10000 + Azurite Blob service is successfully listening at http://127.0.0.1:10000 + Azurite Queue service is starting at http://127.0.0.1:10001 + Azurite Queue service is successfully listening at http://127.0.0.1:10001 + Azurite Table service is starting at http://127.0.0.1:10002 + Azurite Table service is successfully listening at http://127.0.0.1:10002 + ``` + +### āĻ•āĻžāϜ - āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāϜ⧁āϰ āĻĢāĻžāĻ‚āĻļāύ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋ + +Azure Functions CLI āĻĻā§āĻŦāĻžāϰāĻž āύāϤ⧁āύ Functions app āϤ⧈āϰ⧀ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ + +1. āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āĻāϰ āϜāĻ¨ā§āϝ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ āϖ⧁āϞ⧇ āϏ⧇āĻ–āĻžāύ⧇ āϝāĻžāχ, āύāĻžāĻŽ āĻĻāĻŋāχ `soil-moisture-trigger` + + ```sh + mkdir soil-moisture-trigger + cd soil-moisture-trigger + ``` + +1. āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āĻĒāĻžāχāĻĨāύ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āϤ⧈āϰ⧀ āĻ•āϰāĻŋ + + ```sh + python3 -m venv .venv + ``` + +1. āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻāĻ•ā§āϟāĻŋāϭ⧇āϟ āĻ•āϰāĻŋ + + * āωāχāĻ¨ā§āĻĄā§‹āĻœā§‡: + + ```cmd + .venv\Scripts\activate.bat + ``` + + * macOS āĻŦāĻž Linux āĻ: + + ```cmd + source ./.venv/bin/activate + ``` + +1. āĻāχ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ Functions app āϤ⧈āϰ⧀āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāĻžāύ āĻ•āϰāĻŋ: + + ```sh + func init --worker-runtime python soil-moisture-trigger + ``` + + āĻāϟāĻŋ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āϤāĻŋāύāϟāĻŋ āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ⧇: + + * `host.json` - āĻāχ JSON āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āϏ⧇āϟāĻŋāĻ‚āϏ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāχ āϏ⧇āϟāĻŋāĻ‚āϏ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āύāĻžāĨ¤ + * `local.settings.json` - āĻāχ JSON āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡ āϞ⧋āĻ•āĻžāϞāĻŋ āϚāϞāĻžāĻ•āĻžāϞ⧀āύ āφāĻŽāĻžāĻĻ⧇āϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϝ⧇ āϏ⧇āϟāĻŋāĻ‚āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇ āϏ⧇āϗ⧁āϞāĻŋ āφāϛ⧇, āϝ⧇āĻŽāύ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻ‚āϝ⧋āĻ— āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĨ¤ āĻāχ āϏ⧇āϟāĻŋāĻ‚āϏāϟāĻŋ āϕ⧇āĻŦāϞ āϞ⧋āĻ•āĻžāϞ, āĻāĻŦāĻ‚ āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāϪ⧇ āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž āωāϚāĻŋāϤ āύ⧟āĨ¤ āφāĻŽāϰāĻž āϝāĻ–āύ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻ…ā§āϝāĻžāĻĒ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻŦ āϤāĻ–āύ āĻāχ āϏ⧇āϟāĻŋāĻ‚āϏāϟāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻšāĻŦ⧇ āύāĻž, āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϏ⧇āϟāĻŋāĻ‚āϏ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϏ⧇āϟāĻŋāĻ‚āϏ āĻĨ⧇āϕ⧇ āϞ⧋āĻĄ āĻšāĻŦ⧇āĨ¤ āĻāχ āĻĒāĻžāϠ⧇āϰ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻ…āĻ‚āĻļ⧇ āĻŦāĻŋāώ⧟āϟāĻŋ āφāϞ⧋āϚāύāĻž āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ + * `requirements.txt` - āĻāϟāĻŋ āĻāĻ•āϟāĻŋ [Pip requirements file](https://pip.pypa.io/en/stable/user_guide/#requirements-files) āϝāĻž āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āĻĒāĻŋāĻĒ āĻĢāĻžāχāϞāϗ⧁āϞ⧋ āϧāĻžāϰāĻŖ āĻ•āϰ⧇āĨ¤ + +1. āĻāĻ–āĻžāύ⧇ `local.settings.json` āĻĢāĻžāχāϞāϟāĻŋāϰ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏ⧇āϟāĻŋāĻ‚āϏ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āĨ¤ āĻāϟāĻŋāϰ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻāĻ•āϟāĻŋ āĻĢāĻžāρāĻ•āĻž āϏ⧇āϟāĻŋāĻ‚ āφāϛ⧇, āϏ⧁āϤāϰāĻžāĻ‚ āĻāϟāĻŋ āϏ⧇āϟ āĻ•āϰāĻž āĻĻāϰāĻ•āĻžāϰāĨ¤ Azurite āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻāĻŽā§āϞ⧇āϟāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāϤ⧇, āĻāχ āĻŽāĻžāύāϟāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ­āĻžāĻŦ⧇ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇: + + ```json + "AzureWebJobsStorage": "UseDevelopmentStorage=true", + ``` + +1. āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻĢāĻžāχāϞāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒāĻŋāĻĒ āĻĒā§āϝāĻžāϕ⧇āϜ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇: + + ```sh + pip install -r requirements.txt + ``` + + > 💁 āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻĒāĻŋāĻĒ āĻĒā§āϝāĻžāϕ⧇āϜāϗ⧁āϞāĻŋ āĻāχ āĻĢāĻžāχāϞ⧇ āĻĨāĻžāĻ•āĻž āĻĻāϰāĻ•āĻžāϰ, āϝāĻžāϤ⧇ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āϝāĻ–āύ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻšāĻŦ⧇, āϤāĻ–āύ āϰāĻžāύāϟāĻžāχāĻŽ āϝ⧇āύ āĻāϟāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϝ⧇ āϏāĻ āĻŋāĻ• āĻĒā§āϝāĻžāϕ⧇āϜāϗ⧁āϞāĻŋ āχāύāĻ¸ā§āϟāϞ āĻšā§Ÿā§‡āϛ⧇āĨ¤ + +1. āϏāĻŦāĻ•āĻŋāϛ⧁ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāϛ⧇ āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āφāĻŽāϰāĻž āĻĢāĻžāĻ‚āĻļāύ āϰāĻžāύāϟāĻžāχāĻŽ āĻļ⧁āϰ⧁ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āĻāϟāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϰāĻžāύ āĻĻāĻŋāχ: + + ```sh + func start + ``` + + āĻĻ⧇āĻ–āĻž āϝāĻžāĻŦ⧇ āϝ⧇ āϰāĻžāύāϟāĻžāχāĻŽ āĻļ⧁āϰ⧁ āĻšā§Ÿā§‡āϛ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤāĻž āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻ•āϰāĻŦ⧇ āϝ⧇ āĻāϟāĻŋ āϕ⧋āύ āϜāĻŦ āĻĢāĻžāĻ‚āĻļāύ (āĻŸā§āϰāĻŋāĻ—āĻžāϰ) āϖ⧁āρāĻœā§‡ āĻĒāĻžāϝāĻŧ āύāĻŋāĨ¤ + + ```output + (.venv) ➜ soil-moisture-trigger func start + Found Python version 3.9.1 (python3). + + Azure Functions Core Tools + Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) + Function Runtime Version: 3.0.15417.0 + + [2021-05-05T01:24:46.795Z] No job functions found. + ``` + + > âš ī¸ āϕ⧋āύ āĻĢāĻžā§ŸāĻžāϰāĻ“ā§ŸāĻžāϞ āύ⧋āϟāĻŋāĻĢāĻŋāϕ⧇āĻļāύ āφāϏāϞ⧇, āĻāĻ•āϏ⧇āϏ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇ āĻ•āĻžāϰāĻŖ `func` āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋāϰ āĻāχ āύ⧇āϟāĻ“ā§ŸāĻžāĻ°ā§āϕ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ + + > âš ī¸ āĻŽā§āϝāĻžāĻ•-āĻ“āĻāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āφāωāϟāĻĒ⧁āϟāϟāĻŋāϤ⧇ āĻ“ā§ŸāĻžāĻ°ā§āύāĻŋāĻ‚ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇: + > + > ```output + > (.venv) ➜ soil-moisture-trigger func start + > Found Python version 3.9.1 (python3). + > + > Azure Functions Core Tools + > Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) + > Function Runtime Version: 3.0.15417.0 + > + > [2021-06-16T08:18:28.315Z] Cannot create directory for shared memory usage: /dev/shm/AzureFunctions + > [2021-06-16T08:18:28.316Z] System.IO.FileSystem: Access to the path '/dev/shm/AzureFunctions' is denied. Operation not permitted. + > [2021-06-16T08:18:30.361Z] No job functions found. + > ``` + > + > āϝāϤāĻ•ā§āώāĻŖ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻļ⧁āϰ⧁ āĻšāĻšā§āϛ⧇ āĻāĻŦāĻ‚ āϚāϞāĻŽāĻžāύ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋāϰ āϤāĻžāϞāĻŋāĻ•āĻž āĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻĻ⧇āĻ–āĻžāĻšā§āϛ⧇, āϤāϤāĻ•ā§āώāĻŖ āĻāϏāĻŦ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ āĻāĻ–āĻžāύ⧇ [Microsoft Docs Q&A](https://docs.microsoft.com/answers/questions/396617/azure-functions-core-tools-error-osx-devshmazurefu.html?WT.mc_id=academic-17441-jabenn) āϤ⧇āĻ“ āĻāĻŽāύāχ āĻŦāϞāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤ + +1. āĻāĻŦāĻžāϰ `ctrl+c` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Functions app āĻŦāĻ¨ā§āϧ āĻ•āϰāĻŋāĨ¤ + +1. VS Code āĻ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰāϟāĻŋ āĻ“āĻĒ⧇āύ āĻ•āϰāĻŋ: + + ```sh + code . + ``` + + āĻ­āĻŋāĻāϏ āϕ⧋āĻĄ āφāĻŽāĻžāĻĻ⧇āϰ āĻĢāĻžāĻ‚āĻļāύ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āϏāύāĻžāĻ•ā§āϤ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āύ⧋āϟāĻŋāĻĢāĻŋāϕ⧇āĻļāύ āĻĻ⧇āĻ–āĻŋāϝāĻŧ⧇ āĻŦāϞāĻŦ⧇: + + ```output + Detected an Azure Functions Project in folder "soil-moisture-trigger" that may have been created outside of + VS Code. Initialize for optimal use with VS Code? + ``` + + ![The notification](../../../../images/vscode-azure-functions-init-notification.png) + + āĻāĻ–āĻžāύ⧇ **Yes** āϏāĻŋāϞ⧇āĻ•ā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ + +1. āĻ­āĻŋāĻāϏ āϕ⧋āĻĄ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āϰāĻžāύ āĻ•āϰāϛ⧇ - āĻāϟāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ + +## āĻāĻ•āϟāĻŋ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ āχāϭ⧇āĻ¨ā§āϟ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻž + +āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻšāϞ⧋ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āϕ⧋āĻĄā§‡āϰ āĻļ⧇āϞāĨ¤ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋāϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϜāĻžāύāĻžāϤ⧇, āĻāχ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ āĻāχ āĻŸā§āϰāĻŋāĻ—āĻžāϰāϟāĻŋ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇ āφāϏāĻž āĻŦāĻžāĻ°ā§āϤāĻžāĻĒā§āϰāĻŦāĻžāĻšā§‡āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻĨāĻžāĻ•āĻž āĻĻāϰāĻ•āĻžāϰ āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϜāĻžāύāĻžāύ⧋āϰ āϏāĻ•ā§āώāĻŽāϤāĻž āĻ…āĻ°ā§āϜāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āύāĻŋ⧟āĻŽāĻŋāϤāĻ­āĻžāĻŦ⧇ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒ⧇āϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻŸā§āϰāĻŋāĻ—āĻžāϰāϟāĻŋ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇ *event hub compatible endpoint* āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻĻāϰāĻ•āĻžāϰāĨ¤ + +āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦāϟāĻŋ Azure Event Hubs āύāĻžāĻŽā§‡ āĻĒāϰāĻŋāϚāĻŋāϤ āφāϰ⧇āĻ•āϟāĻŋ āĻ…ā§āϝāĻžāϜ⧁āϰ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧁āĻ•ā§āϤāĨ¤ āχāϭ⧇āĻ¨ā§āϟ āĻšāĻžāĻŦāϏ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āϝāĻž āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āĻŦāĻžāĻ°ā§āϤāĻž āĻĒā§āϰ⧇āϰāĻŖ āĻāĻŦāĻ‚ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ, āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦāϟāĻŋ āϤāĻ–āύ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ āĻĨ⧇āϕ⧇ āϝ⧇āĻ­āĻžāĻŦ⧇ āφāĻŽāϰāĻž āĻŦāĻžāĻ°ā§āϤāĻž āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĻ›āĻŋ, āχāϭ⧇āĻ¨ā§āϟ āĻšāĻžāĻŦ⧇āĻ“ āĻāĻ•āĻĻāĻŽ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ + +✅ āĻ•āĻŋāϛ⧁ āĻ—āĻŦ⧇āώāĻŖāĻž āĻ•āϰāĻž āϝāĻžāĻ•: [Azure Event Hubs documentation](https://docs.microsoft.com/azure/event-hubs/event-hubs-about?WT.mc_id=academic-17441-jabenn) āĻĨ⧇āϕ⧇ āχāϭ⧇āĻ¨ā§āϟ āĻšāĻžāĻŦ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāĻŽāĻ—ā§āϰāĻŋāĻ• āϧāĻžāϰāĻŖāĻž āϞāĻžāĻ­ āĻ•āϰ⧇, āĻāϟāĻŋāϰ āϏāĻžāϧāĻžāϰāĻŖ āĻĒāĻ°ā§āϝāĻžā§Ÿā§‡āϰ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞ⧋āϕ⧇ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āϏāĻžāĻĨ⧇ āϤ⧁āϞāύāĻž āĻ•āϰāĻŋāĨ¤ + +āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āϜāĻ¨ā§āϝ āϝ⧇āϕ⧋āύ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϕ⧇ āĻāĻ•āϟāĻŋ āĻ—ā§‹āĻĒāύ āϕ⧀ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝāĻž āϕ⧇āĻŦāϞāĻŽāĻžāĻ¤ā§āϰ āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āĻĄāĻŋāĻ­āĻžāχāϏāϗ⧁āϞāĻŋ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞāĻŋ āĻĒ⧜āĻžāϰ āϜāĻ¨ā§āϝ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧāĻ“ āĻāĻ•āχ āĻŦāĻŋāώ⧟ āĻĒā§āϰāϝ⧋āĻœā§āϝ, āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄāϟāĻŋāϤ⧇ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āĻŦāĻŋāĻŦāϰāĻŖ āϏāĻš āĻāĻ•āϟāĻŋ āĻ—ā§‹āĻĒāύ āϕ⧀ āϝ⧁āĻ•ā§āϤ connection string āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāĻŦ⧇āĨ¤ + +> 💁 āφāĻŽāϰāĻž āĻĄāĻŋāĻĢāĻ˛ā§āϟ āϝ⧇ connection string āĻĒāĻžāχ, āϏ⧇āϟāĻŋāϤ⧇ **iothubowner** āĻāϰ āĻĒāĻžāĻ°ā§āĻŽāĻŋāĻļāύ āĻĨāĻžāϕ⧇ āϝāĻž āϕ⧋āύ āϕ⧋āĻĄā§‡ āĻĨāĻžāĻ•āϞ⧇ - āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇ āĻāĻ•āϏ⧇āϏ/āĻ…āύ⧁āĻŽāϤāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋāϕ⧇ āφāϏāϞ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ…āύ⧁āĻŽāϤāĻŋāϗ⧁āϞāĻŋāϰ āϏāĻ°ā§āĻŦāύāĻŋāĻŽā§āύ āĻ¸ā§āϤāϰ⧇ āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻ•āĻŽ āĻĒāĻžāĻ°ā§āĻŽāĻŋāĻļāύ⧇ āϰāĻžāĻ–āĻž āωāϚāĻŋāϤāĨ¤ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻžāϠ⧇ āĻāϟāĻŋ āύāĻŋā§Ÿā§‡ āĻŦāĻŋāώāĻĻ āφāϞ⧋āϚāύāĻž āĻšāĻŦ⧇āĨ¤ + +āĻŸā§āϰāĻŋāĻ—āĻžāϰāϟāĻŋ āĻāĻ•āĻŦāĻžāϰ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšāϝāĻŧ⧇ āϗ⧇āϞ⧇āχ, āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āĻ•āĻžāϛ⧇ āĻĒā§āϰ⧇āϰāĻŋāϤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻŦāĻžāĻ°ā§āϤāĻžāϰ āϜāĻ¨ā§āϝ - āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āϕ⧋āĻĄāϟāĻŋ āĻ•āϞ āĻ•āϰāĻž āĻšāĻŦ⧇,āϤāĻž āϏ⧇āχ āĻŽā§āϝāĻžāϏ⧇āϜ āϝ⧇ āĻĄāĻŋāĻ­āĻžāχāϏ āĻĨ⧇āϕ⧇āχ āĻĒā§āϰ⧇āϰāĻŋāϤ āĻšā§‹āĻ• āύāĻž āϕ⧇āύāĨ¤ + +### āĻ•āĻžāϜ - Event Hub compatible endpoint connection string āϤ⧈āϰ⧀ + +1. VS Code āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ āĻĨ⧇āϕ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāĻžāύ āĻ•āϰāĻŋ: + + ```sh + az iot hub connection-string show --default-eventhub \ + --output table \ + --hub-name + ``` + + āĻāĻ–āĻžāύ⧇ `` āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻžāĻŦ⧇āϰ āύāĻžāĻŽāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ + +1. āĻāĻŦāĻžāϰ VS Code āĻ `local.settings.json` āĻĢāĻžāχāϞāϟāĻŋ āĻ“āĻĒ⧇āύ āĻ•āϰ⧇, `Values` āĻ…āĻ‚āĻļ⧇āϰ āύāĻŋāĻŽā§āύ⧇āϰ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ­ā§āϝāĻžāϞ⧁āϗ⧁āϞ⧋ āϝ⧋āĻ— āĻ•āϰāĻŋ: + + ```json + "IOT_HUB_CONNECTION_STRING": "" + ``` + + āĻāĻ–āĻžāύ⧇ āφāϗ⧇āϰ āĻ¸ā§āĻŸā§‡āĻĒ āĻĨ⧇āϕ⧇ āĻĒāĻžāĻ“ā§ŸāĻž āĻ­ā§āϝāĻžāĻ˛ā§ā§āϟāĻŋ `` āĻāϰ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āĻŦāϏāĻžāχāĨ¤ JSON āĻĢāĻžāχāϞāϟāĻŋ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϤ⧈āϰ⧀ āĻ•āϰāϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āωāĻĒāϰ⧇āϰ āϞāĻžāχāύ⧇āϰ āĻĒāϰ⧇ āĻ•āĻŽāĻž āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ + +### āĻ•āĻžāϜ - āχāϭ⧇āĻ¨ā§āϟ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϤ⧈āϰ⧀ + +āφāĻŽāϰāĻž āĻāĻ–āύ āχāϭ⧇āĻ¨ā§āϟ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϤ⧈āϰ⧀ āĻ•āϰāĻžāϰ āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ + +1. āĻāĻ–āύ `soil-moisture-trigger` āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ āĻĨ⧇āϕ⧇ VS Code terminal āϚāĻžāϞ⧁ āĻ•āϰ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāĻžāύ āĻ•āϰāĻŋ: + + ```sh + func new --name iot-hub-trigger --template "Azure Event Hub trigger" + ``` + + āĻāϟāĻŋ `iot-hub-trigger` āύāĻžāĻŽā§‡ āύāϤ⧁āύ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āϤ⧈āϰ⧀ āĻ•āϰāĻŦ⧇āĨ¤ āĻāχ āĻŸā§āϰāĻŋāĻ—āĻžāϰāϟāĻŋ Event Hub compatible endpoint āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšāĻŦ⧇āĨ¤ āĻāĻ–āύ āφāĻŽāϰāĻž āχāϭ⧇āĻ¨ā§āϟ āĻšāĻžāĻŦ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āύāĻŋā§Ÿā§‡ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ + +āĻāĻ–āύ āĻĻ⧇āĻ–āĻž āϝāĻžāĻŦ⧇ `soil-moisture-trigger` āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇āϰ āϭ⧇āϤāϰ⧇ `iot-hub-trigger` āύāĻžāĻŽā§‡ āφāϰ⧇āĻ•āϟāĻŋ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ āϤ⧈āϰ⧀ āĻšāĻŦ⧇ āϝ⧇āϟāĻŋāϤ⧇ āĻĢāĻžāĻ‚āĻļāύ āĻ°ā§Ÿā§‡āϛ⧇āĨ¤ āĻāχ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻĢāĻžāχāϞāϗ⧁āϞ⧋ āĻĨāĻžāĻ•āĻŦ⧇: + +* `__init__.py` - āĻāχ āĻĒāĻžāχāĻĨāύ āĻĢāĻžāχāϞ⧇ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ°ā§Ÿā§‡āϛ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋāϕ⧇ āĻŽāĻĄāĻŋāωāϞ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϏāĻžāϧāĻžāϰāĻŖ āύ⧀āϤāĻŋ āĻ…āύ⧁āϏāĻžāϰ⧇ āĻāĻ­āĻžāĻŦ⧇ āύāĻžāĻŽāĻ•āϰāĻŖ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤ + + āĻāχ āĻĢāĻžāχāϞ⧇ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āϕ⧋āĻĄ: + + ```python + from typing import List + import logging + import azure.functions as func + + def main(events: List[func.EventHubEvent]): + for event in events: + logging.info('Python EventHub trigger processed an event: %s', + event.get_body().decode('utf-8')) + ``` + + āĻāχ āĻŸā§āϰāĻŋāĻ—āĻžāϰ⧇āϰ āĻŽā§‚āϞ āϚāĻžāĻŦāĻŋāĻ•āĻžāĻ āĻŋ āĻ°ā§Ÿā§‡āϛ⧇ `main` āĻĢāĻžāĻ‚āĻļāύ⧇ āĨ¤ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ āĻĨ⧇āϕ⧇ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻāχ āĻĢāĻžāĻ‚āĻļāύāϕ⧇āχ āĻ•āϞ āĻ•āϰāĻž āĻšā§ŸāĨ¤ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋāϤ⧇ `events` āύāĻžāĻŽā§‡ āĻāĻ•āϟāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ°ā§Ÿā§‡āϛ⧇ āϝ⧇āϟāĻŋāϤ⧇ `EventHubEvent` āϞāĻŋāĻ¸ā§āϟ āĻ°ā§Ÿā§‡āϛ⧇āĨ¤ āĻāχ āϞāĻŋāĻ¸ā§āĻŸā§‡āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āĻŽā§‚āϞāϤ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āĻāĻ• āĻāĻ•āϟāĻŋ āĻŽā§āϝāĻžāϏ⧇āϜ āϝāĻžāϤ⧇ āĻāύ⧋āĻŸā§‡āĻļāύ⧇āϰ āĻŽāϤ āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋāĻ“ āĻ…āĻ¨ā§āϤāĻ°ā§āĻ­ā§‚āĻ•ā§āϤ āĻĨāĻžāϕ⧇ āϝ⧇āĻŽāύāϟāĻž āφāĻŽāϰāĻž āĻ—āϤ āϞ⧇āϏāύ⧇ āĻĻ⧇āϖ⧇āĻ›āĻŋāĨ¤ + + āĻāχ āĻŸā§āϰāĻŋāĻ—āĻžāϰāϟāĻŋ āĻĒā§āϰāϤāĻŋāϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āĻāĻ•āϟāĻŋ āĻāĻ•āϟāĻŋ āĻ•āϰ⧇ āύ⧟, āĻŦāϰāĻ‚ āĻ…āύ⧇āĻ•āϗ⧁āϞ⧋ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āϞāĻŋāĻ¸ā§āϟ āĻāĻ•āϏāĻžāĻĨ⧇ āύāĻŋā§Ÿā§‡ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āϝāĻ–āύ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϰāĻžāύ āĻ•āϰāĻž āĻšā§Ÿ, āϤāĻ–āύ āĻāϟāĻŋ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āĻ…āϏāĻŽāĻžāĻĒā§āϤ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞ⧋āϰ āĻ•āĻžāϜ āφāϗ⧇ āϏāĻŽāĻžāĻĒā§āϤ āĻ•āϰ⧇āĨ¤ āϤāĻžāϰāĻĒāϰ āϝāĻĻāĻŋ āϖ⧁āĻŦ āĻ…āĻ˛ā§āĻĒ āϏāĻŽā§Ÿā§‡āϰ āϭ⧇āϤāϰ⧇ āĻšāĻžāĻŦ⧇ āĻ…āύ⧇āĻ•āϗ⧁āϞ⧋ āχāϭ⧇āĻ¨ā§āϟ āĻĒāĻžāĻ āĻžāύ⧋ āύāĻž āĻšā§Ÿ, āϤāĻžāĻšāϞ⧇ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āϏāĻŽā§āĻŦāϞāĻŋāϤ āϞāĻŋāĻ¸ā§āϟ āύāĻŋā§Ÿā§‡ āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ āĻĻāĻŋāĻŦ⧇āĨ¤ + + āĻāχ āĻĢāĻžāĻ‚āĻļāύ āĻŽā§‚āϞāϤ āϞāĻŋāĻ¸ā§āϟ āϧāϰ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞ⧋ āύāĻĨāĻŋāĻŦāĻĻā§āϧ āϰāĻžāϖ⧇āĨ¤ + +* `function.json` - āĻāϟāĻŋāϤ⧇ āĻŸā§āϰāĻŋāĻ—āĻžāϰ⧇āϰ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĨāĻžāϕ⧇ āϝāĻž āĻŽā§‚āϞāϤ `bindings` āĻ…āĻ‚āĻļ⧇ āφāĻŽāϰāĻž āĻĻ⧇āĻ–āĻŋāĨ¤ āĻŦāĻžāχāĻ¨ā§āĻĄāĻŋāĻ‚ āĻšāϞ⧋ āĻŽā§‚āϞāϤ Azure Functions āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ Azure services āĻāϰ āĻŽāĻ§ā§āϝāĻ•āĻžāϰ āϏāĻ‚āϝ⧋āĻ—āĨ¤ āĻāϟāĻŋāϤ⧇ input binding āĻĨāĻžāϕ⧇, āϕ⧋āύ āĻāĻ•āϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āĻšāĻžāĻŦ⧇āϰ āϜāĻ¨ā§āϝ - āϝāĻž āχāϭ⧇āĻ¨ā§āϟ āĻšāĻžāĻŦ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšā§Ÿ āĻāĻŦāĻ‚ āĻĄā§‡āϟāĻž āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĨ¤ + + > 💁 āĻāĻ›āĻžā§œāĻžāĻ“ āφāĻŽāϰāĻž āφāωāϟāĻĒ⧁āϟ āĻŦāĻžāχāĻ¨ā§āĻĄāĻŋāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ āϝāĻž āϕ⧋āύ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āφāωāϟāĻĒ⧁āϟāϕ⧇ āφāϰ⧇āĻ•āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝ⧇āĻŽāύ, āϕ⧋āύ āĻĄā§‡āϟāĻžāĻŦ⧇āϏ⧇āϰ āϏāĻžāĻĨ⧇ āφāωāϟāĻĒ⧁āϟ āĻŦāĻžāχāĻ¨ā§āĻĄāĻŋāĻ‚ āϝ⧋āĻ— āĻ•āϰ⧇ āĻĢāĻžāĻ‚āĻļāύ āĻĻā§āĻŦāĻžāϰāĻž āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āϏāĻžāĻĨ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāϤ⧇ āĻĻāĻŋāϞ⧇ - āϏāĻ•āϞ āĻĄā§‡āϟāĻž āĻ¸ā§āĻŦāĻ‚āĻ•ā§āϰāĻŋ⧟āĻ­āĻžāĻŦ⧇āχ āϏ⧇āχ āĻĄā§‡āϟāĻžāĻŦ⧇āϏ āĻ āϚāϞ⧇ āφāϏāĻŦ⧇āĨ¤ + + ✅ āĻāĻŦāĻžāϰ āĻ•āĻŋāϛ⧁ āĻ—āĻŦ⧇āώāĻŖāĻž āĻ•āϰāĻž āϝāĻžāĻ•: āĻŦāĻžāχāĻ¨ā§āĻĄāĻŋāĻ‚āϏ āύāĻŋā§Ÿā§‡ [Azure Functions triggers and bindings concepts documentation](https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings?tabs=python&WT.mc_id=academic-17441-jabenn)āĻĒā§œā§‡ āφāϰ⧋ āĻœā§‡āύ⧇ āύāĻŋāχ āĻāχ āĻŦāĻŋāĻˇā§Ÿā§‡ āĨ¤ + + `bindings` āĻ…āĻ‚āĻļ⧇ āĻāϰ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύāϗ⧁āϞ⧋ āĻ°ā§Ÿā§‡āϛ⧇āĨ¤ āĻāϰ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻŋāϛ⧁ āĻ­ā§āϝāĻžāϞ⧁ āĻšāϞ⧋ : + + * `"type": "eventHubTrigger"` - āĻāϟāĻŋāϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ⧋ āĻĢāĻžāĻ‚āĻļāύāϕ⧇ āχāϭ⧇āĻ¨ā§āϟ āĻšāĻžāĻŦ āĻĨ⧇āϕ⧇ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āĻĄā§‡āϟāĻž āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ + * `"name": "events"` - āĻāχ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰāϟāĻŋ āχāϭ⧇āĻ¨ā§āϟ āĻšāĻžāĻŦ⧇āϰ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§ŸāĨ¤ āĻāϟāĻŋ āĻĒāĻžāχāĻĨāύ āϕ⧋āĻĄā§‡āϰ `main` function āĻāϰ āϏāĻžāĻĨ⧇ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻŽāĻŋāϞāĻŋā§Ÿā§‡ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ + * `"direction": "in"` - āĻāϟāĻŋ āχāύāĻĒ⧁āϟ āĻŦāĻžāχāĻ¨ā§āĻĄāĻŋāĻ‚, āϝ⧇āĻ–āĻžāύ⧇ āχāϭ⧇āĻ¨ā§āϟ āĻšāĻžāĻŦ āĻĨ⧇āϕ⧇ āĻĢāĻžāĻ‚āĻļāύ⧇ āĻĄā§‡āϟāĻž āφāϏ⧇āĨ¤ + * `"connection": ""` - āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĨ⧇āϕ⧇ āĻĄā§‡āϟāĻž āĻ—ā§āϰāĻšāϪ⧇āϰ āϝ⧇ āϏ⧇āϟāĻŋāĻ‚ - āϏ⧇āϟāĻŋāϰ āϏāĻ‚āĻœā§āĻžāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧇āĨ¤ āϞ⧋āĻ•āĻžāϞāĻŋ āϰāĻžāύ āĻ•āϰāϞ⧇, āϏ⧇āϟāĻŋ `local.settings.json` āĻĢāĻžāχāϞ āĻĨ⧇āϕ⧇ āϏ⧇āϟāĻŋāĻ‚āϏ āϰ⧀āĻĄ āĻ•āϰ⧇āĨ¤ + + > 💁 āĻāχ connection string āĻ•āĻŋāĻ¨ā§āϤ⧁ `function.json` āĻĢāĻžāχāϞ⧇ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻž āϝāĻžāĻŦ⧇āύāĻž, āĻāϟāĻŋ āϏ⧇āϟāĻŋāĻ‚āϏ āĻĨ⧇āϕ⧇āχ āϰ⧀āĻĄ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋ āĻāĻ­āĻžāĻŦ⧇ āϏāĻžāϜāĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇ āϝāĻžāϤ⧇ āφāĻ•āĻ¸ā§āĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšā§Ÿā§‡ āύāĻž āϝāĻžā§ŸāĨ¤ + +1. `"connection"` āĻāϰ āĻ­ā§āϝāĻžāϞ⧁ `function.json` āĻĢāĻžāχāϞ āĻĨ⧇āϕ⧇ āύāĻŋāϤ⧇ āĻšāĻŦ⧇ āϝāĻžāϤ⧇ āύāϤ⧁āύ āĻ­ā§āϝāĻžāϞ⧁āϗ⧁āϞ⧋ `local.settings.json` āĻĢāĻžāχāϞ⧇ āĻĨāĻžāϕ⧇: + + ```json + "connection": "IOT_HUB_CONNECTION_STRING", + ``` + + > 💁 āĻŽāύ⧇ āϰāĻžāĻ–āϤ⧇ āĻšāĻŦ⧇ - āĻāϟāĻŋ āϝ⧇āύ āϏ⧇āϟāĻŋāĻ‚āϏ āĻ āĻĒā§Ÿā§‡āĻ¨ā§āϟ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āϝ⧇āύ āĻāĻ–āĻžāύ⧇ āύāĻž āĻĨāĻžāϕ⧇āĨ¤ + +### āĻ•āĻžāϜ - āχāϭ⧇āĻ¨ā§āϟ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϰāĻžāύ āĻ•āϰāĻž + +1. āĻāϟāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝ⧇ āφāĻŽāϰāĻž āϝ⧇āύ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ āχāϭ⧇āĻ¨ā§āϟ āĻŽāύāĻŋāϟāϰ⧇ āϰāĻžāύ āύāĻž āĻ•āϰāĻŋāĨ¤ āĻāϟāĻŋ āĻāĻŦāĻ‚ āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϝāĻĻāĻŋ āĻāĻ•āϏāĻžāĻĨ⧇ āϰāĻžāύ āĻ•āϰ⧇, āϤāĻŦ⧇ āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āϝāĻĨāĻžāϝāĻĨāĻ­āĻžāĻŦ⧇ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻ•āĻžāύ⧇āĻ•ā§āϟ āĻšāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύāĻž, āĻĢāϞ⧇ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āĻĄā§‡āϟāĻžāĻ“ āĻ āĻŋāĻ•āĻŽāϤ⧋ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžāĻŦ⧇āύāĻžāĨ¤ + + > 💁 āĻāĻ•āĻžāϧāĻŋāĻ• āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻāĻ–āĻžāύ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ *consumer groups* āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ āĻāĻ¨ā§āĻĄāĻĒā§Ÿā§‡āĻ¨ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āϝ⧁āĻ•ā§āϤ āĻšāĻŦ⧇āĨ¤ āĻāχ āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ⧇ āφāϰ⧋ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āφāĻŽāϰāĻž āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻāĻ•āϟāĻŋ āĻ…āĻ§ā§āϝāĻžā§Ÿā§‡ āϜāĻžāύāĻŦā§‹āĨ¤ + +1. Functions app āϰāĻžāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, VS Code terminal āĻĨ⧇āϕ⧇ āύāĻŋāĻŽā§āύ⧇āϰ āϕ⧋āĻĄāϗ⧁āϞ⧋ āϰāĻžāύ āĻĻāĻŋāχ + + ```sh + func start + ``` + + āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āϚāĻžāϞ⧁ āĻšā§Ÿā§‡, `iot-hub-trigger` āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āϖ⧁āρāĻœā§‡ āύāĻŋāĻŦ⧇ āĨ¤ āϤāĻžāϰāĻĒāϰ āĻāϟāĻŋ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇ āφāϏāĻž āχāϭ⧇āĻ¨ā§āϟāϏāĻŽā§‚āĻš āĻĒā§āϰāϏ⧇āϏ āĻ•āϰāĻŦ⧇āĨ¤ + + ```output + (.venv) ➜ soil-moisture-trigger func start + Found Python version 3.9.1 (python3). + + Azure Functions Core Tools + Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) + Function Runtime Version: 3.0.15417.0 + + Functions: + + iot-hub-trigger: eventHubTrigger + + For detailed output, run func with --verbose flag. + [2021-05-05T02:44:07.517Z] Worker process started and initialized. + [2021-05-05T02:44:09.202Z] Executing 'Functions.iot-hub-trigger' (Reason='(null)', Id=802803a5-eae9-4401-a1f4-176631456ce4) + [2021-05-05T02:44:09.205Z] Trigger Details: PartionId: 0, Offset: 1011240-1011632, EnqueueTimeUtc: 2021-05-04T19:04:04.2030000Z-2021-05-04T19:04:04.3900000Z, SequenceNumber: 2546-2547, Count: 2 + [2021-05-05T02:44:09.352Z] Python EventHub trigger processed an event: {"soil_moisture":628} + [2021-05-05T02:44:09.354Z] Python EventHub trigger processed an event: {"soil_moisture":624} + [2021-05-05T02:44:09.395Z] Executed 'Functions.iot-hub-trigger' (Succeeded, Id=802803a5-eae9-4401-a1f4-176631456ce4, Duration=245ms) + ``` + + āĻāχ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āϞ⧇ `Executing 'Functions.iot-hub-trigger'` āĻ…āĻĨāĻŦāĻž `Executed 'Functions.iot-hub-trigger'` āĻŦā§āϞāĻ•āϗ⧁āϞ⧋ āφāωāϟāĻĒ⧁āĻŸā§‡ āφāϏāĻŦ⧇āĨ¤ āĻāϤ⧇ āĻ•āϰ⧇ āφāĻŽāϰāĻž āϜāĻžāύāϤ⧇ āĻĒāĻžāϰāĻŦā§‹ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻ•āϞ⧇ āĻ•āϤāϟāĻŋ āĻŽā§āϝāĻžāϏ⧇āϜ āĻĒā§āϰāϏ⧇āϏ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤ + + > āϝāĻĻāĻŋ āύāĻŋāĻšā§‡āϰ āĻāχ āĻāϰāϰāϟāĻŋ āφāϏ⧇: + + ```output + The listener for function 'Functions.iot-hub-trigger' was unable to start. Microsoft.WindowsAzure.Storage: Connection refused. System.Net.Http: Connection refused. System.Private.CoreLib: Connection refused. + ``` + + āϤāĻžāĻšāϞ⧇, āĻāϟāĻž āĻĻ⧇āĻ–āϤ⧇ āĻšāĻŦ⧇ āϝ⧇ Azurite āϚāϞāϛ⧇ āĻ•āĻŋāύāĻž āĻāĻŦāĻ‚ āφāĻŽāϰāĻž `local.settings.json`āĻĢāĻžāχāϞ⧇ `AzureWebJobsStorage` āϕ⧇ `UseDevelopmentStorage=true` āĻ•āϰ⧇āĻ›āĻŋ āĻ•āĻŋāύāĻž āϏ⧇āχ āĻŦāĻŋāώ⧟āϟāĻŋāĻ“ āφāĻŽāĻžāĻĻ⧇āϰ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ + +1. āĻāĻ–āύ āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āϚāϞāϛ⧇ āĻ•āĻŋāύāĻž āĻ–ā§‡ā§ŸāĻžāϞ āϰāĻžāĻ–āĻŸā§‡ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ āϝ⧇ āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āĻ āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻžāϰ āύāϤ⧁āύ āĻŽāĻžāύāϗ⧁āϞ⧋ āĻĻ⧇āĻ–āĻžāĻšā§āϛ⧇āĨ¤ + +1. Functions app āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ āϤāĻž Restart āĻ•āϰāĻŋāĨ¤ āĻĻ⧇āĻ–āĻž āϝāĻžāĻŦ⧇ āĻāϟāĻŋ āφāϰ āφāϗ⧇āϰ āĻŽā§āϝāĻžāϏ⧇āϜāϗ⧁āϞ⧋ āĻĒā§āϰāϏ⧇āϏ āĻ•āϰāϛ⧇āύāĻž, āϕ⧇āĻŦāϞ āύāϤ⧁āύ āĻŽā§āϝāĻžāϏ⧇āϜāϗ⧁āϞ⧋ āύāĻŋā§Ÿā§‡āχ āĻ•āĻžāϜ āĻ•āϰāϛ⧇āĨ¤ + +> 💁 VS Code āĻĨ⧇āϕ⧇āχ āĻĢāĻžāĻ‚āĻļāύ āĻĄāĻŋāĻŦāĻžāĻ— āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϞāĻžāχāύ⧇āϰ āĻļ⧁āϰ⧁āϤ⧇ āĻŦāĻ°ā§āĻĄāĻžāϰ⧇āϰ āĻ…āĻ‚āĻļ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧇ āĻ…āĻĨāĻŦāĻž āĻ•āĻžāĻ°ā§āϏāϰāϕ⧇ āϕ⧋āύ āϞāĻžāχāύ⧇ āϰ⧇āϖ⧇ āϤāĻžāϰāĻĒāϰ *Run -> Toggle breakpoint* āĻ āĻ—āĻŋā§Ÿā§‡ āĻŦāĻž `F9` āĻĒā§āϰ⧇āϏ āĻ•āϰāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦā§āϰ⧇āĻ•āĻĒā§Ÿā§‡āĻ¨ā§āϟ āϏ⧇āϟ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ āĻāĻ›āĻžā§œāĻžāĻ“ āĻĄāĻŋāĻŦāĻžāĻ—āĻžāϰ launch āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ *Run -> Start debugging* āĻ āĻ—āĻŋā§Ÿā§‡ āĻŦāĻž `F5` āĻĒā§āϰ⧇āϏ āĻ•āϰ⧇ āĻ…āĻĨāĻŦāĻž āφāĻŽāϰāĻž *Run and debug* āĻ āĻ—āĻŋā§Ÿā§‡ **Start debugging** āĻ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāĻ–āĻžāύ āĻĨ⧇āϕ⧇ āχāϭ⧇āĻ¨ā§āϟ āĻĒā§āϰāϏ⧇āϏāĻŋāĻ‚ āĻāϰ āĻĄāĻŋāĻŸā§‡āχāϞāϏ āϜāĻžāύāĻž āϝāĻžāĻŦ⧇āĨ¤ + +## āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āϕ⧋āĻĄ āĻĨ⧇āϕ⧇ āĻĄāĻŋāϰ⧇āĻ•ā§āϟ āĻŽā§‡āĻĨāĻĄ āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāĻ āĻžāύ⧋ + +āĻāĻ–āύ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āφāĻŽāĻžāĻĻ⧇āϰ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ āĻĨ⧇āϕ⧇ āχāϭ⧇āĻ¨ā§āϟ āĻšāĻžāĻŦ⧇āϰ āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āĻāĻ¨ā§āĻĄ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĄā§‡āϟāĻž āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϛ⧇āĨ¤ āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āĻāĻ–āύ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋ *āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ* āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āφāϞāĻžāĻĻāĻž āϏāĻ‚āϝ⧋āĻ— āĻĻā§āĻŦāĻžāϰāĻž āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻŸā§āϝ⧁āϞ āϝāĻž āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āϏāĻžāĻĨ⧇ āϕ⧀ āϕ⧀ āĻĄāĻŋāĻ­āĻžāχāϏāϗ⧁āϞāĻŋ āύāĻŋāĻŦāĻ¨ā§āϧāϭ⧁āĻ•ā§āϤ āϰāϝāĻŧ⧇āϛ⧇ āϤāĻž āĻĻ⧇āĻ–āϤ⧇ āĻāĻŦāĻ‚ āĻĄāĻŋāĻ­āĻžāχāϏāϗ⧁āϞ⧋āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ•ā§āϞāĻžāωāĻĄ āĻĨ⧇āϕ⧇ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻŽā§āϝāĻžāϏ⧇āϜ āĻĒāĻžāĻ āĻžāύ⧋āϰ āϏ⧁āϝ⧋āĻ— āĻĻ⧇āϝāĻŧāĨ¤ āĻāĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ direct method requests āĻŦāĻž āĻĄāĻŋāĻ­āĻžāχāϏ āϟ⧁āχāύ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϤāĻž āĻ•āϰāĻž āĻšā§ŸāĨ¤ āĻāĻ›āĻžā§œāĻžāĻ“ āφāĻŽāϰāĻž āĻāϟāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ āĻĨ⧇āϕ⧇ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϗ⧁āϞāĻŋ āύāĻŋāĻŦāĻ¨ā§āϧāĻ•āϰāĻŖ, āφāĻĒāĻĄā§‡āϟ āĻ•āϰāϤ⧇ āĻŦāĻž āĻĄāĻŋāϞāĻŋāϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ + + Registry Manager āĻāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāύ⧇āĻ•ā§āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ Connection String āĻĻāϰāĻ•āĻžāϰāσ + +### āĻ•āĻžāϜ - Registry Manager āĻāϰ āϜāĻ¨ā§āϝ connection string āĻ¨ā§‡ā§ŸāĻž + +1. āύāĻŋāĻšā§‡āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāĻžāύ āĻ•āϰāĻŋ: + + ```sh + az iot hub connection-string show --policy-name service \ + --output table \ + --hub-name + ``` + + āĻāĻ–āĻžāύ⧇ `` āĻāϰ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āύāĻžāĻŽāϟāĻŋ āĻŦāϏāĻžāχāĨ¤ + + *ServiceConnect* āĻĒāϞāĻŋāϏāĻŋāϰ `--policy-name service` āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āϚāĻžāĻ“ā§ŸāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤ āφāĻŽāϰāĻž āϝāĻ–āύ connection string āĻāϰ āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āϟ āĻ•āϰāĻŋ, āĻĒāĻžāĻ°ā§āĻŽāĻŋāĻļāύāϗ⧁āϞ⧋ āĻĒā§āĻ°ā§Ÿā§‹āϜāύāĻŽāϤ⧋ āĻ āĻŋāĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ āĻāĻ–āĻžāύ⧇ ServiceConnect āĻĒāϞāĻŋāϏāĻŋ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻ•āĻžāύ⧇āĻ•ā§āϟ āĻ•āϰ⧇ āĻŽā§āϝāĻžāϏ⧇āϜ āĻĒāĻžāĻ āĻžāύ⧋āϰ āϏ⧁āϝ⧋āĻ— āĻĻā§‡ā§ŸāĨ¤ + + ✅ āĻ•āĻŋāϛ⧁ āĻ—āĻŦ⧇āώāĻŖāĻž āĻ•āϰāĻž āϝāĻžāĻ•: [IoT Hub permissions documentation](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security#iot-hub-permissions?WT.mc_id=academic-17441-jabenn) āĻĨ⧇āϕ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĒāϞāĻŋāϏāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϜāĻžāύāϤ⧇ āĻšāĻŦ⧇āĨ¤ + +1. VS Code āĻ `local.settings.json` āĻĢāĻžāχāϞāϟāĻŋ āĻ“āĻĒ⧇āύ āĻ•āϰāĻŋāĨ¤ āϤāĻžāϰāĻĒāϰ `Values` āĻ…āĻ‚āĻļ⧇ āύāĻŋāĻšā§‡āϰ āĻŦā§āϝāĻžāϞ⧁āϗ⧁āϞ⧋ āϝ⧋āĻ— āĻ•āϰāĻŋ: + + ```json + "REGISTRY_MANAGER_CONNECTION_STRING": "" + ``` + + āĻāĻ–āĻžāύ⧇ āφāϗ⧇āϰ āĻ¸ā§āĻŸā§‡āĻĒ āĻĨ⧇āϕ⧇ āĻĒāĻžāĻ“ā§ŸāĻž āĻ­ā§āϝāĻžāĻ˛ā§ā§āϟāĻŋ `` āĻāϰ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āĻŦāϏāĻžāχāĨ¤ JSON āĻĢāĻžāχāϞāϟāĻŋ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϤ⧈āϰ⧀ āĻ•āϰāϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āωāĻĒāϰ⧇āϰ āϞāĻžāχāύ⧇āϰ āĻĒāϰ⧇ āĻ•āĻŽāĻž āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ + +### āĻ•āĻžāϜ - āĻĄāĻŋāĻ­āĻžāχāϏ⧇ direct method request āĻĒāĻžāĻ āĻžāύ⧋ + +1. Registry Manager āĻāϰ SDK āϏāĻšāĻœā§‡āχ Pip package āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžāĻŦ⧇āĨ¤ `requirements.txt` āĻĢāĻžāχāϞ⧇ āύāĻŋāĻšā§‡āϰ āϞāĻžāχāύāϗ⧁āϞ⧋ āϝ⧋āĻ— āĻ•āϰāĻŋ āĻĒā§āϝāĻžāϕ⧇āĻœā§‡āϰ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋ āĻāĻĄ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ: + + ```sh + azure-iot-hub + ``` + +1. Pip package āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝ⧇ āφāĻŽāϰāĻž virtual environment āĻāĻ•ā§āϟāĻŋāϭ⧇āϟ āĻ•āϰ⧇āχ āĻ­āĻŋāĻāϏ āϕ⧋āĻĄā§‡ āĻ•āĻžāϜ āĻ•āϰāĻ›āĻŋ : + + ```sh + pip install -r requirements.txt + ``` + +1. `__init__.py` āĻĢāĻžāχāϞ⧇ āύāĻŋāĻšā§‡āϰ āχāĻŽā§āĻĒā§‹āĻ°ā§āϟāϗ⧁āϞ⧋ āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŋ: + + ```python + import json + import os + from azure.iot.hub import IoTHubRegistryManager + from azure.iot.hub.models import CloudToDeviceMethod + ``` + + āĻāϟāĻŋ āĻ•āĻŋāϛ⧁ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻāĻŦāĻ‚ Registry Manager āϏāĻžāĻĨ⧇ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•ā§āϟ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ direct method requests āĻĒā§āϰ⧇āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āφāϰ⧋ āĻ•āĻŋāϛ⧁ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āχāĻŽā§āĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇āĨ¤ + +1. `main` āĻŽā§‡āĻĨāĻĄ āĻĨ⧇āϕ⧇ āϕ⧋āĻĄāϗ⧁āϞ⧋ āϏāϰāĻŋā§Ÿā§‡ āĻĢ⧇āϞāĻŋ, āϤāĻŦ⧇ āĻŽā§‡āĻĨāĻĄāϟāĻŋ āϰāĻžāĻ–āϤ⧇ āĻšāĻŦ⧇āĨ¤ + +1. āϝāĻ–āύ āĻāĻ•āĻžāϧāĻŋāĻ• āĻŦāĻžāĻ°ā§āϤāĻž āĻ—ā§ƒāĻšā§€āϤ āĻšāϝāĻŧ, āϕ⧇āĻŦāϞāĻŽāĻžāĻ¤ā§āϰ āĻļ⧇āώ⧇āϰāϟāĻŋāϕ⧇āχ āĻāϟāĻŋ āĻĒā§āϰāϏ⧇āϏ āĻ•āϰ⧇ āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āĻšāϞ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϏāĻŽā§Ÿā§‡ āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻžāĨ¤ āĻāϟāĻŋāϰ āφāϗ⧇ āĻĨ⧇āϕ⧇ āφāϏāĻž āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞāĻŋ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āϰāĻž āύāĻŋāĻˇā§āĻĒā§āĻ°ā§Ÿā§‹āϜāύāĨ¤ āĻāĻ•ā§āώāύ `events` āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĨ⧇āϕ⧇ āϏāĻ°ā§āĻŦ⧇āĻļ⧇āώ āĻŽā§āϝāĻžāϏ⧇āϜ āĻĒ⧇āϤ⧇ āĻšāϞ⧇ āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄāϗ⧁āϞ⧋ āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇: + + ```python + event = events[-1] + ``` + +1. āϤāĻžāϰāĻĒāϰ āύāĻŋāĻŽā§āύ⧇āϰ āϕ⧋āĻĄāϗ⧁āϞ⧋ āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŋ: + + ```python + body = json.loads(event.get_body().decode('utf-8')) + device_id = event.iothub_metadata['connection-device-id'] + + logging.info(f'Received message: {body} from {device_id}') + ``` + + āĻāχ āϕ⧋āĻĄāϟāĻŋ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āĻĨ⧇āϕ⧇ āφāϏāĻž JSON āĻŽā§āϝāĻžāϏ⧇āĻœā§‡āϰ āϝ⧇ āχāϭ⧇āĻ¨ā§āϟ āĻŦāĻĄāĻŋ āĻ°ā§Ÿā§‡āϛ⧇ āϤāĻž āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰ⧇āĨ¤ + + āϤāĻžāϰāĻĒāϰ āĻāϟāĻŋ āĻŽā§āϝāĻžāϏ⧇āĻœā§‡āϰ āϏāĻžāĻĨ⧇ āφāϏāĻž āĻāύ⧋āĻŸā§‡āĻļāύ āĻĨ⧇āϕ⧇ āĻĄāĻŋāĻ­āĻžāχāϏ āφāχāĻĄāĻŋ āĻĒā§‡ā§Ÿā§‡ āϝāĻžā§ŸāĨ¤ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āĻŦāĻĄāĻŋ āϤ⧇ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻšāĻŋāϏ⧇āĻŦ⧇ āφāϏāĻž āĻŽā§āϝāĻžāϏ⧇āϜāϗ⧁āϞ⧋, `iothub_metadata` āĻĄāĻŋāĻ•āĻļāύāĻžāϰāĻŋ āϝ⧇āϟāĻŋāϤ⧇ āφāĻŦāĻžāϰ āĻĒā§āϰ⧇āϰāĻ• (Sender) āĻāϰ āĻĄāĻŋāĻ­āĻžāχāϏ āφāχāĻĄāĻŋ āĻāĻŦāĻ‚ āϏāĻŽā§Ÿ āωāĻ˛ā§āϞ⧇āĻ–āĻŋāϤ āĻĨāĻžāϕ⧇āĨ¤ + + āϏāĻ•āϞ āϤāĻĨā§āϝ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ (logged) āĻĨāĻžāϕ⧇āĨ¤ Function app āϕ⧇ āϞ⧋āĻ•āĻžāϞāĻŋ āϰāĻžāύ āĻ•āϰāϞ⧇ āĻāχ āϏāĻ‚āϰāĻ•ā§āώāϪ⧇āϰ āĻŦāĻŋāώ⧟āϟāĻŋ (logging) āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āĻĻ⧇āĻ–āĻž āϝāĻžāĻŦ⧇āĨ¤ + +1. āϤāĻžāϰāĻĒāϰ āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄāϗ⧁āϞ⧋ āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŋ: + + ```python + soil_moisture = body['soil_moisture'] + + if soil_moisture > 450: + direct_method = CloudToDeviceMethod(method_name='relay_on', payload='{}') + else: + direct_method = CloudToDeviceMethod(method_name='relay_off', payload='{}') + ``` + + āĻāχ āϕ⧋āĻĄāϟāĻŋ āĻŽā§āϝāĻžāϏ⧇āϜ āĻĨ⧇āϕ⧇ āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āĻĒāĻžāϝāĻŧāĨ¤ āϤāĻžāϰāĻĒāϰ āĻāϟāĻŋ āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āĻšā§‡āĻ• āĻ•āϰ⧇ āĻāĻŦāĻ‚ āφāĻ°ā§āĻĻā§āϰāϤāĻžāϰ āĻŽāĻžāύ⧇āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ helper class āϤ⧈āϰ⧀ āĻ•āϰ⧇ direct method request āĻĒāĻžāĻ āĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āϝ⧇āĻ–āĻžāύ⧇ `relay_on` āĻŦāĻž `relay_off` āĻ•āϰāĻž āϝāĻžāĻŦ⧇āĨ¤ āĻāϟāĻŋāϤ⧇ payload āĻāϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āύ⧇āχ, āϤāĻžāχ āĻāĻ•āϟāĻŋ āĻĢāĻžāρāĻ•āĻž JSON document āĻĒāĻžāĻ āĻžāύ⧋ āϝāĻžāĻŦ⧇āĨ¤ + +1. āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄ āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŋ: + + ```python + logging.info(f'Sending direct method request for {direct_method.method_name} for device {device_id}') + + registry_manager_connection_string = os.environ['REGISTRY_MANAGER_CONNECTION_STRING'] + registry_manager = IoTHubRegistryManager(registry_manager_connection_string) + ``` + + āĻāχ āϕ⧋āĻĄāϟāĻŋ `local.settings.json` āĻĢāĻžāχāϞ āĻĨ⧇āϕ⧇ `REGISTRY_MANAGER_CONNECTION_STRING` āĻ“āĻĒ⧇āύ āĻ•āϰāĻŦ⧇āĨ¤ āĻāχ āĻĢāĻžāχāϞ⧇āϰ āĻ­ā§āϝāĻžāϞ⧁āϗ⧁āϞ⧋ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāĻž āĻšā§Ÿ āĻāĻŦāĻ‚ āĻāϗ⧁āϞ⧋ `os.environ` āĻĢāĻžāĻ‚āĻļāύ (āϏāĻ•āϞ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āĻĄāĻŋāĻ•āĻļāύāĻžāϰāĻŋ) āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āĻ•āϰāĻž āϝāĻžā§Ÿ āĨ¤ + + > 💁 āĻāχ āϕ⧋āĻĄāϟāĻŋ āĻ•ā§āϞāĻžāωāĻĄā§‡ āϚāϞāϤ⧇ āĻĨāĻžāĻ•āϞ⧇,`local.settings.json` āĻāϰ āĻ­ā§āϝāĻžāϞ⧁āϗ⧁āϞ⧋ *Application Settings* āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒāĻžāĻ āĻžāύ⧋ āĻšā§Ÿ āϝāĻž āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤ + + āϕ⧋āĻĄāϟāĻŋ āĻĒāϰ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻšā§‡āĻ˛ā§āĻĒāĻžāϰ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤ + +1. āύāĻŋāĻŽā§āύ⧇āϰ āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰāĻŋ: + + ```python + registry_manager.invoke_device_method(device_id, direct_method) + + logging.info('Direct method request sent!') + ``` + āĻāχ āϕ⧋āĻĄāϟāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰāϕ⧇ āĻŸā§‡āϞāĻŋāĻŽā§‡āĻŸā§āϰāĻŋ āĻĒā§āϰ⧇āϰāĻŖāĻ•āĻžāϰ⧀ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ direct method request āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻžāϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻĻā§‡ā§ŸāĨ¤ + + > 💁 āĻāĻŽāĻ•āĻŋāωāϟāĻŋāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āĻĒāĻžāĻ āϗ⧁āϞāĻŋāϤ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϗ⧁āϞāĻŋāϰ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϗ⧁āϞāĻŋāϤ⧇, āϰāĻŋāϞ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϗ⧁āϞāĻŋ āϏāĻŽāĻ¸ā§āϤ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āϕ⧋āĻĄ āϧāϰ⧇ āύāĻŋāϝāĻŧ⧇āϛ⧇ āϝ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧇āĻŦāϞ āĻāĻ•āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ āϕ⧋āĻĄāϟāĻŋāϰ āĻāχ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϟāĻŋ āϕ⧋āύ āĻāĻ•āϟāĻŋāĻŽāĻžāĻ¤ā§āϰ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āϟ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰ⧇, āϤāĻžāχ āφāĻŽāĻžāĻĻ⧇āϰ āϝāĻĻāĻŋ āφāĻ°ā§āĻĻā§āϰāϤāĻž āϏ⧇āĻ¨ā§āϏāϰ āĻāĻŦāĻ‚ āϰāĻŋāϞ⧇ āĻāϰ āĻāĻ•āĻžāϧāĻŋāĻ• āϏ⧇āϟāφāĻĒ āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āĻāϟāĻŋ āϏāĻ āĻŋāĻ• āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšā§Ÿā§‡ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇āĨ¤ + +1. Functions app āϰāĻžāύ āĻ•āϰ⧇ āĻāϟāĻŋ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝ⧇ IoT device āĻĄā§‡āϟāĻž āĻĒāĻžāĻ āĻžāĻšā§āϛ⧇āĨ¤ āφāĻŽāϰāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ āϝ⧇ āĻŽā§āϝāĻžāϏ⧇āϜāϗ⧁āϞ⧋ āĻĒā§āϰāϏ⧇āϏ āĻšāĻšā§āϛ⧇ āĻāĻŦāĻ‚ āĻĄāĻŋāϰ⧇āĻ•ā§āϟ āĻŽā§‡āĻĨāĻĄ āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāĻšā§āϛ⧇āĨ¤ āϏ⧇āĻ¨ā§āϏāϰāϟāĻŋ āύāĻžā§œāĻžāϞ⧇āχ āφāĻŽāϰāĻž āĻ­ā§āϝāĻžāϞ⧁ āĻšā§‡āĻžā§āϜ āĻšāϤ⧇ āĻĻ⧇āĻ–āĻŦ āĻāĻŦāĻ‚ āϰāĻŋāϞ⧇ āϤ⧇āĻ“ āĻāχ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āφāϏāĻŦ⧇āĨ¤ + +> 💁 āϏāĻ•āϞ āϕ⧋āĻĄ [code/functions](code/functions) āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āĻ°ā§Ÿā§‡āϛ⧇āĨ¤ + +## āĻ•ā§āϞāĻžāωāĻĄā§‡ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āϕ⧋āĻĄ āĻĄā§‡āĻĒā§āϞ⧟ āĻ•āϰāĻž + +āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄāϟāĻŋ āĻāĻ–āύ āϞ⧋āĻ•āĻžāϞāĻŋ āĻ•āĻžāϜ āĻ•āϰāϛ⧇, āϤāĻžāχ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ⧇ āφāĻŽāϰāĻž āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻŦāĨ¤ + +### āĻ•āĻžāϜ - āĻ•ā§āϞāĻžāωāĻĄ āϰāĻŋāϏ⧋āĻ°ā§āϏ āϤ⧈āϰ⧀ + +āφāĻŽāĻžāĻĻ⧇āϰ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒāϟāĻŋ āϕ⧇ āĻāĻ•āϟāĻŋ Azure Functions App āϰāĻŋāϏ⧋āĻ°ā§āϏ⧇ āĻĄā§‡āĻĒā§āϞ⧟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇,āϝāĻž āφāĻŽāĻžāĻĻ⧇āϰ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇ āϤ⧈āϰ⧀ āĻ•āϰāĻž āϰāĻŋāϏ⧋āĻ°ā§āϏ āĻ—ā§āϰ⧁āĻĒ⧇ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ āĻāĻ›āĻžā§œāĻžāĻ“ āχāĻŽā§āϝ⧁āϞ⧇āĻŸā§‡āĻĄ āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻāĻ•āĻžāωāĻ¨ā§āϟ āĻĒā§āĻ°ā§Ÿā§‹āϜāύāĨ¤ + +1. āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻāĻ•āĻžāωāĻ¨ā§āϟ āϤ⧈āϰ⧀āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāĻžāύ āĻĻāĻŋāχ: + + ```sh + az storage account create --resource-group soil-moisture-sensor \ + --sku Standard_LRS \ + --name + ``` + + āĻāĻ–āĻžāύ⧇ `` āĻāϰ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āφāĻŽāĻžāĻĻ⧇āϰ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āύāĻžāĻŽ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋ āĻ—ā§āϞ⧋āĻŦāĻžāϞāĻŋ āχāωāύāĻŋāĻ• āĻšāϤ⧇ āĻšāĻŦ⧇ āϕ⧇āύāύāĻž āĻāϟāĻŋ URL āĻšāĻŋāϏ⧇āĻŦ⧇āĻ“ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋāϰ āύāĻžāĻŽ ⧍ā§Ē āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻšāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻāĻ–āĻžāύ⧇ āϛ⧋āϟ āĻšāĻžāϤ⧇āϰ (lower case) āχāĻ‚āϰ⧇āϜāĻŋ āĻŦāĻ°ā§āĻŖ āĻāĻŦāĻ‚ āϏāĻ‚āĻ–ā§āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāĻŦ⧇āĨ¤ āύāĻžāĻŽ āĻšāĻŋāϏ⧇āĻŦ⧇ `sms` āĻāϰ āϏāĻžāĻĨ⧇ āϕ⧋āύ āϏāĻ‚āĻ–ā§āϝāĻž āĻŦāĻž āύāĻžāĻŽ āϞ⧇āĻ–āĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ + + āĻāĻ–āĻžāύ⧇ `--sku Standard_LRS` -āχ āĻŽā§‚āĻ˛ā§āϝāĻŽāĻžāύ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧇ āϝāĻž āĻāĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϏāĻ°ā§āĻŦāύāĻŋāĻŽā§āύ āĻĻāĻžāĻŽā§‡āϰ āĻœā§‡āύāĻžāϰ⧇āϞ āĻĒāĻžāϰāĻĒāĻžāϏ āĻāĻ•āĻžāωāĻ¨ā§āϟ āϏāĻŋāϞ⧇āĻ•ā§āϟ āĻ•āϰāϛ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ āϕ⧋āύ āĻĢā§āϰ⧀ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āύ⧇āχ āĻāĻŦāĻ‚ āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ…āύ⧁āϏāĻžāϰ⧇ āĻĢā§€ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϤāĻŦ⧇ āĻāĻ–āĻžāύ⧇ āĻ–āϰāϚ āĻŦ⧇āĻļ āĻ•āĻŽ, āϏāĻŦāĻĨ⧇āϕ⧇ āĻĻāĻžāĻŽāĻŋ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāĻ“ ā§Ļ.ā§Ļā§Ģ āĻŽāĻžāĻ°ā§āĻ•āĻŋāύ āĻĄāϞāĻžāϰ āĻĒā§āϰāϤāĻŋ āĻŽāĻžāϏ⧇ āĻĒā§āϰāϤāĻŋ āĻ—āĻŋāĻ—āĻžāĻŦāĻžāχāĻŸā§‡āϰ āϜāĻ¨ā§āϝāĨ¤ + + ✅ āĻŽā§‚āĻ˛ā§āϝāĻŽāĻžāύ⧇āϰ āĻŦā§āϝāĻĒāĻžāϰ⧇ [Azure Storage Account pricing page](https://azure.microsoft.com/pricing/details/storage/?WT.mc_id=academic-17441-jabenn) āĻĨ⧇āϕ⧇ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϜāĻžāύāĻž āϝāĻžāĻŦ⧇āĨ¤ + +1. āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āϤ⧈āϰ⧀āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύ⧇āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāĻžāύ āĻ•āϰāĻŋ: + + ```sh + az functionapp create --resource-group soil-moisture-sensor \ + --runtime python \ + --functions-version 3 \ + --os-type Linux \ + --consumption-plan-location \ + --storage-account \ + --name + ``` + + `` āĻāϰ āĻ¸ā§āĻĨāϞ⧇ āφāϗ⧇āϰ āϞ⧇āϏāύ⧇ āϰāĻŋāϏ⧋āĻ°ā§āϏ āĻ—ā§āϰ⧁āĻĒ āϤ⧈āϰ⧀āϰ āϏāĻŽā§Ÿ āϝ⧇ āϞ⧋āϕ⧇āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĻ›āĻŋ, āϤāĻž āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ + + āĻāĻ›āĻžā§œāĻžāĻ“ `` āĻāϰ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āφāϗ⧇āϰ āĻ…āĻ‚āĻļ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āύāĻžāĻŽāϟāĻŋāχ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ + + āϤāĻžāϰāĻĒāϰ `` āĻāĻ“ āĻāĻ•āϟāĻŋ āχāωāύāĻŋāĻ• āύāĻžāĻŽ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋ āĻ—ā§āϞ⧋āĻŦāĻžāϞāĻŋ āχāωāύāĻŋāĻ• āĻšāϤ⧇ āĻšāĻŦ⧇ āϕ⧇āύāύāĻž āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āĻāĻ•āϏ⧇āϏ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ URL āĻ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻŦ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ `soil-moisture-sensor-` āĻŦāĻž āĻāχ āϧāϰāϪ⧇āϰ āĻ•āĻŋāϛ⧁āϰ āĻĒāϰ⧇ āϕ⧋āύ āĻļāĻŦā§āĻĻ āĻŦāĻž āύāĻžāĻŽ āĻĻā§‡ā§ŸāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ + + āĻāĻ–āĻžāύ⧇ `--functions-version 3` āĻāχ āĻ…āĻĒāĻļāύāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāĻ°ā§āϝ Azure Functions āĻāϰ āĻ­āĻžāĻ°ā§āϏāύ āĻ āĻŋāĻ• āĻ•āϰ⧇āĨ¤ āĻ­āĻžāĻ°ā§āϏāύ-ā§Š āχ āĻšāϞ⧋ āϏāĻ°ā§āĻŦāĻļ⧇āώ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāĨ¤ + + āφāϰ `--os-type Linux` Functions runtime āϕ⧇ āĻāχ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞ⧋ āĻšā§‹āĻ¸ā§āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ OS āĻšāĻŋāϏ⧇āĻŦ⧇ Linux āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻĻā§‡ā§ŸāĨ¤ Function āϗ⧁āϞ⧋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻžāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇, Linux āĻŦāĻž Windows āĻ āĻšā§‹āĻ¸ā§āϟ āĻ•āϰāĻž āϝāĻžāĻŦ⧇āĨ¤ āĻĒāĻžāχāĻĨāύ āĻ­āĻžāώāĻžāϰ āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻšāϞ⧇, āϤāĻž āϕ⧇āĻŦāϞ Linux āĻāχ āϰāĻžāύ āĻ•āϰāĻŦ⧇āĨ¤ + +### āĻ•āĻžāϜ - Application settings āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻž + +āϝāĻ–āύ āφāĻŽāϰāĻž āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āϗ⧁āϞ⧋ āϤ⧈āϰ⧀ āĻ•āϰāĻŋ, āϤāĻ–āύ `local.settings.json` āĻĢāĻžāχāϞ⧇ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ā§Ÿā§‡āϰ āϜāĻ¨ā§āϝ āĻ•āĻŋāϛ⧁ āϏ⧇āϟāĻŋāĻ‚āϏ āĻ¸ā§āĻŸā§‹āϰ āĻšā§ŸāĨ¤ āĻāχ āϏ⧇āϟāĻŋāĻ‚āϏ āϗ⧁āϞ⧋ Azure āĻ āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āĻāϰ āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϏ⧇āϟāĻŋāĻ‚ āĻāĻ“ āφāϏāϤ⧇ āĻšāĻŦ⧇ āϝāĻžāϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄ āϤāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ + +> 🎓 `local.settings.json` āĻĢāĻžāχāϞāϟāĻŋ āϕ⧇āĻŦāϞ āϞ⧋āĻ•āĻžāϞ āĻĄā§‡āĻ­āϞāĻžāĻĒāĻŽā§‡āĻ¨ā§āϟ āϏ⧇āϟāĻŋāĻ‚āϏ āĻāϰ āϜāĻ¨ā§āϝ āϝāĻž āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ⧇āĻ“ āĻšā§‡āĻ• āĻ•āϰāĻž āĻšā§ŸāύāĻžāĨ¤ āϝāĻ–āύ āφāĻŽāϰāĻž āĻĒ⧁āϰ⧋ āĻ•āĻžāĻ°ā§āϝāĻ•ā§āϰāĻŽ āĻ•ā§āϞāĻžāωāĻĄā§‡ āφāύāĻŋ, āϤāĻ–āύ āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϏ⧇āϟāĻŋāĻ‚āϏāχ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§ŸāĨ¤ āĻāϗ⧁āϞ⧋ āϕ⧀/āĻ­ā§āϝāĻžāϞ⧁ āĻĒā§‡ā§ŸāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻĨāĻžāϕ⧇ āϝāĻž āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āĻĨ⧇āϕ⧇āĻ“ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāĻž āϝāĻžā§Ÿ āϕ⧋āĻĄā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ…āĻĨāĻŦāĻž āϰāĻžāύāϟāĻžāχāĻŽā§‡ āϝāĻ–āύ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž āĻšā§Ÿ,āϤāĻ–āύāĨ¤ + +1. āύāĻŋāĻšā§‡āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāĻžāύ āĻ•āϰ⧇, `IOT_HUB_CONNECTION_STRING` āϏ⧇āϟāĻŋāĻ‚āϏāϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āĻāϰ āĻāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϏ⧇āϟāĻŋāĻ‚ āĻ āĻ āĻŋāĻ• āĻ•āϰāĻŋ: + + ```sh + az functionapp config appsettings set --resource-group soil-moisture-sensor \ + --name \ + --settings "IOT_HUB_CONNECTION_STRING=" + ``` + + āĻāĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ `` āĻāϰ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āύāĻžāĻŽāϟāĻŋ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ + + āφāϰ `` āĻāϰ āĻ¸ā§āĻĨāϞāĻžāĻ­āĻŋāώāĻŋāĻ•ā§āϤ āĻšāĻŦ⧇ `IOT_HUB_CONNECTION_STRING` āĻāϰ āĻ­ā§āϝāĻžāϞ⧁ āϝāĻž āφāĻŽāϰāĻž `local.settings.json` āĻĢāĻžāχāϞ āĻĨ⧇āϕ⧇ āĻĒāĻžāĻŦāĨ¤ + +1. āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒāϟāĻŋ āĻĒ⧁āύāϰāĻžā§Ÿ āĻ•āϰāĻŋ, āϤāĻŦ⧇ `REGISTRY_MANAGER_CONNECTION_STRING` āĻ­ā§āϝāĻžāϞ⧁ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ `local.settings.json` āĻĢāĻžāχāϞ⧇āϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇āĨ¤ + +āφāĻŽāϰāĻž āϝāĻ–āύ āĻāχ āφāĻĻ⧇āĻļāϗ⧁āϞāĻŋ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻŋ, āϤāĻ–āύ āĻāϗ⧁āϞ⧋ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻŽāĻ¸ā§āϤ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϏ⧇āϟāĻŋāĻ‚āϏ⧇āϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āφāωāϟāĻĒ⧁āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰ⧇āĨ¤ āφāĻŽāĻžāĻĻ⧇āϰ āĻŽāĻžāύāϗ⧁āϞāĻŋ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϏ⧇āϟ āĻ•āϰāĻž āφāϛ⧇ āĻ•āĻŋāύāĻž āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āφāĻŽāϰāĻž āĻāχ āϏ⧁āĻŦāĻŋāϧāĻž āĻ•āĻžāĻœā§‡ āϞāĻžāĻ—āĻžāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ + +> 💁 āφāĻŽāϰāĻž `AzureWebJobsStorage` āϤ⧇ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āĻ­ā§āϝāĻžāϞ⧁ āϏ⧇āϟ āĻ•āϰāĻž āĻĻ⧇āĻ–āĻŦā§‹āĨ¤ āĻāĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ `local.settings.json` āĻĢāĻžāχāϞ⧇ āϝāĻž āϞ⧋āĻ•āĻžāϞ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āχāĻŽā§āϝ⧁āϞ⧇āϟāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āϏ⧇āϟ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤ āφāĻŽāϰāĻž āϝāĻ–āύ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰ⧀ āĻ•āϰāĻŋ, āϤāĻ–āύ āĻāχ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻāĻ•āĻžāωāĻ¨ā§āϟāϟāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒāĻžāϏ āĻ•āϰāĻž āĻšā§Ÿ āϝāĻž āĻ…āĻŸā§‹āĻŽā§‡āϟāĻŋāĻ•ā§āϝāĻžāϞāĻŋ āϏ⧇āϟāĻŋāĻ‚āϏ āĻ āϚāϞ⧇ āφāϏ⧇āĨ¤ + +### āĻ•āĻžāϜ - āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒ āĻĄā§‡āĻĒā§āϞ⧟ āĻ•āϰāĻž + +āĻāĻ–āύ āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāĻžāĻĻ⧇āϰ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒ āϰ⧇āĻĄāĻŋ āĻ°ā§Ÿā§‡āϛ⧇, āφāĻŽāϰāĻž āϤāĻž āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻĄā§‡āĻĒā§āϞ⧟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ + +1. VS Code terminal āĻ āύ⧀āĻšā§‡āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāĻžāύ āĻ•āϰ⧇ Functions App āĻĒāĻžāĻŦāϞāĻŋāĻļ āĻ•āϰāĻŋ: + + ```sh + func azure functionapp publish + ``` + + āĻāĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ `` āĻāϰ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āύāĻžāĻŽāϟāĻŋ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ + +āϕ⧋āĻĄāϟāĻŋ āĻĒā§āϝāĻžāϕ⧇āϜ āφāĻ•āĻžāϰ⧇ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒ⧇ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž āĻšāĻŦ⧇, āϝ⧇āĻ–āĻžāύ⧇ āĻāϟāĻŋ āĻĄā§‡āĻĒā§āϞ⧟ āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻļ⧁āϰ⧁ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āĻĒā§āϰāϚ⧁āϰ āĻ•āύāϏ⧋āϞ āφāωāϟāĻĒ⧁āϟ āĻĨāĻžāĻ•āĻŦ⧇, āĻāϟāĻŋāϰ āĻĄā§‡āĻĒā§āϞ⧟āĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āύāĻŋāĻļā§āϚāϝāĻŧāϤāĻž āĻāĻŦāĻ‚ āĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϞāĻžāĻĒāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāĻŦ⧇āĨ¤ āϤāĻŦ⧇ āĻāĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϤāĻžāϞāĻŋāĻ•āĻžāϝāĻŧ āϕ⧇āĻŦāϞ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ + +```output +Deployment successful. +Remote build succeeded! +Syncing triggers... +Functions in soil-moisture-sensor: + iot-hub-trigger - [eventHubTrigger] +``` + +āφāĻŽāĻžāĻĻ⧇āϰ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϟāĻŋ āϚāϞāϛ⧇ āĻ•āĻŋāύāĻž āϤāĻž āφāϗ⧇ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻŋ āĨ¤ āϏ⧇āĻ¨ā§āϏāϰāϟāĻŋāϕ⧇ āĻŦāĻžāϰāĻŦāĻžāϰ āĻŽāĻžāϟāĻŋāϰ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧇ āĻāĻŦāĻ‚ āĻŦāĻžāχāϰ⧇ āϏāϰāĻŋāϝāĻŧ⧇ āφāĻ°ā§āĻĻā§āϰāϤāĻžāϰ āĻ¸ā§āϤāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻŋāĨ¤ āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āφāĻŽāϰāĻž āϰāĻŋāϞ⧇āϟāĻŋ āϚāĻžāϞ⧁ āĻāĻŦāĻ‚ āĻŦāĻ¨ā§āϧ āĻšāϤ⧇ āĻĻ⧇āĻ–āĻŦā§‹āĨ¤ + +--- + +## 🚀 āĻšā§āϝāĻžāϞ⧇āĻžā§āϜ + +āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āĻĒāĻžāϠ⧇, āϰāĻŋāϞ⧇ āϚāĻžāϞ⧁ āĻĨāĻžāĻ•āĻž āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻŦāĻ¨ā§āϧ āĻšāĻ“āϝāĻŧāĻžāϰ āĻĒāϰ⧇ āĻ…āĻ˛ā§āĻĒ āϏāĻŽāϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ - āφāĻŽāϰāĻž āĻāĻŽāĻ•āĻŋāωāϟāĻŋāϟāĻŋ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇ āφāύāϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰ⧇ āϰāĻŋāϞ⧇ āĻāϰ āϏāĻŽāϝāĻŧ āĻŽā§āϝāĻžāύ⧇āϜ āĻ•āϰ⧇āĻ›āĻŋāϞāĻžāĻŽ āĨ¤ āφāĻŽāϰāĻž āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āĻāĻ–āĻžāύ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ āύāĻž - āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āφāĻŽāϰāĻž āφāύ-āϏāĻžāĻŦāĻ¸ā§āĻ•ā§āϰāĻžāχāĻŦ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ āύāĻžāĨ¤ + +āφāĻŽāĻžāĻĻ⧇āϰ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒ⧇ āĻāχ āϏāĻŽāĻ¸ā§āϝāĻž āĻŽā§‹āĻ•āĻžāĻŦ⧇āϞāĻž āĻ•āϰāϤ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāϝāĻŧ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰāĻŋāĨ¤ + +## āϞ⧇āĻ•āϚāĻžāϰ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϕ⧁āχāϜ + +[āϞ⧇āĻ•āϚāĻžāϰ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϕ⧁āχāϜ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/18) + +## āϰāĻŋāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ¸ā§āĻŦ-āĻ…āĻ§ā§āϝ⧟āύ + +* āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻŋāĻ‚ āύāĻŋā§Ÿā§‡ [Serverless Computing page on Wikipedia](https://wikipedia.org/wiki/Serverless_computing) āĻĨ⧇āϕ⧇ āφāϰ⧋ āϜāĻžāύāĻž āϝāĻžāĻŦ⧇āĨ¤ +* āωāĻĻāĻžāĻšāϰāĻŖāϏāĻš āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āύāĻŋā§Ÿā§‡ āφāϰ⧋ āϜāĻžāύāĻž āϝāĻžāĻŦ⧇ [Go serverless for your IoT needs Azure blog post](https://azure.microsoft.com/blog/go-serverless-for-your-iot-needs/?WT.mc_id=academic-17441-jabenn) āĻĨ⧇āϕ⧇āĨ¤ +* Azure Functions āύāĻŋā§Ÿā§‡ [Azure Functions YouTube channel](https://www.youtube.com/c/AzureFunctions) āĻĨ⧇āϕ⧇ āφāϰ⧋ āϜāĻžāύāĻž āϝāĻžāĻŦ⧇āĨ¤ + +## āĻāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āϟ + +[āĻŽā§āϝāĻžāύ⧁⧟āĻžāϞ āϰāĻŋāϞ⧇ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āϏāĻ‚āϝ⧋āϜāύ](assignment.bn.md) diff --git a/2-farm/lessons/5-migrate-application-to-the-cloud/translations/assignment.bn.md b/2-farm/lessons/5-migrate-application-to-the-cloud/translations/assignment.bn.md new file mode 100644 index 00000000..0697bf5a --- /dev/null +++ b/2-farm/lessons/5-migrate-application-to-the-cloud/translations/assignment.bn.md @@ -0,0 +1,57 @@ +# āĻŽā§āϝāĻžāύ⧁⧟āĻžāϞ āϰāĻŋāϞ⧇ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āϏāĻ‚āϝ⧋āϜāύ + +## āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞāĻŋ + +āĻāχāϚāϟāĻŋāϟāĻŋāĻĒāĻŋ āĻ…āύ⧁āϰ⧋āϧ āϏāĻš āĻ…āύ⧇āĻ•āϗ⧁āϞāĻŋ āĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžā§Ÿā§‡ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϞ⧇āϏ āϕ⧋āĻĄāϕ⧇ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤ āϰāĻŋāϞ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāϪ⧇ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āĻ“āĻ­āĻžāϰāϰāĻžāχāĻĄ āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āφāĻŽāϰāĻž HTTP āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ, āĻ•āĻžāωāϕ⧇ āĻ“āϝāĻŧ⧇āĻŦ āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āϟ āĻĻā§āĻŦāĻžāϰāĻž āϰāĻŋāϞ⧇ āϚāĻžāϞ⧁ āĻŦāĻž āĻŦāĻ¨ā§āϧ āĻ•āϰāĻžāϰ āϏ⧁āϝ⧋āĻ— āĻĻāĻŋāϤ⧇āĨ¤ + +āĻāχ āĻāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ, āϰāĻŋāϞ⧇ āϚāĻžāϞ⧁ āĻāĻŦāĻ‚ āĻŦāĻ¨ā§āϧ āĻ•āϰāϤ⧇ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒāϟāĻŋāϤ⧇ āĻĻ⧁āϟāĻŋ āĻāχāϚāϟāĻŋāϟāĻŋāĻĒāĻŋ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒā§āϰ⧇āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āφāĻŽāϰāĻž āĻāχ āĻĒāĻžāĻ āϟāĻŋ āĻĨ⧇āϕ⧇ āϝāĻž āĻļāĻŋāϖ⧇āĻ›āĻŋ āϤāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āχ āĻāϟāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ + +āĻ•āĻŋāϛ⧁ āĻšāĻŋāĻ¨ā§āϟāϏ: + +* āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϏāĻš āφāĻŽāĻžāĻĻ⧇āϰ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒāϗ⧁āϞāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ HTTP āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ: + + ```sh + func new --name --template "HTTP trigger" + ``` + + āĻāĻ–āĻžāύ⧇ `` āĻāϰ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻāχāϚāϟāĻŋāϟāĻŋāĻĒāĻŋ āĻŸā§āϰāĻŋāĻ—āĻžāϰ⧇āϰ āύāĻžāĻŽ āĻĻāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ `relay_on` āĻāĻŦāĻ‚ `relay_off` āĻāϰ āĻŽāϤ⧋ āύāĻžāĻŽ āĻĻā§‡ā§ŸāĻž āϝāĻžā§ŸāĨ¤ + +* HTTP trigger āĻ āĻāĻ•āϏ⧇āϏ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āĻĻā§‡ā§ŸāĻž āϝāĻžā§ŸāĨ¤ āĻāϗ⧁āϞ⧋ āϰāĻžāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ function-specific API key āĻĻāϰāĻ•āĻžāϰ āϝāĻž URL āĻāϰ āϏāĻžāĻĨ⧇ āĻĒāĻžāϏ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϤāĻŦ⧇ āĻāχ āĻāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻāχ āϰ⧇āĻ¸ā§āĻŸā§āϰāĻŋāĻ•āĻļāύ āϰāĻŋāĻŽā§āĻ­ āĻ•āϰ⧇ āĻĻā§‡ā§ŸāĻž āϝāĻžā§Ÿ āϝāĻžāϤ⧇ āϝ⧇ āϕ⧇āωāχ āĻāχ āĻĢāĻžāĻ‚āĻļāύ āϰāĻžāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāϜāĻ¨ā§āϝ `authLevel` āϏ⧇āϟāĻŋāĻ‚āϏāϟāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ `function.json` āĻĢāĻžāχāϞ āĻĨ⧇āϕ⧇ : + + ```json + "authLevel": "anonymous" + ``` + + > 💁 āĻāĻ•āϏ⧇āϏ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āύāĻŋā§Ÿā§‡ āφāϰ⧋ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ [Function access keys documentation](https://docs.microsoft.com/azure/azure-functions/functions-bindings-http-webhook-trigger?WT.mc_id=academic-17441-jabenn#authorization-keys) āĻĨ⧇āϕ⧇ āϜāĻžāύāĻž āϝāĻžāĻŦ⧇āĨ¤ + +* HTTP āĻŸā§āϰāĻŋāĻ—āĻžāϰāϗ⧁āϞ⧋ āĻŦāĻžāχ āĻĄāĻŋāĻĢāĻ˛ā§āϟ GET āĻāĻŦāĻ‚ POST āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āϟāϗ⧁āϞ⧋ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇āĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻ“ā§Ÿā§‡āĻŦ āĻŦā§āϰāĻžāωāϜāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻžāχ āĻ•āĻžāϜ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ - GET āϰāĻŋāĻ•ā§ā§Ÿā§‡āĻ¸ā§āϟ āĻĻāĻŋā§Ÿā§‡āĨ¤ + + āϞ⧋āĻ•āĻžāϞāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āϰāĻžāύ āĻ•āϰāϞ⧇, āĻŸā§āϰāĻŋāĻ—āĻžāϰ āχāωāφāϰāĻāϞ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžāĻŦ⧇: + + ```output + Functions: + + relay_off: [GET,POST] http://localhost:7071/api/relay_off + + relay_on: [GET,POST] http://localhost:7071/api/relay_on + + iot-hub-trigger: eventHubTrigger + ``` + + āχāωāφāϰāĻāϞ āϟāĻŋ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰ⧇ `return` āĻ āĻĒā§āϰ⧇āϏ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻ…āĻĨāĻŦāĻž VS Code āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āϞāĻŋāĻ‚āĻ•āϟāĻŋ `Ctrl+click` (`Cmd+click` macOS āĻāϰ āϜāĻ¨ā§āϝ) āϏāĻŋāϞ⧇āĻ•ā§āϟ āĻ•āϰāϞ⧇ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āϤāĻž āĻ“āĻĒ⧇āύ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϰāĻžāύ āĻ•āϰāĻŦ⧇āĨ¤ + + > 💁 āĻ–ā§‡ā§ŸāĻžāϞ āĻ•āϰāĻž āĻĻāϰāĻ•āĻžāϰ āϝ⧇ URL-āϟāĻŋ āϤ⧇ `/api` āĻ°ā§Ÿā§‡āϛ⧇ - HTTP āĻŸā§āϰāĻŋāĻ—āĻžāϰāϗ⧁āϞ⧋ āĻŦāĻžāχ āĻĄāĻŋāĻĢāĻ˛ā§āϟ `api` āϏāĻžāĻŦāĻĄā§‹āĻŽā§‡āχāύ⧇ āĻĨāĻžāϕ⧇āĨ¤ + +* āĻĢāĻžāĻ‚āĻļāύ āĻ…ā§āϝāĻžāĻĒ āĻĄā§‡āĻĒā§āϞ⧟ āĻ•āϰāϞ⧇, āϤāĻ–āύ āĻāχāϚāϟāĻŋāϟāĻŋāĻĒāĻŋ āĻŸā§āϰāĻŋāĻ—āĻžāϰ URL āĻšāĻŦ⧇: + + `https://.azurewebsites.net/api/` + + āϝ⧇āĻ–āĻžāύ⧇ `` āĻšāϞ⧋ āφāĻŽāĻžāĻĻ⧇āϰ āĻĢāĻžāĻ‚āĻļāύ āĻāĻĒ āĻāϰ āύāĻžāĻŽ āĻāĻŦāĻ‚ `` āĻšāϞ⧋ āĻŸā§āϰāĻŋāĻ—āĻžāϰ⧇āϰ āύāĻžāĻŽāĨ¤ + +## āĻāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āϟ āĻŽā§‚āĻ˛ā§āϝāĻžā§Ÿāύ āĻŽāĻžāύāĻĻāĻ¨ā§āĻĄ + +| āĻ•ā§āϰāĻžāχāĻŸā§‡āϰāĻŋ⧟āĻž | āĻĻ⧃āĻˇā§āϟāĻžāĻ¨ā§āϤāĻŽā§‚āϞāĻ• (āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ) | āĻĒāĻ°ā§āϝāĻžāĻĒā§āϤ (āĻŽāĻžāĻāĻžāϰāĻŋ) | āωāĻ¨ā§āύāϤāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ (āύāĻŋāĻŽā§āύāĻŽāĻžāύ) | +| --------- | ------------------ | ------------- | --------------------- | +| HTTP āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϤ⧈āϰ⧀ | āϏāĻ āĻŋāĻ• āύāĻžāĻŽāĻ•āϰāϪ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ ⧍āϟāĻŋ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϰāĻŋāϞ⧇ āĻ…āύ/āĻ…āĻĢ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇ | āϏāĻ āĻŋāĻ• āύāĻžāĻŽāĻ•āϰāϪ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ ā§§āϟāĻŋ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āϛ⧇ | āϕ⧋āύ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āϤ⧈āϰ⧀ āĻ•āϰāϤ⧇ āϏāĻŽāĻ°ā§āĻĨ āĻšā§ŸāύāĻŋ | +| āĻāχāϚāϟāĻŋāϟāĻŋāĻĒāĻŋ āĻŸā§āϰāĻŋāĻ—āĻžāϰāϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇ āϰāĻŋāϞ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāĻž | āωāĻ­āϝāĻŧ āĻŸā§āϰāĻŋāĻ—āĻžāϰāϕ⧇ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āϝāĻĨā§‹āĻĒāϝ⧁āĻ•ā§āϤāĻ­āĻžāĻŦ⧇ āϰāĻŋāϞ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ| āϕ⧇āĻŦāϞ ā§§āϟāĻŋ āĻŸā§āϰāĻŋāĻ—āĻžāϰāϕ⧇ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āϝāĻĨā§‹āĻĒāϝ⧁āĻ•ā§āϤāĻ­āĻžāĻŦ⧇ āϰāĻŋāϞ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ | āĻŸā§āϰāĻŋāĻ—āĻžāϰāϕ⧇ āφāχāĻ“āϟāĻŋ āĻšāĻžāĻŦ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āϏāĻŽāĻ°ā§āĻĨ āĻšā§ŸāύāĻŋ | +{"mode":"full","isActive":false} diff --git a/README.md b/README.md index 6a32d212..84e45fd3 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,10 @@ [![GitHub forks](https://img.shields.io/github/forks/microsoft/IoT-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/IoT-For-Beginners/network/) [![GitHub stars](https://img.shields.io/github/stars/microsoft/IoT-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/IoT-For-Beginners/stargazers/) +[![Bengali](https://img.shields.io/badge/-Bengali-blue)](translations/README.bn.md) +[![Chinese](https://img.shields.io/badge/-Chinese-yellow)](translations/README.zh-cn.md) +[![Turkish](https://img.shields.io/badge/-Turkish-darkgreen)](translations/README.tr.md) + # IoT for Beginners - A Curriculum Azure Cloud Advocates at Microsoft are pleased to offer a 12-week, 24-lesson curriculum all about IoT basics. Each lesson includes pre- and post-lesson quizzes, written instructions to complete the lesson, a solution, an assignment and more. Our project-based pedagogy allows you to learn while building, a proven way for new skills to 'stick'. diff --git a/TRANSLATIONS.md b/TRANSLATIONS.md index c4420e74..2137b6ea 100644 --- a/TRANSLATIONS.md +++ b/TRANSLATIONS.md @@ -8,6 +8,11 @@ There are [**translations**](https://github.com/microsoft/IoT-For-Beginners/tree Translated lessons should follow this naming convention: +When translating the initial Readme, link the other translations to your translated readme and link yours to the main English Readme by using Shields as shown: + +```markdown +[![Bengali](https://img.shields.io/badge/-Bengali-blue)](translations/README.bn.md) +``` **README._[language]_.md** where _[language]_ is a two letter language abbreviation following the ISO 639-1 standard (e.g. `README.es.md` for Spanish and `README.nl.md` for Dutch). diff --git a/translations/README.bn.md b/translations/README.bn.md index d15911b9..e4da16a1 100644 --- a/translations/README.bn.md +++ b/translations/README.bn.md @@ -6,7 +6,11 @@ [![GitHub watchers](https://img.shields.io/github/watchers/microsoft/IoT-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/IoT-For-Beginners/watchers/) [![GitHub forks](https://img.shields.io/github/forks/microsoft/IoT-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/IoT-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/IoT-For-Beginners.svg?style=social&label=Sta)](https://GitHub.com/microsoft/IoT-For-Beginners/stargazers/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/IoT-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/IoT-For-Beginners/stargazers/) + +[![English](https://img.shields.io/badge/-English-red)](../README.md) +[![Chinese](https://img.shields.io/badge/-Chinese-yellow)](README.zh-cn.md) +[![Turkish](https://img.shields.io/badge/-Turkish-darkgreen)](README.tr.md) # āĻŦāĻŋāĻ—āĻŋāύāĻžāϰāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āφāχāĻ“āϟāĻŋ - āĻāĻ•āϟāĻŋ āϏ⧁āĻŦāĻŋāĻ¨ā§āϝāĻ¸ā§āϤ āĻĒāĻžāĻ ā§āϝāĻ•ā§āϰāĻŽ @@ -22,11 +26,17 @@ **āϧāĻ¨ā§āϝāĻŦāĻžāĻĻ āϜāĻžāύāĻžāϤ⧇ āϚāĻžāχ āφāĻŽāĻžāĻĻ⧇āϰ āϏ⧇āϏāĻ•āϞ [Microsoft Learn Student Ambassadors](https://studentambassadors.microsoft.com?WT.mc_id=academic-17441-jabenn)āĻĻ⧇āϰ, āϝāĻžāϰāĻž āĻāχ āĻ•āĻžāϰāĻŋāĻ•ā§āϝ⧁āϞāĻžāĻŽāϟāĻŋ āϰāĻŋāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ…āύ⧁āĻŦāĻžāĻĻ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āϛ⧇ - [Aditya Garg](https://github.com/AdityaGarg00),[Anurag Sharma](https://github.com/Anurag-0-1-A), [Arpita Das](https://github.com/Arpiiitaaa), [Aryan Jain](https://www.linkedin.com/in/aryan-jain-47a4a1145/), [Bhavesh Suneja](https://github.com/EliteWarrior315),[Faith Hunja](https://faithhunja.github.io/), [Lateefah Bello](https://www.linkedin.com/in/lateefah-bello/), [Manvi Jha](https://github.com/Severus-Matthew), [Mireille Tan](https://www.linkedin.com/in/mireille-tan-a4834819a/), [Mohammad Iftekher (Iftu) Ebne Jalal](https://github.com/Iftu119), [Priyanshu Srivastav](https://www.linkedin.com/in/priyanshu-srivastav-b067241ba), [Thanmai Gowducheruvu](https://github.com/innovation-platform), āĻāĻŦāĻ‚ [Zina Kamel](https://www.linkedin.com/in/zina-kamel/).** +āĻĒ⧁āϰ⧋ āĻŸā§€āĻŽā§‡āϰ āϏāĻžāĻĨ⧇ āĻĒāϰāĻŋāϚāĻŋāϤ āĻšāĻ“ā§ŸāĻž āϝāĻžāĻ• ! + +[![Promo video](../images/iot-for-beginners.png)](https://youtu.be/-wippUJRi5k) + +> đŸŽĨ āωāĻĒāϰ⧇āϰ āĻ›āĻŦāĻŋāϤ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāϞ⧇āχ āĻāχ āĻ•āĻžāϰāĻŋāĻ•ā§āϝ⧁āϞāĻžāĻŽā§‡ āϝāĻžāϰāĻž āĻ•āĻžāϜ āĻ•āϰ⧇āϛ⧇āύ, āϤāĻžāĻĻ⧇āϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϜāĻžāύāĻž āϝāĻžāĻŦ⧇āĨ¤ + > **āĻļāĻŋāĻ•ā§āώāĻ•āĻŦ⧃āĻ¨ā§āĻĻ** , āφāĻĒāύāĻžāϰāĻž āϝ⧇āύ āĻŦ⧇āĻļ āϏāĻšāĻœā§‡āχ āĻāχ āĻ•āĻžāϰāĻŋāϕ⧁āϞāĻžāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϤāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰ āĻāĻ•āϟāĻŋ [āĻ—āĻžāχāĻĄāϞāĻžāχāύ](for-teachers.md) āϤ⧈āϰ⧀ āĻ•āϰ⧇āĻ›āĻŋ āϝāĻžāϤ⧇ āφāĻĒāύāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āϏāĻ•āϞ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āĻ°ā§Ÿā§‡āϛ⧇āĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āύāĻŋāĻœā§‡āχ āύāĻŋāĻœā§‡āϰ āϞ⧇āϏāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϚāĻžāύ, āϤāĻŦ⧇ āϤāĻžāϰ āϜāĻ¨ā§āϝāĻ“ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ [āϞ⧇āϏāύ āĻŸā§‡āĻŽā§āĻĒāϞ⧇āϟ](lesson-template/README.md) āϰ⧇āϖ⧇āĻ›āĻŋāĨ¤ > **āĻļāĻŋāĻ•ā§āώāĻžāĻ°ā§āĻĨā§€āϰāĻž**, āĻāχ āϕ⧋āĻ°ā§āϏāϟāĻŋ āύāĻŋāĻœā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāχāϞ⧇, āĻĒ⧁āϰ⧋ āϰ⧇āĻĒā§‹āϏāĻŋāϟāϰāĻŋ 'fork' āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϞ⧇āĻ•āϚāĻžāϰ-āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϕ⧁āχāϜ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϤāĻžāϰāĻĒāϰ⧇ āϞ⧇āĻ•āϚāĻžāϰāϟāĻŋ āĻĒā§œā§‡ āĻāĻŦāĻ‚ āĻŦāĻžāĻ•āĻŋ āĻ•āĻžāϜāϗ⧁āϞ⧋ āĻŦ⧁āĻā§‡, āύāĻŋāĻœā§‡āχ āĻ…āύ⧁āĻļā§€āϞāύāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϏāĻŽāĻžāϧāĻžāύ āϕ⧋āĻĄāϗ⧁āϞ⧋ āĻ•āĻĒāĻŋ āύāĻž āĻ•āϰ⧇, āĻŦāϰāĻ‚ āϞ⧇āϏāύāϗ⧁āϞāĻŋ āĻŦā§‹āĻāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟāϗ⧁āϞāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϤāĻŦ⧇ āĻšā§āϝāĻžāρ, āϏāĻ˛ā§āϝ⧁āĻļāύ āϕ⧋āĻĄāϗ⧁āϞ⧋ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϞ⧇āϏāύ⧇āϰ āϏāĻŽāĻžāϧāĻžāύ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžāĻŦ⧇āĨ¤ āφāϰ⧇āĻ•āϟāĻŋ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻšāϞ⧋ āĻŦāĻ¨ā§āϧ⧁āĻĻ⧇āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻ¸ā§āϟāĻžāĻĄāĻŋ āĻ—ā§āϰ⧁āĻĒ āĻ—āĻ āύ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻāĻ•āϏāĻžāĻĨ⧇ āϞ⧇āϏāύāϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ āĻĻāĻŋāϝāĻŧ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāĨ¤ āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ āĻļ⧇āĻ–āĻžāϰ āϜāĻ¨ā§āϝ, [Microsoft Learn](https://docs.microsoft.com/users/jimbobbennett/collections/ke2ehd351jopwr?WT.mc_id=academic-17441-jabenn) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāĻŦ⧇āĨ¤ -[![Promo video](../images/iot-for-beginners.png)](https://youtube.com/watch?v=bccEMm8gRuc "Promo video") +[![Promo video](https://img.youtube.com/vi/bccEMm8gRuc/0.jpg)](https://youtube.com/watch?v=bccEMm8gRuc "Promo video") > đŸŽĨ āωāĻĒāϰ⧇āϰ āĻ›āĻŦāĻŋāϤ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāϞ⧇āχ āĻāχ āĻĒ⧁āϰ⧋ āĻ•āĻžāϰāĻŋāĻ•ā§āϝ⧁āϞāĻžāĻŽāϟāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϜāĻžāύāĻž āϝāĻžāĻŦ⧇āĨ¤ @@ -65,15 +75,15 @@ | | āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ | āĻ•āύāϏ⧇āĻĒā§āϟ | āĻļāĻŋāĻ–āύāĻĢāϞ | āϞ⧇āϏāύ/āĻĒāĻžāĻ ā§āϝ | | :-: | :----------: | :-------------: | ------------------- | :-----------: | -| 01 | [IoT āϝāĻžāĻ¤ā§āϰāĻžāϰ āϏ⧂āϚāύāĻž](./1-getting-started) | IoT āĻĒāϰāĻŋāϚāĻŋāϤāĻŋ | āĻĒā§āϰāĻĨāĻŽ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āϏ⧇āϟāφāĻĒ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧāχ āφāχāĻ“āϟāĻŋ āĻāϰ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āύ⧀āϤāĻŋāϗ⧁āϞāĻŋ āĻāĻŦāĻ‚ āφāχāĻ“āϟāĻŋ āϏāĻ˛ā§āϝ⧁āĻļāύ⧇āϰ āĻŦ⧇āϏāĻŋāĻ• āĻŦāĻŋāώ⧟āϗ⧁āϞ⧋ āϝ⧇āĻŽāύāσ āϏ⧇āĻ¨ā§āϏāϰ āĻāĻŦāĻ‚ āĻ•ā§āϞāĻžāωāĻĄ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āĻŦāĻŋāώ⧟āϗ⧁āϞ⧋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ | [IoT āĻĒāϰāĻŋāϚāĻŋāϤāĻŋ](./1-getting-started/lessons/1-introduction-to-iot/translations/README.bn.md) | -| 02 | [IoT āϝāĻžāĻ¤ā§āϰāĻžāϰ āϏ⧂āϚāύāĻž](./1-getting-started) | IoT āĻāϰ āφāϰ⧋ āĻ—āĻ­ā§€āϰ⧇| āφāχāĻ“āϟāĻŋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻŽāĻžāχāĻ•ā§āϰ⧋āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻžāϰ āĻāĻŦāĻ‚ āϏāĻŋāĻ™ā§āϗ⧇āϞ-āĻŦā§‹āĻ°ā§āĻĄ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ | [IoT āĻāϰ āφāϰ⧋ āĻ—āĻ­ā§€āϰ⧇](./1-getting-started/lessons/2-deeper-dive/translations/README.bn.md) | -| 03 | [IoT āϝāĻžāĻ¤ā§āϰāĻžāϰ āϏ⧂āϚāύāĻž](./1-getting-started) | āϏ⧇āĻ¨ā§āϏāϰ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻ•āĻšā§ā§Ÿā§‡āϟāϰ⧇āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āϜāĻ—āϤ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ—| 'āύāĻžāχāϟāϞāĻžāχāϟ' āĻĒā§āϰāĻœā§‡āĻ•ā§āϟāϟāĻŋ āĻ•āϰāĻžāϰ āϏāĻžāĻĨ⧇āχ āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ⧇ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āϜāĻ—āϤ āĻĨ⧇āϕ⧇ āĻĄā§‡āϟāĻž āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϏ⧇āĻ¨ā§āϏāϰ āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϜāĻžāύāĻžāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻ…ā§āϝāĻžāĻ•āĻšā§ā§Ÿā§‡āϟāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ | [āϏ⧇āĻ¨ā§āϏāϰ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻ•āĻšā§ā§Ÿā§‡āϟāϰ⧇āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āϜāĻ—āϤ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ—](./1-getting-started/lessons/3-sensors-and-actuators/translations/README.bn.md) | -| 04 | [IoT āϝāĻžāĻ¤ā§āϰāĻžāϰ āϏ⧂āϚāύāĻž](./1-getting-started) | āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϕ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž | āĻāĻŽāĻ•āĻŋāωāϟāĻŋāϟāĻŋ āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āύāĻžāχāϟāϞāĻžāχāϟāϟāĻŋ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧇ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞāĻŋ āĻĒā§āϰ⧇āϰāĻŖ āĻāĻŦāĻ‚ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϤ⧇ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϟāĻŋāϕ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϏ⧇āχ āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ | [āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϕ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤāĻ•āϰāĻŖ ](./1-getting-started/lessons/4-connect-internet/translations/README.bn.md) | -| 05 | [āĻĢāĻžāĻ°ā§āĻŽ](./2-farm) | āφāχāĻ“āϟāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āωāĻĻā§āĻ­āĻŋāĻĻ āĻŦ⧃āĻĻā§āϧāĻŋāϰ āĻĒā§‚āĻ°ā§āĻŦāĻžāĻ­āĻžāϏ | āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āĻĻā§āĻŦāĻžāϰāĻž āĻ—ā§ƒāĻšāĻŋāϤ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻžāϰ āĻĄā§‡āϟāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āωāĻĻā§āĻ­āĻŋāĻĻ āĻŦ⧃āĻĻā§āϧāĻŋāϰ āĻĒā§‚āĻ°ā§āĻŦāĻžāĻ­āĻžāϏ āĻĻ⧇āĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ āϤāĻž āĻļ⧇āĻ–āĻž | [āφāχāĻ“āϟāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āωāĻĻā§āĻ­āĻŋāĻĻ āĻŦ⧃āĻĻā§āϧāĻŋāϰ āĻĒā§‚āĻ°ā§āĻŦāĻžāĻ­āĻžāϏ](./2-farm/lessons/1-predict-plant-growth/translations/README.bn.md) | -| 06 | [āĻĢāĻžāĻ°ā§āĻŽ](./2-farm) | āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āύāĻŋāĻ°ā§āϪ⧟ | āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āϏāύāĻžāĻ•ā§āϤ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āĻāĻŦāĻ‚ āϤāĻž āĻ•āϰāϤ⧇ āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āϏ⧇āĻ¨ā§āϏāϰāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•ā§āϝāĻžāϞāĻŋāĻŦā§āϰ⧇āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āĻļ⧇āĻ–āĻž | [āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āύāĻŋāĻ°ā§āϪ⧟](./2-farm/lessons/2-detect-soil-moisture/translations/README.bn.md) | -| 07 | [āĻĢāĻžāĻ°ā§āĻŽ](./2-farm) | āĻ¸ā§āĻŦ⧟āĻ‚āĻ•ā§āϰāĻŋ⧟ āϏ⧇āϚāĻ•āĻžāĻ°ā§āϝ | āϰāĻŋāϞ⧇ āĻāĻŦāĻ‚ āĻāĻŽāĻ•āĻŋāωāϟāĻŋāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻāĻŦāĻ‚ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽā§Ÿā§‡ āϏ⧇āϚ āĻĻā§‡ā§ŸāĻž āϝāĻžā§Ÿ āϏ⧇ āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ | [āĻ¸ā§āĻŦ⧟āĻ‚āĻ•ā§āϰāĻŋ⧟ āϏ⧇āϚāĻ•āĻžāĻ°ā§āϝ](./2-farm/lessons/3-automated-plant-watering/translations/README.bn.md) | -| 08 | [āĻĢāĻžāĻ°ā§āĻŽ](./2-farm) | āωāĻĻā§āĻ­āĻŋāĻĻāϕ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž | āĻ•ā§āϞāĻžāωāĻĄ āĻāĻŦāĻ‚ āĻ•ā§āϞāĻžāωāĻĄ-āĻšā§‹āĻ¸ā§āϟ āĻ•āϰāĻž āφāχāĻ“āϟāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ āĻāĻŦāĻ‚ āϕ⧀āĻ­āĻžāĻŦ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āωāĻĻā§āĻ­āĻŋāĻĻāϟāĻŋāϕ⧇ āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻāĻŽāĻ•āĻŋāωāϟāĻŋāϟāĻŋ āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āĻļ⧇āĻ–āĻž | [āωāĻĻā§āĻ­āĻŋāĻĻāϕ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž](./2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/README.bn.md) | -| 09 | [āĻĢāĻžāĻ°ā§āĻŽ](./2-farm) | Migrate your application logic to the cloud | āĻ•ā§āϞāĻžāωāĻĄā§‡ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϞāϜāĻŋāĻ• āϞāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇ āϝāĻžāϤ⧇ āϤāĻž āφāχāĻ“āϟāĻŋ āĻŽā§āϝāĻžāϏ⧇āĻœā§‡āϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋ⧟āĻž āϜāĻžāύāĻžāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻž āĻļ⧇āĻ–āĻž| [Migrate your application logic to the cloud](./2-farm/lessons/5-migrate-application-to-the-cloud/README.md) | +| 01 | [IoT āϝāĻžāĻ¤ā§āϰāĻžāϰ āϏ⧂āϚāύāĻž](./1-getting-started) | IoT āĻĒāϰāĻŋāϚāĻŋāϤāĻŋ | āĻĒā§āϰāĻĨāĻŽ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āϏ⧇āϟāφāĻĒ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧāχ āφāχāĻ“āϟāĻŋ āĻāϰ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āύ⧀āϤāĻŋāϗ⧁āϞāĻŋ āĻāĻŦāĻ‚ āφāχāĻ“āϟāĻŋ āϏāĻ˛ā§āϝ⧁āĻļāύ⧇āϰ āĻŦ⧇āϏāĻŋāĻ• āĻŦāĻŋāώ⧟āϗ⧁āϞ⧋ āϝ⧇āĻŽāύāσ āϏ⧇āĻ¨ā§āϏāϰ āĻāĻŦāĻ‚ āĻ•ā§āϞāĻžāωāĻĄ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āĻŦāĻŋāώ⧟āϗ⧁āϞ⧋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ | [IoT āĻĒāϰāĻŋāϚāĻŋāϤāĻŋ](../1-getting-started/lessons/1-introduction-to-iot/translations/README.bn.md) | +| 02 | [IoT āϝāĻžāĻ¤ā§āϰāĻžāϰ āϏ⧂āϚāύāĻž](./1-getting-started) | IoT āĻāϰ āφāϰ⧋ āĻ—āĻ­ā§€āϰ⧇| āφāχāĻ“āϟāĻŋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻŽāĻžāχāĻ•ā§āϰ⧋āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻžāϰ āĻāĻŦāĻ‚ āϏāĻŋāĻ™ā§āϗ⧇āϞ-āĻŦā§‹āĻ°ā§āĻĄ āĻ•āĻŽā§āĻĒāĻŋāωāϟāĻžāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ | [IoT āĻāϰ āφāϰ⧋ āĻ—āĻ­ā§€āϰ⧇](../1-getting-started/lessons/2-deeper-dive/translations/README.bn.md) | +| 03 | [IoT āϝāĻžāĻ¤ā§āϰāĻžāϰ āϏ⧂āϚāύāĻž](./1-getting-started) | āϏ⧇āĻ¨ā§āϏāϰ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻ•āĻšā§ā§Ÿā§‡āϟāϰ⧇āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āϜāĻ—āϤ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ—| 'āύāĻžāχāϟāϞāĻžāχāϟ' āĻĒā§āϰāĻœā§‡āĻ•ā§āϟāϟāĻŋ āĻ•āϰāĻžāϰ āϏāĻžāĻĨ⧇āχ āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ⧇ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āϜāĻ—āϤ āĻĨ⧇āϕ⧇ āĻĄā§‡āϟāĻž āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϏ⧇āĻ¨ā§āϏāϰ āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϜāĻžāύāĻžāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻ…ā§āϝāĻžāĻ•āĻšā§ā§Ÿā§‡āϟāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ | [āϏ⧇āĻ¨ā§āϏāϰ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻ•āĻšā§ā§Ÿā§‡āϟāϰ⧇āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āϜāĻ—āϤ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ—](../1-getting-started/lessons/3-sensors-and-actuators/translations/README.bn.md) | +| 04 | [IoT āϝāĻžāĻ¤ā§āϰāĻžāϰ āϏ⧂āϚāύāĻž](./1-getting-started) | āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϕ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž | āĻāĻŽāĻ•āĻŋāωāϟāĻŋāϟāĻŋ āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āύāĻžāχāϟāϞāĻžāχāϟāϟāĻŋ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧇ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞāĻŋ āĻĒā§āϰ⧇āϰāĻŖ āĻāĻŦāĻ‚ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāϤ⧇ āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϟāĻŋāϕ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϏ⧇āχ āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ | [āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏāϕ⧇ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤāĻ•āϰāĻŖ ](../1-getting-started/lessons/4-connect-internet/translations/README.bn.md) | +| 05 | [āĻĢāĻžāĻ°ā§āĻŽ](./2-farm) | āφāχāĻ“āϟāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āωāĻĻā§āĻ­āĻŋāĻĻ āĻŦ⧃āĻĻā§āϧāĻŋāϰ āĻĒā§‚āĻ°ā§āĻŦāĻžāĻ­āĻžāϏ | āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ āĻĻā§āĻŦāĻžāϰāĻž āĻ—ā§ƒāĻšāĻŋāϤ āϤāĻžāĻĒāĻŽāĻžāĻ¤ā§āϰāĻžāϰ āĻĄā§‡āϟāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āωāĻĻā§āĻ­āĻŋāĻĻ āĻŦ⧃āĻĻā§āϧāĻŋāϰ āĻĒā§‚āĻ°ā§āĻŦāĻžāĻ­āĻžāϏ āĻĻ⧇āĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ āϤāĻž āĻļ⧇āĻ–āĻž | [āφāχāĻ“āϟāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āωāĻĻā§āĻ­āĻŋāĻĻ āĻŦ⧃āĻĻā§āϧāĻŋāϰ āĻĒā§‚āĻ°ā§āĻŦāĻžāĻ­āĻžāϏ](../2-farm/lessons/1-predict-plant-growth/translations/README.bn.md) | +| 06 | [āĻĢāĻžāĻ°ā§āĻŽ](./2-farm) | āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āύāĻŋāĻ°ā§āϪ⧟ | āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āϏāύāĻžāĻ•ā§āϤ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āĻāĻŦāĻ‚ āϤāĻž āĻ•āϰāϤ⧇ āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āϏ⧇āĻ¨ā§āϏāϰāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•ā§āϝāĻžāϞāĻŋāĻŦā§āϰ⧇āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āĻļ⧇āĻ–āĻž | [āĻŽāĻžāϟāĻŋāϰ āφāĻ°ā§āĻĻā§āϰāϤāĻž āύāĻŋāĻ°ā§āϪ⧟](../2-farm/lessons/2-detect-soil-moisture/translations/README.bn.md) | +| 07 | [āĻĢāĻžāĻ°ā§āĻŽ](./2-farm) | āĻ¸ā§āĻŦ⧟āĻ‚āĻ•ā§āϰāĻŋ⧟ āϏ⧇āϚāĻ•āĻžāĻ°ā§āϝ | āϰāĻŋāϞ⧇ āĻāĻŦāĻ‚ āĻāĻŽāĻ•āĻŋāωāϟāĻŋāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻāĻŦāĻ‚ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽā§Ÿā§‡ āϏ⧇āϚ āĻĻā§‡ā§ŸāĻž āϝāĻžā§Ÿ āϏ⧇ āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ | [āĻ¸ā§āĻŦ⧟āĻ‚āĻ•ā§āϰāĻŋ⧟ āϏ⧇āϚāĻ•āĻžāĻ°ā§āϝ](../2-farm/lessons/3-automated-plant-watering/translations/README.bn.md) | +| 08 | [āĻĢāĻžāĻ°ā§āĻŽ](./2-farm) | āωāĻĻā§āĻ­āĻŋāĻĻāϕ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž | āĻ•ā§āϞāĻžāωāĻĄ āĻāĻŦāĻ‚ āĻ•ā§āϞāĻžāωāĻĄ-āĻšā§‹āĻ¸ā§āϟ āĻ•āϰāĻž āφāχāĻ“āϟāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻœā§āĻžāĻžāύ āĻ…āĻ°ā§āϜāύ āĻāĻŦāĻ‚ āϕ⧀āĻ­āĻžāĻŦ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āωāĻĻā§āĻ­āĻŋāĻĻāϟāĻŋāϕ⧇ āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻāĻŽāĻ•āĻŋāωāϟāĻŋāϟāĻŋ āĻŦā§āϰ⧋āĻ•āĻžāϰ⧇āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āĻļ⧇āĻ–āĻž | [āωāĻĻā§āĻ­āĻŋāĻĻāϕ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻž](../2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/README.bn.md) | +| 09 | [āĻĢāĻžāĻ°ā§āĻŽ](./2-farm) | āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϞāϜāĻŋāĻ•āϕ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ | āĻ•ā§āϞāĻžāωāĻĄā§‡ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϞāϜāĻŋāĻ• āϞāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇ āϝāĻžāϤ⧇ āϤāĻž āφāχāĻ“āϟāĻŋ āĻŽā§āϝāĻžāϏ⧇āĻœā§‡āϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋ⧟āĻž āϜāĻžāύāĻžāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻž āĻļ⧇āĻ–āĻž| [āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϞāϜāĻŋāĻ•āϕ⧇ āĻ•ā§āϞāĻžāωāĻĄā§‡ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ](../2-farm/lessons/5-migrate-application-to-the-cloud/translations/README.bn.md) | | 10 | [āĻĢāĻžāĻ°ā§āĻŽ](./2-farm) | Keep your plant secure | āφāχāĻ“āϟāĻŋ āϤ⧇ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϜāĻžāύāĻž āĻāĻŦāĻ‚ Key āĻ“ Certificate āĻāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āωāĻĻā§āĻ­āĻŋāĻĻāϟāĻŋāϕ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏ⧁āϰāĻ•ā§āώāĻŋāϤ āϰāĻžāĻ–āĻž āϝāĻžāϝāĻŧ āϤāĻž āĻļ⧇āĻ–āĻž | [Keep your plant secure](./2-farm/lessons/6-keep-your-plant-secure/README.md) | | 11 | [āĻĒāϰāĻŋāĻŦāĻšāύ](./3-transport) | Location tracking | āφāχāĻ“āϟāĻŋ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āϜāĻŋāĻĒāĻŋāĻāϏ āϞ⧋āϕ⧇āĻļāύ āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻŋāĻ‚ āĻļ⧇āĻ–āĻž | [Location tracking](./3-transport/lessons/1-location-tracking/README.md) | | 12 | [āĻĒāϰāĻŋāĻŦāĻšāύ](./3-transport) | Store location data | āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϏāĻŽā§Ÿā§‡ āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ āĻŦāĻž āϚāĻŋāĻ¤ā§āϰāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻĄā§‡āϟāĻž āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ (Visualization) āĻāϰ āϜāĻ¨ā§āϝ āφāχāĻ“āϟāĻŋ āĻĄā§‡āϟāĻž āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻž āϝāĻžā§Ÿ āϤāĻž āϜāĻžāύāĻž | [Store location data](./3-transport/lessons/2-store-location-data/README.md) | diff --git a/translations/README.tr.md b/translations/README.tr.md index 0eb83e2c..0b66160d 100644 --- a/translations/README.tr.md +++ b/translations/README.tr.md @@ -8,6 +8,10 @@ [![GitHub forks](https://img.shields.io/github/forks/microsoft/IoT-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/IoT-For-Beginners/network/) [![GitHub stars](https://img.shields.io/github/stars/microsoft/IoT-For-Beginners.svg?style=social&label=Sta)](https://GitHub.com/microsoft/IoT-For-Beginners/stargazers/) +[![Bengali](https://img.shields.io/badge/-Bengali-blue)](README.bn.md) +[![English](https://img.shields.io/badge/-English-red)](../README.md) +[![Chinese](https://img.shields.io/badge/-Chinese-yellow)](README.zh-cn.md) + # Yeni Başlayanlar için IOT Microsoft'tan Azure Cloud Advocates size IOT temelleri hakkÄąnda 12 haftalÄąk 24 dersten oluşan programÄą zevkle sunar. Her ders Ãļn-quiz, dersi tamamlamanÄąz için talimatlar, bir çÃļzÃŧm, bir Ãļdev ve ders sonrasÄą quiz içerir. Proje tabanlÄą pedogojimiz Ãļğrenirken bir şeyler oluşturmanÄąza izin verecek. Bu, ispanlanmÄąÅŸtÄąr ki yeni becerileri adeta size "yapÄąÅŸtÄąracak". diff --git a/translations/README.zh-cn.md b/translations/README.zh-cn.md index 07bfefa2..063b3f1b 100644 --- a/translations/README.zh-cn.md +++ b/translations/README.zh-cn.md @@ -6,7 +6,11 @@ [![GitHub watchers](https://img.shields.io/github/watchers/microsoft/IoT-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/IoT-For-Beginners/watchers/) [![GitHub forks](https://img.shields.io/github/forks/microsoft/IoT-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/IoT-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/IoT-For-Beginners.svg?style=social&label=Sta)](https://GitHub.com/microsoft/IoT-For-Beginners/stargazers/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/IoT-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/IoT-For-Beginners/stargazers/) + +[![Bengali](https://img.shields.io/badge/-Bengali-blue)](README.bn.md) +[![English](https://img.shields.io/badge/-English-red)](../README.md) +[![Turkish](https://img.shields.io/badge/-Turkish-darkgreen)](README.tr.md) # į‰Šč”įŊ‘īŧˆIoT for Beginnersīŧ‰ – č¯žį¨‹ @@ -15,7 +19,7 @@ Microsoft įš„ Azure Cloud 大äŊŋ垈éĢ˜å…´æäž›å…ŗäēŽ IoT åŸēįĄ€ä¸€ä¸Ē12ä¸Ē星 čŋ™äē›éĄšį›Žå›Šæ‹ŦéŖŸį‰ŠäģŽå†œåœēåˆ°æĄŒå­įš„čŋ‡į¨‹ã€‚čŋ™åŒ…æ‹Ŧå†œä¸šã€į‰Šæĩã€åˆļ造、é›ļ唎和æļˆč´šč€…——čŋ™äē›éƒŊ是 IoT čŽžå¤‡įš„įƒ­é—¨čĄŒä¸šã€‚ ![č¯žį¨‹įš„čˇ¯įēŋ回īŧ›åރ圍 24 č¯žæĻ‚æ‹ŦįŽ€äģ‹ã€å†œä¸š -äē¤é€šã€å¤„į†ã€é›ļå”Žä¸ŽįƒšéĨĒ](sketchnotes/Roadmap.jpg) +äē¤é€šã€å¤„į†ã€é›ļå”Žä¸ŽįƒšéĨĒ](../sketchnotes/Roadmap.jpg) > Sketchnote by [Nitya Narasimhan](https://github.com/nitya). č¯ˇį‚šå‡ģå›žį‰‡æŸĨįœ‹åŽŸå›žã€‚ @@ -23,7 +27,7 @@ Microsoft įš„ Azure Cloud 大äŊŋ垈éĢ˜å…´æäž›å…ŗäēŽ IoT åŸēįĄ€ä¸€ä¸Ē12ä¸Ē星 **䚟感č°ĸ帎我äģŦåŽĄæŸĨäģĨ及įŋģ蝑čŋ™ä¸Ēč¯žį¨‹įš„ä¸€įģ„ [Microsoft Learn å­Ļį”Ÿå¤§äŊŋ](https://studentambassadors.microsoft.com?WT.mc_id=academic-17441-jabenn) īŧš[Aditya Garg](https://github.com/AdityaGarg00), [Anurag Sharma](https://github.com/Anurag-0-1-A), [Arpita Das](https://github.com/Arpiiitaaa), [Aryan Jain](https://www.linkedin.com/in/aryan-jain-47a4a1145/), [Bhavesh Suneja](https://github.com/EliteWarrior315), [Faith Hunja](https://faithhunja.github.io/), [Lateefah Bello](https://www.linkedin.com/in/lateefah-bello/), [Manvi Jha](https://github.com/Severus-Matthew), [Mireille Tan](https://www.linkedin.com/in/mireille-tan-a4834819a/), [Mohammad Iftekher (Iftu) Ebne Jalal](https://github.com/Iftu119), [Mohammad Zulfikar](https://github.com/mohzulfikar), [Priyanshu Srivastav](https://www.linkedin.com/in/priyanshu-srivastav-b067241ba), [Thanmai Gowducheruvu](https://github.com/innovation-platform), 和 [Zina Kamel](https://www.linkedin.com/in/zina-kamel/).** -> **č€å¸ˆäģŦ**īŧŒæˆ‘äģŦä¸ēčŋ™ä¸Ēč¯žį¨‹įš„į”¨æŗ• [提䞛äē†ä¸€ä盿„č§](for-teachers.md)。åĻ‚æžœäŊ æƒŗč‡Ēåˇąåˆ›åģēč¯žį¨‹īŧŒé‚Ŗæˆ‘äģŦ䚟提䞛äē†ä¸€ä¸Ē[č¯žį¨‹æ¨Ąæŋ](lesson-template/README.md). +> **č€å¸ˆäģŦ**īŧŒæˆ‘äģŦä¸ēčŋ™ä¸Ēč¯žį¨‹įš„į”¨æŗ• [提䞛äē†ä¸€ä盿„č§](../for-teachers.md)。åĻ‚æžœäŊ æƒŗč‡Ēåˇąåˆ›åģēč¯žį¨‹īŧŒé‚Ŗæˆ‘äģŦ䚟提䞛äē†ä¸€ä¸Ē[č¯žį¨‹æ¨Ąæŋ](lesson-template/README.md). > **å­Ļį”ŸäģŦ**īŧŒ ä¸ēäē†č‡Ēåˇąå­Ļäš čŋ™ä¸Ēč¯žį¨‹īŧŒč¯ˇå¤åˆģ整ä¸ĒéĄšį›Žåē“īŧŒå†č‡ĒåˇąåŽŒæˆįģƒäš īŧŒäģŽč¯žå‰įŸĨ蝆æĩ‹énjåŧ€å§‹īŧŒå†é˜…č¯ģ莲åē§īŧŒį„ļ后厌成削äŊ™įš„æ´ģåŠ¨ã€‚å°č¯•é€ščŋ‡į†č§Ŗč¯žį¨‹įš„内厚æĨåŽŒæˆéĄšį›ŽīŧŒč€Œä¸čρäģ…äģ…æŠŠäģŖį į­”æĄˆæŠ„ä¸‹æĨīŧ›į„ļ而īŧŒåœ¨æ¯ä¸ĒéĄšį›Žč¯žį¨‹é‡ŒīŧŒäŊ éƒŊčƒŊäģŽ /solutions 文äģļ多čŽŋé—Žé‚Ŗäē›į­”æĄˆäģŖį ã€‚åĻ外一ä¸ĒåŠžæŗ•æ˜¯čˇŸæœ‹å‹æˆįĢ‹å­Ļ䚠小įģ„īŧŒį„ļ后一čĩˇåˆ†æžå†…åŽšã€‚æƒŗčŋ›ä¸€æ­Ĩį ”įŠļīŧŒæˆ‘äģŦéŧ“åŠąäŊ æŸĨ一æŸĨ[Microsoft Learn](https://docs.microsoft.com/users/jimbobbennett/collections/ke2ehd351jopwr?WT.mc_id=academic-17441-jabenn)。 @@ -44,9 +48,9 @@ Microsoft įš„ Azure Cloud 大äŊŋ垈éĢ˜å…´æäž›å…ŗäēŽ IoT åŸēįĄ€ä¸€ä¸Ē12ä¸Ē星 ## įĄŦäģļ -栚捎äŊ č‡Ēåˇąįš„é€‰æ‹Šã€įŸĨ道或喜æŦĸįš„įŧ–į č¯­č¨€ã€å­Ļäš į›Žæ ‡į­‰īŧŒæˆ‘äģŦ寚äēŽéĄšį›Žįš„ IoT įĄŦäģᅵ‰ä¸¤ä¸Ē选拊。我äģŦ䚟提䞛äē†ä¸€ä¸Ēâ€œč™šæ‹ŸįĄŦäģļâ€įš„į‰ˆæœŦīŧŒä¸ēæ— æŗ•æ‹ŋ到įĄŦäģ￈–č€…æƒŗåœ¨äš°įĄŦäģļ䚋前å­Ļå¤šä¸€į‚šå„ŋ东čĨŋįš„äēē。äŊ čƒŊ在[įĄŦäģļéĄĩ](./hardware.md)扞到更多čĩ„æ–™ä¸Žâ€œč´­į‰Šæ¸…å•â€īŧ›åŽƒäšŸåŒ…æ‹ŦæĨč‡Ē我äģŦ朋友Seeed Studio厌整åĨ—äģļįš„é“žæŽĨ。 +栚捎äŊ č‡Ēåˇąįš„é€‰æ‹Šã€įŸĨ道或喜æŦĸįš„įŧ–į č¯­č¨€ã€å­Ļäš į›Žæ ‡į­‰īŧŒæˆ‘äģŦ寚äēŽéĄšį›Žįš„ IoT įĄŦäģᅵ‰ä¸¤ä¸Ē选拊。我äģŦ䚟提䞛äē†ä¸€ä¸Ēâ€œč™šæ‹ŸįĄŦäģļâ€įš„į‰ˆæœŦīŧŒä¸ēæ— æŗ•æ‹ŋ到įĄŦäģ￈–č€…æƒŗåœ¨äš°įĄŦäģļ䚋前å­Ļå¤šä¸€į‚šå„ŋ东čĨŋįš„äēē。äŊ čƒŊ在[įĄŦäģļéĄĩ](../hardware.md)扞到更多čĩ„æ–™ä¸Žâ€œč´­į‰Šæ¸…å•â€īŧ›åŽƒäšŸåŒ…æ‹ŦæĨč‡Ē我äģŦ朋友Seeed Studio厌整åĨ—äģļįš„é“žæŽĨ。 -> 💁 扞一下我äģŦįš„[行ä¸ē厈则](CODE_OF_CONDUCT.md)、 [č´ĄįŒŽ](CONTRIBUTING.md)和 [įŋģ蝑](TRANSLATIONS.md)įš„æŒ‡å¯ŧ斚针。 我äģŦæŦĸčŋŽäŊ įš„åģēčŽžæ€§åéψīŧ +> 💁 扞一下我äģŦįš„[行ä¸ē厈则](../CODE_OF_CONDUCT.md)、 [č´ĄįŒŽ](../CONTRIBUTING.md)和 [įŋģ蝑](../TRANSLATIONS.md)įš„æŒ‡å¯ŧ斚针。 我äģŦæŦĸčŋŽäŊ įš„åģēčŽžæ€§åéψīŧ ## 每ä¸Ēč¯žåŒ…æ‹Ŧīŧš @@ -68,30 +72,30 @@ Microsoft įš„ Azure Cloud 大äŊŋ垈éĢ˜å…´æäž›å…ŗäēŽ IoT åŸēįĄ€ä¸€ä¸Ē12ä¸Ē星 | | éĄšį›Ž | éĸ˜į›Ž | å­Ļäš į›Žæ ‡ | 链æŽĨ | | :-: | :----------: | :-------------: | ------------------- | :-----------: | -| 01 | [å…Ĩ门](./1-getting-started) | į‰Šč”įŊ‘īŧˆIoTīŧ‰įŽ€äģ‹ | å­Ļäŧš IoT įš„åŸēæœŦ原则īŧˆäž‹åĻ‚īŧšäŧ æ„Ÿå™¨å’Œä瑿œåŠĄīŧ‰īŧŒåŒæ—ļ莞įŊŽäŊ įš„įŦŦ一ä¸Ē IoT čŽžå¤‡| [į‰Šč”įŊ‘īŧˆIoTīŧ‰įŽ€äģ‹](./1-getting-started/lessons/1-introduction-to-iot/README.md) | -| 02 | [å…Ĩ门](./1-getting-started) | æˇąå…Ĩäē†č§Ŗį‰Šč”įŊ‘īŧˆIoTīŧ‰ | æˇąå…Ĩäē†č§Ŗ IoT įŗģįģŸįš„不同部分īŧŒäģĨ及垎控åˆļ器和单æŋæœē | [æˇąå…Ĩäē†č§Ŗį‰Šč”įŊ‘īŧˆIoTīŧ‰](./1-getting-started/lessons/2-deeper-dive/README.md) | -| 03 | [å…Ĩ门](./1-getting-started) | ᔍäŧ æ„Ÿå™¨å’Œæ‰§čĄŒå™¨čˇŸį‰Šč´¨ä¸–į•Œäē’ᛏäŊœį”¨ | å­Ļäŧšäŧ æ„Ÿå™¨æ€ŽäšˆäģŽį‰Šč´¨ä¸–į•Œæ”ļé›†æ•°æŽå’Œæ‰§čĄŒå™¨æ€Žäšˆå‘é€åéψīŧŒåŒæ—ļ创åģē一ä¸Ē夜ၝ | [ᔍäŧ æ„Ÿå™¨å’Œæ‰§čĄŒå™¨čˇŸį‰Šč´¨ä¸–į•Œäē’ᛏäŊœį”¨](./1-getting-started/lessons/3-sensors-and-actuators/README.md) | -| 04 | [å…Ĩ门](./1-getting-started) | 将äŊ įš„čŽžå¤‡čŋžæŽĨ到äē’联įŊ‘ | å­Ļäŧšæ€ŽäšˆæŠŠä¸€ä¸Ē IoT čŽžå¤‡čŋžæŽĨ到äē’联įŊ‘īŧŒå°†å¤œį¯čŋžæŽĨ到MQTT 中čŊŦįĢ™čŽŠåŽƒå‘é€å’Œæ”ļ到æļˆæ¯ | [将äŊ įš„čŽžå¤‡čŋžæŽĨ到äē’联įŊ‘](./1-getting-started/lessons/4-connect-internet/README.md) | -| 05 | [农åœē](./2-farm) | éĸ„æĩ‹æ¤į‰Šį”Ÿé•ŋ | å­Ļäŧšæ€Žäšˆį”¨ IoT čŽžå¤‡æ•čŽˇįš„æ¸ŠåēĻæ•°æŽæĨéĸ„æĩ‹æ¤į‰Šį”Ÿé•ŋ | [éĸ„æĩ‹æ¤į‰Šį”Ÿé•ŋ](./2-farm/lessons/1-predict-plant-growth/README.md) | -| 06 | [农åœē](./2-farm) | æŖ€æĩ‹åœŸåŖ¤æ°´åˆ† | å­Ļäŧšæ€ŽäšˆæŖ€æĩ‹åœŸåŖ¤æ°´åˆ†äģĨåŠæ Ąå‡†åœŸåŖ¤æšŋåēĻäŧ æ„Ÿå™¨ | [æŖ€æĩ‹åœŸåŖ¤æ°´åˆ†](./2-farm/lessons/2-detect-soil-moisture/README.md) | -| 07 | [农åœē](./2-farm) | č‡ĒåŠ¨æ¤į‰Šæĩ‡æ°´ | å­Ļäŧšæ€Žäšˆį”¨ä¸€ä¸Ē中įģ§å’Œ MQTT ä¸ēæ¤į‰Šæĩ‡æ°´äŊŋč‡ĒåŠ¨åŒ–å’ŒčŽĄæ—ļ | [č‡ĒåŠ¨æ¤į‰Šæĩ‡æ°´](./2-farm/lessons/3-automated-plant-watering/README.md) | -| 08 | [农åœē](./2-farm) | 将äŊ įš„æ¤į‰Ščŋį§ģ到äē‘į̝ | äē†č§Ŗäē‘įĢ¯å’Œäē‘į̝ IoT æœåŠĄä¸Žå­Ļäŧšæ€ŽäšˆæŠŠäŊ įš„æ¤į‰ŠčŋžæŽĨ到厃īŧŒč€Œä¸æ˜¯ä¸€ä¸Ēå…Ŧå…ą MQTT中čŊŦįĢ™ | [将äŊ įš„æ¤į‰Ščŋį§ģ到äē‘į̝](./2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md) | -| 09 | [农åœē](./2-farm) | 将äŊ įš„åē”ᔍፋåēé€ģ辑čŋį§ģ到äē‘į̝ | å­Ļäŧšæ€Žäšˆåœ¨äē‘į̝写čƒŊ够响åē” IoT æļˆæ¯įš„åē”ᔍፋåēé€ģ辑 | [将äŊ įš„åē”ᔍፋåēé€ģ辑čŋį§ģ到äē‘į̝](./2-farm/lessons/5-migrate-application-to-the-cloud/README.md) | -| 10 | [农åœē](./2-farm) | įĄŽäŋäŊ įš„æ¤į‰Šåމ免 | äē†č§Ŗ IoT 厉全äģĨ及å­Ļäŧšæ€Žäšˆį”¨å¯†é’Ĩå’Œč¯äšĻæĨįĄŽäŋäŊ įš„æ¤į‰Šåމ免 | [įĄŽäŋäŊ įš„æ¤į‰Šåމ免](./2-farm/lessons/6-keep-your-plant-secure/README.md) | -| 11 | [äē¤é€š](./3-transport) | äŊįŊŽčŋŊč¸Ē | äē†č§Ŗ IoT čŽžå¤‡įš„ GPSäŊįŊŽčŋŊč¸Ē | [äŊįŊŽčŋŊč¸Ē](./3-transport/lessons/1-location-tracking/README.md) | -| 12 | [äē¤é€š](./3-transport) | 存储äŊįŊŽæ•°æŽ | å­Ļäŧšæ€Žäšˆå­˜å‚¨ IoT 数捎īŧŒčŽŠäŊ æœĒæĨčƒŊå¯č§†åŒ–æˆ–åˆ†æžåŽƒ | [存储äŊįŊŽæ•°æŽ](./3-transport/lessons/2-store-location-data/README.md) | -| 13 | [äē¤é€š](./3-transport) | å¯č§†åŒ–äŊįŊŽæ•°æŽ | å­Ļäŧšåœ¨åœ°å›žä¸Šå¯č§†åŒ–äŊįŊŽæ•°æŽäģĨåŠåœ°å›žæ€Žäšˆį”¨ 2D æĨäģŖčĄ¨ 3D įš„ä¸–į•Œ | [å¯č§†åŒ–äŊįŊŽæ•°æŽ](./3-transport/lessons/3-visualize-location-data/README.md) | -| 14 | [äē¤é€š](./3-transport) | åœ°į†å›´æ  | å­Ļäŧšåœ°į†å›´æ æ˜¯äģ€äšˆäģĨåŠæ€Žäšˆį”¨åŽƒäģŦæĨ通įŸĨåŊ“äž›åē”é“žįš„čŊĻ辆åŋĢåˆ°į›Žįš„åœ°æ—ļ | [åœ°į†å›´æ ](./3-transport/lessons/4-geofences/README.md) | -| 15 | [åˆļ造业](./4-manufacturing) | 莭į샿°´æžœč´¨é‡æŖ€æĩ‹å™¨ | å­Ļäŧšæ€Žäšˆåœ¨äē‘įĢ¯ä¸ŠčŽ­įģƒä¸€ä¸Ēå›žį‰‡åˆ†įąģ器æĨæŖ€æĩ‹æ°´æžœč´¨é‡ | [莭į샿°´æžœč´¨é‡æŖ€æĩ‹å™¨](./4-manufacturing/lessons/1-train-fruit-detector/README.md) | -| 16 | [åˆļ造业](./4-manufacturing) | äģŽ IoT čŽžå¤‡æŖ€æŸĨæ°´æžœč´¨é‡ | å­Ļäŧšæ€ŽäšˆäģŽä¸€ä¸Ē IoT čŽžå¤‡äŊŋᔍäŊ įš„æ°´æžœč´¨é‡æŖ€æĩ‹å™¨ | [äģŽ IoT čŽžå¤‡æŖ€æŸĨæ°´æžœč´¨é‡](./4-manufacturing/lessons/2-check-fruit-from-device/README.md) | -| 17 | [åˆļ造业](./4-manufacturing) | åœ¨čžšįŧ˜ä¸ŠčŋčĄŒäŊ įš„æ°´æžœč´¨é‡æŖ€æĩ‹å™¨ | å­Ļäŧšæ€Žäšˆåœ¨čžšįŧ˜ä¸Šįš„ IoT čŽžå¤‡čŋčĄŒäŊ įš„æ°´æžœč´¨é‡æŖ€æĩ‹å™¨ | [åœ¨čžšįŧ˜ä¸ŠčŋčĄŒäŊ įš„æ°´æžœč´¨é‡æŖ€æĩ‹å™¨](./4-manufacturing/lessons/3-run-fruit-detector-edge/README.md) | -| 18 | [åˆļ造业](./4-manufacturing) | äģŽäŧ æ„Ÿå™¨č§Ļå‘æ°´æžœč´¨é‡æŖ€æĩ‹ | å­Ļäŧšæ€ŽäšˆäģŽäŧ æ„Ÿå™¨č§Ļå‘æ°´æžœč´¨é‡æŖ€æĩ‹ | [äģŽäŧ æ„Ÿå™¨č§Ļå‘æ°´æžœč´¨é‡æŖ€æĩ‹](./4-manufacturing/lessons/4-trigger-fruit-detector/README.md) | -| 19 | [é›ļ唎](./5-retail) | 莭įģƒå­˜č´§æŖ€æĩ‹å™¨ | å­Ļäŧšį”¨å¯ščąĄæŖ€æĩ‹æĨ莭įģƒå­˜č´§æŖ€æĩ‹å™¨čŽŠäŊ åœ¨åē—é‡Œæ•°å­˜č´§ | [莭įģƒå­˜č´§æŖ€æĩ‹å™¨](./5-retail/lessons/1-train-stock-detector/README.md) | -| 20 | [é›ļ唎](./5-retail) | äģŽ IoT čŽžå¤‡æŖ€æŸĨ存货 | å­Ļäŧšæ€Žäšˆį”¨ä¸€ä¸Ēå¯ščąĄæŖ€æĩ‹æ¨Ąåž‹äģŽ IoT čŽžå¤‡æŖ€æŸĨ存货 | [äģŽ IoT čŽžå¤‡æŖ€æŸĨ存货](./5-retail/lessons/2-check-stock-device/README.md) | -| 21 | [æļˆč´šč€…](./6-consumer) | ᔍ IoT čŽžå¤‡č¯†åˆĢ蝭韺 | å­Ļäŧšæ€Žäšˆį”¨ IoT čŽžå¤‡č¯†åˆĢ蝭韺æĨ创åģē一ä¸Ēæ™ēčƒŊ莥æ—ļ器 | [ᔍ IoT čŽžå¤‡č¯†åˆĢ蝭韺](./6-consumer/lessons/1-speech-recognition/README.md) | -| 22 | [æļˆč´šč€…](./6-consumer) | ᐆ觪蝭荀 | å­Ļäŧšæ€Žäšˆį†č§Ŗå‘ IoT čŽžå¤‡č¯´įš„č¯­č¨€ | [ᐆ觪蝭荀](./6-consumer/lessons/2-language-understanding/README.md) | -| 23 | [æļˆč´šč€…](./6-consumer) | 莞įŊŽčŽĄæ—ļå™¨å’Œæäž›åŖå¤´åéψ | å­Ļäŧšæ€ŽäšˆčŽžįŊŽčŽĄæ—ļå™¨å’Œæäž›åŖå¤´åéψåŊ“莥æ—ļ器čĸĢ莞įŊŽå’ŒåŊ“åŽƒåŽŒæˆįš„æ—ļ候 | [莞įŊŽčŽĄæ—ļå™¨å’Œæäž›åŖå¤´åéψ](./6-consumer/lessons/3-spoken-feedback/README.md) | -| 24 | [æļˆč´šč€…](./6-consumer) | æ”¯æŒå¤šį§č¯­č¨€ | å­Ļäŧšæ€Žäšˆæ”¯æŒå¤šį§č¯­č¨€īŧŒåŒ…æ‹Ŧ向æ™ēčƒŊ莥æ—ļå™¨č¯´įš„čŋ˜æœ‰čŽĄæ—ļ器回åē”įš„ | [æ”¯æŒå¤šį§č¯­č¨€](./6-consumer/lessons/4-multiple-language-support/README.md) | +| 01 | [å…Ĩ门](../1-getting-started) | į‰Šč”įŊ‘īŧˆIoTīŧ‰įŽ€äģ‹ | å­Ļäŧš IoT įš„åŸēæœŦ原则īŧˆäž‹åĻ‚īŧšäŧ æ„Ÿå™¨å’Œä瑿œåŠĄīŧ‰īŧŒåŒæ—ļ莞įŊŽäŊ įš„įŦŦ一ä¸Ē IoT čŽžå¤‡| [į‰Šč”įŊ‘īŧˆIoTīŧ‰įŽ€äģ‹](../1-getting-started/lessons/1-introduction-to-iot/README.md) | +| 02 | [å…Ĩ门](../1-getting-started) | æˇąå…Ĩäē†č§Ŗį‰Šč”įŊ‘īŧˆIoTīŧ‰ | æˇąå…Ĩäē†č§Ŗ IoT įŗģįģŸįš„不同部分īŧŒäģĨ及垎控åˆļ器和单æŋæœē | [æˇąå…Ĩäē†č§Ŗį‰Šč”įŊ‘īŧˆIoTīŧ‰](../1-getting-started/lessons/2-deeper-dive/README.md) | +| 03 | [å…Ĩ门](../1-getting-started) | ᔍäŧ æ„Ÿå™¨å’Œæ‰§čĄŒå™¨čˇŸį‰Šč´¨ä¸–į•Œäē’ᛏäŊœį”¨ | å­Ļäŧšäŧ æ„Ÿå™¨æ€ŽäšˆäģŽį‰Šč´¨ä¸–į•Œæ”ļé›†æ•°æŽå’Œæ‰§čĄŒå™¨æ€Žäšˆå‘é€åéψīŧŒåŒæ—ļ创åģē一ä¸Ē夜ၝ | [ᔍäŧ æ„Ÿå™¨å’Œæ‰§čĄŒå™¨čˇŸį‰Šč´¨ä¸–į•Œäē’ᛏäŊœį”¨](../1-getting-started/lessons/3-sensors-and-actuators/README.md) | +| 04 | [å…Ĩ门](../1-getting-started) | 将äŊ įš„čŽžå¤‡čŋžæŽĨ到äē’联įŊ‘ | å­Ļäŧšæ€ŽäšˆæŠŠä¸€ä¸Ē IoT čŽžå¤‡čŋžæŽĨ到äē’联įŊ‘īŧŒå°†å¤œį¯čŋžæŽĨ到MQTT 中čŊŦįĢ™čŽŠåŽƒå‘é€å’Œæ”ļ到æļˆæ¯ | [将äŊ įš„čŽžå¤‡čŋžæŽĨ到äē’联įŊ‘](../1-getting-started/lessons/4-connect-internet/README.md) | +| 05 | [农åœē](../2-farm) | éĸ„æĩ‹æ¤į‰Šį”Ÿé•ŋ | å­Ļäŧšæ€Žäšˆį”¨ IoT čŽžå¤‡æ•čŽˇįš„æ¸ŠåēĻæ•°æŽæĨéĸ„æĩ‹æ¤į‰Šį”Ÿé•ŋ | [éĸ„æĩ‹æ¤į‰Šį”Ÿé•ŋ](../2-farm/lessons/1-predict-plant-growth/README.md) | +| 06 | [农åœē](../2-farm) | æŖ€æĩ‹åœŸåŖ¤æ°´åˆ† | å­Ļäŧšæ€ŽäšˆæŖ€æĩ‹åœŸåŖ¤æ°´åˆ†äģĨåŠæ Ąå‡†åœŸåŖ¤æšŋåēĻäŧ æ„Ÿå™¨ | [æŖ€æĩ‹åœŸåŖ¤æ°´åˆ†](../2-farm/lessons/2-detect-soil-moisture/README.md) | +| 07 | [农åœē](../2-farm) | č‡ĒåŠ¨æ¤į‰Šæĩ‡æ°´ | å­Ļäŧšæ€Žäšˆį”¨ä¸€ä¸Ē中įģ§å’Œ MQTT ä¸ēæ¤į‰Šæĩ‡æ°´äŊŋč‡ĒåŠ¨åŒ–å’ŒčŽĄæ—ļ | [č‡ĒåŠ¨æ¤į‰Šæĩ‡æ°´](../2-farm/lessons/3-automated-plant-watering/README.md) | +| 08 | [农åœē](../2-farm) | 将äŊ įš„æ¤į‰Ščŋį§ģ到äē‘į̝ | äē†č§Ŗäē‘įĢ¯å’Œäē‘į̝ IoT æœåŠĄä¸Žå­Ļäŧšæ€ŽäšˆæŠŠäŊ įš„æ¤į‰ŠčŋžæŽĨ到厃īŧŒč€Œä¸æ˜¯ä¸€ä¸Ēå…Ŧå…ą MQTT中čŊŦįĢ™ | [将äŊ įš„æ¤į‰Ščŋį§ģ到äē‘į̝](../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md) | +| 09 | [农åœē](../2-farm) | 将äŊ įš„åē”ᔍፋåēé€ģ辑čŋį§ģ到äē‘į̝ | å­Ļäŧšæ€Žäšˆåœ¨äē‘į̝写čƒŊ够响åē” IoT æļˆæ¯įš„åē”ᔍፋåēé€ģ辑 | [将äŊ įš„åē”ᔍፋåēé€ģ辑čŋį§ģ到äē‘į̝](../2-farm/lessons/5-migrate-application-to-the-cloud/README.md) | +| 10 | [农åœē](../2-farm) | įĄŽäŋäŊ įš„æ¤į‰Šåމ免 | äē†č§Ŗ IoT 厉全äģĨ及å­Ļäŧšæ€Žäšˆį”¨å¯†é’Ĩå’Œč¯äšĻæĨįĄŽäŋäŊ įš„æ¤į‰Šåމ免 | [įĄŽäŋäŊ įš„æ¤į‰Šåމ免](../2-farm/lessons/6-keep-your-plant-secure/README.md) | +| 11 | [äē¤é€š](../3-transport) | äŊįŊŽčŋŊč¸Ē | äē†č§Ŗ IoT čŽžå¤‡įš„ GPSäŊįŊŽčŋŊč¸Ē | [äŊįŊŽčŋŊč¸Ē](../3-transport/lessons/1-location-tracking/README.md) | +| 12 | [äē¤é€š](../3-transport) | 存储äŊįŊŽæ•°æŽ | å­Ļäŧšæ€Žäšˆå­˜å‚¨ IoT 数捎īŧŒčŽŠäŊ æœĒæĨčƒŊå¯č§†åŒ–æˆ–åˆ†æžåŽƒ | [存储äŊįŊŽæ•°æŽ](../3-transport/lessons/2-store-location-data/README.md) | +| 13 | [äē¤é€š](../3-transport) | å¯č§†åŒ–äŊįŊŽæ•°æŽ | å­Ļäŧšåœ¨åœ°å›žä¸Šå¯č§†åŒ–äŊįŊŽæ•°æŽäģĨåŠåœ°å›žæ€Žäšˆį”¨ 2D æĨäģŖčĄ¨ 3D įš„ä¸–į•Œ | [å¯č§†åŒ–äŊįŊŽæ•°æŽ](../3-transport/lessons/3-visualize-location-data/README.md) | +| 14 | [äē¤é€š](../3-transport) | åœ°į†å›´æ  | å­Ļäŧšåœ°į†å›´æ æ˜¯äģ€äšˆäģĨåŠæ€Žäšˆį”¨åŽƒäģŦæĨ通įŸĨåŊ“äž›åē”é“žįš„čŊĻ辆åŋĢåˆ°į›Žįš„åœ°æ—ļ | [åœ°į†å›´æ ](../3-transport/lessons/4-geofences/README.md) | +| 15 | [åˆļ造业](../4-manufacturing) | 莭į샿°´æžœč´¨é‡æŖ€æĩ‹å™¨ | å­Ļäŧšæ€Žäšˆåœ¨äē‘įĢ¯ä¸ŠčŽ­įģƒä¸€ä¸Ēå›žį‰‡åˆ†įąģ器æĨæŖ€æĩ‹æ°´æžœč´¨é‡ | [莭į샿°´æžœč´¨é‡æŖ€æĩ‹å™¨](../4-manufacturing/lessons/1-train-fruit-detector/README.md) | +| 16 | [åˆļ造业](../4-manufacturing) | äģŽ IoT čŽžå¤‡æŖ€æŸĨæ°´æžœč´¨é‡ | å­Ļäŧšæ€ŽäšˆäģŽä¸€ä¸Ē IoT čŽžå¤‡äŊŋᔍäŊ įš„æ°´æžœč´¨é‡æŖ€æĩ‹å™¨ | [äģŽ IoT čŽžå¤‡æŖ€æŸĨæ°´æžœč´¨é‡](../4-manufacturing/lessons/2-check-fruit-from-device/README.md) | +| 17 | [åˆļ造业](../4-manufacturing) | åœ¨čžšįŧ˜ä¸ŠčŋčĄŒäŊ įš„æ°´æžœč´¨é‡æŖ€æĩ‹å™¨ | å­Ļäŧšæ€Žäšˆåœ¨čžšįŧ˜ä¸Šįš„ IoT čŽžå¤‡čŋčĄŒäŊ įš„æ°´æžœč´¨é‡æŖ€æĩ‹å™¨ | [åœ¨čžšįŧ˜ä¸ŠčŋčĄŒäŊ įš„æ°´æžœč´¨é‡æŖ€æĩ‹å™¨](../4-manufacturing/lessons/3-run-fruit-detector-edge/README.md) | +| 18 | [åˆļ造业](../4-manufacturing) | äģŽäŧ æ„Ÿå™¨č§Ļå‘æ°´æžœč´¨é‡æŖ€æĩ‹ | å­Ļäŧšæ€ŽäšˆäģŽäŧ æ„Ÿå™¨č§Ļå‘æ°´æžœč´¨é‡æŖ€æĩ‹ | [äģŽäŧ æ„Ÿå™¨č§Ļå‘æ°´æžœč´¨é‡æŖ€æĩ‹](../4-manufacturing/lessons/4-trigger-fruit-detector/README.md) | +| 19 | [é›ļ唎](../5-retail) | 莭įģƒå­˜č´§æŖ€æĩ‹å™¨ | å­Ļäŧšį”¨å¯ščąĄæŖ€æĩ‹æĨ莭įģƒå­˜č´§æŖ€æĩ‹å™¨čŽŠäŊ åœ¨åē—é‡Œæ•°å­˜č´§ | [莭įģƒå­˜č´§æŖ€æĩ‹å™¨](../5-retail/lessons/1-train-stock-detector/README.md) | +| 20 | [é›ļ唎](../5-retail) | äģŽ IoT čŽžå¤‡æŖ€æŸĨ存货 | å­Ļäŧšæ€Žäšˆį”¨ä¸€ä¸Ēå¯ščąĄæŖ€æĩ‹æ¨Ąåž‹äģŽ IoT čŽžå¤‡æŖ€æŸĨ存货 | [äģŽ IoT čŽžå¤‡æŖ€æŸĨ存货](../5-retail/lessons/2-check-stock-device/README.md) | +| 21 | [æļˆč´šč€…](../6-consumer) | ᔍ IoT čŽžå¤‡č¯†åˆĢ蝭韺 | å­Ļäŧšæ€Žäšˆį”¨ IoT čŽžå¤‡č¯†åˆĢ蝭韺æĨ创åģē一ä¸Ēæ™ēčƒŊ莥æ—ļ器 | [ᔍ IoT čŽžå¤‡č¯†åˆĢ蝭韺](../6-consumer/lessons/1-speech-recognition/README.md) | +| 22 | [æļˆč´šč€…](../6-consumer) | ᐆ觪蝭荀 | å­Ļäŧšæ€Žäšˆį†č§Ŗå‘ IoT čŽžå¤‡č¯´įš„č¯­č¨€ | [ᐆ觪蝭荀](../6-consumer/lessons/2-language-understanding/README.md) | +| 23 | [æļˆč´šč€…](../6-consumer) | 莞įŊŽčŽĄæ—ļå™¨å’Œæäž›åŖå¤´åéψ | å­Ļäŧšæ€ŽäšˆčŽžįŊŽčŽĄæ—ļå™¨å’Œæäž›åŖå¤´åéψåŊ“莥æ—ļ器čĸĢ莞įŊŽå’ŒåŊ“åŽƒåŽŒæˆįš„æ—ļ候 | [莞įŊŽčŽĄæ—ļå™¨å’Œæäž›åŖå¤´åéψ](../6-consumer/lessons/3-spoken-feedback/README.md) | +| 24 | [æļˆč´šč€…](../6-consumer) | æ”¯æŒå¤šį§č¯­č¨€ | å­Ļäŧšæ€Žäšˆæ”¯æŒå¤šį§č¯­č¨€īŧŒåŒ…æ‹Ŧ向æ™ēčƒŊ莥æ—ļå™¨č¯´įš„čŋ˜æœ‰čŽĄæ—ļ器回åē”įš„ | [æ”¯æŒå¤šį§č¯­č¨€](../6-consumer/lessons/4-multiple-language-support/README.md) | ## įĻģįēŋčŽŋ问 @@ -109,7 +113,7 @@ npm run convert ## 需čĻå¸Žåŋ™īŧ -æƒŗč´ĄįŒŽä¸€ä¸Ēįŋģ蝑īŧŸč¯ˇé˜…č¯ģ我äģŦįš„[įŋģč¯‘æŒ‡å¯ŧæ–šé’ˆ](TRANSLATIONS.md) äģĨ及在[å…ļ中一ä¸Ēįŋģ蝑 issue](https://github.com/microsoft/IoT-For-Beginners/issues?q=is%3Aissue+is%3Aopen+label%3Atranslation) æˇģåŠ čž“å…Ĩ。åĻ‚æžœäŊ æƒŗå¸Žæˆ‘äģŦįŋģč¯‘æˆä¸€ä¸Ēæ–°č¯­č¨€īŧŒč¯ˇä¸žä¸€ä¸Ē新 issue ᔍäēŽčˇŸč¸Ē。 +æƒŗč´ĄįŒŽä¸€ä¸Ēįŋģ蝑īŧŸč¯ˇé˜…č¯ģ我äģŦįš„[įŋģč¯‘æŒ‡å¯ŧæ–šé’ˆ](../TRANSLATIONS.md) äģĨ及在[å…ļ中一ä¸Ēįŋģ蝑 issue](https://github.com/microsoft/IoT-For-Beginners/issues?q=is%3Aissue+is%3Aopen+label%3Atranslation) æˇģåŠ čž“å…Ĩ。åĻ‚æžœäŊ æƒŗå¸Žæˆ‘äģŦįŋģč¯‘æˆä¸€ä¸Ēæ–°č¯­č¨€īŧŒč¯ˇä¸žä¸€ä¸Ē新 issue ᔍäēŽčˇŸč¸Ē。 ## å…ļåŽƒč¯žį¨‹ @@ -120,4 +124,4 @@ npm run convert ## å›žį‰‡åąžæ€§ -äŊ čƒŊ在[åąžæ€§](./attributions.md)æ‰žåˆ°č¯žį¨‹ä¸­æ‰€æœ‰éœ€čĻįš„å›žį‰‡åąžæ€§ã€‚ +äŊ čƒŊ在[åąžæ€§](../attributions.md)æ‰žåˆ°č¯žį¨‹ä¸­æ‰€æœ‰éœ€čĻįš„å›žį‰‡åąžæ€§ã€‚