Problem mit MySensors und DHT22

Begonnen von MarvinLu, 27 November 2018, 19:14:42

Vorheriges Thema - Nächstes Thema

MarvinLu

Schönen guten Abend zusammen.

Ich habe ein Problem mit dem Einrichten meines DHT22-Sensors.

Ich habe für das Wlan-Gateway diese Anleitung genutzt:
https://waschto.eu/mysensors-wlan-gateway/

Und für das Einrichten des Sensors diese hier:
https://waschto.eu/mysensors-luftfeuchtigkeitssensor/

Die Version des MySensors-Sketches ist 2.0. Mit der folgenden Info habe ich dann die benötigte Komponente für den Humidity-Sensor eingebunden:
ZitatANMERKUNG (21.08.2016): Das Programm für den HumiditySensor befindet sich nicht mehr in der Version 2.0 des MySensors-Libary. Einfach die Version 1.5.4 downloaden und in den Sketch-Ordner kopieren. Einfach die Version 1.5.4 downloaden und unter ,,...\MySensors-1.5.4\MySensors-1.5.4\libraries\MySensors\examples" den Ordner ,,HumiditySensor" in den Ordner der 2.0-Version kopieren –> ,,...\MySensors-master\MySensors-master\examples".

Das Beispiel in der Arduino-IDE sieht so aus:
#include <SPI.h>
#include <MySensor.h> 
#include <DHT.h> 

#define CHILD_ID_HUM 0
#define CHILD_ID_TEMP 1
#define HUMIDITY_SENSOR_DIGITAL_PIN 3
unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds)

MySensor gw;
DHT dht;
float lastTemp;
float lastHum;
boolean metric = true;
MyMessage msgHum(CHILD_ID_HUM, V_HUM);
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);


void setup() 
{
  gw.begin();
  dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN);

  // Send the Sketch Version Information to the Gateway
  gw.sendSketchInfo("Humidity", "1.0");

  // Register all sensors to gw (they will be created as child devices)
  gw.present(CHILD_ID_HUM, S_HUM);
  gw.present(CHILD_ID_TEMP, S_TEMP);
 
  metric = gw.getConfig().isMetric;
}

void loop()     

  delay(dht.getMinimumSamplingPeriod());

  float temperature = dht.getTemperature();
  if (isnan(temperature)) {
      Serial.println("Failed reading temperature from DHT");
  } else if (temperature != lastTemp) {
    lastTemp = temperature;
    if (!metric) {
      temperature = dht.toFahrenheit(temperature);
    }
    gw.send(msgTemp.set(temperature, 1));
    Serial.print("T: ");
    Serial.println(temperature);
  }
 
  float humidity = dht.getHumidity();
  if (isnan(humidity)) {
      Serial.println("Failed reading humidity from DHT");
  } else if (humidity != lastHum) {
      lastHum = humidity;
      gw.send(msgHum.set(humidity, 1));
      Serial.print("H: ");
      Serial.println(humidity);
  }

  gw.sleep(SLEEP_TIME); //sleep a bit
}


Wenn ich jetzt das Board und den Port eingestellt habe und die Config auf den Arduino laden will, bekomme ich diese Fehlermeldung:
HumiditySensor-config:31:24: error: MySensor.h: No such file or directory

compilation terminated.

Bibliothek SPI in Version 1.0 im Ordner: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI  wird verwendet
exit status 1
MySensor.h: No such file or directory


Im Ordner \Documents\Arduino\libraries\MySensors gibt es weder die Datei MySensor.h, noch die Datei DHT.h.

Könnte mir bitte jemand helfen? Ich verzweifle hier schon seit Stunden an diesem Problem..

Liebe Grüße und vielen Dank für die Hilfe,
Marvin

Beta-User

Bitte aktuelle libs benutzen und den Thread nach Mysensors verschieben (selber).
Bei mysensors.org gibt es auch für den dht22 einen eigenen sketch, wurde nur in ein separates lib-Paket mit hineingebaut.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

MarvinLu

