Navigation

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

    Best posts made by kk02067

    • RE: [Solved] Node not reconnecting

      I have now implemented the changes discussed here. It now seems to work flawlessly. I tested the node to see its behaviour when i powered down the gateway. As it said in the thread the node tried to reconnect after a couple of failed transmissions. And when I powered up the gateway again the node reconnected and started to go to sleep again.

      Thanks for the help on this.

      A Quick question a bit of topic Before I go build new nodes. If I want to run the cpu at only 1 MHz, do I have to do something else other then define the cpu frequency in the sketch? Is it possible to set the cpuclk prescaler at runtime?

      posted in Troubleshooting
      kk02067
      kk02067
    • RE: [Solved] MySensors 2.0 Ethernet gateway (ENC28J60) restart / IP issue

      @tekka Updated arduino to latest version 1.6.11 and downgraded to boarddefs 1.6.11 and now it seems fixed, at least with softspi for the radio.
      I have to try it with hwspi some other day. Have to stop for today.

      The version of arduino 1.6.9 would not let me downgrade to boarddefs 1.6.11, thats why it did not work when I tryed it before.

      Thanks for all your help.

      posted in Troubleshooting
      kk02067
      kk02067
    • RE: Last seen?

      @AWI

      Thanks for your reply and tips to a beginner.

      I experimented with a couple of things in the sketch and after a little digging I seem to have got it working.

      The problem seem to be that if the values sent to the gateway is not in the correct format it wont work. If I send just one value in integer it works. But if I send alla three values as integer it stops working. If I send all three as "double" with two decimals it works as it should.

      The sketch when it functions as it should:

      /******************************************************************************
      I2C_ReadAllData.ino
      BME280 Arduino and Teensy example
      Marshall Taylor @ SparkFun Electronics
      May 20, 2015
      https://github.com/sparkfun/SparkFun_BME280_Arduino_Library
      
      This sketch configures the BME280 to read all measurements.  The sketch also
      displays the BME280's physical memory and what the driver perceives the
      calibration words to be.
      
      Resources:
      Uses Wire.h for I2C operation
      Uses SPI.h for SPI operation
      
      Development environment specifics:
      Arduino IDE 1.6.4
      Teensy loader 1.23
      
      This code is released under the [MIT License](http://opensource.org/licenses/MIT).
      Please review the LICENSE.md file included with this example. If you have any questions 
      or concerns with licensing, please contact techsupport@sparkfun.com.
      Distributed as-is; no warranty is given.
      ******************************************************************************/
      
      #include <stdint.h>
      #include "SparkFunBME280.h"
      //Library allows either I2C or SPI, so include both.
      #include "Wire.h"
      #include "SPI.h"
      
      #define MY_DEBUG 
      #define MY_RADIO_NRF24
      #include <MySensors.h>
      
      #define SKETCH_NAME "Environment Sensor"
      #define SKETCH_MAJOR_VER "1"
      #define SKETCH_MINOR_VER "0"
      #define CHILD_ID_1 1
      #define CHILD_ID_2 2
      #define CHILD_ID_3 3
      
      
      //Global sensor object
      BME280 Sensor;
      
      
      MyMessage msg1(CHILD_ID_1, V_TEMP);
      MyMessage msg2(CHILD_ID_2, V_HUM);
      MyMessage msg3(CHILD_ID_3, V_PRESSURE);
      
      
      void setup()
      {
      	//***Driver settings********************************//
      	//commInterface can be I2C_MODE or SPI_MODE
      	//specify chipSelectPin using arduino pin names
      	//specify I2C address.  Can be 0x77(default) or 0x76
      	
      	//For I2C, enable the following and disable the SPI section
      	Sensor.settings.commInterface = I2C_MODE;
      	Sensor.settings.I2CAddress = 0x77;
      	
      	//For SPI enable the following and dissable the I2C section
      	//Sensor.settings.commInterface = SPI_MODE;
      	//Sensor.settings.chipSelectPin = 10;
      
      
      	//***Operation settings*****************************//
      	
      	//renMode can be:
      	//  0, Sleep mode
      	//  1 or 2, Forced mode
      	//  3, Normal mode
      	Sensor.settings.runMode = 3; //Normal mode
      	
      	//tStandby can be:
      	//  0, 0.5ms
      	//  1, 62.5ms
      	//  2, 125ms
      	//  3, 250ms
      	//  4, 500ms
      	//  5, 1000ms
      	//  6, 10ms
      	//  7, 20ms
      	Sensor.settings.tStandby = 5;
      	
      	//filter can be off or number of FIR coefficients to use:
      	//  0, filter off
      	//  1, coefficients = 2
      	//  2, coefficients = 4
      	//  3, coefficients = 8
      	//  4, coefficients = 16
      	Sensor.settings.filter = 0;
      	
      	//tempOverSample can be:
      	//  0, skipped
      	//  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
      	Sensor.settings.tempOverSample = 1;
      
      	//pressOverSample can be:
      	//  0, skipped
      	//  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
          Sensor.settings.pressOverSample = 1;
      	
      	//humidOverSample can be:
      	//  0, skipped
      	//  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
      	Sensor.settings.humidOverSample = 1;
      	
      //	Serial.begin(57600);
      	Serial.print("Program Started\n");
      	Serial.print("Starting BME280... result of .begin(): 0x");
      	
      	//Calling .begin() causes the settings to be loaded
      	delay(10);  //Make sure sensor had enough time to turn on. BME280 requires 2ms to start up.
      	Serial.println(Sensor.begin(), HEX);
      
      	Serial.print("Displaying ID, reset and ctrl regs\n");
      	
      	Serial.print("ID(0xD0): 0x");
      	Serial.println(Sensor.readRegister(BME280_CHIP_ID_REG), HEX);
      	Serial.print("Reset register(0xE0): 0x");
      	Serial.println(Sensor.readRegister(BME280_RST_REG), HEX);
      	Serial.print("ctrl_meas(0xF4): 0x");
      	Serial.println(Sensor.readRegister(BME280_CTRL_MEAS_REG), HEX);
      	Serial.print("ctrl_hum(0xF2): 0x");
      	Serial.println(Sensor.readRegister(BME280_CTRL_HUMIDITY_REG), HEX);
      
      	Serial.print("\n\n");
      
      	Serial.print("Displaying all regs\n");
      	uint8_t memCounter = 0x80;
      	uint8_t tempReadData;
      	for(int rowi = 8; rowi < 16; rowi++ )
      	{
      		Serial.print("0x");
      		Serial.print(rowi, HEX);
      		Serial.print("0:");
      		for(int coli = 0; coli < 16; coli++ )
      		{
      			tempReadData = Sensor.readRegister(memCounter);
      			Serial.print((tempReadData >> 4) & 0x0F, HEX);//Print first hex nibble
      			Serial.print(tempReadData & 0x0F, HEX);//Print second hex nibble
      			Serial.print(" ");
      			memCounter++;
      		}
      		Serial.print("\n");
      	}
      	
      	
      	Serial.print("\n\n");
      	
      	Serial.print("Displaying concatenated calibration words\n");
      	Serial.print("dig_T1, uint16: ");
      	Serial.println(Sensor.calibration.dig_T1);
      	Serial.print("dig_T2, int16: ");
      	Serial.println(Sensor.calibration.dig_T2);
      	Serial.print("dig_T3, int16: ");
      	Serial.println(Sensor.calibration.dig_T3);
      	
      	Serial.print("dig_P1, uint16: ");
      	Serial.println(Sensor.calibration.dig_P1);
      	Serial.print("dig_P2, int16: ");
      	Serial.println(Sensor.calibration.dig_P2);
      	Serial.print("dig_P3, int16: ");
      	Serial.println(Sensor.calibration.dig_P3);
      	Serial.print("dig_P4, int16: ");
      	Serial.println(Sensor.calibration.dig_P4);
      	Serial.print("dig_P5, int16: ");
      	Serial.println(Sensor.calibration.dig_P5);
      	Serial.print("dig_P6, int16: ");
      	Serial.println(Sensor.calibration.dig_P6);
      	Serial.print("dig_P7, int16: ");
      	Serial.println(Sensor.calibration.dig_P7);
      	Serial.print("dig_P8, int16: ");
      	Serial.println(Sensor.calibration.dig_P8);
      	Serial.print("dig_P9, int16: ");
      	Serial.println(Sensor.calibration.dig_P9);
      	
      	Serial.print("dig_H1, uint8: ");
      	Serial.println(Sensor.calibration.dig_H1);
      	Serial.print("dig_H2, int16: ");
      	Serial.println(Sensor.calibration.dig_H2);
      	Serial.print("dig_H3, uint8: ");
      	Serial.println(Sensor.calibration.dig_H3);
      	Serial.print("dig_H4, int16: ");
      	Serial.println(Sensor.calibration.dig_H4);
      	Serial.print("dig_H5, int16: ");
      	Serial.println(Sensor.calibration.dig_H5);
      	Serial.print("dig_H6, uint8: ");
      	Serial.println(Sensor.calibration.dig_H6);
      		
      	Serial.println();
      }
      
      void presentation() {
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo(SKETCH_NAME, SKETCH_MAJOR_VER "." SKETCH_MINOR_VER);
      
        // Register binary input sensor to sensor_node (they will be created as child devices)
        // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. 
        // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
        present(CHILD_ID_1, S_TEMP);  
        present(CHILD_ID_2, S_HUM);  
        present(CHILD_ID_3, S_BARO);  
      
      }
      
      void loop()
      {
      	//Each loop, take a reading.
      	//Start with temperature, as that data is needed for accurate compensation.
      	//Reading the temperature updates the compensators of the other functions
      	//in the background.
      
      /*	Serial.print("Temperature: ");
      	Serial.print(Sensor.readTempC(), 2);
      	Serial.println(" degrees C");
      
      	Serial.print("Temperature: ");
      	Serial.print(Sensor.readTempF(), 2);
      	Serial.println(" degrees F");
      
      	Serial.print("Pressure: ");
      	Serial.print(Sensor.readFloatPressure(), 2);
      	Serial.println(" Pa");
      
      	Serial.print("Altitude: ");
      	Serial.print(Sensor.readFloatAltitudeMeters(), 2);
      	Serial.println("m");
      
      	Serial.print("Altitude: ");
      	Serial.print(Sensor.readFloatAltitudeFeet(), 2);
      	Serial.println("ft");	
      
      	Serial.print("%RH: ");
      	Serial.print(Sensor.readFloatHumidity(), 2);
      	Serial.println(" %");
      	
      	Serial.println();
      	
      	delay(1000);
      */
      
              double  temperature;
              double  humidity;
              double  pressure;
              
              temperature=Sensor.readTempC();
              humidity=Sensor.readFloatHumidity();
              pressure=Sensor.readFloatPressure()/100;
      
      
             send(msg1.set(temperature,2));
      
             send(msg2.set(humidity,2));
      
             Serial.print(humidity, 2);
      
             send(msg3.set(pressure,2));
           
           sleep(10000);
      
      }```
      posted in Domoticz
      kk02067
      kk02067
    • [Solved] Node not reconnecting

      I have a node that is causing problems for me. When I have the node and the gateway in the same room all works fine. But when I move them apart the node stops sending the messages after a random couple of hours. This I think is because of the range. But if I move the node closer to the gatway again it doesn't reconnect. And the debug from the node outputs:

      !TSP:SEND:TNR
      !TSP:SEND:TNR
      !TSP:SEND:TNR
      RF24:write register, reg=0, value=12
      RF24:power down
      

      and repeats until I reset the node.

      It seems that my auto reset of the nod fails also.

      The sketch looks like this:

      #include <SoftReset.h>
      
      /******************************************************************************
      I2C_ReadAllData.ino
      BME280 Arduino and Teensy example
      Marshall Taylor @ SparkFun Electronics
      May 20, 2015
      https://github.com/sparkfun/SparkFun_BME280_Arduino_Library
      
      This sketch configures the BME280 to read all measurements.  The sketch also
      displays the BME280's physical memory and what the driver perceives the
      calibration words to be.
      
      Resources:
      Uses Wire.h for I2C operation
      Uses SPI.h for SPI operation
      
      Development environment specifics:
      Arduino IDE 1.6.4
      Teensy loader 1.23
      
      This code is released under the [MIT License](http://opensource.org/licenses/MIT).
      Please review the LICENSE.md file included with this example. If you have any questions 
      or concerns with licensing, please contact techsupport@sparkfun.com.
      Distributed as-is; no warranty is given.
      ******************************************************************************/
      
      #include <stdint.h>
      #include "SparkFunBME280.h"
      //Library allows either I2C or SPI, so include both.
      #include "Wire.h"
      #include "SPI.h"
      
      #define MY_DEBUG
      #define MY_DEBUG_VERBOSE_RF24
      #define MY_RADIO_NRF24
      #include <MySensors.h>
      
      #define SKETCH_NAME "Min väderstation"
      #define SKETCH_MAJOR_VER "1"
      #define SKETCH_MINOR_VER "1"
      #define CHILD_ID_1 1
      #define CHILD_ID_2 2
      #define CHILD_ID_3 3
      
      
      //Global sensor object
      BME280 Sensor;
      
      
      MyMessage msg1(CHILD_ID_1, V_TEMP);
      MyMessage msg2(CHILD_ID_2, V_HUM);
      MyMessage msg3(CHILD_ID_3, V_PRESSURE);
      
      
      void setup()
      {
      	//***Driver settings********************************//
      	//commInterface can be I2C_MODE or SPI_MODE
      	//specify chipSelectPin using arduino pin names
      	//specify I2C address.  Can be 0x77(default) or 0x76
      	
      	//For I2C, enable the following and disable the SPI section
      	Sensor.settings.commInterface = I2C_MODE;
      	Sensor.settings.I2CAddress = 0x76;
      	
      	//For SPI enable the following and dissable the I2C section
      	//Sensor.settings.commInterface = SPI_MODE;
      	//Sensor.settings.chipSelectPin = 10;
      
      
      	//***Operation settings*****************************//
      	
      	//renMode can be:
      	//  0, Sleep mode
      	//  1 or 2, Forced mode
      	//  3, Normal mode
      	Sensor.settings.runMode = 3; //Normal mode
      	
      	//tStandby can be:
      	//  0, 0.5ms
      	//  1, 62.5ms
      	//  2, 125ms
      	//  3, 250ms
      	//  4, 500ms
      	//  5, 1000ms
      	//  6, 10ms
      	//  7, 20ms
      	Sensor.settings.tStandby = 5;
      	
      	//filter can be off or number of FIR coefficients to use:
      	//  0, filter off
      	//  1, coefficients = 2
      	//  2, coefficients = 4
      	//  3, coefficients = 8
      	//  4, coefficients = 16
      	Sensor.settings.filter = 0;
      	
      	//tempOverSample can be:
      	//  0, skipped
      	//  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
      	Sensor.settings.tempOverSample = 1;
      
      	//pressOverSample can be:
      	//  0, skipped
      	//  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
          Sensor.settings.pressOverSample = 1;
      	
      	//humidOverSample can be:
      	//  0, skipped
      	//  1 through 5, oversampling *1, *2, *4, *8, *16 respectively
      	Sensor.settings.humidOverSample = 1;
      	
      //	Serial.begin(57600);
      	Serial.print("Program Started\n");
      	Serial.print("Starting BME280... result of .begin(): 0x");
      	
      	//Calling .begin() causes the settings to be loaded
      	delay(10);  //Make sure sensor had enough time to turn on. BME280 requires 2ms to start up.
      	Serial.println(Sensor.begin(), HEX);
      
      	Serial.print("Displaying ID, reset and ctrl regs\n");
      	
      	Serial.print("ID(0xD0): 0x");
      	Serial.println(Sensor.readRegister(BME280_CHIP_ID_REG), HEX);
      	Serial.print("Reset register(0xE0): 0x");
      	Serial.println(Sensor.readRegister(BME280_RST_REG), HEX);
      	Serial.print("ctrl_meas(0xF4): 0x");
      	Serial.println(Sensor.readRegister(BME280_CTRL_MEAS_REG), HEX);
      	Serial.print("ctrl_hum(0xF2): 0x");
      	Serial.println(Sensor.readRegister(BME280_CTRL_HUMIDITY_REG), HEX);
      
      	Serial.print("\n\n");
      
      	Serial.print("Displaying all regs\n");
      	uint8_t memCounter = 0x80;
      	uint8_t tempReadData;
      	for(int rowi = 8; rowi < 16; rowi++ )
      	{
      		Serial.print("0x");
      		Serial.print(rowi, HEX);
      		Serial.print("0:");
      		for(int coli = 0; coli < 16; coli++ )
      		{
      			tempReadData = Sensor.readRegister(memCounter);
      			Serial.print((tempReadData >> 4) & 0x0F, HEX);//Print first hex nibble
      			Serial.print(tempReadData & 0x0F, HEX);//Print second hex nibble
      			Serial.print(" ");
      			memCounter++;
      		}
      		Serial.print("\n");
      	}
      	
      	
      	Serial.print("\n\n");
      	
      	Serial.print("Displaying concatenated calibration words\n");
      	Serial.print("dig_T1, uint16: ");
      	Serial.println(Sensor.calibration.dig_T1);
      	Serial.print("dig_T2, int16: ");
      	Serial.println(Sensor.calibration.dig_T2);
      	Serial.print("dig_T3, int16: ");
      	Serial.println(Sensor.calibration.dig_T3);
      	
      	Serial.print("dig_P1, uint16: ");
      	Serial.println(Sensor.calibration.dig_P1);
      	Serial.print("dig_P2, int16: ");
      	Serial.println(Sensor.calibration.dig_P2);
      	Serial.print("dig_P3, int16: ");
      	Serial.println(Sensor.calibration.dig_P3);
      	Serial.print("dig_P4, int16: ");
      	Serial.println(Sensor.calibration.dig_P4);
      	Serial.print("dig_P5, int16: ");
      	Serial.println(Sensor.calibration.dig_P5);
      	Serial.print("dig_P6, int16: ");
      	Serial.println(Sensor.calibration.dig_P6);
      	Serial.print("dig_P7, int16: ");
      	Serial.println(Sensor.calibration.dig_P7);
      	Serial.print("dig_P8, int16: ");
      	Serial.println(Sensor.calibration.dig_P8);
      	Serial.print("dig_P9, int16: ");
      	Serial.println(Sensor.calibration.dig_P9);
      	
      	Serial.print("dig_H1, uint8: ");
      	Serial.println(Sensor.calibration.dig_H1);
      	Serial.print("dig_H2, int16: ");
      	Serial.println(Sensor.calibration.dig_H2);
      	Serial.print("dig_H3, uint8: ");
      	Serial.println(Sensor.calibration.dig_H3);
      	Serial.print("dig_H4, int16: ");
      	Serial.println(Sensor.calibration.dig_H4);
      	Serial.print("dig_H5, int16: ");
      	Serial.println(Sensor.calibration.dig_H5);
      	Serial.print("dig_H6, uint8: ");
      	Serial.println(Sensor.calibration.dig_H6);
      		
      	Serial.println();
      
              pinMode(8,OUTPUT);  //pin8 as output for battcheck
              digitalWrite(8,LOW); //see to that pin is low to save power
              analogReference(INTERNAL);  //internal 1.1V reference for battcheck
      
              
      }
      
      void presentation() {
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo(SKETCH_NAME, SKETCH_MAJOR_VER "." SKETCH_MINOR_VER);
      
        // Register binary input sensor to sensor_node (they will be created as child devices)
        // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. 
        // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
        present(CHILD_ID_1, S_TEMP);  
        present(CHILD_ID_2, S_HUM);  
        present(CHILD_ID_3, S_BARO);  
      
      }
      
      
      
              double  temperature;
              double  humidity;
              double  pressure;
              double  oldtemperature;
              double  oldhumidity;
              double  oldpressure;
              unsigned char fail;
      
      
      void loop()
      {
      	//Each loop, take a reading.
      	//Start with temperature, as that data is needed for accurate compensation.
      	//Reading the temperature updates the compensators of the other functions
      	//in the background.
      
      /*	Serial.print("Temperature: ");
      	Serial.print(Sensor.readTempC(), 2);
      	Serial.println(" degrees C");
      
      	Serial.print("Temperature: ");
      	Serial.print(Sensor.readTempF(), 2);
      	Serial.println(" degrees F");
      
      	Serial.print("Pressure: ");
      	Serial.print(Sensor.readFloatPressure(), 2);
      	Serial.println(" Pa");
      
      	Serial.print("Altitude: ");
      	Serial.print(Sensor.readFloatAltitudeMeters(), 2);
      	Serial.println("m");
      
      	Serial.print("Altitude: ");
      	Serial.print(Sensor.readFloatAltitudeFeet(), 2);
      	Serial.println("ft");	
      
      	Serial.print("%RH: ");
      	Serial.print(Sensor.readFloatHumidity(), 2);
      	Serial.println(" %");
      	
      	Serial.println();
      	
      	delay(1000);
      */
      
              float  batt;
      
      
              digitalWrite(8,HIGH);
              delay(10);
             	
              batt=analogRead(0);
              batt=batt-900;
              batt=batt/1.23;
             
             
              Serial.print("Batt%: ");
             	Serial.print(batt);
             digitalWrite(8,LOW);
             
              sendBatteryLevel(batt);
             
              temperature=Sensor.readTempC();
              humidity=Sensor.readFloatHumidity();
              pressure=Sensor.readFloatPressure()/100;
      
              if(temperature != oldtemperature){
              
              if(!send(msg1.set(temperature,2))){fail++;};
              oldtemperature=temperature;
              
              }
      
              if(humidity != oldhumidity){
      
              if(!send(msg2.set(humidity,2))){fail++;};
              oldhumidity=humidity;
      
              }
      
              if(pressure != oldpressure){
      
              if(!send(msg3.set(pressure,2))){fail++;};
              oldpressure=pressure;
              }
           
              if (fail>6){fail=0; Serial.print("Transmit error, Reseting!");soft_restart();}
      
              fail=0;
      
           sleep(30000);
      

      What does the message:

      !TSP:SEND:TNR

      mean and how do I handle it?

      posted in Troubleshooting
      kk02067
      kk02067
    • RE: Error sending switch command, check device/hardware !

      @mfalkvidd After Little more investigating and experimenting I am pretty sure I have found a bug in the library. I found that when debug is active all is working as expected. But if I commented out debug it starts to not work. I tried it about 10 times, once with debug and then without. And everytime debug is active it works, no debug it fails.
      I opened the transport sourcefile and added a delay(100) at the procedure where the debug message is sent. With that change it works everytime with or without debug. It seems that if the ackmessage is sent to quick it gets missed by the gateway. Any thoughts on this?

      posted in Domoticz
      kk02067
      kk02067
    • RE: [Solved] Node not reconnecting

      I'm having trouble to log the node since it is in a remote place when it stops working.

      Can you please explain a little more what you mean with "send the node to sleep before the communication is fully re-established"?

      I'm a bit lost in all this it seems. I must have missed someting when reading about sending new values to the controller. But I thought that when the "send()" is executed the program is waiting here until Everything is finished for that transmission and we can move on to the transmission.

      Is there something I must do before sending the cpu to sleep?

      Sorry for my slow understanding.

      posted in Troubleshooting
      kk02067
      kk02067
    • RE: Error sending switch command, check device/hardware !

      @novicit If I remember correctly i put it here: https://github.com/mysensors/MySensors/blob/master/core/MyTransport.cpp#L463
      just to test that it worked. Then I removed the change to keep the library source original.

      I turned on debug again to get it working again.. The reason why I wanted to have debuging disabled was to keep the hexfile size down so the OTA update wouldn't take so long time. I hope this issue will be fixed in a more elegant manner in a future release.

      posted in Domoticz
      kk02067
      kk02067
    • RE: Placing strings in flash

      @AWI thanks for clarifying. I will read up on the subject. Strings i C is not my favourite subject.

      posted in Troubleshooting
      kk02067
      kk02067