Archivo de la etiqueta: Industria Conectada

Raspberry Pi en la Industria

Dada la gran popularidad de Raspberry Pi, su uso también se ha extendido en la industria. Raspberry Pi para la industria: https://www.raspberrypi.com/for-industry/ 

Artículo de Raspberry Pi en la industria: https://blog.temboo.com/raspberry-pi-iot/

  • Barato
  • Disponibilidad
  • Documentación y soporte de la comunidad

Problema de uso de Raspberry Pi en productos comerciales: https://tecnoticias.net/2019/07/20/por-que-la-raspberry-pi-no-es-una-buena-opcion-para-productos-comerciales/

Una primera opción es usar una carcasa para carril DIN:

Uso con Codesys: https://www.instructables.com/id/Raspberry-Pi-Based-IEC-61131-3-Compatible-PLC/

Interesante módulo con salida de relés y entradas opto aisladas http://www.hwhardsoft.de/english/simplibox/io/

Tarjetas microSD de Grado Industrial

La tarjeta microSD de Raspberry Pi es el talón de Aquiles de Raspberry Pi para su uso en entornos industriales.

El compute module de Raspberry Pi https://www.raspberrypi.com/products/compute-module-4/?variant=raspberry-pi-cm4001000 que lleva eMMC Flash en lugar de microSD

Pero podemos usar en Raspberry Pi tarjetas microsd de grado industrial PSLC.

Las tarjetas microSD están disponibles en tres estándares de capacidad: SD (Standard Capacity), SDHC (High Capacity) y SDXC (eXtended Capacity) y con el bus hasta UHS-I. Algunos modelos cuentan con una interfaz SPI adicional. El pequeño formato, el bajo consumo energético y la amplia gama de tipos de NAND (SLC, pSLC, MLC) hacen que las tarjetas microSD se conviertan en unos soportes de almacenamiento de elección para varios diseñadores industriales.

Técnicamente, una NAND hace referencia a una puerta lógica; concretamente a una que produce una baja (0) cuando el resto de las salidas están en alta (1). Esta propiedad permite realizar cualquier tipo de operación binaria básica usando una combinación de puertas lógicas de este tipo. Las memorias NAND (o flash NAND) son un tipo de memoria no-volátil que no requiere de energía para almacenar datos.

Primero, definamos los diferentes tipos de celdas de memoria NAND Flash:

  • En SLC (Single Level Cell), cada celda tiene un 1 o un 0. Esta es la forma más confiable.
  • En MLC (Multi Level Cell), cada celda contiene 2 bits de datos, por lo que hay 4 niveles de carga por celda, lo que duplica la densidad a expensas de aumentar la sensibilidad a cualquier variación de carga.
  • En el más reciente TLC (Triple Level Cell), contiene 3 bits por celda y es la forma más densa y menos duradera.

pSLC es pseudoSLC y SLC ya es grado industrial. pSLC significa pseudo celda de un solo nivel. El flash pSLC usa componentes flash MLC NAND, pero la totalidad de cada celda no se usa para el almacenamiento, lo que limita la cantidad de datos que se pueden almacenar en cada celda. Estos productos a menudo se promocionan como de grado industrial, pero pSLC y SLC son muy diferentes.

Comparativa entre pSLC y SLC: https://www.delkin.com/blog/comparing-pslc-and-slc/ 

Más información:

Ejemplos de tarjetas microSD de grado industrial:

pSLC para aplicaciones IoT: https://business.kioxia.com/content/dam/kioxia/ncsa/en-us/business/memory/asset/KIOXIA_pSLC_for_IoT_devices_Tech_Brief.pdf

Una eMMC se compone de memoria flash NAND SLC o MLC. Esta memoria se conecta en paralelo directamente con la placa base del dispositivo. El controlador integrado se hace cargo de colocar los datos en la memoria, liberando al procesador de esta tarea. 

Y ver en comparación con las eMMC: https://blogs.directinsight.co.uk/nand-flash-types-in-embedded-slc-mlc-tlc-pslc/ 

Panel y PLCs Industriales Basados en Raspberry Pi

PLC/PAC Industrial Shields: https://www.industrialshields.com/industrial-plc-pac-raspberry-pi-20211210-lp 

De industrial Shields: https://www.industrialshields.com/es_ES/industrial-panel-pc-based-on-raspberry-pi

Productos: https://www.industrialshields.com/es_ES/shop/category/hmi-and-panel-pc-panel-pc-3

Comprar: https://www.industrialshields.com/es_ES/shop/product/touchberry-pi-10-1-raspberry-pi-4b-1478?category=3

Guia de Usuario: https://www.industrialshields.com/web/content?model=ir.attachment&field=datas&id=137792&

UPS y RTC shield: https://www.industrialshields.com/es_ES/shop/product/raspberry-pi-ups-and-rtc-shield-584?search=raspberry

Módulos de Entradas y Salidas

Web: http://developer.opto22.com/pi/

Uso con Node-RED: http://developer.opto22.com/nodered/general/

UniPi

Unipi: https://www.unipi.technology/ 

Productos: https://www.unipi.technology/products

Revolution Pi

Web: https://revolutionpi.com/ 

Productos: https://revolutionpi.com/revolution-pi-series/ 

Comprar: https://revolutionpi.de/shop/en/ 

HW industrial basado en Raspberry Pi: https://hardwaresfera.com/noticias/hardware/raspberry-pi-crean-los-modulos-kunbus-basados-en-una-compute-module-3-para-iot-y-para-industria/

Características:

  • PLC + IPC + HMI + retrofit unit 
  • Normativa industrial: EN61131-2
  • Usa el compute module B+ con hasta 32 GB
  • Crypto chip security chip
  • Lenguajes de programación: Node-RED, CODESYS, Logic.CAD3 y Python (Para CV y ML)

Tiene un interfaz gráfico de configuración, tanto del HW como del SW: 

Iono Pi/Strato

Web: https://www.sferalabs.cc/

Unidades de control: https://www.sferalabs.cc/strato/

