C 使用REST将批处理事件发送到Azure事件中心

C 使用REST将批处理事件发送到Azure事件中心,c,azure,arduino,azure-eventhub,arduino-esp8266,C,Azure,Arduino,Azure Eventhub,Arduino Esp8266,我能够使用NodeMCU将事件发送到事件中心。我使用以下代码 但我想发送批处理事件。为此我参考了这一页 下面是发送单个事件的NodeMCU串行监视器的快照 根据链接,我们必须将“内容类型”更改为 以及格式中的有效载荷 data= "[{'Temperature':25.25 , 'Deviceid':esp3} , {'Temperature':30.30 , 'Deviceid':esp3}]"; 下面是批处理事件的串行监视器的快照 我错过什么了吗?为了接收批处理事件,我需要对流分析

我能够使用NodeMCU将事件发送到事件中心。我使用以下代码

但我想发送批处理事件。为此我参考了这一页

下面是发送单个事件的NodeMCU串行监视器的快照

根据链接,我们必须将“内容类型”更改为

以及格式中的有效载荷

data= "[{'Temperature':25.25 , 'Deviceid':esp3} , {'Temperature':30.30 , 'Deviceid':esp3}]";
下面是批处理事件的串行监视器的快照

我错过什么了吗?为了接收批处理事件,我需要对流分析进行任何更改。我是Azure和StackOverflow的新手

以下是发送单个事件的代码

#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);
#包括
#包括
#包括
#包括“sha256.h”
#包括“Base64.h”
//开始:Azure Evet中心设置
const char*KEY=“dhge6mbrle6ipzs6dohd3byqlej8yzqnw+uBAT7T/Q=”;//主事件中心键
const char*KEY_NAME=“RootManageSharedAccessKey”//键名
const char*HOST=“rishieventhub2.servicebus.windows.net”;//事件中心名称
const char*END_POINT=“/rishidata/messages”;//在事件中心内创建的事件中心的名称
//结束:Azure Evet中心设置
//开始:WiFi设置
const char*SSID=“诺基亚”;
const char*PASSWORD=“rishikesh”;
//结束:WiFi设置
字符串请求;
字符串数据;
字符串fullSas;
WiFiClientSecure客户端;
无效设置(){
序列号开始(115200);
Serial.println();
Serial.println();
//开始:原始URL编码
String url=“https://”+(字符串)主机+(字符串)端点;
url.replace(“:”,“%3A”);
url.replace(“/”,“%2F”);
Serial.println(url);
//结束:原始URL编码
//开始:创建SAS
// https://azure.microsoft.com/en-us/documentation/articles/service-bus-sas-overview/
//从新纪元开始在哪里获得secods:本地服务、SNTP、RTC
int=1711104241;
字符串stringToSign=url+“\n”+过期;
//开始:创建签名
Sha256.initHmac((const uint8_t*)键,44);
Sha256.打印(stringToSign);
char*sign=(char*)Sha256.resultmac();
int-signLen=32;
//结束:创建签名
//开始:获取签名的base64
int encodedSignLen=base64_enc_len(signLen);
char encodedSign[encodedSignLen];
base64_编码(encodedSign、sign、signLen);
字符串encodedSas=(字符串)encodedSign;
//朴素URL编码
encodedSas.replace(“=”,“%3D”);
Serial.println(encodedSas);
//结束:获取签名的base64
//共享签名
fullSas=“sr=“+url+”&sig=“+encodedSas+”&se=“+expire+”&skn=“+KEY\u NAME;
//结束:创建SAS
//开始:Wifi连接
串行打印(“连接到”);
序列号println(SSID);
WiFi.begin(SSID,密码);
while(WiFi.status()!=WL_已连接){
延迟(1000);
连续打印(“.”);
}
Serial.println(“”);
Serial.println(“WiFi连接”);
Serial.println(“IP地址:”);
Serial.println(WiFi.localIP());
//结束:Wifi连接
}
内部温度=15;
void循环(){
WiFiClientSecure客户端;
如果(!client.connect(主机,443)){
Serial.println(“连接失败”);
返回;
}
//data=“[{'Temperature':25.25,'Deviceid':'esp3'},{'Temperature':30.30,'Deviceid':'esp3'}]”;//对于批处理事件
data=“{'Temperature':25.25,'Deviceid':'esp3'}”//用于单个事件
请求=字符串(“POST”)+“https://rishieventhub2.servicebus.windows.net“+结束点+”?超时=60&api版本=2014-01“+”HTTP/1.1\r\n”+
主机:“+Host+”\r\n+
“授权:SharedAccessSignature”+fullSas+“\r\n”+
“内容类型:应用程序/atom+xml;类型=条目;字符集=utf-8\r\n”+
内容长度:“+data.Length()+”\r\n\r\n+
数据;
Serial.println(请求);
客户。打印(请求);
延迟(100);
发送单个事件的代码工作正常,我可以将值存储在表存储中,并且可以使用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/vnd.microsoft.servicebus.json" +"\r\n" + 
               "Content-Length: " + data.length() + "\r\n\r\n" +
               data;
    Serial.println(request);
    client.print(request);

 delay(100);

}
#包括
#包括
#包括
#包括“sha256.h”
#包括“Base64.h”
//开始:Azure Evet中心设置
const char*KEY=“dhge6mbrle6ipzs6dohd3byqlej8yzqnw+uBAT7T/Q=“;//主事件中心键
const char*KEY_NAME=“RootManageSharedAccessKey”;//键名
const char*HOST=“rishieventhub2.servicebus.windows.net”;//事件中心名称
const char*END_POINT=“/rishidata/messages”;//在事件中心内创建的事件中心的名称
//结束:Azure Evet中心设置
//开始:WiFi设置
const char*SSID=“诺基亚”;
const char*PASSWORD=“rishikesh”;
//结束:WiFi设置
字符串请求;
字符串数据;
字符串fullSas;
WiFiClientSecure客户端;
无效设置(){
序列号开始(115200);
Serial.println();
Serial.println();
//开始:原始URL编码
String url=“https://”+(字符串)主机+(字符串)端点;
url.replace(“:”,“%3A”);
url.replace(“/”,“%2F”);
Serial.println(url);
//结束:原始URL编码
//开始:创建SAS
// https://azure.microsoft.com/en-us/documentation/articles/service-bus-sas-overview/
//从新纪元开始在哪里获得secods:本地服务、SNTP、RTC
int=1711104241;
字符串stringToSign=url+“\n”+过期;
//开始:创建签名
Sha256.initHmac((const uint8_t*)键,44);
Sha256.打印(stringToSign);
char*sign=(char*)Sha256.resultmac();
int-signLen=32;
//结束:创建签名
//开始:获取签名的base64
int encodedSignLen=base64_enc_len(signLen);
char encodedSign[encodedSignLen];
base64_编码(encodedSign、sign、signLen);
字符串encodedSas=(字符串)encodedSign;
//朴素URL编码
encodedSas.replace(“=”,“%3D”);
Serial.println(encodedSas);
//结束:获取签名的base64
//共享签名
fullSas=“sr=“+url+”&sig=“+encodedSas+”&se=“+expire+”&skn=“+KEY\u NAME;
//结束:创建SAS
//开始:Wifi连接
串行打印(“连接到”);
序列号println(SSID);
WiFi.begin(SSID,密码);
while(WiFi.status()!=WL_
#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);

}