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
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
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.
#################################### ##### 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 ….