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.
  • 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
    #35

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

    rejoe2R 1 Reply Last reply
    0
    • 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


                              29

                              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