Publicado en Home-Assistant

Detección de presencia para Home Assistant


Buscando de como integrar detección de presencia para Home Assistant y viendo que algunas de las soluciones no son demasiadas simples o bien muy rebuscadas para su total implementación.

Aprovechando la cuarantena me he puesto a diseñar una solución simple y universal, que solo requiere de dos cosas:

  1. Un Smartphone/Tablet Android, puede ser el mismo que se usa como centro de control, importante debe estar siempre en casa o en la dependencia de detección.
  2. Todos los usuarios que queremos detectar su presencia deben llevar su dispositivo bluetooth encendido, puede ser su mismo smarphone personal, una banda deportiva (algunas funcionan mejor que otras), una usb key bluetooth etc…

Para los que tienen desactivado el bluetooth desde que se implemento el bluetooth LTE (Bajo consumo) se puede tener siempre encedido

Sigue leyendo “Detección de presencia para Home Assistant”
Publicado en Android

Mi Gestor de Aplicaciones Android


Gestiona las aplicaciones instaladas en tu Android como todo un experto con la app Gestor de Aplicaciones.

Existen varias apps para administrar aplicaciones pero ninguna hasta la fecha, ofrecía la variedad de agrupar las aplicaciones instaladas del dispositivo.

Ese gestor de apps ofrece a través de una interfaz sencilla y de extrema fluidez, la posibilidad de gestionar todas las apps instaladas en tu smartphone o tablet Android.

Entre otras cosas, nos brinda la posibilidad de realizar búsquedas rápidas de aplicaciones, mostrar un listado agrupados por:

Sigue leyendo “Mi Gestor de Aplicaciones Android”
Publicado en Android

Crear una app en Kotlin: analizador de batería


Apuntes donde ire anotando los pasos que sigo para desarrollar una app para Android usando Kotlin como lenguaje y entorno de desarrollo Android Studio

Sobre la App a desarrollar

La app que se diseñará es un analizador de batería, donde se informará al usuario del estado de la batería, su consumo y información de la batería.

Detallando funcionalidades:

  • Mostrar nivel de batería actual, mediante barra circular
  • Mostrar información del sistema de carga, red eléctrica, USB o inalámbrica
  • Mostrar tiempo de carga o restante, dependiendo si el dispositivo se está cargando.
  • Mostrar información de la batería, fabricante, capacidad, voltaje, temperatura
  • Monitorizar la carga o descarga mediante el amperaje, gráfica en tiempo real opcional.
  • Accesos directos a la sección batería de la configuración del sistema y uso de energía
  • Panel adyacente con controles rápidos, para wifi, bluetooth, brillo, sonido
  • Modo oscuro compatible con Android Q

Requisitos

En el equipo de producción debemos tener instalador Java8 (Java SE Development Kit 8) y el Android Studio, por la red corren miles de tutoriales de como instalar para Windows10, Linux o MacOS.

La otra herramienta en tener instalada Figma que es para hacer bocetos de apps y así ir detallando el diseño global, colores, estructura, datos visuales, posición del contenido, secciones de la app, etc..
También sirve para diseñar iconos, folletos publicitarios etc..

Diseñando la interfaz

Se debe crear un boceto para plasmar la idea y así ir diseñando la funcionalidad y representación de los datos en pantalla, agrupar funcionalidades por vistas:

Vista Estado de la batería

  • Mostrar un gráfico con el nivel actual de la batería y que cambie de color dependiendo del nivel que se encuentre.
  • Mostrar si la batería se está cargando o descargando
  • Mostrar el tipo de carga, si es por toma de corriente alterna (AC), carga por USB o inalambrica (wireless)
  • Mostrar estado de salud de la batería, Buen estado, Mal estado etc…
Battery Check versión 0.1

Recopilación de funcionalidades

Antes de empezar a picar código se debe estructurar la aplicación , analizar los datos que se pueden obtener con las APIS que ofrece Android y ver su funcionalidad en este caso BatteryManager.

Interceptar datos de batería

Para obtener los datos de la batería se debe interceptar los mensajes mediante un Broadcast en el canal ACTION_BATTERY_CHANGED

private val batteryChangeReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
    ...
    }
}

override fun onStart() {
    super.onStart()

    val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
    registerReceiver(batteryChangeReceiver, filter)

}

override fun onStop() {
    super.onStop()
    unregisterReceiver(batteryChangeReceiver)
}

Detectar si existe batería

Antes de obtener datos de batería se debe mirar si el dispositivo tiene batería, se realiza con el flag EXTRA_PRESENT

Obtener estado de la batería

Para obtener el estado de la batería si se está cargando, descargando, si se ha llegado al 100% de la carga etc…

val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
val batteryPct: Float = level / scale.toFloat()

Obtener método de carga de la batería

Las APIS de Android ofrecen la posibilidad de poder detectar el método de la carga que se está usando

val chargePlug: Int = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)
when (chargePlug) {
    BatteryManager.BATTERY_PLUGGED_WIRELESS -> lblBatteryCharge.text = "Wireless charge"
    BatteryManager.BATTERY_PLUGGED_AC -> //Corriente alterna
    BatteryManager.BATTERY_PLUGGED_USB -> //Por usb
    else -> //Se está usando la batería
}

Detectar estado de salud de la batería

Para obtener el estado de salud de la batería Android ofrece solo un dato, sin ciclos de batería ni aun menos estado de las celdas etc…

when (intent.getIntExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN)) {
    BatteryManager.BATTERY_HEALTH_GOOD -> //En buen estado
    BatteryManager.BATTERY_HEALTH_COLD -> //Fría
    BatteryManager.BATTERY_HEALTH_DEAD -> //Muerta
    BatteryManager.BATTERY_HEALTH_OVERHEAT -> //Sobrecalentada
    BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE -> //Sobre voltaje
    BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE -> //Fallo no especificado
    BatteryManager.BATTERY_HEALTH_UNKNOWN -> //Desconocido
}

Otros datos de la batería

Se puede extraer otros datos de la batería como es la temperatura, su voltaje y el amparaje de carga o descarga.

val batteryVoltage: Int = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1)
val batteryTemperature: Int = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1)
val batteryTechnology: String? = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY)

Recursos

Recursos usados para crear los apuntes, subidos en git