Módulos de entrada y salida: https://www.sferalabs.cc/iono-pi/

Artículo: https://www.open-electronics.org/iono-pi-a-raspberry-pi-based-plc/

Articulo: https://www.hackster.io/news/strato-and-iono-pi-enhance-the-raspberry-pi-s-looks-and-capabilities-35dd773cef2e#.axjqpyran 

Hardware industrial basado en plataformas abiertas extendidas y respaldadas por la comunidad, como Raspberry Pi, Arduino y Pycom:

Flowfinity M1: https://www.sferalabs.cc/blog/flowfinity-introduces-the-m1-controller-developed-in-collaboration-with-sfera-labs/

Web de Flowfinity: https://www.flowfinity.com/apps/iot-solutions-edge-computing.aspx 

Pigeon

PLC basado en Raspberry Pi: https://pigeoncomputers.com/

Fabricante: https://www.kristech.eu/

Modelo instalado para control de freecoling en máquina de climatización: https://pigeoncomputers.com/products/pigeon-rb300/

Tiene una salida HMDI a la que se puede poner una pantalla y hacer un HMI

Nuevo Rapberry Pi OS https://pigeoncomputers.com/software/new-raspberry-pi-os-image-for-pigeon-computers-is-now-available/

Nuevo producto: https://pigeoncomputers.com/hardware/new-pigeon-rb350-cm3-will-be-available-soon/

Rex controls (Software)

No solo hay HW industrial basado en Raspberry Pi, sino software industrial para Rpi. Amplia gama de dispositivos soportados.

REXYGEN es un software de control en tiempo real altamente personalizable que combina algoritmos avanzados con simplicidad. REXYGEN convierte su dispositivo de hardware en un controlador de automatización en tiempo real, una puerta de enlace de comunicación, un registrador de datos o un dispositivo especializado de propósito único.

Usa raspberry Pi y otro HW como scada y programación tipo ladder:

ROT (foggify)

Web: https://foggify.io/ 

RoT es dispositivo está especialmente diseñado para la industria 4.0: http://foggify.io/index.php/innovation-lab/productos-foggify/reliability-of-things/

Catálogo: http://foggify.io/wp-content/uploads/2020/02/CATALOGO-ROT-web.pdf 

Otros Módulos

BH3 General Purpose Industrial gateway box: https://bh.bizright.co.jp/en/index.html

Hat Industrial: https://www.digikey.es/es/articles/techzone/2018/jan/build-a-low-cost-industrial-controller-with-the-raspberry-pi-3

OpenPLC en Raspberry Pi: https://www.openplcproject.com/getting-started-rpi

Getting Started Open PLC: https://www.openplcproject.com/getting-started

Raspberry Din: https://whitebream.com/raspberry-din.shtml

Extensión Raspberry Pi: https://www.amazon.es/PiXtend-L-Extension-Board-programmable/dp/B07GNDJY68

Machinon: https://www.hackster.io/news/machinon-takes-the-hard-work-out-of-building-a-raspberry-pi-home-automation-system-edda1d4c5adb 

Alternativa a Raspberry Pi

Además de usar Raspberry Pi en la industria como un PLC o autómata, también se está usando como un servidor de aplicaciones: broker MQTT, Node-RED, Base de Datos, ejecución de scripts, etc…

Como alternativa a este uso de Raspberry Pi, se puede usar un servidor con un Sistema Operativo Linux o incluso Windows en las propias instalaciones o un servidor dedicado, un VPS, un servidor cloud o incluso en un contenedor (Docker). Puede tener aplicaciones:

  • Mosquitto
  • BBDD (InfluxD, MongoDB)
  • Grafana
  • Node-red
  • Otros servicios automatizados…

Se puede usar un NUC en lugar de una Raspberry Pi.

O un NUC industrial

Por ejemplo recoger datos modbus usando una Raspberry Pi o un servidor:

Node-RED en la Industria

Node-RED puede ejecutarse en PLCs o en PLCs basados en Linux como p.e. los que tienen una Raspberry vistos en el punto anterior de “Raspberry Pi en la Industria”: https://aprendiendoarduino.wordpress.com/2020/03/01/raspberry-pi-en-la-industria/ 

Tanto Node-RED como Raspberry Pi en la industria se podría incluir en cualquiera de estas categorías funcionales:

  • PLC – automatizar procesos
  • PAC – PLC + PC con protocolos avanzados
  • IPC – Industrial PC
  • HMI – Dashboard Node-RED
  • Scada – Lógica programad + Dashboard

Un controlador lógico programable, más conocido por sus siglas en inglés PLC (Programmable Logic Controller) o por autómata programable, es una computadora utilizada en la ingeniería automática o automatización industrial, para automatizar procesos electromecánicos, electroneumáticos, electrohidráulicos, etc…

Un controlador de automatización programable, o PAC (del inglés Programmable Automation Controller), es una tecnología industrial orientada al control automatizado, al diseño de prototipos y a la medición. El PAC se refiere al conjunto formado por un controlador (una CPU típicamente), módulos de entradas y salidas, y uno o múltiples buses de datos que lo interconectan todo.

SCADA, acrónimo de Supervisory Control And Data Acquisition (Supervisión, Control y Adquisición de Datos) es un concepto que se emplea para realizar un software para ordenadores que permite controlar y supervisar procesos industriales a distancia. Facilita la retroalimentación en tiempo real con los dispositivos de campo (sensores y actuadores), y controla el proceso automáticamente.

IPC, acrónimo de PC industrial es una computadora destinada a fines industriales (producción de bienes y servicios), con un factor de forma entre una nettop y un rack de servidor. Las PC industriales tienen estándares más altos de confiabilidad y precisión, y generalmente son más caras que los productos electrónicos de consumo. A menudo utilizan conjuntos de instrucciones complejos, como x86, donde de otro modo se utilizarían conjuntos de instrucciones reducidos como ARM.

