Compartir archivos con el protocolo Apple Filing Protocol (AFP), entre Mac OS X y Raspberry Pi

Con la utilidad Netatalk, podemos crear un acceso permanente entre nuestro ordenador Mac y una Raspberry Pi, ello nos permite compartir archivos entre los dos dispositivos de forma rápida.

Antes de realizar la instalación de ningun paquete en la Raspberry Pi es muy aconsejable proceder a su actualización, para ello ejecutamos los siguientes comandos:

sudo apt update
sudo apt upgrade
sudo reboot

Una vez completado el proceso procedemos a instalar Netatalk, con el siguiente comando:

sudo apt-get install netatalk

Una vez completada la instalción, tenemos que configurar el archivo AppleVolumes.default, detenemos el servicio con:

sudo /etc/init.d/netatalk stop

Y ejecutamos el comando:

sudo nano /etc/netatalk/AppleVolumes.default

Añadimos las siguientes lineas:

:DEFAULT: options:upriv,usedots,rw

/       "Directorio Raiz"

Si no deseamos dar acceso a todo el contenido, añadimos los paths a la carpeta o carpetas que queremos hacer visibles. La barra invertida da acceso al directorio raiz. El primer parametro es el path o ruta a la carpeta que queremos publicar, el segundo parametro es informativo.

Guardamos los cambios realizados y lanzamos el servicio:

sudo /etc/init.d/netatalk start

Si todo ha ido bien, veremos en el “Finder“, en el lateral izquierdo, sección “Compartido“, nuestra tarjeta Raspberry Pi, algo similar a la siguiente imagen.

Al seleccionar dicho icono, se mostrará en la parte superior del “Finder“, un botón “Conectar como“, debemos pulsar en dicho botón y poner el usuario y contraseña de nuestra Raspberry Pi para poder conectar. Si los datos son correctos, se producira la conexión y ya tendremos acceso a los datos compartidos.

Las carpetas compartidas tendrán un aspecto similar a este.

Share

Ejecutar scripts al recibir comandos mediante MQTT

MQTT es un protocolo similar a HTTP, pero mucho más liviano, utilizado hoy en día principalmente para el Internet de las cosas.

Vamos a describir un proyecto en el cual se utiliza una Raspberry Pi, la cual esta constantemente monitorizando un servicio de notificaciones, en el cual tenemos una notificación especifica que se lanza cada 15 días, a las 05:00 de la mañana, pero el script que ejecuta la tarea principal esta alojado en otro ordenador.

El ordenador principal realiza a través de una aplicación una serie de informes que una vez completados son enviados a diferentes destinatarios. Este ordenador corre un script a la espera de recibir un comando enviado a través de MQTT.

Cuando la Raspberry Pi lanza la notificación, envía un comando por MQTT, el ordenador principal recibe el comando MQTT, compara la instrucción recibida, y si es correcta, ejecuta un script, el cual se encarga de generar los informes y enviarlos a sus destinatarios.

Para que funcione el protocolo MQTT, se debe instalar en los ordenadores implicados en las tareas.

Antes de instalar el Broken de MQTT (Mosquitto) en nuestra Raspberry Pi, actualizamos los paquetes:

sudo apt update
sudo apt upgrade
sudo reboot

Luego instalamos mosquitto y su software cliente:

sudo apt-get install mosquitto mosquitto-clients

El archivo de configuración generado por defecto (mosquitto.conf) se encuentra en el directorio /etc/mosquitto.

Una vez instalado podemos revisar que se está ejecutando correctamente:

sudo systemctl status mosquitto.service

Para que el servicio se ejecuta cada vez que se inicia la Raspberry Pi, ejecutamos:

sudo systemctl enable mosquitto.service

En nuestro ordenador principal tambien debemos instalar un Broken de MQTT. Si tenemos instalada la aplicación brew, en Mac OS X, la instalación es muy sencilla, ejecutamos:

brew install mosquitto

En la Raspberry Pi, cuando la notificación alcanza la fecha prevista, llamamos a la función:

def Script_Envio_Informes():
    call('mosquitto_pub -h 192.168.1.43 -t script_enviar_informes -m "Realizar"', shell = True)
  • -h, especifica la IP de la máquina destino del mensaje MQTT.
  • -t, topic, es la palabra con la que se publica (el emisor) y se suscribe (el receptor), en como el nombre del canal al que se esta suscrito.
  • -m, es el mensaje que se envía.
  • call, es una función que se ejecuta a traves de la terminal.

El ordenador principal ejecuta en siguiente script:

#!/usr/bin/python

import paho.mqtt.client as mqtt
from captura_web import Explorar
from notifica import notify

broker_address = "localhost"
broker_port = 1883
topic = "script_enviar_informes"

def on_message(client, userdata, message):
    print("Mensaje recibido=", str(message.payload.decode("utf-8")))
    print("Topic=", message.topic)
    print("Nivel de calidad [0|1|2]=", message.qos)
    print("Flag de retención =", message.retain)
    #ejecutamos script, llamamos a la función del script
    if str(message.payload.decode("utf-8")) == "Realizar":
        Explorar()
        notify("MQTT", "Se ha ejecutado el script Envio Informes")

client = mqtt.Client('Cliente1') 
client.on_message = on_message 
client.connect(broker_address, broker_port, 60) 
client.subscribe(topic) # Subscripción al topic
client.loop_forever()

