Neu: Die KI-Firewall überwacht die gesamte Plattform und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

Eric Lewis

lewisfw

@lewis-e · Mitglied seit März 2026

Neuling

Embedded developer · energy · 14 years in the field

Themen
1
Antworten
37
Punkte
0
Neuling10 Punkte an Mitglied

Erstellte Forenantworten

Ansicht von 15 Beiträgen – 16 bis 30 (von insgesamt 37)

Von English mit KI übersetzt ·

Das liegt größtenteils an den Stückzahlen. Wi-Fi-Chips werden in Milliarden ausgeliefert, Zigbee nur in einem winzigen Bruchteil davon.

Timestamps in UTC or it didn't happen.
♥ 2

Von English mit KI übersetzt ·

Beim Funkteil hat er teilweise recht. Contiki-NG unterstützt IPv6-Multicast für RPL-Netze: zwei Engines, SMRF und MPL. Man aktiviert eine davon zur Build-Zeit in der project-conf.h der Knoten und in der des Border Routers:

/* every node and the border router */
#define UIP_MCAST6_CONF_ENGINE UIP_MCAST6_ENGINE_MPL
/* for SMRF instead you also need storing mode with multicast: */
/* #define UIP_MCAST6_CONF_ENGINE UIP_MCAST6_ENGINE_SMRF */
/* #define RPL_CONF_MOP RPL_MOP_STORING_MULTICAST */

Wo er recht hat: Der Standard-rpl-border-router leitet Multicast aus dem externen Netz nicht ins Mesh weiter. Der Multicast muss daher auf dem Border Router selbst entstehen: ein kleiner Prozess auf diesem Gerät, der auf Befehl von Hermetry ein MPL-Datagramm an eine Gruppe sendet, der die Knoten beigetreten sind. Dafür müssen alle 30 Knoten mit aktiviertem Multicast neu geflasht werden, was bei einer Kühlhaus-Installation einen Vor-Ort-Termin bedeutet.Ehrlich gesagt würde ich bei 30 Knoten auf Multicast verzichten. Der Border Router iteriert über die 30 Adressen und sendet Unicast mit Wiederholung. 30 kleine Pakete im Mesh sind nichts, das ist in Sekunden erledigt, und jeder Knoten bestätigt, sodass man weiß, wer es verpasst hat. Kein erneutes Flashen.Dann in Hermetry: einen Befehl wie sampling.set mit einem Parameter period_s im Profil des Gateways anlegen, diesen Prozess antworten lassen, sobald alle Knoten bestätigt haben, und zwei Schaltflächen im QA-Dashboard platzieren. Die Knoten sollen ihre aktuelle Periode als Client-Attribut melden, damit QA sieht, dass sie übernommen wurde.

Timestamps in UTC or it didn't happen.
Akzeptierte Lösung♥ 8

Von English mit KI übersetzt ·

Einmal alle 5 Minuten von einem einzigen Gerät? Nein. Und Lesezugriffe zählen nicht zum Nachrichtenkontingent, das gilt nur für Telemetrie und Attribute, die die Geräte senden.

Timestamps in UTC or it didn't happen.
♥ 2

Von English mit KI übersetzt ·

Das ist nicht Ihr Topic. Hermetry erlaubt einem Gerät nur das Abonnieren seiner eigenen Downlink-Topics: v1/attributes/set, v1/attributes/res/+, v1/rpc/req/+, v1/rpc/up/res/+ und v1/cert (dazu die gw-Topics für Gateways). Ein Gerät erhält nie Nachrichten eines anderen Geräts und sieht nie seine eigenen Uplinks. Die Tabelle steht unter MQTT topics and payload reference. Bei meinem ersten Projekt bin ich auch darüber gestolpert.
Für 1 brauchen Sie überhaupt kein Echo. Die PUBACK ist die Bestätigung: Hermetry sendet sie erst, wenn die Nachricht sicher in der Warteschlange liegt, und in der Reihenfolge, in der Sie veröffentlicht haben. Behalten Sie den Messwert in Ihrem Puffer, bis sein PUBACK eintrifft, und löschen Sie ihn dann. Stirbt die Session vorher, senden Sie ihn nach dem Reconnect erneut; Duplikate mit demselben Schlüssel und Zeitstempel werden ohnehin nur einmal gespeichert.
Für 2 sollte das Display gar nicht per MQTT lauschen. Geben Sie ihm einen API-Schlüssel und lassen Sie es den neuesten Wert alle paar Minuten per REST abrufen:

