Monitor de Temperatura y Humedad Xiaomi

Hace unos días me compré el Mi Temperature and Humidity Monitor 2 de Xiaomi y tengo que decir que estoy encantado. Es un pequeño dispositivo que me costo 9€ y que mide la temperatura y la humedad del ambiente y envía los datos a la aplicación Xiami Home del teléfono que los guarda para crear históricos de tendencias.

Manual de instrucciones del Mi Temprature and Humidity Monitor 2

Como que últimamente trabajo bastantes días desde casa, el monitor lo utilizo para asegurar que la temperatura y sobretodo la humedad son los adecuados para estar confortable.

La comunicación entre el dispositivo y el teléfono se realiza por bluetooth o sea que no sirve para saber como está la casa cuando no estás.

Activar eMail en WordPress para AWS Lightsail

Cuando instalamos WordPress en AWS Lightsail no disponemos de un servidor de correo electrónico que se active con un click y por tanto tendremos que instalar o conectar uno de forma manual.

En mi caso me he decantado por la instalación del plugin WP Mail SMTP que permite enviar emails con diferentes tipos de mailers, siendo uno de los más rápidos y baratos el de Google. Estos son los pasos que hay que realizar para activarlo:

    • Una vez que estamos conectados a la cuenta de Gmail que queremos utilizar, entraremos en la cónsola de Google Cloud Platform.
    • Creamos un nuevo proyecto desde Select a Project > New Project.
    • Cuando se haya creado, lo seleccionamos.
    • En el buscador de la cónsola de Google Cloud Platform buscamos «gmail» y seleccionamos «Gmail API».
    • Pulsamos sobre «ENABLE».
    • Una vez dentro pulsamos sobre «CREATE CREDENTIALS» en la parte superior derecha de la pantalla.
    • A partir de aquí podemos seguir las instrucciones de WP Mail SMTP.

Al finalizar todas las configuraciones podemos enviar un email de prueba desde el menú de configuración de WP Mail SMTP en WordPress para verificar que todo funciona correctamente.

Forzar redirección a https en WordPress Multisite desde AWS LightSail

En general, añadir un certificado a un WordPress y forzar la redirección de hhtp a https es bastante fácil ya que basta con ejecutar el script de Bitnami «sudo /opt/bitnami/bncert-tool«. Una de las opciones que ofrece dicho script es la de redireccionar a https pero en el caso de WordPress Multisite, no se soporta por lo que hay que buscar otra solución.

Esta solución es realizar la redirección a través de Apache modificando el archivo de configuración de hosts virtuales y seguir las instrucciones de Force HTTPS Redirection With Apache.

En mi caso, y después de asegurarme que tenía que aplicar la opción A (Approach A: Bitnami Installations Using System Packages») modifiqué los siguientes cuatro archivos:

/opt/bitnami/apache2/conf/bitnami/bitnami.conf
/opt/bitnami/apache2/conf/bitnami/bitnami-ssl.conf
/opt/bitnami/apache2/conf/vhosts/wordpress-https-vhost.conf
/opt/bitnami/apache2/conf/vhosts/wordpress-vhost.conf

La edición de los archivos la hice con VIM desde línea de comandos y antes de los cambios realicé backups de los cuatro archivos.

Finalmente reinicié la instancia de LighSail donde tengo instalado WP Multisite. Para verificar su funcionamiento, desde el browser tecleé el dominio y automáticamente se cambió a https. Hice lo mismo desde el teléfono para asegurarme.

Google Site Kit

Hoy definitivamente he desinstalado MonsterInsights de mi blog en WordPress y lo he cambiado por Google Site Kit. Las razones principales han sido que MonsterInsights no me ha impresionado nada y muchas de sus funcionalidades eran de pago.

La verdad es que Google Site Kit funciona muy bien y se configura rápidamente permitiendo conectar con Analytics, Search Console, Page SpeedInsights, Adsense, Optimize y Tag Manager. Además el plugin es original de Google con lo que te olvidas de licencias y problemas de compatibilidades.

Deep Nostalgia de MyHeritage

He descubierto hoy dentro de MyHeritage.com una aplicación espectacular que «revive» fotografías estáticas de personas creando la sensación de que están vivas. La aplicación se llama Deep Nostalgia y está accesible en este link.

Por ejemplo, a partir de una fotografía antigua de mi madre de 1955 he creado el vídeo de aquí abajo.

La aplicación solo puede usarse para animar unas 8 o 9 imágenes. Después, tienes que pagar la suscripción a MyHeritage que es de 129€ al año.

Llamador automático DX

Hace 25 años, invertía mi tiempo construyendo cacharros electrónicos y uno de los que estoy más orgulloso es el «Llamador Automático DX».

