Kubuntu con Wayland

Con la actualización a Kubuntu 17.10 me he quedado un poco despagado de que éste no traiga Wayland por defecto para plasma, así que me he decidido a instalarlo para de una vez por todas probarlo en mi PC habitual. La instalación es muy sencilla, no tiene mas que:

sudo apt install plasma-workspace-wayland

A continuación he reiniciado y he abierto una sesión de Plasma con Wayland, mi primera sorpresa ha sido encontrarme el teclado estadounidense en lugar del que tenía configurado. La cosa ha seguido con aplicaciones que dan fallo al cerrarse, el touchpad desconfigurado y algún atajo de teclado que no me esperaba. Todo detalles mínimos o configuraciones, pero es cierto que aún no está todo lo pulido para ir por defecto en la distribución. ¿Lo tendremos para la próxima versión? Yo por ahora ya estoy funcionando con él.

Cómo instalar una Raspberry Pi sin conectar una pantalla

Raspberry Pi 3

El proceso de instalación oficial de Raspberry Pi siempre me ha tirado para atrás por el hecho de necesitar teclado y pantalla, esto es un sistema empotrado… ¡Hagámoslo desde nuestra red!

Primero que nada, vamos a descargar la imagen de Raspbian para instalarla en nuestra tarjeta SD, no vamos a usar entorno gráfico, así que he optado por Rasbian Jessie Lite, que tampoco se puede decir que es tan lite, la imagen pesa 1GB aproximadamente.

Descomprimimos lo que hemos bajado y seguimos el procedimiento para quemar la imagen en la SD. Este procedimiento se reduce a estos dos comandos:
dd bs=4M if=2016-05-27-raspbian-jessie.img of=/dev/mmcblk0
sync

Donde el dispositivo de salida /dev/mmcblk0 corresponde con el dispositivo donde se encuentra la tarjeta SD y 2016-05-27-raspbian-jessie.img es la imagen que hemos descomprimido.

Una vez terminado si queremos conectar la Raspberry a través de WiFi, tenemos que meter el SSID y la clave de nuestra red. He seguido éste tutorial que explica como hacerlo editando el archivo /etc/wpa_supplicant/wpa_supplicant.conf que podemos encontrar en las nuevas particiones de nuestra tarjeta SD. Si queremos conectar a la red nuestro cacharro directamente por Ethernet, no es necesario nada de esto, con un cable Ethernet y listo. Otro truco es conectar directamente al PC con un cable Ethernet, se creará una red local entre el PC y la Raspberry y también nos podremos conectar.

Por último conectamos la tarjeta SD y a la red de alguna de las formas que he comentado anteriormente. Ahora es cuando nos vamos a conectar por SSH, pero ¿Que dirección utilizamos? La magia llega de manos del demonio Avahi, que corre en las distribuciones Debian por defecto, esto hace una autoconfiguración de la red y nos da un punto de acceso dentro de nuestra red interna, esto es gracias a mDNS, un sistema DNS distribuido que permite que en una red local todos sepan los nombres de dominio del resto, así que simplemente nos conectaremos de esta forma:

ssh pi@raspberrypi.local

Como sabéis os pedirá el password, que por ahora estará por defecto a raspberry y podéis empezar con vuestra Raspberry Pi a configurarlo todo a vuestro gusto, empezando por cambiar esta contraseña.

APT al estilo moderno

Resulta que llevaba 2 años usando APT a la vieja usanza y no me había enterado. Ahora los comando apt-* están unificados. Ya no es necesario usar «apt-get install x» o «apt-cache search y» con usar «apt install x» o «apt search y» basta.

litox@cerebro:~$ sudo apt update && sudo apt upgrade

Automatización Libre

En el mundo industrial y de la automatización en general no es ningún secreto que está dominado por el software y el hardware propietario, unas pocas empresas crean los componentes con los que una gran  cantidad de empresas integradoras se las ingenian para adaptar a los requisitos del sistema en concreto. Al final lo que encontramos es una red descentralizada donde montones de integradores y clientes finales dependen exclusivamente de unas pocas empresas que tienen generalmente su sede en Estados Unidos o Alemania.

