diff --git a/presence/gpio.hpp b/presence/gpio.hpp
index ae4bc7f..317e264 100644
--- a/presence/gpio.hpp
+++ b/presence/gpio.hpp
@@ -112,6 +112,64 @@
     std::optional<sdeventplus::source::IO> source;
 };
 
+/**
+ * @class NullGpio
+ * @brief a phony presence sensor implementation that always
+ *        reports not-present. Used to keep fan-presence service
+ *        running when hardware is offline.
+ *
+ */
+class NullGpio : public PresenceSensor
+{
+  public:
+    NullGpio() = default;
+
+    /**
+     * @brief start
+     *
+     * Required to conform to interface
+     *
+     * @return false [dummy implementation]
+     */
+    bool start() override
+    {
+        return false;
+    }
+
+    /**
+     * @brief stop
+     *
+     * Required to conform to interface
+     */
+    void stop() override
+    {}
+
+    /**
+     * @brief Check the sensor.
+     *
+     * @return false [dummy implementation]
+     */
+    bool present() override
+    {
+        return false;
+    }
+
+    /**
+     * @brief Called when this presence sensor doesn't agree with other ones.
+     *
+     * @param[in] fanInventoryPath - The fan inventory D-Bus object path.
+     */
+    void logConflict(const std::string& fanInventoryPath) const override
+    {}
+
+  private:
+    /**
+     * @brief Required to conform to interface
+     *
+     */
+    virtual RedundancyPolicy& getPolicy() = 0;
+};
+
 } // namespace presence
 } // namespace fan
 } // namespace phosphor
diff --git a/presence/json_parser.cpp b/presence/json_parser.cpp
index 4c4a55c..bfaedaf 100644
--- a/presence/json_parser.cpp
+++ b/presence/json_parser.cpp
@@ -25,6 +25,8 @@
 #include <nlohmann/json.hpp>
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
+#include <xyz/openbmc_project/Logging/Create/server.hpp>
+#include <xyz/openbmc_project/Logging/Entry/server.hpp>
 
 #include <filesystem>
 #include <fstream>
@@ -47,6 +49,9 @@
 const std::map<std::string, rpolicyHandler> JsonConfig::_rpolicies = {
     {"anyof", rpolicy::getAnyof}, {"fallback", rpolicy::getFallback}};
 
+const auto loggingPath = "/xyz/openbmc_project/logging";
+const auto loggingCreateIface = "xyz.openbmc_project.Logging.Create";
+
 JsonConfig::JsonConfig(sdbusplus::bus::bus& bus) : _bus(bus)
 {}
 
@@ -266,8 +271,47 @@
     auto devpath = method["devpath"].get<std::string>();
     auto key = method["key"].get<unsigned int>();
 
-    return std::make_unique<PolicyAccess<Gpio, JsonConfig>>(fanIndex, physpath,
-                                                            devpath, key);
+    try
+    {
+        return std::make_unique<PolicyAccess<Gpio, JsonConfig>>(
+            fanIndex, physpath, devpath, key);
+    }
+    catch (const sdbusplus::exception_t& e)
+    {
+        namespace sdlogging = sdbusplus::xyz::openbmc_project::Logging::server;
+
+        log<level::ERR>(
+            fmt::format(
+                "Error creating Gpio device bridge, hardware not detected: {}",
+                e.what())
+                .c_str());
+
+        auto severity =
+            sdlogging::convertForMessage(sdlogging::Entry::Level::Error);
+
+        std::map<std::string, std::string> additionalData{
+            {"PHYSPATH", physpath},
+            {"DEVPATH", devpath},
+            {"FANINDEX", std::to_string(fanIndex)}};
+
+        try
+        {
+
+            util::SDBusPlus::lookupAndCallMethod(
+                loggingPath, loggingCreateIface, "Create",
+                "xyz.openbmc_project.Fan.Presence.Error.GPIODeviceUnavailable",
+                severity, additionalData);
+        }
+        catch (const util::DBusError& e)
+        {
+            log<level::ERR>(fmt::format("Call to create an error log for "
+                                        "presence-sensor failure failed: {}",
+                                        e.what())
+                                .c_str());
+        }
+
+        return std::make_unique<PolicyAccess<NullGpio, JsonConfig>>();
+    }
 }
 
 } // namespace method
