I have gone brain dead...I have a nod-red flow and an arduino iso that I DID NOT WRITE but am trying to add a simple relay to them to switch cameras output to my system. The bad thing is I did it many weeks ago and it all worked...However my SD card crashed on the PI3b+ and I had not backed it up.(yes,my bad) I did try to recover but after a week I gave up and rebuilt all.So I now have a working PI and all new Flow and arduino code But I can't get the relay to work now...I have loaded the Flow and code below (I Hope) for someone to take a look and give me some pointers. I noted in the code lines I added. all work but the relay.Thank you
Ron.
ARDUINO CODE
 /*
 * Node-RED + MQTT + ESP8266 + PTZ servo kit (Pan-Tilt)
 * How to move pan-tilt system with Node-RED - MQTT and ESP8266
 * - Use Node-RED UI Dashboard to move Pan and Tilt servos
 * - Node-RED sequencer : scan Pan and tilt 
 * - Node-RED reset position to 90°/90°
 * 
 * Comment déplacer le système pan-tilt avec Node-RED - MQTT et ESP8266
 * - Utilisez le tableau de bord Node-RED UI pour dĂ©placer les servos Pan et Tilt
 * - SĂ©quenceur Node-RED: balayage panoramique (Pan) et inclinaison (Tilt)
 * - Reset des positions depuis Node-RED (90°/90°)
 * - Tutoriel complet
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * Licence : MIT
 * Copyright (C) 2017 : www.projetsdiy.fr and www.diyprojects.io
 */
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Servo.h> 
Servo pan; 
Servo tilt;
// Paramètre WiFi, MQTT - WiFi, MQTT parameters
const char* ssid = "my ssid";                // WiFi SSID
const char* password = "my password";        // WiFi Password
const char* mqtt_server = "192.168.0.5";  // IP Broker MQTT
const char* topic_pan = "servo/pan";          // Topic MQTT pour servo Pan - Topic MQTT for Pan servor
const char* topic_tilt = "servo/tilt";        // Topic MQTT pour servo Tilt - Topic MQTT for Tilt servor
//ron added two lines
const char* topic_cam1 =" cam1";
const char* topic_cam2 = "cam2";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
void setup() {
  Serial.begin(115200);
  //ron added 1 line
  pinMode(D1,OUTPUT);
  pan.attach(D2);
  tilt.attach(D3);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}
