我有5台设备连接到物联网集线器。此设备发送消息,我已将此消息保存到Azure存储表not blob。
我是根据这本指南做任何事情的https://blog.maximerouiller.com/post/persisting-iot-device-messages-into-cosmosdb-with-azure-functions-and-iot-hub/不幸的是,我可以毫无问题地添加输入和输出,不幸的是,我无法编写将此数据保存到表中的函数代码:(
我可以将数据从物联网中心保存到Blob存储,从具有流分析的物联网中心保存到表存储,但如果没有SA,我无法将数据从物联网中心保存到表存储:(
以下是C#Azure Function V2的代码,该代码将数据保存到存储表中,使用DeviceId作为分区密钥,使用MessageId作为RowKey:
public static class IotHubToTableStorage
{
private static CloudTable _outputTable = CloudTableHelper.GetCloudTable("MyTableName");
[FunctionName("IotHubToTableStorage")]
public static async Task Run([EventHubTrigger("messages/events", Connection = "myConnectionString", ConsumerGroup = "myTablestorageConsumerGroup")]EventData eventData,
ILogger log)
{
string message = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count);
var deviceData = JsonConvert.DeserializeObject<JObject>(message);
var dynamicTableEntity = new DynamicTableEntity();
foreach (KeyValuePair<string, JToken> keyValuePair in deviceData)
{
if (keyValuePair.Key.Equals("deviceId"))
{
dynamicTableEntity.PartitionKey = keyValuePair.Value.ToString();
}
else if (keyValuePair.Key.Equals("messageId"))
{
dynamicTableEntity.RowKey = keyValuePair.Value.ToString();
}
else
{
dynamicTableEntity.Properties.Add(keyValuePair.Key, EntityProperty.CreateEntityPropertyFromObject(keyValuePair.Value));
}
}
var tableOperation = TableOperation.InsertOrMerge(dynamicTableEntity);
await _outputTable.ExecuteAsync(tableOperation);
}
}
它利用这个助手:
public class CloudTableHelper
{
public static CloudTable GetCloudTable(string tableName, string storageConnectionString)
{
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);
// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
// Retrieve a reference to a table.
CloudTable table = tableClient.GetTableReference(tableName);
// Create the table if it doesn't already exist
table.CreateIfNotExistsAsync().Wait();
return table;
}
}
我建议您使用Azure表存储
REST API。
您也可以使用SDK来实现这一点。请看下面。
班
public class Item : TableEntity
{
public Item()
{
PartitionKey = "YourPartionKey";
RowKey = "YourRowKey";
}
public string Message{ get; set; }
public string Description { get; set; }
}
使用SDK的内部函数
Item entity = new Item("YourPartionKey", "YourRowKey")
{
Message= "I am From IOT Device",
Description = "I am from IOT and Want to go to Storage"
};
// My Storage operation
var client = new CloudTableClient(new Uri("https://YourTableStorageAccountName.table.core.windows.net/"),
new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials("YourTableStorageAccountName", "YourStorageKey"));
var table = client.GetTableReference("YourTableName");
TableOperation insertOperation = TableOperation.Insert(entity);
var insertOnstorage = await table.ExecuteAsync(insertOperation);
Console.WriteLine("Entity inserted!");
RESTAPI参考
URL:
https://YourAccount.table.core.windows.net/YourTableThatYouWantedToInsertMessase
方法:
POST
请求正文:
{
"Message":"IOT Message",
"Description":"I am from IOT and Want to go to Storage",
"PartitionKey":"Yourpartitionkey",
"RowKey":"YourRowkey"
}
注意:有关更多详细信息,请参阅此处
如果您还有任何疑问,请随时与我们分享。谢谢你,快乐编码!
如何使用AZURE函数将遥测消息从Azure IOT中心路由到Data Lake存储。
我最近在学习如何阅读
我编写了一个Firebase云函数,可以通过REST API访问该函数。代码如下所示。 我需要做的是,当用户通过“Web服务URL”从前端提交一些值时。 1)我需要将这些数据保存在Firebase实时数据库中。 2.)我参考了网上的几个教程,不明白在下面的代码中做了什么。
我正在研究一个函数,它使用递归调用将给定的输入分解为面值。 在每个步骤中,它都会递归为两个变量: 继续当前的硬币:将其添加到列表中并递归。 切换到下一个硬币:递增硬币pos和递归。 除了在剩余=0时打印列表中捕获的面额组合之外,我还打算捕获该列表的值并从函数返回它。 这是代码: 输出:[5,5,3]
我一直在使用Azure iot-hub从许多物联网设备接收数据,并成功地使用默认/内置终结点读取数据/对其进行处理。我最近想开始保存数据,以便将来进行可能的分析,所以我在同一个资源组中创建了一个Azure存储帐户。我已经完成了关于如何设置路由的所有演练,并让一个正常工作的endpoint将数据发送到消息/事件内置endpoint(因为它在创建其他路由时被禁用为默认值)。但是,在我创建到存储帐户的路
是否有方法通过使用azure函数备份cosmos DB并将.JSON文件保存在azure blob存储中