You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/he/3-transport/lessons/2-store-location-data/README.md

38 KiB

אחסן נתוני מיקום

סקיצה של סקירה כללית של השיעור

סקיצה מאת ניטיה נאראסימהן. לחצו על התמונה לגרסה גדולה יותר.

חידון לפני השיעור

חידון לפני השיעור

מבוא

בשיעור הקודם למדתם כיצד להשתמש בחיישן GPS כדי ללכוד נתוני מיקום. כדי להשתמש בנתונים אלו לצורך הצגת מיקום של משאית עמוסת מזון ומסלולה, יש לשלוח אותם לשירות IoT בענן ולאחסן אותם במקום כלשהו.

בשיעור זה תלמדו על הדרכים השונות לאחסן נתוני IoT, ותלמדו כיצד לאחסן נתונים משירות ה-IoT שלכם באמצעות קוד ללא שרת.

בשיעור זה נעסוק ב:

נתונים מובנים ולא מובנים

מערכות מחשב מתמודדות עם נתונים, ונתונים אלו מגיעים במגוון צורות וגדלים. הם יכולים לנוע ממספרים בודדים, לכמויות גדולות של טקסט, לסרטונים ותמונות, ועד לנתוני IoT. נתונים בדרך כלל מתחלקים לשתי קטגוריות - נתונים מובנים ונתונים לא מובנים.

  • נתונים מובנים הם נתונים עם מבנה מוגדר היטב ונוקשה שאינו משתנה, ובדרך כלל ממופים לטבלאות נתונים עם קשרים. דוגמה אחת היא פרטי אדם הכוללים את שמו, תאריך לידתו וכתובתו.

  • נתונים לא מובנים הם נתונים ללא מבנה מוגדר היטב, כולל נתונים שיכולים לשנות מבנה לעיתים קרובות. דוגמה אחת היא מסמכים כמו מסמכים כתובים או גיליונות אלקטרוניים.

בצעו מחקר: האם אתם יכולים לחשוב על דוגמאות נוספות לנתונים מובנים ולא מובנים?

💁 ישנם גם נתונים חצי-מובנים שהם מובנים אך אינם מתאימים לטבלאות נתונים קבועות.

נתוני IoT נחשבים בדרך כלל לנתונים לא מובנים.

דמיינו שאתם מוסיפים מכשירי IoT לצי רכבים של חווה מסחרית גדולה. ייתכן שתרצו להשתמש במכשירים שונים עבור סוגי רכבים שונים. לדוגמה:

  • עבור רכבי חווה כמו טרקטורים, תרצו נתוני GPS כדי לוודא שהם עובדים בשדות הנכונים.
  • עבור משאיות משלוחים המובילות מזון למחסנים, תרצו נתוני GPS וכן נתוני מהירות ותאוצה כדי לוודא שהנהג נוהג בבטחה, ונתוני זיהוי נהג והתחלה/עצירה כדי לוודא עמידה בחוקי עבודה מקומיים.
  • עבור משאיות קירור, תרצו גם נתוני טמפרטורה כדי לוודא שהמזון לא מתחמם או מתקרר יתר על המידה ונפגם במהלך ההובלה.

נתונים אלו יכולים להשתנות כל הזמן. לדוגמה, אם מכשיר ה-IoT נמצא בתא הנהג של משאית, הנתונים שהוא שולח עשויים להשתנות כאשר הקרון משתנה, לדוגמה, שליחת נתוני טמפרטורה רק כאשר משתמשים בקרון קירור.

אילו נתוני IoT נוספים ניתן ללכוד? חשבו על סוגי המטענים שמשאיות יכולות לשאת, כמו גם נתוני תחזוקה.

נתונים אלו משתנים מרכב לרכב, אך כולם נשלחים לאותו שירות IoT לצורך עיבוד. שירות ה-IoT צריך להיות מסוגל לעבד נתונים לא מובנים אלו, לאחסן אותם בצורה שמאפשרת חיפוש או ניתוח, אך גם להתמודד עם מבנים שונים של נתונים אלו.

אחסון SQL לעומת NoSQL

