Temperaturdaten: DS1820 (1-Wire) an Arduino Ethernet Board zu FHEM übermitteln

Begonnen von Guest, 22 Oktober 2012, 13:58:24

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

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,* sowie der *Code
für FHEM*.
Was ich bereits habe ist die Temperaturübermittlung der Daten der DS1820 an
den seriellen Monitor des Arduino. (das funktioniert einwandfrei)
 
*Hat jemand schon was ähnliches aufgebaut und kann hier weiterhelfen?!*
 
Das HowTo (+Sketch): http://www.fhemwiki.de/wiki/Arduino kenne ich bereits,
aber hilft mit irgendwie auch nicht weiter...
 
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
   - FritzBox 7390

*derzeitiger Arduino Sketch: (Ergebnis - siehe Bild)*
#include "Ethernet.h"
#include
#include "OneWire.h"
#include "DallasTemperature.h"

#define ONE_WIRE_BUS 3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
 
DeviceAddress insideThermometer = { Adresse Sensor1 };
DeviceAddress outsideThermometer = { Adresse Sensor2 };
 
void setup(void)
{
  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);
    }
}
void loop(void)
{
  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");
}

<https://lh5.googleusercontent.com/-qsLWn6hjJ2E/UIU0Z4AA1zI/AAAAAAAAAAM/1s5yCkgXAMc/s1600/Serial_Monitor_Arduino.jpg>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

erwin

                                                   

Hi Alex,

ich nehme an du willst die Daten über die Ethernet-Schittstelle vom Arduino
an FHEM schicken. korrekt ?

Ich hab auch damit begonnen, allerdings wirds bei mir noch länger dauern,
bis ich was herzeigen kann......
Meine Plan sieht soo aus:

mit dem AVR (Arduino Ethernet) "emuliere" ich einen CUNO. Zumindest in dem
Ausmass, dass ich HMS und CUL_WS messages vom AVR schicken kann. Damit kann
ich Temperature, Luftdruck, Feuchte,.... (egal von welchem Sensor) an FHEM
senden
Ich brauche ich kein neues Modul für FHEM schreiben, sondern kann die
bestehenden CUL, CUL_WS und HMS unverändert verwenden.

Was bisher läuft: auf einem AVR (nicht Arduino), programmiert in MCS-Basic,
läuft das ober beschriebene, allerdings über die serielle Schnittstelle.
Meine Todo's: Arduino Ethernet Schnittstelle (raw-Telnet) zum Laufen
bringen, (da hab ich schon samples gefunden), und den rest des codes von
MCS-basic portieren.....

wie gesagt, wird noch dauern....
l.g. erwin

Am Montag, 22. Oktober 2012 13:58:24 UTC+2 schrieb Alex:
>
> 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,* sowie der *Code
> für FHEM*.
> Was ich bereits habe ist die Temperaturübermittlung der Daten der DS1820
> an den seriellen Monitor des Arduino. (das funktioniert einwandfrei)
>  
> *Hat jemand schon was ähnliches aufgebaut und kann hier weiterhelfen?!*
>  
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

Guest

Originally posted by: <email address deleted>

Hallo Erwin,
 
ja, ich habe vor die Temperaturdaten über das Netzwerk an FHEM zu
übermitteln und diese dann anzeigen zu lassen.
Dein Lösungsansatz bzgl. des Arduino klingt auch sehr interessant, jedoch
will ich eine möglichst simple Lösung haben, welche hauptsächlich in der
genannten Konfiguration funktioniert.
(Das liegt daran, dass ich noch wenig Erfahrung mit der ganzen Materie
gesammelt habe :-))
 
Danke für deine Antwort.
Gruß
Alex

Am Montag, 22. Oktober 2012 14:50:34 UTC+2 schrieb Erwin:

