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 7 Beiträgen – 31 bis 37 (von insgesamt 37)

Tyler, lower baud would make it worse here, there’s even less room for 200 lines a second. Liam has three separate bottlenecks.

The radio. 250 kbps is the raw air rate of 802.15.4. After framing, Zigbee network and APS headers, acknowledgements, retries and channel access, real application throughput for unicast is in the tens of kbps. Each RF packet carries around 80 bytes of payload at most, less with encryption. 20 kbps is roughly what everyone measures.

The serial side. In transparent mode the XBee buffers your bytes and sends a packet when it goes quiet for a moment or the buffer fills. At 115200 in, ~20 kbps out, the buffer overflows and bytes are lost, which is your half lines. Turn on CTS flow control (D7) and honour it in the sketch, or better, switch to API mode and send binary frames: pack 10 samples (3 × int16 each) into one 60-byte frame.

Hermetry. Publishing each sample as its own message is 200 messages a second from one device. The default profile limits are 10 messages a second and 200 data points a second, go over them and owners get a notice, keep going over and the session gets closed, so those are your warnings. Even batched, 600 values a second is far more than the per-device point limit and the organisation’s per-minute data points.

For a fan rig, compute features on the Pi: per axis RMS and peak every second, maybe crest factor. That’s 6 to 9 values in one message per second, comfortably inside the limits, and a much more useful chart than raw g values.

Limits are on MQTT under Limits.

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

Ultrasonic won’t do 1 mm on small moving products, the beam is too wide. Laser triangulation is the usual answer, a sensor head above the belt with a reference on the belt surface. Plenty of industrial heads do ±0.05 mm. Shiny surfaces can be tricky, ask for a demo on your product.

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

Aoife has it. Every DevKit has two NPN transistors (or one UMH3N dual) cross-coupled like this:

DTR ──[10k]── base Q1     Q1: collector → EN,  emitter → RTS
RTS ──[10k]── base Q2     Q2: collector → IO0, emitter → DTR

EN or IO0 only gets pulled low when DTR and RTS are in opposite states. When both are asserted together (which is what many serial terminals do when they open the port), nothing happens. esptool toggles them in a sequence that holds IO0 low while EN goes high, so the chip starts in download mode, then releases both to run.

With your direct wires, any change of either line resets or straps the chip, hence the resets when the monitor opens and the stuck download mode.

Also add 10k pull-up on EN plus 1 uF to ground. Without the cap, EN can come up before the 3.3 V rail is stable and you’ll get random boot failures on power-up, especially with the AMS1117 which is slow.

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

Von English mit KI übersetzt ·

Behalten Sie die Tasten. Der Schieberegler kann nur anzeigen, was das Gerät an Hermetry meldet. Der ESP32 muss also nach jeder Bewegung die Position melden, egal ob sie durch eine Taste oder einen Befehl ausgelöst wurde.Ich wette, das Zurückspringen liegt an Ihrer Bindung für Current value. Prüfen Sie, worauf der Current-value-Slot des Schiebereglers zeigt. Liest er einen Wert, der sich nur beim Senden ändert (oder gar keinen), springt er dorthin zurück. Binden Sie ihn an einen Telemetrie-Schlüssel, den der ESP32 selbst sendet, zum Beispiel damper1_pos.Auf dem ESP32 nach jeder Bewegung:

void moveTo(int ch, int angle) {
  angle = constrain(angle, 0, 90);
  servo[ch].write(angle);
  pos[ch] = angle;
  char buf[48];
  snprintf(buf, sizeof buf, "{"damper%d_pos":%d}", ch + 1, angle);
  mqtt.publish("v1/telemetry", buf);
}
// button handler: moveTo(ch, pos[ch] + 15);
// command handler for damper.set: moveTo(ch, params["angle"]); then answer ok

Schiebereglereinstellungen, die bei uns funktioniert haben: Minimum 0, Maximum 90, Step 15, damit er zu den Tastenschritten passt. Der Schieberegler sendet einmal beim Loslassen, nicht während des Ziehens, damit der Servo nicht mit Befehlen überflutet wird. Bei einer Klappe können Sie Ask before running off aktivieren, sonst erhält die Rezeption bei jeder Bewegung ein Bestätigungsfenster. Lassen Sie den Befehl auf Basic-Stufe, ein Board sendet nichts Höheres.Außerdem gibt es die standardmäßig aktivierte Option „Disable the control when the reading is old“. Meldet der ESP32 nur bei Änderungen und hat niemand stundenlang etwas berührt, kann der Schieberegler ausgegraut werden. Lassen Sie ihn die Position alle paar Minuten zusammen mit den übrigen Messwerten wiederholen.Die Einrichtungsschritte finden Sie unter Control cards.

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

Then split it, that’s what I’d do as a first project too.

The 4 mains-powered temperature sensors: ESP32 on Wi-Fi, straight to Hermetry over MQTT. No gateway, nothing in between, every sensor is a device you can see connect and disconnect. It’s the shortest path and you learn the topics and payloads on something that’s easy to debug.

The 4 battery door contacts: not Wi-Fi. An ESP32 waking up, joining Wi-Fi and doing a TLS handshake for every door open eats AA cells in weeks. Buy ready-made Zigbee contact sensors (a couple of years on a coin cell), a Zigbee USB coordinator, and run a small bridge on a Pi that reports them as child devices of a gateway. More moving parts, so do it second, once the Wi-Fi ones work.

Emily’s not wrong about the mesh, but with 4 battery contacts there’s no mesh to speak of, battery end devices don’t route. Mains-powered Zigbee devices do.

There’s a decent overview of which way to connect what in the docs, it’s basically this reasoning as a table: Choose how to connect your devices.

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

I sort this out on every substation job we do, and I treat signal, reference and shield as three separate conductors.

Signal: A and B on the twisted pair.

Reference: RS-485 needs a common mode reference. Add a third conductor (use a 2-pair cable, the second pair for 0 V) and connect the 0 V of every transceiver to it. Without it, the ground difference between the panel and a meter 140 m away eats into the receiver’s common-mode range, and VFD noise does the rest.

Shield: to protective earth, at the panel end, with a 360° clamp where the cable enters the cabinet, not a pigtail to a terminal. At the meter end either leave it open or connect it to earth through a 10 nF capacitor, which gives you HF shielding without a low-frequency ground loop. Both ends hard-bonded is fine only where the earthing system is meshed and equipotential, which next to a tray of VFD cables you shouldn’t assume.

Also check: 120 Ω at both ends of the line only, bias resistors once at the gateway, the tray separation from VFD cables (cross at 90° if you must), and no star wiring.

For the write-up, it helps to log the error rate. Have the gateway count CRC errors and timeouts per poll cycle and send them as telemetry, e.g. mb.crc_err and mb.timeouts, so you can show the before/after on a chart.

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