בסיסי נתונים הם שירותים שמאפשרים לאחסן ולשאול נתונים. בסיסי נתונים מתחלקים לשני סוגים - SQL ו-NoSQL.

בסיסי נתונים SQL

בסיסי הנתונים הראשונים היו מערכות ניהול בסיסי נתונים יחסיים (RDBMS), או בסיסי נתונים יחסיים. הם ידועים גם כבסיסי נתונים SQL על שם שפת השאילתות המבנית (SQL) המשמשת לאינטראקציה איתם להוספה, הסרה, עדכון או שאילת נתונים. בסיסי נתונים אלו מורכבים מסכימה - סט מוגדר היטב של טבלאות נתונים, בדומה לגיליון אלקטרוני. כל טבלה מכילה עמודות עם שמות. כאשר מוסיפים נתונים, מוסיפים שורה לטבלה, ומכניסים ערכים לכל אחת מהעמודות. זה שומר על מבנה נוקשה מאוד - למרות שניתן להשאיר עמודות ריקות, אם רוצים להוסיף עמודה חדשה יש לעשות זאת בבסיס הנתונים, ולמלא ערכים עבור השורות הקיימות. בסיסי נתונים אלו הם יחסיים - כלומר טבלה אחת יכולה להיות בקשר עם טבלה אחרת.

בסיס נתונים יחסי עם מזהה טבלת המשתמשים המקושר לעמודת מזהה המשתמש בטבלת הרכישות, ומזהה טבלת המוצרים המקושר לעמודת מזהה המוצר בטבלת הרכישות

לדוגמה, אם תאחסנו פרטים אישיים של משתמשים בטבלה, יהיה לכם מזהה ייחודי פנימי לכל משתמש המשמש בשורה בטבלה שמכילה את שם המשתמש וכתובתו. אם תרצו לאחסן פרטים נוספים על אותו משתמש, כמו הרכישות שלו, בטבלה אחרת, תהיה עמודה אחת בטבלה החדשה עבור מזהה המשתמש. כאשר תחפשו משתמש, תוכלו להשתמש במזהה שלו כדי לקבל את פרטיו האישיים מטבלה אחת, ואת הרכישות שלו מטבלה אחרת.

בסיסי נתונים SQL אידיאליים לאחסון נתונים מובנים, וכאשר רוצים להבטיח שהנתונים תואמים לסכימה שלכם.

אם לא השתמשתם ב-SQL בעבר, הקדישו רגע לקרוא עליו בעמוד SQL בוויקיפדיה.

כמה בסיסי נתונים SQL ידועים הם Microsoft SQL Server, MySQL, ו-PostgreSQL.

בצעו מחקר: קראו על כמה מבסיסי נתונים SQL אלו ועל היכולות שלהם.

בסיסי נתונים NoSQL

בסיסי נתונים NoSQL נקראים כך מכיוון שאין להם את המבנה הנוקשה של בסיסי נתונים SQL. הם ידועים גם כבסיסי נתונים מסמכים מכיוון שהם יכולים לאחסן נתונים לא מובנים כמו מסמכים.

💁 למרות שמם, חלק מבסיסי נתונים NoSQL מאפשרים להשתמש ב-SQL כדי לשאול את הנתונים.

מסמכים בתיקיות בבסיס נתונים NoSQL

בסיסי נתונים NoSQL אינם כוללים סכימה מוגדרת מראש שמגבילה כיצד הנתונים מאוחסנים, במקום זאת ניתן להכניס כל נתון לא מובנה, בדרך כלל באמצעות מסמכי JSON. מסמכים אלו יכולים להיות מאורגנים בתיקיות, בדומה לקבצים במחשב שלכם. כל מסמך יכול לכלול שדות שונים ממסמכים אחרים - לדוגמה, אם תאחסנו נתוני IoT מרכבי החווה שלכם, חלקם עשויים לכלול שדות עבור נתוני תאוצה ומהירות, אחרים עשויים לכלול שדות עבור הטמפרטורה בקרון. אם תוסיפו סוג משאית חדש, כמו אחת עם מאזניים מובנים למעקב אחר משקל התוצרת, מכשיר ה-IoT שלכם יוכל להוסיף שדה חדש זה והוא יוכל להישמר ללא שינויים בבסיס הנתונים.

