आईओटी मीटर: किसी डिवाइस का पंजीकरण और उसके द्वारा प्राप्त रीडिंग पर हस्ताक्षर करने का तरीका
IoT डिवाइस: एक AMI या IoT एंडपॉइंट को रजिस्टर करें, उसका सीक्रेट कॉपी करें (जो एक बार दिखाया जाता है), उसे नए सीक्रेट से बदलें, और डिवाइस /api/public/utilities/iot/reads पर प्रत्येक अनुरोध को कैसे साइन करता है — एक उदाहरण अनुरोध, उसकी सीमाएं और उसे मिलने वाले सभी उत्तरों के साथ।
एक AMI या IoT मीटर HTTPS के माध्यम से TRANXACT को अपनी रीडिंग भेजता है। प्रत्येक डिवाइस के पास सर्वर द्वारा बनाई गई एक कुंजी (utd_ के बाद 24 अक्षर और अंक) और एक गुप्त कोड होता है। डिवाइस प्रत्येक अनुरोध पर अपनी पहचान प्रमाणित करता है, इसलिए कोई अन्य व्यक्ति उस मीटर की रीडिंग नहीं भेज सकता।
किसी उपकरण का पंजीकरण करना
- CRM खोलें › यूटिलिटीज › यूटिलिटी मीटर और रीडिंग › IoT डिवाइस और नया बटन दबाएं।
- एक लेबल दर्ज करें, वह मीटर चुनें जिसे वह पढ़ता है, और निम्नलिखित में से किसी एक के साथ संकेत चुनें: hmac (प्रत्येक अनुरोध का एक HMAC-SHA256 हस्ताक्षर - अनुशंसित), bearer (टोकन के रूप में भेजी गई कुंजी और गुप्त कुंजी) या दोनों।
- इस डिवाइस के लिए रीड्स प्रति मिनट को अधिकतम सीमा पर सेट करें, और यदि आपको फर्मवेयर पता हो तो उसे भी सेट करें।
- सहेजें। उत्तर में कुंजी और गुप्त कोड दोनों दिखाई देंगे: "गुप्त कोड को अभी कॉपी करें - यह दोबारा नहीं दिखाया जाएगा।" दोनों को डिवाइस की कॉन्फ़िगरेशन में डालें।
गुप्त जानकारी केवल एक बार दिखाई जाती है। इसके बाद इसे कभी भी सूचीबद्ध नहीं किया जाता, यहां तक कि प्रशासक को भी नहीं; सूची में केवल इसके अंतिम चार अक्षर ही दिखाई देते हैं (गुप्त जानकारी समाप्त)। यदि यह खो जाए, तो एक नई गुप्त जानकारी जारी करें।
रहस्य को घुमाना
डिवाइस की पंक्ति पर 'नया सीक्रेट' बटन दबाएं और पुष्टि करें। नया सीक्रेट एक बार दिखाया जाएगा और उसी क्षण पुराना सीक्रेट काम करना बंद कर देगा, इसलिए डिवाइस को तुरंत नया सीक्रेट दें। डिवाइस को रोटेट किए बिना बंद करने के लिए स्टेटस को 'डिसेबल्ड' पर सेट करें, या सेवा से हटाए जाने पर 'रिटायर्ड' पर सेट करें।
कोई उपकरण रीडिंग को कैसे साइन करता है
- JSON बॉडी बनाएं: पढ़ने की एक सूची, जिसमें प्रत्येक में read_at (ISO 8601 समय) और reading शामिल हो। बैटरी, सिग्नल, फर्मवेयर और अलार्म वैकल्पिक हैं।
- टाइमस्टैम्प के रूप में वर्तमान यूनिक्स समय को सेकंड में लें।
- डिवाइस सीक्रेट के अंतर्गत, टाइमस्टैम्प, पूर्ण विराम और बॉडी के सटीक बाइट्स ( “<timestamp>.<body>”) का HMAC-SHA256 मान ज्ञात कीजिए। इसे 64 छोटे अक्षरों वाले हेक्साडेसिमल वर्णों में लिखिए।
- X-Utility-Device (कुंजी), X-Utility-Timestamp और X-Utility-Signature (हेक्स, वैकल्पिक रूप से sha256= उपसर्ग के साथ) हेडर के साथ बॉडी को /api/public/utilities/iot/reads पर POST करें।
POST https://<your-tranxact-host>/api/public/utilities/iot/reads
Content-Type: application/json
X-Utility-Device: <utd_DEVICE_KEY>
X-Utility-Timestamp: <1792252800>
X-Utility-Signature: sha256=<64 hex characters>
{"reads":[{"read_at":"<2026-10-17T09:30:00Z>","reading":<48213.4>}],
"battery_pct":<87>,"signal_dbm":<-71>,"firmware":"<2.4.1>",
"alarms":[{"type":"<leak>","detail":"<continuous flow 6 h>"}]}
किसी डिवाइस को इंस्टॉल करने से पहले उसका परीक्षण करने के लिए, शेल में भी उसी सिग्नेचर का उपयोग किया गया:
BODY='{"reads":[{"read_at":"<2026-10-17T09:30:00Z>","reading":<48213.4>}]}'
TS=$(date +%s)
SIG=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "<DEVICE_SECRET>" | sed 's/^.* //')
curl -X POST "https://<your-tranxact-host>/api/public/utilities/iot/reads" \
-H "Content-Type: application/json" \
-H "X-Utility-Device: <utd_DEVICE_KEY>" \
-H "X-Utility-Timestamp: $TS" \
-H "X-Utility-Signature: sha256=$SIG" \
--data-binary "$BODY"
भेजे गए डेटा पर सटीक हस्ताक्षर करें। हस्ताक्षर करने के बाद JSON को पुनः स्वरूपित करने या उसे किसी भिन्न पंक्ति के अंत के साथ भेजने से डेटा बदल जाता है और हस्ताक्षर मेल नहीं खाता।
बियरर (या दोनों) पर सेट किया गया डिवाइस इसके बजाय Authorization: Bearer <utd_DEVICE_KEY>.<DEVICE_SECRET> भेज सकता है और कोई सिग्नेचर हेडर नहीं भेज सकता है। HMAC अधिक सुरक्षित विकल्प है: गुप्त कुंजी कभी भी स्थानांतरित नहीं होती है और कैप्चर किए गए अनुरोध को दोबारा नहीं चलाया जा सकता है।
सीमाएं
- टाइमस्टैम्प सर्वर की घड़ी से 5 मिनट के भीतर होना चाहिए: डिवाइस की घड़ी को एनटीपी द्वारा सेट रखें।
- एक ही हस्ताक्षरित अनुरोध को दो बार भेजे जाने पर उसे पुनः अनुरोध मानकर अस्वीकार कर दिया जाता है। पहले से फ़ाइल में मौजूद रीड रिक्वेस्ट को डुप्लिकेट माना जाता है और उसे एक बार ही स्टोर किया जाता है।
- एक अनुरोध में अधिकतम 64 केबी और 500 रीड्स, डिवाइस की स्वयं की प्रति मिनट रीड्स की अधिकतम सीमा और एक पते से प्रति मिनट 600 अनुरोध।
- डिवाइस सक्रिय होना चाहिए और मीटर से जुड़ा होना चाहिए।
डिवाइस को क्या वापस मिलता है
| उत्तर | अर्थ |
|---|---|
| स्वीकृत, डुप्लिकेट, अपवाद, अस्वीकृत, अलार्म और समस्याओं के साथ 201 या 200 | अनुरोध स्वीकार कर लिया गया। प्रत्येक रीड की गणना की जाती है; समस्या उन सभी रीड को दर्शाती है जो अपने इंडेक्स के आधार पर मान्य नहीं थीं। |
| 401 डिवाइस_प्रमाणीकरण | अज्ञात या निष्क्रिय कुंजी, गलत मोड, या मेल न खाने वाला हस्ताक्षर। डिवाइस के अस्वीकृत अनुरोधों की संख्या बढ़ जाती है। |
| 401 बासी_टाइमस्टैम्प | टाइमस्टैम्प में 5 मिनट से अधिक की त्रुटि है। |
| 409 रीप्ले | यह हस्ताक्षरित अनुरोध पहले ही प्राप्त हो चुका है। |
| 413 बहुत अधिक बार पढ़ा गया | एक ही अनुरोध में 500 से अधिक बार पढ़ा गया। |
| 422 no_meter | यह उपकरण मीटर से जुड़ा हुआ नहीं है। |
| 429 दर सीमित | यह अपनी सीमा से अधिक तेज़ी से भेज रहा है। कृपया प्रतीक्षा करें और दोबारा भेजें। |
| 400 खराब_जेसन | बॉडी JSON फॉर्मेट में नहीं है। |
| 403 यूटिलिटीज_ऑफ | कंपनी के लिए बिजली और अन्य आवश्यक सेवाएं बंद कर दी गई हैं। |
स्वास्थ्य और अलार्म
- प्रत्येक अनुरोध डिवाइस की अंतिम बार देखी गई स्थिति, बैटरी प्रतिशत और सिग्नल डीबीएम को अपडेट करता है। 15% से कम बैटरी होने पर बैटरी लो अलार्म बजता है।
- कोई डिवाइस निम्नलिखित प्रकार के अलार्म भेज सकता है: बैटरी कम, छेड़छाड़, रिसाव, विपरीत प्रवाह, प्रवाह नहीं, ऑफ़लाइन और अन्य। प्रत्येक डिवाइस के लिए प्रत्येक प्रकार का एक ही अलार्म खुला रहता है।
- डिवाइस अलार्म उन्हें सूचीबद्ध करता है; क्लियर करने पर एक नोट के साथ अलार्म बंद हो जाता है। रिसाव होने पर अपने आप ही उच्च प्राथमिकता वाली रिसाव जांच सेवा आदेश जारी हो जाता है; छेड़छाड़ या रिवर्स फ्लो अलार्म होने पर भी सेवा आदेश जारी हो जाता है।
- डैशबोर्ड के आईओटी मीटर द्वारा रिपोर्ट किया गया (24 घंटे का) आंकड़ा पिछले दिन से संपर्क में आए सक्रिय उपकरणों की संख्या बताता है।