#!/usr/bin/env python import dbus dbus_objects = { "power": { "bus_name": "org.openbmc.control.Power", "object_name": "/org/openbmc/control/power0", "interface_name": "org.openbmc.control.Power", }, "occstatus0": { "bus_name": "org.openbmc.Sensors", "object_name": "/org/openbmc/sensors/host/cpu0/OccStatus", "interface_name": "org.openbmc.SensorValue", }, "occstatus1": { "bus_name": "org.openbmc.Sensors", "object_name": "/org/openbmc/sensors/host/cpu1/OccStatus", "interface_name": "org.openbmc.SensorValue", }, "bootprogress": { "bus_name": "org.openbmc.Sensors", "object_name": "/org/openbmc/sensors/host/BootProgress", "interface_name": "org.openbmc.SensorValue", }, "host": { "bus_name": "xyz.openbmc_project.State.Host", "object_name": "/xyz/openbmc_project/state/host0", "interface_name": "xyz.openbmc_project.State.Host", }, "settings": { "bus_name": "org.openbmc.settings.Host", "object_name": "/org/openbmc/settings/host0", "interface_name": "org.freedesktop.DBus.Properties", }, "system": { "bus_name": "org.openbmc.managers.System", "object_name": "/org/openbmc/managers/System", "interface_name": "org.freedesktop.DBus.Properties", }, "powersupplyredundancy": { "bus_name": "org.openbmc.Sensors", "object_name": "/org/openbmc/sensors/host/PowerSupplyRedundancy", "interface_name": "org.openbmc.SensorValue", }, "turboallowed": { "bus_name": "org.openbmc.Sensors", "object_name": "/org/openbmc/sensors/host/TurboAllowed", "interface_name": "org.openbmc.SensorValue", }, "powersupplyderating": { "bus_name": "org.openbmc.Sensors", "object_name": "/org/openbmc/sensors/host/PowerSupplyDerating", "interface_name": "org.openbmc.SensorValue", }, } def getInterface(bus, objs, key): obj = bus.get_object( objs[key]["bus_name"], objs[key]["object_name"], introspect=False ) return dbus.Interface(obj, objs[key]["interface_name"]) def getProperty(bus, objs, key, prop): obj = bus.get_object( objs[key]["bus_name"], objs[key]["object_name"], introspect=False ) intf = dbus.Interface(obj, dbus.PROPERTIES_IFACE) return intf.Get(objs[key]["interface_name"], prop) def setProperty(bus, objs, key, prop, prop_value): obj = bus.get_object(objs[key]["bus_name"], objs[key]["object_name"]) intf = dbus.Interface(obj, dbus.PROPERTIES_IFACE) return intf.Set(objs[key]["interface_name"], prop, prop_value) bus = dbus.SystemBus() pgood = getProperty(bus, dbus_objects, "power", "pgood") if pgood == 1: intf = getInterface(bus, dbus_objects, "bootprogress") intf.setValue("FW Progress, Starting OS") intf = getInterface(bus, dbus_objects, "occstatus0") intf.setValue("Enabled") intf = getInterface(bus, dbus_objects, "occstatus1") intf.setValue("Enabled") else: # Power is off, so check power policy settings_intf = getInterface(bus, dbus_objects, "settings") system_intf = getInterface(bus, dbus_objects, "system") system_last_state = system_intf.Get( "org.openbmc.managers.System", "system_last_state" ) power_policy = settings_intf.Get( "org.openbmc.settings.Host", "power_policy" ) print( "Last System State:" + system_last_state + "Power Policy:" + power_policy ) if power_policy == "ALWAYS_POWER_ON" or ( power_policy == "RESTORE_LAST_STATE" and system_last_state == "HOST_POWERED_ON" ): setProperty( bus, dbus_objects, "host", "RequestedHostTransition", "xyz.openbmc_project.State.Host.Transition.On", ) # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4