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. Controllers
  3. Vera
  4. Vera crash loop on distance sensor update

Vera crash loop on distance sensor update

Scheduled Pinned Locked Moved Vera
14 Posts 3 Posters 3.6k Views 3 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.
  • signal15S Offline
    signal15S Offline
    signal15
    wrote on last edited by
    #1

    I have two distance sensors. It appears that one of them is causing the LuaUPnP to crash and restart repeatedly. It seemed to be working fine for the past week. No changes were made. And today it just started going bananas. It always seems to crash right after this log entry:

    50	05/22/16 17:35:32.432	luup_log:194: Arduino: urn:micasaverde-com:serviceId:HaDevice1,LastUpdateHR, 05:35 PM, 205 <0x2f5b3680>
    50	05/22/16 17:35:32.491	luup_log:194: Arduino: Set variable: 2;3;1;0;13;28 <0x2f5b3680>
    50	05/22/16 17:35:32.492	luup_log:194: Arduino: Setting variable 'CurrentDistance' to value '28' <0x2f5b3680>
    50	05/22/16 17:35:32.492	luup_log:194: Arduino: urn:micasaverde-com:serviceId:DistanceSensor1,CurrentDistance, 28, 206 <0x2f5b3680>
    06	05/22/16 17:35:32.492	Device_Variable::m_szValue_set device: 206 service: urn:micasaverde-com:serviceId:DistanceSensor1 variable: CurrentDistance was: 27 now: 28 #hooks: 1 upnp: 0 v:(nil)/NONE duplicate:0 <0x2f5b3680>
    
    
    2016-05-22 17:35:32 - LuaUPnP Terminated with Exit Code: 245
    
    
    
    2016-05-22 17:35:32 - LuaUPnP crash
    

    Any ideas here?

    1 Reply Last reply
    0
    • signal15S Offline
      signal15S Offline
      signal15
      wrote on last edited by
      #2

      So it started doing it again. This particular node has 2 distance sensors on it. One is the standard cheap sonar one used in the examples, and the other is a $150 Maxbotix which talks via RS232. When this was happening above, it was happening when the cheapy sonar sensor sent an update. Instant LUA engine crash. To resolve it, I deleted that distance sensor device from the Vera.

      It was working fine for a couple of weeks, but it started crashing again. Now it crashes when the Maxbotix sensor sends an update. I just deleted the whole node from the Vera, and now it's not crashing anymore. But I no longer have the distance sensor data in Vera.

      I'm using the 1.5 vera plugin on UI5. Are there known issues with it?

      On the Micasaverde forums, someone said this:


      The "Sending" is likely the symptom.

      You likely are sending "Events" faster than some logic is "Consuming" the events.
      If the consumer, falls behind, when you queue the third (I think that's the number) of events for the consumer, it will trip a Vera "Deadlock" restart.


      Does anyone have any insight?

      As a side note, I've got a Vera Plus on the way so I can convert everything to UI7. Will the UI7 plugin for Mysensors be more stable?

      1 Reply Last reply
      0
      • hekH Offline
        hekH Offline
        hek
        Admin
        wrote on last edited by
        #3

        Are you sending data too frequent perhaps? Spamming the controller...?

        signal15S 1 Reply Last reply
        0
        • hekH hek

          Are you sending data too frequent perhaps? Spamming the controller...?

          signal15S Offline
          signal15S Offline
          signal15
          wrote on last edited by
          #4

          @hek

          I don't think so. It sleeps for 1 second, and only sends an update on change. From the logs, it only appears to send one update before it crashes. I'll post my code when I get back to my computer.

          1 Reply Last reply
          0
          • hekH Offline
            hekH Offline
            hek
            Admin
            wrote on last edited by
            #5

            Once per second is still pretty frequent. If the Vera box is busy on some other task it'll start queueing.

            1 Reply Last reply
            0
            • signal15S Offline
              signal15S Offline
              signal15
              wrote on last edited by
              #6

              Here's my sketch:

              /*
               * 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 - Jay Austad
               * 
               * DESCRIPTION
               * This sketch provides an example how to implement a distance sensor using Maxbotix sensor with RS232 output 
               * http://www.mysensors.org/build/xxx
               
               Receives from the hardware serial, sends to software serial.
               Receives from software serial, sends to hardware serial.
              
               The circuit:
               * RX is digital pin 3 (connect to RXD of MAX232)
               * TX is digital pin 4 (connect to TXD of MAX232)
              
               Note:
               Not all pins on the Mega and Mega 2560 support change interrupts,
               so only the following can be used for RX:
               10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
              
               Not all pins on the Leonardo support change interrupts,
               so only the following can be used for RX:
               8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
              
               This example uses code written by Henrik EKblad, Tom Igoe, Mikal Hart, and Jay Austad
               */
              
              #include <SoftwareSerial.h>
              #include <SPI.h>
              #include <MySensor.h>  
              #include <NewPing.h>
              
              #define CHILD_ID1 1
              #define CHILD_ID2 3
              
              #define TRIGGER_PIN  7  // Arduino pin tied to trigger pin on the ultrasonic sensor.
              #define ECHO_PIN     6  // Arduino pin tied to echo pin on the ultrasonic sensor.
              #define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
              unsigned long SLEEP_TIME = 1000; // Sleep time between reads (in milliseconds)
              
              MySensor gw;
              NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
              MyMessage msg1(CHILD_ID1, V_DISTANCE);
              MyMessage msg2(CHILD_ID2, V_DISTANCE);
              
              boolean metric = true; 
              SoftwareSerial mySerial(3, 4); // RX, TX
              float mm1;
              float cm1;
              float inches1;
              float dist1;
              float lastDist1;
              int lastDist2;
              
              
              void setup() {
                gw.begin();
              
                // Send the sketch version information to the gateway and Controller
                gw.sendSketchInfo("Distance Sensor", "1.0");
              
                // Register all sensors to gw (they will be created as child devices)
                gw.present(CHILD_ID1, S_DISTANCE);
                gw.present(CHILD_ID2, S_DISTANCE);
              
                metric = gw.getConfig().isMetric;
              
                Serial.println("Maxbotix RS232 Mysensors Sketch");
              
                // set the data rate for the SoftwareSerial port
                mySerial.begin(9600);
              }
              
              void loop() { // run over and over
                //Maxbotix sensor, child ID 1
                if (mySerial.available() > 0) {
                  mm1 = mySerial.parseFloat();
                  if (mm1 != 0) {
                    inches1 = mm1/25.4;
                    cm1 = mm1/10;
                    dist1 = metric?cm1:inches1;
                    Serial.print(dist1);
                    Serial.println(metric?" cm":" in");
                  }
                
                  if (dist1 != lastDist1) {
                    gw.send(msg1.set(dist1, 2));
                    lastDist1 = dist1;
                  }
                }
              //sonar sensor, child ID 2
                int uS = sonar.ping();
                if (uS==0)
                {
                  Serial.println("MAX: resetting sensor");
                  pinMode(ECHO_PIN, OUTPUT);
                  delay(150);
                  digitalWrite(ECHO_PIN, LOW);
                  delay(150);
                  pinMode(ECHO_PIN, INPUT);
                  delay(150);
                } else {
                  int dist2 = metric?sonar.ping_cm():sonar.ping_in();
                  Serial.print("Ping: ");
                  Serial.print(dist2); // Convert ping time to distance in cm and print result (0 = outside set distance range)
                  Serial.println(metric?" cm":" in");
              
                  if (dist2 != lastDist2) {
                    gw.send(msg2.set(dist2));
                    lastDist2 = dist2;
                  }
                }
                gw.sleep(SLEEP_TIME);
                
              }
              
              BartEB 1 Reply Last reply
              0
              • signal15S signal15

                Here's my sketch:

                /*
                 * 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 - Jay Austad
                 * 
                 * DESCRIPTION
                 * This sketch provides an example how to implement a distance sensor using Maxbotix sensor with RS232 output 
                 * http://www.mysensors.org/build/xxx
                 
                 Receives from the hardware serial, sends to software serial.
                 Receives from software serial, sends to hardware serial.
                
                 The circuit:
                 * RX is digital pin 3 (connect to RXD of MAX232)
                 * TX is digital pin 4 (connect to TXD of MAX232)
                
                 Note:
                 Not all pins on the Mega and Mega 2560 support change interrupts,
                 so only the following can be used for RX:
                 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
                
                 Not all pins on the Leonardo support change interrupts,
                 so only the following can be used for RX:
                 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
                
                 This example uses code written by Henrik EKblad, Tom Igoe, Mikal Hart, and Jay Austad
                 */
                
                #include <SoftwareSerial.h>
                #include <SPI.h>
                #include <MySensor.h>  
                #include <NewPing.h>
                
                #define CHILD_ID1 1
                #define CHILD_ID2 3
                
                #define TRIGGER_PIN  7  // Arduino pin tied to trigger pin on the ultrasonic sensor.
                #define ECHO_PIN     6  // Arduino pin tied to echo pin on the ultrasonic sensor.
                #define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
                unsigned long SLEEP_TIME = 1000; // Sleep time between reads (in milliseconds)
                
                MySensor gw;
                NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
                MyMessage msg1(CHILD_ID1, V_DISTANCE);
                MyMessage msg2(CHILD_ID2, V_DISTANCE);
                
                boolean metric = true; 
                SoftwareSerial mySerial(3, 4); // RX, TX
                float mm1;
                float cm1;
                float inches1;
                float dist1;
                float lastDist1;
                int lastDist2;
                
                
                void setup() {
                  gw.begin();
                
                  // Send the sketch version information to the gateway and Controller
                  gw.sendSketchInfo("Distance Sensor", "1.0");
                
                  // Register all sensors to gw (they will be created as child devices)
                  gw.present(CHILD_ID1, S_DISTANCE);
                  gw.present(CHILD_ID2, S_DISTANCE);
                
                  metric = gw.getConfig().isMetric;
                
                  Serial.println("Maxbotix RS232 Mysensors Sketch");
                
                  // set the data rate for the SoftwareSerial port
                  mySerial.begin(9600);
                }
                
                void loop() { // run over and over
                  //Maxbotix sensor, child ID 1
                  if (mySerial.available() > 0) {
                    mm1 = mySerial.parseFloat();
                    if (mm1 != 0) {
                      inches1 = mm1/25.4;
                      cm1 = mm1/10;
                      dist1 = metric?cm1:inches1;
                      Serial.print(dist1);
                      Serial.println(metric?" cm":" in");
                    }
                  
                    if (dist1 != lastDist1) {
                      gw.send(msg1.set(dist1, 2));
                      lastDist1 = dist1;
                    }
                  }
                //sonar sensor, child ID 2
                  int uS = sonar.ping();
                  if (uS==0)
                  {
                    Serial.println("MAX: resetting sensor");
                    pinMode(ECHO_PIN, OUTPUT);
                    delay(150);
                    digitalWrite(ECHO_PIN, LOW);
                    delay(150);
                    pinMode(ECHO_PIN, INPUT);
                    delay(150);
                  } else {
                    int dist2 = metric?sonar.ping_cm():sonar.ping_in();
                    Serial.print("Ping: ");
                    Serial.print(dist2); // Convert ping time to distance in cm and print result (0 = outside set distance range)
                    Serial.println(metric?" cm":" in");
                
                    if (dist2 != lastDist2) {
                      gw.send(msg2.set(dist2));
                      lastDist2 = dist2;
                    }
                  }
                  gw.sleep(SLEEP_TIME);
                  
                }
                
                BartEB Offline
                BartEB Offline
                BartE
                Contest Winner
                wrote on last edited by
                #7

                @signal15 just two foods for thought.

                1. Your sketch loops once a seconds with 2 distance sensors so there might be 2 messages a second causing the Vera to flood
                2. "#hooks: 1 upnp: 0 v:(nil)/NONE duplicate:0 <0x2f5b3680>" this look like a division by zero in the Vera plugin is there an scene linked to the distance sensor?
                signal15S 1 Reply Last reply
                0
                • BartEB BartE

                  @signal15 just two foods for thought.

                  1. Your sketch loops once a seconds with 2 distance sensors so there might be 2 messages a second causing the Vera to flood
                  2. "#hooks: 1 upnp: 0 v:(nil)/NONE duplicate:0 <0x2f5b3680>" this look like a division by zero in the Vera plugin is there an scene linked to the distance sensor?
                  signal15S Offline
                  signal15S Offline
                  signal15
                  wrote on last edited by
                  #8

                  @BartE

                  There are no scenes linked to the distance sensor. However, I did put in an alert for when the distance goes above a certain amount for one sensor, and below a certain level for the other. Come to think of it, I started having problems when I put in this alert. I set the alert up for the cheapy sensor first, and then had the problem. And, the problems with the other sensor started when I put in the alert for that one.

                  As for the sending rate, the distance for both of these sensors changes very slowly. And, it's supposed to only send when the distance changes. I set it to every second, because the Maxbotix sensor sends data every second, and I was concerned about data queuing in it over more than a second and causing the parsing not to work properly. Maybe that fear is unfounded since I haven't tried it with more of a delay.

                  1 Reply Last reply
                  0
                  • hekH Offline
                    hekH Offline
                    hek
                    Admin
                    wrote on last edited by
                    #9

                    No need to send all this data to the controller. It's much better to do this processing in the sensor. You can "flip a switch" (binary senor) on vera when your distance goes above the threshold.

                    signal15S 1 Reply Last reply
                    1
                    • BartEB Offline
                      BartEB Offline
                      BartE
                      Contest Winner
                      wrote on last edited by BartE
                      #10

                      And if you like to show some data sent an update of the actual distance on a much lower frequency

                      1 Reply Last reply
                      0
                      • hekH hek

                        No need to send all this data to the controller. It's much better to do this processing in the sensor. You can "flip a switch" (binary senor) on vera when your distance goes above the threshold.

                        signal15S Offline
                        signal15S Offline
                        signal15
                        wrote on last edited by
                        #11

                        @hek

                        I need to keep an eye on the distance for one of the sensors, not just track whether it goes below a certain distance. Eventually I need to write logic where if it's increasing at a certain rate, then it will need to alert me.

                        Interestingly enough, I have MySensors set to Imperial units. However, when I go into the Distance Sensor devices on Vera to set up the alert, the label on it is in centimeters. I'm wondering if that divide by zero in the log is a result of it trying to convert to inches and some code not having 2.54 where the zero/nil is.

                        BartEB 1 Reply Last reply
                        0
                        • signal15S signal15

                          @hek

                          I need to keep an eye on the distance for one of the sensors, not just track whether it goes below a certain distance. Eventually I need to write logic where if it's increasing at a certain rate, then it will need to alert me.

                          Interestingly enough, I have MySensors set to Imperial units. However, when I go into the Distance Sensor devices on Vera to set up the alert, the label on it is in centimeters. I'm wondering if that divide by zero in the log is a result of it trying to convert to inches and some code not having 2.54 where the zero/nil is.

                          BartEB Offline
                          BartEB Offline
                          BartE
                          Contest Winner
                          wrote on last edited by BartE
                          #12

                          @signal15 like @hek is writing this requires a "high" freqency update which just works more reliable when calculated inside the sensor and not by the controller also "increasing at a certain rate" can be implemented as a smoke alarm and being triggered with a V_TRIPPED message when "certain rate" is reached

                          1 Reply Last reply
                          0
                          • hekH Offline
                            hekH Offline
                            hek
                            Admin
                            wrote on last edited by
                            #13

                            I think "cm" is hardcoded in the Vera distance plugin. You'll have to hack the plugin json to fix it.

                            BartEB 1 Reply Last reply
                            0
                            • hekH hek

                              I think "cm" is hardcoded in the Vera distance plugin. You'll have to hack the plugin json to fix it.

                              BartEB Offline
                              BartEB Offline
                              BartE
                              Contest Winner
                              wrote on last edited by BartE
                              #14

                              @hek true line 88 of the D_DistanceSensor1.json file:

                               {
                                                  "ControlType": "label",
                                                  "Label": {
                                                      "lang_tag": "distance_unit",
                                                      "text": "cm"    <------ line 88
                                                  },
                                                  "Display": {
                                                      "Top": 30,
                                                      "Left": 200,
                                                      "Width": 25,
                                                      "Height": 20 
                                                  }
                                              }
                              
                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              25

                              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