כמה בסיסי נתונים NoSQL ידועים כוללים את Azure CosmosDB, MongoDB, ו-CouchDB.

בצעו מחקר: קראו על כמה מבסיסי נתונים NoSQL אלו ועל היכולות שלהם.

בשיעור זה, תשתמשו באחסון NoSQL לאחסון נתוני IoT.

שליחת נתוני GPS ל-IoT Hub

בשיעור הקודם לכדתם נתוני GPS מחיישן GPS המחובר למכשיר ה-IoT שלכם. כדי לאחסן נתוני IoT אלו בענן, עליכם לשלוח אותם לשירות IoT. שוב, תשתמשו ב-Azure IoT Hub, אותו שירות IoT בענן שבו השתמשתם בפרויקט הקודם.

שליחת טלמטריית GPS ממכשיר IoT ל-IoT Hub

משימה - שליחת נתוני GPS ל-IoT Hub

  1. צרו IoT Hub חדש באמצעות המדרגה החינמית.

    ⚠️ תוכלו לעיין בהוראות ליצירת IoT Hub מפרויקט 2, שיעור 4 אם תצטרכו.

    זכרו ליצור קבוצת משאבים חדשה. קראו לקבוצת המשאבים החדשה gps-sensor, ול-IoT Hub החדש שם ייחודי המבוסס על gps-sensor, כמו gps-sensor-<your name>.

    💁 אם עדיין יש לכם את ה-IoT Hub מהפרויקט הקודם, תוכלו להשתמש בו מחדש. זכרו להשתמש בשם ה-IoT Hub הזה ובקבוצת המשאבים שבה הוא נמצא כאשר תיצרו שירותים אחרים.

  2. הוסיפו מכשיר חדש ל-IoT Hub. קראו למכשיר זה gps-sensor. קחו את מחרוזת החיבור של המכשיר.

  3. עדכנו את קוד המכשיר שלכם כדי לשלוח את נתוני ה-GPS ל-IoT Hub החדש באמצעות מחרוזת החיבור של המכשיר מהשלב הקודם.

    ⚠️ תוכלו לעיין בהוראות לחיבור המכשיר שלכם ל-IoT מפרויקט 2, שיעור 4 אם תצטרכו.

  4. כאשר אתם שולחים את נתוני ה-GPS, עשו זאת בפורמט JSON הבא:

    {
        "gps" :
        {
            "lat" : <latitude>,
            "lon" : <longitude>
        }
    }
    
  5. שלחו נתוני GPS כל דקה כדי לא להשתמש במכסת ההודעות היומית שלכם.

אם אתם משתמשים ב-Wio Terminal, זכרו להוסיף את כל הספריות הנדרשות ולהגדיר את הזמן באמצעות שרת NTP. הקוד שלכם יצטרך גם לוודא שהוא קרא את כל הנתונים מהפורט הסדרתי לפני שליחת מיקום ה-GPS, תוך שימוש בקוד הקיים מהשיעור הקודם. השתמשו בקוד הבא כדי לבנות את מסמך ה-JSON:

DynamicJsonDocument doc(1024);
doc["gps"]["lat"] = gps.location.lat();
doc["gps"]["lon"] = gps.location.lng();

אם אתם משתמשים במכשיר IoT וירטואלי, זכרו להתקין את כל הספריות הנדרשות באמצעות סביבה וירטואלית.

עבור גם Raspberry Pi וגם מכשיר IoT וירטואלי, השתמשו בקוד הקיים מהשיעור הקודם כדי לקבל את ערכי קו הרוחב והאורך, ואז שלחו אותם בפורמט JSON הנכון עם הקוד הבא:

message_json = { "gps" : { "lat":lat, "lon":lon } }
print("Sending telemetry", message_json)
message = Message(json.dumps(message_json))

💁 תוכלו למצוא קוד זה בתיקיות code/wio-terminal, code/pi או code/virtual-device.

