void checkPowerLEDInput() {
  in_pwrled_currState = digitalRead(PIN_IN_PWRLED);
  if (in_pwrled_lastState == !IN_PWRLED_ONSTATE && in_pwrled_currState == IN_PWRLED_ONSTATE) {
    // PC power LED changed to ON
    in_pwrled_lastState = in_pwrled_currState;
    in_pwrled_millis = millis();
  }
  else if (in_pwrled_lastState == IN_PWRLED_ONSTATE && in_pwrled_currState == !IN_PWRLED_ONSTATE) {
    // PC power LED changed to OFF
    in_pwrled_lastState = in_pwrled_currState;
    in_pwrled_millis = millis();
  }
  else if (in_pwrled_millis == 0) { // get initial state after boot
    in_pwrled_lastState = in_pwrled_currState;
    in_pwrled_millis = millis();
  }

  if (in_pwrled_millis > 0 && (millis() - in_pwrled_millis) > 2000) {
    // last Power LED status change was more than 2s ago
    if (in_pwrled_currState == IN_PWRLED_ONSTATE) { //LED is ON
      if (PCstate != 1) {
        PCstate = 1;
        Serial.println("PC state changed to ON");
        publishPCPowerState(false);
        PC_standby_pending_millis = 0;
      }
    }
    else if (in_pwrled_currState == !IN_PWRLED_ONSTATE) { //LED is OFF
      if (PCstate != 0) {
        PCstate = 0;
        Serial.println("PC state changed to OFF");
        publishPCPowerState(false);
        PC_standby_pending_millis = 0;
      }
    }
  }
  else if ( PCstate != 2 && in_pwrled_millis > 0 && (millis() - in_pwrled_millis) > 100 ) {
    // Power LED toggles permanently -> it blinks because PC is in standby
    if ( PCstate != 2 && PC_standby_pending_millis == 0 ) {
      PC_standby_pending_millis = millis();
      //Serial.println("PC state - pending status");
    }
    else if ( PC_standby_pending_millis > 0 && (millis() - PC_standby_pending_millis) > 2500 ) {
      PCstate = 2;
      Serial.println("PC state changed to SLEEP");
      publishPCPowerState(false);
    }
  }
}

void publishPCPowerState(boolean force) {
  if(!mqtt_outRetain || PCstate != PCstate_lastPublished || force) {
    PCstate_lastPublished = PCstate;
    if(PCstate == 0) {
      sprintf(tmp_topic_pub, "%s/%s", mqtt_topic_out, "PC-PowerStateText");
      mqttclient.publish(tmp_topic_pub, "OFF", mqtt_outRetain);
      sprintf(tmp_topic_pub, "%s/%s", mqtt_topic_out, "PC-SleepState");
      mqttclient.publish(tmp_topic_pub, "OFF", mqtt_outRetain);
      sprintf(tmp_topic_pub, "%s/%s", mqtt_topic_out, "PC-PowerOnState");
      mqttclient.publish(tmp_topic_pub, "OFF", mqtt_outRetain);
    }
    else if(PCstate == 1) {
      sprintf(tmp_topic_pub, "%s/%s", mqtt_topic_out, "PC-PowerStateText");
      mqttclient.publish(tmp_topic_pub, "ON", mqtt_outRetain);
      sprintf(tmp_topic_pub, "%s/%s", mqtt_topic_out, "PC-SleepState");
      mqttclient.publish(tmp_topic_pub, "OFF", mqtt_outRetain);
      sprintf(tmp_topic_pub, "%s/%s", mqtt_topic_out, "PC-PowerOnState");
      mqttclient.publish(tmp_topic_pub, "ON", mqtt_outRetain);
    }
    else if(PCstate == 2) {
      sprintf(tmp_topic_pub, "%s/%s", mqtt_topic_out, "PC-PowerStateText");
      mqttclient.publish(tmp_topic_pub, "SLEEP", mqtt_outRetain);
      sprintf(tmp_topic_pub, "%s/%s", mqtt_topic_out, "PC-SleepState");
      mqttclient.publish(tmp_topic_pub, "ON", mqtt_outRetain);
      sprintf(tmp_topic_pub, "%s/%s", mqtt_topic_out, "PC-PowerOnState");
      mqttclient.publish(tmp_topic_pub, "OFF", mqtt_outRetain);
    }
  }
}