void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
 String string;
 // Affiche le topic entrant - display incoming Topic
 Serial.print("Message arrived [");
 Serial.print(topic);
 Serial.print("] ");
 // décode le message - decode payload message
 for (int i = 0; i < length; i++) {
 string+=((char)payload[i]); 
 }
 // Affiche le message entrant - display incoming message
 Serial.print(string);
 Serial.print(" toInt ");
 // Conversion de la position en entier - convert position as an Integer
 int pos = string.toInt(); 
 Serial.println(pos);
 // Détermine quel servo doit être bougé - Determines which servo should be moved
 if ( strcmp(topic, topic_pan) == 0 ) {
 Serial.print("Move Pan to ");
 Serial.println(pos);
 pan.write(pos); 
 }
 if ( strcmp(topic, topic_tilt) == 0 ) {
 Serial.print("Move Tilt to ");
 Serial.println(pos);
 tilt.write(pos); 
 }
 //ron added 4 lines
 if ((char)payload[0] == '1'){
  digitalWrite(D1, HIGH);
 }
 if ((char)payload[0] == '2'){
 digitalWrite(D1, LOW);
 
 delay(15); 
}
void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("ESP8266Client")) {
      Serial.println("connected");
      client.subscribe(topic_pan); 
      client.subscribe(topic_tilt);
      //ron added 2 lines
      client.subscribe(topic_cam1);
      client.subscribe(topic_cam2); 
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}
void loop() {   
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  delay(100);
}
NODE-RED FLOW
[
    {
        "id": "4fc50ee3e29bd9b2",
        "type": "tab",
        "label": "P+T",
        "disabled": false,
        "info": ""
    },
    {
        "id": "34545562.076d7a",
        "type": "mqtt out",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "topic": "servo/pan",
        "qos": "1",
        "retain": "false",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "ceed5755.206c58",
        "x": 640,
        "y": 180,
        "wires": []
    },
    {
        "id": "f9a85217.59893",
        "type": "ui_slider",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "label": "Pan",
        "group": "9c59c1e2.8235f",
        "order": 4,
        "width": 6,
        "height": 1,
        "passthru": true,
        "topic": "",
        "min": 0,
        "max": "180",
        "step": 1,
        "x": 470,
        "y": 200,
        "wires": [
            [
                "34545562.076d7a",
                "d604bc1e.67691"
            ]
        ]
    },
    {
        "id": "d604bc1e.67691",
        "type": "ui_gauge",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "group": "9c59c1e2.8235f",
        "order": 6,
        "width": 6,
        "height": 3,
        "gtype": "donut",
        "title": "Pan servo position ",
        "label": "position ",
        "format": "{{value}}",
        "min": 0,
        "max": "180",
        "colors": [
            "#00b500",
            "#e6e600",
            "#ca3838"
        ],
        "x": 640,
        "y": 240,
        "wires": []
    },
    {
        "id": "3a393dcd.afa272",
        "type": "comment",
        "z": "4fc50ee3e29bd9b2",
        "name": "ESP8266 MQTT Pan Tilt PTZ Control Servo",
        "info": "",
        "x": 390,
        "y": 900,
        "wires": []
    },
    {
        "id": "4316c9.3c84a938",
        "type": "mqtt out",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "topic": "servo/tilt",
        "qos": "1",
        "retain": "false",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "ceed5755.206c58",
        "x": 640,
        "y": 400,
        "wires": []
    },
    {
        "id": "9087f6a0.b7e938",
        "type": "ui_slider",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "label": "Tilt",
        "group": "9c59c1e2.8235f",
        "order": 5,
        "width": 6,
        "height": 1,
        "passthru": true,
        "topic": "",
        "min": 0,
        "max": "180",
        "step": 1,
        "x": 370,
        "y": 440,
        "wires": [
            [
                "4316c9.3c84a938",
                "584bfb6e.86a1d4"
            ]
        ]
    },
    {
        "id": "584bfb6e.86a1d4",
        "type": "ui_gauge",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "group": "9c59c1e2.8235f",
        "order": 7,
        "width": 6,
        "height": 3,
        "gtype": "donut",
        "title": "Tilt servo position ",
        "label": "position ",
        "format": "{{value}}",
        "min": 0,
        "max": "180",
        "colors": [
            "#00b500",
            "#e6e600",
            "#ca3838"
        ],
        "x": 640,
        "y": 460,
        "wires": []
    },
    {
        "id": "6a8f2c2b.64bdb4",
        "type": "ui_button",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "group": "9c59c1e2.8235f",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "Reset",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "fa-undo",
        "payload": "",
        "payloadType": "str",
        "topic": "",
        "topicType": "str",
        "x": 90,
        "y": 500,
        "wires": [
            [
                "743cd12b.d31b5"
            ]
        ]
    },
    {
        "id": "798e642.411779c",
        "type": "mqtt out",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "topic": "servo/tilt",
        "qos": "1",
        "retain": "false",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "ceed5755.206c58",
        "x": 480,
        "y": 520,
        "wires": []
    },
    {
        "id": "743cd12b.d31b5",
        "type": "function",
        "z": "4fc50ee3e29bd9b2",
        "name": "Pan (90°) - Tilt(90°)",
        "func": "msg.payload = 90;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 270,
        "y": 540,
        "wires": [
            [
                "d604bc1e.67691",
                "4336088.add08f8",
                "798e642.411779c",
                "d2553ca9.80fdd",
                "584bfb6e.86a1d4"
            ]
        ]
    },
    {
        "id": "d2553ca9.80fdd",
        "type": "mqtt out",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "topic": "servo/pan",
        "qos": "1",
        "retain": "false",
        "broker": "ceed5755.206c58",
        "x": 480,
        "y": 580,
        "wires": []
    },
    {
        "id": "3ba0147.632dcec",
        "type": "link in",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "links": [
            "4336088.add08f8",
            "56f0b2a7.b1c81c"
        ],
        "x": 375,
        "y": 200,
        "wires": [
            [
                "f9a85217.59893"
            ]
        ]
    },
    {
        "id": "4336088.add08f8",
        "type": "link out",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "links": [
            "3ba0147.632dcec",
            "8117306f.30c94"
        ],
        "x": 435,
        "y": 640,
        "wires": []
    },
    {
        "id": "8117306f.30c94",
        "type": "link in",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "links": [
            "4336088.add08f8",
            "56f0b2a7.b1c81c"
        ],
        "x": 275,
        "y": 440,
        "wires": [
            [
                "9087f6a0.b7e938"
            ]
        ]
    },
    {
        "id": "89f37cd6.f1a11",
        "type": "comment",
        "z": "4fc50ee3e29bd9b2",
        "name": "www.projetsdiy.fr | www.diyprojects.io",
        "info": "# Version française \nwww.projetsdiy.fr\n\n# English version\nwww.diyprojects.io",
        "x": 410,
        "y": 940,
        "wires": []
    },
    {
        "id": "d4ee4d5e.0ffcd",
        "type": "ui_button",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "group": "9c59c1e2.8235f",
        "order": 2,
        "width": 6,
        "height": 1,
        "label": "Scan Pan",
        "color": "",
        "icon": "",
        "payload": "-10",
        "payloadType": "num",
        "topic": "",
        "x": 140,
        "y": 120,
        "wires": [
            [
                "68869228.30d7fc"
            ]
        ]
    },
    {
        "id": "68869228.30d7fc",
        "type": "function",
        "z": "4fc50ee3e29bd9b2",
        "name": "+10°",
        "func": "var pos = msg.payload;\npos += 10;\nmsg.payload = pos;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 330,
        "y": 120,
        "wires": [
            [
                "18dca8a0.64c977",
                "f9a85217.59893"
            ]
        ]
    },
    {
        "id": "18dca8a0.64c977",
        "type": "delay",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "pauseType": "delay",
        "timeout": "500",
        "timeoutUnits": "milliseconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 500,
        "y": 120,
        "wires": [
            [
                "e5657f97.89ffd"
            ]
        ]
    },
    {
        "id": "fe1eebc1.8d83c8",
        "type": "ui_button",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "group": "9c59c1e2.8235f",
        "order": 3,
        "width": 6,
        "height": 1,
        "passthru": false,
        "label": "Scan Tilt",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "-10",
        "payloadType": "num",
        "topic": "",
        "topicType": "str",
        "x": 80,
        "y": 380,
        "wires": [
            [
                "593953a.80dfbac"
            ]
        ]
    },
    {
        "id": "593953a.80dfbac",
        "type": "function",
        "z": "4fc50ee3e29bd9b2",
        "name": "+10°",
        "func": "var pos = msg.payload;\npos += 10;\nmsg.payload = pos;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 230,
        "y": 360,
        "wires": [
            [
                "4cfcf34c.3c7d3c",
                "9087f6a0.b7e938"
            ]
        ]
    },
    {
        "id": "4cfcf34c.3c7d3c",
        "type": "delay",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "pauseType": "delay",
        "timeout": "500",
        "timeoutUnits": "milliseconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 380,
        "y": 360,
        "wires": [
            [
                "549400d6.d1279"
            ]
        ]
    },
    {
        "id": "e5657f97.89ffd",
        "type": "repeat",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "repetitions": "18",
        "elseOutput": false,
        "outputs": 1,
        "x": 420,
        "y": 40,
        "wires": [
            [
                "68869228.30d7fc"
            ]
        ]
    },
    {
        "id": "549400d6.d1279",
        "type": "repeat",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "repetitions": "18",
        "elseOutput": false,
        "outputs": 1,
        "x": 320,
        "y": 280,
        "wires": [
            [
                "593953a.80dfbac"
            ]
        ]
    },
    {
        "id": "80a405ccc8bb97c4",
        "type": "inject",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "cam2",
        "payload": "2",
        "payloadType": "str",
        "x": 110,
        "y": 760,
        "wires": [
            [
                "54cc49f066be8176",
                "df0ebc28565af023"
            ]
        ]
    },
    {
        "id": "54cc49f066be8176",
        "type": "debug",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 690,
        "y": 700,
        "wires": []
    },
    {
        "id": "4b58207916825454",
        "type": "inject",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "cam1",
        "payload": "1",
        "payloadType": "str",
        "x": 110,
        "y": 640,
        "wires": [
            [
                "54cc49f066be8176",
                "79246361e75a4fa4"
            ]
        ]
    },
    {
        "id": "1cdc5fc854a97f2b",
        "type": "debug",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 710,
        "y": 540,
        "wires": []
    },
    {
        "id": "79246361e75a4fa4",
        "type": "mqtt out",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "topic": "cam1",
        "qos": "1",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "ceed5755.206c58",
        "x": 680,
        "y": 760,
        "wires": []
    },
    {
        "id": "df0ebc28565af023",
        "type": "mqtt out",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "topic": "cam2",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "ceed5755.206c58",
        "x": 680,
        "y": 820,
        "wires": []
    },
    {
        "id": "708529be06d716bb",
        "type": "ui_button",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "group": "9c59c1e2.8235f",
        "order": 7,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "cam1",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "1",
        "payloadType": "str",
        "topic": "cam1",
        "topicType": "msg",
        "x": 100,
        "y": 700,
        "wires": [
            [
                "54cc49f066be8176",
                "79246361e75a4fa4"
            ]
        ]
    },
    {
        "id": "8ee944654fdce99e",
        "type": "ui_button",
        "z": "4fc50ee3e29bd9b2",
        "name": "",
        "group": "9c59c1e2.8235f",
        "order": 8,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "cam2",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "2",
        "payloadType": "str",
        "topic": "cam2",
        "topicType": "msg",
        "x": 100,
        "y": 820,
        "wires": [
            [
                "54cc49f066be8176",
                "df0ebc28565af023"
            ]
        ]
    },
    {
        "id": "ceed5755.206c58",
        "type": "mqtt-broker",
        "broker": "localhost",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": true,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "9c59c1e2.8235f",
        "type": "ui_group",
        "name": "PTZ Servo Control",
        "tab": "84e11c13.a96e9",
        "order": 2,
        "disp": true,
        "width": "12",
        "collapse": false
    },
    {
        "id": "84e11c13.a96e9",
        "type": "ui_tab",
        "name": "ESP8266",
        "icon": "dashboard",
        "order": 2
    }
]

