Tuesday, December 26, 2023

Panel Speakers

 DAEX58FP Flat Pack 58mm Exciter 25W 8 Ohm



Since my hearing is pretty shot and I havent listened to a pair of good speakers in a while I am finding it hard to judge how good these are. I am not a bass freak so I dont mind speakers being light on the "doof doof". These do seem to be very high end though bright verging on tinny. I would like to get a set of conventional speakers to compare them with. The choice however, inline with the availability of very high power >100 Watts D Class Amplifiers , look to be very inefficient. 

I need to track down a high efficiency old school 8 - 10 inch medium quality driver.

Sunday, December 10, 2023

24 volt system .... Opps .... battery maintenance.

 820 GC2-145 6 - 260 260 180 295 33 J A

I am thinking each cell holds maybe 3 litres? I needed to put in a litre for every cell. 

I swear I checked them !! Clearly I didnt.  They were just totally going flat with virtually no load and plenty of charge.  I bought them when I was in Melbourne and the thick of the coof ...gotta be 2020 ? 

Anyways I pulled them out and topped them up and a have them charging. I am thinking an 8 amp charger should take ...2 days ? to deliver 260 AH ?  

They are on 6.1 ish and after half a day one went up to 6.5 ish... but sagged back down to 6.2 after being removed from the charger. 

They weigh 30 some kg and probably why I kept putting off checking the electrolytes... first (and likely only ) time I did I pulled them out since checking in situ seemed like , not an option.  Well it isnt. Have to have a way of checking electrolyte levels in situ...  They are too heavy to just pull out ..too dangerous on the back ... 

But I am not keen to put them back in service ... I dont know what usefull life they have left.  

Lituum batteries are expensive but getting cheaper all the time .. They dont need maintenance ..can be discharged to 20 percent with no damage. 


and Rule of Thumb have a life of 3000 against 500 cycles ... Sure they are expensive ... but maybe replace the wet Lead Acid system? 

Monday, December 4, 2023

Home Assistant

I would like to run Home Assistant off the NUC next to Linux Mint. 

If I like the system and want to run it independently ogf the NUC I can think about putting it on a SBC. 

I would like to have a play with the setup before committing to buying / building Hardware. 

Ventoy: Multi-boot USB Drive Tool

Friday, November 10, 2023

AI Coding.

 I have normally stolen OPs code and just rejigged it to do what i want. Despite I am barely literate I can eventually cobble together something that works. 

The openHAB style of Interface is annoying and I like Node Red ..

I gave chatGPT a verbal description of what I wanted done on the ESP 32 and it spat out some code that looked like it would work. 

The raspberry pi seems a rally clumsy way to go these days and I wonder if just put the money towards an extra NUC  with a very staid and stable Linux Install ... 

I wonder if you can run Node Red on an iPhone? You can certainly run the web interface.


 


ESP 32 4 / 8 Relay MQTT Module.

UPDATE : 
 
I dont like the protoboard / bird's nest approach. 
 
There are 8 channel relay boards with ESP 32 available at very afffordable prices. Much nicer way to go.   30 bucks and wouldnt have to buggerise around with connectors... Just use those staright pins crimps in the screw block ... all round winner.
 
 
-------------------------------------------------------------------------------------------------------
 
Have just built an 8 channel version of the hardware. Time to revisit the sketch and modify it for the new board. Even better make a sketch that will work on both. 

 Ref : https://randomnerdtutorials.com/esp32-relay-module-ac-web-server/

 Hacked the sketch to give three extra channels and set up a Node Red Interface ... 



/*********
MQTT Relay Driver

Rui Santos
Complete project details at https://randomnerdtutorials.com
Ref: Learning ESP32 with ArduinoIDE page 358
Modified to remove push button and to add 4 relays instead of the LED - Mark Bolton September 28 2021
*********/

#include <Arduino.h>

#include <WiFi.h>
extern "C" {
#include "freertos/FreeRTOS.h"
#include "freertos/timers.h"
}
#include <AsyncMqttClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Change the credentials below, so your ESP32 connects to your router
#define WIFI_SSID "Mark_Network"
#define WIFI_PASSWORD "er1amjhwif"

// Change the MQTT_HOST variable to your Raspberry Pi IP address,
// so it connects to your Mosquitto MQTT broker
#define MQTT_HOST IPAddress(192, 168, 1, 105)
#define MQTT_PORT 1883

// Create objects to handle MQTT client
AsyncMqttClient mqttClient;
TimerHandle_t mqttReconnectTimer;
TimerHandle_t wifiReconnectTimer;

unsigned long previousMillis = 0; // Stores last time temperature was published
const long interval = 10000; // interval at which to publish sensor readings

// Assign output variables to GPIO pins

const int output25 = 25; // GPIO where the Relay is connected to
const int output26 = 26;
const int output27 = 27;
const int output33 = 33;

// GPIO where the DS18B20 is connected to
const int oneWireBus = 32;
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);
// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);

void connectToWifi() {
Serial.println("Connecting to Wi-Fi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
}

void connectToMqtt() {
Serial.println("Connecting to MQTT...");
mqttClient.connect();
}

void WiFiEvent(WiFiEvent_t event) {
Serial.printf("[WiFi-event] event: %d\n", event);
switch(event) {
case SYSTEM_EVENT_STA_GOT_IP:
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
connectToMqtt();
break;
case SYSTEM_EVENT_STA_DISCONNECTED:
Serial.println("WiFi lost connection");
xTimerStop(mqttReconnectTimer, 0); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi
xTimerStart(wifiReconnectTimer, 0);
break;
}
}

// Add more topics that want your ESP32 to be subscribed to
void onMqttConnect(bool sessionPresent) {
Serial.println("Connected to MQTT.");
Serial.print("Session present: ");
Serial.println(sessionPresent);
// ESP32 subscribed to esp32/relay topic
uint16_t packetIdSub = mqttClient.subscribe("esp32/relay", 0);
Serial.print("Subscribing at QoS 0, packetId: ");
Serial.println(packetIdSub);
}

void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
Serial.println("Disconnected from MQTT.");
if (WiFi.isConnected()) {
xTimerStart(mqttReconnectTimer, 0);
}
}

