Selbstbau HM_WDS10_TH_O mit Luftdruckmessung

Begonnen von trilu, 23 Februar 2014, 12:23:22

Vorheriges Thema - Nächstes Thema

Dirk

Zitat von: xequtor am 15 Mai 2014, 13:18:18
Nur das Problem ist reverse Engineering von dem Code von Dirk da ich es HM Protokoll kompatibel machen möchte.
Der Code spricht schon HM. Du musts also nur deine Temperaturwerte anstelle der Temperatur vom SHT10 senden.

Gruß
Dirk

xequtor

#496
Hallo Dirk,
ist mir bewusst, was ich meine war der Code fuer PanStamp was Christoph meinte, der spricht kein HM deswegen will ich es mit deinem machen.
Mein Problem ist Implementierung fuer Arduino mini Pro (3.3V, 8Mhz) und DHT22.

Mit was kompilierst Du es? Ich gehe davon aus dass mit Arduino IDE wird es nicht funktionieren oder?
2x RPi FHEM + CUL

Tobias

Panstamp kann schon DHT22. Warum nutzt du nicht SWAP? Ist der Weg des geringsten Widerstandes.....
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

xequtor

Tobias,
werde ich auch tun mit einem von meinen Mini Pro/DHT22 aber irgend wie mag ich die Idee mit HM Protokoll. (fuer HMLAN den ich noch nicht habe)
2x RPi FHEM + CUL

trilu

Die Lib ist für die Arduino IDE ausgelegt,  du kannst damit kompilieren und auf den Panstamp laden.  Zum proggen finde ich sie aber unübersichtlich  8)
Viele Grüsse
Horst

Dirk

Der Code vom Sensor sollte auch in der Arduino-IDE Kompilieren.
Zum Entwickeln habe ich das Arduino Eclipse-Plugin verwendet.

Gruß
Dirk

xequtor

#501
Hallo Dirk,
ich hab jetzt meine Eclipse Umgebung gebaut (mit Blink getestet und alles OK)  und Kämpfe mit AskSin. Ich nutze die Eclipse Arduino IDE von eclipse.baeyens.it
Soweit kann ich den AskSin Project kompilieren bis auf:
Sensor_SHT10_BMP085_TSL2561.cpp
Sensor_SHT10_BMP085_TSL2561.h
die zwei schmeißen jede menge errors (41)
Brauche ich die zwei?

Was muss ich machen um nur fuer DHT22 ne hex zu kompilieren?
Fuer nen Eclipse Neuling ist jede menge Code wenn man vorher nur mit Arduino IDE "programmierte" :)

hab noch warning in AskSinMain.cpp gehabt aber bechoben:
alt:
pevt.data[0] = (temp >> 8) & 0xFF | battery.state << 7;
neu:
pevt.data[0] = ((temp >> 8) & 0xFF) | battery.state << 7;
2x RPi FHEM + CUL

Dirk

Zitat von: xequtor am 17 Mai 2014, 11:19:05
ich hab jetzt meine Eclipse Umgebung gebaut (mit Blink getestet und alles OK)  und Kämpfe mit AskSin. Ich nutze die Eclipse Arduino IDE von eclipse.baeyens.it
Die nutze ich auch.

ZitatSoweit kann ich den AskSin Project kompilieren bis auf:
Sensor_SHT10_BMP085_TSL2561.cpp
Sensor_SHT10_BMP085_TSL2561.h
die zwei schmeißen jede menge errors (41)
Welche Arduino-IDE hast du im Eclipse-Plugin angegeben?
Versuche mal die Version 1.5.2

ZitatBrauche ich die zwei?
Da drin wird das Sensorreading behandelt.
Am Anfang könntest du dich mit einhängen.
Wenn du Ausschliesslich deinen einen Sensor nutzen möchtest, kannst du dir hier auch eine eigene Klasse schreiben.

ZitatWas muss ich machen um nur fuer DHT22 ne hex zu kompilieren?
Hast du eine Arduino-Lib für den Sensor?

ZitatFuer nen Eclipse Neuling ist jede menge Code wenn man vorher nur mit Arduino IDE "programmierte" :)
Obwohl das doch auch nicht viel anders ist. Der Code sollte aber auch mit der Arduino-IDE alleine kompilieren.

