Compare commits

..

5 Commits
master ... test

Author SHA1 Message Date
Gašper Dobrovoljc
b43a0a04e0
Fix 2023-06-12 17:32:58 +02:00
Gašper Dobrovoljc
68af92e209
spremeni v button 2023-05-31 19:28:44 +02:00
Gašper Dobrovoljc
f750f938d4
IP 2023-05-31 18:52:43 +02:00
Gašper Dobrovoljc
5056a3e1c3
izhod 31 2023-05-31 18:46:47 +02:00
Gašper Dobrovoljc
1d4f648b28
Dodal testne 2023-05-31 18:46:03 +02:00
2 changed files with 170 additions and 161 deletions

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"C_Cpp.default.compilerPath": "/opt/homebrew/opt/llvm/bin/clang"
}

View File

@ -1,209 +1,215 @@
//******************************************************************************************
// SmartThings Library for Arduino Ethernet W5x00 Shield
//******************************************************************************************
#include <SmartThingsEthernetW5x00.h> //Library to provide API to the SmartThings Ethernet W5x00 Shield
#include <SmartThingsEthernetW5x00.h>
//******************************************************************************************
// ST_Anything Library
//******************************************************************************************
#include <Constants.h> //Constants.h is designed to be modified by the end user to adjust behavior of the ST_Anything library
#include <Device.h> //Generic Device Class, inherited by Sensor and Executor classes
#include <Everything.h> //Master Brain of ST_Anything library that ties everything together and performs ST Shield communications
#include <Executor.h> //Generic Executor Class, typically receives data from ST Cloud (e.g. Switch)
#include <InterruptSensor.h> //Generic Interrupt "Sensor" Class, waits for change of state on digital input
#include <PollingSensor.h> //Generic Polling "Sensor" Class, polls Arduino pins periodically
#include <Sensor.h> //Generic Sensor Class, typically provides data to ST Cloud (e.g. Temperature, Motion, etc...)
#include <Constants.h>
#include <Device.h>
#include <Everything.h>
#include <Executor.h>
#include <InterruptSensor.h>
#include <PollingSensor.h>
#include <Sensor.h>
#include <EX_Alarm.h> //Implements Executor (EX)as an Alarm capability with Siren and Strobe via digital outputs to relays
#include <EX_Switch.h> //Implements an Executor (EX) via a digital output to a relay
#include <EX_Switch_Dim.h> //Implements an Executor (EX) for a switch (on/off) and pwm output (level) uses 2 digital output pins
#include <IS_Button.h> //Implements an Interrupt Sensor (IS) to monitor the status of a digital input pin for button presses
#include <IS_CarbonMonoxide.h> //Implements an Interrupt Sensor (IS) to monitor the status of a digital input pin
#include <IS_Contact.h> //Implements an Interrupt Sensor (IS) to monitor the status of a digital input pin
#include <IS_DoorControl.h> //Implements an Interrupt Sensor (IS) and Executor to monitor the status of a digital input pin and control a digital output pin
#include <IS_Motion.h> //Implements an Interrupt Sensor (IS) to detect motion via a PIR sensor on a digital input pin
#include <IS_Smoke.h> //Implements an Interrupt Sensor (IS) to monitor the status of a digital input pin
#include <PS_Illuminance.h> //Implements a Polling Sensor (PS) to measure light levels via a photo resistor on an analog input pin
#include <PS_MQ2_Smoke.h> //Implements an Polling Sensor (PS) to monitor the status of an analog input pin from a MQ2 sensor
#include <PS_TemperatureHumidity.h> //Implements a Polling Sensor (PS) to measure Temperature and Humidity via DHT library
#include <PS_Voltage.h> //Implements a Polling Sensor (PS) to measure voltage on an analog input pin
#include <PS_Water.h> //Implements a Polling Sensor (PS) to measure presence of water (i.e. leak detector) on an analog input pin
#include <S_TimedRelay.h> //Implements a Sensor to control a digital output pin with timing/cycle repeat capabilities
#include <EX_Alarm.h>
#include <EX_Switch.h>
#include <EX_Switch_Dim.h>
#include <IS_Button.h>
#include <IS_CarbonMonoxide.h>
#include <IS_Contact.h>
#include <IS_DoorControl.h>
#include <IS_Motion.h>
#include <IS_Smoke.h>
#include <PS_Illuminance.h>
#include <PS_MQ2_Smoke.h>
#include <PS_TemperatureHumidity.h>
#include <PS_Voltage.h>
#include <PS_Water.h>
#include <S_TimedRelay.h>
//**********************************************************************************************************
// Define which Arduino Pins will be used for each device
// Notes: Arduino communicates with both the W5x00 and SD card using the SPI
// bus (through the ICSP header).
// This is on digital pins 10, 11, 12, and 13 on the Uno and pins 50,
// 51, and 52 on the Mega. On both boards, pin 10 is used to select the
// W5x00 and pin 4 for the SD card. These pins cannot be used for
// general I/O. On the Mega, the hardware SS pin, 53, is not used to
// select either the W5x00 or the SD card, but it must be kept as an
// output or the SPI interface won't work. See
// https://www.arduino.cc/en/Main/ArduinoEthernetShieldV1 for details on
// the W5x00 Sield
//**********************************************************************************************************
//"RESERVED" pins for W5x00 Ethernet Shield - best to avoid
#define PIN_4_RESERVED 4 // reserved by W5x00 Shield on both UNO and MEGA
#define PIN_1O_RESERVED 10 // reserved by W5x00 Shield on both UNO and MEGA
#define PIN_11_RESERVED 11 // reserved by W5x00 Shield on UNO
#define PIN_12_RESERVED 12 // reserved by W5x00 Shield on UNO
#define PIN_13_RESERVED 13 // reserved by W5x00 Shield on UNO
#define PIN_50_RESERVED 50 // reserved by W5x00 Shield on MEGA
#define PIN_51_RESERVED 51 // reserved by W5x00 Shield on MEGA
#define PIN_52_RESERVED 52 // reserved by W5x00 Shield on MEGA
#define PIN_53_RESERVED 53 // reserved by W5x00 Shield on MEGA
#define PIN_4_RESERVED 4
#define PIN_1O_RESERVED 10
#define PIN_11_RESERVED 11
#define PIN_12_RESERVED 12
#define PIN_13_RESERVED 13
#define PIN_50_RESERVED 50
#define PIN_51_RESERVED 51
#define PIN_52_RESERVED 52
#define PIN_53_RESERVED 53
// WC
#define PIN_WC_TIPKA_1 24
#define PIN_WC_TIPKA_2 25
#define PIN_WC_ALARM 26
#define PIN_WC_TEMPHUM 27
#define PIN_WC_LUC_1 28
// Hodnik
#define PIN_HODNIK_VRATA_VHOD 29
#define PIN_HODNIK_LUC_1 30
#define PIN_HODNIK_LUC_2 31
#define PIN_HODNIK_LUC_3 32
#define PIN_HODNIK_LUC_4 33
#define PIN_HODNIK_ZVONEC_TIPKA 34
#define PIN_HODNIK_OMARE_LED 35
#define PIN_HODNIK_STROP_LED 36
#define PIN_ZUNAJ_LUC 37
#define PIN_HODNIK_STOPNISCE_SENZOR 38
#define PIN_HODNIK_VRATA_SENZOR 39
// Jedilnica
#define PIN_JEDILNICA_TIPKA_1 40
#define PIN_JEDILNICA_TIPKA_2 41
#define PIN_JEDILNICA_TIPKA_3 42
#define PIN_JEDILNICA_TIPKA_4 43
#define PIN_JEDILNICA_TIPKA_5 44
#define PIN_JEDILNICA_LUC_1 45
#define PIN_JEDILNICA_LUC_2 46
#define PIN_JEDILNICA_LED 47
// Dnevna
#define PIN_DNEVNA_SOBA_LUC_VTICNICA 48
#define PIN_PODSTREHA_TEMPVLAGA 49
#define PIN_DNEVNA_SOBA_TEMPVLAGA 50
// Otroška soba
#define PIN_OTROSKA_TIPKA_1 15
#define PIN_OTROSKA_TIPKA_2 16
//******************************************************************************************
// W5x00 Ethernet Shield Information
//******************************************************************************************
// MAC address, leave first octet 0x06, change others to be unique
byte mac[] = {0x06, 0x02, 0x03, 0x04, 0x05, 0x06};
// Arduino device IP Address
IPAddress ip(192, 168, 88, 206);
IPAddress ip(10, 10, 0, 140);
// Router gateway
IPAddress gateway(192, 168, 88, 1);
IPAddress gateway(10, 10, 0, 1);
// LAN subnet mask
IPAddress subnet(255, 255, 255, 0);
// DNS server
IPAddress dnsserver(192, 168, 88, 1);
IPAddress dnsserver(10, 10, 0, 1);
// port to run the http server on
const unsigned int serverPort = 8090;
// Smartthings Hub Information
// IPAddress hubIp(192, 168, 1, 149); // smartthings hub ip // <---You
// must edit this line! const unsigned int hubPort = 39500; // smartthings hub
// port
// Hubitat Hub Information
// hubitat hub ip
IPAddress hubIp(192, 168, 88, 251);
// hubitat hub port
const unsigned int hubPort = 39501;
//******************************************************************************************
// 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 withotu having to rely on the ST Cloud for
// time-critical tasks.
//******************************************************************************************
void callback(const String &msg) {
// Uncomment if it weould be desirable to using this function
// Serial.print(F("ST_Anything_Miltiples 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(s) as you see fit)
// 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
static st::IS_Button wcTipka1(F("button1"), PIN_WC_TIPKA_1);
static st::IS_Button wcTipka2(F("button2"), PIN_WC_TIPKA_2);
static st::IS_Motion wcAlarm(F("motion1"), PIN_WC_ALARM, HIGH, true);
static st::PS_TemperatureHumidity wcTempVlaga(
F("temphumid1"), 60, 40, PIN_WC_TEMPHUM,
st::PS_TemperatureHumidity::DHT22, "temperature1", "humidity1");
static st::IS_Button hodnikZvonecTipka(F("button3"), PIN_HODNIK_ZVONEC_TIPKA);
static st::IS_Motion hodnikStopnisceSenzor(
F("motion2"), PIN_HODNIK_STOPNISCE_SENZOR, LOW, true);
static st::IS_Motion hodnikVrataSenzor(F("motion3"), PIN_HODNIK_VRATA_SENZOR,
LOW, true);
static st::IS_Button jedilnicaTipka1(F("button4"), PIN_JEDILNICA_TIPKA_1);
static st::IS_Button jedilnicaTipka2(F("button5"), PIN_JEDILNICA_TIPKA_2);
static st::IS_Button jedilnicaTipka3(F("button6"), PIN_JEDILNICA_TIPKA_3);
static st::IS_Button jedilnicaTipka4(F("button7"), PIN_JEDILNICA_TIPKA_4);
static st::IS_Button jedilnicaTipka5(F("button8"), PIN_JEDILNICA_TIPKA_5);
static st::IS_Button otroskaSobaTipka1(F("button9"), PIN_OTROSKA_TIPKA_1);
static st::IS_Button otroskaSobaTipka2(F("button10"), PIN_OTROSKA_TIPKA_2);
static st::PS_TemperatureHumidity podstrehaTempVlaga(
F("temphumid2"), 60, 40, PIN_PODSTREHA_TEMPVLAGA,
st::PS_TemperatureHumidity::DHT22, "temperature2", "humidity2");
static st::PS_TemperatureHumidity dnevnaSobaTempVlaga(
F("temphumid3"), 60, 40, PIN_DNEVNA_SOBA_TEMPVLAGA,
st::PS_TemperatureHumidity::DHT22, "temperature3", "humidity3");
static st::IS_Button button1(F("button1"), 24);
static st::IS_Button button2(F("button2"), 25);
static st::IS_Button button3(F("button3"), 26);
static st::IS_Button button4(F("button4"), 27);
// Executors
static st::EX_Switch wcLuc1(F("switch1"), PIN_WC_LUC_1);
static st::EX_Switch hodnikVrataVhod(F("switch2"), PIN_HODNIK_VRATA_VHOD);
static st::EX_Switch hodnikLuc1(F("switch3"), PIN_HODNIK_LUC_1);
static st::EX_Switch hodnikLuc2(F("switch4"), PIN_HODNIK_LUC_2);
static st::EX_Switch hodnikLuc3(F("switch5"), PIN_HODNIK_LUC_3);
static st::EX_Switch hodnikLuc4(F("switch6"), PIN_HODNIK_LUC_4);
static st::EX_Switch hodnikOmareLed(F("switch7"), PIN_HODNIK_OMARE_LED);
static st::EX_Switch hodnikStropLed(F("switch8"), PIN_HODNIK_STROP_LED);
static st::EX_Switch zunajLuc(F("switch9"), PIN_ZUNAJ_LUC);
static st::EX_Switch jedilnicaLuc1(F("switch10"), PIN_JEDILNICA_LUC_1);
static st::EX_Switch jedilnicaLuc2(F("switch11"), PIN_JEDILNICA_LUC_2);
static st::EX_Switch jedilnicaLed(F("switch12"), PIN_JEDILNICA_LED);
static st::EX_Switch dnevnaSobaLucVticnica(F("switch13"),
PIN_DNEVNA_SOBA_LUC_VTICNICA);
static st::EX_Switch switch1(F("switch1"), 28);
static st::EX_Switch switch2(F("switch2"), 29);
static st::EX_Switch switch3(F("switch3"), 30);
static st::EX_Switch switch4(F("switch4"), 31);
//*****************************************************************************
// Configure debug print output from each main class
//*****************************************************************************
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 EthernetW5x00 Communications Object
// STATIC IP Assignment - Recommended
st::Everything::SmartThing = new st::SmartThingsEthernetW5x00(
mac, ip, gateway, subnet, dnsserver, serverPort, hubIp, hubPort,
st::receiveSmartString);
// 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::SmartThingsEthernetW5x00(mac, serverPort, hubIp, hubPort,
// st::receiveSmartString);
// Run the Everything class' init() routine which establishes Ethernet
// communications with the SmartThings Hub
st::Everything::init();
// Sensors
//*****************************************************************************
// Add each sensor to the "Everything" Class
//*****************************************************************************
st::Everything::addSensor(&button1);
st::Everything::addSensor(&button2);
st::Everything::addSensor(&button3);
st::Everything::addSensor(&button4);
st::Everything::addSensor(&wcTipka2);
st::Everything::addSensor(&wcTipka2);
st::Everything::addSensor(&wcAlarm);
st::Everything::addSensor(&wcTempVlaga);
st::Everything::addSensor(&hodnikZvonecTipka);
st::Everything::addSensor(&hodnikStopnisceSenzor);
st::Everything::addSensor(&hodnikVrataSenzor);
st::Everything::addSensor(&jedilnicaTipka1);
st::Everything::addSensor(&jedilnicaTipka2);
st::Everything::addSensor(&jedilnicaTipka3);
st::Everything::addSensor(&jedilnicaTipka4);
st::Everything::addSensor(&jedilnicaTipka5);
st::Everything::addSensor(&podstrehaTempVlaga);
st::Everything::addSensor(&dnevnaSobaTempVlaga);
st::Everything::addSensor(&otroskaSobaTipka1);
st::Everything::addSensor(&otroskaSobaTipka2);
// Executors
st::Everything::addExecutor(&wcLuc1);
st::Everything::addExecutor(&hodnikVrataVhod);
st::Everything::addExecutor(&hodnikLuc1);
st::Everything::addExecutor(&hodnikLuc2);
st::Everything::addExecutor(&hodnikLuc3);
st::Everything::addExecutor(&hodnikLuc4);
st::Everything::addExecutor(&hodnikOmareLed);
st::Everything::addExecutor(&hodnikStropLed);
st::Everything::addExecutor(&zunajLuc);
st::Everything::addExecutor(&jedilnicaLuc1);
st::Everything::addExecutor(&jedilnicaLuc2);
st::Everything::addExecutor(&jedilnicaLed);
st::Everything::addExecutor(&dnevnaSobaLucVticnica);
//*****************************************************************************
// Add each executor to the "Everything" Class
//*****************************************************************************
st::Everything::addExecutor(&switch1);
st::Everything::addExecutor(&switch2);
st::Everything::addExecutor(&switch3);
st::Everything::addExecutor(&switch4);
//*****************************************************************************
// Initialize each of the devices which were added to the Everything Class
//*****************************************************************************
st::Everything::initDevices();
}
void loop() { st::Everything::run(); }
//******************************************************************************************
// Arduino Loop() routine
//******************************************************************************************
void loop() {
//*****************************************************************************
// Execute the Everything run method which takes care of "Everything"
//*****************************************************************************
st::Everything::run();
}