Draadloze vermogensmeter

verwarming, isolatie, huiselijk energieverbruik

Moderator: Moderators

hanskraayeveld
Berichten: 709
Lid geworden op: 04 okt 2015, 14:49

Re: Draadloze vermogensmeter

Bericht door hanskraayeveld »

Code: Selecteer alles

#include <ESP8266WiFi.h>

// int status = WL_IDLE_STATUS;     // the Wifi radio's status
WiFiClient client;

// domoticz
 const char * domoticz_server = "192.168.178.152"; //Domoticz ip-adres
 int port = 8080; //Domoticz port
 int idx = 51; //IDX for this virtual sensor, found in Setup -> Devices

 float temp = 5;
  
 void setup()
 {
 }

 void loop()
 {  
    printInfo();
  
    temp += 0.1;
      
    delay(60000);
 }
   
 void printInfo()
 {
    // Domoticz format /json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=VALUE

    if (client.connect(domoticz_server,port)) {

        client.print("GET /json.htm?type=command&param=udevice&idx=");
        client.print(idx);
        client.print("&nvalue=0&svalue=");
        client.print(temp);
        client.println(" HTTP/1.1");
        client.print("Host: ");
        client.print(domoticz_server);
        client.print(":");
        client.println(port);
        client.println("User-Agent: Arduino-ethernet");
        client.println("Connection: close");
        client.println();
        client.stop();
     }
  }
Hier de code om met een wemos (mini), allerlei variabelen naar domoticz te zenden.
Eenvoudiger kan het niet!
Maak in domoticz een virtuele sensor aan (custom sensor).
Kijk wat het idx nummer ervan is, en verander dit in de tekst hierboven.
Verander ook het domoticz IP-adres en eventueel poort.

Maak zelf een sketch met wat je maar wilt verzenden naar domoticz.
Werkt subliem, en is rete eenvoudig.

In de sketch hierboven verzend hij elke minuut de temp vanaf 5 graden en verhoogt elke minuut met 0.1 graden.
hanskraayeveld
Berichten: 709
Lid geworden op: 04 okt 2015, 14:49

Re: Draadloze vermogensmeter

Bericht door hanskraayeveld »

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&param=udevice&idx=IDX&nvalue=0&svalue=VALUE

    if (client.connect(domoticz_server,port)) {

        client.print("GET /json.htm?type=command&param=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!
hanskraayeveld
Berichten: 709
Lid geworden op: 04 okt 2015, 14:49

Re: Draadloze vermogensmeter

Bericht door hanskraayeveld »

Dit is het resultaat... (op mm telefoon)
Ben er best wel tevreden over...
Screenshot_20171228-131545.png
Screenshot_20171225-160141.png
arjan drost
Berichten: 119
Lid geworden op: 17 jan 2010, 17:01
Locatie: Zuid Scharwoude
Contacteer:

Re: Draadloze vermogensmeter

Bericht door arjan drost »

Dat ziet er wel heeel erg mooi uit Hans
Groet Arjan
Ruuben
Berichten: 1796
Lid geworden op: 14 okt 2012, 18:42

Re: Draadloze vermogensmeter

Bericht door Ruuben »

En zo vliegt je kerstvakantie heerlijk om met hopelijk resultaat. Super Hans!
WilfredT2
Berichten: 266
Lid geworden op: 04 sep 2017, 10:02

Re: Draadloze vermogensmeter

Bericht door WilfredT2 »

Gaaf hoor. Maar jij hebt toch een houtvergasser en een cv haard? Ik zie maar 1 hout kachel, welke is dat?
Orbiter
Berichten: 205
Lid geworden op: 22 nov 2018, 17:25

Re: Draadloze vermogensmeter

Bericht door Orbiter »

Inderdaad wel leuk, moet me ook eens iets maken in dit genre.
Nu zijn deze berichtjes van Hans wel al een jaar oud ondertussen :)

Ben je nog steeds tevreden van deze opstelling? Wat is het verschil tussen 'Power' en 'Gebruik' als ik vragen mag?
Ruuben
Berichten: 1796
Lid geworden op: 14 okt 2012, 18:42

Re: Draadloze vermogensmeter

Bericht door Ruuben »

power is geleverde vermogen. Dus de kachel staat aan en levert 10kw warmteafgifte
Gebruik is de hoeveelheid geleverde energie dus 6 uur x 10kw.
Ramon
Berichten: 1033
Lid geworden op: 29 nov 2018, 09:50

Re: Draadloze vermogensmeter

Bericht door Ramon »

Power is netafname.
Gebruik is stroomverbruik op dat moment.


Gebruik = Power(netafname) + zonnepanelen
Wat is het verschil tussen 'Power' en 'Gebruik' als ik vragen mag?
zonnepaneelopbrengst dus
Plaats reactie