El Interfaz Hombre-Máquina (HMI) es el interfaz entre el proceso y los operario; se trata básicamente de un panel de instrumentos del operario. Es la principal herramienta utilizada por operarios y supervisores de línea para coordinar y controlar procesos industriales y de fabricación. El HMI traduce variables de procesos complejos en información útil y procesable.

La función de los HMI consiste en mostrar información operativa en tiempo real y casi en tiempo real. Proporcionan gráficos de procesos visuales que aportan significado y contexto al estado del motor y de la válvula, niveles de depósitos y otros parámetros del proceso. Suministran información operativa al proceso, y permiten el control y la optimización al regular los objetivos de producción y de proceso.

PAC podría equipararse al uso de un PC y un PLC conjuntamente. Los PAC están compuestos por varias aplicaciones informáticas, lo que hace que su programación sea más flexible. A diferencia de los PLC, pueden ejecutar multitareas fácilmente, trabajando en diferentes dominios como el movimiento, las aplicaciones discretas y el control de procesos.

Los PACs y PLCs tienen varias cosas en común. Internamente, ambos incluyen una fuente de potencia, un CPU, un plano trasero o dispositivo de E/S, y módulos. Tienen registros de memoria que reflejan los canales de E/S individuales en los módulos. Sin embargo, las siguientes diferencias resultan muy significativas. La 5 características principales en los PAC:

  • Funcionalidad de dominio múltiple, al menos dos de lógica, movimiento, control PID, y proceso en una sola plataforma.
  • Plataforma de desarrollo sencillo de disciplina múltiple incorporando etiquetas comunes y una base de datos sencilla para tener acceso a todos los parámetros y funciones.
  • Herramientas de software que permiten diseñar flujo del proceso a través de varias máquinas o unidades de proceso, junto con el IEC 61131-3, guía del usuario y administración de datos.
  • Arquitecturas modulares, abiertas que reflejan las aplicaciones industriales a partir de un despliegue de maquinaria en fábricas en plantas de proceso.
  • Uso de estándares de la industria para interfaces en red, lenguajes, etc., como búsquedas TCP/IP, OPC y XML, y SQL.

Una ventaja de los PAC al compararse con los PLCs, son la habilidad para procesar y desempeñar medidas complejas. Con esta característica, puede combinar diferentes sistemas de adquisición de datos como frecuencias, formas de onda, voltajes, corrientes, control de movimiento e incluso, adquisición de imágenes. Esto crea un nivel sin precedentes de manipulación y estandarización en términos del tipo de señales que pueden manipularse y procesarse. Los PACs ofrecen cientos de funciones para procesar, analizar y extraer información de estas señales.

Un PAC permite conectarse a aplicaciones empresariales y almacenar datos en bases de datos o redes corporativas ODBC/SQL activadas. Además, puede utilizar OPC para integrarse y comunicarse con sistemas de software y hardware de terceros. Los PAC’s automáticamente publican sus datos de E/S a un servidor OPC localizado en la computadora tipo servidor usada para configurar el banco de E/S. La mayoría de los paquetes de software SCADA para Windows soportan OPC, y la mayoría de los proveedores de hardware de E/S industrial proporcionan servidores de OPC para su hardware. Esto hace más sencilla la integración de los PACs con una gran variedad de hardware de E/S industrial como lo son los controladores lógicos programables (PLCs) y otros dispositivos industriales. Usted puede utilizar un paquete SCADA de terceros o el Módulo de Registro de Datos y Control, inclusive se puede conectar a servicios en la nube o plataformas administrativas como SAP

Más información:

PACs y PLCs con Node-RED

Recientemente se está incorporando Node-RED en diversos PLCs para su programación.

Varios ejemplos de PLCs basados en Raspberry Pi donde puede usarse Node-RED en: https://aprendiendoarduino.wordpress.com/2020/03/01/raspberry-pi-en-la-industria/ 

PLC/PAC de industrial shield https://www.industrialshields.com/es_ES/industrial-plc-pac-raspberry-pi-202009 basados en Raspberry Pi que pueden ejecutar Node-RED.

Industrial Shields: https://www.industrialshields.com/es_ES/blog/nuestro-blog-1/post/an-introduction-to-node-red-39

Node-RED con Industrial Shields: https://www.industrialshields.com/es_ES/blog/nuestro-blog-1/post/create-your-own-framework-node-red-first-steps-6 

Paneles HMI/IPC basados en Raspberry PI: https://www.industrialshields.com/es_ES/hmi-industrial-panel-pc-10-based-on-raspberry-pi-202011-lp

Node Red se puede comunicar con PLCs usando Modbus o con los Scadas usando OPC u OPC-UA, pero existen nodos específicos:

PLCs con Node-RED integrado:

Node-RED para openWRT: https://github.com/dceejay/openwrt-node-red 

Curso IoT simatic (Siemens con Node red); http://www.infoplc.net/descargas/109-siemens/comunicaciones/2847-manual-simatic-iot2040-node-red 

Interesante proyecto para la industria integrando Automata de Siemens: https://riunet.upv.es/bitstream/handle/10251/110768/73657734G_TFM_1536705921392151385469958862519.pdf?sequence=1&isAllowed=y

Montar un servidor OPC-UA con Node-RED: 

Casos de Uso

Node-RED en la industria tiene muchos casos de uso

  • Scada
  • HMI
  • Mantenimiento predictivo
  • Predicción de fallos (mirando datos de sensores en tiempo real en streaming) aquí no vale big data, buscar patrones, analizar y generar alertas, ya que se necesita tiempo real e inmediatez.

Encuesta 2019 Node-RED: https://nodered.org/about/community/survey/2019/

Ejemplo de ABB con Node-RED: https://sesam-world.com/_pdf/sesam-138/06-ABB.pdf  

Node-RED en open energy monitor: https://guide.openenergymonitor.org/integrations/nodered/

Ejemplo de uso de Node-RED: https://sie.fer.es/esp/Servicios/Comunicacion/Sala_Prensa/Archivo_fotografico/Primera_plataforma_integrada_datos_desarrollada_JIG_Digital_junto_5_empresas_vitivinicolas/webDoc_28268.htm

