nodo-domotica.nl

Wens voor toevoegen Energie monitor

We zitten zoals bekend in de ontwikkelfase. Van diverse gebruikers heb ik al goede suggesties gekregen. Hier discussiëren we over de functionaliteiten van de nieuwe release.

Wens voor toevoegen Energie monitor

Berichtdoor Sjoerdp » 28 nov 2011, 15:01

De huidige nodo heeft al briljante functies en is het hart van veel domotica oplossingen. Zelf wacht ik nog even op de samenkoopactie om de ethernet versie te kunnen bouwen/kopen. Maar ondertussen wel al nagedacht over andere toepassingen natuurlijk!

Het lijkt me gaaf om de domotica te combineren met een energiemonitor. Bijvoorbeeld door een sensor op de electriciteitsmeter die het aantal keren dat het lampje knippert (of de schijf ronddraait bij oudere meters) kan registreren. Zo kun je zien wat je sluipverbruik is en welke piek je bijvoorbeeld krijgt als de droger aan gaat. Volgens mij technisch heel makkelijk te maken en de Arduino is daar uitermate geschikt voor. Sterker nog, er is al een open project dat dat gedaan heeft met een erg mooi modulair systeem van sensoren, basis unit en displays op basis van Arduinos:
http://openenergymonitor.org/emon/

Zijn er meer mensen die dit erg interessant vinden en samen met mij (zodra ik de spullen heb) willen kijken of we hier gebruik van kunnen maken als plugin of vast deel van een volgende release? Lijkt me een erg mooie aanvulling op de domotica die er nu al in de Nodo zit!
Sjoerdp
 
Berichten: 106
Geregistreerd: 01 okt 2011, 17:20

Re: Wens voor toevoegen Energie monitor

Berichtdoor R1B1 » 06 dec 2011, 13:58

Ik ben op zich wel geintereseerd, ik heb b.v. de spullen voor de monitor van deze club klaar liggen..
http://www.airsensor.co.uk/component/zoo/item/energy-monitor.html
moet alleen nog wat tijd vinden.

ik was eigenlijk van plan om hier een html pagina van te bakken en middels een ethernet shield uit te gaan lezen... maar is tot nu toe alleen nog bij 'fantaseren' gebleven ..
R1B1
 
Berichten: 1
Geregistreerd: 04 sep 2011, 10:34

Re: Wens voor toevoegen Energie monitor

Berichtdoor Sjoerdp » 07 jan 2012, 13:19

Ik heb inmiddels een paar avonden lopen spelen. Ik heb helaas een hele oude gasmeter die geen reed-relais of spiegelend cijfertje heeft, dus ik richt me alleen op electra. Mijn meter geeft rode flitsjes en die kunnen eenvoudig met een LDR of light-to-voltage sensor uitgelezen worden.

In het begin heb ik erg lopen rommelen met interrupts. Maar daar crashte de Arduino Mega 2560 met Arduino Ethernet Shield erg vaak op. Ook als ik Watchdog Timers en dergelijke gebruikte. Inmiddels heb ik de interrupts laten varen en pol ik nu of ik een lampje zie flitsen. Ook gebruik ik nu een Pachube library die eigenlijk al het Ethernet verkeer afhandeld. Erg handig!

Ik meet nu hoe lang het duurt voordat er 5 pulsjes zijn geweest en op basis daarvan weet ik hoeveel stroom er gemiddeld verbruikt werd in die periode. Na elke 5 pulsjes stuur ik het aantal Watts naar Pachube. Hoe hoger het verbruik, hoe vaker er updates komen. Het lijkt allemaal prima te werken en misschien valt het in de nodo te integreren. Dat zie ik wel zodra de Ethernet versie gereleased wordt. Ook wil ik temperatuur gaan toevoegen, zodat ook de temperatuur bijgehouden wordt.

