IoT y dispositivos (pyzed.iot)
Servicios que hablan con dispositivos: placas en un puerto serie, brokers MQTT, WebSockets,
sockets UDP y TCP, PLC y medidores Modbus, aparatos Bluetooth LE y lo que responde en la red
local. Funcionan como los servicios: los manejadores van en
on_<evento>=, la conexión corre en un hilo propio y los eventos llegan a los manejadores en
el hilo de la app. En Pyzed Design son los componentes de la categoría IoT. Mira la
guía de IoT.
placa = pz.SerialPort(match="arduino", baud_rate=115200, on_line=self.lectura)placa.connect()
mqtt = pz.MqttClient("broker.local", subscribe="casa/#", on_message=self.recibido)mqtt.connect()mqtt.publish("casa/lampara/set", "on")Toda conexión tiene connect(), disconnect(), connected, running y los eventos
connected, disconnected y failed; con reconnect (milisegundos) vuelve sola.
Puertos serie
Sección titulada «Puertos serie»SerialPort
Sección titulada «SerialPort»class SerialPortUn puerto serie o serie USB (Arduino, ESP32, Pico, GPS…): port lo nombra ("COM3", "/dev/ttyUSB0") o, vacío, se usa el primero que nombre match ("arduino", "2341:0043"; vacío: el primer puerto USB). Lanza data (bytes) y line (texto); write(), send_line(), reset() (DTR), set_baud_rate(). SerialPort.ports(match) lista los puertos. Vuelve a abrir el dispositivo cuando regresa (reconnect, 1000 ms por defecto).
SerialWatcher
Sección titulada «SerialWatcher»class SerialWatcherAvisa cuando se enchufan y desenchufan dispositivos serie, cada interval milisegundos: plugged y unplugged con un PortInfo (name, kind, vid, pid, usb_id, manufacturer, product, description), change con la lista; ports es la última lista.
Mensajes y sockets
Sección titulada «Mensajes y sockets»MqttClient
Sección titulada «MqttClient»class MqttClientUn cliente MQTT 3.1.1 (Mosquitto, Home Assistant, EMQX…): publish(tema, datos, qos, retain), subscribe(tema), unsubscribe() y on_topic(patrón, manejador) con los comodines + y #. Cada mensaje lanza message con un MqttMessage (topic, payload, text, value, json()); last guarda el último de cada tema. TLS, usuario y contraseña, QoS 0, 1 y 2, último deseo (will) y las suscripciones se mantienen tras cada reconexión (2000 ms por defecto).
WebSocket
Sección titulada «WebSocket»class WebSocketUn cliente WebSocket (ws://, wss://): send() texto, bytes o JSON; cada mensaje lanza message (texto, bytes o, con json=True, los datos ya leídos). headers, protocols y un ping cada ping_interval milisegundos.
UdpSocket
Sección titulada «UdpSocket»class UdpSocketEnvía y recibe datagramas UDP: start() escucha en port y cada uno lanza message con un UdpMessage (data, text, json(), host, port); send(datos, host, puerto), reply(mensaje, datos), broadcast y multicast_group.
TcpClient
Sección titulada «TcpClient»class TcpClientUna conexión TCP (con TLS si se quiere) a un dispositivo o servidor: lanza data y line; write() y send_line().
Industrial
Sección titulada «Industrial»ModbusClient
Sección titulada «ModbusClient»class ModbusClientUn cliente Modbus por TCP (host) o RTU (serial_port, RS-485): read_coils, read_discrete_inputs, read_holding_registers, read_input_registers, read(tabla, dirección, formato) ("float32", "int32"…), write_coil, write_register, write_coils, write_registers y write(dirección, valor, formato). Las líneas de poll (nombre tabla dirección [formato] [cantidad]) se leen cada interval milisegundos y lanzan update con un dict. Lanza ModbusError si el dispositivo rechaza la petición o no responde.
Descubrimiento y Bluetooth
Sección titulada «Descubrimiento y Bluetooth»DeviceDiscovery
Sección titulada «DeviceDiscovery»class DeviceDiscoveryEncuentra los dispositivos de la red local con mDNS/Bonjour (service: "_http._tcp", "_esphomelib._tcp"…; vacío: todos) y SSDP/UPnP: scan(), start(); lanza found y lost con un Device (name, host, port, address, kind, service, hostname, properties, url), change y done. pyzed.iot.resolve_local("esp32.local") busca una dirección.
BluetoothScanner
Sección titulada «BluetoothScanner»class BluetoothScannerBusca dispositivos Bluetooth LE cercanos durante timeout milisegundos, filtrados por match (nombre o dirección) y services: scan(), start(), devices (el más cercano primero); lanza found con un BleDevice (address, name, rssi, uuids, manufacturer_data), change, done y failed. Necesita pip install "pyzed-ui[bluetooth]" (bleak).
BluetoothDevice
Sección titulada «BluetoothDevice»class BluetoothDeviceUna conexión a un dispositivo Bluetooth LE por address o name: read(uuid), write(uuid, datos, response), subscribe(uuid), services(); las características de notify lanzan notification con un BleNotification (uuid, data, text, value). Los UUID pueden ser cortos ("2a37") o nombres ("heart_rate_measurement", "battery_level", "nordic_uart_tx").