> Hi Alex,
>
> ich nehme an du willst die Daten über die Ethernet-Schittstelle vom
> Arduino an FHEM schicken. korrekt ?
>
> Ich hab auch damit begonnen, allerdings wirds bei mir noch länger dauern,
> bis ich was herzeigen kann......
> Meine Plan sieht soo aus:
>
> mit dem AVR (Arduino Ethernet) "emuliere" ich einen CUNO. Zumindest in dem
> Ausmass, dass ich HMS und CUL_WS messages vom AVR schicken kann. Damit kann
> ich Temperature, Luftdruck, Feuchte,.... (egal von welchem Sensor) an FHEM
> senden
> Ich brauche ich kein neues Modul für FHEM schreiben, sondern kann die
> bestehenden CUL, CUL_WS und HMS unverändert verwenden.
>
> Was bisher läuft: auf einem AVR (nicht Arduino), programmiert in
> MCS-Basic, läuft das ober beschriebene, allerdings über die serielle
> Schnittstelle.
> Meine Todo's: Arduino Ethernet Schnittstelle (raw-Telnet) zum Laufen
> bringen, (da hab ich schon samples gefunden), und den rest des codes von
> MCS-basic portieren.....
>
> wie gesagt, wird noch dauern....
> l.g. erwin
>
> Am Montag, 22. Oktober 2012 13:58:24 UTC+2 schrieb Alex:
>>
>> 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,* sowie der *Code
>> für FHEM*.
>> Was ich bereits habe ist die Temperaturübermittlung der Daten der DS1820
>> an den seriellen Monitor des Arduino. (das funktioniert einwandfrei)
>>  
>> *Hat jemand schon was ähnliches aufgebaut und kann hier weiterhelfen?!*
>>  
>>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo nochmal,
kann hier niemand weiterhelfen?
Mir fehlt mittlerweile nur noch der Teil des Arduino sketches zum
Übertragen der Messwerte und der Code für FHEM zum Einbinden der
empfangenen Daten.
Hier mal der aktuelle Arduino-sketch indem ich mittlerweile einen WebServer
mit eingebunden habe.
Vielen Dank schonmal.
Alex
 
sketch sieht mittlerweile dann so aus:
 
/* One Wire Webserver which reads temperature messurements from Arduino
device */
#include
#include
#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           }
            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");
  }
}
 
 
 

Am Montag, 22. Oktober 2012 13:58:24 UTC+2 schrieb Alex:

> 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,* sowie der *Code
> für FHEM*.
> Was ich bereits habe ist die Temperaturübermittlung der Daten der DS1820
> an den seriellen Monitor des Arduino. (das funktioniert einwandfrei)
>  
> *Hat jemand schon was ähnliches aufgebaut und kann hier weiterhelfen?!*
>  
> Das HowTo (+Sketch): http://www.fhemwiki.de/wiki/Arduino kenne ich
> bereits, aber hilft mit irgendwie auch nicht weiter...
>  
> 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
>    - FritzBox 7390
>
> *derzeitiger Arduino Sketch: (Ergebnis - siehe Bild)*
> #include "Ethernet.h"
> #include
> #include "OneWire.h"
> #include "DallasTemperature.h"
>
> #define ONE_WIRE_BUS 3
> OneWire oneWire(ONE_WIRE_BUS);
> DallasTemperature sensors(&oneWire);
>  
> DeviceAddress insideThermometer = { Adresse Sensor1 };
> DeviceAddress outsideThermometer = { Adresse Sensor2 };
>  
> void setup(void)
> {
>   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);
>     }
> }
> void loop(void)
> {
>   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");
> }
>
>
> <https://lh5.googleusercontent.com/-qsLWn6hjJ2E/UIU0Z4AA1zI/AAAAAAAAAAM/1s5yCkgXAMc/s1600/Serial_Monitor_Arduino.jpg>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo Alex,
habe vor einiger Zeit das gleiche Problem gehabt. Habe es dann durch das
Kombinieren  verschiedener Codeschnipsel gelöst.
Habe ein Arduino mit DHT 11 (Temperatur und Feuchte) und DS1820 (nur Temp.)

Arduino antwortet bei mir im Webserver auf entsprechende Anfragen. Die
Anfrage sieht so aus:
http://192.168.3.89/?cmd=read_t

Arduino antwortet dann mit folgendem:

T0: 17.25 T1: 4.50 T2: 17.75




Geht dann auch mit DHT 11, Anfrage:
http://192.168.3.89/?cmd=read_dht11

Antwort:

T: 16.00 H: 39.00 DP: 2.05



In FHEM sieht es wie folgt aus (nur ein Beispiel):
define FileLog_arduinogetsensorvalues FileLog
./log/arduinogetsensorvalues-%Y.log arduinogetsensorvalues:.*
attr FileLog_arduinogetsensorvalues room Arduino

