Ultima entrada

  • Crear sensor bateria Android e integrarlo en Home Assistant

    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

    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 . "
    " . $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 ….

2 comentarios en «Ultima entrada»

  1. Hola Antonio!! LLegue a tu web buscando un tutorial de como instalar un ZBDongle-E en un QNAP TS 251D pero aun ando bastante liado jaja ojala me puedas dar una mano si tienes un tiempo libre!! Abrazo desde Argentina!!

    Responder

Deja un comentario