Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. General Discussion
  3. temp sensor keep on loging status switch

temp sensor keep on loging status switch

Scheduled Pinned Locked Moved General Discussion
10 Posts 2 Posters 1.8k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • DickD Offline
    DickD Offline
    Dick
    wrote on last edited by Dick
    #1

    I have a working sensor that checks the temp om 2 places. If needed it wil switch on/of a Fan. That is all working perfect only this sensor logs continue the status of the switch. i am using Domoticz.
    the log looks like this:

    2017-01-05 19:24:18.747 EventSystem: Event triggered: ventilator aan/uit_2
    2017-01-05 19:24:18.741 (MySensors GW1) Temp (Temp serre)
    2017-01-05 19:24:18.960 (MySensors GW1) Lighting 2 (Temp Fan switch)
    2017-01-05 19:24:48.736 EventSystem: Event triggered: ventilator aan/uit_2
    2017-01-05 19:24:48.730 (MySensors GW1) Temp (Temp serre)
    2017-01-05 19:24:49.068 (MySensors GW1) Lighting 2 (Temp Fan switch)
    2017-01-05 19:26:49.032 EventSystem: Event triggered: ventilator aan/uit_2
    2017-01-05 19:26:49.027 (MySensors GW1) Temp (Temp binnen)
    2017-01-05 19:26:49.182 (MySensors GW1) Lighting 2 (Temp Fan switch)
    2017-01-05 19:27:49.049 EventSystem: Event triggered: ventilator aan/uit_2
    2017-01-05 19:27:49.044 (MySensors GW1) Temp (Temp serre)
    2017-01-05 19:27:49.291 (MySensors GW1) Lighting 2 (Temp Fan switch)
    2017-01-05 19:28:48.988 EventSystem: Event triggered: ventilator aan/uit_2
    2017-01-05 19:28:48.985 (MySensors GW1) Temp (Temp binnen)
    2017-01-05 19:28:49.401 (MySensors GW1) Lighting 2 (Temp Fan switch)
    2017-01-05 19:29:18.972 EventSystem: Event triggered: ventilator aan/uit_2 italicised text

    This is my code

    #include <MySensor.h>
    #include <SPI.h>
    #include <Bounce2.h>
    #include <DallasTemperature.h>
    #include <OneWire.h>
    
    // Partie Température
    #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No
    
    #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
    #define MAX_ATTACHED_DS18B20 16
    unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)
    OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. 
    float lastTemperature[MAX_ATTACHED_DS18B20];
    int numSensors=0;
    boolean receivedConfig = false;
    boolean metric = true; 
    // Initialize temperature message
    MyMessage msg(0,V_TEMP);
    
    // Partie Relay
    #define RELAY_PIN  A1  // Arduino Digital I/O pinnumber for relay 
    #define BUTTON_PIN  A3   // Arduino Digital I/O pin number for button 
    #define CHILD_ID 17   // Id of the sensor child
    #define RELAY_ON 1
    #define RELAY_OFF 0
    
    Bounce debouncer = Bounce(); 
    int oldValue=0;
    bool state;
    
    unsigned long previousMillis = 0;
    
    MySensor gw;
    MyMessage msg2(CHILD_ID,V_LIGHT);
    
    void setup()  
    {  
      // Startup up the OneWire library
      sensors.begin();
      // requestTemperatures() will not block current thread
      sensors.setWaitForConversion(false);
    
      gw.begin(incomingMessage, AUTO, true);
    
      // Send the sketch version information to the gateway and Controller
      gw.sendSketchInfo("Relay & Button", "1.0");
      gw.sendSketchInfo("Temperature Sensor", "1.1");
      
        // Fetch the number of attached temperature sensors  
      numSensors = sensors.getDeviceCount();
      Serial.print(numSensors);
      Serial.println(" temperature sensors detected");
      
     // Setup the button
      pinMode(BUTTON_PIN,INPUT);
      // Activate internal pull-up
      digitalWrite(BUTTON_PIN,HIGH);
      
      // After setting up the button, setup debouncer
      debouncer.attach(BUTTON_PIN);
      debouncer.interval(5);
    
      // Present all sensors to controller
      for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
         gw.present(i, S_TEMP);
          }
      // Register all sensors to gw (they will be created as child devices)
      gw.present(CHILD_ID, S_LIGHT);
    
      // Make sure relays are off when starting up
      digitalWrite(RELAY_PIN, RELAY_OFF);
      // Then set relay pins in output mode
      pinMode(RELAY_PIN, OUTPUT);   
          
      // Set relay to last known state (using eeprom storage) 
      state = gw.loadState(CHILD_ID);
      digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
    }
    
    
    /*
    *  Example on how to asynchronously check for new messages from gw
    */
    void loop() 
    {
      gw.process();
    
      // Relay button
      debouncer.update();
      // Get the update value
      int value = debouncer.read();
      if (value != oldValue && value==0) {
          gw.send(msg2.set(state?false:true), true); // Send new state and request ack back
      }
      oldValue = value;
      
      // Fetch temperatures from Dallas sensors
      sensors.requestTemperatures();
    
      // query conversion time and sleep until conversion completed
      //int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
      unsigned long currentMillis = millis();
      // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
      // gw.wait(conversionTime);
    
    // Read temperatures and send them to controller 
      if (currentMillis - previousMillis >= SLEEP_TIME) {
        // save the last time you read temperature
        previousMillis = currentMillis;
        for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
     
          // Fetch and round temperature to one decimal
          float temperature = static_cast<float>(static_cast<int>((gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
       
          // Only send data if temperature has changed and no error
          #if COMPARE_TEMP == 1
          if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) {
          #else
          if (temperature != -127.00 && temperature != 85.00) {
          #endif
       
            // Send in the new temperature
            gw.send(msg.setSensor(i).set(temperature,1));
            // Save new temperatures for next compare
            lastTemperature[i]=temperature;
            }
         }
      }
    } 
     
    void incomingMessage(const MyMessage &message) {
      // We only expect one type of message from controller. But we better check anyway.
      if (message.isAck()) {
         Serial.println("This is an ack from gateway");
      }
    
      if (message.type == V_LIGHT) {
         // Change relay state
         state = message.getBool();
         digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
         // Store state in eeprom
         gw.saveState(CHILD_ID, state);
        
         // Write some debug info
         Serial.print("Incoming change for sensor:");
         Serial.print(message.sensor);
         Serial.print(", New status: ");
         Serial.println(message.getBool());
       } 
    }
    
    

    Does anyone know why it produce that large amount of logs?

    1 Reply Last reply
    0
    • F Offline
      F Offline
      flopp
      wrote on last edited by
      #2

      The nodes send the data every 30 second, the log is ok.
      You will get one line in the log very time a node report something.
      It look like you also have an Event that gets trigger every time one of the nodes send data.

      1 Reply Last reply
      1
      • DickD Offline
        DickD Offline
        Dick
        wrote on last edited by Dick
        #3

        Yes you are right there is an Event. Do I have to add a timer or delay function in it or something else?
        0_1483688427490_event.png

        1 Reply Last reply
        0
        • F Offline
          F Offline
          flopp
          wrote on last edited by
          #4

          Depends on what you want to do with these temp/relay?

          The log will still get all these lines even if you add a delay.

          1 Reply Last reply
          0
          • DickD Offline
            DickD Offline
            Dick
            wrote on last edited by Dick
            #5

            this sensor only messure the temp on 2 different locations and as seen in the Event, if the temp inside (TEMP binnen temp) <- 20 and the temp in the glasshouse is >-26 the fan switch on and the second part of the Event only switch of the Fan if the temp inside is to high (>-26) or the temp in the glasshouse is <-27. that is all I want with this project. I only want the mesurement every 15 min for example

            1 Reply Last reply
            0
            • F Offline
              F Offline
              flopp
              wrote on last edited by
              #6

              Ok.

              Then change Sleeptime to 900000, today you have 30000

              900000 = 60000 * 15 minutes

              1 Reply Last reply
              1
              • DickD Offline
                DickD Offline
                Dick
                wrote on last edited by
                #7

                that was easy, I do it right away. Thanks for the support and this stopped me for changing other parts of the event of the code of the sensor.
                Have a nice day!

                1 Reply Last reply
                2
                • F Offline
                  F Offline
                  flopp
                  wrote on last edited by
                  #8

                  This is not a battery node, right?

                  Because this node never sleep, so it will consume battery all the time.

                  1 Reply Last reply
                  0
                  • DickD Offline
                    DickD Offline
                    Dick
                    wrote on last edited by
                    #9

                    no good to mention, That is a new project for me to build an efficience battery powered node. In this case it is powered by an external power source.

                    1 Reply Last reply
                    0
                    • F Offline
                      F Offline
                      flopp
                      wrote on last edited by
                      #10

                      :thumbsup:

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      26

                      Online

                      11.7k

                      Users

                      11.2k

                      Topics

                      113.1k

                      Posts


                      Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • MySensors
                      • OpenHardware.io
                      • Categories
                      • Recent
                      • Tags
                      • Popular