הריצו את קוד המכשיר שלכם וודאו שהודעות זורמות ל-IoT Hub באמצעות פקודת CLI az iot hub monitor-events.

נתיבי עיבוד חמים, פושרים וקרים

נתונים שזורמים ממכשיר IoT לענן אינם תמיד מעובדים בזמן אמת. חלק מהנתונים דורשים עיבוד בזמן אמת, נתונים אחרים יכולים להיות מעובדים זמן קצר לאחר מכן, ואחרים יכולים להיות מעובדים הרבה יותר מאוחר. הזרימה של נתונים לשירותים שונים שמעבדים אותם בזמנים שונים מכונה נתיבי עיבוד חמים, פושרים וקרים.

נתיב חם

הנתיב החם מתייחס לנתונים שצריך לעבד בזמן אמת או קרוב לזמן אמת. תשתמשו בנתוני נתיב חם עבור התראות, כמו קבלת התראה שמשאית מתקרבת למחסן, או שהטמפרטורה במשאית קירור גבוהה מדי.

כדי להשתמש בנתוני נתיב חם, הקוד שלכם יגיב לאירועים ברגע שהם מתקבלים על ידי שירותי הענן שלכם.

נתיב פושר

הנתיב הפושר מתייחס לנתונים שיכולים להיות מעובדים זמן קצר לאחר קבלתם, לדוגמה לצורך דוחות או ניתוחים קצרי טווח. תשתמשו בנתוני נתיב פושר לדוחות יומיים על קילומטראז' רכבים, תוך שימוש בנתונים שנאספו ביום הקודם.

נתוני נתיב פושר מאוחסנים ברגע שהם מתקבלים על ידי שירות הענן בתוך סוג כלשהו של אחסון שניתן לגשת אליו במהירות.

נתיב קר

הנתיב הקר מתייחס לנתונים היסטוריים, אחסון נתונים לטווח הארוך לצורך עיבוד בכל זמן שיידרש. לדוגמה, תוכלו להשתמש בנתיב הקר כדי לקבל דוחות קילומטראז' שנתיים לרכבים, או להריץ ניתוחים על מסלולים כדי למצוא את המסלול האופטימלי ביותר להפחתת עלויות דלק.

נתוני נתיב קר מאוחסנים במחסני נתונים - בסיסי נתונים שתוכננו לאחסון כמויות גדולות של נתונים שלא ישתנו וניתן לשאול אותם במהירות ובקלות. בדרך כלל תהיה לכם משימה קבועה באפליקציית הענן שלכם שתפעל בזמן קבוע כל יום, שבוע או חודש כדי להעביר נתונים מאחסון נתיב פושר למחסן הנתונים.

חשבו על הנתונים שאספתם עד כה בשיעורים אלו. האם הם נתוני נתיב חם, פושר או קר?

טיפול באירועי GPS באמצעות קוד ללא שרת

ברגע שנתונים זורמים ל-IoT Hub, תוכלו לכתוב קוד ללא שרת שיקשיב לאירועים שמתפרסמים לנקודת הקצה התואמת ל-Event Hub. זהו הנתיב הפושר - נתונים אלו יאוחסנו וישמשו בשיעור הבא לצורך דיווח על המסלול.

שליחת טלמטריית GPS ממכשיר IoT ל-IoT Hub, ואז ל-Azure Functions דרך טריגר Event Hub

משימה - טיפול באירועי GPS באמצעות קוד ללא שרת

  1. צרו אפליקציית Azure Functions באמצעות CLI של Azure Functions. השתמשו ב-runtime של Python, וצרו אותה בתיקייה בשם gps-trigger, והשתמשו באותו שם עבור שם פרויקט ה-Functions App. ודאו שאתם יוצרים סביבה וירטואלית לשימוש.

