Op aanraden van kockie een paar wemossen mini gekocht en geprogrammeerd.
Ik kan niet anders zeggen dan dat ik zeer tevreden over het resultaat ben. Alles is een stuk eenvoudiger geworden.
Ik heb alleen soms nog wel wat problemen met naar het board uploaden. Lijkt mij wat gevoeliger dan arduino, ik denk omdat de uploadspeed ook best hoog is 921600.
Maar goed, het werkt allemaal subliem, en het is veel eenvoudiger instellen in domoticz omdat je informatie direct naar de virtual device kan sturen!
Hier de programmacode voor de vermogensmeter met de wemos, dus via wifi:
Code: Selecteer alles
//Wemos
//Pulsin per 1 liter!!!
#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
WiFiClient client;
//HIERONDER ALLES AANPASSEN NAAR UW EIGEN INSTELLINGEN!!!
const char * domoticz_server = "192.168.178.59"; //Domoticz ip address
int port = 8080; //Domoticz port
int idx = 78; //IDX for this virtual sensor, found in Setup -> Devices
int debounce = 500; // debounce in milliseconds, to avoid double count pulses (500 ms * 2 = max 60 liter per minuut!)
#define ONE_WIRE_BUS D4 //pin van de 2 data ds18b20 tempsensoren (de gele kabel)
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
byte interruptPin = D3; // pin van de watermeter
byte klaar = 0;
unsigned long pulsintime1, pulsintime2, pulsintimehit, looptimepulses = 0;
unsigned long tempdif;
unsigned long kw = 0;
unsigned long whloop, whtotal, liter = 0;
float temp1, temp2 = 0;
void setup(void)
{
Serial.begin(115200);
millis();
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), handleInterrupt, CHANGE);
DS18B20.begin();
DS18B20.setResolution(12);
}
void handleInterrupt() {
if (digitalRead (interruptPin) == HIGH && klaar == 0)
{pulsintimehit = millis(); klaar = 1;}
if (digitalRead (interruptPin) == LOW && klaar == 2)
{pulsintimehit = millis(); klaar = 3;}
}
void waterpulsemenu()
{
pulsintime2 = pulsintime1;
pulsintime1 = pulsintimehit;
looptimepulses = (pulsintime1 - pulsintime2);;
DS18B20.requestTemperatures();
temp1 = DS18B20.getTempCByIndex(0);
temp2 = DS18B20.getTempCByIndex(1);
if (temp1 < 0){temp1 = 0.0;}
if (temp2 < 0){temp2 = 0.0;}
tempdif = (temp2*10 - temp1*10);
whloop = tempdif * 1164;
kw = (((float)whloop*36)/looptimepulses);
whloop = whloop / 1000;
whtotal += whloop;
liter += 1;
klaar = 2;
energievermogenzenden();
Serial.print("PulsInTime: ");
Serial.print(pulsintime1);
Serial.print(" PulsInLapTime: ");
Serial.print(looptimepulses);
Serial.print(" TempKoud: ");
Serial.print(temp1);
Serial.print(" TempWarm: ");
Serial.print(temp2);
Serial.print(" Liter: ");
Serial.print(liter);
Serial.print(" Watt: ");
Serial.println(kw*10);
}
void energievermogenzenden()
{
// Domoticz format /json.htm?type=command¶m=udevice&idx=IDX&nvalue=0&svalue=VALUE
if (client.connect(domoticz_server,port)) {
client.print("GET /json.htm?type=command¶m=udevice&idx=");
client.print(idx);
client.print("&nvalue=0&svalue=");
client.print(kw*10);
client.print(";");
client.print(whtotal/10);
client.println(" HTTP/1.1");
client.print("Host: ");
client.print(domoticz_server);
client.print(":");
client.println(port);
client.println("User-Agent: Wemos test");
client.println("Connection: close");
client.println();
client.stop();
}
}
void loop(void){
if (klaar == 1 && millis() - pulsintimehit > 500){waterpulsemenu();}
if (klaar == 3 && millis() - pulsintimehit > 500){klaar = 0;}
if (kw > 0 && millis() - pulsintime1 > (looptimepulses * 1.1)){looptimepulses = looptimepulses * 1.1; kw = kw / 1.1; energievermogenzenden();}
if (millis() - pulsintime1 > 600000){kw = 0; energievermogenzenden();}
}
Vergeet niet om eerst een virtual sensor aan te maken, en wel een ELEKTRA ACTUEEL + TELLER.
Dan kan je namelijk het vermogen en energie monitoren!
Kijk welk IDX nummer de aangemaakte virtual sensor heeft.
Verander dat in de programmacode hierboven, samen met het ipadres van domoticz en eventueel ook de poort.
LET OP: Het werkt NIET als je met een code in domoticz moet inloggen! Ik weet nog niet hoe ik dat voor elkaar moet krijgen, dus suggesties/oplossingen zijn welkom!
Nog een keer voor de duidelijkheid:
Benodigdheden:
Wemos mini met wifi.
2 ds18b20 tempsensoren
(eventueel met 4,7 kOhm weerstand voor zeer betrouwbare metingen)
watermeter met pulsuitgang
Voor vragen, tips, opmerkingen of suggesties: Zeg het maar, hier of via PB.
PS: de verzonden informatie via de wemos kan veel verder uitgebreidt worden!
de temperatuur van beide dallassen kunnen verzonden worden naar domoticz, en zo gemonitord worden, en eventueel dat je een email of notificatie krijg als de warm water temp boven de 80 graden komt (wat ik zelf ook heb)
De liters kunnen verstuurd worden.
En zelfs de flow!