#define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_RF24 // #define MY_RF24_PA_LEVEL RF24_PA_MIN // #define MY_RF24_PA_LEVEL RF24_PA_LOW #define MY_RF24_PA_LEVEL RF24_PA_HIGH //#define MY_RF24_PA_LEVEL RF24_PA_MAX #define MY_RF24_CHANNEL 14 // // INFO coincell optimization // // https://www.openhardware.io/view/398/NModule-Temperature-Humidity-Light-Door-sensor-shield#tabs-source // #define MY_TRANSPORT_UPLINK_CHECK_DISABLED // Timeout for transport to be ready during initialization, after this duration, even if it didn't manage to enable transport the node will enter the loop() method // For battery powered nodes, I set this to 5000 so after 5 seconds it will stop eating the battery // 5s is long enough to connect to gateway so you should connect your node back to your computer and check the log if your node cannot connect #define MY_TRANSPORT_WAIT_READY_MS 5000 // no more than 5 seconds of waiting for transport to be ready // Reduce maximum delay before going to sleep, as we do not want to kill the battery if gateway is not available // Before going to sleep MySensors will make sure we don't have a connection problem to MySensors network // If this value is too high and you have connection problem, MySensors will never go to sleep and bye bye battery ... // If using AA/AAA batteries you can set a longer duration like 5000ms #define MY_SLEEP_TRANSPORT_RECONNECT_TIMEOUT_MS 2000 #define MY_SKETCH_NAME "vorke_wol" // #define MY_SIGNING_SIMPLE_PASSWD "C@KptBi1L@5op?8!" // #define MY_SECURITY_SIMPLE_PASSWD "C@KptBi1L@5op?8!" #include #include #define CHILD_ID_RELAY 1 #define CHILD_ID_STATUS 2 MyMessage msgRelay(CHILD_ID_RELAY, V_STATUS); MyMessage msgStatus(CHILD_ID_STATUS, V_STATUS); #define SWITCH_PIN 7 // Connects to PC817 Anode (Pin D7) #define STATUS_PIN 3 // Connects to PC817 Anode (Pin D7) // detecter si l'ordi est alumé (a partir des led du front panel) // const int statusPin = A1; // float vOUT = 0.0; // float vIN = 0.0; // float R1 = 10000.0; // float R2 = 1000.0; // int value = 0; int status = 0; int old_status = 0; void presentation() { #ifdef MY_DEBUG Serial.println("- - - - - presentation - - - - -"); #endif // Send the sketch version information to the gateway sendSketchInfo("vorke-wol", "0.2.4"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID_RELAY, S_BINARY, "Button"); present(CHILD_ID_STATUS, S_BINARY, "Status"); } void setup(void) { #ifdef MY_DEBUG Serial.println("- - - - - setup - - - - -"); #endif // sensors.begin(); pinMode(STATUS_PIN, INPUT); pinMode(SWITCH_PIN, OUTPUT); digitalWrite(SWITCH_PIN, LOW); // Turn OFF the optocoupler send(msgRelay.set(0)); send(msgStatus.set(0)); } void loop(void) { // #ifdef MY_DEBUG // Serial.println("- - - - - loop - - - - -"); // #endif // état de l'ordi // value = analogRead(statusPin); // vOUT = (value * 3.3) / 1024.0; // vIN = vOUT / (R2 / (R1 + R2)); // if (vIN >= 0.5) { // status = 1; // }else{ // status = 0; // } int value = digitalRead(STATUS_PIN); if (value == LOW) { status = 1; }else{ status = 0; } if( status != old_status){ #ifdef MY_DEBUG Serial.print(F("Status: ")); // Serial.print(F("vIN: ")); // Serial.print(vIN); Serial.print(F(" status: ")); Serial.println(status); #endif old_status = status; send(msgStatus.set(status)); } // digitalWrite(SWITCH_PIN, HIGH); // Turn ON the optocoupler (Activates output) // send(msgRelay.set(1)); // delay(1000); // Wait 2 seconds // digitalWrite(SWITCH_PIN, LOW); // Turn OFF the optocoupler // send(msgRelay.set(0)); // sleep(10000); } // info https://www.home-assistant.io/integrations/mysensors/#light-example-sketch-for-mysensors-2x // Handle incoming messages void receive(const MyMessage &message) { #ifdef MY_DEBUG Serial.println("- - - - - receive - - - - -"); #endif if (message.type == V_STATUS) { // Write some debug info Serial.print("Incoming change for sensor:"); Serial.print(message.getSensor()); Serial.print(", New status: "); Serial.println(message.getBool()); int newstatus = message.getInt(); switch (message.sensor) { case CHILD_ID_RELAY: if (newstatus == 1) { if ( status == 0){ digitalWrite(SWITCH_PIN, HIGH); // Turn ON the optocoupler (Activates output) send(msgRelay.set(1)); sleep(500); digitalWrite(SWITCH_PIN, LOW); // Turn ON the optocoupler (Activates output) } send(msgRelay.set(0)); } break; case CHILD_ID_STATUS: send(msgStatus.set(status)); break; } } }