Después de regalarle a mi hijo un flamante IPhone 14 me vino con la tonteria de que no se podia cargar a mas del 90% , alucinante , te compras un mega chachi pirulo o seaaaaaaaaaa movil que no se puede cargar al 100%, lo peor de todo es que por tener esa castaña de móvil lo asumen , pero esto ya es divagar , volviendo al tema del sensor me puse en un rato y dije , voy a crear un sistema para cargarlo hasta el 90% y parar , pero para trastear donde este un buen Android que se quite el IPhone.
Lo primero es crear una base de datos en MySQL , accederemos mediante phpMyAdmin

Creamos la tabla bateria , yo le añadí estos cuatro campos

Lo siguiente crearemos una pagina en PHP para recoger los datos que le enviemos , la llamaremos get-data.php
Esta pagina recoge los datos que le pasemos por GET en la URL de llamada y los inserta en la tabla
<?php
// Establecer la zona horaria de Madrid
date_default_timezone_set('Europe/Madrid');
$servername = "localhost";
$dbname = "bateria";
$username = "xxxxxxxxx";
$password = "yyyyyyyyyyyyyyyy";
$api_key_value = "zzzzzzzzzz";
// Recibir los parámetros enviados
$api_key = test_input($_GET['api_key']) ?? '';
$movil = test_input($_GET['movil']) ?? '';
$porcentaje = test_input($_GET['porcentaje']) ?? '';
$estado = test_input($_GET['estado']) ?? '';
if($api_key == $api_key_value) {
$fecha = date("Y-m-d H:i:s");
// Crear conexión
$conn = new mysqli($servername, $username, $password, $dbname);
// Probar conexión
if ($conn->connect_error) {
die("Fallo conexión : " . $conn->connect_error);
}
$sql = "INSERT INTO bateria (movil, porcentaje, fecha , estado)
VALUES ('" . $movil . "', '" . $porcentaje . "', '" . $fecha . "', '" . $estado . "')";
if ($conn->query($sql) === TRUE) {
echo "Registro añadido";
}
else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
else {
echo "Error en la API Key.";
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
Haremos la prueba con cualquier herramienta online al uso que encontremos para ello , yo use para ello https://reqbin.com/
La url de llamada quedaria algo similar a esto http://antrivas.duckdns.org:XXXX/YYYYYY/get-data.php?api_key=xxxxxxxx&movil=antonio&porcentaje=91&estado=connect
Si todo es correcto nos devolverá este mensaje en la pagina web

En phpMyAdmin veremos como en cada llamada va insertando registros en la tabla

Ahora crearemos en macrodroid un par de macros , la primera para que nos ponga en una variable global el estado de la carga.
Primero creamos la variable global

Hacemos que cualquier cambio o cada minuto se active la actualización de estado de la carga


Ahora crearemos la segunda automatización que se encargue de enviar los datos cada intervalo de tiempo a la siguiente URL
http://antrivas.duckdns.org:XXXX/YYYYYY/get-data.php?api_key=ZZZZZZZ&movil=antonio&porcentaje={lv=nivel_batería}&estado={v=estado_carga}
La creamos y le damos como ciclo de repetición cada cinco minutos.

Lo primero será fijar el nivel de bateria actual

Enviamos los datos por HTTP GET

Guardamos la respuesta para un messagebox ( mientras depuramos las automatizaciones ) y guardarlo en un fichero de log

Podremos ver en el log de Macrodroid como se van produciendo las acciones

Y en la base de datos ya nos iran apareciendo los registros tras cada una de las llamadas a la URL

Ahora toca liarnos con la parte de Home Assistant
En secrets.yaml pondremos nuestra cadena de conexión a la base de datos baterias
xxxxxxxxxx
db_url_bateria mysql //xxxxxxxxxx yyyyyyyyy@127.0.0.1 9306/bateria?charset=utf8
En la sección sensors añadiremos cuatro sensores , dos de porcentaje , y dos de estado
xxxxxxxxxx
platform sql
db_url !secret db_url_bateria
scan_interval60
queries
name'bateria_movil_antonio_porcentaje'
query"SELECT * FROM `bateria` WHERE movil = 'antonio' ORDER BY fecha DESC LIMIT 1;"
column'porcentaje'
unit_of_measurement"%"
platform sql
db_url !secret db_url_bateria
scan_interval60
queries
name'bateria_movil_oriol_porcentaje'
query"SELECT * FROM `bateria` WHERE movil = 'oriol' ORDER BY fecha DESC LIMIT 1;"
column'porcentaje'
unit_of_measurement"%"
platform sql
db_url !secret db_url_bateria
scan_interval60
queries
name'bateria_movil_antonio_cargando'
query"SELECT * FROM `bateria` WHERE movil = 'antonio' ORDER BY fecha DESC LIMIT 1;"
column'estado'
platform sql
db_url !secret db_url_bateria
scan_interval60
queries
name'bateria_movil_oriol_cargando'
query"SELECT * FROM `bateria` WHERE movil = 'oriol' ORDER BY fecha DESC LIMIT 1;"
column'estado'
En configuration.yaml haremos que nos guarde los valores añadiéndolos en la sección recorder.
xxxxxxxxxx
sensor.bateria_movil_antonio_porcentaje
sensor.bateria_movil_oriol_porcentaje
sensor.bateria_movil_antonio_cargando
sensor.bateria_movil_oriol_cargando
Lo pondremos a nuestro gust en el fichero customize.yaml
xxxxxxxxxx
sensor.bateria_movil_antonio_porcentaje
friendly_name Bateria movil Antonio
icon mdi battery-90
sensor.bateria_movil_oriol_porcentaje
friendly_name Bateria movil Oriol
icon mdi battery-90
sensor.bateria_movil_antonio_cargando
friendly_name Estado carga movil Antonio
icon mdi battery-charging-90
sensor.bateria_movil_oriol_cargando
friendly_name Estado carga movil Oriol
icon mdi battery-charging-90
Y ya lo podemos poner en nuestro panel lovelace
xxxxxxxxxx
type entities
title Baterias moviles
show_nametrue
show_statefalse
show_header_togglefalse
columns 3
entities
sensor.bateria_movil_antonio_porcentaje
sensor.bateria_movil_antonio_cargando
type divider
sensor.bateria_movil_oriol_porcentaje
sensor.bateria_movil_oriol_cargando
Ya nos aparece en el panel

Y podemos ver la grafica de la bateria

Y los diferentes estados de carga del dispositivo

Y ahora pasaremos a crear las automatizaciones para controlar el máximo de carga de bateria al 90% y volver a cargar cuando baje a 80% , también desconectaremos el cargador cuando no estemos en casa.
xxxxxxxxxx
####################################
##### Enchufe cargador Antonio #####
####################################
alias Enchufe cargador antonio carga inferior a 80
id Enchufe cargador antonio carga inferior a 80
initial_state'on'
trigger
platform numeric_state
entity_id
sensor.bateria_movil_antonio_porcentaje
below80
condition
condition state
entity_id input_boolean.int_presencia_antonio
state'on'
action
#Enchufe cargador Antonio
service switch.turn_on
entity_id switch.enchufe_27_cargador_movil_antonio
alias Enchufe cargador antonio carga superior a 90
id Enchufe cargador antonio carga superior a 90
initial_state'on'
trigger
platform numeric_state
entity_id
sensor.bateria_movil_antonio_porcentaje
above90
condition
condition state
entity_id input_boolean.int_presencia_antonio
state'on'
action
#Enchufe cargador Antonio
service switch.turn_off
entity_id switch.enchufe_27_cargador_movil_antonio
alias Enchufe cargador antonio apagar si no se esta en casa
id Enchufe cargador antonio apagar si no se esta en casa
initial_state'on'
trigger
platform numeric_state
entity_id
sensor.bateria_movil_antonio_porcentaje
condition
condition state
entity_id input_boolean.int_presencia_antonio
state'off'
action
#Enchufe cargador Antonio
service switch.turn_off
entity_id switch.enchufe_27_cargador_movil_antonio
Y con esto y un bizcocho ….