Empresas que usan Node-RED

Obtenido de los planes de futuro de Node-RED publicado en https://nodered.org/blog/2020/10/13/future-plans 

Another group of users come from the companies who have integrated Node-RED into their own products and services. Hitachi, Siemens, Samsung, Particle and many others. They have a different set of needs. They want to integrate Node-RED into their existing platforms. They want to be able to offer a seamless experience to their end users – hiding away the details of how Node-RED is being run or where the flows are executed.

Whilst some of that will come from individuals, we want to increase the commercial adoption of Node-RED. This will help increase the commercial investment back into the project itself.

ModBus y Nodered

Usado el nodo https://flows.nodered.org/node/node-red-contrib-modbus

Github: https://github.com/BiancoRoyal/node-red-contrib-modbus 

Wiki: https://github.com/BiancoRoyal/node-red-contrib-modbus/wiki 

Artículo: https://blog.ironchip.net/2019/01/18/instalacion-de-node-red-en-una-raspberry-pi/ 

Ejemplo: https://flows.nodered.org/flow/bf06a87e84395e4bce276714c6f5f884

SNMP y Nodered

SNMP: https://flows.nodered.org/node/node-red-node-snmp

Trap listener: https://flows.nodered.org/node/node-red-contrib-snmp-trap-listener

Código: https://github.com/node-red/node-red-nodes/tree/master/io/snmp

Node-RED y Fiware

Existen varios nodos de Fiware para Node-RED:

El nodo principal es https://flows.nodered.org/node/node-red-contrib-fiware_official y el repositorio es: https://github.com/FIWARE/node-red-contrib-FIWARE_official. Lo que hace es trabajar con el Orion context broker, realizando varias operaciones.

Fiware + Node-RED: https://m.riunet.upv.es/bitstream/handle/10251/114982/memoria_4632841.pdf

Simulador Fiware: https://www.fiware.org/wp-content/uploads/2017/01/Hands-on-FIWARE-Context-provider-Simulator.pdf

Interesante presentación de Telefónica: https://www.uma.es/smart-campus/navegador_de_ficheros/SmartUMA/descargar/Material%20Curso%20de%20formaci%C3%B3n%20para%20la%20red%20IoT%20Smart%20Cities/FORMACION%20SMART%20CITY%20UMA%20-%20FIWARE%20y%20Plataforma%20Thinking%20Cities.pdf

Node-RED y Domótica

En HA (Home Assistant) se usa Node-RED.

Nodos de HA:

Tutorial de HA y Node-RED: https://www.juanmtech.com/get-started-with-node-red-and-home-assistant/

Addon de Node-RED en HA: https://community.home-assistant.io/t/home-assistant-community-add-on-node-red/55023

Getting Started con HA y Node-RED: https://diyfuturism.com/index.php/2017/11/26/the-open-source-smart-home-getting-started-with-home-assistant-node-red/ 

Ejemplo de HA: https://www.thesmarthomebook.com/2020/07/28/the-elephant-in-the-room-presence-detection-in-home-assistant/ 

Home Assitant Websocket: https://flows.nodered.org/node/node-red-contrib-home-assistant-websocket 

Vídeo: https://www.youtube.com/watch?v=SuoSXVqjyfc&feature=youtu.be 

Más información: https://www.domoticaeconomica.com/node-red-en-hassio-o-home-assistant

Simular dispositivos HomeKit de apple con Node-RED: https://swifting.io/blog/2017/04/05/39-homekit-devices-simulator-using-node-red-raspberry-pi/ 

Ejemplo: Scada con Node-RED

Este proyecto consiste en hacer o renovar un scada partiendo de los datos de un Scada Antiguo y crear un sistema moderno, basado en web y que publique los datos para poder integrar con sistemas de terceros de forma sencilla o poder añadir funcionalidades al sistema sin tener que modificar el scada ni el PLC.

Partimos de un sistema con un PLC (Siemens, Rockwell, Schneider, etc…) con decenas de señales y control. Además este PLC es gestionado por un Scada de la misma marca con un HMI que habla OPC y guarda los datos en ficheros txt y desde el que se hacen ciertas operaciones y también tiene una programación para control y envío de alertas.

Es un sistema antiguo, cuyo coste de actualización es muy caro. Además está sobre una versión de Windows sin soporte, por lo que es vulnerable.

La propuesta es aislar por completo el sistema de PLC y Scada para proteger de posibles vulnerabilidades al ser sistemas no actualizables y solo exponer los datos mediante tecnologías actuales. Las tecnologías que se usen serán open source.

Propuesta:

  • Uso de python y/o Node-RED para recuperar los datos de las tablas en ficheros txt y guardar los datos en una BBDD.
  • Uso de openOPC + python para obtener resto de variables, estados, etc… que no se exportan en fichero txt y guardar BBDD todas las variables adicionales en un histórico
  • Publicar en MQTT esas variables para tener disponibilidad de ellas en tiempo real
  • Usar Node-RED para programación adicional necesaria.
  • Usar el Dashboard de Node-RED para hacer el sistema HMI con el que visualizar e interactuar.
  • Hacer gráficas más complejas y otros dashboards con grafana, en combinación con el Dashboard de Node-RED

Node-Red en la Industria

Recientemente se está incorporando Node-RED en diversos PLCs para su programación.

Curso IoT simatic (Siemens con Node red); http://www.infoplc.net/descargas/109-siemens/comunicaciones/2847-manual-simatic-iot2040-node-red 

OpenOPC UA: http://www.openopcua.org/ 

Nodo para interactuar con PLCs S7: https://flows.nodered.org/node/node-red-contrib-s7

Industrial Shields: https://www.industrialshields.com/es_ES/blog/nuestro-blog-1/post/an-introduction-to-node-red-39

Encuesta 2019 Node-RED: https://nodered.org/about/community/survey/2019/

