mirror of
https://github.com/home-assistant/android
synced 2024-09-19 08:01:31 +00:00
Split up WiFi sensor, part 1 (#904)
* Split up wifi attributes into their own sensor, part 1 * Add note to remove attributes after next release * Wifi to WiFi for consistency
This commit is contained in:
parent
f771048f73
commit
514532b282
|
@ -16,6 +16,45 @@ class NetworkSensorManager : SensorManager {
|
||||||
R.string.basic_sensor_name_wifi,
|
R.string.basic_sensor_name_wifi,
|
||||||
R.string.sensor_description_wifi_connection
|
R.string.sensor_description_wifi_connection
|
||||||
)
|
)
|
||||||
|
val bssidState = SensorManager.BasicSensor(
|
||||||
|
"wifi_bssid",
|
||||||
|
"sensor",
|
||||||
|
R.string.basic_sensor_name_wifi_bssid,
|
||||||
|
R.string.sensor_description_wifi_bssid
|
||||||
|
)
|
||||||
|
val wifiIp = SensorManager.BasicSensor(
|
||||||
|
"wifi_ip_address",
|
||||||
|
"sensor",
|
||||||
|
R.string.basic_sensor_name_wifi_ip,
|
||||||
|
R.string.sensor_description_wifi_ip
|
||||||
|
)
|
||||||
|
val wifiLinkSpeed = SensorManager.BasicSensor(
|
||||||
|
"wifi_link_speed",
|
||||||
|
"sensor",
|
||||||
|
R.string.basic_sensor_name_wifi_link_speed,
|
||||||
|
R.string.sensor_description_wifi_link_speed,
|
||||||
|
unitOfMeasurement = "Mbps"
|
||||||
|
)
|
||||||
|
val wifiState = SensorManager.BasicSensor(
|
||||||
|
"wifi_state",
|
||||||
|
"binary_sensor",
|
||||||
|
R.string.basic_sensor_name_wifi_state,
|
||||||
|
R.string.sensor_description_wifi_state
|
||||||
|
)
|
||||||
|
val wifiFrequency = SensorManager.BasicSensor(
|
||||||
|
"wifi_frequency",
|
||||||
|
"sensor",
|
||||||
|
R.string.basic_sensor_name_wifi_frequency,
|
||||||
|
R.string.sensor_description_wifi_frequency,
|
||||||
|
unitOfMeasurement = "MHz"
|
||||||
|
)
|
||||||
|
val wifiSignalStrength = SensorManager.BasicSensor(
|
||||||
|
"wifi_signal_strength",
|
||||||
|
"sensor",
|
||||||
|
R.string.basic_sensor_name_wifi_signal,
|
||||||
|
R.string.sensor_description_wifi_signal,
|
||||||
|
unitOfMeasurement = "dBm"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val enabledByDefault: Boolean
|
override val enabledByDefault: Boolean
|
||||||
|
@ -23,7 +62,7 @@ class NetworkSensorManager : SensorManager {
|
||||||
override val name: Int
|
override val name: Int
|
||||||
get() = R.string.sensor_name_network
|
get() = R.string.sensor_name_network
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(wifiConnection)
|
get() = listOf(wifiConnection, bssidState, wifiIp, wifiLinkSpeed, wifiState, wifiFrequency, wifiSignalStrength)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(): Array<String> {
|
||||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
|
@ -40,6 +79,12 @@ class NetworkSensorManager : SensorManager {
|
||||||
context: Context
|
context: Context
|
||||||
) {
|
) {
|
||||||
updateWifiConnectionSensor(context)
|
updateWifiConnectionSensor(context)
|
||||||
|
updateBSSIDSensor(context)
|
||||||
|
updateWifiIPSensor(context)
|
||||||
|
updateWifiLinkSpeedSensor(context)
|
||||||
|
updateWifiSensor(context)
|
||||||
|
updateWifiFrequencySensor(context)
|
||||||
|
updateWifiSignalStrengthSensor(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateWifiConnectionSensor(context: Context) {
|
private fun updateWifiConnectionSensor(context: Context) {
|
||||||
|
@ -82,13 +127,13 @@ class NetworkSensorManager : SensorManager {
|
||||||
|
|
||||||
val attributes = conInfo?.let {
|
val attributes = conInfo?.let {
|
||||||
mapOf(
|
mapOf(
|
||||||
"bssid" to conInfo.bssid,
|
"bssid" to conInfo.bssid, // Remove after next release
|
||||||
"ip_address" to getIpAddress(conInfo.ipAddress),
|
"ip_address" to getIpAddress(conInfo.ipAddress), // Remove after next release
|
||||||
"link_speed" to conInfo.linkSpeed,
|
"link_speed" to conInfo.linkSpeed, // Remove after next release
|
||||||
"is_hidden" to conInfo.hiddenSSID,
|
"is_hidden" to conInfo.hiddenSSID,
|
||||||
"is_wifi_on" to wifiEnabled,
|
"is_wifi_on" to wifiEnabled, // Remove after next release
|
||||||
"frequency" to conInfo.frequency,
|
"frequency" to conInfo.frequency, // Remove after next release
|
||||||
"signal_level" to lastScanStrength
|
"signal_level" to lastScanStrength // Remove after next release
|
||||||
)
|
)
|
||||||
}.orEmpty()
|
}.orEmpty()
|
||||||
|
|
||||||
|
@ -100,6 +145,230 @@ class NetworkSensorManager : SensorManager {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateBSSIDSensor(context: Context) {
|
||||||
|
if (!isEnabled(context, bssidState.id))
|
||||||
|
return
|
||||||
|
|
||||||
|
var conInfo: WifiInfo? = null
|
||||||
|
var lastScanStrength = -1
|
||||||
|
|
||||||
|
if (checkPermission(context)) {
|
||||||
|
val wifiManager =
|
||||||
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
|
conInfo = wifiManager.connectionInfo
|
||||||
|
|
||||||
|
lastScanStrength = wifiManager.scanResults.firstOrNull {
|
||||||
|
it.BSSID == conInfo.bssid
|
||||||
|
}?.level ?: -1
|
||||||
|
}
|
||||||
|
|
||||||
|
var signalStrength = -1
|
||||||
|
if (lastScanStrength != -1) {
|
||||||
|
signalStrength = WifiManager.calculateSignalLevel(lastScanStrength, 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
val icon = "mdi:wifi-strength-" + when (signalStrength) {
|
||||||
|
-1 -> "off"
|
||||||
|
0 -> "outline"
|
||||||
|
else -> signalStrength
|
||||||
|
}
|
||||||
|
|
||||||
|
val bssid = if (conInfo!!.bssid == null) "<not connected>" else conInfo.bssid
|
||||||
|
onSensorUpdated(context,
|
||||||
|
bssidState,
|
||||||
|
bssid,
|
||||||
|
icon,
|
||||||
|
mapOf()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateWifiIPSensor(context: Context) {
|
||||||
|
if (!isEnabled(context, wifiIp.id))
|
||||||
|
return
|
||||||
|
|
||||||
|
var conInfo: WifiInfo? = null
|
||||||
|
var deviceIp = "Unknown"
|
||||||
|
var lastScanStrength = -1
|
||||||
|
|
||||||
|
if (checkPermission(context)) {
|
||||||
|
val wifiManager =
|
||||||
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
|
conInfo = wifiManager.connectionInfo
|
||||||
|
|
||||||
|
deviceIp = if (conInfo.networkId == -1) {
|
||||||
|
"<not connected>"
|
||||||
|
} else {
|
||||||
|
getIpAddress(conInfo.ipAddress)
|
||||||
|
}
|
||||||
|
|
||||||
|
lastScanStrength = wifiManager.scanResults.firstOrNull {
|
||||||
|
it.BSSID == conInfo.bssid
|
||||||
|
}?.level ?: -1
|
||||||
|
}
|
||||||
|
|
||||||
|
var signalStrength = -1
|
||||||
|
if (lastScanStrength != -1) {
|
||||||
|
signalStrength = WifiManager.calculateSignalLevel(lastScanStrength, 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
val icon = "mdi:wifi-strength-" + when (signalStrength) {
|
||||||
|
-1 -> "off"
|
||||||
|
0 -> "outline"
|
||||||
|
else -> signalStrength
|
||||||
|
}
|
||||||
|
|
||||||
|
onSensorUpdated(context,
|
||||||
|
wifiIp,
|
||||||
|
deviceIp,
|
||||||
|
icon,
|
||||||
|
mapOf()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateWifiLinkSpeedSensor(context: Context) {
|
||||||
|
if (!isEnabled(context, wifiLinkSpeed.id))
|
||||||
|
return
|
||||||
|
|
||||||
|
var conInfo: WifiInfo? = null
|
||||||
|
var linkSpeed = 0
|
||||||
|
var lastScanStrength = -1
|
||||||
|
|
||||||
|
if (checkPermission(context)) {
|
||||||
|
val wifiManager =
|
||||||
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
|
conInfo = wifiManager.connectionInfo
|
||||||
|
|
||||||
|
linkSpeed = if (conInfo.networkId == -1) {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
conInfo.linkSpeed
|
||||||
|
}
|
||||||
|
|
||||||
|
lastScanStrength = wifiManager.scanResults.firstOrNull {
|
||||||
|
it.BSSID == conInfo.bssid
|
||||||
|
}?.level ?: -1
|
||||||
|
}
|
||||||
|
|
||||||
|
var signalStrength = -1
|
||||||
|
if (lastScanStrength != -1) {
|
||||||
|
signalStrength = WifiManager.calculateSignalLevel(lastScanStrength, 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
val icon = "mdi:wifi-strength-" + when (signalStrength) {
|
||||||
|
-1 -> "off"
|
||||||
|
0 -> "outline"
|
||||||
|
else -> signalStrength
|
||||||
|
}
|
||||||
|
|
||||||
|
onSensorUpdated(context,
|
||||||
|
wifiLinkSpeed,
|
||||||
|
linkSpeed,
|
||||||
|
icon,
|
||||||
|
mapOf()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateWifiSensor(context: Context) {
|
||||||
|
if (!isEnabled(context, wifiState.id))
|
||||||
|
return
|
||||||
|
|
||||||
|
var wifiEnabled = false
|
||||||
|
|
||||||
|
if (checkPermission(context)) {
|
||||||
|
val wifiManager =
|
||||||
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
|
|
||||||
|
wifiEnabled = wifiManager.isWifiEnabled
|
||||||
|
}
|
||||||
|
val icon = if (wifiEnabled) "mdi:wifi" else "mdi:wifi-off"
|
||||||
|
|
||||||
|
onSensorUpdated(context,
|
||||||
|
wifiState,
|
||||||
|
wifiEnabled,
|
||||||
|
icon,
|
||||||
|
mapOf()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateWifiFrequencySensor(context: Context) {
|
||||||
|
if (!isEnabled(context, wifiFrequency.id))
|
||||||
|
return
|
||||||
|
|
||||||
|
var conInfo: WifiInfo? = null
|
||||||
|
var frequency = 0
|
||||||
|
var lastScanStrength = -1
|
||||||
|
|
||||||
|
if (checkPermission(context)) {
|
||||||
|
val wifiManager =
|
||||||
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
|
conInfo = wifiManager.connectionInfo
|
||||||
|
|
||||||
|
frequency = if (conInfo.networkId == -1) {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
conInfo.frequency
|
||||||
|
}
|
||||||
|
|
||||||
|
lastScanStrength = wifiManager.scanResults.firstOrNull {
|
||||||
|
it.BSSID == conInfo.bssid
|
||||||
|
}?.level ?: -1
|
||||||
|
}
|
||||||
|
|
||||||
|
var signalStrength = -1
|
||||||
|
if (lastScanStrength != -1) {
|
||||||
|
signalStrength = WifiManager.calculateSignalLevel(lastScanStrength, 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
val icon = "mdi:wifi-strength-" + when (signalStrength) {
|
||||||
|
-1 -> "off"
|
||||||
|
0 -> "outline"
|
||||||
|
else -> signalStrength
|
||||||
|
}
|
||||||
|
|
||||||
|
onSensorUpdated(context,
|
||||||
|
wifiFrequency,
|
||||||
|
frequency,
|
||||||
|
icon,
|
||||||
|
mapOf()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateWifiSignalStrengthSensor(context: Context) {
|
||||||
|
if (!isEnabled(context, wifiSignalStrength.id))
|
||||||
|
return
|
||||||
|
|
||||||
|
var conInfo: WifiInfo? = null
|
||||||
|
var lastScanStrength = -1
|
||||||
|
|
||||||
|
if (checkPermission(context)) {
|
||||||
|
val wifiManager =
|
||||||
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
|
conInfo = wifiManager.connectionInfo
|
||||||
|
|
||||||
|
lastScanStrength = wifiManager.scanResults.firstOrNull {
|
||||||
|
it.BSSID == conInfo.bssid
|
||||||
|
}?.level ?: -1
|
||||||
|
}
|
||||||
|
|
||||||
|
var signalStrength = -1
|
||||||
|
if (lastScanStrength != -1) {
|
||||||
|
signalStrength = WifiManager.calculateSignalLevel(lastScanStrength, 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
val icon = "mdi:wifi-strength-" + when (signalStrength) {
|
||||||
|
-1 -> "off"
|
||||||
|
0 -> "outline"
|
||||||
|
else -> signalStrength
|
||||||
|
}
|
||||||
|
|
||||||
|
onSensorUpdated(context,
|
||||||
|
wifiSignalStrength,
|
||||||
|
lastScanStrength,
|
||||||
|
icon,
|
||||||
|
mapOf()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun getIpAddress(ip: Int): String {
|
private fun getIpAddress(ip: Int): String {
|
||||||
return (ip and 0xFF).toString() + "." +
|
return (ip and 0xFF).toString() + "." +
|
||||||
(ip shr 8 and 0xFF) + "." +
|
(ip shr 8 and 0xFF) + "." +
|
||||||
|
|
|
@ -175,7 +175,13 @@ like to connect to:</string>
|
||||||
<string name="basic_sensor_name_battery_state">Battery State</string>
|
<string name="basic_sensor_name_battery_state">Battery State</string>
|
||||||
<string name="basic_sensor_name_bluetooth">Bluetooth Connection</string>
|
<string name="basic_sensor_name_bluetooth">Bluetooth Connection</string>
|
||||||
<string name="basic_sensor_name_last_reboot">Last Reboot</string>
|
<string name="basic_sensor_name_last_reboot">Last Reboot</string>
|
||||||
<string name="basic_sensor_name_wifi">Wifi Connection</string>
|
<string name="basic_sensor_name_wifi">WiFi Connection</string>
|
||||||
|
<string name="basic_sensor_name_wifi_bssid">WiFi BSSID</string>
|
||||||
|
<string name="basic_sensor_name_wifi_ip">WiFi IP Address</string>
|
||||||
|
<string name="basic_sensor_name_wifi_link_speed">WiFi Link Speed</string>
|
||||||
|
<string name="basic_sensor_name_wifi_state">WiFi State</string>
|
||||||
|
<string name="basic_sensor_name_wifi_frequency">WiFi Frequency</string>
|
||||||
|
<string name="basic_sensor_name_wifi_signal">WiFi Signal Strength</string>
|
||||||
<string name="basic_sensor_name_alarm">Next Alarm</string>
|
<string name="basic_sensor_name_alarm">Next Alarm</string>
|
||||||
<string name="basic_sensor_name_phone">Phone State</string>
|
<string name="basic_sensor_name_phone">Phone State</string>
|
||||||
<string name="basic_sensor_name_sim1">SIM 1</string>
|
<string name="basic_sensor_name_sim1">SIM 1</string>
|
||||||
|
@ -208,7 +214,14 @@ like to connect to:</string>
|
||||||
<string name="sensor_description_steps_sensor">The total number of steps since the last reboot of the device</string>
|
<string name="sensor_description_steps_sensor">The total number of steps since the last reboot of the device</string>
|
||||||
<string name="sensor_description_internal_storage">Information about the total and available storage space internally</string>
|
<string name="sensor_description_internal_storage">Information about the total and available storage space internally</string>
|
||||||
<string name="sensor_description_external_storage">Information about the total and available storage space externally</string>
|
<string name="sensor_description_external_storage">Information about the total and available storage space externally</string>
|
||||||
<string name="sensor_description_wifi_connection">Information about the currently connected WiFi network</string>
|
<string name="sensor_description_storage_sensor">Information about the total and available storage space internally and externally</string>
|
||||||
|
<string name="sensor_description_wifi_connection">The name of the network the device is currently connected to</string>
|
||||||
|
<string name="sensor_description_wifi_bssid">The mac address of the currently connected WiFi access point</string>
|
||||||
|
<string name="sensor_description_wifi_ip">The current IP address of the device on the network</string>
|
||||||
|
<string name="sensor_description_wifi_link_speed">The current link speed of the device to the connected network</string>
|
||||||
|
<string name="sensor_description_wifi_state">Whether or not WiFi is enabled on the device</string>
|
||||||
|
<string name="sensor_description_wifi_frequency">The frequency band of the connected network</string>
|
||||||
|
<string name="sensor_description_wifi_signal">The signal strength of the device to the WiFi network</string>
|
||||||
<string name="sensor_summary">Use this to manage what sensors are enabled/disabled.</string>
|
<string name="sensor_summary">Use this to manage what sensors are enabled/disabled.</string>
|
||||||
<string name="sensor_title">Manage Sensors</string>
|
<string name="sensor_title">Manage Sensors</string>
|
||||||
<string name="sensor">Sensor</string>
|
<string name="sensor">Sensor</string>
|
||||||
|
|
Loading…
Reference in a new issue