Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. Roland
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Roland

    @Roland

    0
    Reputation
    2
    Posts
    249
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    Roland Follow

    Best posts made by Roland

    This user hasn't posted anything yet.

    Latest posts made by Roland

    • RE: only one arduino to domoticz without radio

      Below the script I used.
      I am trying to get the EnergyMeterPulsSensor working without RF GW but directly connected via USB.

      /**

      • The MySensors Arduino library handles the wireless radio link and protocol
      • between your home built sensors/actuators and HA controller of choice.
      • The sensors forms a self healing radio network with optional repeaters. Each
      • repeater and gateway builds a routing tables in EEPROM which keeps track of the
      • network topology allowing messages to be routed to nodes.
      • Created by Henrik Ekblad henrik.ekblad@mysensors.org
      • Copyright (C) 2013-2015 Sensnology AB
      • Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
      • Documentation: http://www.mysensors.org
      • Support Forum: http://forum.mysensors.org
      • This program is free software; you can redistribute it and/or
      • modify it under the terms of the GNU General Public License
      • version 2 as published by the Free Software Foundation.

      • DESCRIPTION
      • The ArduinoGateway prints data received from sensors on the serial link.
      • The gateway accepts input on seral which will be sent out on radio network.
      • The GW code is designed for Arduino Nano 328p / 16MHz
      • Wire connections (OPTIONAL):
        • Inclusion button should be connected between digital pin 3 and GND
        • RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series
      • LEDs (OPTIONAL):
        • To use the feature, uncomment MY_LEDS_BLINKING_FEATURE in MyConfig.h
        • RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
        • TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
        • ERR (red) - fast blink on error during transmission error or recieve crc error

      */

      // Enable debug prints to serial monitor
      #define MY_DEBUG

      // Enable and select radio type attached
      //#define MY_RADIO_NRF24
      //#define MY_RADIO_RFM69

      // Set LOW transmit power level as default, if you have an amplified NRF-module and
      // power your radio separately with a good regulator you can turn up PA level.
      //#define MY_RF24_PA_LEVEL RF24_PA_LOW

      // Enable serial gateway
      #define MY_GATEWAY_SERIAL

      // Flash leds on rx/tx/err
      #define MY_LEDS_BLINKING_FEATURE
      // Set blinking period
      #define MY_DEFAULT_LED_BLINK_PERIOD 300

      // Inverses the behavior of leds
      //#define MY_WITH_LEDS_BLINKING_INVERSE

      // Enable inclusion mode
      #define MY_INCLUSION_MODE_FEATURE
      // Enable Inclusion mode button on gateway
      #define MY_INCLUSION_BUTTON_FEATURE

      // Inverses behavior of inclusion button (if using external pullup)
      //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP

      // Set inclusion mode duration (in seconds)
      #define MY_INCLUSION_MODE_DURATION 60
      // Digital pin used for inclusion mode button
      #define MY_INCLUSION_MODE_BUTTON_PIN 3

      #define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin
      #define MY_DEFAULT_RX_LED_PIN 6 // Receive led pin
      #define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED

      #include <SPI.h>
      #include <MySensor.h>

      #define DIGITAL_INPUT_SENSOR 3 // The digital input you attached your light sensor. (Only 2 and 3 generates interrupt!)
      #define PULSE_FACTOR 1000 // Nummber of blinks per KWH of your meeter
      #define SLEEP_MODE false // Watt-value can only be reported when sleep mode is false.
      #define MAX_WATT 10000 // Max watt value to report. This filetrs outliers.
      #define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
      #define CHILD_ID 1 // Id of the sensor child
      unsigned long SEND_FREQUENCY = 20000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway.
      MySensor gw;
      double ppwh = ((double)PULSE_FACTOR)/1000; // Pulses per watt hour
      boolean pcReceived = false;
      volatile unsigned long pulseCount = 0;
      volatile unsigned long lastBlink = 0;
      volatile unsigned long watt = 0;
      unsigned long oldPulseCount = 0;
      unsigned long oldWatt = 0;
      double oldKwh;
      unsigned long lastSend;
      MyMessage wattMsg(CHILD_ID,V_WATT);
      MyMessage kwhMsg(CHILD_ID,V_KWH);
      MyMessage pcMsg(CHILD_ID,V_VAR1);

      void setup()
      {
      gw.begin(incomingMessage);

      // Send the sketch version information to the gateway and Controller
      gw.sendSketchInfo("Energy Meter", "1.0");

      // Register this device as power sensor
      gw.present(CHILD_ID, S_POWER);

      // Fetch last known pulse count value from gw
      gw.request(CHILD_ID, V_VAR1);

      attachInterrupt(INTERRUPT, onPulse, RISING);
      lastSend=millis();
      }

      void presentation() {
      // Present locally attached sensors
      }

      void loop()
      {
      gw.process();
      unsigned long now = millis();
      // Only send values at a maximum frequency or woken up from sleep
      bool sendTime = now - lastSend > SEND_FREQUENCY;
      if (pcReceived && (SLEEP_MODE || sendTime)) {
      // New watt value has been calculated
      if (!SLEEP_MODE && watt != oldWatt) {
      // Check that we dont get unresonable large watt value.
      // could hapen when long wraps or false interrupt triggered
      if (watt<((unsigned long)MAX_WATT)) {
      gw.send(wattMsg.set(watt)); // Send watt value to gw
      }
      Serial.print("Watt:");
      Serial.println(watt);
      oldWatt = watt;
      }

      // Pulse cout has changed
      if (pulseCount != oldPulseCount) {
        gw.send(pcMsg.set(pulseCount));  // Send pulse count value to gw 
        double kwh = ((double)pulseCount/((double)PULSE_FACTOR));     
        oldPulseCount = pulseCount;
        if (kwh != oldKwh) {
          gw.send(kwhMsg.set(kwh, 4));  // Send kwh value to gw 
          oldKwh = kwh;
        }
      }    
      lastSend = now;
      

      } else if (sendTime && !pcReceived) {
      // No count received. Try requesting it again
      gw.request(CHILD_ID, V_VAR1);
      lastSend=now;
      }

      if (SLEEP_MODE) {
      gw.sleep(SEND_FREQUENCY);
      }
      }

      void incomingMessage(const MyMessage &message) {
      if (message.type==V_VAR1) {
      pulseCount = oldPulseCount = message.getLong();
      Serial.print("Received last pulse count from gw:");
      Serial.println(pulseCount);
      pcReceived = true;
      }
      }

      void onPulse()
      {
      if (!SLEEP_MODE) {
      unsigned long newBlink = micros();
      unsigned long interval = newBlink-lastBlink;
      if (interval<10000L) { // Sometimes we get interrupt on RISING
      return;
      }
      watt = (3600000000.0 /interval) / ppwh;
      lastBlink = newBlink;
      }
      pulseCount++;
      }

      posted in Development
      Roland
      Roland
    • RE: only one arduino to domoticz without radio

      Hi Nico

      I am looking for such a sketch but did not manage to get it up and running.
      Can you send me the one you created?
      I hope to modify it to my needs.
      Thanks!

      posted in Development
      Roland
      Roland