Sorry trouwe lezers, ik ben jullie de laatste tijd een beetje vergeten, maar ik heb zeker niet stilgezeten.
Controle over api
Alle api’s zijn af! En als je me niet gelooft kan je altijd naar hier surfen.
Het bedieningspaneel is ook af. En nee dat paneel praat niet rechtstreeks met de database maar via die api’s. Als je zelf zin hebt om met de instellingen van mijn thermostaat te spelen kan je dat ook doen. Zit je te werken op een raspberry pi met zo’n heel klein touchscreen? dan surf je beter naar deze versie (heb je geen arduino? hieronder staan foto’s). Zoals je kan zien worden ze niet gehost op dezelfde server, ze communiceren enkel via api’s.
= Controle over arduino
Mijn arduino is ook af. En dat met nog wat ruimte op het geheugen. Ik heb er uiteindelijk voor gekozen om de ethercard library te gebruiken in plaats van de standaard. Van mijn breadboard schiet er enkel nog een klein strookje over waarlangs alle energie vloeit. Mijn code kan je hieronder bekijken.
Is dit het einde?
Geen idee, ik vind zo’n projectjes wel leuk. En als ik nog eens een leuk idee heb wil ik het zeker proberen, ik heb de arduino nu toch. Dit project krijgt heel misschien een plaatsje op de chiro. We gaan binnekort verbouwen en hebben nog een manier nodig om de elektrische verwarming van op afstand te bedienen. En dan kan dit wel handig zijn.
Als je nog vragen hebt kan je ze hier altijd achterlaten. Als je de html en javascript van mijn websites wil bekijken kan je dat altijd doen door hier op te klikken.
#include <EtherCard.h>
#define RELAY1 7
#define TEMPSENS 0
#define TIMEOUT_MS 2500
int state = -1;
int onoff = 0;
float temp;
float wishtemp = 0;
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[700];
static uint32_t timer;
const char website[] PROGMEM = "iotapi.vermeylen.org";
void parseweb(byte status, word off, word len) {
Ethernet::buffer[off+300] = 0;
String returnstring PROGMEM = ((const char*) Ethernet::buffer + off);
int first = returnstring.indexOf('<') + 1;
int last = returnstring.indexOf('>');
String tempstring = (returnstring.substring(first,last));
if(tempstring.length() > 0 && tempstring.length() < 8){
wishtemp = tempstring.toFloat();
}
state = 2;
}
double getTemp() {
float tempgem = 0;
for(int i = 0; i<10; i++){
int reading = analogRead(TEMPSENS);
float voltage = reading * 5.0 / 1024.0;
float temperature = (voltage - 0.5) / 0.0195;
tempgem += temperature;
};
tempgem = tempgem/10;
return tempgem;
}
void setup () {
Serial.begin(57600);
//setup network
Serial.println(F("\n[webClient]"));
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println(F("Failed to access Ethernet controller"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
if (!ether.dnsLookup(website))
Serial.println("DNS failed");
ether.printIp("SRV: ", ether.hisip);
// setup tempsensor & relay
pinMode(RELAY1, OUTPUT);
Serial.println("\n---Setup Complete---\n");
}
void loop () {
switch(state){
case -1:
temp = getTemp();
if (millis() > timer)
{
state=0;
}
break;
case 0:
{
while(ether.packetLoop(ether.packetReceive()));
char bufferup[10];
dtostrf(temp, 3, 2, bufferup);
ether.browseUrl(PSTR("/status/thermostaat/"), bufferup, website, parseweb);
state = 1;
timer = millis() + TIMEOUT_MS;
}
case 1:
if (millis() > timer)
{
state=0;
Serial.println("download timeout");
}
ether.packetLoop(ether.packetReceive());
break;
case 2:
while( ether.packetLoop(ether.packetReceive()));
state=-1;
if(temp>(wishtemp+0.5)){
onoff = 1;
} else if (temp<(wishtemp-0.5)){
onoff = 0;
}
digitalWrite(RELAY1,onoff);
Serial.print("\n---Report---\nTemperatuur: " + String(temp) + "\nVerwarmen tot: " + String(wishtemp) + "\n\n");
timer = millis() + 30000;
break;
}
}