Hierbij de Sketch die nu bij mij stabiel lijkt te werken (in ieder geval al zo'n 15 uur):

Code: Selecteer alles
/*
Pachube Energy Meter for Arduino with Ethernet shield

Based on the Pachube Data Out example sketch:
---
Demonstrates use of the ERxPachube library.
Push local sensor data to Pachube server.
If you don't have a Pachube account, register one first (http://www.pachube.com/).

* Created 22 April 2011
* By Jeffrey Sun
* http://code.google.com/p/pachubelibrary/
---
 
* Modified 7 January 2012
* by Sjoerd Peerlkamp to include Energy Monitoring using pulse counters.

Circuit:
* Light to Voltage sensor (Conrad) attached to pin 3 (interrupt 1)
* Status LED for indicating pulse counting (alternating at every puls) attached to pin 4
* Status LED for indicating data submission to Pachube attached to pin 5
* Ethernet shield attached to pins 10, 11, 12, 13

*/
#include <Arduino.h>
#include <HardwareSerial.h>
#include <ERxPachube.h>
#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xAA, 0xAA };  // MAC address of Ethernet shield (printed on sticker)
IPAddress ip(10,0,0,200);                             // default IP Address if not configured via DHCP
byte gateway[] = { 10, 0, 0, 1 };                     // default gateway if not configured via DHCP
byte subnet[] = { 255, 255, 255, 0 };                 // default gateway if not configured via DHCP

#define PACHUBE_API_KEY            "INSERTYOURAPIHERE" // fill in your API key PACHUBE_API_KEY
#define PACHUBE_FEED_ID            xxxx // fill in your feed id

const int pulsesPerMeasurement = 5;  // number of pulses between measurements
const long hourInMillies = 3600000;  // number of milliseconds per hour
volatile long timeAtFirstPulse = 0;  // Time at first pusle
volatile long timeAtLastPulse = 0;   // Time at last pulse

const int  sensorPin = 3;        // Light sensor
const int  detectLedPin =  4;    // LED indicating sensor data is received
const int  submitLedPin = 5;     // LED indicating data is submitted

volatile int state = LOW;           // used for alternating LED to indicate detected pulses
const int delayMs = 500;            // Used for minimum time between pulses to avoid rogue pulses
volatile int wattSensorCount = -1;  // Counts pulses detected by sensor, 1 pulse = 1 watthour (1000 flashes per 1kWh).
volatile long timeAtPulse = 0;      // Contains the time of the last detected pulse

ERxPachubeDataOut dataout(PACHUBE_API_KEY, PACHUBE_FEED_ID);

void PrintDataStream(const ERxPachube& pachube);

void setup() {
  // start serial port:
  Serial.begin(9600);

  pinMode(detectLedPin, OUTPUT);
  pinMode(submitLedPin, OUTPUT);
  pinMode(sensorPin, INPUT);     

  delay(1000);   // give the ethernet module time to boot up:
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // Configure manually:
    Ethernet.begin(mac, ip, gateway, subnet);
  }
  ip = Ethernet.localIP();
  Serial.println(ip);
  delay(1000);
  Serial.println("Arduino boot completed . . . .");

  dataout.addData(0);
//  dataout.addData(1);  // If you wish to add more sensor values like temperature
//  dataout.addData(2);  // If you wish to add more sensor values like light sensor
}

void loop() {
  // Check if we detect a pulse
  checkSensor();
  // Submit the data if we have sufficient number of measurements
  if(wattSensorCount >= pulsesPerMeasurement) {
    submitData();
  }
}

// Count sensor pulses
void checkSensor() {
  int currentState = digitalRead(sensorPin);        // Detect value of Energy Sensor
  long currentMillis = millis();                    // Register time the measurement was done
  // Trigger on HIGH in energy meter LED sensor
  if (currentState == HIGH && (timeAtPulse + delayMs) < currentMillis ) {
    timeAtPulse = currentMillis;                 // store the millis value at the ftime that the pulse was measured
    Serial.println("Pulse!");                    // For debugging only
    state = !state;                              // Change the state of the Pulse LED to show detected pulse. One pulse turns LED on, next pulse turns LED off
    digitalWrite(detectLedPin, state);           // Toggle the LED that indicates meter pulses.
    wattSensorCount = wattSensorCount + 1;       // Update number of pulses detected so far
    if (wattSensorCount == 0) {                  // First pulse in the series (after boot, as we start with value -1 in the Setup routine)
      timeAtFirstPulse = currentMillis;
    }
  }
}

