Novedad: el cortafuegos de IA supervisa toda la plataforma y explica cada incidente con palabras sencillas. Vea cómo funciona

Laura T.

thompsonplc

@lthompson · Se unió el mayo 2025

Recién llegado

Automation engineer · pharma · 14 years in the field

Temas
7
Respuestas
65
Puntos
0
Recién llegado10 puntos para Miembro

Respuestas de foro creadas

Viendo 15 entradas – de la 16 a la 30 (de un total de 65)

Traducido del English por IA ·

Ambos tienen razón. Tuve que explicárselo el año pasado a nuestro propio departamento de compras, así que aquí va la versión larga:El precio se acumula por: volúmenes menores que los de los componentes Wi-Fi/BLE, un módulo precertificado (la homologación modular FCC/CE es un coste importante que, de otro modo, cargarías en cada producto), la pila Zigbee y el firmware/herramientas del fabricante, y la membresía en la alianza y la certificación para un producto que quiere el logotipo. Un módulo EFR32MG o CC2652 sin más puede costar unos 5-8 $, pero entonces la certificación de RF y la integración de la pila corren por tu cuenta.Luego está el camino hacia Hermetry. Los dispositivos Zigbee no se conectan por sí solos; necesitas un coordinador y algo en campo que reporte por los sensores. En términos de Hermetry, eso es una pasarela que publica en los topics v1/gw/* para que cada sensor se convierta en un dispositivo hijo. Eso es otra caja y otro software que mantener.Para estaciones de bombeo en concreto, al menos yo presupuestaría sensores LoRaWAN: Hermetry ejecuta su propio servidor de red LoRaWAN y el plan de frecuencias sigue a tu pasarela, así que en EE. UU. comprarías pasarela y sensores US915. Los sensores funcionan años con una batería, y una pasarela cubre bastante terreno. Si LoRaWAN no encaja en los emplazamientos, el cableado de 4-20 mA hacia una pasarela es la otra opción realista.

Solución aceptada♥ 4

Traducido del English por IA ·

Bien. Guarde el correo de aprobación del operador junto con el archivo de diseño, la próxima revisión de hardware lo volverá a necesitar.

♥ 0

Traducido del English por IA ·

La certificación del módulo reduce lo que el producto final debe repetir, pero no lo sustituye. Pregunte al equipo comercial de IoT del operador qué requiere para un dispositivo en su red. Algunos solo piden la homologación del módulo y el registro de su dispositivo, y otros exigen pruebas de laboratorio sobre el producto terminado.

♥ 1

Traducido del English por IA ·

Los topics personalizados son solo de entrada, se convierten en telemetría del dispositivo que publicó. Y los dispositivos nunca reciben los mensajes de otros en Hermetry, así que un sensor que publique para un ventilador nunca funcionará.Además, por 14 años de trabajo en planta: quiere que el actuador responda. Enviar sin confirmación a un relé es la forma de acabar con un ventilador que aparece encendido en la sala de control y está apagado en la sala.

♥ 0

Aisha, the single low-side MOSFET has a catch I’ve been bitten by. When it’s off, the bottom of the divider floats, and the top resistor pulls the ADC pin up to the full 12 V through 100k. That’s above the ESP32’s 3.3 V limit; the pin’s protection diode clamps it and current leaks into the 3.3 V rail. So you save the divider current and stress the pin instead.

The two-transistor version switches the top: a P-channel (AO3401 or similar) between the battery and the divider, gate pulled up to the battery with 100k so it’s off by default. A small N-channel (2N7000) driven by a GPIO pulls that gate down to switch it on. You need the N-channel because a 3.3 V GPIO can’t pull the gate of a P-channel sitting at 12 V high enough to turn it off. With the top switched off, the whole divider sits at 0 V, the ADC pin too.

In the firmware: switch on, wait about 10 ms, take 16 readings and average them, switch off. Use the calibrated reading (analogReadMilliVolts) and send battery_v as a number with two decimals.

For the flapping: a lead-acid battery’s voltage jumps when charging starts, so a plain threshold will always bounce. Give the rule hysteresis so it only clears well above the threshold, and two severities:

{
  "type": "battery_low",
  "title": "{{device.name}}: battery {{value}} V",
  "severities": [
    { "severity": "MAJOR", "condition": { "key": "battery_v", "op": "<", "value": 11.5 } },
    { "severity": "MINOR", "condition": { "key": "battery_v", "op": "<", "value": 11.8 } }
  ],
  "hysteresis": 0.4,
  "debounce": { "mode": "count", "raise": 2, "clear": 2 },
  "notify": { "recipients": [ { "kind": "email", "email": "field-team@example.com" } ], "minSeverity": "MINOR" },
  "enabled": true
}

It opens below 11.8 and clears only at 12.2 or above, two readings in a row. Kevin’s idea would hide the problem, not fix it. Hysteresis and debounce are explained on this page.

Solución aceptada♥ 9

Short helps, but 17 dB is not «short trace» territory, that’s a broken RF path. Did this on a sensor board for a cleanroom monitor and lost about the same.

Questions to check: is there solid ground under the trace on the other layer? Is the trace 50 ohm? On 1.6 mm FR4 a 50 ohm microstrip is around 3 mm wide, so a 0.25 mm signal trace is closer to 120 ohm. Over 6 mm that alone isn’t the whole 17 dB, but add no ground plane under it and the trace is half an antenna radiating into your own board.

What I’d do on the next revision: coplanar waveguide with ground on both sides and a row of vias, width from a calculator for your stackup, a pi network footprint between module and connector (0 ohm in series, others not fitted until you can measure), and the U.FL ground pads stitched straight to the plane. Keep the switching regulator away from that corner.

Then compare again in the frames log, it shows the best RSSI and SNR per uplink so you can check both boards on the same gateway without extra tools. See The frames log.

Solución aceptada♥ 4

Traducido del English por IA ·

El bus 0 está reservado para la EEPROM de identificación del HAT en los pines 27/28. El bus 1 es el de usuario. Aoife, cuando dices «GPIO 3», ¿te refieres al pin físico 3 o al GPIO 3 de BCM?

♥ 0

Traducido del English por IA ·

Tarjeta de reglas. Así gestiono los horarios de ventilación del laboratorio.Primero asigna al perfil de la Pi un comando, p. ej. heaters.set con un parámetro Sí/No on, nivel Basic. En la Pi:

from rpi_rf import RFDevice
tx = RFDevice(17); tx.enable_tx()
CODES = {True: [5592405, 5592407, 5592411, 5592413],
         False: [5592404, 5592406, 5592410, 5592412]}

def on_rpc(req_id, body):
    if body.get("method") == "heaters.set":
        for code in CODES[bool(body["params"]["on"])]:
            tx.tx_code(code, 1, 350)     # protocol 1, pulse length from the sniff
        client.publish(f"v1/rpc/res/{req_id}", '{"ok": true}', qos=1)

(Tus códigos y la duración del pulso provienen del sniff, los míos son marcadores de posición.)Luego, en la tarjeta de Reglas del asset de la terraza:

  • Regla «Heaters on»: When Sunrise or sunset, Sunset, offset -15. Then Send a command heaters.set on = yes to the Pi.
  • Regla «Heaters off»: When A time of day 23:00, every day. Then the same with on = no.

El atardecer necesita la ubicación del lugar, así que pon la latitud/longitud en el asset de la terraza y coloca la Pi debajo de él; de lo contrario, la regla no se guardará. Además, 433 MHz no tiene retroalimentación, así que envía el comando dos veces con un minuto de diferencia si quieres asegurarte. Documentación: Time, sunrise/sunset, dates and holidays.

Solución aceptada♥ 3

Traducido del English por IA ·

Casi, pero es al revés, y eso confunde a todo el mundo. Los nombres están vistos desde el punto de vista de la Pi: MOSI es la Pi enviando al chip, MISO es el chip enviando a la Pi. DO en tu breakout significa «datos que salen del MAX31855», así que DO va a MISO, GPIO 9, pin 21.El MAX31855 nunca recibe nada, simplemente pones CS en bajo y extraes 32 bits, así que no tiene ningún pin de entrada. Deja MOSI (pin 19) sin conectar. Cableado:

VIN -> 3.3 V (pin 1)
GND -> GND (pin 6)
DO  -> GPIO 9  MISO (pin 21)
CLK -> GPIO 11 SCLK (pin 23)
CS  -> GPIO 8  CE0  (pin 24)

Activa SPI en raspi-config y luego lee 4 bytes con spidev a 1 MHz o menos. Los bits 31..18 son la temperatura del termopar en pasos de 0,25 C, el bit 16 es el indicador de fallo. Comprueba ese indicador antes de enviar nada, porque un termopar abierto aparecerá como un número extraño en tu gráfico.

Solución aceptada♥ 3

RS-485, Modbus RTU, one 4-core cable. I’ve wired a few greenhouses like this.

Cable: a shielded twisted pair cable with two pairs, for example a 2x2x0.5 mm². One pair for A/B, the other pair for power: 12 V and 0 V. The 0 V also serves as the RS-485 common. At 80 m and 12 Nanos drawing maybe 40 mA each through a small buck converter, the voltage drop on 0.5 mm² is under a volt, fine for 12 V in.

Topology: a daisy chain along the benches, with short stubs (under 30 cm) to each node. No star. 120 Ω termination at both ends of the main run, bias resistors only once, at the ESP32 end. Each Nano gets a MAX485 (or better, an auto-direction module so you save a pin).

Protocol: each Nano is a Modbus RTU slave with its own address 1-12 (the ModbusRTUSlave library is fine), holding registers for moisture, temp x10, RH x10, lux. The ESP32 is master, polls every node every 30 s at 19200, and publishes:

v1/gw/connect    {"device": "bench-03", "type": "greenhouse-node"}
v1/gw/telemetry  {"bench-03": {"ts": 1767225600000, "values": {"soil": 41, "t": 23.4, "rh": 71.2, "lux": 8200}},
                  "bench-04": {"ts": 1767225600000, "values": {"soil": 38, "t": 23.1, "rh": 70.8, "lux": 7900}}}

One gateway message for all twelve, and megan_b40 is right about ts, only if the ESP32 has NTP. Make a device profile named greenhouse-node and every child lands in it with the same alarms.

If a node stops answering, publish v1/gw/disconnect for it so it shows offline instead of silently going stale.

Solución aceptada♥ 8
Viendo 15 entradas – de la 16 a la 30 (de un total de 65)