lynchlab
@aoife_l22 · Se unió el abril 2025
Engineering student · university
- Temas
- 15
- Respuestas
- 79
- Puntos
- 0
Respuestas de foro creadas
Traducido del English por IA ·
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
Solo Wi-Fi, ninguna entrada de Bluetooth en absoluto.
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
Only Wi-Fi, no Bluetooth entry at all.
Traducido del English por IA ·
Está instalado, si no, bluetoothctl no funcionaría.
It’s installed, bluetoothctl wouldn’t run otherwise.
Traducido del English por IA ·
¿Podrías poner la Pi en modo de suspensión profunda entre cada localización, como con el ESP32?
Could you put the Pi into deep sleep between fixes like an ESP32?
Why does the reference matter so much? Couldn’t it use the internal 1.1 V bandgap?
Traducido del English por IA ·
Por desgracia, no es la misma red en todas partes. Dos edificios están en un SSID IoT separado, un laboratorio tiene su propio router y las contraseñas se cambian cada semestre. Además, los tokens tienen que ser diferentes para cada nodo de todos modos.
Not the same network everywhere sadly. Two buildings are on a separate IoT SSID, one lab has its own router, and the passwords get rotated each term. Plus the tokens have to be different per node anyway.
Liam’s half right. avr-libc’s printf family is built without float support by default to save flash, so %f prints ?. You can link the float version (-Wl,-u,vfprintf -lprintf_flt) but it costs about 1.5 KB of flash and the Arduino IDE makes the flags annoying.
What I do on Nanos is convert the floats with dtostrf first, then format strings:
char ts[8], hs[8], buf[96];
dtostrf(t, 0, 2, ts); // width 0 = no padding
dtostrf(h, 0, 1, hs);
snprintf(buf, sizeof(buf), "{"temp_c":%s,"rh":%s,"seq":%lu}", ts, hs, seq);
Or send integers: temp_c10 as 2154 and scale it back later. Same quota, zero float formatting. Also check for NaN when the SHT31 read fails: dtostrf prints nan, which isn’t valid JSON, and the whole message gets stored as raw text. Skip the key when the read fails.
That field is the TSF, it’s the access point’s own uptime counter in microseconds. Not a date or time.
Both fixed. The society bought the isolated carrier for the pH circuit and the 0.3 jumps are gone. The JSON rule with the any group saved fine, and the pump ran three times today without a single alarm. Then I dropped the probe in pH 4 buffer to test and it opened after five minutes, as expected.
Traducido del English por IA ·
Muy útil, gracias. El supervisor aceptó «CA pública en la tarjeta, secretos en NVS cifrada». La parte de X.509 me ahorró una semana; ya había empezado a generar una CA con openssl. Curiosamente, la semana pasada cloné la tarjeta para una segunda placa y los datos estaban incompletos; era exactamente el problema de la toma de control.
Really helpful, thank you. Supervisor accepted «public CA on card, secrets in encrypted NVS». The X.509 bit saved me a week, I had already started generating a CA with openssl. Funny enough I had cloned the card for a second board last week and the data was patchy, it was exactly the takeover thing.
Why not torque mode with a low limit? Then hitting the end stop wouldn’t hurt.
Traducido del English por IA ·
Hicimos nuestro proyecto de fin de carrera sobre algo casi idéntico (contadores inteligentes sobre 2G, interceptamos nuestro propio tráfico). Todo lo que dijo Laura es correcto. Esto es lo que haría yo en tu lugar, en este orden.Primero, separa el perfil. Crea un perfil nuevo para las 38 unidades TLS y déjalo en el valor predeterminado, solo TLS en 8883. Muévelas a ese perfil. Los dispositivos de ese perfil no pueden iniciar sesión en 1883 en absoluto, así que aunque alguien intente algo con ellos, nada viaja en claro.Segundo, las 12 unidades antiguas tienen su propio perfil con MQTT sin cifrar permitido, y lo bloqueas al máximo:
- Redes permitidas: introduce solo el rango de direcciones desde el que llega el tráfico de tu operador. Pide al operador un APN privado si puedes; así será su rango privado. Todo lo que venga de fuera se rechaza (CONNACK 5).
- Comandos permitidos sin TLS: déjalo vacío o, como máximo,
sys.info. Nuncasys.reboot. Los demás comandos simplemente esperan una sesión TLS, que estas unidades nunca tendrán, así que caducan. - Autenticación permitida: solo token de acceso, si es lo único que usan.
Tercero, rota el token del armario que capturó el tester, y, siendo honestos, los 12, porque llevan dos años cruzando internet en claro.Las actualizaciones de firmware y la configuración de los dispositivos tampoco se envían nunca en claro, así que no estás filtrando esos datos. Todo lo anterior está en esta página: Device transport security. Para TI, la respuesta honesta es: «38 están cifradas de extremo a extremo, 12 no lo están y quedan aisladas hasta que se reemplacen».
Did our final-year project on almost exactly this (smart meters over 2G, we sniffed our own). Everything Laura said. Here’s what I’d do in your position, in this order.
First, split the profile. Make a new profile for the 38 TLS units and leave it on the default, TLS only on 8883. Move them over. That profile’s devices can’t log in on 1883 at all, so even if somebody pokes at them nothing goes in clear.
Second, the 12 old ones get their own profile with plain MQTT allowed, and you lock it down hard:
- Allowed networks: put in only the address range your operator’s traffic comes from. Ask the operator for a private APN if you can, then it’s their private range. Anything outside gets refused (CONNACK 5).
- Commands allowed without TLS: leave it empty, or at most
sys.info. Neversys.reboot. Other commands just wait for a TLS session, which these units will never have, so they expire. - Allowed authentication: only access token if that’s all they use.
Third, rotate the token of the cabinet the tester captured, and honestly all 12, because they’ve been crossing the internet in clear for two years.
Firmware updates and device settings are never sent in clear anyway, so you’re not leaking those. Everything above is on this page: Device transport security. For IT, the honest answer is «38 are encrypted end to end, 12 are not and are fenced in until they’re replaced».
Traducido del English por IA ·
La función de ahorro de energía estaba activada. Añadí el archivo de configuración, reinicié NetworkManager, y lleva 3 días seguidos en línea, sin keepalive_timeout en la pestaña Log desde entonces. SSH también responde al instante, algo que ni siquiera había relacionado con el problema. ¡Gracias Ciaran!
Power save was on. Added the conf file, restarted NetworkManager, and it’s been online for 3 days straight now, no keepalive_timeout in the Log tab since. SSH is instant too, which I hadn’t even realised was related. Thank you Ciaran!
Traducido del English por IA ·
Lo puse en marcha ayer y a todos en el laboratorio les encanta. No tuve que pedirle nada a IT, lo cual fue una victoria. Solo una cosa: al principio usé status=active y, después de un reinicio, repetía alarmas ya reconocidas porque mi seen-set estaba vacío. Cambié a OPEN, como ustedes habían escrito. También tuve que cambiar los nombres de los dispositivos de «frz-03» a «freezer three» porque piper leía «frz» como «frz» sin sentido.
Got it running yesterday, everyone in the lab loves it. Had to ask IT nothing, which was a win. Only thing: I first used status=active and it kept repeating acknowledged alarms after a restart because my seen-set was empty, switched to OPEN like you wrote. Also had to change device names from «frz-03» to «freezer three» because piper read it as «frz».
Traducido del English por IA ·
Es headless, no tiene pantalla. Aun así desactivé el apagado de pantalla por si acaso, sin cambios.
It’s headless, no screen at all. I turned blanking off anyway just in case, no change.
Traducido del English por IA ·
Peleé con la placa de expansión del Edison para un laboratorio el año pasado. Abrir /dev/ttyMFD1 no basta en esa placa: los pines 0 y 1 pasan por un multiplexor de pines y los convertidores de nivel, y hasta que se configuran la UART no está conectada al conector, los pines son GPIO normales. Por eso se abre sin problemas pero no lee nada.La forma sencilla es la biblioteca mraa, que configura el multiplexor por usted al abrir la UART por su número de placa:
import mraa
u = mraa.Uart(0) # pins 0/1 on the Arduino breakout, sets the mux
u.setBaudRate(115200)
u.setMode(8, mraa.UART_PARITY_NONE, 1)
while True:
if u.dataAvailable(1000):
line = u.readStr(64).strip() # "caps_ok=1823;caps_rej=12"
vals = dict(kv.split("=") for kv in line.split(";"))
# add to the payload the Edison already sends:
payload["caps_ok"] = int(vals["caps_ok"])
payload["caps_rej"] = int(vals["caps_rej"])
Compruebe también que el cableado está cruzado: TX de la OpenMV al RX del Edison (pin 0), RX de la OpenMV al TX del Edison (pin 1). El pin 0 es RX en la placa de expansión, así que si lo que escribió es exactamente como está cableado, intercámbielos.
I fought the Edison breakout for a lab last year. Opening /dev/ttyMFD1 isn’t enough on that board: pins 0 and 1 go through a pin multiplexer and the level shifters, and until those are set up the UART isn’t connected to the header at all, the pins are plain GPIO. That’s why it opens fine and reads nothing.
The easy way is the mraa library, which sets the mux for you when you open the UART by its board number:
import mraa
u = mraa.Uart(0) # pins 0/1 on the Arduino breakout, sets the mux
u.setBaudRate(115200)
u.setMode(8, mraa.UART_PARITY_NONE, 1)
while True:
if u.dataAvailable(1000):
line = u.readStr(64).strip() # "caps_ok=1823;caps_rej=12"
vals = dict(kv.split("=") for kv in line.split(";"))
# add to the payload the Edison already sends:
payload["caps_ok"] = int(vals["caps_ok"])
payload["caps_rej"] = int(vals["caps_rej"])
Also check the wiring is crossed: OpenMV TX to the Edison’s RX (pin 0), OpenMV RX to the Edison’s TX (pin 1). Pin 0 is RX on the breakout, so if what you wrote is exactly how it’s wired, swap them.