Son pocos los que intentan nadar contracorriente en este mundillo, algunos que han tirado la toalla y otros que han encontrado soluciones nuevas a viejos problemas, pero para introducirnos en la automatización libre primero debemos hacer una cartografía de las comunidades que se dedican a producirlo y en eso consiste este post.

Automatización Industrial

El proyecto en que más esperanzas tengo puestas desde el punto de vista industrial se trata de OSADL, se trata de un laboratorio de desarrollo de automatización open source, ofrecen apoyo para la implementación de software libre a nivel industrial, se centran sobre todo en Linux y liberan una versión estable del kernel Linux RT, versión del kernel muy importante en los sistemas industriales. Por ejemplo, otro proyecto que hace uso del Linux RT es LinuxCNC, una distribución GNU/Linux para usar de base de máquinas de control numérico, utilizadas en todo tipo de procesos de manufacturación. Desgraciadamente LinuxCNC se basa en HAL para la realización de scripts con que se controlan las máquinas, un proyecto que se abandonó hace años para incluirlo su funcionalidad en udev. Esto hace que dependan de kernels bastante antiguos.

Otro proyecto importante en automatización es AutomationML, se trata de una recopilación de estándares para compartir información de entornos industriales en formato XML. Lo mejor del proyecto es que no intenta reinventar la rueda, utiliza por ejemplo COLLADA del Khronos Group para geometría y cinemática o PLCopen XML, otro estándar libre, para la lógica.

Comunicaciones

Después de toda esta parrafada y aun no he nombrado nada sobre comunicaciones. Dado su uso extendido me voy a centrar en protocolos sobre Ethernet o sobre IP. En este caso, lo recomendable es huir de los dos grandes estándares que dicen ser abiertos pero no lo son Ethernet/IP y Profinet. Y si buscamos lo más sencillo de implementar de forma libre nos iremos a Modbus TCP con la librería libmodbus enseguida tendremos un protocolo industrial sobre cualquier red TCP/IP. Si el protocolo se nos queda demasiado simple, siempre podemos añadirle funcionalidades, por ejemplo: archivos XML de descripción de las entradas y salidas, IPsec para la parte de seguridad o cualquier otra cosa que se necesite.

Si es necesario un protocolo de comunicación más rápido es posible usar algo más complejo pero que permita una respuesta más rápida, es posible usar POWERLINK, que utiliza una capa por bajo de IP para conseguir una menor latencia de red, la pila de protocolos libre en este caso es openPOWERLINK.

Frameworks

Luego vamos a encontrar frameworks libres para implementar automatización y de estos hay varios cada uno con su propia filosofía:

  • 4DIAC: Permite programar aplicaciones de automatización distribuida usando un lenguaje de programación mediante bloques, utiliza el estándar IEC 61499.
  • OpenAPC: Se podría definir como un sistema de control distribuido (DSC), para hoy en día lo veo un poco anticuado, la interfaz debería ser web, pero tiene muchos plugins y hardware soportado.
  • MBLogic: Como su propio nombre indica, se trata de lógica por encima del protocolo Modbus, de los tres me parece el mejor pensado, usa una interfaz web basada en gráficos vectoriales en svg que se modifican con los valores de las lecturas. Además está pensado para su uso de forma modular. La lástima es que lleva inactivo desde 2011 y no dan ninguna seña de contacto de nadie interesado en resucitar el proyecto que obviamente necesitaría un lavado de cara, con un rediseño de los componentes a nivel gráfico.

Me ha parecido que el proyecto ROS-Industrial merecía un nombramiento a parte, no se centra en automatización en general si no exclusivamente en la parte de robótica industrial, ROS (Robot Operating System) es un conjunto de librerías y herramientas para el desarrollo de robots muy conocido a nivel académico y de investigación y ROS-Industrial trata de adaptarlo a los requerimientos de la industria.

Automatización No Industrial

No sólo voy a centrarme en automatización industrial, fuera del mundo industrial hay otros tipos de automatizaciones que también vale la pena conocer, tienen requisitos distintos pero el funcionamiento suele ser parecido. Veamos unos tipos:

