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
![](https://rivas.cloud/wp-content/uploads/2024/03/image.png)
Creamos la tabla bateria , yo le añadí estos cuatro campos
![](https://rivas.cloud/wp-content/uploads/2024/03/image-1.png)
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
![](https://rivas.cloud/wp-content/uploads/2024/03/image-3.png)
En phpMyAdmin veremos como en cada llamada va insertando registros en la tabla
![](https://rivas.cloud/wp-content/uploads/2024/03/image-2.png)
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
![](https://rivas.cloud/wp-content/uploads/2024/03/image-12.png)
Hacemos que cualquier cambio o cada minuto se active la actualización de estado de la carga
![](https://rivas.cloud/wp-content/uploads/2024/03/image-11-518x1024.png)
![](https://rivas.cloud/wp-content/uploads/2024/03/image-10-517x1024.png)
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.
![](https://rivas.cloud/wp-content/uploads/2024/03/image-8-516x1024.png)
Lo primero será fijar el nivel de bateria actual
![](https://rivas.cloud/wp-content/uploads/2024/03/image-14-516x1024.png)
Enviamos los datos por HTTP GET
![](https://rivas.cloud/wp-content/uploads/2024/03/image-15-513x1024.png)
Guardamos la respuesta para un messagebox ( mientras depuramos las automatizaciones ) y guardarlo en un fichero de log
![](https://rivas.cloud/wp-content/uploads/2024/03/image-9-527x1024.png)
Podremos ver en el log de Macrodroid como se van produciendo las acciones
![](https://rivas.cloud/wp-content/uploads/2024/03/image-7-517x1024.png)
Y en la base de datos ya nos iran apareciendo los registros tras cada una de las llamadas a la URL
![](https://rivas.cloud/wp-content/uploads/2024/03/image-4.png)
Ahora toca liarnos con la parte de Home Assistant
En secrets.yaml pondremos nuestra cadena de conexión a la base de datos baterias
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
- platform: sql db_url: !secret db_url_bateria scan_interval: 60 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_interval: 60 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_interval: 60 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_interval: 60 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.
- 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
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
- type: entities title: Baterias moviles show_name: true show_state: false show_header_toggle: false 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
![](https://rivas.cloud/wp-content/uploads/2024/03/image-27.png)
Y podemos ver la grafica de la bateria
![](https://rivas.cloud/wp-content/uploads/2024/03/image-28.png)
Y los diferentes estados de carga del dispositivo
![](https://rivas.cloud/wp-content/uploads/2024/03/image-29.png)
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.
#################################### ##### 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 below: 80 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 above: 90 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 ….