#2
Zitat von: Beta-User am 27 November 2018, 19:32:40
Bitte aktuelle libs benutzen und den Thread nach Mysensors verschieben (selber).
Bei mysensors.org gibt es auch für den dht22 einen eigenen sketch, wurde nur in ein separates lib-Paket mit hineingebaut.


  • Thema verschoben
  • MySensors by The MySensorsTeam auf Version 2.3.0 aktualisiert
  • DHT sensor library by Adafruit Version 1.3.0 installiert
  • HumiditySensor aus Version 1.5.4 eingefügt
  • Ardunino IDE neugestartet

Fehlermeldung beim Kompilieren:
HumiditySensor-config:31:24: error: MySensor.h: No such file or directory

compilation terminated.

exit status 1
MySensor.h: No such file or directory


Es hat sich also leider nichts verändert..

Auf der Suche nach Hilfe,
Marvin

Markus.

#3
Mach mal im sketch (include teil) aus Mysensor.h -> Mysensors.h


Gruß

Markus

MarvinLu

Guten Abend Markus,

vielen Dank für deine Antwort!

Das hatte ich bereits probiert, war mir auch als erstes aufgefallen.
Wenn ich das ändere, bekomme ich folgende Fehlermeldung:

In file included from D:\Users\Marvin\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.cpp:22:0:

D:\Users\Marvin\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory

compilation terminated.

exit status 1
Fehler beim Kompilieren für das Board Arduino Nano.


Liebe Grüße, Marvin

Markus.

Dann ist es die falsche dht lib
Für das include muss es auf jeden Fall mysensors.h sein

Gruß

Markus

MarvinLu

Habe mal die in den Anhang gepackt, die ich installiert habe.

Ist das nicht die richtige?
Bzw. offensichtlich ist es nicht die richtige. Kannst du mir sagen welche die richtige wäre?

Gruß, Marvin

Markus.

Dein Sketch sieht auch seltsam aus. Wie ist der denn ans Gateway angebunden? NRF?RFM? oder RS485?

Hier mal mein Sketch für RFM. Musst halt nur umbauen auf NRF falls du es verwendest.

#define MY_DEBUG

#define MY_NODE_ID 100

// Enable and select radio type attached
//#define MY_RADIO_NRF24
#define MY_RADIO_RFM69
//#define MY_RS485
#define MY_RFM69_FREQUENCY RFM69_868MHZ

#define MY_BAUD_RATE 38400

#include <SPI.h>
#include <MySensors.h> 
#include <DHT.h>

// Set this to the pin you connected the DHT's data pin to
#define DHT_DATA_PIN 3

// Set this offset if the sensor has a permanent small offset to the real temperatures
#define SENSOR_TEMP_OFFSET 0

// Sleep time between sensor updates (in milliseconds)
// Must be >1000ms for DHT22 and >2000ms for DHT11
static const uint64_t UPDATE_INTERVAL = 300000;

// Force sending an update of the temperature after n sensor reads, so a controller showing the
// timestamp of the last update doesn't show something like 3 hours in the unlikely case, that
// the value didn't change since;
// i.e. the sensor would force sending an update every UPDATE_INTERVAL*FORCE_UPDATE_N_READS [ms]
static const uint8_t FORCE_UPDATE_N_READS = 10;

#define CHILD_ID_HUM 0
#define CHILD_ID_TEMP 1
#define VOLTAGE_CHILD_ID    3

float lastTemp;
float lastHum;
uint8_t nNoUpdatesTemp;
uint8_t nNoUpdatesHum;
bool metric = true;

MyMessage msgHum(CHILD_ID_HUM, V_HUM);
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
MyMessage voltageMsg(VOLTAGE_CHILD_ID, V_VOLTAGE);
DHT dht;

int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point
int oldBatteryPcnt = 0;
float oldBatteryV = 0;

void presentation() 
{
  // Send the sketch version information to the gateway
  sendSketchInfo("TemperatureAndHumidity", "1.1");

  // Register all sensors to gw (they will be created as child devices)
  present(CHILD_ID_HUM, S_HUM);
  present(CHILD_ID_TEMP, S_TEMP);
  present(VOLTAGE_CHILD_ID, S_MULTIMETER);
  metric = getControllerConfig().isMetric;
  analogReference(INTERNAL);
}