Dispositivo PLC, entre otro muchos, que usa Node-RED: https://nube-io.com/

Node-RED y PLCs

Node Red se puede comunicar con PLCs usando Modbus o con los Scadas usando OPC u OPC-UA.

Pero existen nodos específicos:

PLCs con Node-RED integrado:

Montar un servidor OPC-UA con Node-RED: 

ModBus y Nodered

Usado el nodo https://flows.nodered.org/node/node-red-contrib-modbus

Github: https://github.com/BiancoRoyal/node-red-contrib-modbus 

Wiki: https://github.com/BiancoRoyal/node-red-contrib-modbus/wiki 

Ejemplo: https://flows.nodered.org/flow/bf06a87e84395e4bce276714c6f5f884

SNMP y Nodered

SNMP: https://flows.nodered.org/node/node-red-node-snmp

Trap listener: https://flows.nodered.org/node/node-red-contrib-snmp-trap-listener

Código: https://github.com/node-red/node-red-nodes/tree/master/io/snmp

Node-RED y Fiware

Existen varios nodos de Fiware para Node-RED:

El nodo principal es https://flows.nodered.org/node/node-red-contrib-fiware_official y el repositorio es: https://github.com/FIWARE/node-red-contrib-FIWARE_official. Lo que hace es trabajar con el Orion context broker, realizando varias operaciones.

Fiware + Node-RED: https://m.riunet.upv.es/bitstream/handle/10251/114982/memoria_4632841.pdf

Simulador Fiware: https://www.fiware.org/wp-content/uploads/2017/01/Hands-on-FIWARE-Context-provider-Simulator.pdf

Interesante presentación de Telefónica: https://www.uma.es/smart-campus/navegador_de_ficheros/SmartUMA/descargar/Material%20Curso%20de%20formaci%C3%B3n%20para%20la%20red%20IoT%20Smart%20Cities/FORMACION%20SMART%20CITY%20UMA%20-%20FIWARE%20y%20Plataforma%20Thinking%20Cities.pdf

Node-RED y Domótica

En HA (Home Assistant) se usa Node-RED.

Nodos de HA:

Tutorial de HA y Node-RED: https://www.juanmtech.com/get-started-with-node-red-and-home-assistant/

Addon de Node-RED en HA: https://community.home-assistant.io/t/home-assistant-community-add-on-node-red/55023

Más información: https://www.domoticaeconomica.com/node-red-en-hassio-o-home-assistant

Programación Básica en Python

Introducción a Python

Python es un lenguaje interpretado, es decir, no requiere del proceso de escribir / compilar / volcar. Simplemente escribir la instrucción y listo el ordenador la “interpreta” o sea ejecuta sobre la marcha sin más complicación.

Python también es:

Esto hace que los lenguajes interpretados sean más fáciles de aprender porque nos parecen más naturales, y aunque el programa corre más lento que en los compilados, pero con la potencia actual o es tan importante.

Python no es un lenguaje diseñado para ser fácil comprometiendo su potencia. Muy al contrario la potencia y capacidad de cálculo que muestra suelen sorprender a la gente acostumbrada a otros lenguajes.

Para quienes vengáis de Arduino, C++ es un lenguaje compilado, esto significa que el compilador lee lo escrito en una primera pasada y después compila, es decir traduce a un lenguaje propio del micro de Arduino qué es lo que se vuelca y ejecuta la placa que usemos.

Hay dos versiones de Python 2 y 3, pero la versión 2 ya no tienes soporte desde el 1 de enero de 2020, aunque en Raspbian disponemos de las dos versiones. El inconveniente es que hay librerías que aún se mantienen en Python 2.

Para iniciar python se puede hacer desde consola:

  • python
  • python3

O usar el entorno gráfico con IDLE. IDLE significa Integrated DeveLopment Environment, o Integrated Development and Learning Environment.

Para instalarlo ejecutar: sudo apt-get install idle3

Dentro de la consola ya es posible ejecutar comandos.

Otra opción es usar el Thonny Python IDE incluido en Raspbian: https://thonny.org/

Práctica: Ejecutar los comandos:

  • 3.8 + 7
  • 2 * (3+5) / 4
  • “Hola.”
  • x=3
  • H=»Buenos dias»
  • print(x)
  • print(h)
  • print(H)
  • print(x,H)
  • 123 ** 1234

Python puede con grandes números mientras le quede memoria RAM, pero tu Raspberry puede quedarse un tanto bloqueada mientras calcula.

El resumen es que Python tiene una precisión ilimitadamente grande en los enteros mientras tenga recursos disponibles, un detalle sorprendente para cualquiera que este acostumbrado a programar en otros lenguajes, y una de las razones por las que Python se ha convertido en lenguaje de facto para la ciencia y especialmente para la investigaciones numéricas.

Práctica: crear un fichero llamado hello.py que saque por pantalla el texto “Hola Mundo” desde consola conectado por ssh y ejecutarlo.

Más información: Introducción a Python.

Variables y Tipos de Datos en Python

Una variable es algo parecido a un contenedor o cajón con un nombre. Una cosa es el nombre del cajón y otra su contenido y conviene entender desde ya la diferencia.

Las variables pueden tomar distintos valores e ir cambiandolo en función del programa, de la misma manera que un cajón puede ir variando su contenido sin que se mueva de sitio.

En Python no es necesario definir las variables antes de usarlas, a diferencia de C y similares. Basta con que la declares asignándole un valor.

Por ejemplo escribe directamente:

  • base = 86
  • iva = base * 0.21
  • total = base + iva
  • print (total)
  • print(base, iva, total)
  • base = input («Dame el precio del artículo, por favor : «)
  • print(base + base * 0.21)
  • type(base)
  • print (int(base) + int(base) * 0.21)
  • iva = float(base) * 0.21
  • print (int(base) +iva)

Práctica: Hacer un programa llamado iva.py y que pida el valor del articulo y devuelva el valor con iva.

Más información: Variables y tipos en Python.

