У меня есть веб-API, который может получать и отправлять сообщения Raspberry Pi.Соединение работает нормально, используя Azure-Event-Hubs в веб-API для получения сообщений и Azure-Iothub для отправки сообщений в Raspberry.
Проблема, с которой я сталкиваюсь, это когда я пытаюсь отправить сообщение вфункция onMessage (поэтому всякий раз, когда я получаю сообщение в webapi), устройство не получает его.Вот мой код:
WebApi:
const { EventHubClient, EventPosition } = require('azure-event-hubs');
var connectionString = 'myConnectionString'
var sendingClient = require('../azure/sendingClient')
async function main() {
sendingClient.sendMessage('raspberry',{},"allDevices") //The raspberry receives this
const client = await
EventHubClient.createFromIotHubConnectionString(connectionString);
const onError = (err) => {
console.log("An error occurred on the receiver ", err);
};
const onMessage = (msg) => {
console.log(msg.body);
sendingClient.sendMessage('raspberry',{},"allDevices")// the raspberry doesn't receive this
};
const receiveHandler = client.receive("1", onMessage, onError, {
eventPosition: EventPosition.fromEnqueuedTime(Date.now())
});
// To stop receiving events later on...
await receiveHandler.stop();
await client.close();
}
main().catch((err) => {
console.log(err);
});
Отправляющий клиент:
var Client = require('azure-iothub').Client;
var Message = require('azure-iot-common').Message;
var connectionString = 'myConnectionString'
var sendingClient = Client.fromConnectionString(connectionString);
exports.sendMessage = (targetDevice, content, messageId) => {
sendingClient.open(function (err) {
if (err) {
console.error('Could not connect: ' + err.message);
} else {
console.log('Service client connected');
var message = new Message(content);
message.ack = 'full';
message.messageId = 'message'
message.properties.add('message',messageId)
console.log('Sending message: ' + message.getData());
console.log('Sending message to : ' + targetDevice);
sendingClient.send(targetDevice, message,);
}
});
}
Получатель на raspberryPi:
var iothub = require('azure-iothub');
var Protocol = require('azure-iot-device-mqtt').Mqtt;
var Client = require('azure-iot-device').Client;
var Message = require('azure-iot-device').Message;
var client = Client.fromConnectionString(connectionString, Protocol)
client.open((err) => {
if (err) console.error('Could not connect: ' + err.message)
else {
client.on('message', (msg) => {
switch (msg.properties.propertyList[1].value) {
case 'allDevices':
devices = JSON.parse(msg.data.toString())
response(devices) //passing the message content
}
});
client.on('error', (err) => {
console.error(err.message);
});
client.on('disconnect', () => {
clearInterval(sendInterval);
client.removeAllListeners();
client.open(connectCallback);
});
}
})
отправитель включенМалинаПи:
exports.sendMessage = (data, connectionString, key) => {
var client = Client.fromConnectionString(connectionString, Protocol)
client.open((err) => {
if (err) console.error('Send message error: ' + err.message)
else {
data = JSON.stringify(data);
var message = new Message(data);
message.properties.add('message', key);
client.sendEvent(message);
console.log('Message sent ' + key);
}
})
}