2017-01-27 60 views
0

NodeMCUを使用してイベントハブにイベントを送信できます。私は、次のコードRESTを使用してAzureイベントハブにバッチイベントを送信する

https://www.hackster.io/stepanb/proof-of-concept-nodemcu-arduino-and-azure-event-hub-a33043

を使用しかし、私は、バッチイベントを送信します。私はここでは

に「コンテンツタイプ」を変更する必要がリンクを1として、単一のイベント

single event

を送るNodeMCUのシリアルモニターのスナップショットだと

https://docs.microsoft.com/en-us/rest/api/eventhub/send-batch-events

ために、このページを参照し

Content-Type: application/vnd.microsoft.servicebus.json 

の形式のペイロード
data= "[{'Temperature':25.25 , 'Deviceid':esp3} , {'Temperature':30.30 , 'Deviceid':esp3}]"; 

ここでは、私が何かをバッチイベント

batch events

のシリアルモニターのスナップショットが足りないのか?バッチイベントを受信するには、ストリームアナリティクスの変更を行う必要があります。私はAzureとStackOverflowの新機能です。ここ

は動作し、私はテーブルのストレージに値を格納することが可能だと私はAzureテーブルストレージを使用して見ることができ、単一のイベントを送信するためのコードを単一のイベント

#include <ESP8266WiFi.h> 
#include <WiFiClientSecure.h> 
#include <String.h> 
#include "sha256.h" 
#include "Base64.h" 

// START: Azure Evet Hub settings 
const char* KEY = "dhGE6MbbRLe6IPZs6dOHd3byQlEJ8YzqnW+uBAT7T/Q="; // main event hub key 
const char* KEY_NAME = "RootManageSharedAccessKey";     // key name 
const char* HOST = "rishieventhub2.servicebus.windows.net";   // event hub name 
const char* END_POINT = "/rishidata/messages";      // name of eventhub created inside event hub 
// END: Azure Evet Hub settings 