void onMqttSubscribe(uint16_t packetId, uint8_t qos) {
Serial.println("Subscribe acknowledged.");
Serial.print(" packetId: ");
Serial.println(packetId);
Serial.print(" qos: ");
Serial.println(qos);
}

void onMqttUnsubscribe(uint16_t packetId) {
Serial.println("Unsubscribe acknowledged.");
Serial.print(" packetId: ");
Serial.println(packetId);
}

void onMqttPublish(uint16_t packetId) {
Serial.println("Publish acknowledged.");
Serial.print(" packetId: ");
Serial.println(packetId);
}

// You can modify this function to handle what happens when you receive a certain message in a specific topic
void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
String messageTemp;
for (int i = 0; i < len; i++) {
//Serial.print((char)payload[i]);
messageTemp += (char)payload[i];
}
// Check if the MQTT message was received on topic esp32/relay
if (strcmp(topic, "esp32/relay") == 0) {
if (messageTemp == "1on") {
digitalWrite(output25, LOW);
}
else if (messageTemp == "1off") {
digitalWrite(output25, HIGH);
}
else if (messageTemp == "2on") {
digitalWrite(output26, LOW);
}
else if (messageTemp == "2off") {
digitalWrite(output26, HIGH);
}
else if (messageTemp == "3on") {
digitalWrite(output27, LOW);
}
else if (messageTemp == "3off") {
digitalWrite(output27, HIGH);
}
else if (messageTemp == "4on") {
digitalWrite(output33, LOW);
}
else if (messageTemp == "4off") {
digitalWrite(output33, HIGH);
}
}
Serial.println("Publish received.");
Serial.print(" message: ");
Serial.println(messageTemp);
Serial.print(" topic: ");
Serial.println(topic);
Serial.print(" qos: ");
Serial.println(properties.qos);
Serial.print(" dup: ");
Serial.println(properties.dup);
Serial.print(" retain: ");
Serial.println(properties.retain);
Serial.print(" len: ");
Serial.println(len);
Serial.print(" index: ");
Serial.println(index);
Serial.print(" total: ");
Serial.println(total);
}

void setup() {
// Start the DS18B20 sensor
sensors.begin();
// Define Relay Ouput as an OUTPUT and set it LOW
pinMode(output25, OUTPUT);
digitalWrite(output25, LOW);
pinMode(output26, OUTPUT);
digitalWrite(output26, LOW);
pinMode(output27, OUTPUT);
digitalWrite(output27, LOW);
pinMode(output33, OUTPUT);
digitalWrite(output33, LOW);
Serial.begin(115200);

mqttReconnectTimer = xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToMqtt));
wifiReconnectTimer = xTimerCreate("wifiTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToWifi));

WiFi.onEvent(WiFiEvent);

mqttClient.onConnect(onMqttConnect);
mqttClient.onDisconnect(onMqttDisconnect);
mqttClient.onSubscribe(onMqttSubscribe);
mqttClient.onUnsubscribe(onMqttUnsubscribe);
mqttClient.onMessage(onMqttMessage);
mqttClient.onPublish(onMqttPublish);
mqttClient.setServer(MQTT_HOST, MQTT_PORT);

connectToWifi();
}

void loop() {
unsigned long currentMillis = millis();
// Every X number of seconds (interval = 5 seconds)
// it publishes a new MQTT message on topic esp32/temperature
if (currentMillis - previousMillis >= interval) {
// Save the last time a new reading was published
previousMillis = currentMillis;
// New temperature readings
sensors.requestTemperatures();

// Publish an MQTT message on topic esp32/temperature with Celsius degrees
uint16_t packetIdPub2 = mqttClient.publish("esp32/temperature", 2, true,
String(sensors.getTempCByIndex(0)).c_str());
// Publish an MQTT message on topic esp32/temperature with Fahrenheit degrees
//uint16_t packetIdPub2 = mqttClient.publish("esp32/temperature", 2, true,
// String(sensors.getTempFByIndex(0)).c_str());
Serial.print("Publishing on topic esp32/temperature at QoS 2, packetId: ");
Serial.println(packetIdPub2);

}
}

 

Thursday, November 9, 2023

ICloud for Linux

 I got a bit carried away and bought an iPhone 15 . 

So far it has been very nasty. OS welded shut and always on the mooch. 

https://www.linuxcapable.com/how-to-install-and-enable-snap-on-linux-mint/

https://zilowtech.com/use-icloud-on-linux/

Tuesday, August 8, 2023

Up grade Lighting / IOT

 I have built another switch panel (Port) with a 8 x relay in it. It has no ESP 32 in it presently and needs a more robust connector system. I will probably need to use KiCAD to design and effective junction board. It will run the desk lighting as well as outside.

The Aft Starboard Master one has the Raspberry Pi and operates perfectly - though could use more elegant wall fixings. 

The Fwd Starboard one has a and ESP32 that failed when I was fitting lights in the shower and they shorted out the 12 volt. It either blew up the ESP32 or , more likely, corrupted the Programming. 

I am not sure where the  documentation went to cover all the firmware. 

I experimented with chatGPT and with plain English specs got it to output code to run the ESP 32. I haven't actually tried it but it looked sounds enough. 

Be good to get the cameras going too. They have failed and I dont know why. No particular event - just no data feed.