Cuando tenía 21 años conseguí mi licencia de radioaficionado de clase A después de pasar cuatro o cinco exámenes entre los que estaban el de aptitud para decodificar mensajes sonoros en código morse. Mi código de llamada era EA3GIW.

Uno de los problemas que tenía era que mi estación no era muy potente (apenas 4W) y aun menos la antena dipolo que me había construido por lo que en momentos de poca propagación electromagnética era importante mantener la llamada DX abierta para capturar cualquier apertura puntual. Eso podía tomar horas por lo que el problema era como podía tener mi equipo de radio haciendo llamadas sin tener que estar yo directamente a los mandos del micrófono.

Lo que hice fue construir un pequeño dispositivo que grababa digitalmente un mensaje de voz y que lo repetía ininterrumpidamente en un bucle infinito dejando espacios de 10 segundos entre repetición y repetición. Una de las complejidades era como activar y desactivar la función llamada en la emisora cuando el mensaje estaba en repetición. Al final, todo funcionó de maravilla durante muchos años.

Parte delantera del Llamador Automático DX

El diseño del sistema y el circuito impreso estaba todo hecho por mi, un poco artesanalmente y algo feo, pero funcional. Las fotografías que he hecho esta mañana son del primer prototipo que hice y que funcionaba.

Parte trasera del Llamador Automático DX

Iba tan bién que incluso vendí algunas unidades del llamador para conseguir algo de dinero aunque para soldar cada uno invertía un buen rato y no salía el precio de la hora muy rentable.

Obtener datos históricos de criptomonedas

Para obtener datos históricos de cotizaciones de criptomonedas suelo utilizar https://min-api.cryptocompare.com/ principalmente porque es una de las pocas que te permite obtener los valores por horas y no solamente por días como la mayoría.

La consulta la ejecuto directamente a través del navegador y el resultado es un archivo JSON. La URL que tengo que poner es:

https://min-api.cryptocompare.com/data/histohour?fsym=btc&tsym=EUR&limit=2000

Los parámetros para configurar la llamada son «fsym» para especificar la moneda (BTC para Bitcoin, OMG para OMG Network, ETH para ethereum, etc.), «tsym» para indicar si queremos euros o dólares y «limit» para definir el número de filas que queremos obtener. Si en vez de cotizaciones por hora las queremos por día, tenemos que utilizar «histoday» en vez de «histohour»,

La fecha se indica en formato epoch y para convertirla a algo legible podemos utilizar esta fórmula en excel:

=(A1/86400)+FECHA(1970,1,1)

A1 es la celda en la que tenemos la fecha en formato epoch.

La API de Coinbase Pro

Durante estas vacaciones me he estado peleando con la API de Coinbase Pro y sobre como poder llamarla correctamente a través de Google Apps Script, la plataforma de desarrollo de Google que integra toda su suite de productos.

El mayor problema es que es muy complicado, por no decir imposible, encontrar información fiable sobre como realizar llamadas a la API de Coinbase Pro con Google Apps Script y sobre todo como firmarlas siguiendo el protocolo de seguridad que implementa.

Después de muchos intentos finalmente conseguí hacerlo y este es el código que utilicé.

var globalvars_CB = {
   'apikey'     : 'f7d2dkifmdXXXXXXXXXXXXXa18c',
   'secret'     : 'ptjlbXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZAMe1TV1zuh5U6WFiFw==',
   'passphrase' : 'cXXXXXXXXXXXXXXXXXX',
   'uri'        : 'https://api.pro.coinbase.com'
  }


function SignAndCallAPI(method, requestPath, body) {
//method: "GET", "POST",...
//requestpath: el path para ejecutar la función (por ejemplo: "/accounts")
//body: los parámetros de llamada. Habitualmente solo para POST

  var timestamp = Math.floor(Date.now() / 1000).toString();
  var what = Utilities.base64Decode(Utilities.base64Encode(timestamp+method+requestPath+body));
  var decodedsecret = Utilities.base64Decode(globalvars_CB.secret);
  var hmac = Utilities.base64Encode(Utilities.computeHmacSha256Signature(what, decodedsecret));
     
  var options = {
    'method' : method,
    'payload' : body,
    'muteHttpExceptions' : true,     
    'headers' : {
      'Content-Type': 'application/json',
      'CB-ACCESS-KEY' : globalvars_CB.apikey,
      'CB-ACCESS-SIGN' : hmac,
      'CB-ACCESS-TIMESTAMP' : timestamp,
      'CB-ACCESS-PASSPHRASE' :  globalvars_CB.passphrase,
     }
  }  
      
return(UrlFetchApp.fetch(globalvars_CB.uri+requestPath, options));

}

El mayor problema estaba en como firmar con SHA256 y con el formato de datos que se precisa además de evitar confundirse con la API de Coinbase que es ligeramente diferente de la de Coinbase Pro.