Domótica

Así es como se denomina la automatización del hogar, existen múltiples proyectos libres pero me gusta por su carácter modular especialmente Open Source Automation.

Automatización de edificios

Muy parecido al anterior es la automatización de edificios, suele ser lo mismo pero a gran escala, el siguiente artículo es el mejor que he encontrado explicando y defendiendo la automatización libre de edificios. Pero además las grandes instalaciones exigen otro tipo de automatizaciones y visualización de datos: mantenimiento, energía, logística, etc. Para todo esto podemos usar el software openMAINT.

Gestión de la energía

Ya he hablado en este blog de EmonCMS, me parece uno de los mejores proyectos de todos los que he nombrado, muy sencillo de usar. Se podría combinar con MBLogic para dar una solución total de automatización sencilla y a la vez totalmente personalizable. Lo mejor que le veo a EmonCMS es su forma de gestionar el código de la web en una base de datos, pero le falta la funcionalidad de colocar un componente más abajo o arriba según convenga.

Automatización por IoT

Por último y como es la última moda, no puede faltar la automatización mediante el Internet de las Cosas, para seguir una buena metodología en la automatización mediante estándares libres podemos seguir las recomendaciones de IoT Data models.

Conclusiones

Esta recopilación como todas se quedará corta, se basa en los proyectos que me he ido encontrando mientras estudiaba el tema de la automatización, pero espero que a alguien le sirva para replantearse como hacer las cosas, para hacer un poco más difusa la frontera entre la empresa integradora y la desarrolladora y finalmente para democratizar la automatización.

Plasma 5 como Ubuntu

Ésta es la versión renovada de KDE como Unity. En ella veremos como hacer que Kubuntu 15.04 se parezca a Ubuntu, pero con toda la potencia del escritorio KDE. En esta versión he tenido que sacrificar el menú en la barra superior, puesto que están en transición desde el DBus Menu al GMenuModel (QMenuModel es la implementación KDE). Esperemos que pronto den soporte.plasma5 como ubuntu

Una vez instalado Kubuntu 15.04 nos encontramos con el típico KDE que se parece a los Windows tradicionales. Vamos a subir arriba la barra principal, hacerla más estrecha. Poner un nuevo panel a la izquierda que se oculte automáticamente, esta opción se configura en preferencias del panel. Añadimos al panel lateral, el gestor de tareas de solo iconos. Con lo que podemos eliminar el gestor de tareas de la barra superior. Y añadimos el resto de plasmoides ya conocidos: paginador, papelera, mostrar escritorio y pasamos el lanzador de aplicaciones a la parte superior de ese panel, me gusta bastante como ha quedado con este tema y no he intentado instalar esta vez el Homerun.

Los botones de cerrar, minimizar y maximizar, se pueden cambiar a la izquierda en Preferencias >> Estilo de las aplicaciones >> Decoración de ventanas moviéndolos de sitio en la parte inferior.

En la barra superior vamos a añadir los widgets de Salir y Bloquear Sesión y con esto llegamos a la parte más complicada.

Vamos a instalar un plasmoide que se llama Active Window Control, que permite en Plasma 5 visualizar el título de la ventana activa y mostrar botones de cerrar y minimizar, es algo más configurable que el que tenía instalado para KDE 4, el problema es que la única forma que he conseguido de que funcione es compilarlo desde sus fuentes.

Estos son los pasos a seguir:

Instalamos dependencias para compilar. Esto instalará también en entorno de desarrollo QtCreator desde el que podemos modificar el plugin a nuestro gusto.

sudo apt-get install cmake extra-cmake-modules plasma-workspace-dev plasma-framework-dev build-essential qtcreator

Descargamos el código.
git clone https://github.com/kotelnik/plasma-applet-active-window-control

Después compilamos e instalamos:
cd plasma-applet-active-window-control
cmake .
make
sudo make install

Y reiniciamos para que se apliquen los cambios. En este momento ya podremos meter el widget en nuestra barra superior. La podemos configurar con los botones a la izquiera como en Ubuntu o como más nos guste.