// START: WiFi settings 
const char* SSID = "Nokia"; 
const char* PASSWORD = "rishikesh"; 
// END: WiFi settings 
String request; 
String data; 
String fullSas; 
WiFiClientSecure client; 
void setup() { 
    Serial.begin(115200); 
    Serial.println(); 
    Serial.println(); 

    // START: Naive URL Encode 
    String url = "https://" + (String)HOST + (String)END_POINT; 
    url.replace(":", "%3A"); 
    url.replace("/", "%2F"); 
    Serial.println(url); 
    // END: Naive URL Encode 

    // START: Create SAS 
    // https://azure.microsoft.com/en-us/documentation/articles/service-bus-sas-overview/ 
    // Where to get secods since the epoch: local service, SNTP, RTC 
    int expire = 1711104241; 
    String stringToSign = url + "\n" + expire; 

    // START: Create signature 
    Sha256.initHmac((const uint8_t*)KEY, 44); 
    Sha256.print(stringToSign); 
    char* sign = (char*) Sha256.resultHmac(); 
    int signLen = 32; 
    // END: Create signature 

    // START: Get base64 of signature 
    int encodedSignLen = base64_enc_len(signLen); 
    char encodedSign[encodedSignLen]; 
    base64_encode(encodedSign, sign, signLen); 
    String encodedSas = (String) encodedSign; 
    // Naive URL encode 
    encodedSas.replace("=", "%3D"); 
    Serial.println(encodedSas); 
    // END: Get base64 of signature 

    // SharedAccessSignature 
    fullSas = "sr=" + url + "&sig="+ encodedSas + "&se=" + expire +"&skn=" + KEY_NAME; 
    // END: create SAS 

    // START: Wifi connection 
    Serial.print("connecting to "); 
    Serial.println(SSID); 

    WiFi.begin(SSID, PASSWORD); 
    while (WiFi.status() != WL_CONNECTED) { 
    delay(1000); 
    Serial.print("."); 
    } 

    Serial.println(""); 
    Serial.println("WiFi connected"); 
    Serial.println("IP address: "); 
    Serial.println(WiFi.localIP()); 
    // END: Wifi connection 

} 
int temp=15; 
void loop() { 
    WiFiClientSecure client; 
    if (!client.connect(HOST, 443)) { 
    Serial.println("connection failed"); 
    return; 
    } 

    //data= "[{'Temperature':25.25 , 'Deviceid':'esp3'} , {'Temperature':30.30 , 'Deviceid':'esp3'}]"; // for batch events 
    data = "{'Temperature':25.25 , 'Deviceid':'esp3'}"; // for single events 
    request = String("POST ")+"https://rishieventhub2.servicebus.windows.net" + END_POINT + "?timeout=60&api-version=2014-01" + " HTTP/1.1\r\n" + 
       "Host: " + HOST + "\r\n" + 
       "Authorization: SharedAccessSignature " + fullSas + "\r\n" +     
       "Content-Type: application/atom+xml;type=entry;charset=utf-8\r\n" + 
       "Content-Length: " + data.length() + "\r\n\r\n" + 
       data; 
    Serial.println(request); 
    client.print(request); 

delay(100); 

を送信するためのコードです。 は、ここで私は上記のコードは、バッチイベントを送信するために働くバッチイベント

#include <ESP8266WiFi.h> 
#include <WiFiClientSecure.h> 
#include <String.h> 
#include "sha256.h" 
#include "Base64.h" 

// START: Azure Evet Hub settings 
const char* KEY = "dhGE6MbbRLe6IPZs6dOHd3byQlEJ8YzqnW+uBAT7T/Q="; // main event hub key 
const char* KEY_NAME = "RootManageSharedAccessKey";     // key name 
const char* HOST = "rishieventhub2.servicebus.windows.net";   // event hub name 
const char* END_POINT = "/rishidata/messages";      // name of eventhub created inside event hub 
// END: Azure Evet Hub settings 

// START: WiFi settings 
const char* SSID = "Nokia"; 
const char* PASSWORD = "rishikesh"; 
// END: WiFi settings 
String request; 
String data; 
String fullSas; 
WiFiClientSecure client; 
void setup() { 
    Serial.begin(115200); 
    Serial.println(); 
    Serial.println(); 

    // START: Naive URL Encode 
    String url = "https://" + (String)HOST + (String)END_POINT; 
    url.replace(":", "%3A"); 
    url.replace("/", "%2F"); 
    Serial.println(url); 
    // END: Naive URL Encode 

    // START: Create SAS 
    // https://azure.microsoft.com/en-us/documentation/articles/service-bus-sas-overview/ 
    // Where to get secods since the epoch: local service, SNTP, RTC 
    int expire = 1711104241; 
    String stringToSign = url + "\n" + expire; 

    // START: Create signature 
    Sha256.initHmac((const uint8_t*)KEY, 44); 
    Sha256.print(stringToSign); 
    char* sign = (char*) Sha256.resultHmac(); 
    int signLen = 32; 
    // END: Create signature 

    // START: Get base64 of signature 
    int encodedSignLen = base64_enc_len(signLen); 
    char encodedSign[encodedSignLen]; 
    base64_encode(encodedSign, sign, signLen); 
    String encodedSas = (String) encodedSign; 
    // Naive URL encode 
    encodedSas.replace("=", "%3D"); 
    Serial.println(encodedSas); 
    // END: Get base64 of signature 

    // SharedAccessSignature 
    fullSas = "sr=" + url + "&sig="+ encodedSas + "&se=" + expire +"&skn=" + KEY_NAME; 
    // END: create SAS 

    // START: Wifi connection 
    Serial.print("connecting to "); 
    Serial.println(SSID); 

    WiFi.begin(SSID, PASSWORD); 
    while (WiFi.status() != WL_CONNECTED) { 
    delay(1000); 
    Serial.print("."); 
    } 

    Serial.println(""); 
    Serial.println("WiFi connected"); 
    Serial.println("IP address: "); 
    Serial.println(WiFi.localIP()); 
    // END: Wifi connection 

} 
int temp=15; 
void loop() { 
    WiFiClientSecure client; 
    if (!client.connect(HOST, 443)) { 
    Serial.println("connection failed"); 
    return; 
    } 

    data= "[{'Temperature':25.25 , 'Deviceid':'esp3'} , {'Temperature':30.30 , 'Deviceid':'esp3'}]"; // for batch events 
    // data = "{'Temperature':25.25 , 'Deviceid':'esp3'}"; // for single events 
    request = String("POST ")+"https://rishieventhub2.servicebus.windows.net" + END_POINT + "?timeout=60&api-version=2014-01" + " HTTP/1.1\r\n" + 
       "Host: " + HOST + "\r\n" + 
       "Authorization: SharedAccessSignature " + fullSas + "\r\n" +     
       "Content-Type: application/vnd.microsoft.servicebus.json" +"\r\n" + 
       "Content-Length: " + data.length() + "\r\n\r\n" + 
       data; 
    Serial.println(request); 
    client.print(request); 

delay(100); 

} 
+0

テキストのスクリーンショットをコピーして貼り付けできるのはなぜですか?関連するコードはすべて、記事自体の中になければならず、最終的には死んでしまうリンクの背後にある必要はありません。 –

答えて

0

を送信しようとしていますコードです。 1つの変更点は、ストリーム分析では、出力(テーブルストレージ)のパーティションキーと行キーに異なるキーが必要であるということです。単一のイベントを送信する場合、パーティションと行キーは同じにすることができます。

関連する問題