pimatic-mysensors controller plugin
-
So, I made some modifications to the Serial Gateway sketch so it includes
radio.printDetails();I see that it is looping though the loop function, but I actually see NO ouput from this function. What does this mean? That there is actually no radio connected? Wouldn't it say something like "no radio" or so?
-
https://github.com/mysensors/Arduino/blob/f9c8579bbdeaa50a0937287d4f7c14f794460540/libraries/MySensors/drivers/RF24/RF24.cpp#L455
Do you have MY_DEBUG_VERBOSE defined? -
I use Pimatic for more than a year now and I am using the Mysensors plugin 0.8.21 for more than 4 weeks now.
I use a serial gateway based on a arduino nano and a NRF24 radio.I have already several sensors running without troubles and it appear to be stable.
What I see from your information is that the serial gateway is communicating, but seems to recieve nothing from your sensors.
If you can see on the PI that your gateway is started up, then the PI is able to recieve the information.
I debugged my serial gateway using the
serial monitor in the Arduino ide. This is also the way to test your sensors. In the serial monitor you can see if they are connecting to the gateway and sending information. -
Hi,
After using OpenHAB for quite some time, I've made the transition to Pimatic.
I've got a pro mini 3V running on 2 AA batteries with a DS18B20-temp-sensor.
I would like to be able to display the battery level but am having some trouble.
I combined the temp and battery sensor into 1, but the battery status isn't being analyzed properly.
When I restart the node it transmits a value of 12 and shortly after that a value of 0.Any ideas how to solve this?
Is this related to pimatic and the format in which it receives battery data or is it simply a fault in my code?Thanks in advance!
This is my code:
/** * 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 * * Example sketch showing how to send in DS1820B OneWire temperature readings back to the controller * http://www.mysensors.org/build/temp */ #include <MySensor.h> #include <SPI.h> #include <DallasTemperature.h> #include <OneWire.h> #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected #define MAX_ATTACHED_DS18B20 16 unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds) OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. MySensor gw; float lastTemperature[MAX_ATTACHED_DS18B20]; int numSensors=0; int node_id = 12; int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point int oldBatteryPcnt = 0; boolean receivedConfig = false; boolean metric = true; // Initialize temperature message MyMessage msg(0,V_TEMP); void setup() { // Startup up the OneWire library sensors.begin(); // requestTemperatures() will not block current thread sensors.setWaitForConversion(false); // use the 1.1 V internal reference #if defined(__AVR_ATmega2560__) analogReference(INTERNAL1V1); #else analogReference(INTERNAL); #endif // Startup and initialize MySensors library. Set callback for incoming messages. gw.begin(NULL, node_id); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo("Temperature Sensor met battery", "1.0"); // Fetch the number of attached temperature sensors numSensors = sensors.getDeviceCount(); // Present all sensors to controller for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) { gw.present(i, S_TEMP); } } void loop() { // get the battery Voltage int sensorValue = analogRead(BATTERY_SENSE_PIN); #ifdef DEBUG Serial.println(sensorValue); #endif // 1M, 470K divider across battery and using internal ADC ref of 1.1V // Sense point is bypassed with 0.1 uF cap to reduce noise at that point // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts // 3.44/1023 = Volts per bit = 0.003363075 float batteryV = sensorValue * 0.003363075; int batteryPcnt = sensorValue / 10; #ifdef DEBUG Serial.print("Battery Voltage: "); Serial.print(batteryV); Serial.println(" V"); Serial.print("Battery percent: "); Serial.print(batteryPcnt); Serial.println(" %"); #endif if (oldBatteryPcnt != batteryPcnt) { // Power up radio after sleep gw.sendBatteryLevel(batteryPcnt); oldBatteryPcnt = batteryPcnt;} // Process incoming messages (like config from server) gw.process(); // Fetch temperatures from Dallas sensors sensors.requestTemperatures(); // query conversion time and sleep until conversion completed int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution()); // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater) gw.sleep(conversionTime); // Read temperatures and send them to controller for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) { // Fetch and round temperature to one decimal float temperature = static_cast<float>(static_cast<int>((gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.; // Only send data if temperature has changed and no error #if COMPARE_TEMP == 1 if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) { #else if (temperature != -127.00 && temperature != 85.00) { #endif // Send in the new temperature gw.send(msg.setSensor(i).set(temperature,1)); // Save new temperatures for next compare lastTemperature[i]=temperature; } } gw.sleep(SLEEP_TIME); } -
Hi,
After using OpenHAB for quite some time, I've made the transition to Pimatic.
I've got a pro mini 3V running on 2 AA batteries with a DS18B20-temp-sensor.
I would like to be able to display the battery level but am having some trouble.
I combined the temp and battery sensor into 1, but the battery status isn't being analyzed properly.
When I restart the node it transmits a value of 12 and shortly after that a value of 0.Any ideas how to solve this?
Is this related to pimatic and the format in which it receives battery data or is it simply a fault in my code?Thanks in advance!
This is my code:
/** * 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 * * Example sketch showing how to send in DS1820B OneWire temperature readings back to the controller * http://www.mysensors.org/build/temp */ #include <MySensor.h> #include <SPI.h> #include <DallasTemperature.h> #include <OneWire.h> #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected #define MAX_ATTACHED_DS18B20 16 unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds) OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. MySensor gw; float lastTemperature[MAX_ATTACHED_DS18B20]; int numSensors=0; int node_id = 12; int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point int oldBatteryPcnt = 0; boolean receivedConfig = false; boolean metric = true; // Initialize temperature message MyMessage msg(0,V_TEMP); void setup() { // Startup up the OneWire library sensors.begin(); // requestTemperatures() will not block current thread sensors.setWaitForConversion(false); // use the 1.1 V internal reference #if defined(__AVR_ATmega2560__) analogReference(INTERNAL1V1); #else analogReference(INTERNAL); #endif // Startup and initialize MySensors library. Set callback for incoming messages. gw.begin(NULL, node_id); // Send the sketch version information to the gateway and Controller gw.sendSketchInfo("Temperature Sensor met battery", "1.0"); // Fetch the number of attached temperature sensors numSensors = sensors.getDeviceCount(); // Present all sensors to controller for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) { gw.present(i, S_TEMP); } } void loop() { // get the battery Voltage int sensorValue = analogRead(BATTERY_SENSE_PIN); #ifdef DEBUG Serial.println(sensorValue); #endif // 1M, 470K divider across battery and using internal ADC ref of 1.1V // Sense point is bypassed with 0.1 uF cap to reduce noise at that point // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts // 3.44/1023 = Volts per bit = 0.003363075 float batteryV = sensorValue * 0.003363075; int batteryPcnt = sensorValue / 10; #ifdef DEBUG Serial.print("Battery Voltage: "); Serial.print(batteryV); Serial.println(" V"); Serial.print("Battery percent: "); Serial.print(batteryPcnt); Serial.println(" %"); #endif if (oldBatteryPcnt != batteryPcnt) { // Power up radio after sleep gw.sendBatteryLevel(batteryPcnt); oldBatteryPcnt = batteryPcnt;} // Process incoming messages (like config from server) gw.process(); // Fetch temperatures from Dallas sensors sensors.requestTemperatures(); // query conversion time and sleep until conversion completed int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution()); // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater) gw.sleep(conversionTime); // Read temperatures and send them to controller for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) { // Fetch and round temperature to one decimal float temperature = static_cast<float>(static_cast<int>((gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.; // Only send data if temperature has changed and no error #if COMPARE_TEMP == 1 if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) { #else if (temperature != -127.00 && temperature != 85.00) { #endif // Send in the new temperature gw.send(msg.setSensor(i).set(temperature,1)); // Save new temperatures for next compare lastTemperature[i]=temperature; } } gw.sleep(SLEEP_TIME); }@BastienVH . check few things first.
- hardware wiring is correct and as per mysensor guide.
- what debug value "sensorValue" you are seeing on serial console if you debug your sensor node.
- check the debug log in pimatic
-
@BastienVH . check few things first.
- hardware wiring is correct and as per mysensor guide.
- what debug value "sensorValue" you are seeing on serial console if you debug your sensor node.
- check the debug log in pimatic
@Dheeraj
I feel so stupid now... I built this circuit on a breadboard and after fiddling around with it yesterday, I forgot to place the resistor for the battery in the right pin. It was now on a different row.
Saw it and fixed it. Now I get a battery percentage in Pimatic!Thanks for your help!
-
Good point. I had not, now I have. But still, there is absolutely 0 output from this. The only message I see is the "Gateway startup complete" stuff.
@karl261 Do you have any news ?
Which raspberry pi are you using ? PI 2 ?I experienced the same issue with domoticz on raspberry pi2 + serial gateway with RFM69 radio.
I really don't think that the issue is the controller. It seems that the radio is stuck cause when I debug my node after reset, all outgoing messages are marked with st=fail meaning that radios can't reach each other.
I don't know if it's my chinese arduino nano or raspberry pi 2 usb power or my radio module.
Investigation in progress. Something a reboot is not enough, I have to disconnect usb cable in order to make it work again. -
@fets Yes, indeed, I made some progress during the last weeks. Today I finally found a way to display these debug messages. Took me months. See this thread: http://forum.mysensors.org/topic/2392/how-to-properly-debug-serial-gateway-nrf24l01
I think my serial gateway was somehow badly connected. During the past weeks I verified everything, re-soldered, tested various power supplies and radio modules, etc. Now it seems to work usually stable. But not always. Now I am playing around with increasing the sending power of the radio modules.I am using a pi 2.
Interesting, your problem sounds very similar. Unfortunately I do not really have any advice. Maybe try to build a duplicate and see if this works better?
-
@fets Yes, indeed, I made some progress during the last weeks. Today I finally found a way to display these debug messages. Took me months. See this thread: http://forum.mysensors.org/topic/2392/how-to-properly-debug-serial-gateway-nrf24l01
I think my serial gateway was somehow badly connected. During the past weeks I verified everything, re-soldered, tested various power supplies and radio modules, etc. Now it seems to work usually stable. But not always. Now I am playing around with increasing the sending power of the radio modules.I am using a pi 2.
Interesting, your problem sounds very similar. Unfortunately I do not really have any advice. Maybe try to build a duplicate and see if this works better?
-
Hi everyone,
I installed Pimatic and it looks work just fine.
In the Config menu I added the codes below.
Saved and restarted the Pimatic.
I see "Light Unknown%" on the frontpage.
How can I fix that? Thanks....{ "plugin": "mysensors", "driver": "serialport", "protocols": "1.5.1", "startingNodeId": 1, "driverOptions": { "//": "'/dev/ttyUSB0' if using serial Gateway", "serialDevice": "/dev/ttyMySensorsGateway", "baudrate": 115200 } }],
"devices": [
{
"id": "Light",
"name": "Light",
"class": "MySensorsLight",
"nodeid": 15,
"batterySensor": false,
"sensorid": 2
}
], -
Hi everyone,
I installed Pimatic and it looks work just fine.
In the Config menu I added the codes below.
Saved and restarted the Pimatic.
I see "Light Unknown%" on the frontpage.
How can I fix that? Thanks....{ "plugin": "mysensors", "driver": "serialport", "protocols": "1.5.1", "startingNodeId": 1, "driverOptions": { "//": "'/dev/ttyUSB0' if using serial Gateway", "serialDevice": "/dev/ttyMySensorsGateway", "baudrate": 115200 } }],
"devices": [
{
"id": "Light",
"name": "Light",
"class": "MySensorsLight",
"nodeid": 15,
"batterySensor": false,
"sensorid": 2
}
],@fahrettine How does your sketch look? Does pimatic receive anything in de log?
-
Hi,
Thanks for the answer.
1-I installed Pimatic.
2-I installed Serial Gateway on the Arduino Nano.
3-I installed the Light sketch from MySensors on the Nano.Pimatic logs look like below. It seems it doesnt receive any signal.
I think there is someting wrong with the USB port...
Are my USB port settings coreect?
You can see MySensors plugin settings above.2016-04-05 19:23:46info [pimatic]: Listening for HTTP-request on port 80...
19:23:46info [pimatic-mobile-frontend]: rendering html finished
19:23:20info [pimatic-mobile-frontend]: rendering html
19:23:20info [pimatic-mobile-frontend]: packing static assets finished
19:23:18info [pimatic-mobile-frontend]: packing static assets
19:23:18info [pimatic]: New device "Light"...
19:23:08info [pimatic-cron]: the time is: Tue Apr 05 2016 14:23:08 GMT-0200 (GMT+2)
19:23:08info [pimatic]: Loading plugin: "pimatic-mysensors" (0.8.25)
19:23:02info [pimatic]: Loading plugin: "pimatic-mobile-frontend" (0.8.82)
19:22:59 -
@fahrettine said:
{ "plugin": "mysensors", "driver": "serialport", "protocols": "1.5.1", "startingNodeId": 1, "driverOptions": { "//": "'/dev/ttyUSB0' if using serial Gateway", "serialDevice": "/dev/ttyMySensorsGateway", "baudrate": 115200 } }You may want to double check that config.
It should be more like:{ "plugin": "mysensors", "driver": "serialport", "protocols": "1.5.1", "startingNodeId": 1, "driverOptions": { "serialDevice": "/dev/ttyUSB0", "baudrate": 115200 } }if, ttyUSB0 is your connected arduino nano.
-
I plugged the controller and light sensor on my pc.
The controller receives and the sensor transmits signals.
So, the hardware is OK.
I changed the USB setting as "serialDevice": "/dev/ttyUSB0"
But still no signal.
Because I am new on RPi I cant set the USB corectly.
My USB settings (lsusb -t) are like below:
What is my USB port? USB0 or USB1 or other else?pi@raspberrypi:~ $ lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
|__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
|__ Port 2: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 2: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 3: Dev 5, If 0, Class=Vendor Specific Class, Driver=rtl8192cu, 480M
|__ Port 5: Dev 7, If 0, Class=Vendor Specific Class, Driver=ch341, 12M -
@fahrettine said:
What is my USB port? USB0 or USB1 or other else?
dmesg | grep ttyWill give you an output like:
ch341-uart converter now attached to ttyUSBXX -
Oitzu thank you very much.
I solved the problem.
It was the nodeID. I set the nodeID to on the sketch to 15 and the problem solved.
Thanks for your help... -
Hi everyone,
I installed Pimatic. It works fine...
I installed light sensor code from MySensor: http://www.mysensors.org/build/light
Light sensor works fine...
After that I intalled the Relay code: http://www.mysensors.org/build/relay
The relay doesnt work!!! Any idea for the problem???
When I turn the buton On/Off I can see the sending messages on debug.
Thanks!!!
Below are my Pimatic Config codes and debug messages:{ "id": "Switch", "name": "Switch", "class": "MySensorsSwitch", "nodeid": 10, "sensorid": 1 }
debug [pimatic-mysensors]: -> Sending 10;1;1;1;2;1
21:21:09debug [pimatic-mysensors]: -> Sending 10;1;1;1;2;0
21:21:01debug [pimatic-mysensors]: -> Sending 10;1;1;1;2;1
21:20:56debug [pimatic-mysensors]: -> Sending 10;1;1;1;2;0
21:20:26info [pimatic]: Listening for HTTP-request on port 80...
21:20:26info [pimatic-mobile-frontend]: rendering html finished -
Hi everyone,
I installed Pimatic. It works fine...
I installed light sensor code from MySensor: http://www.mysensors.org/build/light
Light sensor works fine...
After that I intalled the Relay code: http://www.mysensors.org/build/relay
The relay doesnt work!!! Any idea for the problem???
When I turn the buton On/Off I can see the sending messages on debug.
Thanks!!!
Below are my Pimatic Config codes and debug messages:{ "id": "Switch", "name": "Switch", "class": "MySensorsSwitch", "nodeid": 10, "sensorid": 1 }
debug [pimatic-mysensors]: -> Sending 10;1;1;1;2;1
21:21:09debug [pimatic-mysensors]: -> Sending 10;1;1;1;2;0
21:21:01debug [pimatic-mysensors]: -> Sending 10;1;1;1;2;1
21:20:56debug [pimatic-mysensors]: -> Sending 10;1;1;1;2;0
21:20:26info [pimatic]: Listening for HTTP-request on port 80...
21:20:26info [pimatic-mobile-frontend]: rendering html finished@fahrettine said:
check whether you received any message ( serialport output ) on relay sensor node.
-
I've seen the "protocol" line. Is it suitable for 2.0.0beta sketches ?