@TODO definir/investigar cuales serían los temas calientes de IoT en este momento para Latam, y sugerirlo al eventual equipo.
Conectar eventualmente con Cesar Cofre de innovacion de la PUCV
Asistencia al 80%, i.e. con más de 9 ausencias, se pierde el diplomado.
Boad miro de la clase https://miro.com/app/board/uXjVPXxO9NI=/
La bitácora se entrega 7 días después de cada módulo.
dos personas tienen que resumir la clase definir en grupo>
- NOmbre equipo, logo
- Ideas de proyectos
- 1er representante
- canales de comunicación
SE pueden vender
- sensores, actuadores, sistemas embebidos (HW)
- modelos, i.e. un credit score, o todos aquellos que reciben un valor de entrada x salida.
- aplicación. ¿Qué dos procesos nunca han conversado juntos? Qué mundos corren paralelos (i.e. silos), y necesitan cruzar información, para mejor toma de decisión.
Consultar
OSS: Operational Support System
BSS: Business Support System
Ver https://www.designthinking.es/inicio/index.php; sobre las fases del proceso creativo mediante design thinking
B2C : business to client
Pregunta de prueba: Alineación del modelo de negocios. ¿qué variables hacen que el cliente gane o pierda $ ? Como se puede cobrar/compartir lo ahorrado/ganado de estos servicios/productos ?
para el modelo de negocios, ver cual es la base de funcionalidad/features mínimos a ofrecer, y luego ofrecer un extra que añada ventaja competitiva.
Mantenimiento y servicio son adicionales en la facturación. Considerarlo dentro de la estructura de costo. ¿Cual es el MTTF de los componentes de HW usados? considerar tercerización-asociaciones para ciertos segmentos dentro del stack...
Buscar la mayor cantidad de datos
para la llamada bitácora https://miro.com/app/board/uXjVPWriWkU=/
La linea base es el simulado-supuesto sobre el cual se parte para demostrar el aporte que un nuevo sistema IoT aporta para generar valor al cliente.
¿qué es la innovación abierta?
(AP) - Comenzar a estructurar las soluciones/ideas IoT según los ejes definidos por docentes.
Con IoT, pasamos a ser (en el largo plazo) parte del negocio de los clientes.
El foco de soluciones IoT tiene que ser en identificar las variables que redituen para el cliente, y que sirvan para alinear nuestro modelo de negocios con el del cliente.
(AP) Lookup the Technology Readiness Level (EU standard); más detalles, en la entrada de wiki y también, WTF es el marco Cynefin (galés)? Es un marco conceptual para asistir en la toma de decisiones. Además de la entrada en wikipedia, está este video
Sobre agile y gestión de proyectos, mirar https://www.projecttimes.com/articles/the-pmbok-guide-seventh-edition-summary/
Ya vamos a comenzar a armar bitácora.
AP Angelo Va a enviar la rúbrica de la bitácora para este 1er módulo. done
- Look - mock - analyze, https://miro.com/templates/look-mock-analyse/, me gusta porque puede usarse para separar x clase
- newsletter template, https://miro.com/templates/newsletter/ me parece muy sucinto y eso ayuda cuando hay que ver las cosas en perspectiva.
- Un simple mind-map, https://miro.com/templates/mind-map/ puede servir también
- El syllabus, https://miro.com/templates/syllabus/ puede ser un elemento más canónico
- como bonus track, creo que la plantilla de funnel https://miro.com/templates/idea-funnel-backlog/ debiera ayudarnos a filtrar la idea de qué proyecto elegimos para trabajar en él.
- https://www.iotforall.com/iot-product-development
- episodio de podcast https://masproducto.com/desarrollo-de-productos-iot/, y aquí el podcast del invitado, Daniel Elizalde
- https://www.springer.com/series/11636/books?page=2
- https://ioterra.com/internet-of-things-iot-product-development-from-idea-stage/ ☑️
- https://www.intuz.com/iot-product-development-guide
- https://www.telcel.com/empresas/tendencias/notas/desarrollo-iot-en-mundo#
enlace de archivos repl.it: https://replit.com/@omendezmorales/Clase-1-modulo-2
En la función print
, puedo usar el parámetro end
para imprimir en la 1a línea , e.g.
print("esto es una prueba de print" , end=' ')
print("donde siga la misma linea")`
va a imprimir:
esto es una prueba de print donde siga la misma linea
¿cómo se crea una función con parámetros opcionales en Python?
inicializándolos al declarar la función
para usar interppñación de cadenas, este es un ejemplo ``>>> s = ‘Soy {0} y vivo en {1}’
>>> s.format(‘Juan’, ‘Santiago’)
‘Soy Juan y vivo en Santiago’
recordar que puedo concatenar llamadas, e.g.
s.replace().lower().replace
url para bitácora módulo 3 url de plantilla https://miro.com/app/board/uXjVPR06OzE=/
-
La función
insert
es <> deappend
, porque puedo elegir el lugar donde quiero insertar el elemento. -
para hacer unfolding, puedo usar
_
si no voy a usar esos elementos>
During the Triple Nickle activity, small groups first brainstorm and write down ideas on paper individually. After five minutes, each person passes their paper to the right, who gets another five minutes to build on that idea, until the paper returns to the original writer. This is a great way to quickly discover limitations of your idea and to strengthen it, without running the risk of immediately dismissing less conventional ideas.
Para indicar al compilador que un método falta x implementar, se usa la instrucción pass
. Ver referencia en este link
Para un ejemplo de estándar de conectividad pensado exclusivamente en domótica, ver el proyecto Matter en github
- El conjunto solo acepta elementos únicos, como las llaves de un diccionario. Los elementos al ser agregados son determinados en un orden aleatorio.
Acuerdos sobre medio de presentación:
Cada miembro se ocupa de tener los ejercicios de su área previamente, acordada (funciones en mi caso). + ejercicios post-clase.
Sobre las ideas de proyecto, estas son mis 3 candidatas>
- yo mismo
- todos los usuarios de luz eléctrica
- las forestales de chile/ Gobierno
-
que en temporada vacacional, de invierno, hay mucha gente usando trineos, y si los arriendo, ¿cómo evito que me los roben entre tanta gente usando otros trineos? Los datos de los trineos debieran tener un id único , tiempo de uso y su posición en coordenadas GPS
-
que la gente se le olvida apagar la luz cuando pasa de una habitación a otra. Los datos a capturar serían la presencia de gente en la habitación, y un tiempo de espera de estar vacío el espacio
-
que en la temporada de verano es difícil controlar los incendios forestales, y causan un daño enorme al ecosistema, y el riesgo de perdidas materiales & humanas. Los datos a capturar serían: ' humedad del aire, humedad del suelo, y presencia de humo ocasionado por combustión, así como coordenadas GPS de un conjunto de árboles de referencia. Para aportar datos de justificación, ver esta nota
- monitoreo de activos (para evitar robo)
- Tiempo de uso de los activos arrendados
- ahorro en la cuenta de energía consumida
- monitoreo de consumo de energía
- alerta temprana/prevención de incendios forestales
- prevenir a la población respecto de evacuar o no por incendio
Elementos de la bitácora para el módulo -- Todos los ejercicios; elegir la mejor opción del subcódigo. Se entrega por grupo general, i.e. La Resistencia. -- Una tarea aplicado a IoT -- una semana para entregar
(AP) Armar un repositorio ya sea en Colab, Repl.it, .zip y/o Github. Dejar al equipo que decida.
El modo w
de apertura en un archivo:
- sobreescribe el archivo si ya existía
- si no existe el archivo. lo crea
El modo a
de apertura en un archivo:
- crea el archivo si no existe
- si ya existe, va a escribir al final del texto existente.
para regresar al inicio de un archivo, se puede llamar la función:
file.seek(0)
(AP) Como seguimiento, meternos a Flask, para ir ganando tiempo, porque lo vamos a ver en el tema de estudio. Comenzar a jugar con el mismo, y aquí un tutorial para comenzar...
Estos son los pilares de la arquitectura IoT Estos pilares sirven como criterios para poder cubrir las necesidades de un cliente potencial.
-
Hay un estándar internacional llamada OneM2M,para armonizar estándares de telecomunicaciones. Esta armonización comprende interoperabilidad en arquitectura, especificaciones API, y seguridad para tecnologías IoT en los miembros participantes.
-
El otro estándar es el IoTWF, que "apunta al desarrollo de una IoT interoperable mundial, solucionado los desafíos sociales y comerciales pra crear un ecosistema y mercado IoT verdaderamente internacional".
Otras organizaciones que buscan armonización son aiot, NB Conectar con Rodrigo Muñoz Lara, quien tiene ya su micro-empresa de soluciones IoT.
Un Elevator Pitch para un edificio inteligente. Abordarlo al punto de vista de la seguridad:
- Vigilancia
- Alarmas
- Monitoreo de emisiones de gas-monóxido de carbono La idea es integrar todas esas funcionalidades, con suscripciones a la medida/customizables, según los deseos del comprador potencial. Esto permite la integración con otros prestadores de servicios (e.g. internet )
Para el elevator pitch, podemos usar una presentadora virtual asistida x IA, si es que no es un problema según la rúbrica.
Un nuevo concepto es la programación over the air , y más específicamente firmware over the air
En los esquemas de Cloud computing si hay latencia muy alta de transferencia de datos, se puede migrar a un esquema de edge computing, alias computación de frontera
Finalmente, el esquema de fog computing es un intermedio entre la Nube y la frontera (borde)
En el diplomado, vamos a trabajar con APIs del tipo web socket, y más concretamente, en las del subtipo REST. Para consultar las peticiones REST, se pueden probar/validar usando e.g. Postman
(AP) completar el tutorial de Postman , y probar las sig. APIs: (DONE) https://apis.digital.gob.cl/fl/feriados https://goweather.herokuapp.com/weather/Curanilahue http://airesantiago.mma.gob.cl/api/home2 https://api.gael.cloud/general/public/sismos
Esta es la URL del mock server que creé: https://46e89537-5b06-450a-b4ca-2dc8809a4313.mock.pstmn.io/corfo_IoT
Este es el recurso/servicio para conectar cosas: https://ifttt.com/explore/services, ver tutorial .
Hay un editor en línea para json
Existen diferentes arquitecturas (o modelos) de red:
y para enviar mensajes a diferentes apps, se usan puertos, usando la notación : La dirección IP está instrumentada en versiones para 32 bits (IPv4) y 128 bits (IPv6) . Para ver sobre los rangos IP permitidos, consultar este recurso
Para enviar mensajes a diferentes apps, se usan puertos, usando la notación :. Esta notación constituye un socket, y hay dos protocolos que permiten implementar esta conectividad (ver slide 8 de la clase correspondiente ):
El registro de direcciones en LATAM, se encuentra disponible en lanic
- Exploits. Ataque que aprovecha las vulnerabilidades de apps, redes, OSs, o hardware.
- Amenazas. Es el potencial para llevar acabo el daño o ataque.
- Vulnerabilidad (en HW & SW). Una debilidad en el diseño de un sistema/dispositivo
- Riesgos. Pérdida de la confidencialidad, integridad o disponibilidad de información
Para seguridad en la nube, ver https://cloudsecurityalliance.org/ Sobre los diferentes tipos de ataques IoT, ver slides 19-20 de la presentación
Para la rúbrica de este módulo, mandar el canvas de miró a rodrigo.munoz.l@pucv.cl y carlos.garcia.b@pucv.cl
Vamos a desarrollar con Tinkercad, usando Arduino . alguas empresas vistas fueron
- lemsystems. agricultura, hidrología, industria
- dos20. gestión de recursos hídricos y fluidos en general
- oasys. industria, tramporte, infraestructura & energía
- libellium. Agricultura, smarcities, sustentabilidad
La plataforma waspmote es similar a arduino, pero desarrollado x Libelium (ver arriba).
se pueden usar con wasmote los siguientes protocolos:
- CANBUS
- Modbus
- GPRS
- RS-485*
- RS-232
- Bluetooth
- Wifi
- ZigBee
Otra placa vista es la raspberry pi,
Vimos el arduino Uno (principalmente), así como la estructura de un programa. (AP) MIrar el video desde las 19.55 para explicarle a Lili como conectar el ARduino a un LED.
Al código que armemos, agregar
Autor Fecha Grupo Ejercicio
Luego, descargar para integrar a la carpeta. Este son los esquema de PULL-UP(izq) & PULL-DOWN(der)>
Para el ejercicio 2, usar el switch
case para elegir dependiendo de las entradas en la slide 33.
Se perciben/registran valores de resistencia (o capacitor) variable, corriente, frecuencia, voltaje. Como ejemplo de tipos de sensores, tenemos: En función de aquello, se procesan en el (micro) controlador, y se emite una respuesta a ejecutarse mediante un actuador
c= λ f
donde
c
> vel luz
f
> frecuencia de onda
λ
> long de onda.
hay sensores infrarrojos
- activos, que a su vez se dividen en
- reflexivos
- de ranuras
- modulados
- pasivos
- PIR detector de movimiento pasivo (mediante diferencias de calor)
EEn el sensor IR de tinkercad, la salida siempre es 1, pero si recive un mando del control remoto, entonces recibe un 0 en la saldia.
Dispositivos que permiten modificar variables de un sistema real Ejem'plos son:
- MOtores
- motor paso a paso. Realiza un movimiento en grados (e.g. [1,8° 2° 2,5° 5°])
- de Corriente continua
- Válvulas
- Pistones
En el pulso de Pulse Width Modulation (PWM), tenemos siempre un periodo T constante (duración). Se definen 5 términos:
D > ciclo de trabajo; T > periodo; τ > ancho de pulso; _V_ valor medio; A > amplitud
y donde
D = τ / T _V_ = A x D, o A x (τ / T)
En el caso de Arduino, tenemos estas frecuencias de salida con PWM
• Pines 3, 9, 10 y 11: 490 [Hz]
• Pines 5 y 6: 980 [Hz]
y la instruccion para generar esas frecuencias es
analogWrite(pin,value);
donde value oscila entre 0(0%) y 255 (100%), ej. un % del 20 % equivale al valor 51 (255 * 0.2)
(AP) Qué componente es este en tinkercad que permite ver el comportamiento de PWM?
Para la actividad 2 (slide 34), usar el driver de Puente H (L293D)) , donde Habilitador 1 conecta con señal PIN 9 (PWM) MOtor 1-a y 1-B conectan con PINS 3 y 6
La alimentación 5VDC conecta al PIN 16. Para mas detalles, ver la imagen
La solución demostrada x los docentes se ve así:
Estas señales necesitan convertirse a señales digitales (discretas) mediante un ADC
El ADC hace dos procesos:
- muestreo, usando un periodo T de toma de muestra, y
- cuantificación. Una señal análoga necesita cuantificarse en rangos de máximos y mínimos de tensión (Voltaje)., Arduino tiene una capacidad de cuantificación de 2^10 [0-1023], y permite conectar hasta 6 sensores análogos:
La entrada AREF del Arduino, es el valor máximo en [v] de la señal analógica que ingresa por los pines analógicos del Arduino, con el cual se obtiene el máximo valor digital, en este caso, se alimenta con 2V
La instrucción analogReference(type);
(que tiene que definirse en la función void setup()
) es la usada para configurar el voltaje de la señal de entrada, y tiene las siguientes opciones:
-
DEFAULT: la referencia de voltaje por defecto es 5[v] o 3.3[v], según la placa Arduino, en el rango 2^10 bits
-
INTERNAL: la referencia es 1,1[v] en ATmega168 o ATmega328 o 2.56[v] en ATmega8.
-
INTERNAL1V1: la referencia es de 1.1[v] (sólo en Arduino Mega)
-
INTERNAL2V56: la referencia es 2.56[v] (sólo en Arduino Mega).
-
EXTERNAL: el voltaje aplicado a AREF (entre 0 y 5[v]) es usado como referencia.
La lectura de señales analógicas se hace con la instrucción analogRead(pin);
. Hay otra isntrucción para escalar magnitudes:map(valor, fromLow, fromHigh, toLow, toHigh);
. Por ejemplo,
escalamiento=map(lectura, 0, 1023, 0, 10);
Para ver los valores continuos, se puede usar el monitor serial , usando los comandos:
Serial.begin(9600); // define un bit rate de 9600[baudios]
Serial.print(dato); // imprime caracteres ASCII o algún valor numérico
Serial.print("Texto"); // imprime un texto
Serial.println(dato); // imprime caracteres ASCII o un valor numérico, y al término agrega un \n
Serial.println("Texto");
Para una referencia de todas las funciones disponibles en ARduino, ver la documentación correspondiente
Para el ejemplo 2 del relé, esta es la imagen del circuito del docente:
para el ejercicio 3, el esquema de cableado del docente es>
Se recomienda usar la regla de tres para valores flotantes, de otro modo, usar la instrucción map(valor, fromLow, fromHigh, toLow, toHigh);
, que retorna valores enteros.
En los protocolos de comunicación interviene la cantidad de información a enviar, así como la velocidad. En comunicación serial , los datos se envían uno tras otro
• UART: Universal Aynchronous Receiver – Transmitter. • Usa sólo un cable para enviar datos desde un Tx a un Rx + la conexión a tierra. • ¿Cómo sabe el receptor cuando comienza o termina un bit o, en general, la información? Debe haber una configuración común entre Tx y Rx en términos de:
- Velocidad de transmisión.
- Longitud del dato.
- Bits de inicio y parada
En Arduino se utilizan los PINs 0 y 1 de la salida columna I/O:
Serial.begin(baudios);
Serial.print(dato);
dato = Serial.read( );
Serial.write(dato);
Serial.available( ); //Para conocer si existen datos pendientes en el bus de comunicación serial.
//Retorna TRUE o FALSE.
Serial.end( );
//Para deshabilitar el puerto serial y de esa forma poder usar los pines TX y RX como Pines
digitales
Comunicación Serial: SPI
• SPI: Serial Peripheral Interface (Interfaz Periférica en Serie). • Considera 4 cables + conexión a tierra.
- Una señal de reloj: SCLK.
- Entrada esclava y salida maestra: MOSI.
- Entrada maestra y salida esclava: MISO.
- Selección de chip: SS.
• Principales ventajas de SPI:
- Permite comunicación full dúplex. En ese sentido, ambos dispositivos podrían enviar y recibir información de forma simultánea.
- I2C no permite comunicación full dúplex, ya que es sólo simplex.
- Velocidad de SPI es mucho mayor que I2C y UART, pero al mismo tiempo el consumo de energía es menor.
Para una comparativa entre SPI, UART & I2C, ver este enlace. También LA slide 37 de la clase 5 contiene el cuadro comparativo
Comunicación Serial: I2C I2C: Inter – Integrated Circuit., es un protocolo de comunicación sincrónico, a diferencia de UART, creado por Phillips. • Necesita 2 conexiones + la conexión a tierra.
- SDA: Signal Data.
- SCL: Signal Clock. • En Tx y Rx debe existir la misma configuración de: cantidad de bits que se envían desde un Tx a un Rx y la velocidad de transmisión. Por lo general, I2C funciona con velocidades de 400[kbit/s] y enviar datos de 15 o 16 bits.
Trabaja en 2 fases: direccionamiento, y transmision de datos ; ver fig. siguiente:
En arduino, se pueden usar los PINS digitales arriba de AREF y los PINs analogos A4 y A5:
Instrucciones para Comunicación LCD I2C
• Librería:
#include <LiquidCrystal_I2C>
• Instrucción:LiquidCrystal_I2C lcd(adress,number_columns,number_rows);
• Instrucción:lcd.init( );
// se define en void setup ( )
• Instrucción:lcd.backlight( );
// se define en void setup ( )
• Instrucción:lcd.setCursor(column_index,row_index);
• Instrucción:lcd.print(“This is message”);
• Instrucción:lcd.clear( );
Para el ejemplo 2, el chip del LCD es PCF85741, y en TTinkercad, se configura así:
Los docentes compartieron este codigo del ejemplo 2.
NB, el potenciómetro tiene un rango de [0 - 2^10 - 1]
Vamos a usar el ESP8266, La configuración de los pines es de dual i.e. Arduino IDE, o los nombres de PINs de la tarjeta
NB issue found documented here para activar el serial, ver este link, y este otro
En el menú sketch
de Arduino IDE, hay uno básico que dice Blink
.
AP- Probar ese, para ver que la conexión está correcta en el breadboard.
El ejercicio 1 tiene esta conexión
Las resistencias vienen con unas barritas de colores , e.g. La resistencia de 10KOhm es café-negro-naranja. Para más detalles, ver el video siguiente
SE usan 2 resistencias: 1 de 220 Ohm, y la otra de 10KOhm . LA 1a va al cátodo del LED:
La 2a va al dip switch , junto con el PIN D5 de entrada (ver cable verde de la sig imagen):
y así se ve en TinkerCad -usando Arduino:
Usa la fórmula de cálculo de distancia D :
D = t/2 ∗c
para obtener distancias en centímetros , necesitamos convertir de metros a cm, y de segundos a microsegundos , i.e.: d = t/2 * c
donde
c = 34000 (velocidad del sonido)
2(segundos) = 2_000_000 ( μsecs )
D = t * 58.8
o
D = t / 0.017
El sensor que viene en el kit es HC-SR04, y tiene un rango de alcance entre 2 y 400 cm.
Para hacer la lectura del sensor, se usa pulseIn(pin, valor)
Con el cableado del Ejercicio 1 es:
Del sensor de movimiento HC-SR04, El cable verde (trigger) corcode al PIN de salida, y el amarillo (echo) al de entrada.
Para modular el contraste del LCD, modularlo con el tornillo dentro del cuadro azul:
Vieron el sensor Dallas DS18B20 (de temperatura) INternamente contiene un CAD
- Rango de operación está entre -55° a 125° C
- Polarización de 3V a 5,5V
- Requiere una resistencia pull-up, cuya magnitud en Ωs va a depender de la longitud del cable a conectar (ver tabla abajo)
- Usa el protocolo one-wire, utiliza el bus 1-wire p/enviar la información al micro-controlador
Hoy se va a a utilizar el sensor de humedad. Hay distintos tipos de humedad: absoluta, relativa, y del suelo. Esta última se mide como proporción de peso de agua vs el suelo que deseamos medir. En el proyecto de este diplomado, usaremos el sensor FC-28 , que usa el método de resistencia eléctrica (diapo 8 de la presentación de clase).
(AP) sacar el múltímetro y probar el funcionamiento del sensor con agua, y con la plantita del baño.
El sensor opera con el rango de voltaje de 0-5V, y tiene una salida análota y otra digital:
Es importante destacar que la salida analógica del sensor es inversamente propocional al % de humedad en la tierra: mientras + húmedo, menor es el V de salida. En cuanto a la salida digital, se puede usar el potenciómetro de la parte posterior del sensor para fijar un nivel de referencia de humedad, el cual una vez sobrepasado da un 1 (reflejado en un 2° LED con que viene el sensor):
Veremos la adquisición de datos, usando un datalogger. Se usará el puerto serial para comunicarnos con la WeMO.
Usamos la conexión del puerto Serial, y para comunicarnos usamos el módulo de Python pyserial
Clase final del módulo. Charla invitada de Creatiox Highlight: estructura administrativa para levantar un proyecto IoT:
El punto 3 de la imagen arriba se estudia los requerimientos de electrónica, protocolos de comunicación, almacenamiento, etc. El punto 4 indica un % de certeza de los elementos existentes (off the shelf), y el % que queda x desarrollar.
Las fases son de un proyecto IoT:
- Concepto
- Idea
- Prototipo
- Comercialización Elementos que componen un proyecto IoT: 1 HW 2 FW 3 Cloud 4 SW
Recomendación: Comprar licencia Click Up (licencia de $5 USD anual -o mensual?)
Para la nube, Creatiox usa ubidots , que tiene mucha experiencia en la parte de la nube, y especialmente cuidan el aspecto de integración de seguridad.
Los datos de contacto son
Email: eleazar@creatiox.com Fono: +56 9 9436 6623 Sitio Web: [https://creatiox.com](https://creatiox.com)
(AP) Ver en qué consiste https://thingsboard.io
El listado de ejercicios-ejemplos está en https://docs.google.com/spreadsheets/d/1i3zwnMhfGvi0Pvq4RSoSBmhp75oUBrbIf-APlCd9N8Q/edit?usp=sharing El drive para guardar el código es este
Para los ejercicios que son de simulacuiones (en TinkerCAD), solo se requiere enviar el URL de la simulación. La fecha de entrega es el 28 de Noviembre.
Las siguientes son los rangos de cobertura según el tipo de RED/tecnología de acceso:
El mapa de cobertura digital de Subtel está disponble aquí
En la diapo 18, se menciona la IETF, que es una ong de stándares para internet.
Radio mobile es un SW para hacer estudios de cobertura.
zigbee funciona sobre el estándar IEEE 802.15.4. Este estandar está en la capa 1 física del modelo OSI; visto en el [módulo 3](## clase jue 20 oct 2022). Esto queda ilustrado en el sig. diagrama:
Un ejemplo de HW que implemente este estándar para comunicaciones es el xbee
Para un ejemplo de comparativa entre dos alternativas de HW (e.g. 3G vs Zigbee), ver este comparativo: https://www.digi.com/products-compare/56350/56516
Veremos el protocolo WiFi (IEEE 802.11 a/b/g/n ) En 2.4 GHz, para NorteAmérica se usan los canales 1-11; para Europa de 1-13, y para Japón 1-14.
La sensibilidad del equipo es la potencia mínima que puede recibir un equipo para seguir operando.
La relacion decibel a miliWatts se expresa mediante
dBm = 10 log(mW)
ver mas detalles en Wikipedia.
El SSID (Service Set ID) es el nombre de la red Inalámbrica, y hay distintos tipos:
- Independent Basic (IBSS)
- Basic (BSS)
- Extended (ESS)
- Mesh Basic (MBSS)
WEP y WPA son estándares vulnerables. Se recomienda usar WPA2 & WPA3
Hay un emulador de TP-Link para ver los puntos acceso WiFi.
WiFi HaLow es un estándar IEEE para equipos de baja potencia. Aquí hay una descripción detallada.
La API de la librería WiFi que usamos está en este enlace
LoRa es una técnica de modulación, que puede funcionar sin licencia en bamdas inferiores a 1Ghz, e.g. 915, 868 y 433 MHz En Chile se usan planes de frencuencia AU915. Del spreading factor (SF) mostrado en la tabla de la diapo 4, esta imagen lo explica mejor, i.e. la cobertura/tasa de trasnsferencia vs consumo energético:
Los sensores LoRa son más baratos que los LoRaWAN. Los GAteway LoRa solo funcionan con sensores LoRA, y a su vez los gateway LoRaWAN solo funcionan con dispositivos LoRaWAN
Es un protocolo con licencia propietaria de Semtech, que se basa en la modulación LoRa, pero que agrega valor en la capa de contro de accceso al Medio (capa 2 del modelo OSI). Con TTN se puede obteber conectividad al servidor de red, para poder usar sus servidores con gateways LoRaWAN.
En LoRaWAN, la topología de red es siempre en estrella.
LoRaWAN clasifica en tres tipos de dispositivos: A, B, y C. Todos los dispositivos deben implementar A, porque C y B son extensiones de la especificación de dispositivos de la clase A.
La LoRa alliance tiene registro de certificación con los dispositivos a crear que se ajusten a este estándar. La especificación que se va actualizando, y cada nueva versión es compatible con la anterior. (AP), Ver alguno de los vids de lora alliance, https://lora-alliance.org/webinars-videos/
Un proveedor de dispositvos LoraWAN es https://www.advantech.com/en
Para cotizar electrónica en CL; ver https://www.zonaindustrial.cl
Principalmente se usan
HTTP usa los verbos GET, POST, PUT y DELETE para pedir datos al servidor.
Hay varias categorías de códigos de respuesta frente a las peticiones HTTP:
CoAP está diseñado para interactuar con HTTP y RESTful a través de simples proxies.
Tiene como ventaja que se puede lograr comunicación entre pares, i.e., peer2peer
Consiste en un servidor central (router o broker) que recibe los mensajes de los dispositivos emisores.
Hay varios ejemplos de brokers en la nube:
URL of MQTT publisher http://www.emqx.io/online-mqtt-client#/recent_connections/a1a4024c-7a14-4e52-93b8-73ff69f55685
URL de bitácora módulo 5: https://miro.com/app/board/uXjVP7a88V4=/
Dan una granularidad más fina para gestionar los diferentes componentes de un sistema de información.
Es un almacén de datos para transmisión constante de datos en tiempo real (streaming).
Es un intermediario (broker) OSS, implementa el protocolo [MQTT]("#### MQTT (Message Queue Telemetry Transport)") en algunas de sus versiones. SE caracteriza x usar pocos recursos, lo que lo hace ideal para usar en dispositivos IoT.
Se usó en clase la librería de paho-mqtt para Python.
Se conectaron a MongoDB, e insertaron una colección de datos. Para usar los datos, ver documentación del shell, y el módulo de pymongo.
Vieron también influxDB
Son aplicaciones modulares, auto-contenidas , que se pueden publicar, localizar e invocar a través de la red.
Librerías/módulos en Python para desarrollo web se usan Flask (y flask_restful, requests), y FastAPI. Para correr una app web en Flask con VSCode, ver los detalles de este tutorial, en particular, la instrucción para correr la app, .e.g., python3 -m flask run
.
Para exponer el sitio web (local) a través de ngrok, llamarlo con esta línea:
ngrok http 5000
Se usan (los verbos HTTP) POST para insertar, DELETE para borrar, y PUT para actualizar datos en el servidor.
Se vió Grafana, herramienta para visualizar tableros web interactivos.
Mi espacio grafana es omendezmorales.grafana.net
.
Tanto en grafana como en influxDB, se puede usar el lenguaje flux para consultar las series de tiempo, aquí está otro recurso de ayuda
Comienzo de taller. Usar además de la publicación de la temperatura, agregar la humedad de una planta. Hubo problemas para publicar desde el Wemos por temas de formateo, parsing y demás. Mejor usar los datos de JSON library.
Respecto de agregar más de una variable en los puntos de datos de influxDB, es mejor ver los ejemplos de la librería en Python, en especial el método from_dict
La arquitectura del sistema es la siguiente:
Vimos consumo de datos via API usando el plugin de infinity. Otra recomendación fue (en HW) usar el BroadLink RM4, y como controlador el home assistant, para controlar los dispositivos conectados.
Para poner dos variables de distintas escalas en el mismo gráfico en Grafana, se usa la opción de override en las opciones de timeseries.
- con curl, se puede consultar apis mediante los switches
location
yrequest
, eg.,curl --location --request GET 'https://apis.digital.gob.cl/fl/feriados/2022'
Otros ejemplos de curl con diferentes verbos (e.g. POST) pueden encontrarse en este enlace
Vimos Ubidots. Una plataforma IoT para el escalamiento de prototipos. Se considera ya una herramienta para salir a producción.
Funciona en modos que satisface IP al 100%, o parcialmente:
Los puntos(dots) se generar con información no solo de las métricas que nos interesans, sino metadatos relativos al espacio (e.g. latitud, longitud) y tiempo(timestamp).
Hay unos tutoriales para conectar a ubidots usando Python/ Hay así mismo una guía para crear un dispositivo como la WeMOS dentro de Ubidots
Se crean/registran dispositivos,
y luego se pueden definir tableros, e.g.,
(AP) Cómo se puede agregar Latitud y Longitud de los dispositivos? LO definen con Set Location, y luego editan de forma manual :
Se puede usar curl también para hacer peticiones POST & PATCH
Para transmitir datos de forma segura a los sserver de ubidots, se la dirección segura usa el puerto 443. ES importante siempre leer la respuesta http de los código de estados (e.g. 200, 401, 404, etc). Para recibir datos, se puede consultar la documentación respectiva.
En los tableros de ubidots, se hace una distinción entre las label (de dispositivos, variables, etc.), y los identificadores de los mismos, e.g.
Hay también un cliente de la API en Python
(AP) rescatar del foro el último .py de Renzo para leer datos desde ubidots
Los componentes de una arquitectura de referencia para plataformas IoT consideran:
- Servicios de mensajería
- BBDD
- servicios web
- Visualizacion
Nótese que en la arcituectura de referencia que nos mostraron en el módulo, los protocolos de comunicación aparecen en las líneas de conexion :
Ejemplos de plataformas en la nube que integran todo lo anterior, son AWS IoT, Azure IoT.
Un artículo sobre el uso de AWS IoT se puede leer-escuchar aquí.
Un aspecto importante de la arquitectura a usar, es el monitoreo de eventos (e.g. batería baja de dispositivos, algún umbral sobre-pasado en las variables reportadas, etc.), AWS IoT events es un servicio de datos es un ejemplo del aspecto en cuestión.
Es importante considerar los requerimientos de escalabilidad, para efectos de no consumir todos los servicios ofrecidos por las plataformas, además de comparar si otros proveedores acaso ofrecen mejores ofertas de costo.
En la plataforma ubidots también existe un plugin para conectar con el servicio AWS IoT Core
Tiene entre otros componentes, IoT central que es un gestor de despositivos, y cuenta con servicios para visualizar y analizar datos. UN comodín de Azure, es el Azure Stack Edge, que es un enfoque hibrido (mitad on premise, mitad cloud) que ofrece HW como servicio
Docentes van a mandar rúbrica para una bitácora a armar, + una tarea "simple", relacionada con arquitectura de referencia.
URL de bitácora módulo 6: https://miro.com/app/board/uXjVPy97pm4=/ URL de tarea final: https://is.gd/Iuquk4
otros recursos de aprendizaje IoT:
Vamos a tener el siguiente formato de presentacion para los últimos dos días de presentaciones:
Otros aspectos a considerar son:
Sobre la rúbrica que envió Angelo, para el ultimo punto sobre coherencia problema solucion (FIT), ver esta página. Vamos a usar para el desarrollo del proyecto miró, y de ahí vamos a ir rellenando el ppt
Para la capa física, se pueden usar diagrama de bloques:
Se espera que hagamos una tabla con los presupuestos (en términos de inventario de sensores) para el proyecto. Una vez que tengamos eso, necesitamos definir la lógica de control usando el diseño principal de un diagrama de flujo. No necesita ser tan detallado. Ver slide 13 de la diapositiva.
#TODO
re-asignar las imágenes en las ubicaciones donde se colocaron originalmente con Obsidian.