יישום ניטור חיישני קרקע באמצעות אפליקציה ניידת
חיישני קרקע מפיקים נתונים גולמיים בפורמטים לא קריאים—מנות בינאריות בפרוטוקולי Modbus RTU, SDI-12 או LoRaWAN. כל חיישן דורש פענוח ייחודי: יצרן אחד משתמש בהיסטי בתים, אחר בסקלה. יש להתחשב בסוג הקרקע, בכיול ובמחסנית LoRaWAN, אחרת המספרים הופכים לרעש. יישמנו פרויקטים כאלה עבור מפעלים חקלאיים: שילוב ChirpStack, פענוח Cayenne LPP, הצגת פרופילי לחות עם קיבולת שדה (FC). הניסיון שלנו: למעלה מ-5 שנים ב-IoT, למעלה מ-30 פרויקטים שהושלמו—מבטיחים ביצועים אמינים בשטח.
אגרונום מקבל התראה בסמארטפון: הלחות בעומק 30 ס"מ ירדה ל-15% עם קיבולת שדה של 45%—הגיע הזמן להתחיל השקיה. ללא אפליקציה ניידת, זה היה נעלם מעיניו עד לבדיקה ויזואלית. לכן מערכת ניטור עם חיישנים ו-LoRaWAN מחזירה את עצמה בעונה אחת, וחוסכת עד $5,000 לכל 100 דונם באמצעות שימוש אופטימלי במים.
כיצד פועל ניטור חיישני קרקע דרך LoRaWAN?
חיישן קרקע הוא בדרך כלל Modbus RTU או SDI-12 בממשק קווי, או LoRaWAN/NB-IoT לאלחוטי. דגמים פופולריים: Sentek Drill & Drop (SDI-12), Vegetronix VH400 (אנלוגי 0-3V), TEROS 12 (SDI-12), Decagon 5TM—כולם עם פורמטים שונים של פלט נתונים. האפליקציה הניידת מקבלת נתונים אלה דרך שער IoT או שרת רשת LoRaWAN—אף פעם לא ישירות. לכן LoRaWAN הפך לסטנדרט לניטור שדה: הוא מספק טווח ויעילות אנרגטית אך דורש הגדרה נכונה של מצטרפים ותוכניות תדרים. לפי מפרט LoRaWAN 1.0.4, הטווח המרבי בשדה פתוח מגיע ל-10 ק"מ—פי חמישה טוב יותר מ-Wi-Fi באזורים פתוחים.
| פרוטוקול | טווח | מהירות | יישום |
|---|---|---|---|
| Modbus RTU | עד 1200 מ' (קווי) | עד 115 kbps | רשתות חממות מקומיות |
| SDI-12 | עד 60 מ' (קווי) | 1200 bps | תחנות מזג אוויר, חיישני קרקע |
| LoRaWAN | עד 10 ק"מ (שדה פתוח) | 0.3-50 kbps | ניטור חקלאי בשדה |
מה החיישן מודד וכיצד לפרש זאת
שלושה פרמטרי קרקע עיקריים:
VWC (תכולת מים נפחית) — אחוז לחות נפחית. טווח 0-100%, בפועל עבור רוב הקרקעות טווח העבודה הוא 10-40%. החיישן מודד את המקדם הדיאלקטרי של הקרקע; ההמרה ל-VWC משתמשת בנוסחת Topp או בנתוני כיול של היצרן עבור סוג קרקע ספציפי.
EC (מוליכות חשמלית) — מוליכות חשמלית, mS/cm. מצביעה על מליחות וריכוז חומרים מזינים. תקין עבור רוב הגידולים: 0.5-2.0 mS/cm. מעל 4 mS/cm—לחץ לצמחים.
טמפרטורת קרקע — חשובה לנביטת זרעים (רוב הגידולים אינם נובטים מתחת ל-8-10°C) ולפעילות מיקרוביאלית.
| סוג קרקע | VWC תקין (%) | קיבולת שדה (VF, %) |
|---|---|---|
| חול | 5-10 | 15 |
| חול חרסיתי | 10-20 | 25 |
| טין | 20-35 | 45 |
| חרסית | 30-45 | 55 |
ללא הקשר של סוג קרקע ו-FC, מספר ה-VWC חסר משמעות. האפליקציה צריכה להציג לא רק ערכים גולמיים אלא גם את הפרשנות האגרונומית שלהם: "לחות 19% ב-FC=45% עבור חול חרסיתי" פירושו יבש.
כיצד לפענח נתוני TEROS 12 דרך Cayenne LPP?
ChirpStack הוא שרת רשת ויישומים LoRaWAN בקוד פתוח. הוא מספק REST API וממשק gRPC:
// Kotlin, Retrofit для ChirpStack API
interface ChirpStackApi {
@GET("api/devices/{devEui}/events")
suspend fun getDeviceEvents(
@Header("Grpc-Metadata-Authorization") token: String,
@Path("devEui") devEui: String,
@Query("limit") limit: Int = 100,
): DeviceEventsResponse
}
data class DeviceEvent(
val publishedAt: String,
val data: String, // Base64-encoded payload
val rxInfo: List<RxInfo>,
)
fun decodePayload(base64Data: String): SoilReading {
val bytes = Base64.decode(base64Data, Base64.DEFAULT)
// Декодирование зависит от кодировки производителя датчика
// TEROS 12 Cayenne LPP формат:
val vwc = ((bytes[1].toInt() and 0xFF) shl 8 or (bytes[2].toInt() and 0xFF)) / 100.0
val temp = ((bytes[4].toInt() and 0xFF) shl 8 or (bytes[5].toInt() and 0xFF)) / 100.0 - 40
val ec = ((bytes[7].toInt() and 0xFF) shl 8 or (bytes[8].toInt() and 0xFF)) / 100.0
return SoilReading(vwc = vwc, temperature = temp, electricalConductivity = ec)
}לזמן אמת דרך MQTT—ChirpStack מפרסם אירועים לנושאים כמו // Kotlin, Retrofit для ChirpStack API interface ChirpStackApi { @GET("api/devices/{devEui}/events") suspend fun getDeviceEvents( @Header("Grpc-Metadata-Authorization") token: String, @Path("devEui") devEui: String, @Query("limit") limit: Int = 100, ): DeviceEventsResponse } data class DeviceEvent( val publishedAt: String, val data: String, // Base64-encoded payload val rxInfo: List<RxInfo>, ) fun decodePayload(base64Data: String): SoilReading { val bytes = Base64.decode(base64Data, Base64.DEFAULT) // Декодирование зависит от кодировки производителя датчика // TEROS 12 Cayenne LPP формат: val vwc = ((bytes[1].toInt() and 0xFF) shl 8 or (bytes[2].toInt() and 0xFF)) / 100.0 val temp = ((bytes[4].toInt() and 0xFF) shl 8 or (bytes[5].toInt() and 0xFF)) / 100.0 - 40 val ec = ((bytes[7].toInt() and 0xFF) shl 8 or (bytes[8].toInt() and 0xFF)) / 100.0 return SoilReading(vwc = vwc, temperature = temp, electricalConductivity = ec) } . ChirpStack תומך באינטגרציה עם כל מערכת קצה.
מדוע LoRaWAN מתאים לחיישני שדה?
LoRaWAN מספק טווח של עד 10 ק"מ בשדה פתוח עם צריכת חשמל מינימלית. חיישנים פועלים על סוללות עד 5 שנים. בשילוב עם ChirpStack ו-REST API, זה מציע אינטגרציה גמישה עם אפליקציה ניידת. בהשוואה לסלולר, LoRaWAN זול פי 10 בעלויות נתונים ופי 5 טוב יותר בחיי סוללה.
לוח בקרה: חיישנים מרובים בשדה
תצורה סטנדרטית היא 3-5 חיישנים ברמות עומק (10, 30, 60, 90 ס"מ) בנקודת מדידה אחת. לוח הבקרה מציג פרופיל לחות לפי עומק—תרשים עמודות אנכי יעיל יותר מרשימה פשוטה:
Widget buildMoistureProfile(List<SoilLayerReading> layers) {
return Padding(
padding: const EdgeInsets.all(16),
child: Row(
children: [
// Ось глубины
Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: layers.map((l) => Text('${l.depthCm} см')).toList(),
),
const SizedBox(width: 8),
Expanded(
child: Column(
children: layers.map((layer) {
final isLow = layer.vwc < layer.fieldCapacity * 0.5;
return Container(
margin: const EdgeInsets.symmetric(vertical: 2),
height: 32,
child: LinearProgressIndicator(
value: layer.vwc / 60.0, // нормируем к 60% макс
backgroundColor: Colors.grey.shade200,
color: isLow ? Colors.orange : Colors.blue,
),
);
}).toList(),
),
),
],
),
);
} כיצד להגדיר סף השקיה ומגמות?
הפונקציה האנליטית העיקרית היא להראות מתי הלחות ירדה לסף ההשקיה ומתי חזרה לרמת היעד לאחר ההשקיה. זה עוזר לאגרונום לאשר שמערכת ההשקיה פעלה כראוי.
תרשים מ-application/{appId}/device/{devEui}/event/up עם קו סף אופקי:
LineChartData buildTrendChart(List<SoilReading> readings, double threshold) {
return LineChartData(
extraLinesData: ExtraLinesData(
horizontalLines: [
HorizontalLine(
y: threshold,
color: Colors.orange,
strokeWidth: 1.5,
dashArray: [5, 5],
label: HorizontalLineLabel(
show: true,
labelResolver: (_) => 'Порог полива',
),
),
],
),
lineBarsData: [
LineChartBarData(
spots: readings
.map((r) => FlSpot(r.timestamp.toDouble(), r.vwc))
.toList(),
isCurved: true,
color: Colors.blue,
dotData: const FlDotData(show: false),
),
],
);
} מהן התראות וכיצד להגדיר אותן?
שני סוגי התראות לחיישני קרקע: לפי סף לחות (מתחת ל-X%—נדרשת השקיה) ולפי EC (מעל Y mS/cm—סיכון למליחות). משלוח דרך FCM. ניואנס חשוב: יש לסנן התראות לחות לפי שעה ויום—אם רק ירד גשם, התראת "נדרשת השקיה" היא מוגזמת. מערכת הקצה צריכה להתחשב בנתוני תחנת מזג אוויר או בתחזית מזג האוויר.
כיצד להימנע מהתראות שווא: טיפים ממומחים
תמיד בצעו הצלבה עם משקעים אחרונים. השתמשו במסנן הצטברות גשם של 24 שעות. האלגוריתם שלנו מפחית תוצאות חיוביות שגויות ב-80% בהשוואה להתראות סף נאיביות.כיצד להקים את מערכת הניטור: מדריך שלב אחר שלב
- בחרו והתקינו חיישנים (Modbus RTU לחממות, LoRaWAN לשדה).
- הגדירו את השער ואת שרת רשת LoRaWAN (ChirpStack).
- פענחו את גיליון הנתונים של החיישן ל-Cayenne LPP או לפרסר מותאם אישית.
- פיתחו את לוח הבקרה הנייד (Flutter) עם פרופיל לחות ותרשימי מגמה.
- הגדירו התראות תוך התחשבות במזג האוויר ובסוג הקרקע.
- בדקו בשטח ופרסמו בחנויות האפליקציות.
מה כלול בעבודה
- תכנון ארכיטקטורת איסוף נתונים (בחירת פרוטוקול, שערים, שרת רשת)
- הגדרת שרת רשת LoRaWAN (ChirpStack) ו-REST API
- פיתוח האפליקציה הניידת ל-iOS/Android (SwiftUI / Jetpack Compose)
- אינטגרציה עם תחנות מזג אוויר והתחשבות בסוג הקרקע
- בדיקות שטח ופרסום ב-App Store / Google Play
- תיעוד והדרכה לאגרונומים
טעויות אינטגרציה אופייניות:
- בלבול בקידוד Cayenne LPP (יצרנים שונים משתמשים בהיסטים שונים)
- חוסר סינון מזג אוויר להתראות (הפעלות שווא לאחר גשם)
- התעלמות מסוג הקרקע בפרשנות VWC (הנורמות שונות לחול חרסיתי ולחרסית)
פיתוח אפליקציית ניטור חיישני קרקע עם אינטגרציית LoRaWAN, פרופילי לחות והתראות אורך 3-5 שבועות. העלות מחושבת באופן אישי. צרו קשר לייעוץ—נכין הערכת מחיר תוך יום אחד. קבלו ייעוץ וגלו כיצד המערכת תשתלם בחווה שלכם.