Saturday, July 22, 2023

Diesel Heater.

The Fuel tank used to feed the old petrol generator which was heavy and loud and way too high VA. 

It is 200 x  450 x 600 = 54 litres  2 x 20 litre jerry wont quite fill.

The Heater burn / litres per Hour 1.2 - 2.4 

The fuel sender is 3 Ohms to Negative / Earth when nearly full and also when nearly empty;  so the sender is toast. To get at it I would have to remove the fuel tank which would involve getting under the chasis and removing 4  bolts with nylocks nuts...  easy .. 

Bolts removed and tank is ready to slide.

Will wait till the tank is empty again before recommencing. 

UPDATE : Inspected the sender and it looks fine  - 170 Full  - 3 Empty Ohms


I quite like the look of those old round dials. So if I go say 50 mA and thought of it as litres? 


The diesel heater has been largely trouble free for a few years now. 

It would be nice to engineer it into a IOT system. 

November 2019 Fault

Symptoms:  blows smokey unignited fuel vapour out of the exhaust. Last time this happened I disconnected the fuel and ran it thorough a cuppla start cycles to lean it right out. That was about 4 tanks of 24 liters of fuel ago. It worked.


My initial (wrong) diagnosis was that I had been running it on a low setting. I thought maybe it was running too cool and not de coking the combustion chamber.  I have never run it one any setting but 100 percent since the last failure.

Problem solved. The connector that takes the start up current is not up to the job. Inadequate current gets to the glow plug to start combustion but a credible voltage drop still exists.

Fix:  involved breaking out the conductors to a more robust connector lug / bus style system.

Tuesday, March 14, 2023

KiCAD and the Distribution board for the lights.

 I tried it using proto board and a fairly light duty plug type. Too fragile. I will have to design a board using KiCAD and get a few manufactured.


 

Monday, March 6, 2023

Reinstalled Linux Mint and reset the Router (oops).

The files were all just a mess and I was getting wieird bugs. I am going to have to make an effort to Timeshift and to stay tidy.

These persisted so I bought a new  TL - MR 3420 router.




 

https://marksfieldnotes.blogspot.com/2020/05/openhab-documentation.html


ssh openhabian@192.168.1.103  - openhabian


PIA VPN   p9615602

sh pia-linux-3.3.1-06924.run

 

Sunday, March 5, 2023

Ardiuno IDE on Bootable USB - Wont work But .....

Everytime I have used Arduino IDE I have found it difficult to keep track of the files. Also if the main OS gets messed up reinstalling messes the Arduino set up completely. 

This time I am going to install it by itself (and what ever accessories are required)

on a bootable USB.   

I have had issues before running OS off a USB due to slowness and buggy persistence. ISOs on USB are likely just to be for install and not designed to run realiably.

This time I used mkUSB on which Lubuntu ran like a bucket of snot. I tried again with a USBSSD installed on a flash stick and it seemed to work rather well ... will see. 

Ref: https://ostechnix.com/how-to-create-persistent-live-usb-on-ubuntu/

I should really be dual booting and if this is not successful I will. 

I really should but a second computer. Yeah Right. 


UPDATE: 


We that is working brilliantly off my SSD USB memory module. I am using Linux Mint Cinnamon. I have got all the basics set up - Bluetooth - Firefox - Wireless etc. 

Now I must take an ISO image of the system now it is all pristine. 


UPDATE: 

Apparently saving the persistant data is not (or was not) so robust. Maybe dual booting isnt such bad idea after all? 

My drive is setup is : ID-1: /dev/sda vendor: Gigabyte model: GP-GSTFS31120GNTD size: 111.79 GiB   speed: 6.0 Gb/s serial: <filter>
           ID-2: /dev/sdb type: USB vendor: Western Digital model: WD Elements SE 25FE  size: 931.48 GiB serial: <filter>
           ID-3: /dev/sdc type: USB vendor: JMicron Tech model: Generic size: 476.94 GiB  serial: <filter> 

There apears to be a setup where you can run bash scripts to backup and restore the persistent data.

https://help.ubuntu.com/community/mkusb/persistent#Backup_and_restore_of_persistent_overlay_data

 

Results  : mint@mint:/media/mint/usbdata$ bash backup
grep: /etc/upstream-release: Is a directory
backup works only for Ubuntu and distros based on Ubuntu

Conclusion. This wont work. Better to reinstall the OS and keep it tidy.

However - to make a USB stick with a cut down form of Linux and some tools ie. gParted. will work well.
 


Github.

 Going to have to learn github. Juggling with code is untidy just pasting it places. 

https://github.com/Muzzlehatch

Saturday, March 4, 2023

Node Red

When the pi needed reprogramming node red needed some resources. 

http://192.168.1.105:1880/#flow/d07fd454e046853e

Current all Nodes Export :

