Skip to content
  • 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.
  • Getting Started
  • Controller
  • Build
  • Hardware
  • Download/API
  • Forum
  • Store

About DS18B20 onewire.

Scheduled Pinned Locked Moved Hardware
dallasone wireonewireds18b20
48 Posts 5 Posters 12.3k 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
    #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


                  5

                  Online

                  11.7k

                  Users

                  11.2k

                  Topics

                  113.0k

                  Posts


                  Copyright 2019 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
                  • OpenHardware.io
                  • Categories
                  • Recent
                  • Tags
                  • Popular