Hi,
after two days testing and trying i give up. BUT i am a programming noob. So i am sure the error is in the code easy to spot for others.
Situation:
Arduino Pro Mini has fife DS18B20 sensors attached. Sending data via serial gateway to domoticz which runs on NanoPi (Raspberry compatible). When i use the mysensors temp sketch all works well without problems.
But i can't use the "standard sketch" because the mysensors code is not assigning DeviceAdreses manually which i need for this project.
So here is my code:
#define MY_RADIO_NRF24
#define MY_DEBUG
#include <MySensors.h>
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 4
#define TEMPERATURE_PRECISION 10
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
#define NODE_ID 1
#define CHILD_ID_WIND 1
#define CHILD_ID_TEMP 3
unsigned int val_wspeed;
unsigned int val_wgust;
unsigned int val_wdirection;
unsigned int last_wspeed;
unsigned int last_wgust;
unsigned int last_wdirection;
DeviceAddress temp1 = { 0x28, 0xEE, 0xB6, 0xB1, 0x27, 0x16, 0x01, 0x1F };
DeviceAddress temp2 = { 0x28, 0xEE, 0xE1, 0x20, 0x28, 0x16, 0x01, 0xEA };
DeviceAddress temp3 = { 0x28, 0xEE, 0x0D, 0xAA, 0x24, 0x16, 0x02, 0x8A };
DeviceAddress temp4 = { 0x28, 0xEE, 0x7D, 0xA8, 0x24, 0x16, 0x02, 0xE0 };
DeviceAddress temp5 = { 0x28, 0xFF, 0xF6, 0x8F, 0x62, 0x16, 0x03, 0x7F };
MyMessage msgWSpeed(CHILD_ID_WIND, V_WIND);
MyMessage msgWGust(CHILD_ID_WIND, V_GUST);
MyMessage msgWDirection(CHILD_ID_WIND, V_DIRECTION);
MyMessage msg(CHILD_ID_TEMP,V_TEMP);
void setup(void)
{
// start serial port
Serial.begin(115200);
Serial.println("Dallas Temperature IC Control Library Demo");
// Start up the library
sensors.begin();
// report parasite power requirements
Serial.print("Parasite power is: ");
if (sensors.isParasitePowerMode()) Serial.println("ON");
else Serial.println("OFF");
// set the resolution to 9 bit
sensors.setResolution(temp1, TEMPERATURE_PRECISION);
sensors.setResolution(temp2, TEMPERATURE_PRECISION);
sensors.setResolution(temp3, TEMPERATURE_PRECISION);
sensors.setResolution(temp4, TEMPERATURE_PRECISION);
sensors.setResolution(temp5, TEMPERATURE_PRECISION);
}
void presentation()
{
present(CHILD_ID_WIND, S_WIND);
present(CHILD_ID_TEMP, S_WIND);
}
void loop()
{
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
Serial.print("Requesting temperatures...");
sensors.requestTemperatures();
Serial.println("DONE");
// print the device information
float east = sensors.getTempC(temp1);
Serial.print("East C: ");
Serial.println(east);
send(msg.setSensor(temp1).set(east,1));
float north = sensors.getTempC(temp2);
Serial.print("North C: ");
Serial.println(north);
send(msg.setSensor(temp2).set(north,1));
float west = sensors.getTempC(temp5);
Serial.print("West C: ");
Serial.println(west);
send(msg.setSensor(temp4).set(west,1));
float south = sensors.getTempC(temp3);
Serial.print("South C: ");
Serial.println(south);
send(msg.setSensor(temp5).set(south,1));
float temp33 = sensors.getTempC(temp4);
Serial.print("Test C: ");
Serial.println(temp33);
send(msg.setSensor(temp33).set(temp33,1));
// calculating wind direction form temperature differences
if (north > south && north > west && north > east ) {
Serial.println("SOUTH");
unsigned int val_wdirection = 180;
send(msgWDirection.set(val_wdirection));
Serial.print("WD: ");
Serial.println(val_wdirection);
}
if (east > north && east > west && east > south ) {
Serial.println("WEST");
unsigned int val_wdirection = 280;
send(msgWDirection.set(val_wdirection));
Serial.print("WD: ");
Serial.println(val_wdirection);
}
if (south > north && south > west && south > east ) {
Serial.println("NORTH");
unsigned int val_wdirection = 0;
send(msgWDirection.set(val_wdirection));
Serial.print("WD: ");
Serial.println(val_wdirection);
}
if (west > north && west > south && west > east ) {
Serial.println("EAST");
unsigned int val_wdirection = 90;
send(msgWDirection.set(val_wdirection));
Serial.print("WD: ");
Serial.println(val_wdirection);
}
//domoticz must see speed and gust so i give random numbers for testing
unsigned int val_wspeed = 17;
if(last_wspeed != val_wspeed)
{
last_wspeed = val_wspeed;
send(msgWSpeed.set(val_wspeed, 1));
Serial.print("WS: ");
Serial.println(val_wspeed);
}
unsigned int val_wgust = 5;
if(last_wgust != val_wgust)
{
last_wgust = val_wgust;
send(msgWGust.set(val_wgust, 1));
Serial.print("WG: ");
Serial.println(val_wgust);
}
delay (5000);
}
Problem:
Domoticz adds more and more temp sensors in the Device List. Randomly i would say. Sometimes fife new devices within 10 minutes. Sometimes none for one hour.
What is causing that?
I get this compiling warning from Arduino IDE which i don't know how to solve. Is that the problem?
C:\Users\ed\Documents\Arduino\Wind-Test\Wind-Test-incl-temp\Wind-Test-incl-temp.ino: In function 'void loop()':
C:\Users\ed\Documents\Arduino\Wind-Test\Wind-Test-incl-temp\Wind-Test-incl-temp.ino:122:27: warning: invalid conversion from 'uint8_t* {aka unsigned char*}' to 'uint8_t {aka unsigned char}' [-fpermissive]
send(msg.setSensor(temp1).set(east,1));
^
In file included from C:\Users\ed\Documents\Arduino\libraries\MySensors/MySensors.h:333:0,
from C:\Users\ed\Documents\Arduino\Wind-Test\Wind-Test-incl-temp\Wind-Test-incl-temp.ino:3:
C:\Users\ed\Documents\Arduino\libraries\MySensors/core/MyMessage.cpp:217:12: note: initializing argument 1 of 'MyMessage& MyMessage::setSensor(uint8_t)'
MyMessage& MyMessage::setSensor(uint8_t _sensor)
What i tried on hardware side:
- Changed Arduino
- Changed 4 out of 5 temp sensors
- Changed Radio
Here newly added temp-sensors for the last 20 minutes

Any ideas, hints or even solutions?
15USD for solution. Totally worth it :)
Cheers
ED