void setup()
{
  dht.setup(DHT_DATA_PIN); // set data pin of DHT sensor
  if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {
    Serial.println("Warning: UPDATE_INTERVAL is smaller than supported by the sensor!");
  }
  // Sleep for the time of the minimum sampling period to give the sensor time to power up
  // (otherwise, timeout errors might occure for the first reading)
  sleep(dht.getMinimumSamplingPeriod());
}


void loop()     

  // Force reading sensor, so it works also after sleep()
  dht.readSensor(true);

  // Get temperature from DHT library
  float temperature = dht.getTemperature();
  if (isnan(temperature)) {
    Serial.println("Failed reading temperature from DHT!");
  } else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
    // Only send temperature if it changed since the last measurement or if we didn't send an update for n times
    lastTemp = temperature;
    if (!metric) {
      temperature = dht.toFahrenheit(temperature);
    }
    // Reset no updates counter
    nNoUpdatesTemp = 0;
    temperature += SENSOR_TEMP_OFFSET;
    send(msgTemp.set(temperature, 1));

    #ifdef MY_DEBUG
    Serial.print("T: ");
    Serial.println(temperature);
    #endif
  } else {
    // Increase no update counter if the temperature stayed the same
    nNoUpdatesTemp++;
  }

  // Get humidity from DHT library
  float humidity = dht.getHumidity();
  if (isnan(humidity)) {
    Serial.println("Failed reading humidity from DHT");
  } else if (humidity != lastHum || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
    // Only send humidity if it changed since the last measurement or if we didn't send an update for n times
    lastHum = humidity;
    // Reset no updates counter
    nNoUpdatesHum = 0;
    send(msgHum.set(humidity, 1));

    #ifdef MY_DEBUG
    Serial.print("H: ");
    Serial.println(humidity);
    #endif
  } else {
    // Increase no update counter if the humidity stayed the same
    nNoUpdatesHum++;
  }
  // get the battery Voltage
int sensorValue = analogRead(BATTERY_SENSE_PIN);
Serial.println(sensorValue);
// 1M, 470K divider across battery and using internal ADC ref of 1.1V
// Sense point is bypassed with 0.1 uF cap to reduce noise at that point
// ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
// 3.44/1023 = Volts per bit = 0.003363075
float batteryV = sensorValue * 0.004106;
int batteryPcnt = sensorValue / 10;

Serial.print("Battery Voltage: ");
Serial.print(batteryV);
Serial.println(" V");
Serial.print("Battery percent: ");
Serial.print(batteryPcnt);
Serial.println(" %");

// Power up radio after sleep
sendBatteryLevel(batteryPcnt);
send(voltageMsg.set(batteryV,2));
oldBatteryPcnt = batteryPcnt;
oldBatteryV = batteryV;

  // Sleep for a while to save energy
  sleep(UPDATE_INTERVAL);
}


Als DHT libs habe ich die im Anhang drin drin, keine Ahnung im Moment welche die richtige war.
Aber beim Kompilieren bekommt ich keine Fehlermeldung und meine Sensoren laufen damit.

Gruß

Markus

MarvinLu

#8
Guten Morgen,

vielen Dank!

Ich werde später mal schauen, welche lib die richtige ist. Probiere die mal nach und nach durch. Wenn ich alle auf einmal installiere meckert er..

Wie der Sensor ans Gateway angebunden ist, kann ich dir ehrlich gesagt garnicht sagen, ich habe erstmal nur versucht mich stringent an die Anleitung zu halten. Ich werde mir das aber mal anschauen und dir die Frage auch beantworten.

Liebe Grüße,
Marvin

EDIT: Habe alle nacheinander probiert, und keine bringt den gewünschten Erfolg. Ich kopiere gleich mal alle Fehlermeldungen, die bei den einzelnen Bibliotheken auftreten.

Beta-User

