MQTT Connection fails: code 's'

Using the PubSubClient library to connect to my MQTT server via ESP8266 based NodeMCU v2.0

Used to work fine but has now suddenly stopped working on all of my NodeMCU's, and it no longer connects to the MQTT server after connecting to WiFi. I get a repeating error of:#

[MQTT] Connecting... s
[MQTT] Connecting... s
[MQTT] Connecting... s
[MQTT] Connecting... s
[MQTT] Connecting... s
[MQTT] Connecting... s
[MQTT] Connecting... s
[MQTT] Connecting... s

Here is my code:

#include <PubSubClient.h>
#include <ESP8266WiFi.h>

#define down 4
#define up 5

const char* mqtt_server = "192.168.1.77";
const char* password = "removed";
const char* ssid = "removed";
const int delayDown = 18500;
const int delayUp = 22500;
int blindsWantedPosition;
int blindsPosition = 0;
char digits[2];
int moveTime;
int digit1;
int digit2;
int steps;

WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("[WiFi] Connecting to ");
  Serial.print(ssid);
  Serial.print(": (");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print("#");
  }
  randomSeed(micros());
  Serial.println(")");
  Serial.println("[WiFi] Connected, IP address: " + WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("[MQTT] Received message from ");
  Serial.print(topic);
  Serial.print(": ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();

  if ((char)payload[0] == 'R') {
    if (blindsPosition == 0) {
      digitalWrite(up, LOW);
      delay(500);
      digitalWrite(up, HIGH);
      blindsPosition = 0;
    }
  }
  
  if (length == 1) {
    digits[0] = payload[0];
    blindsWantedPosition = atoi(digits);
    blindsWantedPosition = blindsWantedPosition / 10;
  } else if (length == 2) {
    digits[0] = payload[0];
    digits[1] = payload[1];
    blindsWantedPosition = atoi(digits);
  } else if (length == 3) {
    blindsWantedPosition = 100;
  }
  
  if (blindsWantedPosition > blindsPosition) {
    steps = blindsWantedPosition - blindsPosition;
    moveTime = (delayUp / 100) * steps;
    Serial.print("[Blinds] Moving UP from ");
    Serial.print(blindsPosition);
    Serial.print(" to ");
    Serial.print(blindsWantedPosition);
    Serial.print(" (");
    Serial.print(steps);
    Serial.print(" steps)");
    Serial.print(", lasting ");
    Serial.print(moveTime);
    Serial.println(" seconds");
    digitalWrite(up, LOW);
    delay(moveTime);
    digitalWrite(up, HIGH);
    blindsPosition = blindsWantedPosition;
    moveTime = 0;
  } else if (blindsWantedPosition < blindsPosition) {
    steps = blindsPosition - blindsWantedPosition;
    moveTime = (delayDown / 100) * steps;
    Serial.print("[Blinds] Moving DOWN from ");
    Serial.print(blindsPosition);
    Serial.print(" to ");
    Serial.print(blindsWantedPosition);
    Serial.print(" (");
    Serial.print(steps);
    Serial.print(" steps)");
    Serial.print(", lasting ");
    Serial.print(moveTime);
    Serial.println(" seconds");
    digitalWrite(down, LOW);
    delay(moveTime);
    digitalWrite(down, HIGH);
    blindsPosition = blindsWantedPosition;
    moveTime = 0;
  } else if (blindsPosition == blindsWantedPosition) {
    Serial.println("[Blinds] Already at this position");
  }
  
  /*
  if ((char)payload[0] == '1') {
    if (blindsPosition == 0) {
      Serial.println("[Blinds] Position set to UP");
      digitalWrite(up, LOW);
      delay(23000);
      digitalWrite(up, HIGH);
      blindsPosition = 1;
    } else {
      Serial.println("[Blinds] Already set to UP");
    }
  } else if ((char)payload[0] == '0') {
    if (blindsPosition == 1) {
      Serial.println("[Blinds] Position set to DOWN");
      digitalWrite(down, LOW);
      delay(18500);
      digitalWrite(down, HIGH);
      blindsPosition = 0;
    } else {
      Serial.println("[Blinds] Already set to DOWN");
    }
  } else {
    Serial.println("[MQTT] Received unknown command");
  }
  */
  
  digitalWrite(down, HIGH);
  digitalWrite(up , HIGH);
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("[MQTT] Connecting... ");
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    if (client.connect(clientId.c_str())) {
      Serial.println("Connected!");
      client.subscribe("bedroom/blinds");
    } else {
      Serial.println("Failed code " + client.state());
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  pinMode(up, OUTPUT);
  pinMode(down, OUTPUT);
  digitalWrite(up, HIGH);
  digitalWrite(down, HIGH);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  delay(100);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  delay(10);
}

As shown by the code, if the MQTT connection fails it should give an error along the lines of "[MQTT] Connecting... Failed code 2"

Anyone know why this is happening?
using latest version of the IDE and library.

Many thanks in advance.

Sketch.ino (4.43 KB)