Este script se ejecutar constantemente, está a la espera de recibir algun mensaje.

  • broker_address, ejecuta el broken en el ordenador local.
  • broker_port, es el puerto por defecto utilizado por el broken.
  • topic, es al canal que nos suscribimos. El mismo canal que ha publicado el emisor.
  • if str(message.payload.decode(“utf-8”)) == “Realizar”, si el mensaje recibido es igual a Realizar, se ejecutan las siguientes funciones.
  • Explorar(), esta función genera diferentes informes y realiza los envios a sus destinatarios.
  • notify(“MQTT”, “Se ha ejecutado el script Envio Informes”), crea una notificación en la pantalla del ordenador, informa de las tareas realizadas.

El código de notify es:

import os

def notify(title, text):
    os.system("""
              osascript -e 'display notification "{}" with title "{}"'
              """.format(text, title))

El envío de mensajes a traves de diferentes dispositivos puede servir para realizar las más variadas tareas. Es muy comun su utilización en placas arduino con sensores de temperatura, humedad y presión, u otro tipo de sensores, que mediante el protocolo MQTT va enviando periodicamente los datos que obtiene, a un ordenador que los procesa o almacena, como podria ser una Raspberry Pi.

La comunicación MQTT también se utiliza para la comunicación entre dispositivos Tuya y Smart Life y las aplicaciones que gestionan estos dispositivos.

Share

Convierte tu Raspberry Pi en un servidor multimedia DLNA

La Raspberry Pi es un pequeño ordenador con el que podemos realizar multiples tareas y muy interesantes. Dado su pequeño consumo, nos permite tenerla encendida las 24 horas, lo que supone un gasto de tan solo 0,60 euros al mes en consumo eléctrico.

Una de estas pequeñas tarjetas nos permite tener un servidor web (Apache, NGINX), un sistema para bloquear publicidad en los dispositivos enlazados en nuestra red (PI-HOLE), un servicio en la nube similar a Box, Dropbox, iCloud, etc. (NextCloud), un cliente bittorrent (QBITTORRENT), aplicaciones virtualizadas (Docker, Docker-Composer), servidores de bases de datos (Postgresql, MySql, Maria DB), servicios (Samba, Git, Mqtt, Node-red), una vpn para mejorar la seguridad de nuestra red (OPEN VPN), un servidor para contenidos multimedia de audio, video e imágenes (MINI DLNA), entre multitud de otras muchas aplicaciones y servicios, incluidas la domotica, robótica, etc.

Y todo instalado en un unico dispositivo.

Un servicio DLNA nos permite reproducir contenido multimedia en diferentes dispositivos que se encuentren conectados a nuestra misma red. Estos pueden ser, ordenadores, telefonos moviles, tablets, televisores, etc. Estos dispositivos tienen que tener instaladas aplicaciones que permitan recibir contenido a traves del protocolo DLNA, practicamente, por no decir todas, las televisiones actuales disponen de este protocolo, sobre todo si son Smart TV.

Hoy vamos a realizar la instalación del servicio multimedia MINI DLNA. Para ello lo primero que debemos hacer es actualizar la Raspberry Pi, este proceso se puede realizar desde la propia tarjeta, a través de un monitor, teclado y ratón, o accediendo a ella a través de ssh. Para poder acceder por ssh se debe tener habilitado dicho acceso, esto lo puedes ver pulsando en el icono de Raspbian, “Preferencias/Configuración de Raspberry Pi“, pestaña interfaces, debe estar activo “SSH“.

A continuación abrimos una terminal ya sea desde la Raspberry Pi directamente, o desde otro dispositivo mediante ssh y actualizamos nuestro pequeño dispositivo ejecutando cada uno de los siguientes comandos.

sudo apt update
sudo apt upgrade
sudo reboot

Una vez actualizada y reiniciada, ejecutamos el siguiente comando:

sudo apt install minidlna

En unos pocos segundos ya tendremos instalado nuestro servicio DLNA, ahora solo nos falta configurar dicho servicio para que sepa los directorios donde se encuentran los archivos de audio, video e imagenes. Para ello debemos acceder a un archivo de congiguración, con el siguiente comando:

sudo nano /etc/minidlna.conf

Una vez abierto el archivo podemos cambiar el nombre ser servicio DLNA, debemos buscar esta linea, #friendly_name=, y modificar para que quede algo silimar a friendly_name=MiServicioMultimedia.

Para añadir las carpetas donde se encontraran los archivos, debemos añadir unas lineas similares a estas:

media_dir=A,/home/pi/audio
media_dir=P,/home/pi/pictures
media_dir=V,/home/pi/videos
  • La A, indica que se trata de archivos de audio.
  • La P, son archivos de imagenes.
  • La V, archivos de video.

Para añadir archivos de video seria, media_dir=V,(la ruta a la carpeta que contiene los archivos de video). Es importante respetar la sintaxis. Despues de la V colocamos una coma, y sin espacios, la ruta a la carpeta, por ejemplo “/home/pi/videos“.

Una vez realizadas las modificaciones, guardamos el archivo y salimos del mismo.

Por último debemos aplicar el siguiente comando, para que los cambios realizados se actualicen.

sudo systemctl restart minidlna

Con este comando reiniciamos el servicio de DLNA. Ahora solo nos falta añadir algunos archivos en las carpetas indicadas en la configuración y realizar pruebas desde algún dispositivo.

Se puede obtener más información accediendo a traves de un navegador, con la IP de la Raspberry Pi y el puerto 8200, por ejemplo 192.168.1.200:8200, obtenemos información de los archivos multimedia compartidos y los dispositivos conectados al servicio DLNA.

Share