⚠️ ניתן לעיין בהוראות ליצירת פרויקט Azure Functions מפרויקט 2, שיעור 5 במידת הצורך.

  1. הוסף טריגר אירוע IoT Hub שמשתמש בנקודת הקצה התואמת של Event Hub ב-IoT Hub.

    ⚠️ ניתן לעיין בהוראות ליצירת טריגר אירוע IoT Hub מפרויקט 2, שיעור 5 במידת הצורך.

  2. הגדר את מחרוזת החיבור של נקודת הקצה התואמת של Event Hub בקובץ local.settings.json, והשתמש במפתח עבור ערך זה בקובץ function.json.

  3. השתמש באפליקציית Azurite כאמולטור אחסון מקומי.

  4. הרץ את אפליקציית הפונקציות שלך כדי לוודא שהיא מקבלת אירועים מהמכשיר GPS שלך. ודא שהמכשיר IoT שלך פועל ושולח נתוני GPS.

    Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}}
    

חשבונות אחסון של Azure

לוגו אחסון Azure

חשבונות אחסון של Azure הם שירות אחסון רב-תכליתי שיכול לאחסן נתונים במגוון דרכים שונות. ניתן לאחסן נתונים כבלובים, בתורים, בטבלאות או כקבצים, והכול בו-זמנית.

אחסון בלובים

המילה Blob מתייחסת לאובייקטים בינאריים גדולים, אך הפכה למונח עבור כל נתון לא מובנה. ניתן לאחסן כל נתון באחסון בלובים, החל ממסמכי JSON המכילים נתוני IoT ועד לקבצי תמונות וסרטים. אחסון בלובים כולל את המושג מכולות, דליים עם שמות שבהם ניתן לאחסן נתונים, בדומה לטבלאות במסד נתונים רלציוני. מכולות אלו יכולות להכיל תיקיות אחת או יותר לאחסון בלובים, וכל תיקייה יכולה להכיל תיקיות נוספות, בדומה לאופן שבו קבצים מאוחסנים בכונן הקשיח של המחשב שלך.

תשתמש באחסון בלובים בשיעור זה כדי לאחסן נתוני IoT.

בצע מחקר: קרא על Azure Blob Storage

אחסון טבלאות

אחסון טבלאות מאפשר לך לאחסן נתונים חצי-מובנים. אחסון טבלאות הוא למעשה מסד נתונים NoSQL, ולכן אינו דורש הגדרה מראש של טבלאות, אך הוא מיועד לאחסון נתונים באחת או יותר טבלאות, עם מפתחות ייחודיים להגדרת כל שורה.

בצע מחקר: קרא על Azure Table Storage

אחסון תורים

אחסון תורים מאפשר לך לאחסן הודעות בגודל של עד 64KB בתור. ניתן להוסיף הודעות לקצה האחורי של התור ולקרוא אותן מהקצה הקדמי. תורים מאחסנים הודעות ללא הגבלת זמן כל עוד יש מקום אחסון פנוי, כך שניתן לאחסן הודעות לטווח ארוך ואז לקרוא אותן בעת הצורך. לדוגמה, אם תרצה להריץ משימה חודשית לעיבוד נתוני GPS, תוכל להוסיף אותה לתור מדי יום במשך חודש, ואז בסוף החודש לעבד את כל ההודעות מהתור.

בצע מחקר: קרא על Azure Queue Storage

אחסון קבצים

אחסון קבצים הוא אחסון של קבצים בענן, וכל אפליקציה או מכשיר יכולים להתחבר באמצעות פרוטוקולים סטנדרטיים בתעשייה. ניתן לכתוב קבצים לאחסון קבצים ואז למפות אותו ככונן במחשב האישי או ב-Mac שלך.

בצע מחקר: קרא על Azure File Storage

חיבור הקוד חסר השרת שלך לאחסון

אפליקציית הפונקציות שלך צריכה כעת להתחבר לאחסון בלובים כדי לאחסן את ההודעות מ-IoT Hub. ישנן שתי דרכים לעשות זאת:

  • בתוך קוד הפונקציה, התחבר לאחסון בלובים באמצעות SDK של Python לאחסון בלובים וכתוב את הנתונים כבלובים.
  • השתמש בקישור פונקציה פלט כדי לקשר את ערך ההחזרה של הפונקציה לאחסון בלובים ולשמור את הבלוב באופן אוטומטי.