Was ich nicht so recht verstehe: Woher kommt die Überzeugung, dass es irgend ein alter (1.5.4) Sketch sein muß?
Vor ca. 2 Monaten habe ich diesen hier verwendet, war kein act: https://www.mysensors.org/build/humidity (dürfte derselbe sein, den Markus gepostet hat).

Zur Erläuterung: Beim Versionswechsel auf 2.0 wurden die Sketche aufgeteilt in solche, die keine externen libs brauchen - die sind weiter direkt im MySensors-Paket drin - und andere. Diese sind jetzt hier zu finden: https://github.com/mysensors/MySensorsArduinoExamples

Ansonsten sollte man immer alles auf einem SW-Stand halten; und alte Versionen machen in der Regel keinen Sinn. Die neuen gibt es ja, weil irgendwas verbessert oder gefixt wurde...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Markus.

Zitat von: MarvinLu am 28 November 2018, 07:23:52

Wie der Sensor ans Gateway angebunden ist, kann ich dir ehrlich gesagt garnicht sagen, ich habe erstmal nur versucht mich stringent an die Anleitung zu halten. Ich werde mir das aber mal anschauen und dir die Frage auch beantworten.

Liebe Grüße,
Marvin


ÄHHM Du musst doch wissen wie deine Sensoren mit deinem Gateway reden?!?!? Also welches Radio z.B verwendet wird.
Würde mal sagen das ist die Grundvoraussetzung wenn man ein MySensors-Netz aufbauen will. Also verwendest Du einen NRF24L01 auf Gateway und Sensor, oder RFM69 oder halt RS485?

Gruß

Markus

Beta-User

Ergänzung noch:
Meine Arduino-IDE-Version ist noch 1.8.3; die einzige DHT-lib, die installiert ist, meldet sich mit DHT - Version unbekannt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Markus.

#12
Ich glaube wenn man basierend auf dem Beispiel auf der Mysensors Seite https://www.mysensors.org/build/humidity
folgendes Archiv importiert in die IDE
https://github.com/mysensors/MySensorsArduinoExamples/archive/master.zip
Sollte alles dabei sein...

Wie man im Screenshot sieht ist auch eine DHT dabei...
War mal so frei das Zip dranzuhängen......

Gruß

Markus

PS:

Der Hinweis auf der Seite sagt eigentlich alles..
ZitatExample

This example uses a modified version of the external DTH library, which is included in the MySensors external examples. Please install it and restart the Arduino IDE before trying to compile.

Beta-User

@Markus:
Danke für die Recherche - so ist das Bild m.E. jetzt vollständig.

Eine Bitte aber noch: Da die jeweils aktuelle Version der libs auf Github zur Verfügung steht, sollte man es bei dem link belassen und nicht hier wieder eine zip anbieten. Sowas hat dann nämlich leider häufig zur Folge, dass dann in ferner Zukunft, wenn diese hier veraltet ist, wieder jemand hier drüber stolpert, der die Zusammenhänge nicht versteht, weil er den kompletten Thread nicht gelesen hat...
Außerdem kostet Serverspeicher Geld (den Verein...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

MarvinLu

Zitat von: Markus. am 28 November 2018, 08:01:25
ÄHHM Du musst doch wissen wie deine Sensoren mit deinem Gateway reden?!?!? Also welches Radio z.B verwendet wird.
Würde mal sagen das ist die Grundvoraussetzung wenn man ein MySensors-Netz aufbauen will. Also verwendest Du einen NRF24L01 auf Gateway und Sensor, oder RFM69 oder halt RS485?

Ah, jetzt verstehe ich. Entschuldigt, wissen Wissensstand ist noch ziemlich begrenzt. Ich habe vor einigen Wochen erst mit dem Thema smarthome angefangen..

Zur Frage: Ich verwende einen nRF24L01+ (siehe https://waschto.eu/mysensors-wlan-gateway/).

Ich werde gleich alle Bibliotheken einmal löschen und dann die von euch genannten einbinden und dann weitersehen.

Vielen Dank schon mal für eure Hilfe!

Gruß, Marvin