define arduinogetsensorvalues at +*00:15:00 { my $val =
GetHttpFile('192.168.3.89:80','/?cmd=read_t');; fhem("trigger
arduinogetsensorvalues $val");;}
attr arduinogetsensorvalues room Arduino

define weblink_getsensorvalues weblink fileplot
FileLog_arduinogetsensorvalues:arduino:CURRENT
attr weblink_getsensorvalues label "Arduino Sensor DS18S20 Min $data{min1},
Max $data{max1}, Mittelw. $data{avg1}, Jetzt: $data{currval1}"
attr weblink_getsensorvalues room Plots



Kann man auch einfach erweitern. Ich will damit demnächst u.a. meine
Heizung loggen, vielleicht gehe ich dann aber auch direkt an den Bus der
Heattronic 3 (es fehlt noch die Zeit dazu)

Da ich einen Arduino Mega 2560 mein eigen nennen darf werden ggf. noch
Ausgänge (Relais) und Eingänge nachfolgen.
Das einzige, was ich noch nicht hinbekommen habe ist die Zuweisung einer
Variablen mit dem Wert eines Sensors in FHEM, so daß ich z.B. auch die
Aussentemperatur als Wert in FHEM anzeigen kann.
Zur Zeit loggt FHEM alles in eine Datei (je Sensor)

Vielleicht hat ja jemand dazu einen Tipp?

Gruß
Kai

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo Kai,
 
danke für deine Antwort.
Da ich momentan noch Probleme habe das Ganze von der Arduino Seite aus zu
lösen, wollte ich dich fragen, ob du mir ggf. dafür den sketch zukommen
lassen könntest?!
(Bzw. den Teil davon, damit das Arduino auf requests in Richtung *
http:///?cmd=read_t* /?cmd=read_t> antwortet und die
Temeraturwerte für FHEM liefert)
 
Vielen Dank.
Gruß,
Alex

Am Dienstag, 30. Oktober 2012 21:09:36 UTC+1 schrieb KaiZo:

> Hallo Alex,
> habe vor einiger Zeit das gleiche Problem gehabt. Habe es dann durch das
> Kombinieren  verschiedener Codeschnipsel gelöst.
> Habe ein Arduino mit DHT 11 (Temperatur und Feuchte) und DS1820 (nur Temp.)
>
> Arduino antwortet bei mir im Webserver auf entsprechende Anfragen. Die
> Anfrage sieht so aus:
> http://192.168.3.89/?cmd=read_t
>
> Arduino antwortet dann mit folgendem:
>
> T0: 17.25 T1: 4.50 T2: 17.75
>
>
>
>
> Geht dann auch mit DHT 11, Anfrage:
> http://192.168.3.89/?cmd=read_dht11
>
> Antwort:
>
> T: 16.00 H: 39.00 DP: 2.05
>
>
>
> In FHEM sieht es wie folgt aus (nur ein Beispiel):
> define FileLog_arduinogetsensorvalues FileLog
> ./log/arduinogetsensorvalues-%Y.log arduinogetsensorvalues:.*
> attr FileLog_arduinogetsensorvalues room Arduino
>
> define arduinogetsensorvalues at +*00:15:00 { my $val = GetHttpFile('
> 192.168.3.89:80','/?cmd=read_t');; fhem("trigger arduinogetsensorvalues
> $val");;}
> attr arduinogetsensorvalues room Arduino
>
> define weblink_getsensorvalues weblink fileplot
> FileLog_arduinogetsensorvalues:arduino:CURRENT
> attr weblink_getsensorvalues label "Arduino Sensor DS18S20 Min
> $data{min1}, Max $data{max1}, Mittelw. $data{avg1}, Jetzt: $data{currval1}"
> attr weblink_getsensorvalues room Plots
>
>
>
> Kann man auch einfach erweitern. Ich will damit demnächst u.a. meine
> Heizung loggen, vielleicht gehe ich dann aber auch direkt an den Bus der
> Heattronic 3 (es fehlt noch die Zeit dazu)
>
> Da ich einen Arduino Mega 2560 mein eigen nennen darf werden ggf. noch
> Ausgänge (Relais) und Eingänge nachfolgen.
> Das einzige, was ich noch nicht hinbekommen habe ist die Zuweisung einer
> Variablen mit dem Wert eines Sensors in FHEM, so daß ich z.B. auch die
> Aussentemperatur als Wert in FHEM anzeigen kann.
> Zur Zeit loggt FHEM alles in eine Datei (je Sensor)
>
> Vielleicht hat ja jemand dazu einen Tipp?
>
> Gruß
> Kai

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo Alex,

klar, kann ich dir den Code geben.
Ist zwar ein schlechter Programmierstil, aber das Programm funkt.
Habe gerade noch schnell ein paar Kommentare hinzugefügt, sollte alles
verständlich sein.
Ist auch etwas durcheinander, da ich hier auch mehrere Beispiele
zusammengefügt und ergänzt/angepasst habe. Ich werde auch diesen Code noch
für mich weiter anpassen und dann immer weiterschreiben, gilt halt als
Grundlage.
Ist übrigens für den Arduino Mega 2560 geschrieben, aber ja auch für andere
Modelle schnell anpassbar.
Habs auch hinbekommen, dass nur ein Wert ausgelesen wird und einer
Variablen zugewiesen wird. (Wie meine Frage halt am 30.10. noch lautete..)

Wenn noch Fragen dann frag...


Gruß
Kai

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

So, weil es mit einen Dateianhang nicht geklappt hat (Fehler 340) hier der
Sketch als Text, sorry:

/*
  Web Server

 Kommando: cmd?=read_t  : DS18B20  (lese alle Sensoren aus, z.Zt. 3 Stck.)
 cmd?=read_dht11        : DHT11 an PIN 3
 cmd?=read_dht11_2      : DHT11 an Pin 4
 cmd?=read_t0           : DS1820 No.0
 cmd?=read_t1           : DS1820 No.1 etc
 
 FHEM:
 define arduinogetsensorvalues at +*00:05:00 {\ my $val =
GetHttpFile('192.168.3.89:80', '/?cmd=read_t');;\ fhem("trigger
arduinogetsensorvalues $val");;\ }
 attr arduinogetsensorvalues room Arduino
 define FileLog_arduinogetsensorvalues FileLog
./log/arduinogetsensorvalues-%Y.log arduinogetsensorvalues:.*
 attr FileLog_arduinogetsensorvalues room Arduino
 define weblink_getsensorvalues weblink fileplot
FileLog_arduinogetsensorvalues:arduino:CURRENT attr weblink_getsensorvalues
label "Arduino Sensorvalues Min $data{min1}, Max $data{max1}, Last
$data{currval1}"
 attr weblink_getsensorvalues room Arduino

FHEM einzelner Wert in dummy legen (in diesem Fall ist
t1=Aussentemperatur), bei einzelnen Sensorwerten und Zuweisung einer
Variablen ausschließlich den Wert übertragen!:
define Aussentemp dummy
define Aussentemp_at at +*00:15:00 { my $val =
GetHttpFile('192.168.3.89:80','/?cmd=read_t1');; fhem("set Aussentemp
$val");;}

 
 Version: V7: Ergänzung der Abfrage der einzelnen DS1820
 

Originalcode:
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 Angepasst: KaiZo 07.11.2012
 
 
 */

#include
#include
#include
#include
#include
dht11 DHT11;


// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  //MAC-ID, steht auf den Ethershield
IPAddress ip(192,168,3,89);


String cmd="";
int cmd_length=0;

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9

// 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);
DeviceAddress insideThermometer, outsideThermometer;



// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());

  // start Dallas Temp. Sensor

  sensors.begin();
  Serial.println("Dallas Temperature IC Control Library Demo");
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");
  Serial.print("Parasite power is: ");
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");
  // show the addresses we found on the bus
  Serial.print("Device 0 Address: ");
  printAddress(insideThermometer);
  Serial.println();

  Serial.print("Device 1 Address: ");
  printAddress(outsideThermometer);
  Serial.println();

  // set the resolution to 9 bit
  sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
  sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);

  Serial.print("Device 0 Resolution: ");
  Serial.print(sensors.getResolution(insideThermometer), DEC);
  Serial.println();

  Serial.print("Device 1 Resolution: ");
  Serial.print(sensors.getResolution(outsideThermometer), DEC);
  Serial.println();
}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    // zero pad the address if necessary
    if (deviceAddress < 16) Serial.print("0");
    Serial.print(deviceAddress, HEX);
  }
}
// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print("Temp C: ");
  Serial.print(tempC);
  Serial.print(" Temp F: ");
  Serial.print(DallasTemperature::toFahrenheit(tempC));
}

