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. Troubleshooting
  3. Openhab issue: Error during the execution of rule 'Arduino sends to Openhab': 5

Openhab issue: Error during the execution of rule 'Arduino sends to Openhab': 5

Scheduled Pinned Locked Moved Troubleshooting
4 Posts 3 Posters 2.8k 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.
  • Daniel LindbergD Offline
    Daniel LindbergD Offline
    Daniel Lindberg
    wrote on last edited by Daniel Lindberg
    #1

    So I've managed to build my gateway and connect it to my RPI running Openhab 1.7.1. I'm now trying to connect my pulse power sensor to the gateway (http://www.mysensors.org/build/pulse_power). I've been following this guide http://forum.mysensors.org/topic/1194/tutorial-openhab-with-serial-gateway, but I'm receiving a very non-specifc error from Openhab. The error message is simply "5". I've enabled debug-logging, but it's now much help.

    2015-09-20 16:35:27.063 [DEBUG] [.o.m.c.i.folder.FolderObserver] - Refreshing folder 'sitemaps'
    2015-09-20 16:35:27.065 [DEBUG] [.o.m.c.i.folder.FolderObserver] - Refreshing folder 'persistence'
    2015-09-20 16:35:27.070 [DEBUG] [.o.m.c.i.folder.FolderObserver] - Refreshing folder 'rules'
    2015-09-20 16:35:27.073 [DEBUG] [.o.m.c.i.folder.FolderObserver] - Refreshing folder 'scripts'
    2015-09-20 16:35:27.076 [DEBUG] [.o.m.c.i.folder.FolderObserver] - Refreshing folder 'items'
    2015-09-20 16:35:34.456 [DEBUG] [b.serial.internal.SerialDevice] - Received message '0;0;3;0;9;read: 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
    255;255;3;0;3;
    ' on serial port /dev/ttyUSB99
    2015-09-20 16:35:34.460 [DEBUG] [m.r.internal.engine.RuleEngine] - Executing rule 'Arduino sends to Openhab'
    2015-09-20 16:35:34.585 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'Arduino sends to Openhab': 5
    

    My rules file (basically copy/paste from tutorial, and added my node_id 105 to the hash map):

    import org.openhab.core.library.types.*
    import org.openhab.core.persistence.*
    import org.openhab.model.script.actions.*
    import org.joda.time.*
    import java.util.*
    import org.eclipse.xtext.xbase.lib.*
    import org.openhab.core.items.*
    
    
    var String ArduinoUpdate = ""
    var String sketchName = ""
    
    var int V_TEMP = 0
    var int V_HUM = 1
    var int V_LIGHT = 2
    var int V_DIMMER = 3
    var int V_PRESSURE = 4
    var int V_FORECAST = 5
    var int V_RAIN = 6
    var int V_RAINRATE = 7
    var int V_WIND = 8
    var int V_GUST = 9
    var int V_DIRECTION = 10
    var int V_UV = 11
    var int V_WEIGHT = 12
    var int V_DISTANCE = 13
    var int V_IMPEDANCE = 14
    var int V_ARMED = 15
    var int V_TRIPPED = 16
    var int V_WATT = 17
    var int V_KWH = 18
    var int V_SCENE_ON = 19
    var int V_SCENE_OFF = 20
    var int V_HEATER = 21
    var int V_HEATER_SW = 22
    var int V_LIGHT_LEVEL = 23
    var int V_VAR1 = 24
    var int V_VAR2 = 25
    var int V_VAR3 = 26
    var int V_VAR4 = 27
    var int V_VAR5 = 28
    var int V_UP = 29
    var int V_DOWN = 30
    var int V_STOP = 31
    var int V_IR_SEND = 32
    var int V_IR_RECEIVE = 33
    var int V_FLOW = 34
    var int V_VOLUME = 35
    var int V_LOCK_STATUS = 36
    var int V_DUST_LEVEL = 37
    var int V_VOLTAGE = 38
    var int V_CURRENT = 39
    var int msgPresentation = 0
    var int msgSet = 1
    var int msgReq = 2
    var int msgInternal = 3
    var int msgStream = 4
    var int alarmArmor = 1
    
    // Internal Commands
    
    var int I_BATTERY_LEVEL = 0
    var int I_TIME = 1
    var int I_VERSION = 2
    var int I_ID_REQUEST = 3
    var int I_ID_RESPONSE = 4
    var int I_INCLUSION_MODE = 5
    var int I_CONFIG = 6
    var int I_FIND_PARENT = 7
    var int I_FIND_PARENT_RESPONSE = 8
    var int I_LOG_MESSAGE = 9
    var int I_CHILDREN = 10
    var int I_SKETCH_NAME = 11
    var int I_SKETCH_VERSION = 12
    var int I_REBOOT = 13
    var int I_GATEWAY_READY = 14
    
    // Mappings
    var HashMap<String, String> sensorToItemsMap = newLinkedHashMap(
        "101;0;"            -> "livingHum01",
        "livingHum01"       -> "101;0;",
        "101;1;"            -> "livingTemp01",
        "livingTemp01"      -> "101;1;",
        "105;1;"            -> "cellarPow01",
        "cellarPow01"       -> "105;1;"
    )
    
    
    //receiving msg from mysensors gateway
    rule "Arduino sends to Openhab"
        when
            Item Arduino received update
        then
            var String lineBuffer =  Arduino.state.toString.split("\n")
            for (String line : lineBuffer) {
                var String[] message = line.split(";")
                var Integer nodeId = new Integer(message.get(0))
                var Integer childId = new Integer(message.get(1))
                var Integer msgType = new Integer(message.get(2))
                var Integer ack = new Integer(message.get(3))
                var Integer subType = new Integer(message.get(4))
                var String msg = message.get(5)
                if(msgType == 1 ){
                    if (subType == V_TEMP){
                        postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg)
                        println ("Temp item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " temp: " + msg )
                        }
                    if (subType == V_HUM){
                        postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg)
                        println ("Hum item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " hum: " + msg )
                        }
                    }
                // Internal Command
                if(msgType == 3){
                    if(subType == I_SKETCH_NAME){
                            println("Sketch name: " + msg )
                            sketchName=msg
                        }
                    if(subType == I_SKETCH_VERSION){
                            println("Sketch version: " + msg )
                            postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), sketchName+" " +msg )
                            sketchName=""
                        }
                    }
                }
            }
    end
    

    What can I do to get more info about this error?

    1 Reply Last reply
    0
    • X Offline
      X Offline
      Xander
      wrote on last edited by
      #2

      I have not checked your code. But opening "{" and closing "}" brackets should have the same count.

      1 Reply Last reply
      0
      • T Offline
        T Offline
        TimO
        Hero Member
        wrote on last edited by
        #3

        I've lately had a similar problem, where the error log didn't help and changed my rules a little.

        Could you test the modifications?

        import org.openhab.core.library.types.*
        import org.openhab.core.persistence.*
        import org.openhab.model.script.actions.*
        import org.joda.time.*
        import java.util.*
        import org.eclipse.xtext.xbase.lib.*
        import org.openhab.core.items.*
        import org.openhab.core.library.types.*
        import org.openhab.core.library.types.PercentType
        import org.openhab.core.library.items.SwitchItem
        
        
        var String ArduinoUpdate = ""
        var String sketchName = ""
        
        var int V_TEMP = 0
        var int V_HUM = 1
        var int V_LIGHT = 2
        var int V_DIMMER = 3
        var int V_PRESSURE = 4
        var int V_FORECAST = 5
        var int V_RAIN = 6
        var int V_RAINRATE = 7
        var int V_WIND = 8
        var int V_GUST = 9
        var int V_DIRECTION = 10
        var int V_UV = 11
        var int V_WEIGHT = 12
        var int V_DISTANCE = 13
        var int V_IMPEDANCE = 14
        var int V_ARMED = 15
        var int V_TRIPPED = 16
        var int V_WATT = 17
        var int V_KWH = 18
        var int V_SCENE_ON = 19
        var int V_SCENE_OFF = 20
        var int V_HEATER = 21
        var int V_HEATER_SW = 22
        var int V_LIGHT_LEVEL = 23
        var int V_VAR1 = 24
        var int V_VAR2 = 25
        var int V_VAR3 = 26
        var int V_VAR4 = 27
        var int V_VAR5 = 28
        var int V_UP = 29
        var int V_DOWN = 30
        var int V_STOP = 31
        var int V_IR_SEND = 32
        var int V_IR_RECEIVE = 33
        var int V_FLOW = 34
        var int V_VOLUME = 35
        var int V_LOCK_STATUS = 36
        var int V_DUST_LEVEL = 37
        var int V_VOLTAGE = 38
        var int V_CURRENT = 39
        var int msgPresentation = 0
        var int msgSet = 1
        var int msgReq = 2
        var int msgInternal = 3
        var int msgStream = 4
        var int alarmArmor = 1
        // Internal Commands
        
        var int I_BATTERY_LEVEL = 0
        var int I_TIME = 1
        var int I_VERSION = 2
        var int I_ID_REQUEST = 3
        var int I_ID_RESPONSE = 4
        var int I_INCLUSION_MODE = 5
        var int I_CONFIG = 6
        var int I_FIND_PARENT = 7
        var int I_FIND_PARENT_RESPONSE = 8
        var int I_LOG_MESSAGE = 9
        var int I_CHILDREN = 10
        var int I_SKETCH_NAME = 11
        var int I_SKETCH_VERSION = 12
        var int I_REBOOT = 13
        var int I_GATEWAY_READY = 14
        
        // Mappings
        var HashMap<String, String> sensorToItemsMap = newLinkedHashMap(
            "101;0;" 				-> "bathHum01",
            "bathHum01" 			-> "101;0;",
            "101;1;" 				-> "bathTemp01",
            "bathTemp01" 			-> "101;1;",
            "101;2;" 				-> "bathVolt01",
            "bathLastUpdate01" 			-> "101;99;",
            "101;99;"				-> "bathLastUpdate01",
            "bathVolt01" 			-> "101;2;",
            "102;99;"				-> "basementLastUpdate01",
            "basementLastUpdate02" 		-> "102;99;",
            "102;1;"				-> "corridorSwitch01",
            "corridorSwitch01" 			-> "102;1;",
            "102;2;"				-> "corridorSwitch02",
            "corridorSwitch02"			-> "102;2;",
            "103;99;"				-> "livingLastUpdate01",
            "livingLastUpdate01"		-> "103;99;",
            "103;0;" 				-> "livingHum01", 
            "livingHum01" 			-> "103;0;",
            "103;1;" 				-> "livingTemp01", 
            "livingTemp01" 			-> "103;1;",
            "103;2;" 				-> "livingVolt01", 
            "livingVolt01" 			-> "103;2;",
            "103;3;" 				-> "livingWindow01", 
            "livingWindow01" 			-> "103;3;",
            "workTemp01"			-> "104;1;",
            "104;1;"				-> "workTemp01",
            "workHum01"				-> "104;2;",
            "104;2;"				-> "workHum01",
            "workVolt01"			-> "104;199;",
            "104;199;"				-> "workVolt01",
            "workLastUpdate01"			-> "104;99;",
            "104;99;"				-> "workLastUpdate01",
            "kitchenTemp01"                     -> "105;1;",
            "105;1;"                            -> "kitchenTemp01",
            "kitchenHum01"                      -> "105;2;",
            "105;2;"                            -> "kitchenHum01",
            "kitchenLastUpdate01"		-> "105;99;",
            "105;99;"				-> "kitchenLastUpdate01",
            "kitchenVolt01"			-> "105;199;",
            "105;199;"				-> "kitchenVolt01",
            "childrenHum01"			-> "106;0;",
            "106;0;"				-> "childrenHum01",
            "childrenTemp01"			-> "106;1;",
            "106;1;"				-> "childrenTemp01",
            "childenPresenceSim01"		-> "106;3;",
            "106;3;"				-> "childrenPresenceSim01",
            "childrenLastUpdate01"		-> "106;99;",
            "106;99;"				-> "childrenLastUpdate01"			
        )
        
        //receiving msg from mysensors gateway
        rule "Arduino sends to Openhab"
            when
                Item Arduino received update
            then
                var String[] lineBuffer =  Arduino.state.toString.split("\n")
                for (String line : lineBuffer) {
                    println("#### LINE : " + line)
                    if(line != "") { 
        	            var String[] message = line.split(";")
        	            var Integer nodeId = new Integer(message.get(0))
        	            var Integer childId = new Integer(message.get(1))
        	            var Integer msgType = new Integer(message.get(2))
        	            var Integer ack = new Integer(message.get(3))
        	            var Integer subType = new Integer(message.get(4))
        	            if(message.size == 6) {
        	            	var String msg = message.get(5)
        		            if(msgType == 1 ){
        		                if (subType == V_TEMP){
        		                    postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg)
        		                    println ("Temp item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " temp: " + msg )
        		                    }
        		                if (subType == V_HUM){
        		                    postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg)
        		                    println ("Hum item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " hum: " + msg )
        		                    }
        		                if (subType == V_VOLTAGE){
        		                    postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), msg)
        		                    println ("Voltage item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " volt: " + msg )
        		                    }
        		                if (subType == V_TRIPPED){
        		                    println ("Window item: " + sensorToItemsMap.get( nodeId + ";" + childId + ";") + " status: " + Integer::parseInt(msg) )
        		                    if(Integer::parseInt(msg) == 1) {
        					postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), "OPEN")                    } 
        		                    if(Integer::parseInt(msg) == 0) {
        		                    	postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), "CLOSED")
        		                    } 
        		                }
                	        	var String dateTimeNow = callScript("dateTimeNow")
        		                postUpdate(sensorToItemsMap.get(nodeId + ";99;"), dateTimeNow)    
                		    // Internal Command
                		    if(msgType == 3){
                		        if(subType == I_SKETCH_NAME){
                		                println("Sketch name: " + msg )
                		                sketchName=msg
                		            }
                		        if(subType == I_SKETCH_VERSION){
                		                println("Sketch version: " + msg )
                		                postUpdate(sensorToItemsMap.get( nodeId + ";" + childId + ";"), sketchName+" " +msg )
                		                sketchName=""
                		            }
                		        }
                	 	   }
                	     }
                      }   
                }
        end
        
        1 Reply Last reply
        0
        • Daniel LindbergD Offline
          Daniel LindbergD Offline
          Daniel Lindberg
          wrote on last edited by
          #4

          I found late last night that the issue was the line

          var String msg = message.get(5)
          

          so by looking at your code I'm pretty confident that it will work.

          I haven't digged into the details, but it seems like the Pulse Meter request for last pulse count

          // Fetch last known pulse count value from gw
          gw.request(CHILD_ID, V_VAR1);
          
          

          doesn't carry any payload, so String[] message has a length of 5 rather than 6. So the error message "5" is some weird presentation of an IndexOutOfBoundsException

          1 Reply Last reply
          0

          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

          With your input, this post could be even better 💗

          Register Login
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          23

          Online

          12.0k

          Users

          11.2k

          Topics

          113.4k

          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