בשיעור זה, תשתמש ב-SDK של Python כדי לראות כיצד לעבוד עם אחסון בלובים.

שליחת טלמטריית GPS ממכשיר IoT ל-IoT Hub, ואז ל-Azure Functions דרך טריגר Event Hub, ואז שמירתה באחסון בלובים

הנתונים יישמרו כבלוב JSON בפורמט הבא:

{
    "device_id": <device_id>,
    "timestamp" : <time>,
    "gps" :
    {
        "lat" : <latitude>,
        "lon" : <longitude>
    }
}

משימה - חיבור הקוד חסר השרת שלך לאחסון

  1. צור חשבון אחסון Azure. תן לו שם כמו gps<your name>.

    ⚠️ ניתן לעיין בהוראות ליצירת חשבון אחסון מפרויקט 2, שיעור 5 במידת הצורך.

    אם עדיין יש לך חשבון אחסון מהפרויקט הקודם, תוכל להשתמש בו מחדש.

    💁 תוכל להשתמש באותו חשבון אחסון כדי לפרוס את אפליקציית הפונקציות של Azure שלך מאוחר יותר בשיעור זה.

  2. הרץ את הפקודה הבאה כדי לקבל את מחרוזת החיבור לחשבון האחסון:

    az storage account show-connection-string --output table \
                                              --name <storage_name>
    

    החלף <storage_name> בשם חשבון האחסון שיצרת בשלב הקודם.

  3. הוסף ערך חדש לקובץ local.settings.json עבור מחרוזת החיבור לחשבון האחסון שלך, באמצעות הערך מהשלב הקודם. תן לו את השם STORAGE_CONNECTION_STRING.

  4. הוסף את הדברים הבאים לקובץ requirements.txt כדי להתקין את חבילות Pip של אחסון Azure:

    azure-storage-blob
    

    התקן את החבילות מקובץ זה בסביבת העבודה הווירטואלית שלך.

    אם אתה מקבל שגיאה, עדכן את גרסת Pip בסביבת העבודה הווירטואלית שלך לגרסה האחרונה באמצעות הפקודה הבאה, ואז נסה שוב:

    pip install --upgrade pip
    
  5. בקובץ __init__.py עבור iot-hub-trigger, הוסף את הצהרות הייבוא הבאות:

    import json
    import os
    import uuid
    from azure.storage.blob import BlobServiceClient, PublicAccess
    

    מודול המערכת json ישמש לקריאה וכתיבה של JSON, מודול המערכת os ישמש לקריאת מחרוזת החיבור, מודול המערכת uuid ישמש ליצירת מזהה ייחודי לקריאת GPS.

    חבילת azure.storage.blob מכילה את SDK של Python לעבודה עם אחסון בלובים.

  6. לפני המתודה main, הוסף את פונקציית העזר הבאה:

    def get_or_create_container(name):
        connection_str = os.environ['STORAGE_CONNECTION_STRING']
        blob_service_client = BlobServiceClient.from_connection_string(connection_str)
    
        for container in blob_service_client.list_containers():
            if container.name == name:
                return blob_service_client.get_container_client(container.name)
    
        return blob_service_client.create_container(name, public_access=PublicAccess.Container)
    

    SDK של בלובים ב-Python אינו כולל מתודת עזר ליצירת מכולה אם היא אינה קיימת. קוד זה יטען את מחרוזת החיבור מקובץ local.settings.json (או מהגדרות האפליקציה לאחר הפריסה לענן), ואז ייצור מחלקת BlobServiceClient ממנה כדי לעבוד עם חשבון האחסון בלובים. לאחר מכן הוא יעבור על כל המכולות של חשבון האחסון בלובים, יחפש אחת עם השם שסופק - אם הוא מוצא אחת, הוא יחזיר מחלקת ContainerClient שיכולה לעבוד עם המכולה כדי ליצור בלובים. אם הוא לא מוצא אחת, המכולה תיווצר והלקוח עבור המכולה החדשה יוחזר.

    כאשר המכולה החדשה נוצרת, ניתנת גישה ציבורית לשאילת הבלובים במכולה. זה ישמש בשיעור הבא כדי להציג את נתוני ה-GPS על מפה.

  7. בניגוד ללחות הקרקע, עם קוד זה אנו רוצים לאחסן כל אירוע, לכן הוסף את הקוד הבא בתוך הלולאה for event in events: בפונקציה main, מתחת להצהרת logging:

    device_id = event.iothub_metadata['connection-device-id']
    blob_name = f'{device_id}/{str(uuid.uuid1())}.json'
    

    קוד זה מקבל את מזהה המכשיר ממטא-נתוני האירוע, ואז משתמש בו ליצירת שם בלוב. בלובים יכולים להישמר בתיקיות, ומזהה המכשיר ישמש לשם התיקייה, כך שכל מכשיר יכיל את כל אירועי ה-GPS שלו בתיקייה אחת. שם הבלוב הוא תיקייה זו, ואחריה שם מסמך, מופרד באמצעות קו נטוי קדימה, בדומה לנתיבים ב-Linux ו-macOS (דומה גם ל-Windows, אך Windows משתמש בקו נטוי אחורי). שם המסמך הוא מזהה ייחודי שנוצר באמצעות מודול uuid של Python, עם סוג קובץ json.

    לדוגמה, עבור מזהה המכשיר gps-sensor, שם הבלוב עשוי להיות gps-sensor/a9487ac2-b9cf-11eb-b5cd-1e00621e3648.json.

  8. הוסף את הקוד הבא מתחת לזה:

    container_client = get_or_create_container('gps-data')
    blob = container_client.get_blob_client(blob_name)
    

    קוד זה מקבל את לקוח המכולה באמצעות מחלקת העזר get_or_create_container, ואז מקבל אובייקט לקוח בלוב באמצעות שם הבלוב. לקוחות בלוב יכולים להתייחס לבלובים קיימים, או כמו במקרה זה, לבלוב חדש.

  9. הוסף את הקוד הבא לאחר מכן:

    event_body = json.loads(event.get_body().decode('utf-8'))
    blob_body = {
        'device_id' : device_id,
        'timestamp' : event.iothub_metadata['enqueuedtime'],
        'gps': event_body['gps']
    }
    

    קוד זה בונה את גוף הבלוב שייכתב לאחסון בלובים. זהו מסמך JSON המכיל את מזהה המכשיר, הזמן שבו הטלמטריה נשלחה ל-IoT Hub, וקואורדינטות ה-GPS מהטלמטריה.

    💁 חשוב להשתמש בזמן ההצבה של ההודעה במקום הזמן הנוכחי כדי לקבל את הזמן שבו ההודעה נשלחה. היא עשויה לשבת ב-Hub זמן מה לפני שנאספה אם אפליקציית הפונקציות אינה פועלת.

  10. הוסף את הקוד הבא מתחת לקוד זה:

    logging.info(f'Writing blob to {blob_name} - {blob_body}')
    blob.upload_blob(json.dumps(blob_body).encode('utf-8'))
    

    קוד זה רושם בלוג שבלוב עומד להיכתב עם פרטיו, ואז מעלה את גוף הבלוב כתוכן של הבלוב החדש.

  11. הרץ את אפליקציית הפונקציות. תראה בלובים נכתבים עבור כל אירועי ה-GPS בפלט:

    [2021-05-21T01:31:14.325Z] Python EventHub trigger processed an event: {"gps": {"lat": 47.73092, "lon": -122.26206}}
    ...
    [2021-05-21T01:31:14.351Z] Writing blob to gps-sensor/4b6089fe-ba8d-11eb-bc7b-1e00621e3648.json - {'device_id': 'gps-sensor', 'timestamp': '2021-05-21T00:57:53.878Z', 'gps': {'lat': 47.73092, 'lon': -122.26206}}
    

    💁 ודא שאינך מריץ את צג האירועים של IoT Hub בו-זמנית.

