Page 13 of 16

Re: MySensors - Gateway to Domoticz

Posted: Monday 23 November 2015 19:28
by gizmocuz
1.5 will also work... (because there was no fix for the heartbeat message, i had to test with this)
glad all is working

as examples for 1.6, the 1.6 version has lots of examples

Re: MySensors - Gateway to Domoticz

Posted: Tuesday 24 November 2015 8:38
by SQ9MDD
I have few devices with some inputs/outpus and setpoints.
To easy find, configure, my proper device i'm sending device addres and child sensor id as name in the presence.
for example:

Code: Select all

53.AI1
53.AI2
53.BI1
53.BI2
53.BO1
53.BO2
I can see this in child list but from setup->devices i can't see my name. I saw this before but not in the latest beta.
This is a simple way to identify many of sensors, is dificoult to understand this ID,IDX and unit stuff from devices.
But proper name can tell you all, address of device and sensor.

Is any chance to get this work?

Re: MySensors - Gateway to Domoticz

Posted: Tuesday 24 November 2015 9:46
by gizmocuz
Could you send me a PM with your sketch ?
I was expecting also that new sensors would have been created with the correct names, put a lot of effort into this....

Re: MySensors - Gateway to Domoticz

Posted: Thursday 26 November 2015 8:40
by SQ9MDD
Many thanx Gizmocuz, now is correct ;)
All devices are correct names.

Great job!

Re: MySensors - Gateway to Domoticz

Posted: Thursday 10 December 2015 22:56
by socket
Hi Gizmocuz,

First of all you are doing here great job! Do you have maybe the similar code uses the eprom memory to load/save the pulsecount for EnergyMeter ?

http://www.mysensors.org/build/pulse_power

I am trying also update the current total value KWH usage ("Data" : "1.048 kWh") according to the physical EnergyMeter where total=12834 KWH. I was trying something like that without success:

/json.htm?type=command&param=updateuservariable&idx=97&vname=MySensEnergyMeter&vtype=0&vvalue=12834
/json.htm?type=command&param=updateuservariable&rid=97&vname=Usage&vtype=1&vvalue=12834000
/json.htm?type=command&param=udevice&idx=97&nvalue=0&svalue=400;12834

{
"AddjMulti" : 1.0,
"AddjMulti2" : 1.0,
"AddjValue" : 0.0,
"AddjValue2" : 0.0,
"BatteryLevel" : 255,
"CounterToday" : "0.381 kWh",
"CustomImage" : 0,
"Data" : "0.518 kWh",
"Description" : "",
"Favorite" : 0,
"HardwareID" : 21,
"HardwareName" : "MySensorsUSB",
"HardwareType" : "MySensors Gateway USB",
"HardwareTypeVal" : 41,
"HaveTimeout" : false,
"ID" : "00000101",
"LastUpdate" : "2015-12-11 00:40:12",
"Name" : "MySensEnergyMeter",
"Notifications" : "false",
"PlanID" : "0",
"PlanIDs" : [ 0 ],
"Protected" : false,
"ShowNotifications" : true,
"SignalLevel" : "-",
"SubType" : "kWh",
"SwitchTypeVal" : 0,
"Timers" : "false",
"Type" : "General",
"TypeImg" : "current",
"Unit" : 1,
"Usage" : "463.0 Watt",
"Used" : 1,
"XOffset" : "0",
"YOffset" : "0",
"idx" : "97"
}


Thanks in advance!
gizmocuz wrote:
ThinkPad wrote:I think i am already seeing that. Connected 'MYSController' to the Ethernet gateway i made, and i see the application constantly scrolling, only thing it displays is:

RECV REQ VAR1

Nice, looking forward to it! Let us know if we can help in any way :)
Below the new code, it also uses the eprom memory to load/save the pulsecount, which is much better then requesting this from the host software (domoticz),
in case its down for whatever reason ;)

A new beta is building at the moment (will take at least 15 minutes), please let us know if you got it working !

Code: Select all

