איך עובדות רשתות Meshtastic ו-MeshCore

דמיינו שאתם יוצאים לטיול בהרים, מפליגים בים, נמצאים באזור מבודד או אפילו חיים בעיר שבה התקשורת הסלולרית נפלה ואינה זמינה. איך אפשר לשלוח הודעה לחבר שנמצא כמה קילומטרים מכם, בלי אינטרנט, בלי Wi-Fi ובלי לשלם לחברת סלולר? זאת בדיוק הבעיה שרשתות LoRa Mesh מנסות לפתור.

בשנים האחרונות צוברות פופולריות שתי פלטפורמות קוד פתוח שמאפשרות להקים רשתות תקשורת עצמאיות באמצעות משדרי רדיו זעירים וזולים יחסית: Meshtastic ו-MeshCore.

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

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

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

LoRa  – הטכנולוגיה שמאפשרת את כל זה

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

LoRa ,קיצור של Long Range , היא טכנולוגיית אפנון רדיו שפותחה על ידי Semtech ומיועדת להעברת כמויות קטנות יחסית של מידע למרחקים גדולים, תוך שימוש בהספק נמוך. בניגוד ל-Wi-Fi או Bluetooth,  שבהם קצב העברת הנתונים הוא גבוה יחסית, LoRa מקריבה את קצב הנתונים לטובת רגישות קליטה גבוהה ויכולת תקשורת בתנאי קליטה חלשים. לכן היא מתאימה במיוחד להעברת הודעות קצרות, נתוני מיקום ומידע מחיישנים, ולא להעברת קול, תמונות או וידאו.

איך LoRa מעבירה מידע ? Chirp Spread Spectrum

LoRa משתמשת בשיטת אפנון שנקראת  Chirp Spread Spectrum (CSS).

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

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

אחד הפרמטרים החשובים ביותר בהגדרת LoRa הוא ה-Spreading Factor, או בקיצור SF. ה-SF קובע כמה ביטים מקודדים בכל  Symbol וערכיו הם בין 7 ל 12, כך שב sf7 יש לנו 27 כלומר 128 סמלים ובSF12  יש לנו 212 כלומר 4,096 סמלים שונים.

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

יצירת Chirp בסיסי

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

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

 מה קורה בצד המקלט?

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

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

כאשר שני האותות מתאימים זה לזה, השינוי בתדר של האחד מבטל את השינוי בתדר של האחר. התוצאה היא אות בתדר כמעט קבוע. לאחר פעולת ה-Dechirping, המקלט מבצע ניתוח תדרים באמצעות אלגוריתם שנקרא  FFT – Fast Fourier Transformבעל 2sf תאים שהוא אלגוריטם שמפרק אות מורכב לרכיבי התדר השונים שמרכיבים אותו. במקרה שלנו, כאשר ה-Dechirping הצליח, רוב האנרגיה של האות מתרכזת בתדר מסוים. בגרף התוצאה נראה שיא ברור (Peak)שהמיקום שלו מגלה למקלט מה היה היסט ה-Chirp המקורי, ומכאן אפשר לזהות את ערך ה-Symbol ששודר.

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

פרמטרים נוספים שמשפיעים על התקשורת

Bandwidth (BW) – רוחב הפס שבו מתבצע שידור הchirp. ערכים נפוצים הם 125kHz, 250kHz ו-500kHz.. רוחב פס גדול מאפשר קצב נתונים גבוה יותר, אבל בדרך כלל מקטין את רגישות הקליטה.

Coding Rate (CR) – מנגנון תיקון שגיאות (Forward Error Correction) הוא מוסיף מידע עודף שמאפשר למקלט להתמודד עם חלק מהשגיאות שנוצרות במהלך השידור.

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

בסופו של דבר, כל הפרמטרים האלה משפיעים על זמן השידור (Time on Air), על רגישות הקליטה ועל כמות המידע שאפשר להעביר ברשת, וזה מוביל לנקודה חשובה: ברשת LoRa Mesh, זמן האוויר הוא משאב מוגבל. ככל שיש יותר משתמשים ויותר תחנות ממסר, כך חשוב יותר לנהל את התעבורה בצורה יעילה.

השידור כולו כולל 5 חלקים

1. Preamble  – רצף Chirps קבוע וידוע מראש. המקלט מחפש אותו כדי לזהות שיש שידור, להסתנכרן לתזמון ולזהות את מאפייני האות.

2. Sync Word  – ערך שמאפשר למקלט להבחין בין סוגי רשתות או מערכות

3. Start of Frame (SFD) – רצף שמסמן למקלט את נקודת המעבר מסיום הסנכרון לתחילת המידע.

4. Header – מכיל מידע על ה־Payload, האורך שלו, ה־Coding Rate  והאם מצורף CRC. גם ל־Header  עצמו יש בדיקת  CRC

5. Payload – הנתונים שהמשדר רוצה להעביר. במקרה של MeshCore או Meshtastic, זה המקום שבו נמצאת חבילת הפרוטוקול של אותה מערכת.

