El simulador iot02sim.binefa.cat disposa d'un pont MQTT bidireccional que permet:
El broker és broker.binefa.cat (port 1883 MQTT pla, 8883 TLS, 9002 WebSocket).
Cada instància QEMU té un Session ID únic, visible a la toolbar del simulador (botó ⎘ per copiar-lo). És l'element central de tots els topics MQTT.
El Session ID pot ser un UUID generat automàticament o un nom curt assignat via URL:
https://iot02sim.binefa.cat/#run:sid=grup1&bin=https://...
https://iot02sim.binefa.cat/#open:sid=alumne-joan&code=https://...
Restricció: el Session ID no pot contenir els caràcters /, + ni # (reservats per MQTT).
iot02/{sessionId}/state/gpio → canvis dels LEDs
iot02/{sessionId}/state/oled → imatge de la pantalla OLED (PNG base64)
iot02/{sessionId}/state/bme → valors del BME280
iot02/{sessionId}/state/ldr → valor del LDR
iot02/{sessionId}/state/alive → presència de la sessió [retained]
iot02/{sessionId}/info → MAC i estat de la sessió [retained]
iot02/{sessionId}/action/button → prémer/alliberar un botó
iot02/{sessionId}/action/bme → canviar valors del BME280
iot02/{sessionId}/action/ldr → canviar valor del LDR
iot02/sessions → llista de sessions actives [retained]
iot02/{sessionId}/state/gpioPublicat cada vegada que un LED canvia d'estat.
{"pin": 19, "value": 1}
| Pin | LED |
|---|---|
| 19 | Blanc |
| 23 | Vermell |
| 27 | Groc |
| 32 | Verd |
value 1 = encès, 0 = apagat.
iot02/{sessionId}/state/oledPublicat cada vegada que el contingut de la pantalla canvia.
{"png": "iVBORw0KGgoAAAANSUhEUgAA..."}
Imatge PNG 128×64 px en blanc i negre, codificada en base64. Es pot mostrar directament com a <img src="data:image/png;base64,{png}"> o aplicar-la com a textura en un entorn 3D.
iot02/{sessionId}/state/bme{"temp": 22.5, "rh": 48, "pressure": 1013}
iot02/{sessionId}/state/ldr{"value": 500}
Rang: 0–4095.
iot02/{sessionId}/info [retained]Publicat en arrancar la sessió i en aturar-la. Un client que es connecta tard el rep immediatament sense esperar cap canvi.
{"sessionId": "grup1", "mac": "AA:BB:CC:DD:EE:FF", "active": true}
iot02/{sessionId}/state/alive [retained]Publicat en arrancar ({"ts": 1234567890}) i en aturar-se (""). Permet detectar sessions caigudes.
iot02/sessions [retained][
{"sessionId": "grup1", "mac": "AA:BB:CC:DD:EE:FF"},
{"sessionId": "grup2", "mac": "AA:BB:CC:DD:EE:01"}
]
Les accions es reflecteixen tant a QEMU com a la interfície web (botó visual, sliders i textos actualitzats).
iot02/{sessionId}/action/button{"pin": 0, "value": 1}
value 1 = premut, 0 = alliberat.
| Botó | Pin |
|---|---|
| IO0 | 0 |
| I34 | 34 |
| I35 | 35 |
iot02/{sessionId}/action/bmeEs poden enviar els tres camps o només un:
{"temp": 25.5, "rh": 60, "pressure": 1013}
{"temp": -5.0}
| Camp | Rang |
|---|---|
temp |
−40 – 85 °C |
rh |
0 – 100 % |
pressure |
300 – 1100 hPa |
iot02/{sessionId}/action/ldr{"value": 200}
| Valor | Significat |
|---|---|
| 0 | Màxima llum |
| 4095 | Foscor total |
| Topics | QoS | Retained |
|---|---|---|
state/gpio, state/oled, state/bme, state/ldr |
0 | No |
state/alive, info, sessions |
1 | Sí |
action/* |
0 | No |
Prerequisit:
sudo apt install mosquitto-clients
Substituir SESSION_ID pel valor visible a la toolbar del simulador.
mosquitto_sub \
-h broker.binefa.cat -p 1883 \
-u ecat -P clotClot \
-t "iot02/SESSION_ID/state/#" \
-v
mosquitto_pub \
-h broker.binefa.cat -p 1883 \
-u ecat -P clotClot \
-t "iot02/SESSION_ID/action/button" \
-m '{"pin":0,"value":1}'
mosquitto_pub \
-h broker.binefa.cat -p 1883 \
-u ecat -P clotClot \
-t "iot02/SESSION_ID/action/button" \
-m '{"pin":0,"value":0}'
mosquitto_pub \
-h broker.binefa.cat -p 1883 \
-u ecat -P clotClot \
-t "iot02/SESSION_ID/action/ldr" \
-m '{"value":4095}'
mosquitto_pub \
-h broker.binefa.cat -p 1883 \
-u ecat -P clotClot \
-t "iot02/SESSION_ID/action/bme" \
-m '{"temp":25.5,"rh":60,"pressure":1013}'
mosquitto_pub \
-h broker.binefa.cat -p 1883 \
-u ecat -P clotClot \
-t "iot02/SESSION_ID/action/bme" \
-m '{"temp":-5.0}'
mosquitto_sub \
-h broker.binefa.cat -p 1883 \
-u ecat -P clotClot \
-t "iot02/sessions" \
-C 1
-C 1 rep un sol missatge (el retained) i surt.
El Session ID es pot fixar des de l'enllaç d'accés al simulador:
| Scheme | Comportament |
|---|---|
#open:sid=NOM&bin=URL |
Carrega el binari, assigna el Session ID, espera que l'usuari premi "Inicia QEMU" |
#run:sid=NOM&bin=URL |
Carrega el binari, assigna el Session ID i arrenca QEMU automàticament |
#run:sid=NOM&code=URL |
Compila el codi font ZIP, assigna el Session ID i arrenca QEMU |
Exemple complet:
https://iot02sim.binefa.cat/#run:sid=grup1&bin=https://github.com/.../firmware.zip
Un cop processat, el hash desapareix de la URL. El Session ID queda desat a localStorage fins que es canvia o s'assigna un de nou.