Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Bug Reports
  3. Possible CryptoHAL bug.

Possible CryptoHAL bug.

Scheduled Pinned Locked Moved Bug Reports
5 Posts 3 Posters 504 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G Offline
    G Offline
    Gerator
    wrote on last edited by Gerator
    #1

    I have updated my temperature sensor sketch to MySensors 2.3.1. It's a Nodemanager Sketch and looks as follows:

    /*
    * 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-2017 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.
    */
    
    /**************************
    Template
    
    This sketch can be used as a template since containing the most relevant MySensors library configuration settings, 
    NodeManager's settings, all its the supported sensors commented out and a sketch structure fully functional to operate with
    NodeManager. Just uncomment the settings you need and the sensors you want to add and configure the sensors in before()
    */
    
    /**********************************
     * MySensors node configuration
     */
    
    // General settings
    #define SKETCH_NAME "SBM TempHum"
    #define SKETCH_VERSION "1.0"
    #define MY_NODE_ID 10
    
    // RFM69 radio settings
    #define MY_RADIO_RFM69
    #define MY_RFM69_FREQUENCY RFM69_433MHZ
    #define MY_IS_RFM69HW
    //#define MY_RFM69_NEW_DRIVER
    //#define MY_RFM69_ENABLE_ENCRYPTION
    #define MY_RFM69_NETWORKID 99
    //#define MY_DEBUG_VERBOSE_RFM69
    //#define MY_RF69_IRQ_PIN D1
    //#define MY_RF69_IRQ_NUM MY_RF69_IRQ_PIN
    //#define MY_RF69_SPI_CS D2
    //#define MY_RFM69_ATC_MODE_DISABLED
    
    // Message signing settings
    //#define MY_SIGNING_SOFT
    //#define MY_SIGNING_SOFT_RANDOMSEED_PIN 7
    //#define MY_SIGNING_REQUEST_SIGNATURES
    #define MY_SIGNING_ATSHA204
    //#define MY_SIGNING_ATSHA204_PIN 4
    #define MY_SIGNING_REQUEST_SIGNATURES
    
    // OTA Firmware update settings
    #define MY_OTA_FIRMWARE_FEATURE
    #define OTA_WAIT_PERIOD 300
    #define FIRMWARE_MAX_REQUESTS 2
    #define MY_OTA_RETRY 2
    
    // OTA debug output
    //#define MY_DEBUG_OTA (0)
    //#define MY_OTA_LOG_SENDER_FEATURE
    //#define MY_OTA_LOG_RECEIVER_FEATURE
    //#define MY_DEBUG_OTA_DISABLE_ACK
    
    // Advanced settings
    #define MY_BAUD_RATE 115200
    //#define MY_SMART_SLEEP_WAIT_DURATION_MS 500
    #define MY_SPLASH_SCREEN_DISABLED
    //#define MY_DISABLE_RAM_ROUTING_TABLE_FEATURE
    //#define MY_SIGNAL_REPORT_ENABLED
    
    // Optimizations when running on 2032 Coin Cell. Also set nodeManager.setSleepBetweenSend(500) and run the board at 1Mhz
    #define MY_TRANSPORT_UPLINK_CHECK_DISABLED
    #define MY_TRANSPORT_WAIT_READY_MS  5000
    #define MY_SLEEP_TRANSPORT_RECONNECT_TIMEOUT_MS 2000
    #define MY_PARENT_NODE_ID 0
    #define MY_PARENT_NODE_IS_STATIC
    
    /***********************************
     * NodeManager configuration
     */
    
    #define NODEMANAGER_DEBUG ON
    #define NODEMANAGER_SLEEP ON
    #define NODEMANAGER_CONDITIONAL_REPORT ON
    #define NODEMANAGER_OTA_CONFIGURATION OFF
    
    
    // import NodeManager library (a nodeManager object will be then made available)
    #include <MySensors_NodeManager.h>
    
    /***********************************
     * Add your sensors
     */
     
    #include <sensors/SensorBattery.h>
    SensorBattery battery;
    
    #include <sensors/SensorSI7021.h>
    SensorSI7021 si7021;
    
    /***********************************
     * Main Sketch
     */
    
    // before
    void before() {
    	
      /***********************************
       * Configure your sensors
       */
      nodeManager.setSmartSleep(true); 
      nodeManager.setReportIntervalMinutes(10);
      nodeManager.setSleepMinutes(10);
      nodeManager.setSleepBetweenSend(200);
      
      for (List<Child*>::iterator itr = si7021.children.begin(); itr != si7021.children.end(); ++itr) {
        Child* child = *itr;
        if (child->getType() == V_TEMP) child->setValueDelta(0.15);
        if (child->getType() == V_HUM) child->setValueDelta(2.0);
        child->setForceUpdateTimerValue(59);
      }
    
      battery.setMinVoltage(2.0);
      battery.setMaxVoltage(3.1);
      battery.setSendBatteryLevel(true);
        
      nodeManager.before();
    }
    
    // presentation
    void presentation() {
      // call NodeManager presentation routine
      nodeManager.presentation();
    }
    
    // setup
    void setup() {
      // call NodeManager setup routine
      nodeManager.setup();
    }
    
    // loop
    void loop() {
      // call NodeManager loop routine
      nodeManager.loop();
    }
    

    This works fine with MySensors 2.3.0. This is the log output:

    0 NM:INIT:VER=1.8
    0 NM:INIT:INO=SBM TempHum v1.0
    0 NM:INIT:LIB VER=2.3.0 CP=RRONAA-- 
    0 NM:INIT:RBT p=255
    2 NM:BFR:INIT
    1964 NM:BFR:OK
    3094 NM:PRES:BATTERY(201) p=30 t=38
    3559 NM:PRES:SI7021(1) p=6 t=0
    3823 NM:PRES:SI7021(2) p=7 t=1
    5468 NM:STP:ID=10 M=1
    5541 NM:STP:HW V=3271 F=8 M=310
    5617 NM:LOOP:BATTERY(201):SET t=38 v=3.27
    6762 NM:LOOP:SI7021(1):SET t=0 v=24.48
    6782 NM:LOOP:SI7021(2):SET t=1 v=53.00
    7712 NM:SLP:SLEEP s=600
    

    But with MySensors 2.3.1 there seems to be some problem at presentation. This is the log output:

    0 NM:INIT:VER=1.8
    0 NM:INIT:INO=SBM TempHum v1.0
    0 NM:INIT:LIB VER=2.3.1 CP=RRONAA-- 
    0 NM:INIT:RBT p=255
    2 NM:BFR:INIT
    1929 NM:BFR:OK
    3065 NM:PRES:BATTERY(201) p=30 t=38
    3530 NM:PRES:SI7021(1) p=6 t=0
    3792 NM:PRES:⸮5437 NM:STP:ID=10 M=1
    5515 NM:STP:HW V=3271 F=8 M=354
    5588 NM:LOOP:BATTERY(201):SET t=38 v=3.27
    6522 NM:LOOP:SI7021(1):SET t=0 v=24.64
    6987 NM:SLP:SLEEP s=600
    

    I have been reverting commits and found out that the problem started when "Introduce CryptoHAL, optimize crypto functions (#1178)" was merged. Also found out that disabling conditional report makes it work, which really doesn't make any sense.
    The same problem is happening on other node without conditional report but with an additional BH1750 sensor. Looks like a buffer overflow bug? :man-shrugging:

    I'm quite lost at this point.
    Thanks.

    tekkaT 1 Reply Last reply
    1
    • G Gerator

      I have updated my temperature sensor sketch to MySensors 2.3.1. It's a Nodemanager Sketch and looks as follows:

      /*
      * 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-2017 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.
      */
      
      /**************************
      Template
      
      This sketch can be used as a template since containing the most relevant MySensors library configuration settings, 
      NodeManager's settings, all its the supported sensors commented out and a sketch structure fully functional to operate with
      NodeManager. Just uncomment the settings you need and the sensors you want to add and configure the sensors in before()
      */
      
      /**********************************
       * MySensors node configuration
       */
      
      // General settings
      #define SKETCH_NAME "SBM TempHum"
      #define SKETCH_VERSION "1.0"
      #define MY_NODE_ID 10
      
      // RFM69 radio settings
      #define MY_RADIO_RFM69
      #define MY_RFM69_FREQUENCY RFM69_433MHZ
      #define MY_IS_RFM69HW
      //#define MY_RFM69_NEW_DRIVER
      //#define MY_RFM69_ENABLE_ENCRYPTION
      #define MY_RFM69_NETWORKID 99
      //#define MY_DEBUG_VERBOSE_RFM69
      //#define MY_RF69_IRQ_PIN D1
      //#define MY_RF69_IRQ_NUM MY_RF69_IRQ_PIN
      //#define MY_RF69_SPI_CS D2
      //#define MY_RFM69_ATC_MODE_DISABLED
      
      // Message signing settings
      //#define MY_SIGNING_SOFT
      //#define MY_SIGNING_SOFT_RANDOMSEED_PIN 7
      //#define MY_SIGNING_REQUEST_SIGNATURES
      #define MY_SIGNING_ATSHA204
      //#define MY_SIGNING_ATSHA204_PIN 4
      #define MY_SIGNING_REQUEST_SIGNATURES
      
      // OTA Firmware update settings
      #define MY_OTA_FIRMWARE_FEATURE
      #define OTA_WAIT_PERIOD 300
      #define FIRMWARE_MAX_REQUESTS 2
      #define MY_OTA_RETRY 2
      
      // OTA debug output
      //#define MY_DEBUG_OTA (0)
      //#define MY_OTA_LOG_SENDER_FEATURE
      //#define MY_OTA_LOG_RECEIVER_FEATURE
      //#define MY_DEBUG_OTA_DISABLE_ACK
      
      // Advanced settings
      #define MY_BAUD_RATE 115200
      //#define MY_SMART_SLEEP_WAIT_DURATION_MS 500
      #define MY_SPLASH_SCREEN_DISABLED
      //#define MY_DISABLE_RAM_ROUTING_TABLE_FEATURE
      //#define MY_SIGNAL_REPORT_ENABLED
      
      // Optimizations when running on 2032 Coin Cell. Also set nodeManager.setSleepBetweenSend(500) and run the board at 1Mhz
      #define MY_TRANSPORT_UPLINK_CHECK_DISABLED
      #define MY_TRANSPORT_WAIT_READY_MS  5000
      #define MY_SLEEP_TRANSPORT_RECONNECT_TIMEOUT_MS 2000
      #define MY_PARENT_NODE_ID 0
      #define MY_PARENT_NODE_IS_STATIC
      
      /***********************************
       * NodeManager configuration
       */
      
      #define NODEMANAGER_DEBUG ON
      #define NODEMANAGER_SLEEP ON
      #define NODEMANAGER_CONDITIONAL_REPORT ON
      #define NODEMANAGER_OTA_CONFIGURATION OFF
      
      
      // import NodeManager library (a nodeManager object will be then made available)
      #include <MySensors_NodeManager.h>
      
      /***********************************
       * Add your sensors
       */
       
      #include <sensors/SensorBattery.h>
      SensorBattery battery;
      
      #include <sensors/SensorSI7021.h>
      SensorSI7021 si7021;
      
      /***********************************
       * Main Sketch
       */
      
      // before
      void before() {
      	
        /***********************************
         * Configure your sensors
         */
        nodeManager.setSmartSleep(true); 
        nodeManager.setReportIntervalMinutes(10);
        nodeManager.setSleepMinutes(10);
        nodeManager.setSleepBetweenSend(200);
        
        for (List<Child*>::iterator itr = si7021.children.begin(); itr != si7021.children.end(); ++itr) {
          Child* child = *itr;
          if (child->getType() == V_TEMP) child->setValueDelta(0.15);
          if (child->getType() == V_HUM) child->setValueDelta(2.0);
          child->setForceUpdateTimerValue(59);
        }
      
        battery.setMinVoltage(2.0);
        battery.setMaxVoltage(3.1);
        battery.setSendBatteryLevel(true);
          
        nodeManager.before();
      }
      
      // presentation
      void presentation() {
        // call NodeManager presentation routine
        nodeManager.presentation();
      }
      
      // setup
      void setup() {
        // call NodeManager setup routine
        nodeManager.setup();
      }
      
      // loop
      void loop() {
        // call NodeManager loop routine
        nodeManager.loop();
      }
      

      This works fine with MySensors 2.3.0. This is the log output:

      0 NM:INIT:VER=1.8
      0 NM:INIT:INO=SBM TempHum v1.0
      0 NM:INIT:LIB VER=2.3.0 CP=RRONAA-- 
      0 NM:INIT:RBT p=255
      2 NM:BFR:INIT
      1964 NM:BFR:OK
      3094 NM:PRES:BATTERY(201) p=30 t=38
      3559 NM:PRES:SI7021(1) p=6 t=0
      3823 NM:PRES:SI7021(2) p=7 t=1
      5468 NM:STP:ID=10 M=1
      5541 NM:STP:HW V=3271 F=8 M=310
      5617 NM:LOOP:BATTERY(201):SET t=38 v=3.27
      6762 NM:LOOP:SI7021(1):SET t=0 v=24.48
      6782 NM:LOOP:SI7021(2):SET t=1 v=53.00
      7712 NM:SLP:SLEEP s=600
      

      But with MySensors 2.3.1 there seems to be some problem at presentation. This is the log output:

      0 NM:INIT:VER=1.8
      0 NM:INIT:INO=SBM TempHum v1.0
      0 NM:INIT:LIB VER=2.3.1 CP=RRONAA-- 
      0 NM:INIT:RBT p=255
      2 NM:BFR:INIT
      1929 NM:BFR:OK
      3065 NM:PRES:BATTERY(201) p=30 t=38
      3530 NM:PRES:SI7021(1) p=6 t=0
      3792 NM:PRES:⸮5437 NM:STP:ID=10 M=1
      5515 NM:STP:HW V=3271 F=8 M=354
      5588 NM:LOOP:BATTERY(201):SET t=38 v=3.27
      6522 NM:LOOP:SI7021(1):SET t=0 v=24.64
      6987 NM:SLP:SLEEP s=600
      

      I have been reverting commits and found out that the problem started when "Introduce CryptoHAL, optimize crypto functions (#1178)" was merged. Also found out that disabling conditional report makes it work, which really doesn't make any sense.
      The same problem is happening on other node without conditional report but with an additional BH1750 sensor. Looks like a buffer overflow bug? :man-shrugging:

      I'm quite lost at this point.
      Thanks.

      tekkaT Offline
      tekkaT Offline
      tekka
      Admin
      wrote on last edited by
      #2

      @gerator Looks like a stack overflow - how much RAM is free after compilation? Also, could you try with the latest development branch?

      G 1 Reply Last reply
      0
      • tekkaT tekka

        @gerator Looks like a stack overflow - how much RAM is free after compilation? Also, could you try with the latest development branch?

        G Offline
        G Offline
        Gerator
        wrote on last edited by
        #3

        @tekka First of all thanks for your interest. The same happens with the latest development branch. This is the output after compilation:

        Sketch uses 28834 bytes (93%) of program storage space. Maximum is 30720 bytes. 
        Global variables use 1270 bytes (62%) of dynamic memory, leaving 778 bytes for local variables. Maximum is 2048 bytes.
        

        I have tried disabling OTA Flash (which has nothing to do with cryptohal nor presentation) and it seams to work.

        mfalkviddM 1 Reply Last reply
        0
        • G Gerator

          @tekka First of all thanks for your interest. The same happens with the latest development branch. This is the output after compilation:

          Sketch uses 28834 bytes (93%) of program storage space. Maximum is 30720 bytes. 
          Global variables use 1270 bytes (62%) of dynamic memory, leaving 778 bytes for local variables. Maximum is 2048 bytes.
          

          I have tried disabling OTA Flash (which has nothing to do with cryptohal nor presentation) and it seams to work.

          mfalkviddM Offline
          mfalkviddM Offline
          mfalkvidd
          Mod
          wrote on last edited by
          #4

          @gerator OTA Flash uses ram, so if the problem is due to insufficient ram it can still affect the rest of the code.

          1 Reply Last reply
          0
          • G Offline
            G Offline
            Gerator
            wrote on last edited by
            #5

            It seems you two are right. Thanks for your help.

            1 Reply Last reply
            1
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            24

            Online

            11.7k

            Users

            11.2k

            Topics

            113.1k

            Posts


            Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
            • Login

            • Don't have an account? Register

            • Login or register to search.
            • First post
              Last post
            0
            • MySensors
            • OpenHardware.io
            • Categories
            • Recent
            • Tags
            • Popular