//
// Use this sensor to measure volume and flow of your house watermeter.
// You need to set the correct pulsefactor of your meter (pulses per m3).
// The sensor starts by reading the pulse count reading from the eprom.
// Reports both volume and flow back to gateway.
//
// Unfortunately millis() won't increment when the Arduino is in 
// sleepmode. So we cannot make this sensor sleep if we also want  
// to calculate/report flow.
//

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

#define DIGITAL_INPUT_SENSOR 3                  // The digital input you attached your sensor.  (Only 2 and 3 generates interrupt!)

#define PULSE_FACTOR 1000                       // Nummber of blinks per m3 of your meter (One rotation/liter)

#define SLEEP_MODE false                        // flowvalue can only be reported when sleep mode is false.

#define MAX_FLOW 40                             // Max flow (l/min) value to report. This filters outliers.

#define CHILD_ID 1                              // Id of the sensor child

unsigned long SEND_FREQUENCY = 20000;           // Minimum time between send (in milliseconds). We don't want to spam the gateway.

#define EPROM_PULSECOUNT_1_STATE 1
#define EPROM_PULSECOUNT_2_STATE 2
#define EPROM_PULSECOUNT_3_STATE 3
#define EPROM_PULSECOUNT_4_STATE 4

MySensor gw;
MyMessage flowMsg(CHILD_ID,V_FLOW);
MyMessage volumeMsg(CHILD_ID,V_VOLUME);
 
double ppl = ((double)PULSE_FACTOR)/1000;        // Pulses per liter

volatile unsigned long pulseCount = 0;   
volatile unsigned long lastBlink = 0;
volatile double flow = 0;  
boolean pcReceived = false;
unsigned long oldPulseCount = 0;
unsigned long newBlink = 0;   
double oldflow = 0;
double volume;                     
double oldvolume;
unsigned long lastSend;
unsigned long lastPulse;
unsigned long currentTime;
boolean metric;

void setup()  
{  
  gw.begin(); 

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

  // Register this device as Waterflow sensor
  gw.present(CHILD_ID, S_WATER);       

  //Retreive our last pulse count value from the eprom
  pulseCount = oldPulseCount = LoadLastPulseCount();

  lastSend = millis();

  attachInterrupt(1, onPulse, RISING);
}


void loop()     
{ 
  gw.process();
  currentTime = millis();
	
    // Only send values at a maximum frequency or woken up from sleep
  bool sendTime = (currentTime - lastSend) > SEND_FREQUENCY;
  if (SLEEP_MODE || sendTime)
  {
    lastSend=currentTime;

    if (!SLEEP_MODE && flow != oldflow) {
      oldflow = flow;

      //Serial.print("l/min:");
      //Serial.println(flow);

      // Check that we dont get unresonable large flow value. 
      // could hapen when long wraps or false interrupt triggered
      if (flow<((unsigned long)MAX_FLOW)) {
        gw.send(flowMsg.set(flow, 2));                   // Send flow value to gw
      }  
    }
  
    // No Pulse count in 2min 
    if(currentTime - lastPulse > 120000){
      flow = 0;
    } 

    // Pulse count has changed
    if (pulseCount != oldPulseCount) {
      oldPulseCount = pulseCount;
      SaveLastPulseCount(pulseCount);
      
      //Serial.print("pulsecount:");
      //Serial.println(pulseCount);

      double volume = ((double)pulseCount/((double)PULSE_FACTOR));     
      if (volume != oldvolume) {
        //Serial.print("volume:");
        //Serial.println(volume, 3);
        
        gw.send(volumeMsg.set(volume, 3));               // Send volume value to gw
        oldvolume = volume;
      } 
    }
  }
  if (SLEEP_MODE) {
    gw.sleep(SEND_FREQUENCY);
  }
}

