Hi,
ich habe deine Antwort leider erst eben gesehen und bis dato folgenden Code getestet, doch der scheitert auch daran das die Funktion klimabuffer(), nicht richtig ausgeführt wird.
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
/*********************************************************************************
***************************Terrariensteuerung 0.5*********************************
* Tim Balschmiter www.hemitheconyx-caudicinctus.de
* Unterstützung von:
* mkl0815 ( ethernet, aber mit seinen Beitraegen auch sonst sehr)
* Marcu W
* uwefed
* circuit99
* cetax (stellte wichtige Fragen)
* sth77
* weiter aufzählen
* alle Fragen ob sie namentlich genannt werden wollen
*/
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC; //Uhr
int zwischenspeicher = 0;
#include <SensorReceiver.h> //433Mhz-Empfänger
int zwischenspeicher_array[5] ={0,0,0,0,0};
//Ethernet
#include <SPI.h>
#include <Ethernet.h>
// MAC und IP Konfiguration
byte mac[] = { 0xDE, 0xAD, 0xBC, 0xAF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
IPAddress gateway(192,168,1, 1);
IPAddress dns(8,8,8,8);
IPAddress subnet(255, 255, 255, 0);
// warten auf port 23
EthernetServer server(23);
char serverName[] = "www.hemitheconyx-caudicinctus.de";
char host[] = "Host: www.hemitheconyx-caudicinctus.de";
EthernetClient client;
byte zeitsteuerung[4][3] = { //Position im Statusarray, Anzeit,Auszeit
{ 0,10,20}, //Tageslicht von 10 bis 20 Uhr 0 entspricht der Position im Statusarray
{ 5,20,22}, //IKEA von 20 bis 22
{10,20,22}, //Deckenbeleuchtung 20 bis 22
{ 2,20,22}
};
int anzahl_intervalle = 4;
byte zeitsteuerung2intervalle[4][5] = { //Position, Anzeit1,Auszeit1,Anzeit2,Auszeit2
{3,15,16,10,12}, //Heizlampen von 17 bis 18 und 10 bis 12 Uhr
{4,15,16,10,12},
{7,22,23, 0, 5}, //IR von 22 bis 23 Uhr und 0 bis 5Uhr
{8,22,23, 0, 5}
};
int anzahl_2intervalle = 4;
byte beregnung[1][5] = {{6,18,17,0,20}}; //Beregnung Position im Statusarray, An Stundenwert, Minutenwert Sekundean, Sekundaus
int anzahl_beregnung = 1;
byte geraeteStatus[11][3] = { //Pin, ob HIGH oder LOW Geraet anschaltet, Status 0 => off und 1 => on
{35,1,0}, //0 Tageslicht
{12,0,0}, //1 Höhle unten
{11,0,0}, //2 Decke unten
{33,1,0}, //3 Heizlampe oben
{37,1,0}, //4 Heizlampe unten
{31,1,0}, //5 IKEA Aussen LEDs
{39,1,0}, //6 Beregnungsanlage
{ 5,0,0}, //7 IR unten
{ 6,0,0}, //8 IR oben
{ 8,0,0}, //9 Höhle oben
{ 9,0,0} //10 Decke oben
};
int anzahl_Geraete = 11;
char buffer[50] = "";
void setup () {
Serial.begin(9600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning())
{
Serial.println("RTC is NOT running!");
RTC.adjust(DateTime("Jul 24 2012", "17:41:00"));
}
//Geraete als Output definieren
for(int i = 0; i<anzahl_Geraete;i++)
{
pinMode(geraeteStatus[i][0],OUTPUT);
}
//Implementierung des 433Mhz Empfängers
SensorReceiver::init(0, showTempHumi);
//Ethernet starten
Ethernet.begin(mac, ip, dns, gateway, subnet);
delay(1000);
// Server starten
server.begin();
delay(3000);
}
void loop () {
DateTime now = RTC.now();
int minuten = now.minute();
int stunden = now.hour();
int sekunden = now.second();
if(zwischenspeicher != sekunden)
{
Serial.print(stunden);
Serial.print(F(":"));
Serial.println(minuten);
zwischenspeicher = minuten;
}
uhrzeitauswerten(stunden,minuten,sekunden);
statusauswerten();
webInput();
}
//Funktion die die Geräte an oder aus schalltet
void statusauswerten()
{
for(int i = 0; i<anzahl_Geraete; i++)
{
if(geraeteStatus[i][1] == 0)
{
if(geraeteStatus[i][2] == 1)
{
digitalWrite(geraeteStatus[i][0],HIGH); //AN bei Geraeten mit HIGH =>On
}
else
{
digitalWrite(geraeteStatus[i][0],LOW); //AUS bei Geraeten mit LOW =>Off
}
}
else
{
if(geraeteStatus[i][2] == 1)
{
digitalWrite(geraeteStatus[i][0],LOW); //AN bei Geraeten mit LOW =>On
}
else
{
digitalWrite(geraeteStatus[i][0],HIGH); //AUS bei Geraeten mit HIGH =>Off
}
}
}
}
//Funktion die in Abhängigkeit der Uhrzeit festlegt ob ein Gerät an oder aus ist
void uhrzeitauswerten(int stunden,int minuten, int sekunden)
{
/*
* Zeitsteurerung Stunden basiert zwei Intervalle
*/
for (int i = 0; i<anzahl_2intervalle; i++)
{
if(((stunden >= zeitsteuerung2intervalle[i][1]) && (stunden < zeitsteuerung2intervalle [i][2])) || ((stunden >= zeitsteuerung2intervalle[i][3]) && (stunden < zeitsteuerung2intervalle [i][4])))
{
statusan(zeitsteuerung2intervalle[i][0]);
}
else
{
statusaus(zeitsteuerung2intervalle[i][0]);
}
}
/*
* Zeitsteurerung Stunden basiert ein Intervall
*/
for (int i = 0; i<anzahl_intervalle; i++)
{
if((stunden >= zeitsteuerung[i][1]) && (stunden < zeitsteuerung [i][2]))
{
statusan(zeitsteuerung[i][0]);
}
else
{
statusaus(zeitsteuerung[i][0]);
}
}
/*
* Zeitsteurerung beregnung
*/
for (int i = 0; i<anzahl_beregnung; i++)
{
if((stunden == beregnung[i][1]) && (minuten == beregnung [i][2]) && (sekunden >= beregnung[i][3]) && (sekunden <= beregnung[i][4]))
{
statusan(beregnung[i][0]);
}
else
{
statusaus(beregnung[i][0]);
}
}
}
void showTempHumi(byte *data)
{
if ((data[3] & 0x1f) == 0x1e) // is data a ThermoHygro-device?
{
byte channel, randomId;
int temp;
short int humidity;
SensorReceiver::decodeThermoHygro(data, channel, randomId, temp, humidity);
if(zwischenspeicher_array[0] == 2)
{
zwischenspeicher_array[channel]++;
if(zwischenspeicher_array[channel] == 1)//20igster Wert in DB
{
klimabuffer(channel,temp,humidity);
dbQuery();
zwischenspeicher_array[channel] = 0;
}
zwischenspeicher_array[0] = 0;
}
else
{
zwischenspeicher_array[0]++;
}
}
}
void dbQuery()
{
Serial.println(buffer);
client.connect(serverName, 80);
if(client.connected())
{
client.println(buffer);
client.println(host);
client.println();
} // nicht verbunden
client.stop();
}
void webInput()
{
client = server.available();
if (client)
{
char command =client.read();
client.stop();
if(command == 'S')
{
commandoauswerten(1);
}
if(command == 'A')
{
commandoauswerten(9);
}
}
}
void commandoauswerten(int position)
{
if(geraeteStatus[position][2] == 0)
{
geraeteStatus[position][2] = 1;
statusbuffer(geraeteStatus[position][0],1);
dbQuery();
}
else
{
geraeteStatus[position][2] = 0;
statusbuffer(geraeteStatus[position][0],0);
dbQuery();
}
}
void statusaus(int position)
{
if(geraeteStatus[position][2] == 1)
{
statusbuffer(geraeteStatus[position][0],0);
dbQuery();
}
geraeteStatus[position][2] = 0;
}
void statusan(int position)
{
if(geraeteStatus[position][2] == 0)
{
statusbuffer(geraeteStatus[position][0],0);
dbQuery();
}
geraeteStatus[position][2] = 1;
}
void klimabuffer(byte sensor,int temp,short int luft)
{
Serial.println(F("KLIMA"));
sprintf(buffer,"GET /php/k.php?sensor=%d&t=%d&l=%d HTTP/1.0",sensor,temp,luft);
}
void statusbuffer(int pin,int statuswert)
{
Serial.println(F("SENSOR"));
sprintf(buffer,"GET /php/s.php?p=%d&s=%d HTTP/1.0",pin,statuswert);
}
ich werde jetzt mal die Syntax für Pointer durchgehen.
mfg
Balli