Integración MIRUBEE en Domoticz con Raspberry Pi

Aquí podréis encontrar todo lo relacionado con la herramienta Domoticz orientada al uso con los dispositivos inteligentes de Xiaomi.
Avatar de Usuario
Jordi
Mensajes: 134
Registrado: 30 Jul 2017, 11:05

28 May 2018, 15:33

Esta integración nos permite recuperar cada cierto tiempo las lecturas actuales, intensidad o voltaje y mostrarlas en Domoticz.

Prerequisitos:
1.-Tener cuenta abierta en MyMirubee.com (https://app.mirubee.com) con tu PSW y usuario.
2.-Tener el Mirubee instalado y funcionando correctamente.
3.-Disponer de estos datos: Client-ID, Token, Building_ID,y el Meter_ID.
4.-Un Sensor Virtual del tipo “Electricidad (Instantanea+Contador)” para mostrar las lecturas en Domoticz.

Vamos al lio. Es muy sencillo.
1.-Primero nos abrimos una cuenta en MyMirubee (https://app.mirubee.com/mirubee_front/index.php/login). Damos usuario y contraseña y abrimos cuenta.
2.-Instalamos Mirubee en nuestro cuadro eléctrico. Puedes seguir este video tutorial:



3.-Para conseguir los datos.
-CLIENT_ID: Accedemos a MyMirubee.com (https://app.mirubee.com). Nos vamos a la pestaña MEDIDORES y encontraremos el SID del medidor que nos muestra este código.
-El TOKEN: Creamos el script mirubee_token.sh con este contenido y modificamos los datos con nuestro client_id, password e email. El “password” e “email” son los de nuestra cuenta de MyMirubee.com. Tened en cuenta que el TOKEN CADUCA SEMANALMENTE.

Código: Seleccionar todo

#!/bin/bash
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{
"language": "es",
"client_type_id": "web",
"client_id": "xxxxSID_MEDIDORxxxx",
"timezone": "ES",
"password": "xxxxPSW_MYMIRUBEExxxx",
"email": "xxxxEMAIL_MYMIRUBEExxxx"
}' 'https://app.mirubee.com/api/v2/login'
Una vez modificado el script abrimos el terminal de nuestra Raspi y hacemos un copiar-pegar del contenido del script ya modificado. Pulsamos Intro y nos dará el token (un código super largo con letras y números).

-El BUILDING_ID: Dentro de la página MyMirubee.com vamos a la pestaña “Mi Casa” y nos aparecerá el ID de casa. Es ese numero ID (un código numérico de 5 dígitos).
-El METER_ID: Abrimos este enlace: https://app.mirubee.com/api/docs/ .Accedemos como usuario autorizado a través del botón que hay arriba a la derecha “Authorize”. Introducimos nuestro token. Una vez autorizados nos vamos hasta donde pone “List meters installed in building”. Introducimos nuestro Building_ID y clicamos Try it out! Y en “Response Body” nos aparecerá nuestro “Meter_ID” (un código numérico de 5 dígitos).

4.-Creamos un SENSOR VIRTUAL en Domoticz para que nos muestre las lecturas. Abrimos Domoticz, vamos a Hardware y creamos un sensor virtual del tipo “Electricidad (Instantanea+Contador)”. Editamos el botón y seleccionamos Tipo: "Use" y Energy Read: "Computed". Vamos a "dispositivos" y tomamos nota del IDX del sensor.

---------

OPCIÓN A (Script de lectura para un único valor: V/P/I)

Un vez tenemos todos estos datos ya podemos crear el script que estará llamando constantemente a la API de Mirubee para recuperar les lecturas que le pidáis.

Este script lo creamos dentro de la carpeta de /domoticz/scripts. Podemos llamarlo: mirubee_lectura.sh Igual que antes copiamos este contenido y lo modificamos con nuestros datos Token, Building_ID, Meter_ID y el IDX del sensor. Básicamente este script hace una llamada a la API de Mirubee y le pide el valor ["P"], energía actual en Watts. Si quieres pedir el voltaje actual cambia este valor por ["V"], y si quieres pedirle la intensidad actual en amperios cambia el valor a ["I"]. Una vez hecha la petición te guarda el valor en un archivo txt (en este caso WattsActual.txt) que se usará como variable para posteriormente tomar ese valor y enviarlo al sensor de datos en Domoticz.

Código: Seleccionar todo

#!/bin/bash
energy=`curl --silent -X GET --header 'Accept: application/json' --header 'Authorization: xxxxTOKENxxxx' 'https://app.mirubee.com/api/v2/buildings/xxxxBuilding_IDxxxx/meters/xxxxMeter_IDxxxx/channels/1/last'|jq -r '.["P"]'`
echo $energy>$PWD'/WattsActual.txt'&& chmod a+x $PWD'/WattsActual.txt'
VARIABLE=`cut -d " " -f2 WattsActual.txt`
sleep 2 && curl -s -i -H "Accept: application/json" "http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=xxxxIDX_SENSORxxxx&nvalue=0&svalue=$VARIABLE”
Una vez tenemos el script podemos crear un botón On/Off en Domoticz para que lo ejecute cada 60 segundos o superior (La API tiene un límite de 1000 llamadas/dia). Puedes crear un Evento con Blocky que active el botón cada 60 segundos por ejemplo. Y ya está, cada 60 segundos tendrás la lectura actual visible en el sensor de Domoticz.

NOTAS: Com explicaba, la petición [“P”] (en Watts) se muestra en Domoticz con el sensor “Electricidad (instantánea+Contador)”. Ten en cuenta que si quieres pedir el voltaje [“V”] deberías mostrarla en Domoticz con su sensor correspondiente “Voltage”. Y si pides [“I”] deberías mostrarlo en un sensor tipo “Ampers (1fase)”.

screenchot.jpg
screenchot.jpg (62.76 KiB) Visto 1807 veces
----------

OPCIÓN B (Script de lectura para conseguir V+P+I con una sola llamada a la API)

*Si quisiéramos HACER LAS TRES LLAMADAS A LA VEZ, de manera que con una sola solicitud a la API de Mirubee quisiéramos recuperar a la vez Watts, Voltios y Amperios lo haremos a través de este script:

Lo podemos llamar mirubee_lecturas.sh Como todos lo modificaremos con nuestros datos, Token, Building_ID, Meter_ID, y los IDX de cada botón.

Código: Seleccionar todo

#!/bin/bash
energy=`curl --silent -X GET --header 'Accept: application/json' --header 'Authorization: xxxxTOKENxxxx' 'https://app.mirubee.com/api/v2/buildings/xxxxBuilding_IDxxxx/meters/xxxxMeter_IDxxxx/channels/1/last'`
echo $energy>$PWD'/LecturaPR.txt'&& chmod a+x $PWD'/LecturaPR.txt'
WATTS=`jq -r '.["P"]' LecturaPR.txt`
echo $WATTS>$PWD'/watts.txt'&& chmod a+x $PWD'/watts.txt'
LectWATTS=`cut -d " " -f2 watts.txt`
sleep 2 && curl -s -i -H "Accept: application/json" "http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=xxxxIDX_SensorElectricidadxxxx&nvalue=0&svalue=$LectWATTS"
sleep 2 && VOLTS=`jq -r '.["V"]' LecturaPR.txt`
echo $VOLTS>$PWD'/volts.txt'&& chmod a+x $PWD'/volts.txt'
LectVOLTS=`cut -d " " -f2 volts.txt`	
sleep 2 && curl -s -i -H "Accept: application/json" "http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=xxxxIDX_SensorVoltiosxxxx&nvalue=0&svalue=$LectVOLTS"
sleep 2 && AMPERS=`jq -r '.["I"]' LecturaPR.txt`
echo $AMPERS>$PWD'/ampers.txt'&& chmod a+x $PWD'/ampers.txt'
LectAMPERS=`cut -d " " -f2 ampers.txt`
sleep 2 && curl -s -i -H "Accept: application/json" "http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=xxxxIDX_SensorAmperiosxxxx&nvalue=0&svalue=$LectAMPERS"
Básicamente este script lo que hace es hacer una llamada única a la API de Mirubee y devolver los valores actuales de watios, voltios y amperios. Una vez recibidos se guardan en un archivo llamado LecturaPR.txt. Luego por un lado, el script extrae los wattios, los guarda en el archivo wattios.txt y los envía al switch de electricidad de Domoticz. Del mismo modo, posteriomente extrae los voltios que guarda en el archivo volts.txt y los envia al switch de Domoticz que mostrará los voltios. Y finalmente extrae los amperios, los guarda en el archivo ampers.txt y los envía al switch correspondiente de Amperios en Domoticz.

--------

OPCIÓN C (Script INTEGRADO: Token+V+P+I en una única llamada a la API)

Y ya finalmente, para rizar el rizo tenemos una tercera opción. La que integra completamente todo. Con una única llamada a la API de Mirubee recibiremos un token actualizado para autorizarnos y descargará las tres lecturas (Watts+Voltios+Amperios). Esta opción para mi es la más interesante puesto que el token caduca semanalmente, y si utilizamos cualquiera de los dos métodos anteriores nos encontraríamos que semanalmente deberíamos solicitar token nuevo y editar el script de lecturas. Así pues vamos al lio con el método definitivo:

Igual que en los scripts anteriores hacemos copiar-pegar de este código en un archivo que podemos llamar mirubee_leturas.sh que guardamos en /domoticz/scripts. Modificamos con nuestros parámetros personales de Client_ID, PSW_Mirubee, Email_Mirubee, Building_ID, Meter_ID y los IDX de cada botón. El token no es necesario puesto que el script solicita un token nuevo en cada llamada, lo guarda y lo usa para acceder a nuestros datos.

Este script descarga las lecturas sin crear archivos addicionales y extrae cada dato para enviarlo a su botón de Domoticz correspondiente. Como en los anteriores scripts de lectura lo programamos por crontab o blocky para que llame cada 60 segundos o superior y listos.

Código: Seleccionar todo

#!/bin/bash

#DESCARREGA LES DADES DE MIRUBEE
token=`curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{
"language": "es",
"client_type_id": "web",
"client_id": "xxxxSID_MEDIDORxxxx",
"timezone": "ES",
"password": "xxxxPSW_MYMIRUBEExxxx",
"email": "xxxxEMAIL_MYMIRUBEExxx"
}' 'https://app.mirubee.com/api/v2/login'|jq -r '.["token"]'`
lectures=$(curl --silent -X GET --header 'Accept: application/json' --header "Authorization: $token" 'https://app.mirubee.com/api/v2/buildings/xxxxBuilding_IDxxx/meters/xxxxMeter_IDxxxx/channels/1/last')

#EXTREU VOLTS, WATTS I AMPERS
W=$(echo $lectures | jq -r '.["P"]' | grep -Eo '[+-]?[0-9]+([.][0-9]+)?')
V=$(echo $lectures | jq -r '.["V"]' | grep -Eo '[+-]?[0-9]+([.][0-9]+)?')
A=$(echo $lectures | jq -r '.["I"]' | grep -Eo '[+-]?[0-9]+([.][0-9]+)?')

#ENVIA ELS RESULTATS ALS BOTONS
curl -s -i -H "Accept: application/json" "http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=xxxxIDX_SensorElectricitatxxxx&nvalue=0&svalue=$W"
curl -s -i -H "Accept: application/json" "http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=xxxxIDX_SensorVoltsxxxx&nvalue=0&svalue=$V"
curl -s -i -H "Accept: application/json" "http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=xxxxIDX_SensorAmpersxxxx&nvalue=0&svalue=$A"
--------

Mostrar el PORCENTAJE del consumo Valle del día anterior para Tarifas de DISCRIMINACIÓN HORARIA 2.0 DHA

Este script lo que hace es hacer una llamada a la API de Mirubee y descarga el consumo en Watios por cada hora del día anterior. Una vez descargado guarda los 24 consumos en el archivo “consum_horari.txt” dentro de la carpeta /home/pi/domoticz/scripts.

Una vez creado el archivo y descargados los datos extrae los consumos por cada hora individualmente. Suma por una parte los de horario nocturno y por otra los de horario diurno para finalmente calcular el porcentaje de consumo en horario de noche y enviar el resultado a un sensor de Domoticz (Tipo "Porcentaje" que podemos nombrar “KWh Nocturna”, que deberéis crear antes de ejecutar el script.)

mirubee_porcentaje_noche.jpg
mirubee_porcentaje_noche.jpg (38.32 KiB) Visto 1718 veces

Prerequisitos:
1.- Tener instalado Apcalc en la raspi para hacer los cálculos.
2.- Disponer de tu Client_ID, Building_ID, Meter_ID, Password y Usuario de MyMirubee, y el IDX del sensor de Domoticz donde enviarás los datos a mostrar.

Vamos al lío!
Creamos el script bash llamado mirubee_porcentaje_noche.sh en /home/pi/domoticz/scripts/ y copiamos este código modificando con nuestros datos de accesos a la API de Mirubee.

Código: Seleccionar todo

#!/bin/bash

#LOGIN MIRUBEE
avui=$(date +%F)
ahir=$(date +%F --date '-1 day')
token=`curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{
"language": "es",
"client_type_id": "web",
"client_id": "xxxxSID_MEDIDORxxxx",
"timezone": "ES",
"password": "xxxxPSW_MYMIRUBEExxxx",
"email": "xxxxEMAIL_MYMIRUBEExxxx"
}' 'https://app.mirubee.com/api/v2/login'|jq -r '.["token"]'`
curl -X GET --header "Accept: application/json" --header "Authorization: $token" "https://app.mirubee.com/api/v2/buildings/xxxxBuilding_IDxxxx/meters/xxxxMeter_IDxxxx/channels/1/data?start=${ahir%$'\r'}%2000%3A00&end=${avui%$'\r'}%2000%3A01&time_unit=hours&param=E" >/home/pi/domoticz/scripts/consum_horari.txt

#EXTRACCION CONSUMOS POR HORA DE AYER
sleep 5 &&
ha=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f4|cut -d "[" -f2`
hb=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f5|cut -d "," -f6`
hc=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f6|cut -d "," -f7`
hd=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f7|cut -d "," -f8`
he=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f8|cut -d "," -f9`
hf=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f9|cut -d "," -f10`
hg=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f10|cut -d "," -f11`
hh=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f11|cut -d "," -f12`
hi=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f12|cut -d "," -f13`
hj=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f13|cut -d "," -f14`
hk=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f14|cut -d "," -f15`
hl=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f15|cut -d "," -f16`
hll=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f16|cut -d "," -f17`
hm=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f17|cut -d "," -f18`
hn=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f18|cut -d "," -f19`
ho=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f19|cut -d "," -f20`
hp=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f20|cut -d "," -f21`
hq=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f21|cut -d "," -f22`
hr=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f22|cut -d "," -f23`
hs=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f23|cut -d "," -f24`
ht=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f24|cut -d "," -f25`
hu=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f25|cut -d "," -f26`
hv=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f26|cut -d "," -f27`
hw=`cat /home/pi/domoticz/scripts/consum_horari.txt|cut -d "," -f27|cut -d "]" -f1`

#VARIABLES BASALES PARA CALCULOS
avuix=$(date +%s)
anyx=$(date +%Y)

#CALCULA LA FECHA DEL ULTIMO DOMINGO DE MARZO PARA CALCULAR LA DHA DE 23 A 13h
dia_mar=$(cal 03 $anyx |awk '{print $1}' |grep [0-9] |head -5 |tail -1)
data_canvi_mar=$(date --date=$anyx-03-$dia_mar +%s)

#CALCULA LA FECHA DEL ULTIMO DOMINGO DE OCTUBRE PARA CALCULAR LA DHA DE 22 A 12h
dia_octubre=$(cal 10 $anyx |awk '{print $1}' |grep [0-9] |head -5 |tail -1)
data_canvi_oct=$(date --date=$anyx-10-$dia_octubre +%s)

#CALCULA Y GUARDA LA SUMA DE CONSUMO DE DIA Y NOCHE EN FUNCION DE SI LA DISCRIMINACION EMPIEZA A LAS 22 O A LAS 23H
if [ "$avuix" -ge "$data_canvi_mar" -a "$avuix" -lt "$data_canvi_oct" ] 
then
  nit=$(calc $ha+$hb+$hc+$hd+$he+$hf+$hg+$hh+$hi+$hj+$hk+$hl+$hll+$hw)
  dia=$(calc $hm+$hn+$ho+$hp+$hq+$hr+$hs+$ht+$hu+$hv)
else
  nit=$(calc $ha+$hb+$hc+$hd+$he+$hf+$hg+$hh+$hi+$hj+$hk+$hl+$hv+$hw)
  dia=$(calc $hll+$hm+$hn+$ho+$hp+$hq+$hr+$hs+$ht+$hu)
fi

#CALCULA EL PORCENTAJE Y ENVIA EL RESULTADO AL SENSOR DE DOMOTICZ
sleep 3 &&
suma=$(calc $dia+$nit)
sleep 2 &&
pcent=$(calc $nit*100)
pcent1=$(calc $pcent/$suma)
sleep 2 &&
percent=${pcent1:2:5}
sleep 6 &&
curl -s -i -H "Accept: application/json" "http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=xxIDX_Sensorxx&nvalue=0&svalue=$percent"
- A TENER EN CUENTA:

1.-El script recoge las watios del día anterior. Así pues está pensado para que lo ejecutéis automáticamente por crontab o blocky a partir de las 03:00 de la mañana. La razón és que los datos de consumo del día anterior en la API de Mirubee aparecen completos 3 horas después de acabar el día. Por ello debéis hacer la llamada a las 03:00 o a partir de las 03:00 de la madrugada del día siguiente.
Última edición por Jordi el 26 Nov 2018, 19:39, editado 34 veces en total.


DAVIZINHO
Mensajes: 123
Registrado: 03 Jun 2017, 13:33

28 May 2018, 16:13

Gran aporte compañero!


xarly_88
Mensajes: 8
Registrado: 01 Nov 2018, 11:30

01 Nov 2018, 11:43

Hola!!! Buenas Dias. Lo primero darte las gracias por este gran aporte. Voy a intentar hacerlo funcionar aunque dudo saber hacerlo. me podrias indicar pasos a seguir para instalar el domoticz en mi raspberry?


Avatar de Usuario
Jordi
Mensajes: 134
Registrado: 30 Jul 2017, 11:05

13 Nov 2018, 15:57

Instalar domoticz es ir probando y no se si podría explicarte los pasos fui probando y al final funcionó. Si tienes alguna duda concreta y puedo ayudarte ya me dices. Hay muchos tutoriales por la red

Enviado desde mi Redmi Note 4 mediante Tapatalk



xarly_88
Mensajes: 8
Registrado: 01 Nov 2018, 11:30

22 Nov 2018, 22:31

hola!! Gracias por contestar. Hoy me e vuelto a poner con este tema, y he conseguido intalar domoticz. Pero me e quedado atascado en lo que dices de crear un sensor virutal Electricidad. yo entro en hardware y en el desplegable lo unico que encuentro parecido es domoticz remote server. a cer si me puedes echar una mano.

Gracias de antemano


xarly_88
Mensajes: 8
Registrado: 01 Nov 2018, 11:30

22 Nov 2018, 22:46



Avatar de Usuario
Jordi
Mensajes: 134
Registrado: 30 Jul 2017, 11:05

23 Nov 2018, 08:21

Genial!

Enviado desde mi Redmi Note 4 mediante Tapatalk



xarly_88
Mensajes: 8
Registrado: 01 Nov 2018, 11:30

26 Nov 2018, 10:42

Hola Buenos dias!!! He estado trasteando este finde pero me e quedado atascado,(sera por mi ignorancia).E llegado al punto de tener los tres indicadores pero no me toman valores. He estado buscando por la red lo que dices de hacer un interruptor on-off y gobernarle mediante blocky para que se ejecute cada cierto tiempo y tampoco lo consigo. Si fueras tan amable de echarme una mano.. yo soy demasiado principiante.

Puede ser que no reciba datos por que el scrip tiene unas direcciones ip 127.0.0.1 y yo tenga que actualizarlas con las mias?


Avatar de Usuario
Jordi
Mensajes: 134
Registrado: 30 Jul 2017, 11:05

26 Nov 2018, 15:53

Hola no, la ip del script es correcta, es la ip de domoticz desde raspberry.

Para pedir las lecturas cada cierto tiempo tienes que hacer una escena en blocky. Yo lo tengo del siguiente modo:

Por una banda , tengo un sensor virtual configurado como "Interruptor Selector" no como switch On/Off. Un interruptor Selector es un sensor virtual con 10 opciones/o niveles. Lo editas y configuras el nivel 10 con el script que hace las llamadas a Mirubee, y el nivel 20 con el mismo script.

Luego te vas a blocky y configuras un evento donde "cuando el sensor X pulse el nivel 10, se espere 60 segundos y luego pulse el nivel 20 del mismo sensor y luego espere 60 segundos mas y pulse el nivel 10 otra vez". Así creas un loop de manera que cada 60 segundos ejecutas nivel 10 y luego nivel 20, y luego nivel 10 otra vez y luego nivel 20... Y con qué es el mismo script 10 y 20 pues está llamando cada 60 segundos a Mirubee para que actualice los valores de los sensores.

Enviado desde mi Redmi Note 4 mediante Tapatalk



Avatar de Usuario
Jordi
Mensajes: 134
Registrado: 30 Jul 2017, 11:05

26 Nov 2018, 16:00

Has conseguido al menos descargar valores una vez? Para contrastar que al menos el script este bien.

Enviado desde mi Redmi Note 4 mediante Tapatalk



Responder

Volver a “Domoticz”