Heizungssteuerung mithilfe Fhem und Arduino steuern

Begonnen von butaluk, 05 Dezember 2017, 15:54:23

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Hi,
bist Du damit weitergekommen?
Gruß,
   Thorsten
FUIP

butaluk

Hallo Thorsten,
Zitatbist Du damit weitergekommen?
habe gerade keine Möglichkeit, bin unterwegs.
Aber den Code habe angeschaut und da habe ich eine Frage.
Wie wird die Funktion ausgeführt? man muß der Funktion den Kanal übergeben an dem die 1-Wire Sensoren dran Sind.
Bin nich so mechtig in der C++ wie du :D

MfG
Vitalij

Thorsten Pferdekaemper

Im Prinzip genauso wie HBWSwitch bzw. HBWKey im Tutorial.
Gruß,
   Thorsten
FUIP

butaluk

Hallo Thorsten,

So... bin wieder am Ball
Beim kompilieren von dem Programm schmeißt der Compiler folgendes Fehler:
HBWDS18B20.cpp:31:45: error: no matching function for call to 'HBWDevice::sendInfoMessage(uint8_t&, int, uint16_t*)'

   device->sendInfoMessage(channel, 2, &value); 


Das gesamte Programm sieht so aus:
#define HMW_DEVICETYPE 0xAB

#define HARDWARE_VERSION 0x01
#define FIRMWARE_VERSION 0x0100

#include "HBWSoftwareSerial.h"
#include "HBWired.h"

#include "HBWDS18B20.h"

#define RS485_RXD 4   // Receive-Pin
#define RS485_TXD 2   // Transmit-Pin
#define RS485_TXEN 3  // Transmit-Enable

struct hbw_config {
  uint8_t  logging_time;     // 0x0001
  uint32_t central_address;  // 0x0002 - 0x0005
  hbw_config_ds18b20 ds18b20cfg;  // 0x0006
} config;


HBWSoftwareSerial rs485(RS485_RXD, RS485_TXD);
HBWDevice* device = NULL;

HBWChannel* channels[1];

void setup()
{
  Serial.begin(19200);
  rs485.begin();

  channels[0] = new HBWDS18B20(10,&(config.ds18b20cfg));

  device = new HBWDevice(HMW_DEVICETYPE, HARDWARE_VERSION, FIRMWARE_VERSION,
                         &rs485,RS485_TXEN,sizeof(config),&config,
                         // NEU
                         1,channels,
                         &Serial,
                         NULL, NULL);
}


void loop()
{
  // call the HBW loop
  device->loop();
};

Kannst du dir das noch mal angucken? Danke!

MfG
  Vitalij

Thorsten Pferdekaemper

Hi,
kannst Du mal Zeile 31 in HBWDS18B20.cpp auf das hier ändern:

device->sendInfoMessage(channel, 2, (uint8_t*)(&value));    

Ich kann das gerade nicht ausprobieren, ist also eher ein Versuchsballon.
Gruß,
   Thorsten
FUIP

butaluk

#50
Hi,
Mit dem Kompilieren hat es jetzt geklappt.
Das Arduino sendet jetzt sekündlich Daten ans Fhem:
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:69:00:F3:7D:10:22
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:06:69:00:F3:7D:10:22

Im Fhem wird aber ein anderes Gerät erkannt.
Siehe Screenshot.

MfG
  Vitalij

Thorsten Pferdekaemper

Hi,
Das ist doch schonmal gut.
Ändere mal den HMW_DEVICETYPE am Anfang Deiner Datei von 0xAB auf 0x81, also so:

#define HMW_DEVICETYPE 0x81

Nachdem Du das Teil neu geflasht hast löschst Du das Device in FHEM am besten wieder und "resettest" den Arduino, so dass FHEM das Ding neu erkennen kann. Es müsste dann ein HBW-1W-T10 "entstehen" und die Temperatur müsste im ersten Kanal ankommen. (Oder so etwas ähnliches.)
...dann sehen wir weiter.
Gruß,
   Thorsten
FUIP

butaluk

Hi Thorsten,
Es klappt!!!!!!!!
Allerdings bekomme ich falsche Temperatur Werte, hängt das mit den min max Werten in der XML Datei?
<logical type="float" min="-273.15" max="327.67" unit="℃"/>
Und die Temperatur wird sekündlich vom Arduino gesendet.

MfG
  Vitalij

Thorsten Pferdekaemper

Hi,
sag mir mal, was so ungefähr die richtige Temperatur wäre, am besten zusammen mit der falschen und dem Log, das der Arduino ausspuckt. Ich glaube, da ist eher was mit der Reihenfolge der Bytes durcheinander geraten.
Kommt die Temperatur wirklich jede Sekunde? Eigentlich sollte es alle 10 Sekunden sein.
Gruß,
   Thorsten
