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. Hardware
  3. About DS18B20 onewire.

About DS18B20 onewire.

Scheduled Pinned Locked Moved Hardware
dallasone wireonewireds18b20
48 Posts 5 Posters 12.4k Views 10 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.
  • pepsonP pepson

    @mfalkvidd
    OK but also must add defined description to all address. But how add also description?

    rejoe2R Offline
    rejoe2R Offline
    rejoe2
    wrote on last edited by
    #36

    @pepson said in About DS18B20 onewire.:

    @mfalkvidd
    OK but also must add defined description to all address. But how add also description?

    Don't know, if that really works, because I never tested it since my controller sw supports comments: https://github.com/rejoe2/MySensors-Dallas-Address-ChildID-Consistency/blob/master/DallasTemperatureSimple/DallasTemperatureSimple.ino

    Controller: FHEM; MySensors: 2.3.1, RS485,nRF24,RFM69, serial Gateways

    pepsonP 1 Reply Last reply
    0
    • rejoe2R rejoe2

      @pepson said in About DS18B20 onewire.:

      @mfalkvidd
      OK but also must add defined description to all address. But how add also description?

      Don't know, if that really works, because I never tested it since my controller sw supports comments: https://github.com/rejoe2/MySensors-Dallas-Address-ChildID-Consistency/blob/master/DallasTemperatureSimple/DallasTemperatureSimple.ino

      pepsonP Offline
      pepsonP Offline
      pepson
      wrote on last edited by
      #37

      @rejoe2
      But where in sketch you define address and description ?

      rejoe2R 1 Reply Last reply
      0
      • pepsonP pepson

        @rejoe2
        But where in sketch you define address and description ?

        rejoe2R Offline
        rejoe2R Offline
        rejoe2
        wrote on last edited by
        #38

        @pepson That's not necessary: The sketch reads the bus to get all the necessary info and will just send whatever is found.

        If you want a "hardcoded version", you'd have to addopt the sketch for something in between these variants: if you use an array for the 1-wire addresses like https://github.com/rejoe2/MySensors-Dallas-Address-ChildID-Consistency/blob/master/Dallas_Addresses_Array_Solution/Dallas_Addresses_Array_Solution.ino does, just built the comment char-array based on that info.

        Controller: FHEM; MySensors: 2.3.1, RS485,nRF24,RFM69, serial Gateways

        pepsonP 1 Reply Last reply
        0
        • rejoe2R rejoe2

          @pepson That's not necessary: The sketch reads the bus to get all the necessary info and will just send whatever is found.

          If you want a "hardcoded version", you'd have to addopt the sketch for something in between these variants: if you use an array for the 1-wire addresses like https://github.com/rejoe2/MySensors-Dallas-Address-ChildID-Consistency/blob/master/Dallas_Addresses_Array_Solution/Dallas_Addresses_Array_Solution.ino does, just built the comment char-array based on that info.

          pepsonP Offline
          pepsonP Offline
          pepson
          wrote on last edited by
          #39

          @rejoe2 said in About DS18B20 onewire.:

          If you want a "hardcoded version", you'd have to addopt the sketch for something in between these variants: if you use an array for the 1-wire addresses like https://github.com/rejoe2/MySensors-Dallas-Address-ChildID-Consistency/blob/master/Dallas_Addresses_Array_Solution/Dallas_Addresses_Array_Solution.ino does, just built the comment char-array based on that info.

          Ok i know how add to present description , but still dont know how add description to each sensors.... as in sketch for relay as i show as example.

          rejoe2R 1 Reply Last reply
          0
          • pepsonP pepson

            @rejoe2 said in About DS18B20 onewire.:

            If you want a "hardcoded version", you'd have to addopt the sketch for something in between these variants: if you use an array for the 1-wire addresses like https://github.com/rejoe2/MySensors-Dallas-Address-ChildID-Consistency/blob/master/Dallas_Addresses_Array_Solution/Dallas_Addresses_Array_Solution.ino does, just built the comment char-array based on that info.

            Ok i know how add to present description , but still dont know how add description to each sensors.... as in sketch for relay as i show as example.

            rejoe2R Offline
            rejoe2R Offline
            rejoe2
            wrote on last edited by
            #40

            @pepson I'd suggest you make a test with the "simple" variant of the sketches. Then we could lateron discuss how to deal with an array containing the hardcoded addresses.
            Pls. make also a test with the hardcoded version. Afai remember, it will print the needed array to serial, as long as #define PRINT_ARRAY isn't commented.

            Controller: FHEM; MySensors: 2.3.1, RS485,nRF24,RFM69, serial Gateways

            1 Reply Last reply
            0
            • mfalkviddM mfalkvidd

              @pepson yes. Just change the present call, just like in your sketch.

              Example: change

              present(i, S_HEATER);
              

              to

              present(i, S_HEATER, "Description goes here");
              
              pepsonP Offline
              pepsonP Offline
              pepson
              wrote on last edited by
              #41

              @mfalkvidd Can you help me... or change it ?

              1 Reply Last reply
              0
              • F flopp
                /**
                 * The MySensors Arduino library handles the wireless radio link and protocol
                 * between your home built sensors/actuators and HA controller of choice.
                 * The sensors forms a self healing radio network with optional repeaters. Each
                 * repeater and gateway builds a routing tables in EEPROM which keeps track of the
                 * network topology allowing messages to be routed to nodes.
                 *
                 * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
                 * Copyright (C) 2013-2015 Sensnology AB
                 * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
                 *
                 * Documentation: http://www.mysensors.org
                 * Support Forum: http://forum.mysensors.org
                 *
                 * This program is free software; you can redistribute it and/or
                 * modify it under the terms of the GNU General Public License
                 * version 2 as published by the Free Software Foundation.
                 *
                 *******************************
                 *
                 * DESCRIPTION
                 *
                 * Example sketch showing how to send in DS1820B OneWire temperature readings back to the controller
                 * http://www.mysensors.org/build/temp
                 */
                 
                // Enable and select radio type attached
                #define MY_RADIO_NRF24
                
                // Enable debug prints to serial monitor
                #define MY_DEBUG
                
                #define MY_NODE_ID 14
                
                #include <SPI.h>
                #include <MySensors.h>
                #include <DallasTemperature.h>
                
                #define COMPARE_TEMP 0 // Send temperature only if changed? 1 = Yes 0 = No
                
                #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
                #define ATTACHED_DS18B20 40
                unsigned long SLEEP_TIME = 60000; // 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. 
                
                byte D[ATTACHED_DS18B20][8] = {
                { 0x10, 0x04, 0xB8, 0x3F, 0x02, 0x08, 0x00, 0xBD }, //KökTbx
                { 0x10, 0xF4, 0xD7, 0x3F, 0x02, 0x08, 0x00, 0xB1 }, //UppTbx
                { 0x10, 0x92, 0x9F, 0x3E, 0x02, 0x08, 0x00, 0x98 }, //KökUt
                { 0x10, 0x4E, 0xE4, 0x3E, 0x02, 0x08, 0x00, 0x3C }, //ToaUt
                { 0x10, 0x1E, 0xE8, 0x3E, 0x02, 0x08, 0x00, 0x33 }, //EfterPump
                { 0x10, 0x09, 0xA1, 0x3E, 0x02, 0x08, 0x00, 0xF7 }, //HallTbx
                { 0x10, 0x59, 0xCB, 0x3F, 0x02, 0x08, 0x00, 0xFA }, //UppUt
                { 0x10, 0x07, 0x1B, 0x3F, 0x02, 0x08, 0x00, 0x99 }, //ToaTbx
                { 0x28, 0xFF, 0xB1, 0xAA, 0x63, 0x15, 0x03, 0xC8 }, //Kök 
                { 0x10, 0x80, 0xB6, 0x3F, 0x02, 0x08, 0x00, 0x29 }, //Panna komp
                { 0x10, 0x3C, 0x9C, 0x3E, 0x02, 0x08, 0x00, 0x99 }, //Hall ut
                { 0x10, 0x42, 0xE0, 0x3F, 0x02, 0x08, 0x00, 0xD1 }, //Tvätt
                { 0x10, 0xCE, 0xE9, 0x3E, 0x02, 0x08, 0x00, 0x3A }, //T12
                { 0x10, 0x99, 0xAC, 0x3F, 0x02, 0x08, 0x00, 0x25 }, //V mellan
                { 0x10, 0x15, 0xDB, 0x3E, 0x02, 0x08, 0x00, 0x01 }, //Hallen
                { 0x10, 0xF3, 0xD7, 0x3F, 0x02, 0x08, 0x00, 0x34 }, //Panna El
                { 0x10, 0xFB, 0xCB, 0x3F, 0x02, 0x08, 0x00, 0xC8 }, //Toa Nere
                { 0x10, 0x97, 0x23, 0x3F, 0x02, 0x08, 0x00, 0x92 }, //Varmvatten
                { 0x10, 0x0F, 0xE6, 0x3E, 0x02, 0x08, 0x00, 0xFD }, //Carport
                { 0x10, 0xF3, 0xC6, 0x3F, 0x02, 0x08, 0x00, 0x85 }, //Förrådet
                { 0x10, 0x9C, 0x3B, 0x52, 0x02, 0x08, 0x00, 0x25 }, //Mark 60
                { 0x10, 0xF2, 0x24, 0x3F, 0x02, 0x08, 0x00, 0xEB }, //Vrum V
                { 0x10, 0x6A, 0x5E, 0x52, 0x02, 0x08, 0x00, 0x26 }, //Mark 30
                { 0x10, 0x76, 0xCE, 0x3F, 0x02, 0x08, 0x00, 0xBA }, //Plattan
                { 0x10, 0x0E, 0x7B, 0x13, 0x02, 0x08, 0x00, 0x7C }, //Utetemp
                { 0x10, 0xEE, 0xEB, 0x3E, 0x02, 0x08, 0x00, 0x0F }, //Uterum
                { 0x28, 0x8C, 0x2D, 0xB4, 0x04, 0x00, 0x00, 0x9C }, //Kyl uppe
                { 0x28, 0xFF, 0xB2, 0x74, 0x63, 0x15, 0x02, 0xCC }, //Kyl mitten
                { 0x28, 0xFF, 0x08, 0x07, 0x52, 0x04, 0x00, 0xFF }, //Kyl nere
                { 0x28, 0xFF, 0xE6, 0x06, 0x52, 0x04, 0x00, 0x08 }, //Frys uppe
                { 0x28, 0xFF, 0xB4, 0x07, 0x55, 0x04, 0x00, 0xEB }, //Kyl bakom
                { 0x10, 0x1C, 0xA8, 0x3F, 0x02, 0x08, 0x00, 0x3B }, //Lucas
                { 0x10, 0x83, 0x3C, 0x3F, 0x02, 0x08, 0x00, 0x06 }, //Allrum
                { 0x10, 0xA3, 0xE8, 0x3E, 0x02, 0x08, 0x00, 0x7E }, //Theo
                { 0x10, 0x33, 0x3C, 0x3F, 0x02, 0x08, 0x00, 0x01 }, //Sovrum
                { 0x28, 0xFF, 0xFB, 0x3D, 0xC3, 0x16, 0x03, 0x58 }, //Panna luft in(varm)
                { 0x28, 0xFF, 0xD4, 0x1C, 0x00, 0x17, 0x03, 0x43 }, //Dränering
                { 0x28, 0xFF, 0x97, 0x11, 0x01, 0x15, 0x04, 0xC0 } // Poolvatten
                
                };
                
                float lastTemperature[ATTACHED_DS18B20];
                // Initialize temperature message
                MyMessage msg(0,V_TEMP);
                MyMessage heat(0,V_STATUS);
                
                void setup()  
                { 
                  // Startup up the OneWire library
                  sensors.begin();
                  // requestTemperatures() will not block current thread
                  sensors.setWaitForConversion(false);
                }
                void presentation() {
                  // Send the sketch version information to the gateway and Controller
                  sendSketchInfo("OneWire Temp+Heating LED", "20180709");
                  
                  // Fetch the number of attached temperature sensors  
                  //numSensors = sensors.getDeviceCount();
                
                  // Present all sensors to controller
                  for (int i=0; i<ATTACHED_DS18B20; i++) {   
                     present(i, S_TEMP);
                  }
                  for (int i=ATTACHED_DS18B20; i<ATTACHED_DS18B20+5; i++) {   
                     present(i, S_HEATER);
                  }
                }
                
                void loop()     
                {     
                  // Fetch temperatures from Dallas sensors
                  sensors.requestTemperatures();
                
                  // query conversion time and sleep until conversion completed
                  int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
                  // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
                  sleep(conversionTime);
                
                  // Read temperatures and send them to controller 
                  for (int i=0; i<ATTACHED_DS18B20; i++) {
                
                  //Serial.println(sensors.getResolution(D[i]), DEC); 
                    // Fetch and round temperature to one decimal
                 //   float temperature = static_cast<float>(static_cast<int>((sensors.requestTemperaturesByAddress(D[i])) * 10.)) / 10.;
                      float temperature = sensors.getTempC(D[i]);
                    // 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
                      send(msg.setSensor(i).set(temperature,1));
                      // Save new temperatures for next compare
                      lastTemperature[i]=temperature;
                    }
                  }
                
                   for (int i=0; i<5;i++){
                    int value = analogRead(i);
                    /*Serial.print("Pin");
                    Serial.print(i);
                    Serial.print("=");
                    Serial.println(value);
                    */
                    int j=i+ATTACHED_DS18B20;
                    if (value>150) {
                      send(heat.setSensor(j).set(1));
                    }
                    else {
                      send(heat.setSensor(j).set(0));
                    }
                  }
                  
                  sleep(SLEEP_TIME);
                }
                
                pepsonP Offline
                pepsonP Offline
                pepson
                wrote on last edited by
                #42

                @flopp said in About DS18B20 onewire.:

                /**
                 * The MySensors Arduino library handles the wireless radio link and protocol
                 * between your home built sensors/actuators and HA controller of choice.
                 * The sensors forms a self healing radio network with optional repeaters. Each
                 * repeater and gateway builds a routing tables in EEPROM which keeps track of the
                 * network topology allowing messages to be routed to nodes.
                 *
                 * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
                 * Copyright (C) 2013-2015 Sensnology AB
                 * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
                 *
                 * Documentation: http://www.mysensors.org
                 * Support Forum: http://forum.mysensors.org
                 *
                 * This program is free software; you can redistribute it and/or
                 * modify it under the terms of the GNU General Public License
                 * version 2 as published by the Free Software Foundation.
                 *
                 *******************************
                 *
                 * DESCRIPTION
                 *
                 * Example sketch showing how to send in DS1820B OneWire temperature readings back to the controller
                 * http://www.mysensors.org/build/temp
                 */
                 
                // Enable and select radio type attached
                #define MY_RADIO_NRF24
                
                // Enable debug prints to serial monitor
                #define MY_DEBUG
                
                #define MY_NODE_ID 14
                
                #include <SPI.h>
                #include <MySensors.h>
                #include <DallasTemperature.h>
                
                #define COMPARE_TEMP 0 // Send temperature only if changed? 1 = Yes 0 = No
                
                #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
                #define ATTACHED_DS18B20 40
                unsigned long SLEEP_TIME = 60000; // 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. 
                
                byte D[ATTACHED_DS18B20][8] = {
                { 0x10, 0x04, 0xB8, 0x3F, 0x02, 0x08, 0x00, 0xBD }, //KökTbx
                { 0x10, 0xF4, 0xD7, 0x3F, 0x02, 0x08, 0x00, 0xB1 }, //UppTbx
                { 0x10, 0x92, 0x9F, 0x3E, 0x02, 0x08, 0x00, 0x98 }, //KökUt
                { 0x10, 0x4E, 0xE4, 0x3E, 0x02, 0x08, 0x00, 0x3C }, //ToaUt
                { 0x10, 0x1E, 0xE8, 0x3E, 0x02, 0x08, 0x00, 0x33 }, //EfterPump
                { 0x10, 0x09, 0xA1, 0x3E, 0x02, 0x08, 0x00, 0xF7 }, //HallTbx
                { 0x10, 0x59, 0xCB, 0x3F, 0x02, 0x08, 0x00, 0xFA }, //UppUt
                { 0x10, 0x07, 0x1B, 0x3F, 0x02, 0x08, 0x00, 0x99 }, //ToaTbx
                { 0x28, 0xFF, 0xB1, 0xAA, 0x63, 0x15, 0x03, 0xC8 }, //Kök 
                { 0x10, 0x80, 0xB6, 0x3F, 0x02, 0x08, 0x00, 0x29 }, //Panna komp
                { 0x10, 0x3C, 0x9C, 0x3E, 0x02, 0x08, 0x00, 0x99 }, //Hall ut
                { 0x10, 0x42, 0xE0, 0x3F, 0x02, 0x08, 0x00, 0xD1 }, //Tvätt
                { 0x10, 0xCE, 0xE9, 0x3E, 0x02, 0x08, 0x00, 0x3A }, //T12
                { 0x10, 0x99, 0xAC, 0x3F, 0x02, 0x08, 0x00, 0x25 }, //V mellan
                { 0x10, 0x15, 0xDB, 0x3E, 0x02, 0x08, 0x00, 0x01 }, //Hallen
                { 0x10, 0xF3, 0xD7, 0x3F, 0x02, 0x08, 0x00, 0x34 }, //Panna El
                { 0x10, 0xFB, 0xCB, 0x3F, 0x02, 0x08, 0x00, 0xC8 }, //Toa Nere
                { 0x10, 0x97, 0x23, 0x3F, 0x02, 0x08, 0x00, 0x92 }, //Varmvatten
                { 0x10, 0x0F, 0xE6, 0x3E, 0x02, 0x08, 0x00, 0xFD }, //Carport
                { 0x10, 0xF3, 0xC6, 0x3F, 0x02, 0x08, 0x00, 0x85 }, //Förrådet
                { 0x10, 0x9C, 0x3B, 0x52, 0x02, 0x08, 0x00, 0x25 }, //Mark 60
                { 0x10, 0xF2, 0x24, 0x3F, 0x02, 0x08, 0x00, 0xEB }, //Vrum V
                { 0x10, 0x6A, 0x5E, 0x52, 0x02, 0x08, 0x00, 0x26 }, //Mark 30
                { 0x10, 0x76, 0xCE, 0x3F, 0x02, 0x08, 0x00, 0xBA }, //Plattan
                { 0x10, 0x0E, 0x7B, 0x13, 0x02, 0x08, 0x00, 0x7C }, //Utetemp
                { 0x10, 0xEE, 0xEB, 0x3E, 0x02, 0x08, 0x00, 0x0F }, //Uterum
                { 0x28, 0x8C, 0x2D, 0xB4, 0x04, 0x00, 0x00, 0x9C }, //Kyl uppe
                { 0x28, 0xFF, 0xB2, 0x74, 0x63, 0x15, 0x02, 0xCC }, //Kyl mitten
                { 0x28, 0xFF, 0x08, 0x07, 0x52, 0x04, 0x00, 0xFF }, //Kyl nere
                { 0x28, 0xFF, 0xE6, 0x06, 0x52, 0x04, 0x00, 0x08 }, //Frys uppe
                { 0x28, 0xFF, 0xB4, 0x07, 0x55, 0x04, 0x00, 0xEB }, //Kyl bakom
                { 0x10, 0x1C, 0xA8, 0x3F, 0x02, 0x08, 0x00, 0x3B }, //Lucas
                { 0x10, 0x83, 0x3C, 0x3F, 0x02, 0x08, 0x00, 0x06 }, //Allrum
                { 0x10, 0xA3, 0xE8, 0x3E, 0x02, 0x08, 0x00, 0x7E }, //Theo
                { 0x10, 0x33, 0x3C, 0x3F, 0x02, 0x08, 0x00, 0x01 }, //Sovrum
                { 0x28, 0xFF, 0xFB, 0x3D, 0xC3, 0x16, 0x03, 0x58 }, //Panna luft in(varm)
                { 0x28, 0xFF, 0xD4, 0x1C, 0x00, 0x17, 0x03, 0x43 }, //Dränering
                { 0x28, 0xFF, 0x97, 0x11, 0x01, 0x15, 0x04, 0xC0 } // Poolvatten
                
                };
                
                float lastTemperature[ATTACHED_DS18B20];
                // Initialize temperature message
                MyMessage msg(0,V_TEMP);
                MyMessage heat(0,V_STATUS);
                
                void setup()  
                { 
                  // Startup up the OneWire library
                  sensors.begin();
                  // requestTemperatures() will not block current thread
                  sensors.setWaitForConversion(false);
                }
                void presentation() {
                  // Send the sketch version information to the gateway and Controller
                  sendSketchInfo("OneWire Temp+Heating LED", "20180709");
                  
                  // Fetch the number of attached temperature sensors  
                  //numSensors = sensors.getDeviceCount();
                
                  // Present all sensors to controller
                  for (int i=0; i<ATTACHED_DS18B20; i++) {   
                     present(i, S_TEMP);
                  }
                  for (int i=ATTACHED_DS18B20; i<ATTACHED_DS18B20+5; i++) {   
                     present(i, S_HEATER);
                  }
                }
                
                void loop()     
                {     
                  // Fetch temperatures from Dallas sensors
                  sensors.requestTemperatures();
                
                  // query conversion time and sleep until conversion completed
                  int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
                  // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
                  sleep(conversionTime);
                
                  // Read temperatures and send them to controller 
                  for (int i=0; i<ATTACHED_DS18B20; i++) {
                
                  //Serial.println(sensors.getResolution(D[i]), DEC); 
                    // Fetch and round temperature to one decimal
                 //   float temperature = static_cast<float>(static_cast<int>((sensors.requestTemperaturesByAddress(D[i])) * 10.)) / 10.;
                      float temperature = sensors.getTempC(D[i]);
                    // 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
                      send(msg.setSensor(i).set(temperature,1));
                      // Save new temperatures for next compare
                      lastTemperature[i]=temperature;
                    }
                  }
                
                   for (int i=0; i<5;i++){
                    int value = analogRead(i);
                    /*Serial.print("Pin");
                    Serial.print(i);
                    Serial.print("=");
                    Serial.println(value);
                    */
                    int j=i+ATTACHED_DS18B20;
                    if (value>150) {
                      send(heat.setSensor(j).set(1));
                    }
                    else {
                      send(heat.setSensor(j).set(0));
                    }
                  }
                  
                  sleep(SLEEP_TIME);
                }
                

                When i try compile this sketch it get me error:

                C:\Users\Piotrek\Desktop\Temp dallas\Arduino_dallas_18B20_with_desc\Arduino_dallas_18B20_with_desc.ino: In function 'void presentation()':

                Arduino_dallas_18B20_with_desc:117:3: error: expected initializer before 'sensors'

                sensors.requestTemperatures();

                ^

                exit status 1
                expected initializer before 'sensors'

                mfalkviddM 1 Reply Last reply
                0
                • pepsonP pepson

                  @flopp said in About DS18B20 onewire.:

                  /**
                   * The MySensors Arduino library handles the wireless radio link and protocol
                   * between your home built sensors/actuators and HA controller of choice.
                   * The sensors forms a self healing radio network with optional repeaters. Each
                   * repeater and gateway builds a routing tables in EEPROM which keeps track of the
                   * network topology allowing messages to be routed to nodes.
                   *
                   * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
                   * Copyright (C) 2013-2015 Sensnology AB
                   * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
                   *
                   * Documentation: http://www.mysensors.org
                   * Support Forum: http://forum.mysensors.org
                   *
                   * This program is free software; you can redistribute it and/or
                   * modify it under the terms of the GNU General Public License
                   * version 2 as published by the Free Software Foundation.
                   *
                   *******************************
                   *
                   * DESCRIPTION
                   *
                   * Example sketch showing how to send in DS1820B OneWire temperature readings back to the controller
                   * http://www.mysensors.org/build/temp
                   */
                   
                  // Enable and select radio type attached
                  #define MY_RADIO_NRF24
                  
                  // Enable debug prints to serial monitor
                  #define MY_DEBUG
                  
                  #define MY_NODE_ID 14
                  
                  #include <SPI.h>
                  #include <MySensors.h>
                  #include <DallasTemperature.h>
                  
                  #define COMPARE_TEMP 0 // Send temperature only if changed? 1 = Yes 0 = No
                  
                  #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
                  #define ATTACHED_DS18B20 40
                  unsigned long SLEEP_TIME = 60000; // 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. 
                  
                  byte D[ATTACHED_DS18B20][8] = {
                  { 0x10, 0x04, 0xB8, 0x3F, 0x02, 0x08, 0x00, 0xBD }, //KökTbx
                  { 0x10, 0xF4, 0xD7, 0x3F, 0x02, 0x08, 0x00, 0xB1 }, //UppTbx
                  { 0x10, 0x92, 0x9F, 0x3E, 0x02, 0x08, 0x00, 0x98 }, //KökUt
                  { 0x10, 0x4E, 0xE4, 0x3E, 0x02, 0x08, 0x00, 0x3C }, //ToaUt
                  { 0x10, 0x1E, 0xE8, 0x3E, 0x02, 0x08, 0x00, 0x33 }, //EfterPump
                  { 0x10, 0x09, 0xA1, 0x3E, 0x02, 0x08, 0x00, 0xF7 }, //HallTbx
                  { 0x10, 0x59, 0xCB, 0x3F, 0x02, 0x08, 0x00, 0xFA }, //UppUt
                  { 0x10, 0x07, 0x1B, 0x3F, 0x02, 0x08, 0x00, 0x99 }, //ToaTbx
                  { 0x28, 0xFF, 0xB1, 0xAA, 0x63, 0x15, 0x03, 0xC8 }, //Kök 
                  { 0x10, 0x80, 0xB6, 0x3F, 0x02, 0x08, 0x00, 0x29 }, //Panna komp
                  { 0x10, 0x3C, 0x9C, 0x3E, 0x02, 0x08, 0x00, 0x99 }, //Hall ut
                  { 0x10, 0x42, 0xE0, 0x3F, 0x02, 0x08, 0x00, 0xD1 }, //Tvätt
                  { 0x10, 0xCE, 0xE9, 0x3E, 0x02, 0x08, 0x00, 0x3A }, //T12
                  { 0x10, 0x99, 0xAC, 0x3F, 0x02, 0x08, 0x00, 0x25 }, //V mellan
                  { 0x10, 0x15, 0xDB, 0x3E, 0x02, 0x08, 0x00, 0x01 }, //Hallen
                  { 0x10, 0xF3, 0xD7, 0x3F, 0x02, 0x08, 0x00, 0x34 }, //Panna El
                  { 0x10, 0xFB, 0xCB, 0x3F, 0x02, 0x08, 0x00, 0xC8 }, //Toa Nere
                  { 0x10, 0x97, 0x23, 0x3F, 0x02, 0x08, 0x00, 0x92 }, //Varmvatten
                  { 0x10, 0x0F, 0xE6, 0x3E, 0x02, 0x08, 0x00, 0xFD }, //Carport
                  { 0x10, 0xF3, 0xC6, 0x3F, 0x02, 0x08, 0x00, 0x85 }, //Förrådet
                  { 0x10, 0x9C, 0x3B, 0x52, 0x02, 0x08, 0x00, 0x25 }, //Mark 60
                  { 0x10, 0xF2, 0x24, 0x3F, 0x02, 0x08, 0x00, 0xEB }, //Vrum V
                  { 0x10, 0x6A, 0x5E, 0x52, 0x02, 0x08, 0x00, 0x26 }, //Mark 30
                  { 0x10, 0x76, 0xCE, 0x3F, 0x02, 0x08, 0x00, 0xBA }, //Plattan
                  { 0x10, 0x0E, 0x7B, 0x13, 0x02, 0x08, 0x00, 0x7C }, //Utetemp
                  { 0x10, 0xEE, 0xEB, 0x3E, 0x02, 0x08, 0x00, 0x0F }, //Uterum
                  { 0x28, 0x8C, 0x2D, 0xB4, 0x04, 0x00, 0x00, 0x9C }, //Kyl uppe
                  { 0x28, 0xFF, 0xB2, 0x74, 0x63, 0x15, 0x02, 0xCC }, //Kyl mitten
                  { 0x28, 0xFF, 0x08, 0x07, 0x52, 0x04, 0x00, 0xFF }, //Kyl nere
                  { 0x28, 0xFF, 0xE6, 0x06, 0x52, 0x04, 0x00, 0x08 }, //Frys uppe
                  { 0x28, 0xFF, 0xB4, 0x07, 0x55, 0x04, 0x00, 0xEB }, //Kyl bakom
                  { 0x10, 0x1C, 0xA8, 0x3F, 0x02, 0x08, 0x00, 0x3B }, //Lucas
                  { 0x10, 0x83, 0x3C, 0x3F, 0x02, 0x08, 0x00, 0x06 }, //Allrum
                  { 0x10, 0xA3, 0xE8, 0x3E, 0x02, 0x08, 0x00, 0x7E }, //Theo
                  { 0x10, 0x33, 0x3C, 0x3F, 0x02, 0x08, 0x00, 0x01 }, //Sovrum
                  { 0x28, 0xFF, 0xFB, 0x3D, 0xC3, 0x16, 0x03, 0x58 }, //Panna luft in(varm)
                  { 0x28, 0xFF, 0xD4, 0x1C, 0x00, 0x17, 0x03, 0x43 }, //Dränering
                  { 0x28, 0xFF, 0x97, 0x11, 0x01, 0x15, 0x04, 0xC0 } // Poolvatten
                  
                  };
                  
                  float lastTemperature[ATTACHED_DS18B20];
                  // Initialize temperature message
                  MyMessage msg(0,V_TEMP);
                  MyMessage heat(0,V_STATUS);
                  
                  void setup()  
                  { 
                    // Startup up the OneWire library
                    sensors.begin();
                    // requestTemperatures() will not block current thread
                    sensors.setWaitForConversion(false);
                  }
                  void presentation() {
                    // Send the sketch version information to the gateway and Controller
                    sendSketchInfo("OneWire Temp+Heating LED", "20180709");
                    
                    // Fetch the number of attached temperature sensors  
                    //numSensors = sensors.getDeviceCount();
                  
                    // Present all sensors to controller
                    for (int i=0; i<ATTACHED_DS18B20; i++) {   
                       present(i, S_TEMP);
                    }
                    for (int i=ATTACHED_DS18B20; i<ATTACHED_DS18B20+5; i++) {   
                       present(i, S_HEATER);
                    }
                  }
                  
                  void loop()     
                  {     
                    // Fetch temperatures from Dallas sensors
                    sensors.requestTemperatures();
                  
                    // query conversion time and sleep until conversion completed
                    int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
                    // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
                    sleep(conversionTime);
                  
                    // Read temperatures and send them to controller 
                    for (int i=0; i<ATTACHED_DS18B20; i++) {
                  
                    //Serial.println(sensors.getResolution(D[i]), DEC); 
                      // Fetch and round temperature to one decimal
                   //   float temperature = static_cast<float>(static_cast<int>((sensors.requestTemperaturesByAddress(D[i])) * 10.)) / 10.;
                        float temperature = sensors.getTempC(D[i]);
                      // 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
                        send(msg.setSensor(i).set(temperature,1));
                        // Save new temperatures for next compare
                        lastTemperature[i]=temperature;
                      }
                    }
                  
                     for (int i=0; i<5;i++){
                      int value = analogRead(i);
                      /*Serial.print("Pin");
                      Serial.print(i);
                      Serial.print("=");
                      Serial.println(value);
                      */
                      int j=i+ATTACHED_DS18B20;
                      if (value>150) {
                        send(heat.setSensor(j).set(1));
                      }
                      else {
                        send(heat.setSensor(j).set(0));
                      }
                    }
                    
                    sleep(SLEEP_TIME);
                  }
                  

                  When i try compile this sketch it get me error:

                  C:\Users\Piotrek\Desktop\Temp dallas\Arduino_dallas_18B20_with_desc\Arduino_dallas_18B20_with_desc.ino: In function 'void presentation()':

                  Arduino_dallas_18B20_with_desc:117:3: error: expected initializer before 'sensors'

                  sensors.requestTemperatures();

                  ^

                  exit status 1
                  expected initializer before 'sensors'

                  mfalkviddM Offline
                  mfalkviddM Offline
                  mfalkvidd
                  Mod
                  wrote on last edited by mfalkvidd
                  #43

                  @pepson you have a stray } after setWaitForConversion

                  Tip: use ctrl+t in the editor to easier see this type of mistake

                  pepsonP 1 Reply Last reply
                  0
                  • mfalkviddM mfalkvidd

                    @pepson you have a stray } after setWaitForConversion

                    Tip: use ctrl+t in the editor to easier see this type of mistake

                    pepsonP Offline
                    pepsonP Offline
                    pepson
                    wrote on last edited by
                    #44

                    @mfalkvidd
                    Still is problem after use CTRL+T

                    /**
                       The MySensors Arduino library handles the wireless radio link and protocol
                       between your home built sensors/actuators and HA controller of choice.
                       The sensors forms a self healing radio network with optional repeaters. Each
                       repeater and gateway builds a routing tables in EEPROM which keeps track of the
                       network topology allowing messages to be routed to nodes.
                    
                       Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
                       Copyright (C) 2013-2015 Sensnology AB
                       Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
                    
                       Documentation: http://www.mysensors.org
                       Support Forum: http://forum.mysensors.org
                    
                       This program is free software; you can redistribute it and/or
                       modify it under the terms of the GNU General Public License
                       version 2 as published by the Free Software Foundation.
                    
                     *******************************
                    
                       DESCRIPTION
                    
                       Example sketch showing how to send in DS1820B OneWire temperature readings back to the controller
                       http://www.mysensors.org/build/temp
                    */
                    
                    #define MY_GATEWAY_SERIAL
                    
                    // Enable debug prints to serial monitor
                    #define MY_DEBUG
                    
                    #define MY_NODE_ID 14
                    
                    #include <SPI.h>
                    #include <MySensors.h>
                    #include <DallasTemperature.h>
                    
                    #define COMPARE_TEMP 0 // Send temperature only if changed? 1 = Yes 0 = No
                    
                    #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
                    #define ATTACHED_DS18B20 40
                    unsigned long SLEEP_TIME = 60000; // 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.
                    
                    byte D[ATTACHED_DS18B20][8] = {
                      { 0x10, 0x04, 0xB8, 0x3F, 0x02, 0x08, 0x00, 0xBD }, //KökTbx
                      { 0x10, 0xF4, 0xD7, 0x3F, 0x02, 0x08, 0x00, 0xB1 }, //UppTbx
                      { 0x10, 0x92, 0x9F, 0x3E, 0x02, 0x08, 0x00, 0x98 }, //KökUt
                      { 0x10, 0x4E, 0xE4, 0x3E, 0x02, 0x08, 0x00, 0x3C }, //ToaUt
                      { 0x10, 0x1E, 0xE8, 0x3E, 0x02, 0x08, 0x00, 0x33 }, //EfterPump
                      { 0x10, 0x09, 0xA1, 0x3E, 0x02, 0x08, 0x00, 0xF7 }, //HallTbx
                      { 0x10, 0x59, 0xCB, 0x3F, 0x02, 0x08, 0x00, 0xFA }, //UppUt
                      { 0x10, 0x07, 0x1B, 0x3F, 0x02, 0x08, 0x00, 0x99 }, //ToaTbx
                      { 0x28, 0xFF, 0xB1, 0xAA, 0x63, 0x15, 0x03, 0xC8 }, //Kök
                      { 0x10, 0x80, 0xB6, 0x3F, 0x02, 0x08, 0x00, 0x29 }, //Panna komp
                      { 0x10, 0x3C, 0x9C, 0x3E, 0x02, 0x08, 0x00, 0x99 }, //Hall ut
                      { 0x10, 0x42, 0xE0, 0x3F, 0x02, 0x08, 0x00, 0xD1 }, //Tvätt
                      { 0x10, 0xCE, 0xE9, 0x3E, 0x02, 0x08, 0x00, 0x3A }, //T12
                      { 0x10, 0x99, 0xAC, 0x3F, 0x02, 0x08, 0x00, 0x25 }, //V mellan
                      { 0x10, 0x15, 0xDB, 0x3E, 0x02, 0x08, 0x00, 0x01 }, //Hallen
                      { 0x10, 0xF3, 0xD7, 0x3F, 0x02, 0x08, 0x00, 0x34 }, //Panna El
                      { 0x10, 0xFB, 0xCB, 0x3F, 0x02, 0x08, 0x00, 0xC8 }, //Toa Nere
                      { 0x10, 0x97, 0x23, 0x3F, 0x02, 0x08, 0x00, 0x92 }, //Varmvatten
                      { 0x10, 0x0F, 0xE6, 0x3E, 0x02, 0x08, 0x00, 0xFD }, //Carport
                      { 0x10, 0xF3, 0xC6, 0x3F, 0x02, 0x08, 0x00, 0x85 }, //Förrådet
                      { 0x10, 0x9C, 0x3B, 0x52, 0x02, 0x08, 0x00, 0x25 }, //Mark 60
                      { 0x10, 0xF2, 0x24, 0x3F, 0x02, 0x08, 0x00, 0xEB }, //Vrum V
                      { 0x10, 0x6A, 0x5E, 0x52, 0x02, 0x08, 0x00, 0x26 }, //Mark 30
                      { 0x10, 0x76, 0xCE, 0x3F, 0x02, 0x08, 0x00, 0xBA }, //Plattan
                      { 0x10, 0x0E, 0x7B, 0x13, 0x02, 0x08, 0x00, 0x7C }, //Utetemp
                      { 0x10, 0xEE, 0xEB, 0x3E, 0x02, 0x08, 0x00, 0x0F }, //Uterum
                      { 0x28, 0x8C, 0x2D, 0xB4, 0x04, 0x00, 0x00, 0x9C }, //Kyl uppe
                      { 0x28, 0xFF, 0xB2, 0x74, 0x63, 0x15, 0x02, 0xCC }, //Kyl mitten
                      { 0x28, 0xFF, 0x08, 0x07, 0x52, 0x04, 0x00, 0xFF }, //Kyl nere
                      { 0x28, 0xFF, 0xE6, 0x06, 0x52, 0x04, 0x00, 0x08 }, //Frys uppe
                      { 0x28, 0xFF, 0xB4, 0x07, 0x55, 0x04, 0x00, 0xEB }, //Kyl bakom
                      { 0x10, 0x1C, 0xA8, 0x3F, 0x02, 0x08, 0x00, 0x3B }, //Lucas
                      { 0x10, 0x83, 0x3C, 0x3F, 0x02, 0x08, 0x00, 0x06 }, //Allrum
                      { 0x10, 0xA3, 0xE8, 0x3E, 0x02, 0x08, 0x00, 0x7E }, //Theo
                      { 0x10, 0x33, 0x3C, 0x3F, 0x02, 0x08, 0x00, 0x01 }, //Sovrum
                      { 0x28, 0xFF, 0xFB, 0x3D, 0xC3, 0x16, 0x03, 0x58 }, //Panna luft in(varm)
                      { 0x28, 0xFF, 0xD4, 0x1C, 0x00, 0x17, 0x03, 0x43 }, //Dränering
                      { 0x28, 0xFF, 0x97, 0x11, 0x01, 0x15, 0x04, 0xC0 } // Poolvatten
                    
                    };
                    
                    float lastTemperature[ATTACHED_DS18B20];
                    // Initialize temperature message
                    MyMessage msg(0, V_TEMP);
                    MyMessage heat(0, V_STATUS);
                    
                    void setup()
                    {
                      // Startup up the OneWire library
                      sensors.begin();
                      // requestTemperatures() will not block current thread
                      sensors.setWaitForConversion(false);
                    }
                    void presentation() {
                      // Send the sketch version information to the gateway and Controller
                      sendSketchInfo("OneWire Temp+Heating LED", "20180709");
                    
                      // Fetch the number of attached temperature sensors
                      //numSensors = sensors.getDeviceCount();
                    
                      // Present all sensors to controller
                      for (int i = 0; i < ATTACHED_DS18B20; i++) {
                        present(i, S_TEMP);
                      }
                      for (int i = ATTACHED_DS18B20; i < ATTACHED_DS18B20 + 5; i++) {
                        present(i, S_HEATER);
                      }
                    
                      void loop()
                      // Fetch temperatures from Dallas sensors
                      sensors.requestTemperatures();
                    
                      // query conversion time and sleep until conversion completed
                      int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
                      // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
                      sleep(conversionTime);
                    
                      // Read temperatures and send them to controller
                      for (int i = 0; i < ATTACHED_DS18B20; i++) {
                    
                        //Serial.println(sensors.getResolution(D[i]), DEC);
                        // Fetch and round temperature to one decimal
                        //   float temperature = static_cast<float>(static_cast<int>((sensors.requestTemperaturesByAddress(D[i])) * 10.)) / 10.;
                        float temperature = sensors.getTempC(D[i]);
                        // 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
                          send(msg.setSensor(i).set(temperature, 1));
                          // Save new temperatures for next compare
                          lastTemperature[i] = temperature;
                        }
                      }
                    
                      for (int i = 0; i < 5; i++) {
                        int value = analogRead(i);
                        /*Serial.print("Pin");
                          Serial.print(i);
                          Serial.print("=");
                          Serial.println(value);
                        */
                        int j = i + ATTACHED_DS18B20;
                        if (value > 150) {
                          send(heat.setSensor(j).set(1));
                        }
                        else {
                          send(heat.setSensor(j).set(0));
                        }
                      }
                    
                      sleep(SLEEP_TIME);
                    }
                    

                    C:\Users\Piotrek\Desktop\Temp dallas\Arduino_dallas_18B20_with_desc\Arduino_dallas_18B20_with_desc.ino: In function 'void presentation()':

                    Arduino_dallas_18B20_with_desc:117:3: error: expected initializer before 'sensors'

                    sensors.requestTemperatures();

                    ^

                    exit status 1
                    expected initializer before 'sensors'

                    mfalkviddM 1 Reply Last reply
                    0
                    • pepsonP pepson

                      @mfalkvidd
                      Still is problem after use CTRL+T

                      /**
                         The MySensors Arduino library handles the wireless radio link and protocol
                         between your home built sensors/actuators and HA controller of choice.
                         The sensors forms a self healing radio network with optional repeaters. Each
                         repeater and gateway builds a routing tables in EEPROM which keeps track of the
                         network topology allowing messages to be routed to nodes.
                      
                         Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
                         Copyright (C) 2013-2015 Sensnology AB
                         Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
                      
                         Documentation: http://www.mysensors.org
                         Support Forum: http://forum.mysensors.org
                      
                         This program is free software; you can redistribute it and/or
                         modify it under the terms of the GNU General Public License
                         version 2 as published by the Free Software Foundation.
                      
                       *******************************
                      
                         DESCRIPTION
                      
                         Example sketch showing how to send in DS1820B OneWire temperature readings back to the controller
                         http://www.mysensors.org/build/temp
                      */
                      
                      #define MY_GATEWAY_SERIAL
                      
                      // Enable debug prints to serial monitor
                      #define MY_DEBUG
                      
                      #define MY_NODE_ID 14
                      
                      #include <SPI.h>
                      #include <MySensors.h>
                      #include <DallasTemperature.h>
                      
                      #define COMPARE_TEMP 0 // Send temperature only if changed? 1 = Yes 0 = No
                      
                      #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
                      #define ATTACHED_DS18B20 40
                      unsigned long SLEEP_TIME = 60000; // 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.
                      
                      byte D[ATTACHED_DS18B20][8] = {
                        { 0x10, 0x04, 0xB8, 0x3F, 0x02, 0x08, 0x00, 0xBD }, //KökTbx
                        { 0x10, 0xF4, 0xD7, 0x3F, 0x02, 0x08, 0x00, 0xB1 }, //UppTbx
                        { 0x10, 0x92, 0x9F, 0x3E, 0x02, 0x08, 0x00, 0x98 }, //KökUt
                        { 0x10, 0x4E, 0xE4, 0x3E, 0x02, 0x08, 0x00, 0x3C }, //ToaUt
                        { 0x10, 0x1E, 0xE8, 0x3E, 0x02, 0x08, 0x00, 0x33 }, //EfterPump
                        { 0x10, 0x09, 0xA1, 0x3E, 0x02, 0x08, 0x00, 0xF7 }, //HallTbx
                        { 0x10, 0x59, 0xCB, 0x3F, 0x02, 0x08, 0x00, 0xFA }, //UppUt
                        { 0x10, 0x07, 0x1B, 0x3F, 0x02, 0x08, 0x00, 0x99 }, //ToaTbx
                        { 0x28, 0xFF, 0xB1, 0xAA, 0x63, 0x15, 0x03, 0xC8 }, //Kök
                        { 0x10, 0x80, 0xB6, 0x3F, 0x02, 0x08, 0x00, 0x29 }, //Panna komp
                        { 0x10, 0x3C, 0x9C, 0x3E, 0x02, 0x08, 0x00, 0x99 }, //Hall ut
                        { 0x10, 0x42, 0xE0, 0x3F, 0x02, 0x08, 0x00, 0xD1 }, //Tvätt
                        { 0x10, 0xCE, 0xE9, 0x3E, 0x02, 0x08, 0x00, 0x3A }, //T12
                        { 0x10, 0x99, 0xAC, 0x3F, 0x02, 0x08, 0x00, 0x25 }, //V mellan
                        { 0x10, 0x15, 0xDB, 0x3E, 0x02, 0x08, 0x00, 0x01 }, //Hallen
                        { 0x10, 0xF3, 0xD7, 0x3F, 0x02, 0x08, 0x00, 0x34 }, //Panna El
                        { 0x10, 0xFB, 0xCB, 0x3F, 0x02, 0x08, 0x00, 0xC8 }, //Toa Nere
                        { 0x10, 0x97, 0x23, 0x3F, 0x02, 0x08, 0x00, 0x92 }, //Varmvatten
                        { 0x10, 0x0F, 0xE6, 0x3E, 0x02, 0x08, 0x00, 0xFD }, //Carport
                        { 0x10, 0xF3, 0xC6, 0x3F, 0x02, 0x08, 0x00, 0x85 }, //Förrådet
                        { 0x10, 0x9C, 0x3B, 0x52, 0x02, 0x08, 0x00, 0x25 }, //Mark 60
                        { 0x10, 0xF2, 0x24, 0x3F, 0x02, 0x08, 0x00, 0xEB }, //Vrum V
                        { 0x10, 0x6A, 0x5E, 0x52, 0x02, 0x08, 0x00, 0x26 }, //Mark 30
                        { 0x10, 0x76, 0xCE, 0x3F, 0x02, 0x08, 0x00, 0xBA }, //Plattan
                        { 0x10, 0x0E, 0x7B, 0x13, 0x02, 0x08, 0x00, 0x7C }, //Utetemp
                        { 0x10, 0xEE, 0xEB, 0x3E, 0x02, 0x08, 0x00, 0x0F }, //Uterum
                        { 0x28, 0x8C, 0x2D, 0xB4, 0x04, 0x00, 0x00, 0x9C }, //Kyl uppe
                        { 0x28, 0xFF, 0xB2, 0x74, 0x63, 0x15, 0x02, 0xCC }, //Kyl mitten
                        { 0x28, 0xFF, 0x08, 0x07, 0x52, 0x04, 0x00, 0xFF }, //Kyl nere
                        { 0x28, 0xFF, 0xE6, 0x06, 0x52, 0x04, 0x00, 0x08 }, //Frys uppe
                        { 0x28, 0xFF, 0xB4, 0x07, 0x55, 0x04, 0x00, 0xEB }, //Kyl bakom
                        { 0x10, 0x1C, 0xA8, 0x3F, 0x02, 0x08, 0x00, 0x3B }, //Lucas
                        { 0x10, 0x83, 0x3C, 0x3F, 0x02, 0x08, 0x00, 0x06 }, //Allrum
                        { 0x10, 0xA3, 0xE8, 0x3E, 0x02, 0x08, 0x00, 0x7E }, //Theo
                        { 0x10, 0x33, 0x3C, 0x3F, 0x02, 0x08, 0x00, 0x01 }, //Sovrum
                        { 0x28, 0xFF, 0xFB, 0x3D, 0xC3, 0x16, 0x03, 0x58 }, //Panna luft in(varm)
                        { 0x28, 0xFF, 0xD4, 0x1C, 0x00, 0x17, 0x03, 0x43 }, //Dränering
                        { 0x28, 0xFF, 0x97, 0x11, 0x01, 0x15, 0x04, 0xC0 } // Poolvatten
                      
                      };
                      
                      float lastTemperature[ATTACHED_DS18B20];
                      // Initialize temperature message
                      MyMessage msg(0, V_TEMP);
                      MyMessage heat(0, V_STATUS);
                      
                      void setup()
                      {
                        // Startup up the OneWire library
                        sensors.begin();
                        // requestTemperatures() will not block current thread
                        sensors.setWaitForConversion(false);
                      }
                      void presentation() {
                        // Send the sketch version information to the gateway and Controller
                        sendSketchInfo("OneWire Temp+Heating LED", "20180709");
                      
                        // Fetch the number of attached temperature sensors
                        //numSensors = sensors.getDeviceCount();
                      
                        // Present all sensors to controller
                        for (int i = 0; i < ATTACHED_DS18B20; i++) {
                          present(i, S_TEMP);
                        }
                        for (int i = ATTACHED_DS18B20; i < ATTACHED_DS18B20 + 5; i++) {
                          present(i, S_HEATER);
                        }
                      
                        void loop()
                        // Fetch temperatures from Dallas sensors
                        sensors.requestTemperatures();
                      
                        // query conversion time and sleep until conversion completed
                        int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
                        // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
                        sleep(conversionTime);
                      
                        // Read temperatures and send them to controller
                        for (int i = 0; i < ATTACHED_DS18B20; i++) {
                      
                          //Serial.println(sensors.getResolution(D[i]), DEC);
                          // Fetch and round temperature to one decimal
                          //   float temperature = static_cast<float>(static_cast<int>((sensors.requestTemperaturesByAddress(D[i])) * 10.)) / 10.;
                          float temperature = sensors.getTempC(D[i]);
                          // 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
                            send(msg.setSensor(i).set(temperature, 1));
                            // Save new temperatures for next compare
                            lastTemperature[i] = temperature;
                          }
                        }
                      
                        for (int i = 0; i < 5; i++) {
                          int value = analogRead(i);
                          /*Serial.print("Pin");
                            Serial.print(i);
                            Serial.print("=");
                            Serial.println(value);
                          */
                          int j = i + ATTACHED_DS18B20;
                          if (value > 150) {
                            send(heat.setSensor(j).set(1));
                          }
                          else {
                            send(heat.setSensor(j).set(0));
                          }
                        }
                      
                        sleep(SLEEP_TIME);
                      }
                      

                      C:\Users\Piotrek\Desktop\Temp dallas\Arduino_dallas_18B20_with_desc\Arduino_dallas_18B20_with_desc.ino: In function 'void presentation()':

                      Arduino_dallas_18B20_with_desc:117:3: error: expected initializer before 'sensors'

                      sensors.requestTemperatures();

                      ^

                      exit status 1
                      expected initializer before 'sensors'

                      mfalkviddM Offline
                      mfalkviddM Offline
                      mfalkvidd
                      Mod
                      wrote on last edited by
                      #45

                      @pepson you’re missing a } before start of loop.

                      pepsonP 1 Reply Last reply
                      0
                      • mfalkviddM mfalkvidd

                        @pepson you’re missing a } before start of loop.

                        pepsonP Offline
                        pepsonP Offline
                        pepson
                        wrote on last edited by
                        #46

                        @mfalkvidd
                        Where ? please show me more.... :( i am beginner

                        pepsonP 1 Reply Last reply
                        0
                        • pepsonP pepson

                          @mfalkvidd
                          Where ? please show me more.... :( i am beginner

                          pepsonP Offline
                          pepsonP Offline
                          pepson
                          wrote on last edited by
                          #47

                          @pepson ok fixed it :)

                          1 Reply Last reply
                          1
                          • pepsonP Offline
                            pepsonP Offline
                            pepson
                            wrote on last edited by
                            #48

                            But.... Can you also help me to add to this sketch option to send to example to Home Assistant also DESCRIPTION to each sensors ? And description will be get from sketch from name about address sensor ?

                            As in this sketch which i have for relay:

                            #define USE_EXPANDER
                            // Enable debug prints to serial monitor
                            //#define MY_DEBUG
                            
                            #define MY_GATEWAY_SERIAL
                            
                            #include <MySensors.h>
                            #include <Bounce2.h>
                            #ifdef USE_EXPANDER
                              #include <Wire.h>    // Required for I2C communication
                              #include "PCF8574.h"
                              uint8_t expanderAddresses[] = {0x20};
                              const int numberOfExpanders = sizeof(expanderAddresses);
                              PCF8574 expander[numberOfExpanders];
                              #define E(expanderNo, ExpanderPin) (((expanderNo+1)<<8) | (ExpanderPin))
                            #endif
                            
                            // No Button Constant
                            #define NOB -1
                            #define MULTI_RELAY_VERSION 9
                            #define RELAY_STATE_STORAGE 1
                            
                            const uint8_t RELAY_TRIGGER_LOW  = 0;
                            const uint8_t RELAY_TRIGGER_HIGH = 1;
                            const uint8_t RELAY_STARTUP_ON   = 2;
                            const uint8_t RELAY_STARTUP_OFF  = 4;
                            const uint8_t RELAY_STARTUP_MASK = RELAY_STARTUP_ON | RELAY_STARTUP_OFF;
                            
                            enum ButtonType {
                              MONO_STABLE = 0,
                              BI_STABLE = 1,
                              DING_DONG = 2 // HIGH state immediatly after push, LOW state after release
                            };
                            
                            typedef struct {
                              int sensorId;
                              int relay;
                              int button;
                              uint8_t relayOptions;
                              ButtonType buttonType;
                              const char * relayDescription;
                            } RelayButton;
                            
                            // CONFIGURE ONLY THIS ARRAY!
                            // Row params: sensor ID - sensor ID reported on MySensor Gateway
                            //             relay pin - Expander supported
                            //             button pin - <0 for virtual buttons (only available in MySensor Gateway); no support for Expander
                            //             relay options - [RELAY_TRIGGER_LOW|RELAY_TRIGGER_HIGH] {RELAY_STARTUP_ON|RELAY_STARTUP_OFF}
                            //             button type - [MONO_STABLE|BI_STABLE|DING_DONG]
                            //             relay description - reported on MySensor Gateway, can help identify device on initial configuration in Home Automation App, can be empty ("")
                            RelayButton myRelayButtons[] = {
                              {0, 2, A0, RELAY_TRIGGER_LOW, MONO_STABLE, "Ł2 - kinkiet [C10]"},  // WŁ: Ł2
                              {1, 16, A1, RELAY_TRIGGER_LOW, BI_STABLE, "Salon 2 [A9]"},  // WŁ: Salon 2
                              {2, 15, A2, RELAY_TRIGGER_LOW, BI_STABLE, "Salon 1 [A10]"},  // WŁ: Salon 1
                              {3, E(0,1), A3, RELAY_TRIGGER_LOW | RELAY_STARTUP_OFF, BI_STABLE, "Halogen - Taras [B8]"},  // WŁ: Taras
                              {4, 22, A4, RELAY_TRIGGER_LOW, BI_STABLE, "Kuchnia [B2]"},  // WŁ: Kuchnia 1
                              {5, 23, A5, RELAY_TRIGGER_LOW, BI_STABLE, "Kuchnia - Kinkiet [B3]"},  // WŁ: Kuchnia 2
                              {6, 28, A6, RELAY_TRIGGER_LOW, BI_STABLE, "Jadalnia 2 [A4]"},  // WŁ: Hall I/Jadalnia prawy
                              {17, 17, A7, RELAY_TRIGGER_LOW, BI_STABLE, "Ł1 - Kinkiet [A11]"},  // WŁ: Hall I/Ł1 prawy
                              {8, 31, A8, RELAY_TRIGGER_LOW, MONO_STABLE, "Garaż [A7]"},  // WŁ: Kotłownia/Garaż
                              {8, 31, A9, RELAY_TRIGGER_LOW, MONO_STABLE, "Garaż [A7]"},  // WŁ: Garaż
                              {10, 14, A10, RELAY_TRIGGER_LOW | RELAY_STARTUP_ON, BI_STABLE, "Halogen - wejście [B4]"},  // WŁ: Drzwi wejściowe
                              {11, E(0,7), A11, RELAY_TRIGGER_LOW, DING_DONG, "Dzwonek [?]"},  // WŁ: Dzwonek
                              {12, 29, A12, RELAY_TRIGGER_LOW, BI_STABLE, "Hall 1 [A5]"},  // WŁ: Hall I/Jadalnia lewy
                              {12, 29, A13, RELAY_TRIGGER_LOW, BI_STABLE, "Hall 1 [A5]"},  // WŁ: Hall I/Wiatrołap
                              {14, 32, A14, RELAY_TRIGGER_LOW, BI_STABLE, "Wiatrołap [A8]"},  // WŁ: Wiatrołap/Hall I
                              {15, 19, A15, RELAY_TRIGGER_LOW, MONO_STABLE, "Kotłownia [B1]"},  // WŁ: Kotłownia/Hall I
                              {16, 24, 53, RELAY_TRIGGER_LOW, BI_STABLE, "Ł1 - Taśma LED [C1]"},  // WŁ: Hall I/Ł1 środek
                              {17, 17, 52, RELAY_TRIGGER_LOW, MONO_STABLE, "Ł1 - Kinkiet [A11]"},  // WŁ: Ł1
                              {18, 18, 51, RELAY_TRIGGER_LOW, BI_STABLE, "Ł1 [A12]"},  // WŁ: Hall I/Ł1 lewy
                              {19, 6, 50, RELAY_TRIGGER_LOW, BI_STABLE, "Klatka Schodowa [B7]"},  // WŁ: Hall I/Schody 1
                              {12, 29, 49, RELAY_TRIGGER_LOW, BI_STABLE, "Hall 1 [A5]"},  // WŁ: Hall I/Schody 2
                              {21, 26, 48, RELAY_TRIGGER_LOW, BI_STABLE, "Gabinet [A2]"},  // WŁ: Gabinet
                              {22, 7, 47, RELAY_TRIGGER_LOW, BI_STABLE, "Hall 2 [B5]"},  // WŁ: Hall II/Schody 1
                              {19, 6, 46, RELAY_TRIGGER_LOW, BI_STABLE, "Klatka Schodowa [B7]"},  // WŁ: Hall II/Schody 2
                              {24, 10, 45, RELAY_TRIGGER_LOW, BI_STABLE, "Garderoba [C12]"},  // WŁ: Garderoba
                              {25, 4, 44, RELAY_TRIGGER_LOW, MONO_STABLE, "Pok. nad kuchnią 2 [B10]"},  // WŁ: Pok. nad kuchnią 2
                              {26, 5, 43, RELAY_TRIGGER_LOW, BI_STABLE, "Pok. nad kuchnią 1 [B9]"},  // WŁ: Pok. nad kuchnią 1
                              {27, 8, 42, RELAY_TRIGGER_LOW, BI_STABLE, "Pok. nad salonem 2 [B12]"},  // WŁ: Pok. nad salonem 2
                              {28, 9, 41, RELAY_TRIGGER_LOW, MONO_STABLE, "Pok. nad salonem 1 [B11]"},  // WŁ: Pok. nad salonem 1
                              {29, 3, 40, RELAY_TRIGGER_LOW, BI_STABLE, "Ł2 [C7]"},  // WŁ: Hall II/Ł2 1
                              {30, E(0,3), 39, RELAY_TRIGGER_LOW, BI_STABLE, "Ł2 - Taśma LED [?]"},  // WŁ: Hall II/Ł2 2
                              {22, 7, 38, RELAY_TRIGGER_LOW, BI_STABLE, "Hall 2 [B5]"},  // WŁ: Hall II/Sypialnia
                              {32, 11, 37, RELAY_TRIGGER_LOW, BI_STABLE, "Sypialnia 2 [C9]"},  // WŁ: Sypialnia 2
                              {33, 12, 36, RELAY_TRIGGER_LOW, BI_STABLE, "Sypialnia 1 [C8]"},  // WŁ: Sypialnia 1
                              {34, 25, -1, RELAY_TRIGGER_LOW | RELAY_STARTUP_ON, MONO_STABLE, "Halogen - Garaż [A1]"},  // WŁ: Virtual Button 1
                              {35, 30, -2, RELAY_TRIGGER_LOW | RELAY_STARTUP_OFF, MONO_STABLE, "Ł1 - Wentylator [A3]"},  // WŁ: Virtual Button 2
                              {36, E(0,2), -3, RELAY_TRIGGER_LOW | RELAY_STARTUP_OFF, MONO_STABLE, "Halogen - wschód [B6]"},  // WŁ: Virtual Button 3
                              {37, E(0,4), -4, RELAY_TRIGGER_LOW, MONO_STABLE, "Lampki schodowe [C6]"},  // WŁ: Virtual Button 4
                              {38, E(0,5), -5, RELAY_TRIGGER_LOW, MONO_STABLE, "Lampki podłogowe I [C4]"},  // WŁ: Virtual Button 5
                              {39, E(0,6), -6, RELAY_TRIGGER_LOW, MONO_STABLE, "Lampki podłogowe II [C2]"},  // WŁ: Virtual Button 6
                              {40, E(0,0), -7, RELAY_TRIGGER_LOW | RELAY_STARTUP_OFF, MONO_STABLE, "Ł2 - wentylator [C11]"},  // WŁ: Virtual Button 7
                            };
                            
                            const int numberOfRelayButtons = sizeof(myRelayButtons) / sizeof(RelayButton);
                            
                            typedef struct {
                              int firstButton;
                              int nextButton;
                            } RelayMultiButtons;
                            
                            RelayMultiButtons relayMultiButtons[numberOfRelayButtons];
                            uint8_t myRelayState[numberOfRelayButtons];
                            
                            // MySensors - Sending Data
                            // To send data you have to create a MyMessage container to hold the information.
                            MyMessage msgs[numberOfRelayButtons];
                            
                            Bounce myButtonDebouncer[numberOfRelayButtons];
                            
                            //Function Declaration
                            uint8_t loadRelayState(int relayNum, uint8_t forceEeprom = 0);
                            void saveRelayState(int relayNum, uint8_t state, uint8_t useEeprom);
                            void saveRelayState(int relayNum, uint8_t state);
                            void changeRelayState(int relayNum, uint8_t relayState);
                            
                            
                            
                            // MySensors - This will execute before MySensors starts up
                            void before() {
                              Serial.begin(115200);
                              
                              #ifdef USE_EXPANDER
                                /* Start I2C bus and PCF8574 instance */
                                for(int i = 0; i < numberOfExpanders; i++) {
                                  expander[i].begin(expanderAddresses[i]);
                                }
                              #endif
                              
                              // initialize multiple buttons list structure
                              for (int i = 0; i < numberOfRelayButtons; i++) {
                                relayMultiButtons[i].firstButton = -1;
                                relayMultiButtons[i].nextButton = -1;
                              }
                              // find multiple buttons for the same relay (uni-directional list)
                              for (int i = 0; i < numberOfRelayButtons-1; i++) {
                                if (relayMultiButtons[i].firstButton == -1) {
                                  int prevRelayButton = i;
                                  for (int j = i+1; j < numberOfRelayButtons; j++) {
                                    if (myRelayButtons[i].relay == myRelayButtons[j].relay) {
                                      relayMultiButtons[prevRelayButton].firstButton = i;
                                      relayMultiButtons[prevRelayButton].nextButton = j;
                                      relayMultiButtons[j].firstButton = i;
                                      prevRelayButton = j;
                                    }
                                  }
                                }
                              }
                              
                              // if version has changed, reset state of all relays
                              int versionChangeResetState = (MULTI_RELAY_VERSION == loadState(0) ) ? 0 : 1;
                              
                              for (int i = 0; i < numberOfRelayButtons; i++) {
                                // if this relay has multiple buttons, load only first
                                if (relayMultiButtons[i].firstButton == -1 || relayMultiButtons[i].firstButton == i) {
                                  // Then set relay pins in output mode
                                  #ifdef USE_EXPANDER
                                    if ( myRelayButtons[i].relay & 0xff00 ) {
                                      // EXPANDER
                                      int expanderNo = (myRelayButtons[i].relay >> 8) - 1;
                                      int expanderPin = myRelayButtons[i].relay & 0xff;
                                      expander[expanderNo].pinMode(expanderPin, OUTPUT);
                                    } else {
                                  #endif
                                      pinMode(myRelayButtons[i].relay, OUTPUT);
                                  #ifdef USE_EXPANDER
                                    }
                                  #endif
                                  
                                  uint8_t isTurnedOn = 0;
                                  
                                  if (myRelayButtons[i].relayOptions & RELAY_STARTUP_ON) {
                                    isTurnedOn = 1;
                                  } else if (myRelayButtons[i].relayOptions & RELAY_STARTUP_OFF) {
                                  } else {
                                    // Set relay to last known state (using eeprom storage)
                                    isTurnedOn = loadRelayState(i, 1); // 1 - true, 0 - false
                                    if (versionChangeResetState && isTurnedOn) {
                                      saveRelayState(i, 0, 1);
                                      isTurnedOn = 0;
                                    }
                                  }
                            
                                  changeRelayState(i, isTurnedOn);
                                  myRelayState[i] = isTurnedOn;
                                }
                              }
                              if (versionChangeResetState) {
                                // version has changed, so store new version in eeporom
                                saveState(0, MULTI_RELAY_VERSION);
                              }
                            }
                            
                            // executed AFTER mysensors has been initialised
                            void setup() {
                              for(int i = 0; i < numberOfRelayButtons; i++) {
                                if (myRelayButtons[i].button >= 0) {
                                  // No Expander support for buttons (de-bouncing)
                                  pinMode(myRelayButtons[i].button, INPUT_PULLUP); // HIGH state when button is not pushed
                                }
                              }
                              // Setup locally attached sensors
                              delay(5000);
                              // Send state to MySensor Gateway
                              for(int i = 0; i < numberOfRelayButtons; i++) {
                                // if this relay has multiple buttons, send only first
                                if (relayMultiButtons[i].firstButton == -1 || relayMultiButtons[i].firstButton == i) {
                                  msgs[i] = MyMessage(myRelayButtons[i].sensorId, V_LIGHT);
                                  uint8_t relayState;
                                  if (myRelayButtons[i].relayOptions & RELAY_STARTUP_ON) {
                                    relayState = 1;
                                  } else if (myRelayButtons[i].relayOptions & RELAY_STARTUP_OFF) {
                                    relayState = 0;
                                  } else {
                                    relayState = loadRelayState(i);
                                  }
                                  send(msgs[i].set(relayState)); // send current state
                                }
                              }
                              // Setup buttons
                              for(int i = 0; i < numberOfRelayButtons; i++) {
                                if (myRelayButtons[i].button >= 0) {
                                  // setup debouncer
                                  myButtonDebouncer[i] = Bounce();
                                  myButtonDebouncer[i].attach(myRelayButtons[i].button);
                                  myButtonDebouncer[i].interval(50);
                                }
                              }
                            }
                            
                            void loop() {
                              for(int i = 0; i < numberOfRelayButtons; i++) {
                                if (myRelayButtons[i].button >= 0 && myButtonDebouncer[i].update()) {
                                  int buttonState = myButtonDebouncer[i].read();
                                  #ifdef MY_DEBUG
                                    Serial.print("# Button ");
                                    Serial.print(i);
                                    Serial.print(" changed to: ");
                                    Serial.println(buttonState);
                                  #endif
                                  
                                  int relayNum = (relayMultiButtons[i].firstButton == -1) ? i : relayMultiButtons[i].firstButton;
                                  
                                  if (myRelayButtons[i].buttonType == DING_DONG) {
                                    if (buttonState == LOW) { // button pressed
                                      changeRelayState(relayNum, 1);
                                      send(msgs[relayNum].set(1));
                                    } else { // button released
                                      changeRelayState(relayNum, 0);
                                      send(msgs[relayNum].set(0));
                                    }
                                  } else if (myRelayButtons[i].buttonType == BI_STABLE || buttonState == HIGH) {
                                    // If button type is BI_STABLE, any change will toggle relay state
                                    // For MONO_STABLE, button must be pushed and released (HIGH)
                                    uint8_t isTurnedOn = ! loadRelayState(relayNum); // 1 - true, 0 - false
                                    changeRelayState(relayNum, isTurnedOn);
                                    send(msgs[relayNum].set(isTurnedOn));
                                    saveRelayState(relayNum, isTurnedOn);
                                  }
                                }
                              }
                            }
                            
                            
                            
                            // MySensors - Presentation
                            // Your sensor must first present itself to the controller.
                            // The presentation is a hint to allow controller prepare for the sensor data that eventually will come.
                            // Executed after "before()" and before "setup()" in: _begin (MySensorsCore.cpp) > gatewayTransportInit() > presentNode()
                            void presentation() {
                              // Send the sketch version information to the gateway and Controller
                              sendSketchInfo("Multi Relay", "1.2");
                              
                              // Register every relay as separate sensor
                              for (int i = 0; i < numberOfRelayButtons; i++) {
                                // if this relay has multiple buttons, register only first
                                if (relayMultiButtons[i].firstButton == -1 || relayMultiButtons[i].firstButton == i) {
                                  // Register all sensors to gw (they will be created as child devices)
                                  // void present(uint8_t childSensorId, uint8_t sensorType, const char *description, bool ack);
                                  //   childSensorId - The unique child id you want to choose for the sensor connected to this Arduino. Range 0-254.
                                  //   sensorType - The sensor type you want to create.
                                  //   description An optional textual description of the attached sensor.
                                  //   ack - Set this to true if you want destination node to send ack back to this node. Default is not to request any ack.
                                  present(myRelayButtons[i].sensorId, S_BINARY, myRelayButtons[i].relayDescription);
                                }
                              }
                            }
                            
                            
                            // MySensors - Handling incoming messages
                            // Nodes that expects incoming data, such as an actuator or repeating nodes,
                            // must implement the receive() - function to handle the incoming messages.
                            // Do not sleep a node where you expect incoming data or you will lose messages.
                            void receive(const MyMessage &message) {
                              // We only expect one type of message from controller. But we better check anyway.
                              if (message.type == V_STATUS) {
                                uint8_t isTurnedOn = message.getBool(); // 1 - true, 0 - false
                                changeRelayState(message.sensor, isTurnedOn);
                                // Store state in eeprom if changed
                                if (loadRelayState(message.sensor) != isTurnedOn) {
                                  saveRelayState(message.sensor, isTurnedOn);
                                }
                                send(msgs[message.sensor].set(isTurnedOn)); // support for OPTIMISTIC=FALSE (Home Asistant)
                                #ifdef MY_DEBUG
                                  // Write some debug info
                                  Serial.print("# Incoming change for sensor: " + message.sensor);
                                  Serial.println(", New status: " + isTurnedOn);
                                #endif
                              }
                            }
                            
                            uint8_t loadRelayState(int relayNum, uint8_t forceEeprom) {
                              uint8_t relayState;
                              if (forceEeprom) {
                                relayState = loadState(RELAY_STATE_STORAGE + relayNum);
                              } else {
                                relayState = myRelayState[relayNum];
                              }
                              #ifdef MY_DEBUG
                                Serial.print("# loadRelayState: ");
                                Serial.print(relayNum);
                                if (forceEeprom) {
                                  Serial.print("(byte ");
                                  Serial.print(RELAY_STATE_STORAGE + relayNum);
                                  Serial.print(")");
                                }
                                Serial.print(" = ");
                                Serial.println(relayState);
                              #endif
                              return(relayState);
                            }
                            
                            void saveRelayState(int relayNum, uint8_t state, uint8_t useEeprom) {
                              
                              int mainRelayNum = (relayMultiButtons[relayNum].firstButton == -1) ? relayNum : relayMultiButtons[relayNum].firstButton;
                              
                              myRelayState[mainRelayNum] = state;
                              if (useEeprom && (relayNum == mainRelayNum)) {
                                saveState(RELAY_STATE_STORAGE + mainRelayNum, state);
                              }
                              
                              int nextButton = mainRelayNum;
                              // update all buttons
                              while ((nextButton = relayMultiButtons[nextButton].nextButton) != -1) {
                                myRelayState[nextButton] = state;
                              };
                            }
                            
                            void saveRelayState(int relayNum, uint8_t state) {
                              uint8_t useEeprom = ((myRelayButtons[relayNum].relayOptions & RELAY_STARTUP_MASK) == 0);
                              saveRelayState(relayNum, state, useEeprom);
                            }
                            
                            void changeRelayState(int relayNum, uint8_t relayState) {
                              
                              uint8_t relayTrigger = myRelayButtons[relayNum].relayOptions & RELAY_TRIGGER_HIGH;
                              uint8_t digitalOutState = relayState ? relayTrigger : ! relayTrigger;
                              
                              #ifdef USE_EXPANDER
                                if ( myRelayButtons[relayNum].relay & 0xff00 ) {
                                  int expanderNo = (myRelayButtons[relayNum].relay >> 8) - 1;
                                  int expanderPin = myRelayButtons[relayNum].relay & 0xff;
                                  expander[expanderNo].digitalWrite(expanderPin, digitalOutState);
                                } else {
                              #endif
                                digitalWrite(myRelayButtons[relayNum].relay, digitalOutState);
                              #ifdef USE_EXPANDER
                                }
                              #endif
                            }
                            

                            And in Home assistant show example decription: Ł2 - kinkiet [C10] or for second Salon 2 [A9] etc.
                            Please help me... because it will be good to identify sensors when add to Controller.

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


                            28

                            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