// function to print a device's resolution
void printResolution(DeviceAddress deviceAddress)
{
  Serial.print("Resolution: ");
  Serial.print(sensors.getResolution(deviceAddress));
  Serial.println();    
}

// main function to print information about a device
void printData(DeviceAddress deviceAddress)
{
  Serial.print("Device Address: ");
  printAddress(deviceAddress);
  Serial.print(" ");
  printTemperature(deviceAddress);
  Serial.println();
}

void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        //        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
          if (c=='?'){
            Serial.print("Commando ? gesendet\n\n");
            while (c!='\r')
            {
              cmd+=c;
              //              Serial.print(c);
              c=client.read();
            }
            Serial.println(cmd);
            if (cmd.startsWith("?cmd")) {
              Serial.println("Kommando erkannt");
              cmd_length=cmd.length();
              Serial.println (cmd_length);
               if (cmd.startsWith("?cmd=read_t0")){// Lese nur Temperatur
des 1. Sensors aus (=t0)
                Serial.println("Kommando lese T0");
                sensors.requestTemperatures();    
                client.print(sensors.getTempCByIndex(0));  
                cmd="";  
              }
              if (cmd.startsWith("?cmd=read_t1")){  // Lese nur Temperatur
des 2. Sensors aus
                Serial.println("Kommando lese T1");
                sensors.requestTemperatures();    
                client.print(sensors.getTempCByIndex(1));  
                cmd="";  
              }
              if (cmd.startsWith("?cmd=read_t2")){ // Lese nur Temperatur
des 3. Sensors aus
                Serial.println("Kommando lese T2");
                sensors.requestTemperatures();    
                client.print(sensors.getTempCByIndex(2));  
                cmd="";  
              }
                           
              if (cmd.startsWith("?cmd=read_t")){ //Lese alle DS1820, zur
Zeit 3 Stück und gebe die Werte aus
                Serial.println("Kommando lese T1");
                sensors.requestTemperatures();    
                client.print("T0: ");
                client.print(sensors.getTempCByIndex(0));  
                client.print(" T1: ");
                client.print(sensors.getTempCByIndex(1));
                client.print(" T2: ");
                client.print(sensors.getTempCByIndex(2));
                cmd="";  
              }
           
              if (cmd.startsWith("?cmd=read_dht11"))  // Lese den DHT11 an
DHT11PIN aus
              {
                Serial.println("Kommando lese DHT11");
#define DHT11PIN 3    // Der Sensor an PIN 3 wird gewählt
                int chk = DHT11.read(DHT11PIN);

                Serial.print("Read sensor: ");
                switch (chk)
                {
                case DHTLIB_OK:
                  Serial.println("OK");
                  break;
                case DHTLIB_ERROR_CHECKSUM:
                  Serial.println("Checksum error");
                  break;
                case DHTLIB_ERROR_TIMEOUT:
                  Serial.println("Time out error");
                  break;
                default:
                  Serial.println("Unknown error");
                  break;
                }
                Serial.print("Humidity (%): ");
                Serial.println((float)DHT11.humidity, 2);
                Serial.print("Temperature (oC): ");
                Serial.println((float)DHT11.temperature, 2);
                Serial.print("Dew PointFast (oC): ");
                Serial.println(dewPointFast(DHT11.temperature,
DHT11.humidity));
                client.print("T: ");    
                client.print((float)DHT11.temperature, 2);
                client.print(" H: ");    
                client.print((float)DHT11.humidity, 2);
                client.print(" DP: ");    
                client.print(dewPointFast(DHT11.temperature,
DHT11.humidity));
                cmd="";
              }
              if (cmd.startsWith("?cmd=read_dht11_2"))
              {
                Serial.println("Kommando lese DHT11_2");
#define DHT11PIN 4  // Der Sensor an Pin 4 wird gewählt
                int chk = DHT11.read(DHT11PIN);

                Serial.print("Read sensor: ");
                switch (chk)
                {
                case DHTLIB_OK:
                  Serial.println("OK");
                  break;
                case DHTLIB_ERROR_CHECKSUM:
                  Serial.println("Checksum error");
                  break;
                case DHTLIB_ERROR_TIMEOUT:
                  Serial.println("Time out error");
                  break;
                default:
                  Serial.println("Unknown error");
                  break;
                }
                Serial.print("Humidity (%): ");
                Serial.println((float)DHT11.humidity, 2);
                Serial.print("Temperature (oC): ");
                Serial.println((float)DHT11.temperature, 2);
                Serial.print("Dew PointFast (oC): ");
                Serial.println(dewPointFast(DHT11.temperature,
DHT11.humidity));
                client.print("T: ");    
                client.print((float)DHT11.temperature, 2);
                client.print(" H: ");    
                client.print((float)DHT11.humidity, 2);
                client.print(" DP: ");    
                client.print(dewPointFast(DHT11.temperature,
DHT11.humidity));
                cmd="";
              }
            }  
            else{
              Serial.println("kein gueltiges Kommando erkannt");
              client.println("Nicht gültig");

              cmd="";  
            }


          }
        }

      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");

  }


}

