@flopp
Thanks for that, yes I noticed your thread somewhere and I was delighted to see gizmocuz working on your issue. Unfortunately the changes made broke my workaround hack. It just means I need to look for a more conventional solution that does not include modifying cpp files.
What I will do is re-code my mysensor nodes to use other variables such as V_WATTS etc rather than V_VAR1, VAR2 etc.
bigal
@bigal
Best posts made by bigal
Latest posts made by bigal
-
RE: Nodes with S_CUSTOM Values not appearing
-
RE: Nodes with S_CUSTOM Values not appearing
OK, yes you are right looks like S_CUSTOM values are not supported.
So for those of you who are brave enough to make your own Custom MySensors nodes read on...I wish there was an easy way to add your own custom sensor, as I need to make many of them.
pH Electrical Conductivity(EC), Tank Water Volume (Liters), UVa and UVb in mW/cm2 ioniziing radiation in uSv to name a few of my sensor devices.
But right now I need to get my kWh import/export transmitter recognized by Domoticz.
So I guess I will just have to find a work around as Domoticz looks quite good stacked up against other free controllers.
Here is what I have done so far...I have discovered you can hack the hardware/MySensorsBase.cpp file. This is a really crude hack but I admit I am no C expert. Maybe someone can point out a better way of doing this.
I am running Debian Lime on and Olimex A10.
You will need the Source files, so if running on a RasberryPi you cannot use the compiled binaries, you will need to download the source code from github.
Compile your domoticz and get it running first. If you do not want to run Domoticz as root then make sure you don't compile as root as you'll have to start all over again, downloading from github. A trap I fell into.
Also you need to uninstall the boost libraries and get the latest one. Doing the sudo apt-get update and then sudo apt-get upgrade doesn't seem to get the correct boost libraries.
Google how to remove current boost and how to install latest ver.On with the task... Here are the values I am sending in my sketch:
imported energy (CHILD_ID_0, V_VAR1);
real power (CHILD_ID_0, V_VAR2);
apparent power (CHILD_ID_0, V_VAR3);
voltage (CHILD_ID_0, V_VAR4);
current (CHILD_ID_0, V_VAR5);freq (CHILD_ID_1, V_VAR1);
peak power CHILD_ID_1, V_VAR2);
pf (CHILD_ID_1, V_VAR3);
exported energy (CHILD_ID_1, V_VAR4);By trial and error I found there are 4 places you need to edit inside MySensorsBase.cpp
Find the line starting case S_CUSTOM:
and modify as belowcase S_CUSTOM: vType = V_VAR5; bDoAdd = true; break;
Find line starting : case V_CURRENT:
Then add the V_VAR1 through V_VAR5 variables that you are usingcase V_CURRENT: if (pChild->GetValue(vType, floatValue)) SendCurrentSensor(cNode, pChild->batValue, floatValue, 0, 0, (!pChild->childName.empty()) ? pChild->childName : "Current"); break; case V_VAR1: if (pChild->GetValue(vType, floatValue)) { if (pChild->childID == 0) SendKwhMeter(pChild->nodeID, 10, pChild->batValue, 0, floatValue, (!pChild->childName.empty()) ? pChild->childName : "Imported Energy"); else SendCustomSensor(11, 11, pChild->batValue, floatValue, ("Hz") ? pChild->childName : "Line Frequency", "Hz"); } break; case V_VAR2: if (pChild->GetValue(vType, floatValue)) { if (pChild->childID == 0) SendWattMeter(cNode, 20, pChild->batValue, floatValue, (!pChild->childName.empty()) ? pChild->childName : "Real Power"); else SendWattMeter(cNode, 21, pChild->batValue, floatValue, (!pChild->childName.empty()) ? pChild->childName : "Peak VA"); } break; case V_VAR3: if (pChild->GetValue(vType, floatValue)) { if (pChild->childID == 0) SendWattMeter(cNode, 30, pChild->batValue, floatValue, (!pChild->childName.empty()) ? pChild->childName : "Apparent Power"); else SendCustomSensor(31, 31, pChild->batValue, floatValue, ("pf") ? pChild->childName : "Power Factor", " "); } break; case V_VAR4: if (pChild->GetValue(vType, floatValue)) { if (pChild->childID == 0) SendVoltageSensor(cNode, 40, pChild->batValue, floatValue, (!pChild->childName.empty()) ? pChild->childName : "Supply Voltage"); else SendKwhMeter(pChild->nodeID, 41, pChild->batValue, 0, floatValue, (!pChild->childName.empty()) ? pChild->childName : "Exported Energy"); } break; case V_VAR5: if (pChild->GetValue(vType, floatValue)) SendCurrentSensor(cNode, pChild->batValue, floatValue, 0, 0, (!pChild->childName.empty()) ? pChild->childName : "Current"); break;
Next find the section: starting: case V_VAR1: //Custom value
Change as below:case V_VAR1: //Custom value case V_VAR2: case V_VAR3: case V_VAR4: case V_VAR5: pChild->SetValue(vType, (float)atof(payload.c_str())); bHaveValue = true; break;
Find this section: case V_VAR1:
And change as belowcase V_VAR1: case V_VAR2: case V_VAR3: case V_VAR4: case V_VAR5: //send back a previous stored custom variable tmpstr = ""; GetVar(node_id, child_sensor_id, sub_type, tmpstr); SendNodeCommand(node_id, child_sensor_id, message_type, sub_type, tmpstr); break;
After making changes to the file you must run "make" again to compile domoticz binary.
It is a lot faster to "make" subsequent times.cmake -DCMAKE_BUILD_TYPE=Release -modified . make
-
RE: Nodes with S_CUSTOM Values not appearing
More reading on the Forums seems to point to a need to edit MySensorsBase.cpp
Not looking forward to that!
But if there is documentation how to customize MySensorsBase.cpp file I will have a go!Here are the relevant parts of my custom Sketch:
It is an Import/Export Utility meter.#define MY_NODE_ID 6 #define CHILD_ID_KWH 0 #define CHILD_ID_WATT 0 #define CHILD_ID_VA 0 #define CHILD_ID_VOLTAGE 0 #define CHILD_ID_CURRENT 0 #define CHILD_ID_FREQ 1 #define CHILD_ID_MAXWATT 1 #define CHILD_ID_PF 1 #define CHILD_ID_KWH_EXPORT 1 present(CHILD_ID_KWH, S_CUSTOM); present(CHILD_ID_WATT, S_CUSTOM); present(CHILD_ID_MAXWATT, S_CUSTOM); present(CHILD_ID_VA, S_CUSTOM); present(CHILD_ID_VOLTAGE, S_CUSTOM); present(CHILD_ID_CURRENT, S_CUSTOM); present(CHILD_ID_FREQ, S_CUSTOM); present(CHILD_ID_PF, S_CUSTOM); present(CHILD_ID_KWH_EXPORT, S_CUSTOM); MyMessage energyMsg(CHILD_ID_KWH, V_VAR1); MyMessage powerMsg(CHILD_ID_WATT, V_VAR2); MyMessage vaMsg(CHILD_ID_VA, V_VAR3); MyMessage voltageMsg(CHILD_ID_VOLTAGE, V_VAR4); MyMessage currentMsg(CHILD_ID_CURRENT, V_VAR5); MyMessage freqMsg(CHILD_ID_FREQ, V_VAR1); MyMessage powermaxMsg(CHILD_ID_MAXWATT, V_VAR2); MyMessage pfMsg(CHILD_ID_PF, V_VAR3); MyMessage energyexportMsg(CHILD_ID_KWH_EXPORT, V_VAR4);
Log:
2016-03-12 21:09:02.115 Domoticz V3.4944 (c)2012-2016 GizMoCuz
2016-03-12 21:09:02.116 Build Hash: 92e8ef0, Date: 2016-03-11 20:54:56
2016-03-12 21:09:02.117 Startup Path: /root/domoticz/
2016-03-12 21:09:02.158 Active notification subsystems: http (1/11)
2016-03-12 21:09:02.163 WebServer(HTTP) started on address: 0.0.0.0 with port 8080
2016-03-12 21:09:02.184 WebServer(SSL) started on address: 0.0.0.0 with port 443
2016-03-12 21:09:02.187 Proxymanager started.
2016-03-12 21:09:02.190 Starting shared server on: 0.0.0.0:6144
2016-03-12 21:09:02.193 RxQueue: queue worker started...
2016-03-12 21:09:02.194 TCPServer: shared server started...
2016-03-12 21:09:04.196 EventSystem: reset all events...
2016-03-12 21:09:04.197 EventSystem: reset all device statuses...
2016-03-12 21:09:04.199 EventSystem: Started
2016-03-12 21:09:05.199 MySensors: Using serial port: /dev/ttyUSB1
2016-03-12 21:09:06.685 MySensors: Gateway Ready...
2016-03-12 21:09:06.761 MySensors: Gateway Version: 2.0.0-beta
2016-03-12 21:09:23.957 Incoming connection from: 192.168.20.115You can see the Node and Children registering in the Domoticz:
2 MySensors Serial Gateway Yes MySensors Gateway USB
Version: 2.0.0-beta Setup /dev/ttyUSB1 5 MinutesNodes
5 Electricity Meter Unknown 1.0 2 2016-03-12 21:11:10
Children
0 S_CUSTOM true 2016-03-12 21:11:50
1 S_CUSTOM true 2016-03-12 21:11:10
Showing 1 to 2 of 2 entries
FirstPrevious1NextLast -
Nodes with S_CUSTOM Values not appearing
I have a node with S_CUSTOM V_VAR1, V_VAR2 which is not appearing in Domoticz.
Domoticz Version is 3.4944
I am compiling Serial Gateway on Development train
Sensor Node is on Development train (my sketch needs a lot of RAM).
Nodes and Children show up but not the values. -
RE: Not getting Node ID assigned
I just compiled the Gateway in the 1.4.2 Mysensors bundle. I compiled a LUX node and a Pressure node, but still no luck, I always get the nodes showing up as Node 254 and overwriting each other.
So seems my issue may not related to the Gateway Version. -
RE: Not getting Node ID assigned
Not concerned with bugs in the UV Sketch as I will make my own sketches once I get the controller to recognize the nodes.
My plan is to adapt some code to make tank level sensors and an analog (not pulse based) kWh meter. Also planning to control some pumps, so those will be outputs.
So should I use Arduino 1.4.2 for compiling code for Gateway and all the nodes, yes? -
RE: Not getting Node ID assigned
Aha! I thought it might have been a gateway issue. Yes of course I am running ver 1.5 so I will try v1.4.2 and report back how it goes!
In the meantime here are my configs.
I have loaded the UV node information into Fhem but it still will not recognize the node.Here is my Fhem config.
attr global userattr cmdIcon devStateIcon devStateStyle icon sortby webCmd widgetOverride attr global autoload_undefined_devices 1 attr global logfile ./log/fhem-%Y-%m.log attr global modpath . attr global motd SecurityCheck:\ \ WEB,WEBphone,WEBtablet has no associated allowed device with basicAuth.\ telnetPort has no associated allowed device with password/globalpassword.\ \ Restart FHEM for a new check if the problem is fixed,\ or set the global attribute motd to none to supress this message.\ attr global statefile ./log/fhem.save attr global updateInBackground 1 attr global verbose 3 define telnetPort telnet 7072 global define WEB FHEMWEB 8083 global define WEBphone FHEMWEB 8084 global attr WEBphone stylesheetPrefix smallscreen define WEBtablet FHEMWEB 8085 global attr WEBtablet stylesheetPrefix touchpad # Fake FileLog entry, to access the fhem log from FHEMWEB define Logfile FileLog ./log/fhem-%Y-%m.log fakelog define autocreate autocreate attr autocreate filelog ./log/%NAME-%Y.log define eventTypes eventTypes ./log/eventTypes.txt # Disable this to avoid looking for new USB devices on startup define initialUsbCheck notify global:INITIALIZED usb create define gateway MYSENSORS /dev/ttyUSB0@57600 attr gateway autocreate 1 attr gateway first-sensorid 10 attr gateway icon it_wireless_dcf77 attr gateway stateFormat connection define UVSensor MYSENSORS_DEVICE 10 attr UVSensor IODev gateway attr UVSensor mapReading_uv 0 uv attr UVSensor mode node attr UVSensor version 1.2
And a standard UV mysensor Arduino code (no mods).
/** * 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. * ******************************* * * REVISION HISTORY * Version 1.0 - epierre * Contribution: bulldoglowell, gizmocuz * * DESCRIPTION * Arduino UVM-30A * Index table taken from: http://www.elecrow.com/sensors-c-111/environment-c-111_112 /uv-sensor-moduleuvm30a-p-716.html * Because this table is pretty lineair, we can calculate a UVI with one decimal * * Connect sensor: * * + >>> 5V * - >>> GND * out >>> A0 * * License: Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) */ #include <SPI.h> #include <MySensor.h> #include <MySensor.h> #include <SPI.h> #define UV_SENSOR_ANALOG_PIN 0 #define CHILD_ID_UV 0 unsigned long SLEEP_TIME = 30*1000; // Sleep time between reads (in milliseconds) MySensor gw; MyMessage uvMsg(CHILD_ID_UV, V_UV); unsigned long lastSend =0; float uvIndex; float lastUV = -1; uint16_t uvIndexValue [12] = { 50, 227, 318, 408, 503, 606, 696, 795, 881, 976, 1079, 1170}; void setup() { gw.begin(); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo("UV Sensor", "1.2"); // Register all sensors to gateway (they will be created as child devices) gw.present(CHILD_ID_UV, S_UV); } void loop() { unsigned long currentTime = millis(); uint16_t uv = analogRead(UV_SENSOR_ANALOG_PIN);// Get UV value if (uv>1170) uv=1170; //Serial.print("UV Analog reading: "); //Serial.println(uv); int i; for (i = 0; i < 12; i++) { if (uv <= uvIndexValue[i]) { uvIndex = i; break; } } //calculate 1 decimal if possible if (i>0) { float vRange=uvIndexValue[i]-uvIndexValue[i-1]; float vCalc=uv-uvIndexValue[i-1]; uvIndex+=(1.0/vRange)*vCalc-1.0; } //Serial.print("UVI: "); //Serial.println(uvIndex,2); //Send value to gateway if changed, or at least every 5 minutes if ((uvIndex != lastUV)||(currentTime-lastSend >= 5UL*60UL*1000UL)) { lastSend=currentTime; gw.send(uvMsg.set(uvIndex,2)); lastUV = uvIndex; } gw.sleep(SLEEP_TIME);
}
-
RE: Not getting Node ID assigned
I will try. I did Google searches but mostly answers are in German.
-
RE: Not getting Node ID assigned
I still can't work this out. If i turn on inclusion-mode on the serial gateway I always get NODE ID 254 assigned. And if I add a second node it shares the same node id and I end up with attributes for many sensor type all in the same node. It lways gets named MYSENSOR_254. Pulling my hair out for 5 days now... can anyone help?
-
Not getting Node ID assigned
I have an 8MHz 3.3V Pro Mini Arduino with a NRF24l01 connected to a Olimex A10 (Debian Lime). I have set the Serial gateway to run at 57600 and also created a gateway in Fhem.
/dev/ttyUSB0@57600 with auotocreate set to 1 and requestAck set to 1.
I ran all the Fhem updates.
I have a simple Battery Monitor Node with no Sensor IDs just the battery level. But I cannot see the battery level in the log.
I only get this message:
2016.02.11 10:51:53 3: MYSENSORS: ignoring internal-msg from unknown radioId 254, childId 255 for I_BATTERY_LEVEL
Isn't Fhem supposed to Auto Add Nodes? What am I doing wrong?