Ich möchte mir von einem ESP32 meine BLE-Devices auslesen lassen und dann in IPS eine Anwesenheitserkennung einrichten.
Habe jetzt den ganzen Tag versucht die Variable, die vom MQTT-Server angelegt wird zu zerlegen und in einzelne Variablen zu speichern. Bekomme es einfach nicht hin.
Folgendes steht in der Variable:
Ich möchte jetzt pro Device eine Variable anlegen lassen. Der Name der Variable ist die MAC und der Wert ist der RSSI.
Es müssten momentan also 4 Variablen angelegt werden, die jeweils mit ihren RSSI-Werten befüllt sind. Es werden jedoch 8 Variablen angelegt.
Hast du die Instanz mit dem MQTT Konfigurator angelegt?
Ich habe gestern auch etwas mit meinem ESP32 und BLE per MQTT gespielt und habe für jeden Wert eine eigene Instanz mit Wert erstellen können.
Michael
@Nall-chan,
ja die Instanz habe ich mit dem Mqtt-Konfigurator angelegt.
Versuche mir gerade nachdieser Anleitung eine Anwesenheitskontrolle zu erstellen.
Hallo,
bin jetzt nicht der Hyperexperte und es wird hier auch oft die Umwandlung in ein Array bevorzugt, aber wenn du nur einen Wert brauchst, geht es mit Objekt sehr smart.
$Objekt=json_decode($Mac);
$MacAddr=$Objekt->mac;
Selbstverständlich kannst du das auch direkt in einen Einzeiler zusammenfügen.
Natürlich kannst du auch beim Array direkt auf ein Element zugreifen.
Sollte so gehen.
Hi,
Danke schonmal für die Antworten:
Mqtt kann aufgesplittet werden, mqtt string wird in Script zerlegt und auf vaiablen in IPSymcon geschrieben. Da ich aber mal einen Unterschiedlichen String zu IPSymcon bringe, besteht hier das Problem das mein Script unnötigerweise Last hat.
Daten werden von einem ESP32 gesammelt und danach soll nur bei einer bestimmten Macadresse der Mqtt string aus dem ESP geschickt werden.
Sitz jetzt schon 2 Tage dran aber kein Erfolg, kann mir hier jemand helfen aktuell habe ich es mit
if („mac“ == „ac233f66b520“) // nur ausgabe wenn bekannter mac???
probiert aber jetzt kommt nix mehr an, bzw. wird nix mehr gesendet.
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice) {
// Construct a JSON-formatted string with device information
String msg = "{";
msg.reserve(300);
msg.concat("\"time\":\"");
msg.concat(getIsoTime());
msg.concat("\",");
msg.concat("\"mac\":\"");
msg.concat(hexToStr(*advertisedDevice.getAddress().getNative(), 6));
msg.concat("\",");
msg.concat("\"payload\":\"");
msg.concat(hexToStr(advertisedDevice.getPayload(), advertisedDevice.getPayloadLength()));
msg.concat("\",");
if (advertisedDevice.haveName()) {
msg.concat("\"name\":\"");
msg.concat(advertisedDevice.getName().c_str());
msg.concat("\",");
}
if (advertisedDevice.haveRSSI()) {
msg.concat("\"rssi\":");
msg.concat(advertisedDevice.getRSSI());
msg.concat(",");
}
if (advertisedDevice.haveTXPower()) {
msg.concat("\"tx\":");
msg.concat(advertisedDevice.getTXPower());
msg.concat(",");
}
**if ("mac" == "ac233f66b520") // nur ausgabe wenn bekannter ibeacon ????**
{
// trim the final comma to ensure valid JSON
if (msg.endsWith(",")) {
msg.remove(msg.lastIndexOf(","));
}
msg.concat("}");
// Publish the string via MQTT
mqtt.beginPublish(topic.c_str(), msg.length(), false);
mqtt.print(msg.c_str());
// mqtt.endPublish(); // does nothing
// Blink for every received advertisement
nBlinks += 1;
Serial.println(msg);
//Serial.printf("BLE: %s \n", advertisedDevice.toString().c_str());
};
}
};