-
Notifications
You must be signed in to change notification settings - Fork 0
SystemManager
La clase System_Manager del módulo system.py permite generar un gestor del sistema. Este controlará, entradas, pantalla, notificadores, temporizadores, socket y cliente MQTT.
El sistema permite la comunicación con los diferentes elementos a través de señales, estas pueden incluir datos a enviar junto con ellas. El sistema activa o desactiva dinámicamente las entradas dependiendo del conjunto de señales que pueden recibirse en ese momento.
Las señales son números enteros. El sistema utiliza los números del 0 al 19 ambos incluidos para señales internas.
Al crear el sistema, este se intentará conectar a internet para actualizar el reloj con el tiempo actual. En caso de que el ssid o la contraseña no se proporcionen no intentrá realizar este paso.
Nombre del punto de acceso al que conectarse.
Contraseña para acceder al punto de acceso.
Permite incrementar el tamaño de la pila para la creación de nuevas hebras. Permite que estas puedan ejecutar más funciones anidadas y alamacenar más datos. Pero se reduce el número máximo de hebras que pueden exitir al mismo tiempo.
Desfase de la zona horaria.
Devuelve el tiempo actual como una tupla de 8 elementos, teniendo en cuenta el desfase por la zona . (año, mes, dia, horas, minutos, segundos, dia de la semana [0,6], dia del año [1,365]). Para el día de la semana, el 0 se corresponde con lunes y el 6 con domingo.
Devuelve el tiempo de segundos pasados desde el 1 de enero de 1970 aplicando el desfase por la zona horaria.
El sistema proporciona un espacio de memoria compartido para todos sus elementos. Devuelve una copia de este espacio de memoria en forma de diccionario. Las claves deben ser número enteros, el valor puede ser de cualquier tipo.
Guarda el valor en el espacio de memoria compartido. Si la clave existe, entonces actualiza el valor, en caso contrario crea la nueva clave y alamacena el valor.
Inicializa la interfaz wifi y se conecta al punto de acceso.
Devuelve un booleano del estado de la conexión a internet.
Añade una nueva entrada al sistema, como por ejemplo un boton. Este elemento tiene que ser del tipo Input para que el sistema pueda hacer uso de él. Consulta la documentación para saber más sobre las entradas
Añade la pantalla que controlará el sistema. Para más información revisar la clase Display
Devuelve la pantalla actual asignada al sistema, o None si no tiene ninguna asignada.
Devuelve el identificador de la vista que esta mostrando actualmente la pantalla.
Permite a cualquier componente del sistema enviar una señal para que llegue al componente que pueda consumirla. Junto con la señal se puede enviar cualquier tipo de datos. Si esta debe producir una actualización de la vista o si es necesario actualizar las entradas activas e inactivas del sistema.
create_timer(timer_id: int, callback: Function, period: float, mode: TIMER_ONE_SHOT | TIMER_PERIODIC )
Crea un nuevo temporizador en base al identificador si este no esta en uso. Para el ESP32 que dispone de 4 temporizadores, los identificadores pueden valer [0,1,2,3]. Se define la función de callback a ejecutar cuando el temporizador se active. El periodo en milisegundos para su activación. Por último se establece el modo, TIMER_ONE_SHOT para dispararlo una vez o TIMER_PERIODIC para dispararlo en bucle hasta que este sea eliminado.
Elimina el temporizador si está en uso.
Añade un controlador al sistema. Ver documentación sobre el controlador
Si el sistema tiene asignado una pantalla cambia la vista actual.
Se crea una nueva tarea de red haciendo uso de un socket. Se reciben la IP y el puerto de conexión, la función de callback ha ejecutar. Esta función debe recibir 2 parámetros, el primero es el propio sistema donde esta ejecutandose la tarea y, el segundo un objeto de la clase socket (consultar documentación oficial de Python). Es importante que la función de callback no tenga bucles infinitos. El útlimo parámetro indica si ejecutar la tarea del socket en bucle o solo una vez.
Elimina la tarea de red si estaba activa.
mqtt_create_subscriber_task(clientID: str, ip: str, port: int, topics_and_qos: Dict[str, int], function, clean_session: bool, enable_notifiers: bool) -> bool
Crea una tarea para el cliente MQTT. Devuelve un booleano que indica si la conexión se realizó correctamente.
Diccionario donde las claves son los temas a los que suscribirse y los valores la calidad del servicio [0,1,2].
La función a ejecutar como callback cuando se reciba un mensaje de alguno de los temas en los que se ha suscrito. Esta función recibe como primer parámetro el sistema donde se está ejecutando la tarea, el tema (str) y el mensaje recibido (str)
Indica si activar los notificadores por defecto al recibir un mensaje de cualquier tema.
Ejemplo
def mqtt_message_callback(sys: System_Manager, topic: str, msg: str):
print("Message from topic: ", topic)
print("Message: ", msg)
topics = {
"test/uPyOS" : 2,
}
MQTT_SERVER = "192.168.1.56"
MQTT_PORT = 1884
res = sys.mqtt_create_subscriber_task("esp32", MQTT_SERVER, MQTT_PORT, topics, mqtt_message_callback, clean_session=True, enable_notifiers=False)
if res:
print("MQTT conection successful")
else:
print("Error coneccting to MQTT server")Elimina el cliente MQTT si estaba activo.
Añade un notificador al sistema. Ver documentación notificadores.
Activa todos los notificadores asignados al sistema.
Desactiva todos los notificadores activos.
El sistema entra en modo ahorro de energía. Desactiva pantalla, temporizadores y entradas. El cliente MQTT y los notificadores siguen activos.
El sistema sale del modo ahorro de energía. Reestablece los temporizadores y entradas activos antes de entrar en el modo y activa la pantalla de nuevo.
System_Manager.TIMER_ONE_SHOT System_Manager.TIMER_PERIODIC
System_Manager.SIG_SLEEP System_Manager.SIG_WAKEUP