unsigned long LoadLastPulseCount()
{
    int PCount_1=gw.loadState(EPROM_PULSECOUNT_1_STATE); 
    int PCount_2=gw.loadState(EPROM_PULSECOUNT_2_STATE); 
    int PCount_3=gw.loadState(EPROM_PULSECOUNT_3_STATE); 
    int PCount_4=gw.loadState(EPROM_PULSECOUNT_4_STATE); 

    //check if valid
    if ((PCount_1==0xFF)&&(PCount_2==0xFF)&&(PCount_3==0xFF)&&(PCount_4==0xFF))
      return 0;//never saved before
    unsigned long PulseCount=(PCount_1<<24)|(PCount_2<<16)|(PCount_3<<8)|PCount_4;
    //Serial.print("Last Pulsecount: ");
    //Serial.println(PulseCount);
    return PulseCount;
}

void SaveLastPulseCount(unsigned long PulseCount)
{
    int PCount_1=(PulseCount&0xFF000000)>>24; 
    int PCount_2=(PulseCount&0xFF0000)>>16; 
    int PCount_3=(PulseCount&0xFF00)>>8; 
    int PCount_4=PulseCount&0xFF; 

    gw.saveState(EPROM_PULSECOUNT_1_STATE, PCount_1); 
    gw.saveState(EPROM_PULSECOUNT_2_STATE, PCount_2); 
    gw.saveState(EPROM_PULSECOUNT_3_STATE, PCount_3); 
    gw.saveState(EPROM_PULSECOUNT_4_STATE, PCount_4); 
}

void onPulse()     
{
  if (!SLEEP_MODE)
  {
    unsigned long newBlink = micros();   
    unsigned long interval = newBlink-lastBlink;
    
    if (interval!=0)
    {
      lastPulse = millis();
      if (interval<500000L) {
        // Sometimes we get interrupt on RISING,  500000 = 0.5sek debounce ( max 120 l/min)
        return;   
      }
      flow = (60000000.0 /interval) / ppl;
    }
    lastBlink = newBlink;
  }
  pulseCount++; 
}

Re: MySensors - Gateway to Domoticz

Posted: Friday 11 December 2015 11:52
by shkaff
hansrune wrote:For the connection question : Connection is to the Arduino via a serial USB interface.

As for RFXcom devices, it is convenient to make a persistent device name that Domoticz can read and write also for the MySensors gateway connection. Use the lsusb command to display the vendor and product id, then use these as in the following udev rule example.

Here is my /etc/udev/rules.d/71-mysensors.rules. Domoticz will find the Mysensors serial gateway via ttyUSB31

Code: Select all

#
#  idVendor           0x1a86 QinHeng Electronics
#  idProduct          0x7523 HL-340 USB-Serial adapter
#
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="ttyUSB31", MODE="0666", SYMLINK+="mysensors"
#
# Tests:
# udevadm info --query=all --name ttyUSB0
# udevadm test $(udevadm info --query path --name ttyUSB0 )
#
Is it still actual guidance to get USB based SerialGateway properly set up and recognized at Domoticz?
I just started playing with, and I can see that the system offers specifying manually which Serial Port is to use.
Setup->Hardware->Add
  • Type: MySensors Gateway USB
  • Serial Port: /dev/ttyUSB0
I mean it looks no need to play with idVendor and idProduct anymore. Not sure also because of messing well guide how to start with MySensors and Domoticz together.

Re: MySensors - Gateway to Domoticz

Posted: Wednesday 23 December 2015 22:33
by fets
Hello,
Since several version, I experienced a strange behaviour using domoticz : some messages sent by my node seemed ignored.
First I have to tell that some msg sent by my node requieres an acknowledge.
So I read sources from domoticz repository and I think I understand what happens.
In file MySensorBase.cpp, method MySensorsBase::ParseLine and line 1566

Code: Select all

		if (ack == 1)
		{
			//No need to process ack commands
			return;
		}
That means that all incoming messages asking for ack are ignored !!!

Is this behavior wanted or is this an issue ?

Re: MySensors - Gateway to Domoticz

Posted: Wednesday 30 December 2015 0:23
by gizmocuz
The acknowledge should be send by the gateway and not by the controller (software application) or did I miss something?