En Python existen 4 tipos diferentes de variables numéricas:

  • int Número entero con precisión fija (ℤ).
  • long Número entero en caso de sobrepasar el tamaño de un int.
  • float Número en coma flotante de doble precisión (ℝ).
  • complex Número complejo (parte real + j parte imaginaria) (ℂ)

Una función muy útil, que sirve para conocer el tipo de una variable es: type()

El tipo booleano es un tipo de variable que sólo puede contener dos valores: True y False.

Se definen como caracteres entre comillas simples ‘ o dobles «.

Tipo listas

Se definen poniendo el contenido de la lista entre corchetes, separando cada uno de los elementos mediante una coma. Cada posición de la lista puede contener elementos de distinto tipo. Además, las listas son mutables, es decir, sus elementos pueden ser modificados. En Python los elementos de una lista se numeran desde 0 hasta longitud−1.Hay numerosas funciones que pueden aplicarse a una lista.

Para acceder al elemento de una lista se pone el nombre de la lista y a continuación el índice al que queremos acceder entre corchetes(si ponemos el índice con signo negativo empezará por el final de la lista). Para acceder a un rango dentro de una lista tenemos diferentes opciones:

  • Desde el inicio tomar a elementos (no incluye a):
    lista[:a]
  • Desde la posición a (incluida) tomar todos los elementos hasta el final
    lista[a:]
  • Tomar los elementos desde a hasta b (sin incluir b)
    lista[a:b]

Las listas tienen asociadas una serie de métodos que permiten una gran variedad de operaciones sobre ellas:

  • .append(), añade un elemento al final de la lista.
  • .insert(), se usa para insertar un elemento en el índice asignado.
  • .pop(), elimina y devuelve el valor en la posición del índice asignado.
  • .reverse(), reordena la lista de forma reversa.
  • .sort(), reordena la lista de forma ascendente.

Más en listas: https://docs.python.org/3/tutorial/datastructures.html#more-on-lists

Ejercicio: probar estos ejemplos de listas 

Tipo tuplas

Las tuplas son similares a las listas, se definen con paréntesis en vez de corchetes. Tienen la peculiaridad de ser inmutables.

Tipo diccionarios

Los diccionarios definen una relación uno a uno entre claves y valores y son mutables. Se definen colocando una lista separada por comas de pares clave:valor. Una vez definido, podemos acceder al valor asociado a una clave buscando por la clave. Además, podemos buscar si una determinada clave existe o no en nuestro diccionario.

Los diccionarios se definen con {}

  • .keys()
  • .values()
  • .items() – devuelve una lista de tuplas clave – valor del diccionario

zip me permite coger dos listas y hacer un diccionario: diccionario = dict(zip(lista_claves,lista_valores))

del(diccionario[‘clave’]) – borra la entrada de un diccionario

Ojo, al copiar un diccionario con ciudades_2 = ciudades, no creo una copia sino dos variables que apuntan a un mismo objeto.

id(diccionario) – me devuelve el número del puntero al diccionario

ciudades_2 = ciudades.copy() -> así tengo una copia independiente de un diccionario

Ejercicio: ejecucar algunos ejemplos con diccionarios https://recursospython.com/guias-y-manuales/diccionarios/

Ver:

Operadores aritméticos

Las diferentes operaciones aritméticas en Python son los siguientes:

  • +
  • ∗∗  – elevado
  • / – división entera
  • // – división
  • %

Operadores de asignación

Los diferentes operadores de asignación en Python son los siguientes:

  • =: Asigna a la variable del lado derecho aquello que pongamos en el lado derecho.
  • +=: Suma a la variable del lado izquierdo la variable del lado derecho.
  • −=: Resta a la variable del lado izquierdo la variable del lado derecho.
  • ∗=: Multiplica la variable del lado izquierdo por la variable del lado derecho.
  • /=: Divide la variable del lado izquierdo por la variable del lado derecho.
  • ∗∗=: Eleva la variable de la izquierda a la potencia de la variable de la derecha.
  • //=: División entera de la variable de la izquierda entre la de la derecha.
  • %=: Resto de la división de la variable de la izquierda entre la de la derecha.

Operadores relacionales

Los operadores relacionales de Python son:

  • ==: Evalúa que los valores sean iguales.
  • !=: Evalúa que los valores sean distintos.
  • <: Evalúa que el valor de la izquierda sea menor que el de la derecha.
  • >: Evalúa que el valor de la izquierda sea mayor que el de la derecha.
  • <=: Evalúa que el valor de la izquierda sea menor o igual que el de la derecha.
  • >=: Evalúa que el valor de la izquierda sea mayor o igual que el de la derecha.
  • not: negación de una variable booleana

Librerías

Python es un lenguaje pensado para ser ampliado con lo necesario y hace tiempo que se ha convertido en el pilar de la investigación en numerosos campos de ciencia y tecnología

Disponemos de infinidad de librerías que podemos usar llamando a la clausula import

La librería estándar de python incluye muchos módulos: https://docs.python.org/dev/library/index.html