Por último vamos a hacer que las ventanas maximizadas no tengan barra de título. En esta versión de KDE hay que modificar el archivo ~/.config/kwinrc añadiendo esta opción:
[Windows]
BorderlessMaximizedWindows=true

Pero ya que estamos vamos a modificar el número de escritorios virtuales para que sean 4:
[Desktops]
Number=4

Y con esto ya tengo el escritorio configurado a mi gusto. Para cualquier duda tenéis los comentarios.

Integrar en Linux las notificaciones de Firefox

El sistema de notificaciones de Firefox hace su función, no digo que no, pero no se integra nada con los sistemas operativos y es un poco espartano. Hoy os voy a explicar como integrarlas en los escritorios de GNU/Linux.

Gracias a freedesktop.org ciertos aspectos de los escritorios que utiliza normalmente Linux están estandarizados y esta estandarización proviene de un debate previo de su propia comunidad, por lo tanto es garantía de software libre, entre sus proyectos más conocidos están Xorg y su próximo sustituto Wayland, los servidores gráficos sobre los que se sustentan todos los escritorios.

Otro ejemplo notable de estandarización de Freedesktop son las notificaciones de escritorio, de esta forma con un mismo programa es posible lanzar notificaciones en distintos escritorios de GNU/Linux. Como Firefox por el momento no implementa estas notificaciones tenemos que instalar un plugin que haga la función. El plugin se llama GNotifier, se instala y no necesita reiniciar Firefox.

Una vez instalado, en KDE, cuando termina una descarga aparece algo como esto:

Notificación de descarga en Firefox.
Notificación de descarga en Firefox.

Y también se integra con las notificaciones push de HTML 5, no hay muchas webapps que soporten esta característica, tiempo al tiempo, por ahora podemos probarlo con Webogram el cliente web para Telegram, el clon mejorado de Whatsapp.

Notificaciones HTML 5 de Webogram en Firefox.
Notificaciones HTML 5 de Webogram en Firefox.

Aviso que últimamente Webogram no está funcionando muy bien, a menudo muestra la página en blanco totalmente.

Red de Vehículo

Tesla model S.

Gracias a los enlaces de entramado descubro una noticia muy interesante que ha compartido Pablo, el descubrimiento de un puerto Ethernet en el Tesla S, el coche utiliza un Ubuntu para gestionar su contenido multimedia y los diseñadores le han provisto de un puerto Ethernet conectado a la red del coche, una red con 3 dispositivos, independiente de las redes más críticas del coche. Es decir que además de las interfaces y redes ya comunes en el resto de coches como ODB II o CAN, debido al auge del coche multimedia, ahora se suman al coche las redes que tradicionalmente han sido de PC. Esto a parte de un posible jailbreak del Tesla del que ya se habla implica otras cosas también interesantes, la posibilidad de ampliar a tu gusto la red tu coche, conectar los dispositivos que le vengan en gana, colocarle un punto de acceso Wifi,comunicarte con una antena con los coches de alrededor, unir tu coche a tu red de hogar… En fin, miles de posibilidades que se harán posibles, siempre que los fabricantes no nos blinden el acceso a estas redes, que es muy posible. ¿El futuro? Próximamente, en las pantallas de tu coche.

KDE como Unity

Después de mucho tiempo usando Ubuntu con Unity me he cansado y he decidido darle una segunda oportunidad a KDE, que dejé de usarlo con KDE 4.1 debido a lo inestable que era en ese momento, ahora que ya estamos en versiones muy avanzadas de KDE 4 y ya se empieza a perfilar KDE 5 (oficialmente Plasma 2), que utilizará el flamante Qt 5, me ha parecido buena idea pasarme, pero tampoco quiero perder lo que más me gusta de la interfaz Unity, así que voy a personalizármelo un poco, os cuento a continuación.

Para pasar de Ubuntu a Kubuntu podemos hacer lo siguiente:

Instalamos el escritorio de Kubuntu, es decir KDE:
sudo apt-get install kubuntu-desktop
sudo apt-get install language-pack-kde-es