Re: MySensors - Gateway to Domoticz

Posted: Wednesday 30 December 2015 0:26
by andriej
Doesn't the application could doublechecked it did and got response back and -if not - print an error?

Re: MySensors - Gateway to Domoticz

Posted: Wednesday 30 December 2015 21:44
by fets
gizmocuz wrote:The acknowledge should be send by the gateway and not by the controller (software application) or did I miss something?
Maybe your right, I'll check on mysensors sources later.

But anyway the message should be processed by domoticz in order to update status?
I downloaded domoticz sources commented lines I mentionned earlier and regenerate.
And now, everything works as expected :D.
Do you plan to something to my issue ?

Re: MySensors - Gateway to Domoticz

Posted: Wednesday 30 December 2015 21:49
by fets
fets wrote:I'll check on mysensors sources later.
So I checked and you are totally right

Re: MySensors - Gateway to Domoticz

Posted: Saturday 02 January 2016 3:11
by gizmocuz
Does this mean all should work fine without your patch?

Re: MySensors - Gateway to Domoticz

Posted: Saturday 02 January 2016 10:21
by fets
gizmocuz wrote:Does this mean all should work fine without your patch?
No, my patch is necessary to manage incoming message with ack request (we agree that the answer was sent abck by gateway).
In order to update sensor status in domoticz, the message must be processed further.

Re: MySensors - Gateway to Domoticz

Posted: Saturday 02 January 2016 10:28
by andriej
And it would be also nice to notify that incoming message from MySensors is with ACK.

Re: MySensors - Gateway to Domoticz

Posted: Saturday 02 January 2016 10:46
by fets
andriej wrote:And it would be also nice to notify that incoming message from MySensors is with ACK.
notify to who or how ?

Re: MySensors - Gateway to Domoticz

Posted: Saturday 02 January 2016 15:34
by andriej
In messages/status list. :-)
Its already showing that domoticz got message. There could be another character or other indicator showing that it's ack message.

Re: MySensors - Gateway to Domoticz

Posted: Friday 08 January 2016 21:04
by fets
@gizmocuz any news on my ack issue ?

I just create a pull request on this subject. I never used git so this is my first PR.
I hope I did the right thing

Re: MySensors - Gateway to Domoticz

Posted: Sunday 10 January 2016 12:07
by Derik
I have 2 x Arduino Uno to test.
I have the Gateway, visible in domotcz with the firmware version. [So I assume this is true.]
ScreenShot010.jpg
ScreenShot010.jpg (8.59 KiB) Viewed 8067 times
I have the ip and port adapted in the sketch. this also in the Domoticz.[ changed ip-port and mac, and activate the w5100 ]
ScreenShot012.jpg
ScreenShot012.jpg (89.37 KiB) Viewed 8067 times
I checked the cables 3x, also of the nRF24L01 +.
And I set on new hardware, in domoticz.
I see movement of LEDs on the uno ..

I have a uno a pir and the NRF. The pir on 5volt pin. [NRF24L01 + on the 3.3Volt]
I have the software sketch from mysensors directly into my uno shot
I checked the wires 3 x.

I see domoticz no node sensor or whatever.
ScreenShot011.jpg
ScreenShot011.jpg (86.23 KiB) Viewed 8067 times
I see on the uno with the pir no movement ...

What am I doing wrong?

Re: MySensors - Gateway to Domoticz

Posted: Sunday 10 January 2016 13:49
by Mediacj
Did you use a capacitor on the radio?

What is displayed in the serial monitor of one of your sensors? Do you see errors or?

Re: MySensors - Gateway to Domoticz

Posted: Sunday 10 January 2016 18:55
by Derik
Mediacj wrote:Did you use a capacitor on the radio?
Shame :oops: no...
Mediacj wrote:What is displayed in the serial monitor of one of your sensors? Do you see errors or?
There are errors in the serial monitor when i ulpoad from the Codebender Browser Plugin


Edit:

What is the capacity of this capacitor ?
I have 470 uf 16 volt?
Is that a good one?