// Calculate the average number of Watts used during the last series of pulses
int CalculateWatt() {
  Serial.println("+++++++++++++ Calculate number of Watts +++++++++++++");  // For debugging only
  timeAtLastPulse = timeAtPulse; // Time of last pulse equals the time registered at the last detected pulse
  int numberOfWatts = wattSensorCount * (hourInMillies / (timeAtLastPulse - timeAtFirstPulse));  // Calculate current usage based on pulses per hour.
  Serial.print("Number of pulses detected: ");   // For debugging only
  Serial.println(wattSensorCount);               // For debugging only
  Serial.print("Number of Watts calculated: ");  // For debugging only
  Serial.println(numberOfWatts);                 // For debugging only
  timeAtFirstPulse = timeAtLastPulse;            // Time of first pulse equals the end time of last series
  wattSensorCount = 0;                           // Start a new serie of pulses
  return numberOfWatts;                          // Return the calculated average usage (Watts) during this series of pulses
}

// Submit the data to Pachube
void submitData() {
  Serial.println("+++++++++++++ Submit Data to Pachube +++++++++++++"); // For debugging only
  dataout.updateData(0, CalculateWatt());    // Our output data is the number of Watts that is calculated
  digitalWrite(submitLedPin, HIGH);          // indicate that we are writing data to Pachube
  //dataout.updateData(1, fSensorData);      // You can add more sensors if you like
  //dataout.updateData(2, "Arduino Data");   // You can add more sensors if you like
  int status = dataout.updatePachube();      // Store the return value to status variable
  Serial.print("sync status code <OK == 200> => ");  // For debugging only
  Serial.println(status);                            // For debugging only
  digitalWrite(submitLedPin, LOW);         // Turn the LED that indicates data transfer Off.
  PrintDataStream(dataout);                // Print what we actually submitted, for debugging only
}

// Print the data submitted to Pachube, for debugging only
void PrintDataStream(const ERxPachube& pachube)
{
  unsigned int count = pachube.countDatastreams();
  Serial.print("data count=> ");
  Serial.println(count);
  Serial.println("<id>,<value>");
  for(unsigned int i = 0; i < count; i++)
  {
    Serial.print(pachube.getIdByIndex(i));
    Serial.print(",");
    Serial.print(pachube.getValueByIndex(i));
    Serial.println();
  }
}
Sjoerdp
 
Berichten: 106
Geregistreerd: 01 okt 2011, 17:20

Re: Wens voor toevoegen Energie monitor

Berichtdoor rvhoutem » 09 jan 2012, 12:51

@Sjoerdp

Als ik het goed begrijp. Hoef je alleen jouw sketch in te lezen (met aangepaste ip/api instellingen) en dan moet het gewoon werken? Weet je toevallig of dit ook met een arduino due bordje werkt?
rvhoutem
 
Berichten: 61
Geregistreerd: 13 sep 2011, 11:53

Re: Wens voor toevoegen Energie monitor

Berichtdoor Sjoerdp » 09 jan 2012, 13:05

@rvhoutem
Ja, je kunt de Sketch gewoon inlezen en dan zou het moeten werken met jouw feed ID en API key, op voorwaarde dat je een Arduino met EthernetShield hebt en ook de library genoemd in de Sketch download. Ik heb zelf een Mega 2560, maar dat is overkill voor dit kleine projectje. Maar de Mega ga ik voor de Nodo gebruiken :-) Of het op de Uno of Due werkt, weet ik niet. Vermoed van wel.

Je moet natuurlijk ook nog een paar componentjes kopen. Ik heb twee ledjes met een weerstand (100k uit mijn hoofd) gebruikt voor de status leds en een TSL 250R voor de puls detectie. De TSL 250R is al een spanningsdeler, dus rechtstreeks aansluiten op de GND, 5V en één van de digitale pinnen geeft HIGH als het licht fel genoeg is (en dat is een pulse) en LOW als er niet veel licht is (overdag in de meterkast is het donker genoeg, zelfs als de deur open staat).

