commonMain.hassemble.extending.entities.sensors.Sensor.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hassemble-jvm Show documentation
Show all versions of hassemble-jvm Show documentation
Interact with your Home Assistant server using Kotlin.
The newest version!
package hassemble.extending.entities.sensors
import hassemble.HomeAssistantApiClient
import hassemble.entities.Attributes
import hassemble.entities.State
import hassemble.entities.devices.Sensor
import hassemble.extending.entities.Sensor
import hassemble.extending.entities.SwitchableState
import hassemble.extending.entities.SwitchableValue
import hassemble.observability.Switchable
import hassemble.values.EntityId
import hassemble.values.ObjectId
import hassemble.values.domain
@Suppress("FunctionName")
internal inline fun , reified A : Attributes> HomeAssistantApiClient.Sensor(objectId: ObjectId): Sensor =
Sensor(EntityId.fromPair("sensor".domain to objectId))
fun , A : Attributes, SV> Sensor.measurementValueChangedFrom(values: Pair) =
history[1].state.value == values.first && measurement.value == values.second
fun , A : Attributes, SV> Sensor.measurementValueChangedFrom(values: Triple) =
history[2].state.value == values.first && history[1].state.value == values.second && measurement.value == values.third
val Sensor.isOn
get() = measurement.value == SwitchableValue.ON
val Sensor.isOff
get() = measurement.value == SwitchableValue.OFF
inline fun , A : Attributes, SV> Sensor.onMeasurementValueChangedFrom(
values: Pair,
crossinline f: Sensor.(Switchable) -> Unit
) = attachObserver {
if (measurementValueChangedFrom(values))
f(this, it)
}
inline fun , A : Attributes, SV> Sensor.onMeasurementValueChangedFrom(
values: Triple,
crossinline f: Sensor.(Switchable) -> Unit
) = attachObserver {
if (measurementValueChangedFrom(values))
f(this, it)
}
inline fun Sensor.onTurnedOn(
crossinline f: Sensor.(Switchable) -> Unit
) = onMeasurementValueChangedFrom(SwitchableValue.OFF to SwitchableValue.ON, f)
inline fun Sensor.onTurnedOff(
crossinline f: Sensor.(Switchable) -> Unit
) = onMeasurementValueChangedFrom(SwitchableValue.ON to SwitchableValue.OFF, f)