homebridge-rpi
Version:
Homebridge plugin for Raspberry Pi
103 lines (98 loc) • 3.26 kB
JavaScript
// homebridge-rpi/lib/RpiService.js
// Copyright © 2019-2026 Erik Baauw. All rights reserved.
//
// Homebridge plugin for Raspberry Pi.
import { ServiceDelegate } from 'homebridge-lib/ServiceDelegate'
class RpiService extends ServiceDelegate {
constructor (rpiAccessory, params = {}) {
params.name = rpiAccessory.name
params.Service = params.hidden
? rpiAccessory.Services.my.Resource
: rpiAccessory.Services.hap.TemperatureSensor
super(rpiAccessory, params)
if (!params.hidden) {
this.addCharacteristicDelegate({
key: 'temperature',
Characteristic: this.Characteristics.hap.CurrentTemperature,
unit: '°C'
})
this.addCharacteristicDelegate({
key: 'temperatureUnit',
Characteristic: this.Characteristics.hap.TemperatureDisplayUnits,
value: this.Characteristics.hap.TemperatureDisplayUnits.CELSIUS
})
this.addCharacteristicDelegate({
key: 'frequency',
Characteristic: this.Characteristics.my.CpuFrequency,
unit: 'MHz'
})
this.addCharacteristicDelegate({
key: 'throttled',
Characteristic: this.Characteristics.my.CpuThrottled
})
this.addCharacteristicDelegate({
key: 'cpuVoltage',
Characteristic: this.Characteristics.my.CpuVoltage,
unit: 'mV'
})
this.addCharacteristicDelegate({
key: 'underVoltage',
Characteristic: this.Characteristics.my.CpuUnderVoltage
})
this.addCharacteristicDelegate({
key: 'swapUsage',
Characteristic: this.Characteristics.my.SwapUsage,
unit: '%'
})
this.addCharacteristicDelegate({
key: 'load',
Characteristic: this.Characteristics.my.CpuLoad
})
this.addCharacteristicDelegate({
key: 'lastBoot',
Characteristic: this.Characteristics.my.LastBoot
})
}
this.addCharacteristicDelegate({
key: 'lastupdated',
Characteristic: this.Characteristics.my.LastUpdated,
silent: true
})
this.addCharacteristicDelegate({
key: 'heartrate',
Characteristic: this.Characteristics.my.Heartrate,
props: {
minValue: 1,
maxValue: 60,
minStep: 1
},
value: 15
})
this.addCharacteristicDelegate({
key: 'statusFault',
Characteristic: this.Characteristics.hap.StatusFault,
silent: true
})
this.addCharacteristicDelegate({
key: 'logLevel',
Characteristic: this.Characteristics.my.LogLevel,
value: this.accessoryDelegate.logLevel
})
}
checkState (state) {
if (state == null) {
this.values.lastupdated = String(new Date()).slice(0, 24)
return
}
this.values.temperature = state.temp
this.values.frequency = Math.round(state.freq / 1000000)
this.values.cpuVoltage = Math.round(state.volt * 1000)
this.values.throttled = (state.throttled & 0x000e) !== 0
this.values.underVoltage = (state.throttled & 0x0001) !== 0
this.values.load = state.load
this.values.swapUsage = state.swap
this.values.lastupdated = String(new Date(state.date)).slice(0, 24)
this.values.lastBoot = String(new Date(state.boot)).slice(0, 24)
}
}
export { RpiService }