Best simpel eigenlijk! Als je er niet uit komt, moet je het maar even laten weten en zal ik het schema nog iets nauwkeuriger beschrijven.
Sjoerdp
 
Berichten: 106
Geregistreerd: 01 okt 2011, 17:20

Re: Wens voor toevoegen Energie monitor

Berichtdoor rvhoutem » 09 jan 2012, 18:41

Top! Ik heb nog een arduino en ethernet shield liggen.
De TSL250R in bestelling en het weekend wat te doen!
rvhoutem
 
Berichten: 61
Geregistreerd: 13 sep 2011, 11:53

Re: Wens voor toevoegen Energie monitor

Berichtdoor rvhoutem » 10 jan 2012, 21:03

Helaas het ik een ethernetshield op de 28J60 chip basis gekocht.
Nu werkt bovenstaande niet.

Schijnbaar is het een hele klus om dit type ethernetshield aan de praat te krijgen. :(
rvhoutem
 
Berichten: 61
Geregistreerd: 13 sep 2011, 11:53

Re: Wens voor toevoegen Energie monitor

Berichtdoor Paul » 25 jan 2012, 08:02

Als de nieuwe release uit is zal ik jullie hiermee op weg helpen. Ik heb wel wat ideeën hoe we in samenwerking met de nodo een goedkoop arsenaal aan watchers en sensoren kunnen maken.
Groeten Paul
Paul
 
Berichten: 1152
Geregistreerd: 31 aug 2011, 20:33

Re: Wens voor toevoegen Energie monitor

Berichtdoor Sjoerdp » 25 jan 2012, 08:30

@Paul: Bedankt Paul, gaaf!

Mijn energiemeter zonder interrupts draait inmiddels al weken stabiel. Het was dus echte en probleem met de interrupts. Inmiddels heb ik ook een extra Arduino Uno besteld, zodat mijn Mega voor de Nodo gebruikt kan gaan worden en de extra Uno het verbruik kan blijven monitoren. Alleen kijken of ik dan via 433MHz ofzo het signaal door kan zetten naar de Nodo omdat die mijn ethernet shield krijgt...
Sjoerdp
 
Berichten: 106
Geregistreerd: 01 okt 2011, 17:20

Re: Wens voor toevoegen Energie monitor

Berichtdoor Paul » 25 jan 2012, 12:14

Sjoerdp schreef:@Paul: Bedankt Paul, gaaf!

Mijn energiemeter zonder interrupts draait inmiddels al weken stabiel. Het was dus echte en probleem met de interrupts. Inmiddels heb ik ook een extra Arduino Uno besteld, zodat mijn Mega voor de Nodo gebruikt kan gaan worden en de extra Uno het verbruik kan blijven monitoren. Alleen kijken of ik dan via 433MHz ofzo het signaal door kan zetten naar de Nodo omdat die mijn ethernet shield krijgt...

Het idee is dat je in de bestaande Nodo software eigen plugins kunt maken voor dergelijke taken. Je pakt dan een Duemillanove, Lillypad, Nano die voorzie je uitsluitend van een RF zender en de sensor die je nodig hebt, maar dan geintegreerd in het nodo platform. Vervolgens beschik je over een goedkope draadloze sensor die alles keurig naar een centrale Nodo stuurt.

Enige wat je nog moet doen is de juiste sensor zoeken en eventueel een plugin hiervoor maken. Op zeer eenvoudige wijze kun je dan gebruik maken van metingen zoals:

Temperatuur, luchtdruk, zonlicht, wind, pulsen, energieverbruik, beweging, geluid, .....

In de centrale Nodo kun je er mee doen wat je wilt.
Groeten Paul
Paul
 
Berichten: 1152
Geregistreerd: 31 aug 2011, 20:33

Volgende

Keer terug naar De nieuwe release

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers. en 1 gast

cron