использование busctl для чтения значений датчиков в openbmc
Я пытаюсь изучить значения датчиков и сигналы в openbmc. Я вижу доступные названия автобусов:
# busctl |grep Sensor|sed -e 's| .*||'
xyz.openbmc_project.ADCSensor
xyz.openbmc_project.CPUSensor
xyz.openbmc_project.ExitAirTempSensor
xyz.openbmc_project.FanSensor
xyz.openbmc_project.HwmonTempSensor
xyz.openbmc_project.IntrusionSensor
xyz.openbmc_project.IpmbSensor
xyz.openbmc_project.MCUTempSensor
xyz.openbmc_project.PSUSensor
Но я не могу достать из них никаких предметов. Например:
# busctl tree xyz.openbmc_project.HwmonTempSensor
Only root object discovered.
Поскольку я не получаю объекты, как выполнить "самоанализ busctl"? Извините, если это очевидно. Новое в dbus...
2 ответа
Процесс заключается в том, чтобы сначала найти датчик. Для этого нужно знать название датчика.
root@pavilion-evb:~# busctl tree | grep sensor
даст вам список.
Затем попросите ObjectMapper сообщить, какой Hwmon отслеживает этот датчик.
root@pavilion-evb:~# dbus-send --system --print-reply --dest=xyz.openbmc_project.ObjectMapper /xyz/openbmc_project/object_mapper xyz.openbmc_project.ObjectMapper.GetObject string:"\<**SENSOR NAME**>" array:string:
пример:
root@pavilion-evb:~# dbus-send --system --print-reply --dest=xyz.openbmc_project.ObjectMapper /xyz/openbmc_project/object_mapper xyz.openbmc_project.ObjectMapper.GetObject string:"/xyz/openbmc_project/sensors/voltage/psu4_vin" array:string:
возвращается
время возврата метода =1663175959.916697 отправитель =:1.12 -> пункт назначения =:1.24984 серийный =220988 answer_serial= 2 массив [запись в словаре (строка "xyz.openbmc_project.Hwmon-3678593568.Hwmon1" массив [строка "org.freedesktop.DBus.Introspectable" строка "org.freedesktop.DBus.Peer" строка "org.freedesktop.DBus.Properties" строка "xyz.openbmc_project.Sensor.Threshold.Critical" строка "xyz.openbmc_project.Sensor.Threshold.Warning" строка "xyz.openbmc_project.Sensor.Value" строка "xyz.openbmc_project.State.Decorator.OperationalStatus" ]) ]
Ключевая информация здесь:xyz.openbmc_project.Hwmon-3678593568.Hwmon1.
Интроспекция использования busctl:
root@pavilion-evb:~# busctl introspect xyz.openbmc_project.Hwmon-3678593568.Hwmon1 /xyz/openbmc_project/sensors/voltage/psu4_vin xyz.openbmc_project.Sensor.Value
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.MaxValue property d inf emits-change writable
.MinValue property d -inf emits-change writable
.Unit property s "xyz.openbmc_project.Sensor.Value.Unit.\u2026 emits-change writable
.Value property d 208.25 emits-change writable
Или просто значение можно получить:
root@pavilion-evb:~# busctl get-property xyz.openbmc_project.Hwmon-3678593568.Hwmon1 /xyz/openbmc_project/sensors/voltage/psu4_vin xyz.openbmc_project.Sensor.Value Value
d 208.25
Я не являюсь специалистом ни по openbmc, ни по DBus, но я скажу вам все, что могу.
Когда я не знаком с платформой bmc, я бегу
busctl tree | less
затем выполните поиск в выводе для
xyz.openbmc_project.Hwmon
или имя датчика, которое я хочу. Пример:
Service xyz.openbmc_project.Hwmon-3372718265.Hwmon1:
└─/xyz
└─/xyz/openbmc_project
└─/xyz/openbmc_project/sensors
└─/xyz/openbmc_project/sensors/temperature
└─/xyz/openbmc_project/sensors/temperature/i2cool_0
Затем я могу выполнить команду самоанализа dbus.
busctl introspect xyz.openbmc_project.Hwmon-3372718265.Hwmon1 /xyz/openbmc_project/sensors/temperature/i2cool_0 | less
И это вызывает следующие разделы
xyz.openbmc_project.Sensor.Value
.MaxValue
.MinValue
.Scale
.Unit
.Value
В сообществе есть много людей, которые более тесно работают с интерфейсом датчиков dbus. Но я думал, что поделюсь своим методом. Это документ, которому я следую, когда у меня возникает вопрос о чтении датчика dbus. https://github.com/openbmc/docs/blob/master/architecture/sensor-architecture.md