DanielOgorchock / ST_Anything

ST_Anything is an Arduino library, sketch, and Device Type that works with your SmartThings ThingShield to create an all-in-one SmartThings device.
GNU General Public License v3.0
438 stars 448 forks source link

Help with custom setup #246

Closed jghake closed 3 years ago

jghake commented 3 years ago

I'm trying to set up a NodeMCU out near my fence. I have a double vehicle gate, a single man gate, and a DHT22 I'd like to get working. The vehicle gate has support for opening one or both sides of the gate so I have tried to set this up as two separate gates, but this gate only has one reed sensor. The man gate will have a reed sensor, but will not be controled for open/close. Then the DHT22, if I can't get this working I won't be that bothered.

Firstly, I can't seem to rename doorControl1 to "SingleGate", doorControl2 "DoubleGate", doorControl3 "ManGate". if I do child devices don't get created. This seems to be reproducible, so it must be by design. How do I name my devices so they are easy to distinguish?

Second, the code below doesn't work. I've tried to add the DHT22 and obviously this isn't the answer.

Lastly, since the man gate only has a reed sensor, but no opener, how do I set that device up?

Hopefully someone can provide me some insight. Thanks in advance!

`//** // File: ST_Anything_GarageDoors_ESP8266WiFi.ino // Authors: Dan G Ogorchock & Daniel J Ogorchock (Father and Son) // // Summary: This Arduino Sketch, along with the ST_Anything library and the revised SmartThings // library, demonstrates the ability of one NodeMCU ESP8266 to // implement a multi input/output custom device for integration into SmartThings. // The ST_Anything library takes care of all of the work to schedule device updates // as well as all communications with the NodeMCU ESP8266's WiFi. // // ST_Anything_Multiples implements the following ST Capabilities as a demo of what is possible with a single NodeMCU ESP8266 // - 2 x Door Control devices (used typically for Garage Doors - input pin (contact sensor) and output pin (relay switch) //
// Change History: // // Date Who What // ---- --- ---- // 2019-01-24 Dan Ogorchock Original Creation // //** //** // SmartThings Library for ESP8266WiFi //**

include

//** // ST_Anything Library //**

include //Constants.h is designed to be modified by the end user to adjust behavior of the ST_Anything library

include //Generic Device Class, inherited by Sensor and Executor classes

include //Generic Sensor Class, typically provides data to ST Cloud (e.g. Temperature, Motion, etc...)

include //Generic Executor Class, typically receives data from ST Cloud (e.g. Switch)

include //Generic Interrupt "Sensor" Class, waits for change of state on digital input

include //Generic Polling "Sensor" Class, polls Arduino pins periodically

include //Master Brain of ST_Anything library that ties everything together and performs ST Shield communications

include //Implements a Polling Sensor (PS) to measure light levels via a photo resistor

include //Implements a Polling Sensor (PS) to measure Temperature and Humidity via DHT library

include //Implements a Polling Sesnor (PS) to measure Temperature via DS18B20 libraries

include //Implements a Polling Sensor (PS) to measure presence of water (i.e. leak detector)

include //Implements an Interrupt Sensor (IS) to detect motion via a PIR sensor

include //Implements an Interrupt Sensor (IS) to monitor the status of a digital input pin

include //Implements an Interrupt Sensor (IS) to monitor the status of a digital input pin

include //Implements an Interrupt Sensor (IS) and Executor to monitor the status of a digital input pin and control a digital output pin

include //Implements an Interrupt Sensor (IS) to monitor the status of a digital input pin for button presses

include //Implements an Executor (EX) via a digital output to a relay

include //Implements Executor (EX)as an Alarm Siren capability via a digital output to a relay

include //Implements a Sensor to control a digital output pin with timing capabilities

// //NodeMCU v1.0 ESP8266-12e Pin Definitions (makes it much easier as these match the board markings) // //#define LED_BUILTIN 16 //#define BUILTIN_LED 16 // //#define D0 16 //no internal pullup resistor

define D1 5

define D2 4

define D3 0 //must not be pulled low during power on/reset, toggles value during boot

define D4 2 //must not be pulled low during power on/reset, toggles value during boot

define D5 14

define D6 12

define D7 13

define D8 15 //must not be pulled high during power on/reset

define D111 //

//** //Define which Arduino Pins will be used for each device //**

//Garage Door Pins

define PIN_DOORCONTROL_CONTACT_1 D1 //SmartThings Capabilty "Door Control"

define PIN_DOORCONTROL_RELAY_1 D2 //SmartThings Capabilty "Door Control"

define PIN_DOORCONTROL_CONTACT_2 D5 //SmartThings Capabilty "Door Control"

define PIN_DOORCONTROL_RELAY_2 D6 //SmartThings Capabilty "Door Control"

define PIN_DOORCONTROL_CONTACT_3 D7 //SmartThings Capabilty "Door Control"

define PIN_DOORCONTROL_RELAY_3 D111 //SmartThings Capabilty "Door Control"

define PIN_TEMPERATUREHUMIDITY_1 D8

//** //ESP8266 WiFi Information //** String str_ssid = "wirelessnetwork"; // <---You must edit this line! String str_password = "wirelesspassword"; // <---You must edit this line! IPAddress ip(192, 168, 45, 8); //Device IP Address // <---You must edit this line! IPAddress gateway(192, 168, 45, 1); //Router gateway // <---You must edit this line! IPAddress subnet(255, 255, 255, 0); //LAN subnet mask // <---You must edit this line! IPAddress dnsserver(192, 168, 45, 1); //DNS server // <---You must edit this line! const unsigned int serverPort = 8090; // port to run the http server on

// Smartthings / Hubitat Hub TCP/IP Address IPAddress hubIp(192, 168, 45, 140); // smartthings/hubitat hub ip // <---You must edit this line!

// SmartThings / Hubitat Hub TCP/IP Address: UNCOMMENT line that corresponds to your hub, COMMENT the other const unsigned int hubPort = 39500; // smartthings hub port // const unsigned int hubPort = 39501; // hubitat hub port

//** //st::Everything::callOnMsgSend() optional callback routine. This is a sniffer to monitor // data being sent to ST. This allows a user to act on data changes locally within the // Arduino sktech. //** void callback(const String &msg) { // Serial.print(F("ST_Anything Callback: Sniffed data = ")); // Serial.println(msg);

//TODO: Add local logic here to take action when a device's value/state is changed

//Masquerade as the ThingShield to send data to the Arduino, as if from the ST Cloud (uncomment and edit following line) //st::receiveSmartString("Put your command here!"); //use same strings that the Device Handler would send }

//** //Arduino Setup() routine //** void setup() { //** //Declare each Device that is attached to the Arduino // Notes: - For each device, there is typically a corresponding "tile" defined in your // SmartThings Device Hanlder Groovy code, except when using new COMPOSITE Device Handler // - For details on each device's constructor arguments below, please refer to the // corresponding header (.h) and program (.cpp) files. // - The name assigned to each device (1st argument below) must match the Groovy // Device Handler names. (Note: "temphumid" below is the exception to this rule // as the DHT sensors produce both "temperature" and "humidity". Data from that // particular sensor is sent to the ST Hub in two separate updates, one for // "temperature" and one for "humidity") // - The new Composite Device Handler is comprised of a Parent DH and various Child // DH's. The names used below MUST not be changed for the Automatic Creation of // child devices to work properly. Simply increment the number by +1 for each duplicate // device (e.g. contact1, contact2, contact3, etc...) You can rename the Child Devices // to match your specific use case in the ST Phone Application. //** //Polling Sensors

//Interrupt Sensors static st::IS_DoorControl sensor1(F("doorControl1"), PIN_DOORCONTROL_CONTACT_1, LOW, true, PIN_DOORCONTROL_RELAY_1, LOW, true, 1000, 1000); static st::IS_DoorControl sensor2(F("doorControl2"), PIN_DOORCONTROL_CONTACT_2, LOW, true, PIN_DOORCONTROL_RELAY_2, LOW, true, 1000, 1000); static st::IS_DoorControl sensor3(F("doorControl3"), PIN_DOORCONTROL_CONTACT_3, LOW, true, PIN_DOORCONTROL_RELAY_3, LOW, true, 1000, 1000); static st::PS_TemperatureHumidity sensor4(F("temphumid1"), 60, 0, PIN_TEMPERATUREHUMIDITY_1, st::PS_TemperatureHumidity::DHT22, "temperature1", "humidity1")

//Executors

//*** // Configure debug print output from each main class // -Note: Set these to "false" if using Hardware Serial on pins 0 & 1 // to prevent communication conflicts with the ST Shield communications //** * st::Everything::debug=true; st::Executor::debug=true; st::Device::debug=true; st::PollingSensor::debug=true; st::InterruptSensor::debug=true;

// //Initialize the "Everything" Class //

//Initialize the optional local callback routine (safe to comment out if not desired) st::Everything::callOnMsgSend = callback;

//Create the SmartThings ESP8266WiFi Communications Object //STATIC IP Assignment - Recommended st::Everything::SmartThing = new st::SmartThingsESP8266WiFi(str_ssid, str_password, ip, gateway, subnet, dnsserver, serverPort, hubIp, hubPort, st::receiveSmartString, "GateESP");

//DHCP IP Assigment - Must set your router's DHCP server to provice a static IP address for this device's MAC address
//st::Everything::SmartThing = new st::SmartThingsESP8266WiFi(str_ssid, str_password, serverPort, hubIp, hubPort, st::receiveSmartString);

//Run the Everything class' init() routine which establishes WiFi communications with SmartThings Hub st::Everything::init();

// //Add each sensor to the "Everything" Class // st::Everything::addSensor(&sensor1); st::Everything::addSensor(&sensor2); st::Everything::addSensor(&sensor3);

// //Add each executor to the "Everything" Class //

// //Initialize each of the devices which were added to the Everything Class // st::Everything::initDevices();

}

//** //Arduino Loop() routine //** void loop() { // //Execute the Everything run method which takes care of "Everything" // st::Everything::run(); }`

ogiewon commented 3 years ago

Firstly, I can't seem to rename doorControl1 to "SingleGate", doorControl2 "DoubleGate", doorControl3 "ManGate". if I do child devices don't get created. This seems to be reproducible, so it must be by design. How do I name my devices so they are easy to distinguish?

Yes, this is by design. Devices can be renamed inside the SmartThings App or the SmartThings IDE by changing their LABEL field.

To add the DHT22, you added 'sensor4' which is good. However, you also need to add sensor4 to the following section of code.

//*****************************************************************************
//Add each sensor to the "Everything" Class
//*****************************************************************************
st::Everything::addSensor(&sensor1);
st::Everything::addSensor(&sensor2);
st::Everything::addSensor(&sensor3);

As for accomplishing your goal... I am not 100% certain what you're trying to achieve with your gates. Please explain in more detail. The 'doorControl' device is designed for a typical North American style garage door. I am not sure how applicable it is to your gates. Please explain the 'gate logic' you require so it will be easier to make sure you're using the correct ST_Anything devices.

ogiewon commented 3 years ago

closed due to lack of activity.