Eliminar Unity si ya no lo vamos a usar:
sudo apt-get remove unity unity-2d unity-2d-panel unity-2d-spread unity-asset-pool unity-services unity-lens-files unity-lens-music unity-lens-applications gir1.2-unity-5.0 unity-common indicator-sound indicator-power indicator-appmenu libindicator7 indicator-application indicator-datetime indicator-messages libnux-2.0-0 nux-tools libunity-misc4 unity-2d-common
Programas de GNOME que no vamos a usar:
sudo apt-get purge nautilus gedit

O lo que he terminado haciendo yo, instalar Kubuntu desde cero, más sencillo y de paso hago una limpieza a fondo.

Ahora empieza lo divertido, la personalización, vamos a empezar por subir el panel principal arriba, hacerlo un poco más estrecho y añadir los botones de apagado y cerrar sesión a la derecha del todo. Eliminamos el Gestor de tareas que va a ir en el panel lateral y también el Lanzador de aplicaciones.

En la barra superior además añadimos el File Menú para tener el menú de archivos igual que en Ubuntu y como desgraciadamente éste no integra la barra de título y botones de minimizar, cerrar, etc añadimos el plasmoide de control de la aplicación actual a su lado. Se integra bastante poco con el tema, pero funciona bien. Sería un buen proyecto hacer un plasmoide que integre los dos estilo Unity.

Después de esto me he creado el panel lateral típico de Unity y en sus opciones le he puesto Alineación Abajo y Ocultar Automáticamente, después de esto ya le he puesto el tamaño que a mi me gusta para esa barra. Le he añadido el widget de papelera, el de selección de escritorio virtual y el mostrar escritorio, que siempre viene bien, a la parte de abajo. Por encima he colocado el Gestor de tareas de sólo iconos y el lanzador de aplicaciones, una opción que imita al Dash de Ubuntu es colocar Homerun, pero en la versión 12.04 de Kubuntu no está, en posteriores tengo entendido que sí.

Después he instalado algunos widgets en el escritorio, de información del sistema, el tiempo, me he instalado uno bastante personalizable y bonito que se llama PPC y un sticker, siempre útil. Le he puesto un tema oscuro como a mi me gusta, Elegance se llama y  un esquema de colores también oscuro. He colocado los botones de la barra de título a la izquierda, estilo Unity y ya está todo listo.

Os enseño como ha quedado:

Capura de pantalla del escritorio
Kubuntu estilo Unity

Accediendo al sistema de archivos de Raspberry Pi

Hasta ahora había escrito sobre como acceder a una terminal de forma remota en Raspberry pero hoy quiero explicar como acceder directamente al sistema de archivos para subir y bajar ficheros de forma simple.

Una opción es hacer uso del conocido sistema FTP para la transferencia de archivos, pero esto conllevaría instalar un servidor FTP en la RPi sobrecargando aún más la no muy potente Raspberry.

La solución que he adoptado es mucho más sencilla, vamos a hacer uso del protocolo SFTP, un protocolo de transferencia de ficheros sobre SSH y como ya tenemos funcionando SSH no necesitamos instalar ningún nuevo servidor. El procedimiento es así de simple:

Instalamos FileZilla en nuestro PC, una herramienta muy recomendable.

Lo abrimos y pinchamos en el Gestor de sitios, primer icono arriba a la izquierda. Nos aparecerá una ventana como la siguiente:

Configuración de SFTP en Raspberry.
Configuración de SFTP en Raspberry.

Creamos un nuevo sitio, le ponemos el nombre que queramos, en este caso Raspberry, y rellenamos la parte de la derecha. En servidor la IP de la RPi, protocolo SFTP, modo de acceso normal y nuestro usuario y contraseña.

Pinchamos en «Conectar» y en un momento se conectará y tendremos acceso en el panel derecho el sistema de archivos de nuestra pequeña computadora.

Este sencillo truco sirve para cualquier sistema empotrado, dándonos un acceso fácil al sistema de archivos en ejecución.

Monitorizar la temperatura desde Raspberry Pi

