использование 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

Другие вопросы по тегам