[
    {
        "id": "d07fd454e046853e",
        "type": "tab",
        "label": "Truck Automation",
        "disabled": false,
        "info": ""
    },
    {
        "id": "bd10299be49cd547",
        "type": "tab",
        "label": "Galley Module",
        "disabled": false,
        "info": ""
    },
    {
        "id": "1105f9d805467111",
        "type": "mqtt-broker",
        "name": "",
        "broker": "localhost",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "sessionExpiry": ""
    },
    {
        "id": "10e78a89.5b4fd5",
        "type": "mqtt-broker",
        "name": "",
        "broker": "localhost",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": true,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "66682b5f5abb06fa",
        "type": "ui_base",
        "theme": {
            "name": "theme-custom",
            "lightTheme": {
                "default": "#0094CE",
                "baseColor": "#0094CE",
                "baseFont": "Arial,Arial,Helvetica,sans-serif",
                "edited": true,
                "reset": false
            },
            "darkTheme": {
                "default": "#097479",
                "baseColor": "#097479",
                "baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif",
                "edited": false
            },
            "customTheme": {
                "name": "Blue and Grey",
                "default": "#4B7930",
                "baseColor": "#0094ce",
                "baseFont": "Arial,Arial,Helvetica,sans-serif",
                "reset": false
            },
            "themeState": {
                "base-color": {
                    "default": "#4B7930",
                    "value": "#0094ce",
                    "edited": true
                },
                "page-titlebar-backgroundColor": {
                    "value": "#0094ce",
                    "edited": false
                },
                "page-backgroundColor": {
                    "value": "#6a5e5e",
                    "edited": true
                },
                "page-sidebar-backgroundColor": {
                    "value": "#333333",
                    "edited": true
                },
                "group-textColor": {
                    "value": "#204a87",
                    "edited": true
                },
                "group-borderColor": {
                    "value": "#ffffff",
                    "edited": false
                },
                "group-backgroundColor": {
                    "value": "#d3d7cf",
                    "edited": true
                },
                "widget-textColor": {
                    "value": "#2e3436",
                    "edited": true
                },
                "widget-backgroundColor": {
                    "value": "#65e6d1",
                    "edited": true
                },
                "widget-borderColor": {
                    "value": "#0094ce",
                    "edited": true
                },
                "base-font": {
                    "value": "Arial,Arial,Helvetica,sans-serif"
                }
            },
            "angularTheme": {
                "primary": "indigo",
                "accents": "blue",
                "warn": "red",
                "background": "grey",
                "palette": "light"
            }
        },
        "site": {
            "name": "Truck Dasbboard",
            "hideToolbar": "false",
            "allowSwipe": "false",
            "lockMenu": "false",
            "allowTempTheme": "true",
            "dateFormat": "DD/MM/YYYY",
            "sizes": {
                "sx": 32,
                "sy": 60,
                "gx": 2,
                "gy": 2,
                "cx": 5,
                "cy": 5,
                "px": 2,
                "py": 2
            }
        }
    },
    {
        "id": "a9238198b20b37f9",
        "type": "ui_tab",
        "name": "Truck Interior",
        "icon": "dashboard",
        "order": 2,
        "disabled": false,
        "hidden": false
    },
    {
        "id": "9e5c61a1a1130ac0",
        "type": "ui_group",
        "name": "Bed",
        "tab": "a9238198b20b37f9",
        "order": 1,
        "disp": true,
        "width": "4",
        "collapse": false,
        "className": ""
    },
    {
        "id": "d9c6af4eb58f033d",
        "type": "ui_group",
        "name": "Light",
        "tab": "a9238198b20b37f9",
        "order": 2,
        "disp": true,
        "width": "4",
        "collapse": false,
        "className": ""
    },
    {
        "id": "f0f525f2ba61551e",
        "type": "ui_group",
        "name": "Temps.",
        "tab": "a9238198b20b37f9",
        "order": 4,
        "disp": true,
        "width": "4",
        "collapse": false,
        "className": ""
    },
    {
        "id": "61285987.c20328",
        "type": "ui_group",
        "name": "Galley",
        "tab": "a9238198b20b37f9",
        "order": 3,
        "disp": true,
        "width": "4",
        "collapse": false,
        "className": ""
    },
    {
        "id": "2e77757e951783bd",
        "type": "ui_group",
        "name": "Humidity",
        "tab": "a9238198b20b37f9",
        "order": 5,
        "disp": true,
        "width": "4",
        "collapse": false,
        "className": ""
    },
    {
        "id": "05423309f8c2b631",
        "type": "nexmobasic"
    },
    {
        "id": "2740492b019ed5fc",
        "type": "nexmobasic"
    },
    {
        "id": "0d8878788067d1e1",
        "type": "ui_group",
        "name": "Camera",
        "tab": "a9238198b20b37f9",
        "order": 6,
        "disp": true,
        "width": "12",
        "collapse": false,
        "className": ""
    },
    {
        "id": "a56365d4022c70fc",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 1 - On",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 140,
        "y": 320,
        "wires": [
            [
                "e39eee0825ea7049"
            ]
        ]
    },
    {
        "id": "e39eee0825ea7049",
        "type": "rpi-gpio out",
        "z": "d07fd454e046853e",
        "name": "IN 1",
        "pin": "7",
        "set": true,
        "level": "0",
        "freq": "",
        "out": "out",
        "x": 510,
        "y": 340,
        "wires": []
    },
    {
        "id": "6162e6807761acb6",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 1 - Off",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 140,
        "y": 360,
        "wires": [
            [
                "e39eee0825ea7049"
            ]
        ]
    },
    {
        "id": "a85db59e76ada9a8",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 2  - On",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 140,
        "y": 460,
        "wires": [
            [
                "f9a37bf602523ab1"
            ]
        ]
    },
    {
        "id": "a5ec34e75b7de5ae",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 2 - Off",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 140,
        "y": 500,
        "wires": [
            [
                "f9a37bf602523ab1"
            ]
        ]
    },
    {
        "id": "f9a37bf602523ab1",
        "type": "rpi-gpio out",
        "z": "d07fd454e046853e",
        "name": "IN 2",
        "pin": "11",
        "set": true,
        "level": "0",
        "freq": "",
        "out": "out",
        "x": 510,
        "y": 480,
        "wires": []
    },
    {
        "id": "6283130edf132a17",
        "type": "rpi-gpio out",
        "z": "d07fd454e046853e",
        "name": "IN 3",
        "pin": "13",
        "set": true,
        "level": "0",
        "freq": "",
        "out": "out",
        "x": 510,
        "y": 620,
        "wires": []
    },
    {
        "id": "1419fe36941b0ebe",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 3 - On",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 140,
        "y": 600,
        "wires": [
            [
                "6283130edf132a17"
            ]
        ]
    },
    {
        "id": "dcc73868013fb118",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 3 - Off",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 140,
        "y": 640,
        "wires": [
            [
                "6283130edf132a17"
            ]
        ]
    },
    {
        "id": "e3dcc698b8481e92",
        "type": "rpi-gpio out",
        "z": "d07fd454e046853e",
        "name": "IN 4",
        "pin": "15",
        "set": true,
        "level": "0",
        "freq": "",
        "out": "out",
        "x": 510,
        "y": 740,
        "wires": []
    },
    {
        "id": "a261a16ebd2533b4",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 4 - On",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 140,
        "y": 720,
        "wires": [
            [
                "e3dcc698b8481e92"
            ]
        ]
    },
    {
        "id": "966e8add85e05f26",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 4 - Off",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 140,
        "y": 760,
        "wires": [
            [
                "e3dcc698b8481e92"
            ]
        ]
    },
    {
        "id": "55de875dfca7124b",
        "type": "rpi-gpio out",
        "z": "d07fd454e046853e",
        "name": "IN 5",
        "pin": "21",
        "set": true,
        "level": "0",
        "freq": "",
        "out": "out",
        "x": 510,
        "y": 880,
        "wires": []
    },
    {
        "id": "cc6942619b7176de",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 5 - On",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 140,
        "y": 860,
        "wires": [
            [
                "55de875dfca7124b"
            ]
        ]
    },
    {
        "id": "af4c6c5f5fb573a7",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 5 - Off",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 140,
        "y": 900,
        "wires": [
            [
                "55de875dfca7124b"
            ]
        ]
    },
    {
        "id": "63c32887220ba57d",
        "type": "ui_switch",
        "z": "d07fd454e046853e",
        "name": "TBA1",
        "label": "TBA1",
        "tooltip": "",
        "group": "d9c6af4eb58f033d",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "topic",
        "topicType": "msg",
        "style": "",
        "onvalue": "1",
        "onvalueType": "num",
        "onicon": "",
        "oncolor": "",
        "offvalue": "0",
        "offvalueType": "num",
        "officon": "",
        "offcolor": "",
        "animate": false,
        "className": "",
        "x": 270,
        "y": 280,
        "wires": [
            [
                "e39eee0825ea7049"
            ]
        ]
    },
    {
        "id": "5d2df55f106f5c5b",
        "type": "ui_switch",
        "z": "d07fd454e046853e",
        "name": "Centre",
        "label": "Centre",
        "tooltip": "",
        "group": "d9c6af4eb58f033d",
        "order": 2,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "topic",
        "topicType": "msg",
        "style": "",
        "onvalue": "1",
        "onvalueType": "num",
        "onicon": "",
        "oncolor": "",
        "offvalue": "0",
        "offvalueType": "num",
        "officon": "",
        "offcolor": "",
        "animate": false,
        "className": "",
        "x": 270,
        "y": 420,
        "wires": [
            [
                "f9a37bf602523ab1"
            ]
        ]
    },
    {
        "id": "30add1ebf7b8ac67",
        "type": "ui_switch",
        "z": "d07fd454e046853e",
        "name": "Side Table",
        "label": "Side Table",
        "tooltip": "",
        "group": "d9c6af4eb58f033d",
        "order": 3,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "topic",
        "topicType": "msg",
        "style": "",
        "onvalue": "1",
        "onvalueType": "num",
        "onicon": "",
        "oncolor": "",
        "offvalue": "0",
        "offvalueType": "num",
        "officon": "",
        "offcolor": "",
        "animate": false,
        "className": "",
        "x": 290,
        "y": 560,
        "wires": [
            [
                "6283130edf132a17"
            ]
        ]
    },
    {
        "id": "d059ff878774bb3a",
        "type": "ui_switch",
        "z": "d07fd454e046853e",
        "name": "Aft",
        "label": "Aft",
        "tooltip": "",
        "group": "9e5c61a1a1130ac0",
        "order": 2,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "topic",
        "topicType": "msg",
        "style": "",
        "onvalue": "1",
        "onvalueType": "num",
        "onicon": "",
        "oncolor": "",
        "offvalue": "0",
        "offvalueType": "num",
        "officon": "",
        "offcolor": "",
        "animate": false,
        "className": "",
        "x": 270,
        "y": 680,
        "wires": [
            [
                "e3dcc698b8481e92"
            ]
        ]
    },
    {
        "id": "8275b563d57c9363",
        "type": "ui_switch",
        "z": "d07fd454e046853e",
        "name": "Reading",
        "label": "Reading",
        "tooltip": "",
        "group": "9e5c61a1a1130ac0",
        "order": 1,
        "width": "4",
        "height": 1,
        "passthru": true,
        "decouple": "false",
        "topic": "topic",
        "topicType": "msg",
        "style": "",
        "onvalue": "1",
        "onvalueType": "num",
        "onicon": "",
        "oncolor": "",
        "offvalue": "0",
        "offvalueType": "num",
        "officon": "",
        "offcolor": "",
        "animate": false,
        "className": "",
        "x": 300,
        "y": 820,
        "wires": [
            [
                "55de875dfca7124b"
            ]
        ]
    },
    {
        "id": "cf4a0584a6aa077b",
        "type": "rpi-gpio out",
        "z": "d07fd454e046853e",
        "name": "IN 6",
        "pin": "29",
        "set": true,
        "level": "0",
        "freq": "",
        "out": "out",
        "x": 510,
        "y": 1020,
        "wires": []
    },
    {
        "id": "e20b177702369989",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 6 - On",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 140,
        "y": 1000,
        "wires": [
            [
                "cf4a0584a6aa077b"
            ]
        ]
    },
    {
        "id": "986cffea790c424f",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 6 - Off",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 140,
        "y": 1040,
        "wires": [
            [
                "cf4a0584a6aa077b"
            ]
        ]
    },
    {
        "id": "2563009d7471326c",
        "type": "mqtt out",
        "z": "d07fd454e046853e",
        "name": "",
        "topic": "",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "1105f9d805467111",
        "x": 190,
        "y": 1840,
        "wires": []
    },
    {
        "id": "2d666e7ccef9524c",
        "type": "rpi-gpio out",
        "z": "d07fd454e046853e",
        "name": "IN 7",
        "pin": "31",
        "set": true,
        "level": "0",
        "freq": "",
        "out": "out",
        "x": 510,
        "y": 1160,
        "wires": []
    },
    {
        "id": "e676c40f62be9954",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 7 - On",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 140,
        "y": 1140,
        "wires": [
            [
                "2d666e7ccef9524c"
            ]
        ]
    },
    {
        "id": "f6810ceaff5d6cd8",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 7 - Off",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 140,
        "y": 1180,
        "wires": [
            [
                "2d666e7ccef9524c"
            ]
        ]
    },
    {
        "id": "c80956ea561295b6",
        "type": "rpi-gpio out",
        "z": "d07fd454e046853e",
        "name": "IN 8",
        "pin": "33",
        "set": true,
        "level": "0",
        "freq": "",
        "out": "out",
        "x": 510,
        "y": 1300,
        "wires": []
    },
    {
        "id": "85d290e061a82303",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 8 - On",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "num",
        "x": 140,
        "y": 1280,
        "wires": [
            [
                "c80956ea561295b6"
            ]
        ]
    },
    {
        "id": "afb46033f2d6523d",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "IN 8 - Off",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 140,
        "y": 1320,
        "wires": [
            [
                "c80956ea561295b6"
            ]
        ]
    },
    {
        "id": "3f8737fa0cbce13f",
        "type": "shutdown",
        "z": "d07fd454e046853e",
        "name": "",
        "x": 440,
        "y": 40,
        "wires": []
    },
    {
        "id": "1c8607c45d77fbfd",
        "type": "restart",
        "z": "d07fd454e046853e",
        "name": "",
        "x": 430,
        "y": 80,
        "wires": []
    },
    {
        "id": "dc968fdcb9bc907b",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "Shutdown",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "str",
        "x": 140,
        "y": 40,
        "wires": [
            [
                "3f8737fa0cbce13f"
            ]
        ]
    },
    {
        "id": "b0d41cf383314ab3",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "Restart",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "True",
        "payloadType": "str",
        "x": 130,
        "y": 80,
        "wires": [
            [
                "1c8607c45d77fbfd"
            ]
        ]
    },
    {
        "id": "2c111828dd6e3ef8",
        "type": "rpi-dht22",
        "z": "d07fd454e046853e",
        "name": "Temp / Hum",
        "topic": "rpi-dht22",
        "dht": 22,
        "pintype": "2",
        "pin": "12",
        "x": 270,
        "y": 1400,
        "wires": [
            [
                "839791be674f428e",
                "6e6258d77d6d1007"
            ]
        ]
    },
    {
        "id": "762009f79011c1ea",
        "type": "inject",
        "z": "d07fd454e046853e",
        "name": "5 Sec",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "60",
        "crontab": "",
        "once": true,
        "onceDelay": "10",
        "topic": "",
        "payloadType": "date",
        "x": 120,
        "y": 1400,
        "wires": [
            [
                "2c111828dd6e3ef8"
            ]
        ]
    },
    {
        "id": "839791be674f428e",
        "type": "function",
        "z": "d07fd454e046853e",
        "name": "Humidity",
        "func": "msg.payload = msg.humidity\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 440,
        "y": 1420,
        "wires": [
            [
                "e7c4a573f6fef1f3",
                "b8a58fb8b8c2e720"
            ]
        ]
    },
    {
        "id": "6e6258d77d6d1007",
        "type": "ui_gauge",
        "z": "d07fd454e046853e",
        "name": "",
        "group": "f0f525f2ba61551e",
        "order": 2,
        "width": 0,
        "height": 0,
        "gtype": "gage",
        "title": "Inside",
        "label": "Celcius",
        "format": "{{value}}",
        "min": 0,
        "max": "50",
        "colors": [
            "#00b500",
            "#e6e600",
            "#ca3838"
        ],
        "seg1": "15",
        "seg2": "35",
        "x": 570,
        "y": 1360,
        "wires": []
    },
    {
        "id": "e7c4a573f6fef1f3",
        "type": "ui_gauge",
        "z": "d07fd454e046853e",
        "name": "",
        "group": "2e77757e951783bd",
        "order": 1,
        "width": 0,
        "height": 0,
        "gtype": "gage",
        "title": "Humidity",
        "label": "%",
        "format": "{{value}}",
        "min": 0,
        "max": "100",
        "colors": [
            "#00b500",
            "#e6e600",
            "#ca3838"
        ],
        "seg1": "15",
        "seg2": "60",
        "className": "",
        "x": 580,
        "y": 1400,
        "wires": []
    },
    {
        "id": "0adb06a959e38f43",
        "type": "comment",
        "z": "d07fd454e046853e",
        "name": "Unused - yet",
        "info": "",
        "x": 400,
        "y": 980,
        "wires": []
    },
    {
        "id": "6d21acd7f78e5eb4",
        "type": "comment",
        "z": "d07fd454e046853e",
        "name": "Unused - yet",
        "info": "",
        "x": 410,
        "y": 1100,
        "wires": []
    },
    {
        "id": "741fd1774f7816dd",
        "type": "comment",
        "z": "d07fd454e046853e",
        "name": "Unused - yet",
        "info": "",
        "x": 410,
        "y": 1220,
        "wires": []
    },
    {
        "id": "d56158387d864495",
        "type": "mqtt out",
        "z": "bd10299be49cd547",
        "name": "",
        "topic": "esp32/relay",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "10e78a89.5b4fd5",
        "x": 550,
        "y": 380,
        "wires": []
    },
    {
        "id": "6b95bcc4944078ee",
        "type": "mqtt in",
        "z": "bd10299be49cd547",
        "name": "",
        "topic": "esp32/temperature",
        "qos": "2",
        "datatype": "auto",
        "broker": "10e78a89.5b4fd5",
        "nl": false,
        "rap": false,
        "x": 230,
        "y": 160,
        "wires": [
            [
                "409874d0bd7185ff",
                "89d652a125b6e896"
            ]
        ]
    },
    {
        "id": "4b3a40b5c6c3bcd1",
        "type": "ui_switch",
        "z": "bd10299be49cd547",
        "name": "Cooker",
        "label": "Cooker",
        "tooltip": "",
        "group": "61285987.c20328",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "topicType": "str",
        "style": "",
        "onvalue": "1on",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "1off",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "animate": true,
        "className": "",
        "x": 400,
        "y": 380,
        "wires": [
            [
                "d56158387d864495"
            ]
        ]
    },
    {
        "id": "409874d0bd7185ff",
        "type": "debug",
        "z": "bd10299be49cd547",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 430,
        "y": 120,
        "wires": []
    },
    {
        "id": "0a24426085cb52fb",
        "type": "mqtt in",
        "z": "bd10299be49cd547",
        "name": "",
        "topic": "esp32/relay/toggle",
        "qos": "2",
        "datatype": "auto",
        "broker": "10e78a89.5b4fd5",
        "nl": false,
        "rap": false,
        "x": 230,
        "y": 340,
        "wires": [
            [
                "4b3a40b5c6c3bcd1",
                "47a672d90d1bce3a"
            ]
        ]
    },
    {
        "id": "47a672d90d1bce3a",
        "type": "debug",
        "z": "bd10299be49cd547",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 410,
        "y": 300,
        "wires": []
    },
    {
        "id": "89d652a125b6e896",
        "type": "ui_chart",
        "z": "bd10299be49cd547",
        "name": "Outside Temp",
        "group": "f0f525f2ba61551e",
        "order": 1,
        "width": 0,
        "height": 0,
        "label": "Outside",
        "chartType": "line",
        "legend": "false",
        "xformat": "HH:mm:ss",
        "interpolate": "linear",
        "nodata": "",
        "dot": false,
        "ymin": "0",
        "ymax": "35",
        "removeOlder": "5",
        "removeOlderPoints": "",
        "removeOlderUnit": "3600",
        "cutout": 0,
        "useOneColor": false,
        "useUTC": false,
        "colors": [
            "#1f77b4",
            "#aec7e8",
            "#ff7f0e",
            "#2ca02c",
            "#98df8a",
            "#d62728",
            "#ff9896",
            "#9467bd",
            "#c5b0d5"
        ],
        "outputs": 1,
        "useDifferentColor": false,
        "className": "",
        "x": 440,
        "y": 200,
        "wires": [
            []
        ]
    },
    {
        "id": "ebc4b5954592a495",
        "type": "mqtt out",
        "z": "bd10299be49cd547",
        "name": "",
        "topic": "esp32/relay",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "10e78a89.5b4fd5",
        "x": 550,
        "y": 540,
        "wires": []
    },
    {
        "id": "1d552fe4bab62368",
        "type": "ui_switch",
        "z": "bd10299be49cd547",
        "name": "Forward",
        "label": "Forward",
        "tooltip": "",
        "group": "61285987.c20328",
        "order": 2,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "topicType": "str",
        "style": "",
        "onvalue": "2on",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "2off",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "animate": true,
        "className": "",
        "x": 400,
        "y": 540,
        "wires": [
            [
                "ebc4b5954592a495"
            ]
        ]
    },
    {
        "id": "ff6d7cc81ab21990",
        "type": "mqtt in",
        "z": "bd10299be49cd547",
        "name": "",
        "topic": "esp32/relay/toggle",
        "qos": "2",
        "datatype": "auto",
        "broker": "10e78a89.5b4fd5",
        "nl": false,
        "rap": false,
        "x": 230,
        "y": 500,
        "wires": [
            [
                "1d552fe4bab62368",
                "68ccf73c8865e81d"
            ]
        ]
    },
    {
        "id": "68ccf73c8865e81d",
        "type": "debug",
        "z": "bd10299be49cd547",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 410,
        "y": 460,
        "wires": []
    },
    {
        "id": "f803c707ec2a94e0",
        "type": "mqtt out",
        "z": "bd10299be49cd547",
        "name": "",
        "topic": "esp32/relay",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "10e78a89.5b4fd5",
        "x": 550,
        "y": 700,
        "wires": []
    },
    {
        "id": "19def10c4627a977",
        "type": "ui_switch",
        "z": "bd10299be49cd547",
        "name": "Outside",
        "label": "Outside",
        "tooltip": "",
        "group": "61285987.c20328",
        "order": 3,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "topicType": "str",
        "style": "",
        "onvalue": "3on",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "3off",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "animate": true,
        "className": "",
        "x": 400,
        "y": 700,
        "wires": [
            [
                "f803c707ec2a94e0"
            ]
        ]
    },
    {
        "id": "68e2f6bc1eeb3de5",
        "type": "mqtt in",
        "z": "bd10299be49cd547",
        "name": "",
        "topic": "esp32/relay/toggle",
        "qos": "2",
        "datatype": "auto",
        "broker": "10e78a89.5b4fd5",
        "nl": false,
        "rap": false,
        "x": 230,
        "y": 660,
        "wires": [
            [
                "19def10c4627a977",
                "4c37d2b4c4949675"
            ]
        ]
    },
    {
        "id": "4c37d2b4c4949675",
        "type": "debug",
        "z": "bd10299be49cd547",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 410,
        "y": 620,
        "wires": []
    },
    {
        "id": "11c2c59433562e33",
        "type": "mqtt out",
        "z": "bd10299be49cd547",
        "name": "",
        "topic": "esp32/relay",
        "qos": "",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "10e78a89.5b4fd5",
        "x": 550,
        "y": 860,
        "wires": []
    },
    {
        "id": "d66190994d4c39c4",
        "type": "ui_switch",
        "z": "bd10299be49cd547",
        "name": "Shower",
        "label": "Shower",
        "tooltip": "",
        "group": "61285987.c20328",
        "order": 4,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "topicType": "str",
        "style": "",
        "onvalue": "4on",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "4off",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "animate": true,
        "className": "",
        "x": 400,
        "y": 860,
        "wires": [
            [
                "11c2c59433562e33"
            ]
        ]
    },
    {
        "id": "8398dff8571102c3",
        "type": "mqtt in",
        "z": "bd10299be49cd547",
        "name": "",
        "topic": "esp32/relay/toggle",
        "qos": "2",
        "datatype": "auto",
        "broker": "10e78a89.5b4fd5",
        "nl": false,
        "rap": false,
        "x": 230,
        "y": 820,
        "wires": [
            [
                "d66190994d4c39c4",
                "c065c65fe55f1625"
            ]
        ]
    },
    {
        "id": "c065c65fe55f1625",
        "type": "debug",
        "z": "bd10299be49cd547",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 410,
        "y": 780,
        "wires": []
    },
    {
        "id": "6d40d5abef956dcf",
        "type": "smart-plug",
        "z": "d07fd454e046853e",
        "name": "Heater",
        "device": "192.168.1.101",
        "interval": 10000,
        "eventInterval": 1000,
        "x": 530,
        "y": 1640,
        "wires": [
            []
        ]
    },
    {
        "id": "f790075f7f029896",
        "type": "ui_switch",
        "z": "d07fd454e046853e",
        "name": "",
        "label": "Heater",
        "tooltip": "",
        "group": "9e5c61a1a1130ac0",
        "order": 3,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "topic",
        "topicType": "msg",
        "style": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "bool",
        "officon": "",
        "offcolor": "",
        "animate": false,
        "className": "",
        "x": 290,
        "y": 1640,
        "wires": [
            [
                "6d40d5abef956dcf"
            ]
        ]
    },
    {
        "id": "7591edfde749f5bd",
        "type": "sendsms",
        "z": "d07fd454e046853e",
        "creds": "2740492b019ed5fc",
        "to": "0484941923",
        "fr": "Mark's Truck",
        "text": "The Humidity is over 75 percent.",
        "unicode": false,
        "x": 650,
        "y": 1520,
        "wires": [
            []
        ]
    },
    {
        "id": "b8a58fb8b8c2e720",
        "type": "function",
        "z": "d07fd454e046853e",
        "name": "Humidity Alarm",
        "func": "var payload=msg.payload;\nvar alarm_flag=context.get(\"alarm_flag\");\nif(typeof alarm_flag==\"undefined\")\nalarm_flag=false;\n\nif (payload>75 && !alarm_flag)\n{\n    alarm_flag=true;\n    msg.alarm=1;\n    context.set(\"alarm_flag\",alarm_flag);\n    return msg;\n}\nif (payload<=20 && alarm_flag)\n{\n    alarm_flag=false;\n    msg.alarm=0;\n    context.set(\"alarm_flag\",alarm_flag);\n    return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 460,
        "y": 1480,
        "wires": [
            [
                "b7133b3e817c2def"
            ]
        ]
    },
    {
        "id": "b7133b3e817c2def",
        "type": "function",
        "z": "d07fd454e046853e",
        "name": "",
        "func": "var temp=msg.payload;\nmsg.to=\"Mark\";\nmsg.from=\"noreply@gmail.com\";\n\nvar d =new Date();\nvar message=\"\";\nif(msg.alarm)\n{\n    msg.topic=\"High Humidity Alarm\";\n    message=\" High Temperature Alarm temp= \";    \n}\nelse\n{\n    message=\" Temperature now normal temp= \"; \n   msg.topic=\"Temperature Alarm Reset\";\n} \nmsg.payload=\"time:\"+d+message +msg.payload;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 480,
        "y": 1520,
        "wires": [
            [
                "7591edfde749f5bd"
            ]
        ]
    },
    {
        "id": "08503f4cc6c98c7c",
        "type": "dynamic thermostat",
        "z": "d07fd454e046853e",
        "name": "",
        "x": 250,
        "y": 1500,
        "wires": [
            []
        ],
        "inputLabels": [
            "Temperature"
        ],
        "outputLabels": [
            "Heater"
        ]
    },
    {
        "id": "995dc991f874db62",
        "type": "ui_template",
        "z": "d07fd454e046853e",
        "group": "0d8878788067d1e1",
        "name": "ESP 32 Cam",
        "order": 0,
        "width": 0,
        "height": 0,
        "format": "<div>\n    <img src=\"http://192.168.1.100\" width=\"600\" height=\"400\">\n</div>",
        "storeOutMessages": true,
        "fwdInMessages": true,
        "resendOnRefresh": false,
        "templateScope": "local",
        "className": "",
        "x": 130,
        "y": 180,
        "wires": [
            []
        ]
    }
]