Hallo zusammen,
ich suche nach einer Möglichkeit Temperaturdaten, welche von DS1820 1-Wire Sensoren erfasst und an ein Arduino Ethernet Board übermittelt werden in FHEM einzubinden.
Mir fehlt momentan der passende Sketch für das Arduino.
Was ich bereits habe ist die Temperaturübermittlung der Daten der DS1820 an das Arduino (webinterface + serial monitor). (das funktioniert einwandfrei)
Ich habe bereits etwas gefunden, was das ganze ermöglichen sollte:
18_WBS.pm und 99_CGI_RAWMSG.pm (FHEM-Module)
Das ganze soll dann über Web Based Sensors in FHEM erfasst werden. ->In Kombination der beiden Module soll man Sensordaten per HTTP-Aufruf bei FHEM abgeben können.
siehe hierzu:Redirecting to Google Groups
Falls jemand eine andere Möglichkeit kennt / bereits umgesetzt hat - Ich bin da nicht auf die oben genannte Lösung fixiert.
Mein Ziel ist einfach nur die Temperaturdaten in FHEM in einem logfile zu haben...
Kann hier jemand weiterhelfen (Arduino Sketch)?!
Hardware & Software:
•Arduino Ethernet (WizNet W5100 TCP/IP-Ethernet-Controller)
•Temperatur-Sensor Hygrosens Temp.-Sensor DS 1820-BT
•Fhem 5.2 (DEVELOPMENT), $Id: fhem.pl 1996 2012-10-20 07:11:56Z
Der Sketch bisher:
#include <SPI.h>
#include <Ethernet.h>
#include "time.h"
#include "OneWire.h"
#include "DallasTemperature.h"
#define ONE_WIRE_BUS 3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = { };
DeviceAddress outsideThermometer = { };
const byte MaxArrayElement=252;
byte mac[] = { MAC };
byte ip[] = {IP};
const byte bPort = 80;
EthernetServer server(80);
char c,cMstRecentCmnd='/';
char cLineBuffer[MaxArrayElement];
byte bPlaceInBuffer;
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(9600);
sensors.begin();
sensors.setResolution(insideThermometer, 10);
sensors.setResolution(outsideThermometer, 10);
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
Serial.print("Error getting temperature");
} else {
Serial.print("C: ");
Serial.print(tempC);
//Serial.print(" F: ");
//Serial.print(DallasTemperature::toFahrenheit(tempC));
}
}
void loop()
{
delay(2000);
Serial.print("Getting temperatures...\n\r");
sensors.requestTemperatures();
Serial.print("Inside temperature is: ");
printTemperature(insideThermometer);
Serial.print("\n\r");
Serial.print("Outside temperature is: ");
printTemperature(outsideThermometer);
Serial.print("\n\r\n\r");
EthernetClient client = server.available();
if (client) {//2
boolean currentLineIsBlank = true;//3
bPlaceInBuffer=0;
char cCmnd='H';
cMstRecentCmnd='H';
while (client.connected()) {//4
if (client.available()) {//5
c = client.read();//6
if ((c!='\n') && (c!='\r')){
cLineBuffer[bPlaceInBuffer]=c;
if (bPlaceInBuffer<MaxArrayElement) {bPlaceInBuffer++;};
}
client.println();//10
client.println("");
client.println("");
client.print("ArduinoTemperatur-1Wire");
client.println("");
client.println("");
client.println();
client.println("");
client.println("");
client.print("
Temperatur: Messergebnisse");
client.println("
");client.println("");
client.println();
client.println("
");
DeviceAddress insideThermometer = { 0x10, 0x55, 0xF2, 0x56, 0x02, 0x08, 0x00, 0xF3 };
DeviceAddress outsideThermometer = { 0x10, 0xB5, 0xDB, 0x56, 0x02, 0x08, 0x00, 0xD1 };
float tempI = sensors.getTempC(insideThermometer);
float tempA = sensors.getTempC(outsideThermometer);
client.println("");
client.print("
Temperatur, innen C: ");
client.print(tempI);
client.print("
");
client.println("");
client.print("
Temperatur, aussen C: ");
client.print(tempA);
}
client.println("");
client.println("");
break;//15
}
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}