double dewPointFast(double celsius, double humidity)  // Taupunktberechnung
für DHT 11
{
  double a = 17.271;
  double b = 237.7;
  double temp = (a * celsius) / (b + celsius) + log(humidity/100);
  double Td = (b * temp) / (a - temp);
  return Td;
}




--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hey Kai,
 
vielen Dank für deine Hilfe!
Das hilft mir ein ganzes Stück weiter... :-)
 
Gruß,
Alex
 

Am Mittwoch, 7. November 2012 21:10:49 UTC+1 schrieb KaiZo:

>
> So, weil es mit einen Dateianhang nicht geklappt hat (Fehler 340) hier der
> Sketch als Text, sorry:
>
> /*
>   Web Server
>
>  Kommando: cmd?=read_t  : DS18B20  (lese alle Sensoren aus, z.Zt. 3 Stck.)
>  cmd?=read_dht11        : DHT11 an PIN 3
>  cmd?=read_dht11_2      : DHT11 an Pin 4
>  cmd?=read_t0           : DS1820 No.0
>  cmd?=read_t1           : DS1820 No.1 etc
>  
>  FHEM:
>  define arduinogetsensorvalues at +*00:05:00 {\ my $val = GetHttpFile('
> 192.168.3.89:80', '/?cmd=read_t');;\ fhem("trigger arduinogetsensorvalues
> $val");;\ }
>  attr arduinogetsensorvalues room Arduino
>  define FileLog_arduinogetsensorvalues FileLog
> ./log/arduinogetsensorvalues-%Y.log arduinogetsensorvalues:.*
>  attr FileLog_arduinogetsensorvalues room Arduino
>  define weblink_getsensorvalues weblink fileplot
> FileLog_arduinogetsensorvalues:arduino:CURRENT attr weblink_getsensorvalues
> label "Arduino Sensorvalues Min $data{min1}, Max $data{max1}, Last
> $data{currval1}"
>  attr weblink_getsensorvalues room Arduino
>
> FHEM einzelner Wert in dummy legen (in diesem Fall ist
> t1=Aussentemperatur), bei einzelnen Sensorwerten und Zuweisung einer
> Variablen ausschließlich den Wert übertragen!:
> define Aussentemp dummy
> define Aussentemp_at at +*00:15:00 { my $val = GetHttpFile('
> 192.168.3.89:80','/?cmd=read_t1');; fhem("set Aussentemp $val");;}
>
>  
>  Version: V7: Ergänzung der Abfrage der einzelnen DS1820
>  
>
> Originalcode:
>  created 18 Dec 2009
>  by David A. Mellis
>  modified 9 Apr 2012
>  by Tom Igoe
>  
>  Angepasst: KaiZo 07.11.2012
>  
>  
>  */
>
> #include
> #include
> #include
> #include
> #include
> dht11 DHT11;
>
>
> // Enter a MAC address and IP address for your controller below.
> // The IP address will be dependent on your local network:
> byte mac[] = {
>   0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  //MAC-ID, steht auf den
> Ethershield
> IPAddress ip(192,168,3,89);
>
>
> String cmd="";
> int cmd_length=0;
>
> // Data wire is plugged into port 2 on the Arduino
> #define ONE_WIRE_BUS 2
> #define TEMPERATURE_PRECISION 9
>
> // 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);
> DeviceAddress insideThermometer, outsideThermometer;
>
>
>
> // Initialize the Ethernet server library
> // with the IP address and port you want to use
> // (port 80 is default for HTTP):
> EthernetServer server(80);
>
> void setup() {
>   // Open serial communications and wait for port to open:
>   Serial.begin(9600);
>   while (!Serial) {
>     ; // wait for serial port to connect. Needed for Leonardo only
>   }
>   // start the Ethernet connection and the server:
>   Ethernet.begin(mac, ip);
>   server.begin();
>   Serial.print("server is at ");
>   Serial.println(Ethernet.localIP());
>
>   // start Dallas Temp. Sensor
>
>   sensors.begin();
>   Serial.println("Dallas Temperature IC Control Library Demo");
>   Serial.print("Locating devices...");
>   Serial.print("Found ");
>   Serial.print(sensors.getDeviceCount(), DEC);
>   Serial.println(" devices.");
>   Serial.print("Parasite power is: ");
>   if (sensors.isParasitePowerMode()) Serial.println("ON");
>   else Serial.println("OFF");
>   // show the addresses we found on the bus
>   Serial.print("Device 0 Address: ");
>   printAddress(insideThermometer);
>   Serial.println();
>
>   Serial.print("Device 1 Address: ");
>   printAddress(outsideThermometer);
>   Serial.println();
>
>   // set the resolution to 9 bit
>   sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
>   sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
>
>   Serial.print("Device 0 Resolution: ");
>   Serial.print(sensors.getResolution(insideThermometer), DEC);
>   Serial.println();
>
>   Serial.print("Device 1 Resolution: ");
>   Serial.print(sensors.getResolution(outsideThermometer), DEC);
>   Serial.println();
> }
>
> // function to print a device address
> void printAddress(DeviceAddress deviceAddress)
> {
>   for (uint8_t i = 0; i < 8; i++)
>   {
>     // zero pad the address if necessary
>     if (deviceAddress < 16) Serial.print("0");
>     Serial.print(deviceAddress, HEX);
>   }
> }
> // function to print the temperature for a device
> void printTemperature(DeviceAddress deviceAddress)
> {
>   float tempC = sensors.getTempC(deviceAddress);
>   Serial.print("Temp C: ");
>   Serial.print(tempC);
>   Serial.print(" Temp F: ");
>   Serial.print(DallasTemperature::toFahrenheit(tempC));
> }
>
> // function to print a device's resolution
> void printResolution(DeviceAddress deviceAddress)
> {
>   Serial.print("Resolution: ");
>   Serial.print(sensors.getResolution(deviceAddress));
>   Serial.println();    
> }
>
> // main function to print information about a device
> void printData(DeviceAddress deviceAddress)
> {
>   Serial.print("Device Address: ");
>   printAddress(deviceAddress);
>   Serial.print(" ");
>   printTemperature(deviceAddress);
>   Serial.println();
> }
>
> void loop() {
>   // listen for incoming clients
>   EthernetClient client = server.available();
>   if (client) {
>     Serial.println("new client");
>     // an http request ends with a blank line
>     boolean currentLineIsBlank = true;
>     while (client.connected()) {
>       if (client.available()) {
>         char c = client.read();
>         //        Serial.write(c);
>         // if you've gotten to the end of the line (received a newline
>         // character) and the line is blank, the http request has ended,
>         // so you can send a reply
>         if (c == '\n' && currentLineIsBlank) {
>           break;
>         }
>         if (c == '\n') {
>           // you're starting a new line
>           currentLineIsBlank = true;
>         }
>         else if (c != '\r') {
>           // you've gotten a character on the current line
>           currentLineIsBlank = false;
>           if (c=='?'){
>             Serial.print("Commando ? gesendet\n\n");
>             while (c!='\r')
>             {
>               cmd+=c;
>               //              Serial.print(c);
>               c=client.read();
>             }
>             Serial.println(cmd);
>             if (cmd.startsWith("?cmd")) {
>               Serial.println("Kommando erkannt");
>               cmd_length=cmd.length();
>               Serial.println (cmd_length);
>                if (cmd.startsWith("?cmd=read_t0")){// Lese nur Temperatur
> des 1. Sensors aus (=t0)
>                 Serial.println("Kommando lese T0");
>                 sensors.requestTemperatures();    
>                 client.print(sensors.getTempCByIndex(0));  
>                 cmd="";  
>               }
>               if (cmd.startsWith("?cmd=read_t1")){  // Lese nur Temperatur
> des 2. Sensors aus
>                 Serial.println("Kommando lese T1");
>                 sensors.requestTemperatures();    
>                 client.print(sensors.getTempCByIndex(1));  
>                 cmd="";  
>               }
>               if (cmd.startsWith("?cmd=read_t2")){ // Lese nur Temperatur
> des 3. Sensors aus
>                 Serial.println("Kommando lese T2");
>                 sensors.requestTemperatures();    
>                 client.print(sensors.getTempCByIndex(2));  
>                 cmd="";  
>               }
>                            
>               if (cmd.startsWith("?cmd=read_t")){ //Lese alle DS1820, zur
> Zeit 3 Stück und gebe die Werte aus
>                 Serial.println("Kommando lese T1");
>                 sensors.requestTemperatures();    
>                 client.print("T0: ");
>                 client.print(sensors.getTempCByIndex(0));  
>                 client.print(" T1: ");
>                 client.print(sensors.getTempCByIndex(1));
>                 client.print(" T2: ");
>                 client.print(sensors.getTempCByIndex(2));
>                 cmd="";  
>               }
>            
>               if (cmd.startsWith("?cmd=read_dht11"))  // Lese den DHT11 an
> DHT11PIN aus
>               {
>                 Serial.println("Kommando lese DHT11");
> #define DHT11PIN 3    // Der Sensor an PIN 3 wird gewählt
>                 int chk = DHT11.read(DHT11PIN);
>
>                 Serial.print("Read sensor: ");
>                 switch (chk)
>                 {
>                 case DHTLIB_OK:
>                   Serial.println("OK");
>                   break;
>                 case DHTLIB_ERROR_CHECKSUM:
>                   Serial.println("Checksum error");
>                   break;
>                 case DHTLIB_ERROR_TIMEOUT:
>                   Serial.println("Time out error");
>                   break;
>                 default:
>                   Serial.println("Unknown error");
>                   break;
>                 }
>                 Serial.print("Humidity (%): ");
>                 Serial.println((float)DHT11.humidity, 2);
>                 Serial.print("Temperature (oC): ");
>                 Serial.println((float)DHT11.temperature, 2);
>                 Serial.print("Dew PointFast (oC): ");
>                 Serial.println(dewPointFast(DHT11.temperature,
> DHT11.humidity));
>                 client.print("T: ");    
>                 client.print((float)DHT11.temperature, 2);
>                 client.print(" H: ");    
>                 client.print((float)DHT11.humidity, 2);
>                 client.print(" DP: ");    
>                 client.print(dewPointFast(DHT11.temperature,
> DHT11.humidity));
>                 cmd="";
>               }
>               if (cmd.startsWith("?cmd=read_dht11_2"))
>               {
>                 Serial.println("Kommando lese DHT11_2");
> #define DHT11PIN 4  // Der Sensor an Pin 4 wird gewählt
>                 int chk = DHT11.read(DHT11PIN);
>
>                 Serial.print("Read sensor: ");
>                 switch (chk)
>                 {
>                 case DHTLIB_OK:
>                   Serial.println("OK");
>                   break;
>                 case DHTLIB_ERROR_CHECKSUM:
>                   Serial.println("Checksum error");
>                   break;
>                 case DHTLIB_ERROR_TIMEOUT:
>                   Serial.println("Time out error");
>                   break;
>                 default:
>                   Serial.println("Unknown error");
>                   break;
>                 }
>                 Serial.print("Humidity (%): ");
>                 Serial.println((float)DHT11.humidity, 2);
>                 Serial.print("Temperature (oC): ");
>                 Serial.println((float)DHT11.temperature, 2);
>                 Serial.print("Dew PointFast (oC): ");
>                 Serial.println(dewPointFast(DHT11.temperature,
> DHT11.humidity));
>                 client.print("T: ");    
>                 client.print((float)DHT11.temperature, 2);
>                 client.print(" H: ");    
>                 client.print((float)DHT11.humidity, 2);
>                 client.print(" DP: ");    
>                 client.print(dewPointFast(DHT11.temperature,
> DHT11.humidity));
>                 cmd="";
>               }
>             }  
>             else{
>               Serial.println("kein gueltiges Kommando erkannt");
>               client.println("Nicht gültig");
>
>               cmd="";  
>             }
>
>
>           }
>         }
>
>       }
>     }
>     // give the web browser time to receive the data
>     delay(1);
>     // close the connection:
>     client.stop();
>     Serial.println("client disonnected");
>
>   }
>
>
> }
>
> double dewPointFast(double celsius, double humidity)  //
> Taupunktberechnung für DHT 11
> {
>   double a = 17.271;
>   double b = 237.7;
>   double temp = (a * celsius) / (b + celsius) + log(humidity/100);
>   double Td = (b * temp) / (a - temp);
>   return Td;
> }
>
>
>
>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com