Zitathab noch warning in AskSinMain.cpp gehabt aber bechoben:
alt:
pevt.data[0] = (temp >> 8) & 0xFF | battery.state << 7;
neu:
pevt.data[0] = ((temp >> 8) & 0xFF) | battery.state << 7;
Kann man machen. Die Klammer sollte aber optional sein.

Gruß
Dirk

xequtor

#503
ZitatWelche Arduino-IDE hast du im Eclipse-Plugin angegeben?
Versuche mal die Version 1.5.2
eben die 1.5.2 nutze ich.

hier der Error:

Building file: ../Sensor_SHT10_BMP085_TSL2561.cpp
Starting C++ compile
"/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++" -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=152    -I"/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino" -I"/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/variants/standard" -MMD -MP -MF"Sensor_SHT10_BMP085_TSL2561.cpp.d" -MT"Sensor_SHT10_BMP085_TSL2561.cpp.d" -D__IN_ECLIPSE__=1 -x c++ "../Sensor_SHT10_BMP085_TSL2561.cpp"  -o  "Sensor_SHT10_BMP085_TSL2561.cpp.o"
In file included from ../Sensor_SHT10_BMP085_TSL2561.cpp:8:
../Sensor_SHT10_BMP085_TSL2561.h:37: error: 'Sensirion' has not been declared
../Sensor_SHT10_BMP085_TSL2561.h:37: error: 'BMP085' has not been declared
../Sensor_SHT10_BMP085_TSL2561.h:37: error: 'TSL2561' has not been declared
../Sensor_SHT10_BMP085_TSL2561.h:69: error: ISO C++ forbids declaration of 'Sensirion' with no type
../Sensor_SHT10_BMP085_TSL2561.h:69: error: expected ';' before '*' token
../Sensor_SHT10_BMP085_TSL2561.h:70: error: ISO C++ forbids declaration of 'BMP085' with no type
../Sensor_SHT10_BMP085_TSL2561.h:70: error: expected ';' before '*' token
../Sensor_SHT10_BMP085_TSL2561.h:71: error: ISO C++ forbids declaration of 'TSL2561' with no type
../Sensor_SHT10_BMP085_TSL2561.h:71: error: expected ';' before '*' token
../Sensor_SHT10_BMP085_TSL2561.cpp:15: error: 'Sensirion' has not been declared
../Sensor_SHT10_BMP085_TSL2561.cpp:15: error: 'BMP085' has not been declared
../Sensor_SHT10_BMP085_TSL2561.cpp:15: error: 'TSL2561' has not been declared
../Sensor_SHT10_BMP085_TSL2561.cpp: In member function 'void Sensors_SHT10_BMP085_TSL2561::config(uint8_t, uint8_t, uint16_t, int*, int*, int*)':
../Sensor_SHT10_BMP085_TSL2561.cpp:20: error: 'sht10' was not declared in this scope
../Sensor_SHT10_BMP085_TSL2561.cpp:22: error: 'LOW_RES' was not declared in this scope
../Sensor_SHT10_BMP085_TSL2561.cpp:25: error: 'bm180' was not declared in this scope
../Sensor_SHT10_BMP085_TSL2561.cpp:29: error: 'tsl2561' was not declared in this scope
../Sensor_SHT10_BMP085_TSL2561.cpp:33: error: 'tsl2561' was not declared in this scope
../Sensor_SHT10_BMP085_TSL2561.cpp:34: error: 'INTEGATION_TIME_14' was not declared in this scope
../Sensor_SHT10_BMP085_TSL2561.cpp: In member function 'void Sensors_SHT10_BMP085_TSL2561::poll_measure()':
../Sensor_SHT10_BMP085_TSL2561.cpp:48: error: 'sht10' was not declared in this scope
../Sensor_SHT10_BMP085_TSL2561.cpp:60: error: 'bm180' was not declared in this scope
../Sensor_SHT10_BMP085_TSL2561.cpp:76: error: 'tsl2561' was not declared in this scope
make: *** [Sensor_SHT10_BMP085_TSL2561.cpp.o] Error 1


ZitatWenn du Ausschliesslich deinen einen Sensor nutzen möchtest, kannst du dir hier auch eine eigene Klasse schreiben.
Hast du eine Arduino-Lib für den Sensor?
ja, fuer den DHT22 hab ich eine lib, ich nutze den DHT z.Z. mit einem LCD