GET https://<your host>/tenant/<tenantId>/api/telemetry/latest?kind=iot_device&entityId=<cabinet3 id>&keys=kwh
Authorization: Bearer sk_live_...

Machen Sie den Schlüssel nur lesend (Telemetrie-Lesezugriff reicht), tragen Sie die öffentliche Adresse des Depots in die IP-Allowlist des Schlüssels ein und beachten Sie das Ablaufdatum: standardmäßig 90 Tage, höchstens ein Jahr. Setzen Sie also eine Erinnerung für die Rotation. Danach können Sie auch das Gerät des Displays löschen, es braucht keins.

Timestamps in UTC or it didn't happen.
Akzeptierte Lösung♥ 1

Von English mit KI übersetzt ·

Genau diese Situation hatten wir mit Zählerplatinen, die ein Dienstleister installiert hat. Sie können die laufende Firmware fragen: Die Partition-API in ESP-IDF funktioniert problemlos über den Arduino-Core. Spielen Sie einen Build auf die Boards auf, die Sie erreichen können (die aus Ihrer eigenen Charge), oder warten Sie, bis die anderen im Depot sind; diese meldet die Tabelle nach dem Verbinden einmal als Client-Attribute:

#include "esp_partition.h"

void reportPartitions() {
  String json = "{";
  esp_partition_iterator_t it =
      esp_partition_find(ESP_PARTITION_TYPE_ANY, ESP_PARTITION_SUBTYPE_ANY, NULL);
  bool first = true;
  while (it != NULL) {
    const esp_partition_t *p = esp_partition_get(it);
    if (!first) json += ",";
    json += ""part." + String(p->label) + "":"" +
            String(p->address, HEX) + "/" + String(p->size) + """;
    first = false;
    it = esp_partition_next(it);
  }
  esp_partition_iterator_release(it);
  json += "}";
  mqtt.publish("v1/attributes", json.c_str());
}

Dann zeigt der Reiter Attributes, Scope Client, pro Board part.app0, part.app1, part.otadata usw. Gewünscht sind zwei App-Slots (ota_0 und ota_1, in den Arduino-Tabellen app0/app1 genannt) plus otadata, jeweils mindestens so groß wie Ihr Image. Sehen Sie nur ein app0 mit 3 MB und kein app1, handelt es sich um das Schema „Huge APP“, dann ist kein OTA möglich.Für Boards, auf die sich kein neuer Build spielen lässt, funktioniert im Depot Emilys Vorgehen:

esptool.py --port /dev/ttyUSB0 read_flash 0x8000 0xc00 pt.bin
python gen_esp32part.py pt.bin

Boards mit falschem Schema brauchen einen einmaligen USB-Reflash mit einer Tabelle mit zwei Slots. Danach funktioniert OTA dauerhaft.

Timestamps in UTC or it didn't happen.
Akzeptierte Lösung♥ 1

That’s a counterbalance valve (CBV = counterbalance valve). The check valve lets oil flow freely into the cylinder to lift. Coming down, oil has to push past a relief spring, and the dashed pilot line from the other side helps open it, so the load can’t run away or drop if a hose fails. The arrow across the spring means the setting is adjustable. On a lift table it’s the part that stops the platform falling, so it’s worth showing clearly.

On the drawing: the core symbol set has a check valve in the water network family, it’s in every organisation with the SCADA module. I’d place that, label it „CBV-1 counterbalance“ with a text, and you’re honest about what it is. The palette search matches names and common other names, so search „check“ rather than the part number.

If you want a proper hydraulic/process valve symbol, the Process library covers pumps and valves and ISA instruments. You can browse it before buying: symbols of a locked library show in the palette with a padlock and a still picture. Just see whether one fits before paying. Details: Symbols and industry packs.

Worth putting your pressure transmitter between the CBV and the cylinder on the drawing too, that’s where a dropping load would show first.

Timestamps in UTC or it didn't happen.
Akzeptierte Lösung♥ 9

Owen has it. The press is shorter than your loop, so polling misses it. Use an interrupt so the count happens the moment the pin falls, and do the debounce by time inside it. I’ve had pulse counters on gas meters for years done like this:

volatile uint32_t rejects = 0;          // since boot
volatile uint32_t lastEdgeUs = 0;

void IRAM_ATTR onPress() {
  uint32_t now = micros();
  if (now - lastEdgeUs > 30000) {       // ignore bounce within 30 ms
    rejects++;
  }
  lastEdgeUs = now;
}

void setup() {
  pinMode(D5, INPUT_PULLUP);           // button to GND
  attachInterrupt(digitalPinToInterrupt(D5), onPress, FALLING);
}

Remove the delay(50) from loop(). In the publish, copy the counter with interrupts briefly off.

Hardware: on a factory floor the button cable is often metres long next to motor cables. Add a 1 kΩ series resistor and 100 nF at the ESP pin, or better, run the button at 24 V into an optocoupler. Otherwise you’ll start counting phantom rejects.

Send a cumulative counter, not „rejects this minute“: {"rejects.total": 1532}. If a message is lost, the next one still has the right total, and a chart with the increase aggregate gives you rejects per hour.

Timestamps in UTC or it didn't happen.
Akzeptierte Lösung♥ 9

Kevin’s right that HC-12 is the easy way. With bare modules, the piece most people miss is that the Si446x chips don’t have a register map you just poke. You load a configuration blob that Silicon Labs‘ WDS tool generates (radio_config.h) for your frequency, modulation and data rate, and send it to the chip at startup.

The library that works for me is RadioHead, driver RH_RF24, which supports Si4460/4461/4463. It ships with a set of ready configurations, so you don’t need WDS unless you want something unusual. Minimal sender:

#include <SPI.h>
#include <RH_RF24.h>
RH_RF24 rf24(10, 2, 9);   // CS, nIRQ, SDN
void setup() {
  Serial.begin(9600);
  if (!rf24.init()) Serial.println("init failed");
  rf24.setFrequency(433.92);
  rf24.setTxPower(0x4f);
}
void loop() {
  uint8_t msg[] = "lvl=182";
  rf24.send(msg, sizeof(msg));
  rf24.waitPacketSent();
  delay(60000);
}

Two traps. SDN is active high, so if you leave it floating the chip sits in shutdown and init fails. And these modules run at 3.3V: a 5V Pro Mini needs level shifting on SPI, or use the 3.3V/8 MHz Pro Mini, which is also better for battery life.

On the Pi end, read the packet and publish lvl as a key the same way you do for your other devices.

Timestamps in UTC or it didn't happen.
Akzeptierte Lösung♥ 3

Makes sense. Measured it: GND2 to GND2 drifted around 0.6 V on the bench, so plenty of margin there and none to count on outdoors. Ordered cable with an extra pair, reference through 100 ohm at each end, shield earthed at the gateway end. Thanks Ciaran, and Tyler for the supply capacitance hint.

Timestamps in UTC or it didn't happen.
♥ 1

Von English mit KI übersetzt ·

Megan hat recht. Ich würde Folgendes tun:1. Sende weiterhin co2, temperature und motion als Zahlen (motion als 0/1, nicht true/false, damit eine Historie entsteht).2. Hole die Rohdaten über die History-API ab, ein Tag pro Aufruf ist bequem:

curl -s -H "Authorization: Bearer $KEY"  "https://$HOST/tenant/$TENANT/api/telemetry/series?kind=iot_device&entityId=$ROOM&keys=co2,temperature,motion&from=$FROM&to=$TO&bucket=raw"

Wenn ein Schlüssel 10.000 Punkte zurückgibt, frage erneut ab dem letzten ts + 1 an.3. Verbinde sie auf einem Laptop mit dem Export der Rezeption und trainiere in Python eine logistische Regression oder ein Netz mit 3 Eingängen und 8 Neuronen. Das reicht für CO2-Anstieg + Bewegungsanzahl völlig aus.4. Quantisiere die Gewichte auf int8, füge sie als Array const int8_t w[] PROGMEM ein, und der Uno führt nur den Forward-Pass aus. Sende das Ergebnis als occupied_p (0-100) zusammen mit den anderen Schlüsseln.Ehrlich gesagt bringt dich bei Belegung der CO2-Anstieg über 20 Minuten plus „irgendeine Bewegung in den letzten 30 min“ schon weit, noch bevor ein neuronales Netz ins Spiel kommt. Starte damit als Baseline, damit du weißt, ob sich das Modell lohnt. Die API-Seite findest du hier: Die History-API.

Timestamps in UTC or it didn't happen.
Akzeptierte Lösung♥ 9

Megan’s right. The Personnel tracking page calls Hermetry Safe the dedicated worker-safety product but doesn’t say what it does, so I wouldn’t promise anything from it. The Personnel tracking ready solution is what I’d use, and room-level is exactly what it’s built for. I set it up for a pumping station last year.

The way zones work decides your hardware. Hermetry does not work out zones from positions or radio signals, and it has no geofence polygons. The tracker, or the gateway that hears it, decides which zone the person is in and sends the zone name in the key zone. So the zone logic lives in your hardware: a small BLE transmitter fixed in each room, the worker’s tracker reports the strongest one it hears, and the tracker or the gateway maps that to a zone name like switchgear-2.

The solution’s tracker profile then gives you the rest:

keys:   lat, lng, zone, event, battery, air_temp, light
event:  normal | motion | fall | motionless | sos | press_once
alarms: fall, motionless, sos (Critical), help_call,
        forbidden_zone (zone == the tracker's forbiddenZone attribute),
        battery_low, device_offline (15 min)

The event words must be exactly those, lower case. If your tracker sends something like FALL, translate it in the profile’s root flow. Each tracker gets a server attribute forbiddenZone with one room name, so set it to the switchgear room for everyone without a permit. Only one forbidden zone per tracker out of the box, a second needs an extra rule.

For the map, use the Map card in image mode with the building’s floor plan, positions in pixels. Full description: Personnel tracking.

Timestamps in UTC or it didn't happen.
Akzeptierte Lösung♥ 8

Von English mit KI übersetzt ·

Es verbirgt das Ziel vor jemandem, der die Depotleitung mitliest, ja, Rahul. Aber das Ziel war nie das Geheimnis, und Tor kostet dich auf der Hermetry-Seite echte Dinge.Was dich heute tatsächlich schützt: Die MQTT-Sitzung nutzt mindestens TLS 1.2 mit Forward-Secrecy-Cipher-Suiten, daher sind Inhalte und das Geräte-Token auf der Leitung nicht lesbar. Wer den Uplink des Depots mitschneidet, erfährt nur, dass ein Gerät alle N Sekunden mit einem Broker spricht. Tor verbirgt den Broker-Namen, fügt aber viel Latenz und häufigen Verbindungsabbau und -aufbau hinzu.Nun die Kosten. Jeder Tor-Circuit tritt über eine andere Adresse aus. Hermetry sendet deinen Administratoren eine Benachrichtigung, wenn sich ein Gerät aus einem neuen Netz anmeldet (höchstens einmal pro Stunde und Gerät). Wenn 9 Knoten ständig die Austrittsadressen wechseln, gibt es einen stetigen Strom davon, und du gewöhnst die Leute daran, genau die Warnung zu ignorieren, die ihnen sagen würde, dass ein Token gestohlen wurde. Außerdem verlierst du die Option „Erlaubte Netzwerke“ im Profil, eine der besten Kontrollmöglichkeiten für ortsfeste Geräte: Trägst du die öffentliche Adresse des Depots ein, erhält ein gestohlenes Token, das von irgendwo anders verwendet wird, CONNACK 5. Dazu blockieren wiederholt fehlgeschlagene Anmeldungen eine Adresse für jedes Gerät dahinter, und bei geteilten Austrittsadressen liegt das nicht in deiner Hand.Wenn der Chef mehr will, würde ich stattdessen Folgendes tun, alles im Geräteprofil:

  • Erlaubte Netzwerke: die öffentliche IP des Depots
  • Nur TLS, Token in der URL aus, Befehle ohne TLS erlaubt leer
  • Wenn die Firmware es unterstützt, von Zugriffstoken auf X.509 umstellen, sonst MQTT basic, eine Zugangsdaten pro Gerät
  • Die Limits des Profils auf das senken, was die Knoten tatsächlich senden, damit ein gekapertes Gerät schnell abgeschaltet wird

Und setze die ESP32s in ein eigenes VLAN, damit ein kompromittierter Knoten die Büro-PCs nicht erreichen kann. Die Checkliste findest du unter Device transport security.

Timestamps in UTC or it didn't happen.
Akzeptierte Lösung♥ 9
Ansicht von 15 Beiträgen – 16 bis 30 (von insgesamt 37)