Ejecutar:

  • from fractions import *
  • F1 = Fraction(2,3)
  • F2 = Fraction(3,4
  • print(F1, F2)
  • print (F1 + F2)
  • print (F1 * F2)
  • print (F1 / F2)
  • import math
  • math.factorial(4)
  • math.factorial(432)
  • import numpy
  • a = numpy.array(([1,2,3],[4,5,6],[7,8,9]))
  • print (a)
  • print (a * a)
  • from matplotlib import pyplot
  • pip install matplot lib
  • x = numpy.linspace(0, 2 * numpy.pi, 100)
  • y = numpy.sin(x)
  • pyplot.plot(x, y)
  • pyplot.show()

NumPy es una extensión de Python, que le agrega mayor soporte para vectores y matrices, constituyendo una biblioteca de funciones matemáticas de alto nivel para operar con esos vectores o matrices.

Estos módulos externos que podemos descargar e importar a nuestros programas reciben en Python el nombre de packages. Existen packages que podemos importar, más o menos estándar para lo que se te ocurra.

Python Package Index: https://pypi.org/

Más información: Imports en Python

Módulos en Python: http://research.iac.es/sieinvens/python-course/source/modulos.html

Módulos y paquetes: https://www.learnpython.org/en/Modules_and_Packages 

Diferencia entre módulos, Paquetes y librerías

Standar Library: https://docs.python.org/3/library/ 

Métodos de instalación de Paquetes:

Como instalar y usar pip: https://pip.pypa.io/en/latest/installing.html

Por defecto estos gestores de paquetes buscan en https://pypi.org/

El Python Package Index o PyPI es el repositorio de software oficial para aplicaciones de terceros en el lenguaje de programación Python. Los desarrolladores de Python pretenden que sea un catálogo exhaustivo de todos los paquetes de Python escritos en código abierto. https://es.wikipedia.org/wiki/%C3%8Dndice_de_paquetes_de_Python

Para ver la ruta de los paquetes:

  • import sys
  •  print (‘\n’.join(sys.path))

Para ver los módulos instalados: pip freeze o pip list

Para actualizar ejecutar: pip install –upgrade pip

Instalar paquetes de Python: https://www.raspberrypi.org/documentation/linux/software/python.md

Sentencias condicionales

Imaginemos que queremos crear un sistema automático de riego en nuestra casa, de forma que cuando la lectura de un sensor de humedad sea menor que un cierto valor, encienda el sistema y que si la lectura es mayor que un cierto valor, lo apague. Con las herramientas que tenemos hasta ahora, esto no sería posible, para esto utilizamos la sentencia if/elif/else, que tiene la siguiente estructura:

if <expresion_booleana>:   # Solo si la condicion booleana es True, 

    bloque codigo          # el bloque de código se ejecuta

    …

elif <expresion_booleana>: # No es necesario, añade condiciones extra al conjunto.

    bloque codigo          # Se puede poner tantas como se necesiten.

    …

else:                      # No se necesario. Se ejecuta solo si

    bloque codigo          # todas las condiciones anteriores son falsas.         

    …

Nota: Es importante saber la importancia de la indentación en Python. Cuando usemos sentencias que acaben en «:» (if, for…) las líneas que estén dentro de esta sentencia irán después de un tabulador o 4 espacio, como se muestra en los ejemplos.

Ejemplo:

num = float(input(«Enter a number: «))

if num >= 0:

    if num == 0:

        print(«Zero»)

    else:

        print(«Positive number»)

else:

    print(«Negative number»)

Más información: El tipo Bool y sus operaciones.

Sentencias bucle

Anteriormente hemos visto el tipo de variable lista. Estas contenían una cierta cantidad de elementos. Imaginemos que tenemos una lista de enteros y queremos mostrar por pantalla los elementos que contiene que sean mayores que 5. Para esto, entre otras cosas, tenemos sentencias bucle.

En Python existen dos tipos estructuras de bucles:

  • Bucles for
  • Bucles while

La sintaxis de un bucle for es:

for <variable_sin_definir> in <Iterable>: # El bloque se ejecuta tantas veces 

    bloque codigo                         # como elementos tiene el iterable

    …

El blucle ejecuta un bloque de código tantas veces como esté definido. El número de veces que se recorre el bucle es equivalente al número de elementos en el iterable que se usa. La variable que se usa toma como valores los elementos del iterable de forma secuencial, un valor por cada iteración.

Los bucles for son una gran herramienta para recorrer todos los elementos de una colección.

Ejemplo:

fruits = [«apple», «banana», «cherry»]

for x in fruits:

  print(x)

Ejemplo:

for x in range(6):

  print(x)

else:

  print(«Finally finished!»)

La sintaxis de los bucles while es:

while <condicion_boolena>:   # El bloque se ejecuta hasta que la condición es falsa.

    bloque codigo            # Antes de ejecutar asegurarse que se va a salir.

    …

El bucle while se ejecuta de forma indefinida hasta que la condición después del while sea falsa. Por lo tanto es necesario realizar un cambio dentro del bucle que finalmente hará que se vuelva la condición False.

Adicionalmente existen un par de comandos dentro de Python que sirven para tener más control sobre los bucles:

  • continue. El intérprete cuando lo lee termina de ejecutar la presente iteración y pasa a la siguiente iteración.
  • break . El intérprete cuando lo lee termina la ejecución del bucle, continuando la ejecución de las siguientes líneas.

Ejemplo:

i = 1

while i < 6:

  print(i)

  if i == 3:

    break

  i += 1

Más información: Mas sobre Python for y While.

Iteradores

En Python existen diferentes estructuras que son conjuntos de elementos, son las llamadas colecciones. Este tipo de estructuras son iterables, es decir, se pueden recorrer elemento por elemento. Como veíamos antes, el bucle for itera sobre un iterable, por lo que utilizamos esta sentencia para recorrerlos. Algunos tipos de variable que son iterables son:

  • Cadena de caracteres (str)
  • Lista (list)
  • Tupla (tuple)
  • Diccionario (dict)

Además, muchas veces queremos repetir un bucle un número determinado de veces. Para esto puede ser útil la función range(n). Esta función genera un iterable que va desde 0 hasta n-1.

Más información:Iteraciones for en Python 3.

Funciones

Es muy posible que a lo largo de un programa necesitemos calcular el factorial de un número. Podemos escribir el código necesario para calcularlo en cada punto que lo necesitamos, o crear una función que podamos llamar desde cualquier punto y nos calcule el factorial de un número. 

La sintaxis para definir una función en Python es la siguiente:

def nombre_funcion(<parametro1>, <parametro2>, …): # Los parametros son opcionales

    Bloque codigo

    …

    return <valor_a_devolver> # El comando es opcional (puede devolver varios valores)

Los parámetros son las variables que se definen dentro del paréntesis, separados por comas. Son opcionales y sirven para pasarle valores a la función. Son opcionales una vez definimos la función, pero si la función está definida con n argumentos, tendremos que informarlos.

Adicionalmente puede introducirse una sentencia return que termina la ejecución de la función y devuelve el valor/objeto que está colocado justo después.

Los nombres de las funciones sigue el mismo convenio que el de las variables.

Para llamar a una función, como hemos visto antes, tenemos que escribir el nombre de la función y añadir entre paréntesis los argumentos que la funció necesita. Aunque la función no necesite argumentos, tenemos que escribir los paréntesis.

Ejemplo:

def escribe_media(x, y):

    media = (x + y) / 2

    print(f»La media de {x} y {y} es: {media}»)

    return

a = 3

b = 5

escribe_media(a, b)

print(«Programa terminado»)

Código de python (ejemplos y snippets):

Ejemplos de Python aplicados a la Industria

Ejemplos:

Ejercicio: Recoger datos meteorológicos de aemet

Aemet Open data: http://www.aemet.es/es/datos_abiertos/AEMET_OpenData

Obtener Api Key: https://opendata.aemet.es/centrodedescargas/inicio

Documentación de la API: https://opendata.aemet.es/dist/index.html?

Ejemplo programa Python: https://opendata.aemet.es/centrodedescargas/ejemProgramas?

Crear un ejemplo usando la librería requests: https://pypi.org/project/requests/ y ejecutar para logroño.

Código: https://github.com/jecrespo/Aprendiendo-RaspberryPi/blob/master/Ejercicio03-Aemet/aemet.py

Librería: https://pypi.org/project/python-aemet/

No hay librería de AEMET en Node-RED, pero podemos hacer las peticiones a la web como se ha hecho en python.

Raspberry Pi en la Industria

Dada la gran popularidad de Raspberry Pi, su uso también se ha extendido en la industria.

Artículo de Raspberry Pi en la industria: https://blog.temboo.com/raspberry-pi-iot/

  • Barato
  • Disponibilidad
  • Documentación y soporte de la comunidad

Uso de Raspberry Pi en productos comerciales: https://tecnoticias.net/2019/07/20/por-que-la-raspberry-pi-no-es-una-buena-opcion-para-productos-comerciales/

Una primera opción es usar una carcasa para carril DIN:  http://www.hwhardsoft.de/english/projects/rasppibox-open/

Comprar en: http://www.modmypi.com/raspberry-pi/cases/din-rail-mount/raspibox-open-plus-prototyping-din-rail-raspberry-pi-case/

Como montarlo: http://www.instructables.com/id/How-to-install-the-Raspberry-Pi-to-a-cap-rail/?ALLSTEPS

Uso con Codesys: https://www.instructables.com/id/Raspberry-Pi-Based-IEC-61131-3-Compatible-PLC/

Interesante módulo con salida de relés y entradas opto aisladas http://www.hwhardsoft.de/english/simplibox/io/

Panel Industrial Basado en Raspberry Pi

De industrial Shields: https://www.industrialshields.com/es_ES/industrial-panel-pc-based-on-raspberry-pi

Productos: https://www.industrialshields.com/es_ES/shop/category/hmi-and-panel-pc-panel-pc-3

Comprar: https://www.industrialshields.com/es_ES/shop/product/touchberry-pi-10-1-raspberry-pi-4b-1478?category=3

Guia de Usuario: https://www.industrialshields.com/web/content?model=ir.attachment&field=datas&id=137792&

UPS y RTC shield: https://www.industrialshields.com/es_ES/shop/product/raspberry-pi-ups-and-rtc-shield-584?search=raspberry

Módulos de Entradas y Salidas

Web: http://developer.opto22.com/pi/

Uso con Node-RED: http://developer.opto22.com/nodered/general/

UniPi

Unipi: https://www.unipi.technology/ 

Productos: https://www.unipi.technology/products

Revolution Pi

Web: https://revolution.kunbus.com/

Productos: https://revolution.kunbus.com/revolution-pi-series/

Comprar: https://revolution.kunbus.de/shop/en/

HW industrial basado en Raspberry Pi: https://hardwaresfera.com/noticias/hardware/raspberry-pi-crean-los-modulos-kunbus-basados-en-una-compute-module-3-para-iot-y-para-industria/

Iono Pi/Strato

Web: https://www.sferalabs.cc/

Unidades de control: https://www.sferalabs.cc/strato/

Módulos de entrada y salida: https://www.sferalabs.cc/iono-pi/

Artículo: https://www.open-electronics.org/iono-pi-a-raspberry-pi-based-plc/

Rex controls (Software)

No solo hay HW industrial basado en Raspberry Pi, sino software industrial para Rpi. Amplia gama de dispositivos soportados.

Usar raspberry Pi como scada y programación tipo ladder:

Otros Módulos

Hat: https://www.digikey.es/es/articles/techzone/2018/jan/build-a-low-cost-industrial-controller-with-the-raspberry-pi-3

OpenPLC en Raspberry Pi: https://www.openplcproject.com/getting-started-rpi

Getting Started Open PLC: https://www.openplcproject.com/getting-started

Raspberry Din: https://whitebream.com/raspberry-din.shtml

Extensión Raspberry Pi: https://www.elektor.com/pixtend-v1-3-kit-full-version, comprar https://www.amazon.es/PiXtend-L-Extension-Board-programmable/dp/B07GNDJY68

Alternativa a Raspberry Pi

Además de usar Raspberry Pi en la industria como un PLC o autómata, también se está usando como un servidor de aplicaciones: broker MQTT, Node-RED, Base de Datos, ejecución de scripts, etc…

Como alternativa a este uso de Raspberry Pi, se puede usar un servidor con un Sistema Operativo Linux o incluso Windows en las propias instalaciones o un servidor dedicado, un VPS, un servidor cloud o incluso en un contenedor (Docker). Puede tener aplicaciones:

  • Mosquitto
  • BBDD (InfluxD, MongoDB)
  • Grafana
  • Node-red
  • Otros servicios automatizados…

Por ejemplo recoger datos modbus usando una Raspberry Pi o un servidor: