@AWI i've since done some more work on this and discovered the switched 3.95v didn't share a common ground with the rest of the circuit. So i ended up hooking up a DIL reed relay PRMA 0105 (5v) onto it, and used the relay contacts to connect to pin D3 on my nano.
So i've got it operating that whenever the motion sensor is tripped it toggles my 1 channel relay board, but what isn't working is being able to manually switch it from in domoticz.
Would someone be able to take a look at my code which i've taken from this thread
My code is:
/*
DESCRIPTION
Sketch for 1x relay with buttons bistable. After back power all relays set OFF and send correct status OFF to controller.
*/
// Enable debug prints to serial monitor
#define MY_DEBUG
// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69
// Enabled repeater feature for this node
#define MY_REPEATER_FEATURE
#include <SPI.h>
#include <MySensors.h>
#include <Bounce2.h>
// Define Relays
#define RELAY_ON 1 // GPIO value to write to turn on attached relay
#define RELAY_OFF 0 // GPIO value to write to turn off attached relay
// Define Sensor ID's
#define SSR_A_ID 1 // Id of the sensor child
// Define buttons and relays
const int buttonPinA = 3;
const int relayPinA = 4;
// Define Variables
int oldValueA = 0;
bool stateA = false;
int trigger = 0;
Bounce debouncerA = Bounce();
MyMessage msgA(SSR_A_ID, V_STATUS);
void setup()
{
pinMode(buttonPinA, INPUT_PULLUP); // Setup the button Activate internal pull-up
// After setting up the buttons, setup debouncer
debouncerA.attach(buttonPinA);
debouncerA.interval(5);
// Make sure relays are off when starting up
digitalWrite(relayPinA, RELAY_OFF);
// Then set relay pins in output mode
pinMode(relayPinA, OUTPUT);
/*--------------------- Added these lines for toggle switch-------------------------*/
oldValueA = digitalRead(buttonPinA); // set oldValueA to the current status of the toggle switch
// send(msgA.set(false)); // Send off state for relayA to ensure controller knows the switch is off
// send(msgB.set(false)); // Send off state for relayB to ensure controller knows the switch is off
}
void presentation() {
// Send the sketch version information to the gateway and Controller
sendSketchInfo("Relay with Bistable", "1.1");
// Register all sensors to gw (they will be created as child devices)
present(SSR_A_ID, S_LIGHT);
}
/*
Example on how to asynchronously check for new messages from gw
*/
void loop()
{
if (trigger == 0){
send(msgA.set(false)); // Send off state for relayA to ensure controller knows the switch is off
trigger = 1;
}
debouncerA.update();
// Get the update value
int valueA = debouncerA.read();
if (valueA != oldValueA) {
// send(msgA.set(stateA ? false : true), true); // Send new state and request ack back
send(msgA.set(stateA ? false : true), false); // Send new state with no request for ack
stateA = stateA ? false : true; // invert the state
digitalWrite(relayPinA, stateA ? RELAY_ON : RELAY_OFF); // toggle the relay
oldValueA = valueA;
}
}
void receive(const MyMessage &message) {
// We only expect one type of message from controller. But we better check anyway.
if (message.type == V_STATUS) {
switch (message.sensor) {
case 1:
stateA = message.getBool();
digitalWrite(message.sensor + 4, stateA ? RELAY_ON : RELAY_OFF);
break;
case 2:
break;
}
// Write some debug info
Serial.print("Incoming change for sensor:");
Serial.println(message.sensor);
Serial.print("from node:");
Serial.println(message.sender);
Serial.print(", New status: ");
Serial.println(message.getBool());
}
}