En este pequeño tutorial os voy a enseñar como monitorizar la temperatura de una habitación con sólo una Raspberry Pi, un sensor de temperatura DS18S20 y un poco de software.

Vamos a utilizar Emoncms, del que ya os he hablado anteriormente, instalarlo es realmente fácil, no tengáis miedo de seguir estas instrucciones, enseguida lo tendréis funcionando.

El siguiente paso va a ser conectar a la Raspberry Pi el sensor DS18S20+, podéis pedir una muestra gratuita a Maxim Integrated. El sensor se conecta usando los pines que tenemos disponibles en la RPi. Para conectarlo hay que seguir el siguiente esquema:

DS18s20 conectado a Raspberry Pi.
DS18S20 conectado a Raspberry Pi.

Es muy sencillo de conectar utilizando unos conectores para jumpers, yo he reciclado los que venían para la placa base de un PC de sobremesa antiguo, los que la conectan con los LEDs y los botones de encender y reiniciar.

El siguiente paso es poner en marcha una aplicación que recoja la temperatura del sensor y la envíe al servidor EmonCMS. Para ello voy a utilizar Python, un lenguaje interpretado muy sencillo que se utiliza mucho en la comunidad Raspberry Pi. El acceso al sensor se realiza a través de un driver que nos proporciona ya nuestra distribución de Raspbian.

El siguiente código es plenamente funcional, aunque posiblemente algo espartano, es necesario que añadáis vuestra apikey de Emoncms, la encontraréis entrando a vuestro servidor Emoncms, en la ruta /emoncms/input/api, hay que elegir la «Read & Write:» puesto que vamos a escribir los valores.

También podéis modificar cada cuanto tiempo queréis que se envíen los datos, en este caso cada 10 segundos, pero es posible modificar la línea «time.sleep(10)» por el número de segundos que queráis.

import os
import glob
import time
import urllib2, httplib
os.system('sudo modprobe wire')
os.system('sudo modprobe w1-gpio')
os.system('sudo modprobe w1-therm')
base_dir = '/sys/bus/w1/devices'
f = open(base_dir + '/w1_bus_master1/w1_master_slave_count', 'r');
sensorCount = f.readlines()
sensorCount = [int(l[0]) for l in sensorCount]
f.close()
f = open(base_dir + '/w1_bus_master1/w1_master_slaves', 'r');
devices = f.readlines()
f.close()
def read_temp_raw(sensor):
device_file = base_dir + '/' + devices[sensor][:-1] + '/w1_slave'
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines

def read_temp(sensor):
lines = read_temp_raw(sensor)
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw(sensor)

equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
return temp_string[0:4]

while True:
url = "http://localhost/emoncms/input/post?json={"
for x in range(0, sensorCount[0]):
url = url + devices[x][:-1] + ":" + read_temp(x) + ","
url = url[:-1]+"}&apikey=LA_APIKEY_VA_AQUI"
print(url)
urllib2.urlopen(url)
time.sleep(10)

Acordaos de respetar la indentación (tabuladores) en el código, si no no funciona bien en Python. Guardamos este código como un archivo .py, por ejemplo temperatura.py y ya lo podemos ejecutar de la siguiente forma:

python temperatura.py

Ahora ya nos podemos ir a Inputs en Emoncms y encontrar la entrada correspondiente a nuestro sensor de temperatura. En su configuración añadiremos un proceso «x 0.01» para que nos muestre la temperatura en ºC y bajo de eso un «Log to feed» para poder mostrarla. Ahora ya aparecerá en la pestaña Feeds, donde la editaremos y la seleccionaremos como REALTIME. Por último en la pestaña Vis seleccionamos el visor Realtime y el feedid de nuestro sensor de temperatura. El resultado será algo parecido a esto:

Temperatura en tiempo real.
Temperatura en tiempo real.

Ahora podemos poner este visualizador en el Dashboard y habremos terminado.

Actualización: Ahora puedes bajar el archivo python desde mi Github: https://github.com/carsanbu/tipi-web/blob/master/utils/temp_DS18S20_emoncms.py