मैं एक 32-बिट माइक्रोकंट्रोलर (सी में लिखा गया प्रोग्राम कोड) का उपयोग कर रहा हूं जिसमें बहुत सीमित फ्लैश स्पेस है जो सेलुलर मॉड्यूल के साथ संचार कर रहा है। मेरे पास एक IoT हब के साथ एक Azure खाता सेटअप है और मैं अपने IoT हब को कुछ डिवाइस-टू-क्लाउड संदेश भेजना चाहता हूं। मैंने अन्य सर्वरों के लिए HTTP और HTTPS संचार दोनों का परीक्षण और पुष्टि की है। हालांकि, मुझे कहीं भी ऐसा नहीं मिल रहा है जो निर्दिष्ट करता है कि डिवाइस-टू-क्लाउड संदेश भेजने के लिए आवश्यक HTTP शीर्षलेख क्या हैं। क्या कोई आवश्यक HTTP संदेश प्रारूप (HTTP प्रारंभ पंक्ति, आवश्यक HTTP शीर्षलेख और HTTP शीर्षलेख मान) का विवरण प्रदान कर सकता है?

मुझे सी के लिए एज़ूर एसडीके मिला, लेकिन यहां तक ​​​​कि सभी ऑप्टिमाइज़ेशन विकल्प चालू होने के बावजूद मेरे माइक्रोकंट्रोलर के लिए बहुत अधिक कोडस्पेस लेता है। मैंने एसडीके में कोड का पालन करने का प्रयास किया है कि HTTP संदेश कैसे बनाया गया है, लेकिन मुझे कुछ टुकड़े याद आ रहे हैं। मेरे पास केवल दो या तीन डिवाइस-टू-क्लाउड संदेश हैं जो मैं भेज रहा हूं, इसलिए मुझे लगता है कि अगर मुझे पता है कि हेडर क्या हैं तो डिवाइस-टू-क्लाउड संदेशों को उत्पन्न करने में अधिक कोड नहीं लगेगा।

मेरे पास सेलुलर मॉड्यूल आपसी टीएलएस प्रमाणीकरण के लिए X.509 प्रमाणपत्रों को संभाल रहा है। मान लें कि काम कर रहा है। इस प्रश्न के लिए मैं केवल Azure IoT डिवाइस-टू-क्लाउड संदेश के लिए आवश्यक HTTP संदेश स्वरूपण खोजने के लिए चिंतित हूं।

संपादित करें: एक टिप्पणी के सुझाव के बाद, मुझे अंततः इस पृष्ठ पर ले जाया गया: https://docs.microsoft.com/en-us/ बाकी/एपीआई/आईओथब/डिवाइस/सेंडडिवाइसईवेंट

सुझाए गए HTTP POST का उपयोग करना (मेरे डिवाइस की विशिष्टताओं के साथ बदल दिया गया है), अब मुझे 401 त्रुटि (IotHubUnauthorizedAccess) मिल रही है। मुझे लगा कि मैं समझ गया हूं कि प्रमाणीकरण कैसे काम करता है, लेकिन मुझे लगता है कि मैं गलत था।

मेरे IoT डिवाइस में एक सममित कुंजी है। मैंने सोचा कि मुझे इस प्रकार स्वरूपित हेडर शामिल करना चाहिए था:

Authorization:SharedAccessKey=<my_primary_key>

लेकिन वह काम नहीं करता। मेरा HTTP शरीर बस है:

{"deviceID":<my_IoT_Device_ID>}

मुझे सममित कुंजी जानकारी कहां शामिल करनी चाहिए, और इसका प्रारूप क्या है?

2
bevenson 7 मई 2019, 20:03

1 उत्तर

सबसे बढ़िया उत्तर

कुछ परीक्षण और त्रुटि के बाद, हमने पाया कि यह जितना हमने सोचा था उससे कहीं अधिक आसान है। यदि आप क्लाइंट प्रमाणीकरण के लिए X.509 प्रमाणपत्रों का उपयोग कर रहे हैं, तो आपको अपना प्रमाणीकरण निर्दिष्ट करने के लिए HTTP संदेश सामग्री में कुछ भी शामिल करने की आवश्यकता नहीं है। प्रमाणीकरण के लिए X.509 प्रमाणपत्रों का उपयोग करने वाले Azure डिवाइस-टू-क्लाउड संदेश के लिए न्यूनतम आवश्यक है:

POST /devices/<id>/messages/events?api-version=2018-06-30 HTTP/1.1
Host:<fully-qualified-iothubname>.azure-devices.net
Content-Length:<number-of-bytes-in-the-JSON-body>

{"deviceID":"<id>",<your-JSON-formatted-custom-d2c-message-data>}

जहां <id> Azure IoT हब पर सूचीबद्ध डिवाइस आईडी है और <fully-qualified-iothubname> IoT हब नाम है। मेरा मानना ​​है कि Azure खंडित एन्कोडिंग का समर्थन करता है यदि आप Content-Length शीर्षलेख का उपयोग करने के बजाय ऐसा करना चाहते हैं।

1
bevenson 15 मई 2019, 16:57