6. CRC – ערך בדיקה שמאפשר למקלט לזהות אם הנתונים נפגמו במהלך השידור.

 Meshtastic – רשת שבה כל אחד יכול להיות ממסר

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

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

איך הודעה עוברת ברשת?

נניח שמשתמש שולח הודעה לקבוצה. המכשיר שלו משדר את ההודעה באמצעות LoRa. כל תחנה שנמצאת בטווח הקליטה יכולה לקבל אותה. במנגנון שנקרא  Managed Floodingהתחנות אינן משדרות מחדש את ההודעה באופן מיידי. כל תחנה ממתינה פרק זמן קצר, ובודקת אם תחנה אחרת כבר שידרה מחדש את אותה הודעה. אם היא שומעת שההודעה כבר הועברה, היא נמנעת משידור נוסף. כך מנסים לצמצם כפילויות ועומס מיותר על ערוץ הרדיו. זמן ההמתנה אינו אקראי לחלוטין. הוא מושפע גם מאיכות הקליטה (SNR), במטרה לתת עדיפות לתחנות שקלטו את ההודעה בצורה חלשה יותר, שעשויות להיות רחוקות יותר מהמשדר המקורי. לכל הודעה יש גם Hop Limit – מספר התחנות המרבי שדרכן היא יכולה לעבור. בכל העברה הערך קטן באחד, וכאשר הוא מגיע לאפס ההודעה אינה מועברת הלאה.

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

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

מבנה Packet של Meshtastic

הכותרת מכילה את המידע הדרוש לזיהוי ההודעה ולניתוב שלה ברשת.

תפקידגודל [bytes]שדה
מזהה תחנת היעד4Destination
מזהה התחנה השולחת4Sender
מזהה ייחודי לחבילה4Packet ID
Hop Limit, בקשת ACK ומידע נוסף1Flags
זיהוי ערוץ התקשורת1Channel Hash
תחנת הביניים הבאה1Next Hop
תחנת הממסר האחרונה1Relay Node

Destination  ו- Sender : לכל מכשיר ברשת יש Node ID. מזהה זה מבוסס בדרך כלל על CRC32 של המפתח הציבורי של התחנה. אם Destination מכיל את הערך 0xFFFFFFFF, מדובר בהודעת Broadcast ולא בהודעה שמיועדת לתחנה מסוימת.

Packet ID :לכל הודעה יש מזהה ייחודי בן 32 ביט. הוא משמש בין היתר לזיהוי כפילויות ולהתאמת אישורי קבלה (ACK) להודעות המקוריות.

Flags : זהו שדה שמכיל מספר שדות

         Hop Limit (3 ביטים): מספר הקפיצות שנותרו

         Want ACK (ביט אחד): האם יש צורך לאשר

         Via MQTT (ביט אחד): האם ההודעה עברה דרך האינטרנט

         Hop Start (3 ביטים): מיספר הקפיצות המקורי

Channel Hash: מזהה קצר של הערוץ, שעוזר למקלט לזהות באיזה מפתח ערוץ יש להשתמש לצורך פענוח ההודעה.

Next Hop ו Relay Node :שני שדות שמסייעים בניתוב הודעות. Next Hop מציין את תחנת הביניים הבאה, ואילו Relay Node מציין את התחנה שהעבירה את החבילה בשלב הנוכחי.

לאחר מכן מגיע המידע עצמו (Payload).

Meshtastic  משתמשת בProtobuf  פורמט סריאליזציה קומפקטי שמאפשר להגדיר מבני מידע מורכבים בלי לבזבז מקום רב. המבנה המרכזי כולל מספר שדות עד לגודל כולל של 239 בייטים:

שדהמשמעות
Portnumסוג המידע שמועבר
payloadתוכן ההודעה בפועל
want_responseהאם נדרשת תשובה
Destכתובת היעד
sourceכתובת המקור
request_idמזהה בקשה מקורית
reply_idמזהה הודעה שאליה משיבים

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

הכותרת החיצונית נשארת גלויה כדי שתחנות ממסר יוכלו להעביר את ההודעה בלי לדעת את תוכנה. ה-Payload עצמו מוצפן באמצעות AES-256 במצב CTR עבור ערוצים משותפים, או באמצעות מנגנון הצפנה מבוסס מפתחות ציבוריים בהודעות פרטיות  (PKI)לכן תחנת ממסר יכולה לדעת מאיזו תחנה הגיעה החבילה, לאן היא מיועדת ומהם נתוני הניתוב שלה, אבל אינה יכולה לקרוא את תוכן ההודעה ללא מפתח מתאים.

MeshCore – גישה אחרת לניהול רשת

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