im Anhang Bild von wie es in Ecliple das Project ausschaut, was mich auch wundert ist in Includes AskSin/AskSin und AskSin/AskSin/utility ich kann es nicht loeschen
2x RPi FHEM + CUL

Dirk

#504
Bei dir fehlen noch ein paar andere Libs.
Die sind alle im Code auf Github mit drinn.

Die AskSin-Lib hat aber ein eigenes Subrepo. Das musst du extra auschecken. Von hier:
https://github.com/kc-GitHub/AskSin

Das ist eine geforkte Version von Trilu seiner Lib, in der wichtige Bugfixes drin sind.
@Trilu: Meinst du wir könnten das demnächst mal mergen?
Wie sieht es aktuell mit deiner Zeit aus?

Ich vermisse bei dir im Projekt auch den Libraries-Ordner.
Bei mir sieht es so aus:

xequtor

#505
danke Dirk!
endlich kann ich kompilieren ohne errors. Habs fast aufgegeben :)

Jetzt muss ich noch rausfinden wo und was auskommentieren dass nur der DHT22/SHT10 bleibt (hab bereits den BMP180 bestellt, der TSL2561 ist "teuer" finde ich)
Ausserdem noch muss ich die pins Konfiguration finden und fuer Arduino Mini Pro anpassen, also wo die Sensoren, LED's etc. angeschlossen werden.

ein Problem hab ich noch, wenn ich den DHT22 oder DHT11 and den Arduino mini Pro mit 8Mhz/3.3V anschliessen kriege ich keine werte von dem sensor aber mit jeden anderen 5V chip wie MEGA2560 oder Uno funktioniert mit gleichem code, liegt es an den 8Mhz, 3.3V oder sonst was? Ich hab es nicht mit dem code von WetterSensor getestet sonder mit eigenem.
2x RPi FHEM + CUL

Thorsten Pferdekaemper

Zitat von: Dirk am 06 Mai 2014, 23:24:28Anbei auch das Kompilierte Hex-File.
Hi,
ich habe jetzt endlich mal den Wettersensor ohne die Lux-Messung ausprobiert. (Firmware HB-UW-Sen-THPL-I_08_without_lux.hex)
Das Ergebnis ist noch schlechter als vorher:

2014-05-18_21:22:53 CUL_HM_UWS_THPL_ABCDEF T: 23.4 H: 50 Lux: 65538 P: 999 batVoltage: 2.31
2014-05-18_21:23:42 og_bd_HeizungOp T: 23.4 desired: 20.0 valve: 0
2014-05-18_21:25:35 CUL_HM_UWS_THPL_ABCDEF T: 24.0 H: 52 Lux: 65538 P: 999 batVoltage: 2.30
2014-05-18_21:26:13 og_bd_HeizungOp T: 23.4 desired: 20.0 valve: 0
2014-05-18_21:28:02 CUL_HM_UWS_THPL_ABCDEF T: 24.8 H: 40 Lux: 65538 P: 999 batVoltage: 2.30
2014-05-18_21:28:29 og_bd_HeizungOp T: 23.4 desired: 20.0 valve: 0
2014-05-18_21:30:14 CUL_HM_UWS_THPL_ABCDEF T: 20.2 H: 42 Lux: 65538 P: 999 batVoltage: 2.32
2014-05-18_21:30:31 og_bd_HeizungOp T: 23.4 desired: 20.0 valve: 0
2014-05-18_21:33:16 CUL_HM_UWS_THPL_ABCDEF T: 17.0 H: 45 Lux: 65538 P: 999 batVoltage: 2.30
2014-05-18_21:33:23 og_bd_HeizungOp T: 21.3 desired: 20.0 valve: 0
2014-05-18_21:36:00 og_bd_HeizungOp T: 21.4 desired: 20.0 valve: 28
2014-05-18_21:36:04 CUL_HM_UWS_THPL_ABCDEF T: 15.6 H: 46 Lux: 65538 P: 999 batVoltage: 2.30
2014-05-18_21:38:23 og_bd_HeizungOp T: 21.5 desired: 20.0 valve: 28
2014-05-18_21:38:37 CUL_HM_UWS_THPL_ABCDEF T: 14.8 H: 47 Lux: 65538 P: 999 batVoltage: 2.31
2014-05-18_21:40:31 og_bd_HeizungOp T: 21.3 desired: 20.0 valve: 28
2014-05-18_21:40:55 CUL_HM_UWS_THPL_ABCDEF T: 14.2 H: 54 Lux: 65538 P: 999 batVoltage: 2.32
2014-05-18_21:42:59 CUL_HM_UWS_THPL_ABCDEF T: 14.0 H: 57 Lux: 65538 P: 999 batVoltage: 2.31
2014-05-18_21:43:29 og_bd_HeizungOp T: 21.2 desired: 20.0 valve: 28
2014-05-18_21:45:53 CUL_HM_UWS_THPL_ABCDEF T: 14.7 H: 74 Lux: 65538 P: 999 batVoltage: 2.30
2014-05-18_21:46:13 og_bd_HeizungOp T: 21.2 desired: 20.0 valve: 28

Es sieht so aus, als ob der RT den ersten Wert nach dem Peeren mitbekommt, aber dann nichts mehr. Er scheint dann relativ bald aufzugeben und seinen internen Wert zu verwenden.
Gruß,
    Thorsten
FUIP

Thorsten Pferdekaemper

So, jetzt habe ich das Teil mal selbst kompiliert, die Lichtmessung ausgebaut und calcSendSlot nimmt jetzt "hm->getMsgCnt()+1". Das Ergebnis ist etwas besser als vorher, aber noch nicht perfekt:

2014-05-18_23:39:20 DirksSensor T: 22.1 H: 53 Lux: 65538 P: 999 batVoltage: 2.32
2014-05-18_23:40:05 og_bd_HeizungOp T: 21.1 desired: 12.0 valve: 0
2014-05-18_23:42:15 DirksSensor T: 21.3 H: 45 Lux: 65538 P: 999 batVoltage: 2.30
2014-05-18_23:42:25 og_bd_HeizungOp T: 21.3 desired: 12.0 valve: 0
2014-05-18_23:44:31 og_bd_HeizungOp T: 21.3 desired: 12.0 valve: 0
2014-05-18_23:44:56 DirksSensor T: 17.4 H: 47 Lux: 65538 P: 999 batVoltage: 2.31
2014-05-18_23:47:22 DirksSensor T: 15.5 H: 47 Lux: 65538 P: 999 batVoltage: 2.30
2014-05-18_23:47:26 og_bd_HeizungOp T: 15.5 desired: 12.0 valve: 0
2014-05-18_23:49:33 DirksSensor T: 14.6 H: 48 Lux: 65538 P: 999 batVoltage: 2.31
2014-05-18_23:50:07 og_bd_HeizungOp T: 15.5 desired: 12.0 valve: 0
2014-05-18_23:52:34 og_bd_HeizungOp T: 15.5 desired: 12.0 valve: 0
2014-05-18_23:52:34 DirksSensor T: 13.8 H: 49 Lux: 65538 P: 999 batVoltage: 2.30
2014-05-18_23:54:46 og_bd_HeizungOp T: 15.5 desired: 12.0 valve: 0
2014-05-18_23:55:20 DirksSensor T: 13.2 H: 49 Lux: 65538 P: 999 batVoltage: 2.30
2014-05-18_23:57:47 og_bd_HeizungOp T: 13.2 desired: 12.0 valve: 0
2014-05-18_23:57:53 DirksSensor T: 12.9 H: 50 Lux: 65538 P: 999 batVoltage: 2.30

...aber vielleicht muss sich da noch was einpendeln.
Ich hatte vorher eine Version ohne Lichtmessung aber mit dem alten Message Counter. Das sah schlechter aus.
FUIP

Thorsten Pferdekaemper

Hi,
ich habe jetzt die Helligkeitsmessung wieder mit reingenommen und es funktioniert immer noch (oder sogar besser):

2014-05-19_00:21:03 DirksSensor T: 22.1 H: 53 Lux: 25.07 P: 999 batVoltage: 2.30
2014-05-19_00:23:21 og_bd_HeizungOp T: 22.1 desired: 18.0 valve: 0
2014-05-19_00:23:29 DirksSensor T: 22.2 H: 53 Lux: 26.4 P: 999 batVoltage: 2.31
2014-05-19_00:25:40 DirksSensor T: 22.1 H: 49 Lux: 0 P: 999 batVoltage: 2.30
2014-05-19_00:25:52 og_bd_HeizungOp T: 22.1 desired: 18.0 valve: 0
2014-05-19_00:26:22 og_bd_HeizungOp T: 22.1 desired: 18.0 valve: 0
2014-05-19_00:28:24 og_bd_HeizungOp T: 22.1 desired: 18.0 valve: 0
2014-05-19_00:28:42 DirksSensor T: 17.8 H: 51 Lux: 0 P: 999 batVoltage: 2.30
2014-05-19_00:31:16 og_bd_HeizungOp T: 17.8 desired: 12.0 valve: 0
2014-05-19_00:31:28 DirksSensor T: 15.7 H: 54 Lux: 0 P: 999 batVoltage: 2.31
2014-05-19_00:33:53 og_bd_HeizungOp T: 15.7 desired: 12.0 valve: 0
2014-05-19_00:34:00 DirksSensor T: 14.8 H: 56 Lux: 0 P: 999 batVoltage: 2.31
2014-05-19_00:36:16 og_bd_HeizungOp T: 14.8 desired: 12.0 valve: 0
2014-05-19_00:36:18 DirksSensor T: 14.6 H: 82 Lux: 0 P: 999 batVoltage: 2.30
2014-05-19_00:38:20 DirksSensor T: 16.5 H: 81 Lux: 0 P: 999 batVoltage: 2.30
2014-05-19_00:41:13 DirksSensor T: 18.3 H: 76 Lux: 0 P: 999 batVoltage: 2.31
2014-05-19_00:41:22 og_bd_HeizungOp T: 18.3 desired: 12.0 valve: 0
2014-05-19_00:43:52 DirksSensor T: 19.2 H: 72 Lux: 0 P: 999 batVoltage: 2.30
2014-05-19_00:44:06 og_bd_HeizungOp T: 18.3 desired: 12.0 valve: 0
2014-05-19_00:46:16 DirksSensor T: 19.7 H: 70 Lux: 0 P: 999 batVoltage: 2.30
2014-05-19_00:46:35 og_bd_HeizungOp T: 19.7 desired: 18.0 valve: 0

Es sind ein paar Wackler drin, aber das kann auch daran liegen, dass die Übertragung vom Kühlschrank ins Bad nicht ganz optimal ist.
Ich denke auf jeden Fall, dass es nicht an den Delays bei der Helligkeitsmessung liegt. Soweit ich das Coding verstehe, dürfen die Messungen insgesamt 1000ms dauern, egal ob mit millis() oder per delay().
Ich lasse das jetzt mal über Nacht laufen.

Ach so ja. Die Änderung:
uint32_t result = (((hm->getHMID() << 8) | (hm->getMsgCnt()+1)) * 1103515245 + 12345) >> 16;
...die "+1" scheinen den Unterschied zu machen.

Was mir noch aufgefallen ist:

void SHT10_BMP085_TSL2561::poll(void) {
unsigned long mils = millis();

// just polling, as the function name said
if ((nTime == 0) || (nTime > mils)) {

Kann das nicht nach ungefähr 49 Tagen ziemlich schief gehen? Dann ist nämlich irgendwann nTime fast am Ende und mils schon übergelaufen. Dann bleibt nTime > mils fast 49 Tage. Oder?

Gruß,
    Thorsten
FUIP

trilu

ja, das war damals der plan - ich gehe von der nächsten zu sendenden zeit 1000ms zurück und starte die messung.
ich war mir damals nicht ganz sicher wie lange ein messzyklus wirklich dauert.

if ((nTime == 0) || (nTime > mils))
das dürfte eigentlich kein problem geben, da die nächste zeit immer wieder auf basis der aktuellen zeit gesetzt wird.
ist ja ein unsigned integer. nehmen wir mal an ich brauche in 1000ms einen event und wir sind kurz vor den 49 tagen.
dann würde ich nTime so setzen nTime = millis() + 1000 - wobei millis() gerade 65500 wäre.
nTime wäre somit 65500 + 1000 = 965
nach der 49 tage grenze spring millis ja auch wieder auf 0 und somit sollte die if funktionieren.

Zitat@Trilu: Meinst du wir könnten das demnächst mal mergen?
Wie sieht es aktuell mit deiner Zeit aus?
angespannt  ;)
wenn du mir sagst was ich machen muss (bin nicht der held mit git)
am wochenende kann ich schon mal ein bischen zeit einbringen, vorzugsweise bei schlechtem wetter.

viele grüße
horst