💁 ניתן למצוא את הקוד הזה בתיקיית code/functions.

משימה - אימות הבלובים שהועלו

  1. כדי לצפות בבלובים שנוצרו, ניתן להשתמש ב-Azure Storage Explorer, כלי חינמי שמאפשר לך לצפות ולנהל את חשבונות האחסון שלך, או דרך CLI.

    1. כדי להשתמש ב-CLI, תחילה תצטרך מפתח חשבון. הרץ את הפקודה הבאה כדי לקבל את המפתח הזה:

      az storage account keys list --output table \
                                   --account-name <storage_name>
      

      החלף <storage_name> בשם חשבון האחסון.

      העתק את הערך של key1.

    2. הרץ את הפקודה הבאה כדי לרשום את הבלובים במכולה:

      az storage blob list --container-name gps-data \
                           --output table \
                           --account-name <storage_name> \
                           --account-key <key1>
      

      החלף <storage_name> בשם חשבון האחסון, ו-<key1> בערך של key1 שהעתקת בשלב הקודם.

      זה ירשום את כל הבלובים במכולה:

      Name                                                  Blob Type    Blob Tier    Length    Content Type              Last Modified              Snapshot
      ----------------------------------------------------  -----------  -----------  --------  ------------------------  -------------------------  ----------
      gps-sensor/1810d55e-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:27+00:00
      gps-sensor/18293e46-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      gps-sensor/1844549c-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      gps-sensor/1894d714-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      
    3. הורד אחד מהבלובים באמצעות הפקודה הבאה:

      az storage blob download --container-name gps-data \
                               --account-name <storage_name> \
                               --account-key <key1> \
                               --name <blob_name> \
                               --file <file_name>
      

      החלף <storage_name> בשם חשבון האחסון, ו-<key1> בערך של key1 שהעתקת בשלב הקודם.

      החלף <blob_name> בשם המלא מהעמודה Name של הפלט מהשלב הקודם, כולל שם התיקייה. החלף <file_name> בשם של קובץ מקומי לשמירת הבלוב.

    לאחר ההורדה, תוכל לפתוח את קובץ ה-JSON ב-VS Code, ותראה את הבלוב המכיל את פרטי מיקום ה-GPS:

    {"device_id": "gps-sensor", "timestamp": "2021-05-21T00:57:53.878Z", "gps": {"lat": 47.73092, "lon": -122.26206}}
    

משימה - פרוס את אפליקציית הפונקציות שלך לענן

כעת, כשאפליקציית הפונקציות שלך פועלת, תוכל לפרוס אותה לענן.

  1. צור אפליקציית פונקציות חדשה של Azure, תוך שימוש בחשבון האחסון שיצרת קודם. תן לה שם כמו gps-sensor- והוסף מזהה ייחודי בסוף, כמו כמה מילים אקראיות או שמך.

    ⚠️ ניתן לעיין בהוראות ליצירת אפליקציית פונקציות מפרויקט 2, שיעור 5 במידת הצורך.

  2. העלה את הערכים IOT_HUB_CONNECTION_STRING ו-STORAGE_CONNECTION_STRING להגדרות האפליקציה.

    ⚠️ ניתן לעיין בהוראות להעלאת הגדרות אפליקציה מפרויקט 2, שיעור 5 במידת הצורך.

  3. פרוס את אפליקציית הפונקציות המקומית שלך לענן.

⚠️ ניתן לעיין בהוראות לפריסת אפליקציית הפונקציות שלך מפרויקט 2, שיעור 5 במידת הצורך.

🚀 אתגר

נתוני GPS אינם מדויקים לחלוטין, והמיקומים שזוהו יכולים להיות במרחק של כמה מטרים, אם לא יותר, במיוחד במנהרות ובאזורים עם בניינים גבוהים.

חשבו כיצד ניווט לווייני יכול להתגבר על כך? אילו נתונים יש לניווט הלווייני שלכם שיכולים לאפשר לו לבצע תחזיות טובות יותר על המיקום שלכם?

חידון לאחר ההרצאה

חידון לאחר ההרצאה

סקירה ולימוד עצמי

משימה

חקירת קישורי פונקציות


כתב ויתור:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית Co-op Translator. בעוד שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.