FUIP

butaluk

Hi,
Es sind ca. 23°C. Der HBW_1W_T10 anzeigt -32,03 °C
Am Seriellen Port vom Arduino sind folgende Daten zu sehen:
R: ACK
T: FD:00:00:00:01:98:42:FF:FF:FF:06:69:00:F3:7D:A5:32
R: FD:42:FF:FF:FF:19:00:00:00:01:02:F5:06

Im Fhem Event Monitor sieht man:

2018-03-26 15:40:11 HM485 HBW_1W_T10_HBW4073471_01 temperature: -32.03
2018-03-26 15:40:11 HM485 HBW_1W_T10_HBW4073471_01 temperature_-32.03

Ich habe festgestellt dass wenn das DS18B20 Temperatursensor erwärmt wird, ändert sich die anzeige nicht.

Habe die "else if" Bedingung in der .cpp Datei so angepasst:
else if(state == 1 && (now -lastUpdateTime >= 1000))
Jetzt kommen die Werte ein mal in 10sec. Allerdings ist der Temperaturwert immer noch falsch und beträgt 296.08 °C.

MfG
  Vitalij

Thorsten Pferdekaemper

Hi,
ja, Dein Fix für die 10 Sekunden ist schonmal gut. Das gibt auch dem Teil die Chance, die Temperatur tatsächlich korrekt zu liefern.
Jetzt noch in der Zeile hier das " + 27315" weglassen:

uint16_t value = raw * 100 / 16 + 27315; 

...dann müsste die Temperatur richtig ankommen. Ich hatte da anscheinend was falsch in Erinnerung.
Gruß,
   Thorsten
FUIP

butaluk

Hi,
die Temperatur wird immer noch falsch angezeigt.
Der Wert ändert sich auch ganz schön extrem:
2018-03-26 19:04:01 HM485 HBW_1W_T10_HBW4073471_01 temperature: -31.98
2018-03-26 19:04:01 HM485 HBW_1W_T10_HBW4073471_01 temperature_-31.98
2018-03-26 19:04:11 HM485 HBW_1W_T10_HBW4073471_01 temperature: 131.68
2018-03-26 19:04:11 HM485 HBW_1W_T10_HBW4073471_01 temperature_131.68
2018-03-26 19:04:21 HM485 HBW_1W_T10_HBW4073471_01 temperature: 295.33
2018-03-26 19:04:21 HM485 HBW_1W_T10_HBW4073471_01 temperature_295.33
2018-03-26 19:04:31 HM485 HBW_1W_T10_HBW4073471_01 temperature: 131.43
2018-03-26 19:04:31 HM485 HBW_1W_T10_HBW4073471_01 temperature_131.43
2018-03-26 19:04:41 HM485 HBW_1W_T10_HBW4073471_01 temperature: 131.68
2018-03-26 19:04:41 HM485 HBW_1W_T10_HBW4073471_01 temperature_131.68
2018-03-26 19:04:51 HM485 HBW_1W_T10_HBW4073471_01 temperature: 295.58
2018-03-26 19:04:51 HM485 HBW_1W_T10_HBW4073471_01 temperature_295.58
2018-03-26 19:05:01 HM485 HBW_1W_T10_HBW4073471_01 temperature: -32.23
2018-03-26 19:05:01 HM485 HBW_1W_T10_HBW4073471_01 temperature_-32.23
2018-03-26 19:05:11 HM485 HBW_1W_T10_HBW4073471_01 temperature: 295.33
2018-03-26 19:05:11 HM485 HBW_1W_T10_HBW4073471_01 temperature_295.33
2018-03-26 19:05:21 HM485 HBW_1W_T10_HBW4073471_01 temperature: -32.48
2018-03-26 19:05:21 HM485 HBW_1W_T10_HBW4073471_01 temperature_-32.48
2018-03-26 19:05:31 HM485 HBW_1W_T10_HBW4073471_01 temperature: -32.48
2018-03-26 19:05:31 HM485 HBW_1W_T10_HBW4073471_01 temperature_-32.48


MfG
  Vitalij

Thorsten Pferdekaemper

Hi,
stell mal den momentanen Stand der HBWDS18B20.cpp hier rein.
Gruß,
   Thorsten
FUIP

butaluk

Hi,
Zitatstell mal den momentanen Stand der HBWDS18B20.cpp hier rein.
siehe Anhang.
MfG
  Vitalij

Thorsten Pferdekaemper

Sehr seltsam. Bist Du Dir auch ganz sicher, dass der Stand auf dem Arduino genau dem entspricht? Vielleicht ist da was beim Hochladen schief gegangen?
...zumindest manchmal sollte doch die richtige Temperatur ankommen.
FUIP