נניח שמשתמש A רוצה לשלוח הודעה למשתמש C. בפעם הראשונה, ההודעה יכולה להישלח באמצעות Flood Routing תחנות הממסר המתאימות מעבירות אותה הלאה, עד שהיא מגיעה ליעד. כאשר C מקבל את ההודעה, הוא מחזיר אישור מסירה הכולל מידע על תחנות הממסר שדרכן עברה ההודעה המקורית. A  שומר את המידע הזה כאמצעי להיכרות עם הנתיב. בפעם הבאה שהוא ישלח הודעה לC היא תוכל לעבור דרך תחנות הממסר שהנתיב שלהן כבר ידוע, במקום להפיץ אותה לכל הכיוונים. המנגנון הזה נקרא לעיתים  Source Routingמשום שהשולח מחזיק במידע על הנתיב ומשלב אותו בהודעה. אם תחנת ממסר נעלמת או שהנתיב מפסיק לעבוד, המערכת יכולה לנסות מחדש וללמוד נתיב חלופי.

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

MeshCore  מאפשרת להגדיר כמה סוגים של תחנות:

  • Client  – מכשיר של משתמש, שמתחבר לטלפון או משמש כמסוף עצמאי.
  • Repeater – תחנה שמקבלת הודעות ומעבירה אותן בהתאם לנתיב ולכללי הניתוב.
  • Room Server – תחנה שמאפשרת שירותי תקשורת קבוצתיים ואחסון הודעות (store and deliver) בדרך כלל ישמש גם כממסר

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

מבנה ההודעה בmeshcore הוא קשיח יותר וכולל כתורת של בייט אחד עם השדות

Route Type (2 ביטים) – מגדיר כיצד ההודעה תנותב (flood, direct או שילוב שלהם)

Payload Type (4 ביטים) – מגדיר מה מכילה החבילה (בקשת מידע, תשובה לבקשה, הודעת טקסט או הודעה קבוצתית, פרסום פרטי תחנה, אישור קבלה, מידע על נתיב או איסוף מידע על נתיב

Payload Version (2 ביטים) –  גרסת מבנה המידע

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

לאחר מכן יופיע הנתיב (Path) בשדה בעל אורך משתנה. הוא מכיל גם את מספר התחנות וגם את גודל ה-Hash המשמש לזיהוי כל תחנה.

לבסוף יופיע תוכן ההודעה עצמו (Payload) באופן מוצפן אם צריך עד לגודל 184 בייטים

תדרים ופעילות

תדרי LoRa אינם אחידים בכל העולם. הם פועלים בדרך כלל בתחומי ISM  שהוקצו לשימושים תעשייתיים, מדעיים ורפואיים,

באירופה השימוש הנפוץ הוא סביב 868 MHz, עם מגבלות הספק וזמן שידור

ארה״ב וקנדה התחום הוא 902–928 MHz  בכפוף לכללי הרגולציה המקומיים

בישראל תחום שהוקצה בישראל לשימושי  LoRa הוא 915–917 MHz

קיימים גם מכשירים הפועלים גם בתחומיי ה 433Mhz ו 2.4GHz אך הם נדירים וקשים יותר להשגה

בארץ ישנן 3 רשתות פעילות יחסית:

Meshtastic  בתחום ה433 – https://tools.iarc.org/lora/

Meshtastic בתחום ה900 – https://meshtastic.org.il/

MeshCore בתחום ה900 – https://meshcore.org.il/

בקישורים ניתן למצוא הוראות התקנה ואיך לכוון את הפרמטרים שבשימוש כל רשת

מכשירים

אפשר למצוא מכשירים מוכנים לשימוש, לוחות פיתוח פשוטים, התקני מעקב קטנים ומסופי תקשורת עצמאיים כאשר החברות המובילות הן Heltec, LILYGO, Seeed Studio ו RAK. רוב המקלטים מבוססי מעבד esp32 שמאפשר יכולות גבוהות או nRF52 יעילים למכשירים מופעלי סוללה או ממסרים עם פאנל סולארי. כמעט כולם בעלי ממשק משתמש דרך תוכנה המותקנת על הטלפון הסלולארי או מחשב. לרבים מהמכשירים ניתן לחבר חיישנים, תחנות מזג אוויר, מערכות ניטור, בקרים ואפילו סוכני AI מקומיים לרשת.

Heltec v3 – מכשיר מצויין למתחילים, ניתן להוסיף לו גם מסך וgps

Heltec v4 – גרסא חדשה יותר אך אינה תומכת בתחום ה 433Mhz

Heltec T114 – הגרסא הכי מתקדמת

RAK Wisblock – מכשיר מודולרי, קצת מאתגר להתקנה פיזית אך אמין ומצויין לממסרים בלתי מאויישים

XIAO Lora Module – מקלט מודולרי במגוון מעבדים

Lilygo T-Beam Supreme  – מכשיר הכולל gps וסוללה 18650, מתאים להתקנה ברכבים

Lilygo T-Deck Plus – למתקדמים, נראה כמו מכשיר blackberry  ואינו מצריך חיבור לטלפון כדי לעבוד

Rak WishMesh Tag ו SenseCAP MeshTracker X1 – מכשירים שנראים כמו תג עובד ונוחים לנשיאה

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *