Node is not using repeater to talk to gateway



  • Hi, this is all about the 2.0.0 master stable release. All systems use this code.

    I have 1 gateway, 1 repeater and 1 sensor node. The sensor node is a bit far from the gateway, so I put a repeater node in the middle with an amplified nrf24 version and the real antenna.

    Now what I see from the serial monitor is that gateway and repeater are up and running and the sensor node too.

    My problem is, that I cannot get the sensor node to use the repeater.

    If I bring the sensor close to the gateway they talk directly to each other. If I bring it further away, it does not switch over to use the repeater, but communication just remains dead (for days).

    I did try the MY_PARENT_NODE_ ID but it does not do anything. Even if I bring all 3 devices close together, the repeater is not being used.

    Can anyone confirm this behaviour? I am using the example sketches for gateway and repeater, and a very simple sketch for the sensor.

    Thanks for any ideas!


  • Admin

    @karl261 Please post the full debug log of all nodes.



  • Yes, I can do that, but only in about 4 weeks, because I am away.
    For my understanding: MY_PARENT_NODE_ ID is the correct approach for forcing traffic through a certain repeater, isn't it?



  • @tekka I am still struggling with my repeater node. Below the output of the gateway (via pimatic-mysensors).

    So, when I switch on the repeater, why do I get these two "fail" messages? I can see in the log of the repeater that they are received well.

    Also, I noticed that the repeater is sending from time to time something to the gateway:

    mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=ok:1
    13:32:51debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:PINGED (ID=99, hops=1)
    13:32:51debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:1
    

    Seems to be some sort of check that the routing table is still ok? When is it supposed to send that? Because sometimes it is not sending this for half an hour, then it is sending this every 20 seconds or so...

    debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=27,pt=1,l=1,sg=0,ft=0,st=ok:1
    13:31:11debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=26,pt=1,l=1,sg=0:2
    13:31:11debug [pimatic-mysensors]: <- I_SKETCH_VERSION  99;255;3;0;12;1.0
    13:31:11debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=12,pt=0,l=3,sg=0:1.0
    13:31:11debug [pimatic-mysensors]: <- I_SKETCH_NAME  99;255;3;0;11;Repeater Node
    13:31:11debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=11,pt=0,l=13,sg=0:Repeater Node
    13:31:11debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=6,pt=0,l=1,sg=0,ft=0,st=fail:M
    13:31:11debug [pimatic-mysensors]: -> Sending  99;255;3;0;6;M
    13:31:11debug [pimatic-mysensors]: <- I_CONFIG  99;255;3;0;6;0
    13:31:11debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=6,pt=1,l=1,sg=0:0
    13:31:11debug [pimatic-mysensors]: <- Presented Node  [ '99', '255', '0', '0', '18', '2.0.0' ]
    13:31:11debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=0,t=18,pt=0,l=5,sg=0:2.0.0
    13:31:11debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=ok:0100
    13:31:11debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    13:31:11debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=fail:1
    13:31:11debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:PINGED (ID=99, hops=1)
    13:31:11debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:1
    13:31:09debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=ok:0
    13:31:09debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:GWL OK
    13:31:09debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:CHKUPL:OK
    13:31:09debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:FPAR REQ (sender=99)
    13:31:09debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:BC
    13:31:09debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 99-99-255 s=255,c=3,t=7,pt=0,l=0,sg=0:
    


  • Also, I can't really figure out what is failing here. This was when I was switching a node on. Later I see that it is transmitting data from time to time. I also can't figure out why the repeater is transmitting the data five times.

    
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=6,pt=0,l=1,sg=0,ft=0,st=fail:M
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=6,pt=0,l=1,sg=0,ft=0,st=fail:M
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=6,pt=0,l=1,sg=0,ft=0,st=fail:M
    14:23:24debug [pimatic-mysensors]: -> Sending  30;255;3;0;6;M
    14:23:24debug [pimatic-mysensors]: <- I_CONFIG  30;255;3;0;6;99
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=6,pt=1,l=1,sg=0:99
    14:23:24debug [pimatic-mysensors]: -> Sending  30;255;3;0;6;M
    14:23:24debug [pimatic-mysensors]: <- I_CONFIG  30;255;3;0;6;99
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=6,pt=1,l=1,sg=0:99
    14:23:24debug [pimatic-mysensors]: -> Sending  30;255;3;0;6;M
    14:23:24debug [pimatic-mysensors]: <- I_CONFIG  30;255;3;0;6;99
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=6,pt=1,l=1,sg=0:99
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=fail:0100
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=fail:0100
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=fail:0100
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '1', '0', '0', '7', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=0,t=7,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '1', '0', '0', '7', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=0,t=7,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '1', '0', '0', '7', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=0,t=7,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '1', '0', '0', '7', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=0,t=7,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '1', '0', '0', '7', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=0,t=7,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '1', '0', '0', '7', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=0,t=7,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '0', '0', '0', '6', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=0,c=0,t=6,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '0', '0', '0', '6', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=0,c=0,t=6,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '0', '0', '0', '6', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=0,c=0,t=6,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '0', '0', '0', '6', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=0,c=0,t=6,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '0', '0', '0', '6', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=0,c=0,t=6,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- Presented Node  [ '30', '0', '0', '0', '6', '' ]
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=0,c=0,t=6,pt=0,l=0,sg=0:
    14:23:24debug [pimatic-mysensors]: <- I_SKETCH_VERSION  30;255;3;0;12;1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=12,pt=0,l=10,sg=0:1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_SKETCH_VERSION  30;255;3;0;12;1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=12,pt=0,l=10,sg=0:1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_SKETCH_VERSION  30;255;3;0;12;1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=12,pt=0,l=10,sg=0:1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_SKETCH_VERSION  30;255;3;0;12;1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=12,pt=0,l=10,sg=0:1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_SKETCH_VERSION  30;255;3;0;12;1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=12,pt=0,l=10,sg=0:1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_SKETCH_VERSION  30;255;3;0;12;1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=12,pt=0,l=10,sg=0:1.0 151106
    14:23:24debug [pimatic-mysensors]: <- I_SKETCH_NAME  30;255;3;0;11;EgTmpHumBat5min
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=11,pt=0,l=15,sg=0:EgTmpHumBat5min
    14:23:24debug [pimatic-mysensors]: <- I_SKETCH_NAME  30;255;3;0;11;EgTmpHumBat5min
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=11,pt=0,l=15,sg=0:EgTmpHumBat5min
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=fail:1
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:PINGED (ID=30, hops=2)
    14:23:24debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:2
    14:23:23debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=fail:1
    14:23:23debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:PINGED (ID=30, hops=2)
    14:23:23debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:2
    
    
    14:33:46debug [pimatic-mysensors]: <- MySensorDHT  { sender: 30, sensor: 1, type: 1, value: '57' }
    14:33:46debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:57
    14:33:46debug [pimatic-mysensors]: <- MySensorDHT  { sender: 30, sensor: 1, type: 1, value: '57' }
    14:33:46debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:57
    14:33:46debug [pimatic-mysensors]: <- MySensorDHT  { sender: 30, sensor: 1, type: 1, value: '57' }
    14:33:46debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:57
    14:33:46debug [pimatic-mysensors]: <- MySensorDHT  { sender: 30, sensor: 1, type: 1, value: '57' }
    14:33:46debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:57
    14:33:46debug [pimatic-mysensors]: <- MySensorDHT  { sender: 30, sensor: 1, type: 1, value: '57' }
    14:33:46debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:57
    14:33:46debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=fail:1
    14:33:46debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:PINGED (ID=30, hops=2)
    14:33:46debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:2
    14:33:46debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;!TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=fail:1
    14:33:46debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:PINGED (ID=30, hops=2)
    14:33:46debug [pimatic-mysensors]: <- I_LOG_MESSAGE  0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:2
    


  • Something is wrong. In case somebody cares about a bit more debug output.
    99 Repeater
    4 Some outside node BME280
    30 Outside node SI7021

    Somewhere towards the end I toggled the power of the repeater node.

    I go and get some log from the repeater.

    0;255;3;0;9;Starting gateway (RNNGA-, 2.0.0)
    0;255;3;0;9;TSM:INIT
    0;255;3;0;9;TSM:RADIO:OK
    0;255;3;0;9;TSM:GW MODE
    0;255;3;0;9;TSM:READY
    0;255;3;0;14;Gateway startup complete.
    0;255;0;0;18;2.0.0
    0;255;3;0;9;No registration required
    0;255;3;0;9;Init complete, id=0, parent=0, distance=0, registration=1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.0
    2;1;1;0;0;20.0
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.9
    2;0;1;0;1;73.9
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    3;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    3;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:21.0
    2;1;1;0;0;21.0
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.4
    2;0;1;0;1;74.4
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:19.5
    2;1;1;0;0;19.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.6
    2;0;1;0;1;73.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:19.0
    2;1;1;0;0;19.0
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.2
    2;0;1;0;1;73.2
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:61
    30;1;1;0;1;61
    0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:61
    30;1;1;0;1;61
    0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:61
    30;1;1;0;1;61
    0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:61
    30;1;1;0;1;61
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    3;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:41
    4;0;1;0;1;41
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:41
    4;0;1;0;1;41
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:41
    4;0;1;0;1;41
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:41
    4;0;1;0;1;41
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:41
    4;0;1;0;1;41
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    3;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.4
    2;1;1;0;0;20.4
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.9
    2;0;1;0;1;73.9
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:19.5
    2;1;1;0;0;19.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.7
    2;0;1;0;1;73.7
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.7
    2;1;1;0;0;20.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.4
    2;0;1;0;1;73.4
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    3;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.1
    2;0;1;0;1;73.1
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    3;1;1;0;0;20.6
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:19.5
    2;1;1;0;0;19.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.5
    2;0;1;0;1;73.5
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.0
    4;1;1;0;0;26.0
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.0
    4;1;1;0;0;26.0
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.0
    4;1;1;0;0;26.0
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    3;1;1;0;0;20.5
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.7
    2;1;1;0;0;20.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.0
    2;0;1;0;1;74.0
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    3;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.0
    3;0;1;0;1;61.0
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:18.9
    2;1;1;0;0;18.9
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:72.9
    2;0;1;0;1;72.9
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.6
    4;1;1;0;0;26.6
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.6
    4;1;1;0;0;26.6
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.6
    4;1;1;0;0;26.6
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.6
    4;1;1;0;0;26.6
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.6
    4;1;1;0;0;26.6
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.6
    4;1;1;0;0;26.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:18.8
    2;1;1;0;0;18.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:72.7
    2;0;1;0;1;72.7
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.1
    3;0;1;0;1;61.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:19.5
    2;1;1;0;0;19.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.3
    2;0;1;0;1;73.3
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    3;1;1;0;0;20.5
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.9
    2;0;1;0;1;73.9
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:19.6
    2;1;1;0;0;19.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.8
    2;0;1;0;1;73.8
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.4
    2;1;1;0;0;20.4
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.4
    2;0;1;0;1;74.4
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.2
    2;1;1;0;0;20.2
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.3
    2;0;1;0;1;74.3
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.7
    2;1;1;0;0;20.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.7
    2;0;1;0;1;74.7
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    2;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.5
    2;0;1;0;1;74.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.6
    2;0;1;0;1;74.6
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.8
    2;1;1;0;0;20.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.7
    2;0;1;0;1;74.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:21.0
    2;1;1;0;0;21.0
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.9
    2;1;1;0;0;20.9
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.9
    2;0;1;0;1;74.9
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:21.0
    2;1;1;0;0;21.0
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.2
    3;0;1;0;1;61.2
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.6
    2;0;1;0;1;74.6
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.1
    3;0;1;0;1;61.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    2;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.7
    2;0;1;0;1;74.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.0
    4;1;1;0;0;26.0
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.0
    4;1;1;0;0;26.0
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.0
    4;1;1;0;0;26.0
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.0
    4;1;1;0;0;26.0
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.0
    4;1;1;0;0;26.0
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.0
    4;1;1;0;0;26.0
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.0
    4;1;1;0;0;26.0
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.8
    2;1;1;0;0;20.8
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    3;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.9
    2;1;1;0;0;20.9
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.9
    2;0;1;0;1;74.9
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    3;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.2
    3;0;1;0;1;61.2
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.7
    2;0;1;0;1;74.7
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.8
    2;1;1;0;0;20.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:45
    4;0;1;0;1;45
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:45
    4;0;1;0;1;45
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:45
    4;0;1;0;1;45
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:45
    4;0;1;0;1;45
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:45
    4;0;1;0;1;45
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.4
    2;1;1;0;0;20.4
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.6
    2;0;1;0;1;74.6
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.5
    4;1;1;0;0;26.5
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.5
    4;1;1;0;0;26.5
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.5
    4;1;1;0;0;26.5
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.5
    4;1;1;0;0;26.5
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.5
    4;1;1;0;0;26.5
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.5
    4;1;1;0;0;26.5
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.7
    2;1;1;0;0;20.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.9
    2;0;1;0;1;74.9
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    3;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    3;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.1
    3;0;1;0;1;61.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:21.0
    2;1;1;0;0;21.0
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.0
    2;0;1;0;1;75.0
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.7
    2;0;1;0;1;74.7
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:21.1
    2;1;1;0;0;21.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.1
    2;0;1;0;1;75.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.8
    2;1;1;0;0;20.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.0
    2;0;1;0;1;75.0
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.2
    3;0;1;0;1;61.2
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:21.1
    2;1;1;0;0;21.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.1
    2;0;1;0;1;75.1
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:41
    4;0;1;0;1;41
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:41
    4;0;1;0;1;41
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:41
    4;0;1;0;1;41
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:41
    4;0;1;0;1;41
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:41
    4;0;1;0;1;41
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:41
    4;0;1;0;1;41
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.1
    3;0;1;0;1;61.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    2;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.2
    3;0;1;0;1;61.2
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.4
    2;1;1;0;0;20.4
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.7
    2;0;1;0;1;74.7
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.1
    3;0;1;0;1;61.1
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.8
    2;1;1;0;0;20.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.6
    2;0;1;0;1;73.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.9
    2;1;1;0;0;20.9
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.1
    2;0;1;0;1;75.1
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.7
    2;1;1;0;0;20.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.9
    2;0;1;0;1;74.9
    0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:60
    30;1;1;0;1;60
    0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:60
    30;1;1;0;1;60
    0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:60
    30;1;1;0;1;60
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.8
    2;1;1;0;0;20.8
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.2
    3;0;1;0;1;61.2
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.1
    3;0;1;0;1;61.1
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.4
    2;1;1;0;0;20.4
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.7
    2;0;1;0;1;74.7
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.2
    3;0;1;0;1;61.2
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:21.0
    2;1;1;0;0;21.0
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.1
    2;0;1;0;1;75.1
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.1
    3;0;1;0;1;61.1
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:21.1
    2;1;1;0;0;21.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.2
    2;0;1;0;1;75.2
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.2
    3;0;1;0;1;61.2
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.1
    3;0;1;0;1;61.1
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.4
    2;1;1;0;0;20.4
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.7
    2;0;1;0;1;74.7
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    3;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:40
    4;0;1;0;1;40
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:40
    4;0;1;0;1;40
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:40
    4;0;1;0;1;40
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:40
    4;0;1;0;1;40
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=2,c=1,t=4,pt=7,l=5,sg=0:1020.2
    4;2;1;0;4;1020.2
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=2,c=1,t=4,pt=7,l=5,sg=0:1020.2
    4;2;1;0;4;1020.2
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=2,c=1,t=4,pt=7,l=5,sg=0:1020.2
    4;2;1;0;4;1020.2
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=2,c=1,t=4,pt=7,l=5,sg=0:1020.2
    4;2;1;0;4;1020.2
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=2,c=1,t=4,pt=7,l=5,sg=0:1020.2
    4;2;1;0;4;1020.2
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=2,c=1,t=4,pt=7,l=5,sg=0:1020.2
    4;2;1;0;4;1020.2
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=2,c=1,t=4,pt=7,l=5,sg=0:1020.2
    4;2;1;0;4;1020.2
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.7
    2;1;1;0;0;20.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.9
    2;0;1;0;1;74.9
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    3;1;1;0;0;20.5
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.9
    2;1;1;0;0;20.9
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.1
    2;0;1;0;1;75.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.7
    2;1;1;0;0;20.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.9
    2;0;1;0;1;74.9
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.9
    2;1;1;0;0;20.9
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.1
    2;0;1;0;1;75.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.8
    2;1;1;0;0;20.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.0
    2;0;1;0;1;75.0
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    2;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.7
    2;1;1;0;0;20.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.0
    2;0;1;0;1;75.0
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.1
    4;1;1;0;0;26.1
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.1
    4;1;1;0;0;26.1
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.1
    4;1;1;0;0;26.1
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.1
    4;1;1;0;0;26.1
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.1
    4;1;1;0;0;26.1
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.1
    4;1;1;0;0;26.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    2;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.7
    2;1;1;0;0;20.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.9
    2;0;1;0;1;74.9
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    2;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.7
    2;0;1;0;1;74.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.2
    2;1;1;0;0;20.2
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.5
    2;0;1;0;1;74.5
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.9
    2;1;1;0;0;20.9
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:73.8
    2;0;1;0;1;73.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    2;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=1,c=1,t=0,pt=7,l=5,sg=0:26.7
    4;1;1;0;0;26.7
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.2
    3;0;1;0;1;61.2
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.8
    2;1;1;0;0;20.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.9
    2;0;1;0;1;74.9
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.1
    3;0;1;0;1;61.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.2
    2;1;1;0;0;20.2
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.6
    2;0;1;0;1;74.6
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:40
    4;0;1;0;1;40
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:40
    4;0;1;0;1;40
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:40
    4;0;1;0;1;40
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:40
    4;0;1;0;1;40
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:40
    4;0;1;0;1;40
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:40
    4;0;1;0;1;40
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.4
    2;1;1;0;0;20.4
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.9
    2;1;1;0;0;20.9
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.1
    2;0;1;0;1;75.1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.8
    2;1;1;0;0;20.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.0
    2;0;1;0;1;75.0
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    2;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.9
    2;0;1;0;1;74.9
    0;255;3;0;9;TSP:MSG:READ 99-99-255 s=255,c=3,t=7,pt=0,l=0,sg=0:
    0;255;3;0;9;TSP:MSG:BC
    0;255;3;0;9;TSP:MSG:FPAR REQ (sender=99)
    0;255;3;0;9;TSP:CHKUPL:OK
    0;255;3;0;9;TSP:MSG:GWL OK
    0;255;3;0;9;TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=ok:0
    0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:1
    0;255;3;0;9;TSP:MSG:PINGED (ID=99, hops=1)
    0;255;3;0;9;!TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=fail:1
    0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=0,t=18,pt=0,l=5,sg=0:2.0.0
    99;255;0;0;18;2.0.0
    0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=6,pt=1,l=1,sg=0:0
    99;255;3;0;6;0
    0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=11,pt=0,l=13,sg=0:Repeater Node
    99;255;3;0;11;Repeater Node
    0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=12,pt=0,l=3,sg=0:1.0
    99;255;3;0;12;1.0
    0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=26,pt=1,l=1,sg=0:2
    0;255;3;0;9;TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=27,pt=1,l=1,sg=0,ft=0,st=ok:1
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    3;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.3
    3;0;1;0;1;61.3
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.4
    2;1;1;0;0;20.4
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.2
    3;0;1;0;1;61.2
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:75.0
    2;0;1;0;1;75.0
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    3;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.4
    3;0;1;0;1;61.4
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=0,c=1,t=1,pt=2,l=2,sg=0:44
    4;0;1;0;1;44
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    3;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.2
    3;0;1;0;1;61.2
    0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:1
    0;255;3;0;9;TSP:MSG:PINGED (ID=99, hops=1)
    0;255;3;0;9;TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=ok:1
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:2
    0;255;3;0;9;TSP:MSG:PINGED (ID=4, hops=2)
    0;255;3;0;9;!TSP:MSG:SEND 0-0-99-4 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=fail:1
    0;255;3;0;9;TSP:MSG:READ 4-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:2
    0;255;3;0;9;TSP:MSG:PINGED (ID=4, hops=2)
    0;255;3;0;9;!TSP:MSG:SEND 0-0-99-4 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=fail:1
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    2;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.6
    2;1;1;0;0;20.6
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.9
    2;0;1;0;1;74.9
    0;255;3;0;9;TSP:SANCHK:OK
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=1,c=1,t=0,pt=7,l=5,sg=0:20.5
    3;1;1;0;0;20.5
    0;255;3;0;9;TSP:MSG:READ 2-2-0 s=0,c=1,t=1,pt=7,l=5,sg=0:74.8
    2;0;1;0;1;74.8
    0;255;3;0;9;TSP:MSG:READ 3-3-0 s=0,c=1,t=1,pt=7,l=5,sg=0:61.3
    3;0;1;0;1;61.3
    0;255;3;0;9;TSP:SANCHK:OK
    


  • Hm, somehow I have the impression it depends a bit if I have #define MY_DEBUG in my repeater sketch or not. I had to put it back in, because I want to take some logs, and it is behaving a bit better now. At least single messages. And less fails.



  • Hi @karl261,

    It's a long shot but can you double check your power sources? I had some weird issues like those in the past because of bad quality power sources.

    I recommend adding a 47uF electrolytic capacitor as close as possible to the NRF24 GND and VCC pins, as a 470uF between the GND and the Vin pins of the arduino.

    And keep the external power source on even when connecting the USB cable to read the debug messages.

    Hope you solve this issue soon


  • Admin

    @karl261 Ok, I need to see the sketches first: can you post the sketch of all nodes, i.e. GW, node 99, node 3, node 4? Also, do you have MYSController installed for a few tests?



  • Oki doki, thanks for looking at this:

    Sketch GW:

      /**
     * 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
     * The ArduinoGateway prints data received from sensors on the serial link. 
     * The gateway accepts input on seral which will be sent out on radio network.
     *
     * The GW code is designed for Arduino Nano 328p / 16MHz
     *
     * Wire connections (OPTIONAL):
     * - Inclusion button should be connected between digital pin 3 and GND  
     * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series
     *
     * LEDs (OPTIONAL):
     * - To use the feature, uncomment MY_LEDS_BLINKING_FEATURE in MyConfig.h
     * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
     * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
     * - ERR (red) - fast blink on error during transmission error or recieve crc error 
     * 
     */
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    // Set LOW transmit power level as default, if you have an amplified NRF-module and
    // power your radio separately with a good regulator you can turn up PA level. 
    //#define MY_RF24_PA_LEVEL RF24_PA_LOW
    
    // Enable serial gateway
    #define MY_GATEWAY_SERIAL
    
    // Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
    #if F_CPU == 8000000L
    #define MY_BAUD_RATE 38400
    #endif
    
    // Flash leds on rx/tx/err
    #define MY_LEDS_BLINKING_FEATURE
    // Set blinking period
    #define MY_DEFAULT_LED_BLINK_PERIOD 300
    
    // Inverses the behavior of leds
    //#define MY_WITH_LEDS_BLINKING_INVERSE
    
    // Enable inclusion mode
    #define MY_INCLUSION_MODE_FEATURE
    // Enable Inclusion mode button on gateway
    #define MY_INCLUSION_BUTTON_FEATURE
    
    // Inverses behavior of inclusion button (if using external pullup)
    //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP
    
    // Set inclusion mode duration (in seconds)
    #define MY_INCLUSION_MODE_DURATION 60 
    // Digital pin used for inclusion mode button
    #define MY_INCLUSION_MODE_BUTTON_PIN  3 
    
    // Uncomment to override default HW configurations
    //#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
    //#define MY_DEFAULT_RX_LED_PIN  6  // Receive led pin
    //#define MY_DEFAULT_TX_LED_PIN  5  // the PCB, on board LED
    
    #include <SPI.h>
    #include <MySensor.h>  
    
    void setup() { 
      // Setup locally attached sensors
    }
    
    void presentation() {
     // Present locally attached sensors 
    }
    
    void loop() { 
      // Send locally attached sensor data here 
    }
    

    Sketch 99:

    /**
     * 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 - Henrik Ekblad
     * 
     * DESCRIPTION
     * Example sketch showing how to create a node thay repeates messages
     * from nodes far from gateway back to gateway. 
     * It is important that nodes that has enabled repeater mode calls  
     * process() frequently. Repeaters should never sleep. 
     */
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    // Enabled repeater feature for this node
    #define MY_REPEATER_FEATURE
    #define MY_NODE_ID 99
    
    #include <SPI.h>
    #include <MySensors.h>
    
    void setup() {
      
    }
    
    void presentation()  
    {  
      //Send the sensor node sketch version information to the gateway
      sendSketchInfo("Repeater Node", "1.0");
    }
    
    void loop() 
    {
    }
    

    Sketch 4:

    /* Sketch with Si7021 and battery monitoring.
    by m26872, 20151109 
    */
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_PARENT_NODE_ID 31
    #define MY_NODE_ID 4
    //#define MY_DEBUG
    
    #define MY_BAUD_RATE 9600
    
    
    #include <MySensors.h>  
    #include <Wire.h>  //This library allows you to communicate with I2C / TWI devices. 
    #include <SPI.h>
    #include <RunningAverage.h>
    
    #include <SparkFunBME280.h>
    
    
    
    //#define DEBUG   // local debug
    
    #ifdef DEBUG
    #define DEBUG_SERIAL(x) Serial.begin(x)
    #define DEBUG_PRINT(x) Serial.print(x)
    #define DEBUG_PRINTLN(x) Serial.println(x)
    #else
    #define DEBUG_SERIAL(x)
    #define DEBUG_PRINT(x) 
    #define DEBUG_PRINTLN(x) 
    #endif
    
    // #define NODE_ID 132             // <<<<<<<<<<<<<<<<<<<<<<<<<<<   Enter Node_ID
    #define CHILD_ID_HUM 0
    #define CHILD_ID_TEMP 1
    #define CHILD_ID_PRES 2
     #define SLEEP_TIME 15000 // 15s for DEBUG
    //#define SLEEP_TIME 300000   // 5 min
    #define FORCE_TRANSMIT_CYCLE 36  // 5min*12=1/hour, 5min*36=1/3hour 
    #define BATTERY_REPORT_CYCLE 2880   // Once per 5min   =>   12*24*7 = 2016 (one report/week)
    #define VMIN 1900
    #define VMAX 3300
    #define HUMI_TRANSMIT_THRESHOLD 3.0  // THRESHOLD tells how much the value should have changed since last time it was transmitted.
    #define TEMP_TRANSMIT_THRESHOLD 0.5
    #define PRES_TRANSMIT_THRESHOLD 1.0
    #define AVERAGES 2
    
    int batteryReportCounter = BATTERY_REPORT_CYCLE - 1;  // to make it report the first time.
    int measureCount = 0;
    float lastTemperature = -100;
    float lastPressure = -100;
    int lastHumidity = -100;
    
    RunningAverage raHum(AVERAGES);
    //SI7021 humiditySensor;
    BME280 mySensor;
    
    
    // MyMessage to controler
    MyMessage msgTemp(CHILD_ID_TEMP,V_TEMP); // Initialize temperature message
    MyMessage msgHum(CHILD_ID_HUM,V_HUM);
    MyMessage msgPres(CHILD_ID_PRES,V_PRESSURE);
    
    void presentation()
    {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("OUTSIDE P&T&H", "1.2");
      present(CHILD_ID_TEMP, S_TEMP);
      present(CHILD_ID_PRES, S_BARO);
      present(CHILD_ID_HUM, S_HUM);  
      DEBUG_PRINT("Node and "); DEBUG_PRINTLN("3 children presented.");
    }
    
    void setup() {
      DEBUG_SERIAL(9600);    // <<<<<<<<<<<<<<<<<<<<<<<<<< Note BAUD_RATE in MySensors.h
      DEBUG_PRINTLN("Serial started");
      
      DEBUG_PRINT("Voltage: ");
      DEBUG_PRINT(readVcc()); 
      DEBUG_PRINTLN(" mV");
    /*
      delay(500);
      DEBUG_PRINT("Internal temp: ");
      DEBUG_PRINT(GetInternalTemp()); // Probably not calibrated. Just to print something.
      DEBUG_PRINTLN(" *C");
    */  
    
      mySensor.settings.commInterface = I2C_MODE;
      mySensor.settings.I2CAddress = 0x77;
    
      //runMode can be:
      //  0, Sleep mode
      //  1 or 2, Forced mode
      //  3, Normal mode
      mySensor.settings.runMode = 1;
      mySensor.settings.filter = 0;
      mySensor.settings.tempOverSample = 1;
      mySensor.settings.pressOverSample = 1;
      mySensor.settings.humidOverSample = 1;
      
      delay(500); // Allow time for radio if power used as reset
    
      if (!mySensor.begin())
       {
        Serial.println("BME init failed!");
        while (1);
       }
      else Serial.println("BME init success!");
      
      raHum.clear();
      
    }
    
    void loop() { 
    
      measureCount ++;
      batteryReportCounter ++;
      bool forceTransmit = false;
      
      if (measureCount > FORCE_TRANSMIT_CYCLE) {
        forceTransmit = true; 
      }
      mySensor.begin();
      sendTempHumidityMeasurements(forceTransmit);
    /*
      // Read and print internal temp
      float temperature0 = static_cast<float>(static_cast<int>((GetInternalTemp()+0.5) * 10.)) / 10.;
      DEBUG_PRINT("Internal Temp: "); DEBUG_PRINT(temperature0); DEBUG_PRINTLN(" *C");        
    */
      // Check battery
      if (batteryReportCounter >= BATTERY_REPORT_CYCLE) {
        long batteryVolt = readVcc();
        DEBUG_PRINT("Battery voltage: "); DEBUG_PRINT(batteryVolt); DEBUG_PRINTLN(" mV");
        uint8_t batteryPcnt = constrain(map(batteryVolt,VMIN,VMAX,0,100),0,255);   
        DEBUG_PRINT("Battery percent: "); DEBUG_PRINT(batteryPcnt); DEBUG_PRINTLN(" %");
        sendBatteryLevel(batteryPcnt);
        batteryReportCounter = 0;
      }
      
    //  sleep(SLEEP_TIME);
    if(isTransportOK()){
        sleep(SLEEP_TIME);  // transport is OK, node can sleep
      } 
      else {
        wait(5000); // transport is not operational, allow the transport layer to fix this
      }
    }
    
    // function for reading Vcc by reading 1.1V reference against AVcc. Based from http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/
    // To calibrate reading replace 1125300L with scale_constant = internal1.1Ref * 1023 * 1000, where internal1.1Ref = 1.1 * Vcc1 (per voltmeter) / Vcc2 (per readVcc() function) 
    long readVcc() {
      // set the reference to Vcc and the measurement to the internal 1.1V reference
      ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
      delay(2); // Wait for Vref to settle
      ADCSRA |= _BV(ADSC); // Start conversion
      while (bit_is_set(ADCSRA,ADSC)); // measuring
      uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH  
      uint8_t high = ADCH; // unlocks both
      long result = (high<<8) | low;
      result = 1134738L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
      return result; // Vcc in millivolts
    }
    // function for reading internal temp. From http://playground.arduino.cc/Main/InternalTemperatureSensor 
    double GetInternalTemp(void) {  // (Both double and float are 4 byte in most arduino implementation)
      unsigned int wADC;
      double t;
      // The internal temperature has to be used with the internal reference of 1.1V. Channel 8 can not be selected with the analogRead function yet.
      ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));   // Set the internal reference and mux.
      ADCSRA |= _BV(ADEN);  // enable the ADC
      delay(20);            // wait for voltages to become stable.
      ADCSRA |= _BV(ADSC);  // Start the ADC
      while (bit_is_set(ADCSRA,ADSC));   // Detect end-of-conversion
      wADC = ADCW;   // Reading register "ADCW" takes care of how to read ADCL and ADCH.
      t = (wADC - 88.0 ) / 1.0;   // The default offset is 324.31.
      return (t);   // The returned temperature in degrees Celcius.
    }
    
    /*********************************************
     * * Sends temperature and humidity from Si7021 sensor
     * Parameters
     * - force : Forces transmission of a value (even if it's the same as previous measurement)
     *********************************************/
    void sendTempHumidityMeasurements(bool force) {
      bool tx = force;
    
      float temperature = mySensor.readTempC();
      DEBUG_PRINT("T: ");DEBUG_PRINTLN(temperature);
      float diffTemp = abs(lastTemperature - temperature);
      DEBUG_PRINT(F("TempDiff :"));DEBUG_PRINTLN(diffTemp);
      if (diffTemp > TEMP_TRANSMIT_THRESHOLD || tx) {
        send(msgTemp.set(temperature,1));
        lastTemperature = temperature;
        measureCount = 0;
        DEBUG_PRINTLN("T sent!");
      }
      
      int humidity = mySensor.readFloatHumidity();
      DEBUG_PRINT("H: ");DEBUG_PRINTLN(humidity);
      raHum.addValue(humidity);
      humidity = raHum.getAverage();  // MA sample imply reasonable fast sample frequency
      float diffHum = abs(lastHumidity - humidity);  
      DEBUG_PRINT(F("HumDiff  :"));DEBUG_PRINTLN(diffHum); 
      if (diffHum > HUMI_TRANSMIT_THRESHOLD || tx) {
        send(msgHum.set(humidity));
        lastHumidity = humidity;
        measureCount = 0;
        DEBUG_PRINTLN("H sent!");
      }
    
      float pressure = mySensor.readFloatPressure()/100.0;
      DEBUG_PRINT("P: ");DEBUG_PRINTLN(pressure);
      float diffPress = abs(lastPressure - pressure);
      DEBUG_PRINT(F("PressDiff :"));DEBUG_PRINTLN(diffPress);
      if (diffPress > PRES_TRANSMIT_THRESHOLD || tx) {
        send(msgPres.set(pressure,1));
        lastPressure = pressure;
        measureCount = 0;
        DEBUG_PRINTLN("P sent!");
      }
    
    }
    

    Sketch Node 30:

    /* Sketch with Si7021 and battery monitoring.
    by m26872, 20151109 
    */
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_DEBUG
    //#define MY_PARENT_NODE_ID 31
    //#define MY_NODE_ID 30
    
    #define MY_BAUD_RATE 9600
    
    
    #include <MySensors.h>  
    #include <Wire.h>  //This library allows you to communicate with I2C / TWI devices. 
    #include <SI7021.h>
    #include <SPI.h>
    #include <RunningAverage.h>
    
    
    #define DEBUG
    
    #ifdef DEBUG
    #define DEBUG_SERIAL(x) Serial.begin(x)
    #define DEBUG_PRINT(x) Serial.print(x)
    #define DEBUG_PRINTLN(x) Serial.println(x)
    #else
    #define DEBUG_SERIAL(x)
    #define DEBUG_PRINT(x) 
    #define DEBUG_PRINTLN(x) 
    #endif
    
    // #define NODE_ID 132             // <<<<<<<<<<<<<<<<<<<<<<<<<<<   Enter Node_ID
    #define CHILD_ID_TEMP 0
    #define CHILD_ID_HUM 1
    // #define SLEEP_TIME 15000 // 15s for DEBUG
    #define SLEEP_TIME 300000   // 5 min
    #define FORCE_TRANSMIT_CYCLE 36  // 5min*12=1/hour, 5min*36=1/3hour 
    #define BATTERY_REPORT_CYCLE 2880   // Once per 5min   =>   12*24*7 = 2016 (one report/week)
    #define VMIN 1900
    #define VMAX 3300
    #define HUMI_TRANSMIT_THRESHOLD 3.0  // THRESHOLD tells how much the value should have changed since last time it was transmitted.
    #define TEMP_TRANSMIT_THRESHOLD 0.5
    #define AVERAGES 2
    
    int batteryReportCounter = BATTERY_REPORT_CYCLE - 1;  // to make it report the first time.
    int measureCount = 0;
    float lastTemperature = -100;
    int lastHumidity = -100;
    
    RunningAverage raHum(AVERAGES);
    SI7021 humiditySensor;
    
    
    MyMessage msgTemp(CHILD_ID_TEMP,V_TEMP); // Initialize temperature message
    MyMessage msgHum(CHILD_ID_HUM,V_HUM);
    
    void presentation()
    {
    sendSketchInfo("EgTmpHumBat5min", "1.0 151106"); 
      present(CHILD_ID_TEMP, S_TEMP);   // Present sensor to controller
      present(CHILD_ID_HUM, S_HUM);
      DEBUG_PRINT("Node and "); DEBUG_PRINTLN("2 children presented.");
    }
    
    void setup() {
      DEBUG_SERIAL(9600);    // <<<<<<<<<<<<<<<<<<<<<<<<<< Note BAUD_RATE in MySensors.h
      DEBUG_PRINTLN("Serial started");
      
      DEBUG_PRINT("Voltage: ");
      DEBUG_PRINT(readVcc()); 
      DEBUG_PRINTLN(" mV");
    /*
      delay(500);
      DEBUG_PRINT("Internal temp: ");
      DEBUG_PRINT(GetInternalTemp()); // Probably not calibrated. Just to print something.
      DEBUG_PRINTLN(" *C");
    */  
      delay(500); // Allow time for radio if power useed as reset
      
      
      
      raHum.clear();
      
    }
    
    void loop() { 
    
      measureCount ++;
      batteryReportCounter ++;
      bool forceTransmit = false;
      
      if (measureCount > FORCE_TRANSMIT_CYCLE) {
        forceTransmit = true; 
      }
      sendTempHumidityMeasurements(forceTransmit);
    /*
      // Read and print internal temp
      float temperature0 = static_cast<float>(static_cast<int>((GetInternalTemp()+0.5) * 10.)) / 10.;
      DEBUG_PRINT("Internal Temp: "); DEBUG_PRINT(temperature0); DEBUG_PRINTLN(" *C");        
    */
      // Check battery
      if (batteryReportCounter >= BATTERY_REPORT_CYCLE) {
        long batteryVolt = readVcc();
        DEBUG_PRINT("Battery voltage: "); DEBUG_PRINT(batteryVolt); DEBUG_PRINTLN(" mV");
        uint8_t batteryPcnt = constrain(map(batteryVolt,VMIN,VMAX,0,100),0,255);   
        DEBUG_PRINT("Battery percent: "); DEBUG_PRINT(batteryPcnt); DEBUG_PRINTLN(" %");
        sendBatteryLevel(batteryPcnt);
        batteryReportCounter = 0;
      }
      
      sleep(SLEEP_TIME);
    }
    
    // function for reading Vcc by reading 1.1V reference against AVcc. Based from http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/
    // To calibrate reading replace 1125300L with scale_constant = internal1.1Ref * 1023 * 1000, where internal1.1Ref = 1.1 * Vcc1 (per voltmeter) / Vcc2 (per readVcc() function) 
    long readVcc() {
      // set the reference to Vcc and the measurement to the internal 1.1V reference
      ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
      delay(2); // Wait for Vref to settle
      ADCSRA |= _BV(ADSC); // Start conversion
      while (bit_is_set(ADCSRA,ADSC)); // measuring
      uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH  
      uint8_t high = ADCH; // unlocks both
      long result = (high<<8) | low;
      result = 1134738L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
      return result; // Vcc in millivolts
    }
    // function for reading internal temp. From http://playground.arduino.cc/Main/InternalTemperatureSensor 
    double GetInternalTemp(void) {  // (Both double and float are 4 byte in most arduino implementation)
      unsigned int wADC;
      double t;
      // The internal temperature has to be used with the internal reference of 1.1V. Channel 8 can not be selected with the analogRead function yet.
      ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));   // Set the internal reference and mux.
      ADCSRA |= _BV(ADEN);  // enable the ADC
      delay(20);            // wait for voltages to become stable.
      ADCSRA |= _BV(ADSC);  // Start the ADC
      while (bit_is_set(ADCSRA,ADSC));   // Detect end-of-conversion
      wADC = ADCW;   // Reading register "ADCW" takes care of how to read ADCL and ADCH.
      t = (wADC - 88.0 ) / 1.0;   // The default offset is 324.31.
      return (t);   // The returned temperature in degrees Celcius.
    }
    
    /*********************************************
     * * Sends temperature and humidity from Si7021 sensor
     * Parameters
     * - force : Forces transmission of a value (even if it's the same as previous measurement)
     *********************************************/
    void sendTempHumidityMeasurements(bool force) {
      bool tx = force;
    
      si7021_env data = humiditySensor.getHumidityAndTemperature();
      
      float temperature = data.celsiusHundredths / 100.0;
      DEBUG_PRINT("T: ");DEBUG_PRINTLN(temperature);
      float diffTemp = abs(lastTemperature - temperature);
      DEBUG_PRINT(F("TempDiff :"));DEBUG_PRINTLN(diffTemp);
      if (diffTemp > TEMP_TRANSMIT_THRESHOLD || tx) {
        send(msgTemp.set(temperature,1));
        lastTemperature = temperature;
        measureCount = 0;
        DEBUG_PRINTLN("T sent!");
      }
      
      int humidity = data.humidityPercent;
      DEBUG_PRINT("H: ");DEBUG_PRINTLN(humidity);
      raHum.addValue(humidity);
      humidity = raHum.getAverage();  // MA sample imply reasonable fast sample frequency
      float diffHum = abs(lastHumidity - humidity);  
      DEBUG_PRINT(F("HumDiff  :"));DEBUG_PRINTLN(diffHum); 
      if (diffHum > HUMI_TRANSMIT_THRESHOLD || tx) {
        send(msgHum.set(humidity));
        lastHumidity = humidity;
        measureCount = 0;
        DEBUG_PRINTLN("H sent!");
      }
    
    }
    


  • @Daniel-Oliveira Yeah, I know about these power things. I am pretty sure the power is ok. I use the caps on all my nodes. For the repeater (99) I picked a very stable 5V source and the NRF24+PA+LNA sits behind its own 3.3V regulator that has a high current output. The NRF24+PA+LNA is shielded after @Oitzu's method, so it should not interfere with itself. Actually I tried to implement all the tricks.
    Btw, all is on 2.0.0.
    GW: Nano
    99: Pro mini
    30 + 4: 1Mhz battery nodes after @m26872's "My Slim 2AA Battery Node".

    It all sounds too nice to be true... 😉



  • @tekka MYSController? No, but if you point me to a link or so I could install of course.

    Edit: Ok, I downloaded your software. It seems it is running well on my PC. I am ready to test.
    Edit2: The 1.0.0beta.


  • Admin

    @karl261 What version is it saying?



  • @tekka 1.0.0beta built 3314


  • Admin

    @karl261 Ok, then send a C_INTERNAL | I_DEBUG | R message to the GW and node 99 and upload the output.



  • @tekka So you mean I connect to my serial gateway and then issue the commands? Yes, let's see.



  • Here we go:

    10	22.08.2016 21:49:41	TX	0 - Gateway	N/A	C_INTERNAL	NO	I_DEBUG	R
    12	22.08.2016 21:49:41	RX	0 - Gateway	INTERNAL	C_INTERNAL	NO	I_DEBUG	0202
    14	22.08.2016 21:49:41	RX	0 - Gateway	INTERNAL	C_INTERNAL	NO	I_DEBUG	0303
    16	22.08.2016 21:49:41	RX	0 - Gateway	INTERNAL	C_INTERNAL	NO	I_DEBUG	0463
    18	22.08.2016 21:49:41	RX	0 - Gateway	INTERNAL	C_INTERNAL	NO	I_DEBUG	1E1E
    20	22.08.2016 21:49:42	RX	0 - Gateway	INTERNAL	C_INTERNAL	NO	I_DEBUG	1F1F
    22	22.08.2016 21:49:42	RX	0 - Gateway	INTERNAL	C_INTERNAL	NO	I_DEBUG	6363
    24	22.08.2016 21:49:42	RX	0 - Gateway	INTERNAL	C_INTERNAL	NO	I_DEBUG	8B03
    25	22.08.2016 21:50:06	TX	99 - Repeater Node	N/A	C_INTERNAL	NO	I_DEBUG	R
    28	22.08.2016 21:50:06	RX	99 - Repeater Node	INTERNAL	C_INTERNAL	NO	I_DEBUG	0000
    30	22.08.2016 21:50:06	RX	99 - Repeater Node	INTERNAL	C_INTERNAL	NO	I_DEBUG	0303
    32	22.08.2016 21:50:07	RX	99 - Repeater Node	INTERNAL	C_INTERNAL	NO	I_DEBUG	0404
    34	22.08.2016 21:50:07	RX	99 - Repeater Node	INTERNAL	C_INTERNAL	NO	I_DEBUG	1E1E
    37	22.08.2016 21:50:23	RX	2	1	C_SET	NO	V_TEMP	20.8
    39	22.08.2016 21:50:23	RX	2	0	C_SET	NO	V_HUM	76.1
    

  • Admin

    @karl261 Ok, and now send C_INTERNAL | I_DEBUG | E - first to node 99, then to the GW and finally, press Discover in MYSController. This should re-establish the routing table.



  • @tekka I received ok twice back. Now the nano (GW) is blinking like crazy. And so is the pro mini (repeater). I do a power cycle?


  • Admin

    @karl261 yup



  • @tekka Still weird:
    99 says 0203 so 02 is going via 03?? Why?
    0 says 0263 so 02 is going via 99?

    247	22.08.2016 22:15:24	TX	99 - Repeater Node	N/A	C_INTERNAL	NO	I_DEBUG	R
    250	22.08.2016 22:15:24	RX	99 - Repeater Node	INTERNAL	C_INTERNAL	NO	I_DEBUG	0000
    252	22.08.2016 22:15:24	RX	99 - Repeater Node	INTERNAL	C_INTERNAL	NO	I_DEBUG	0203
    254	22.08.2016 22:15:24	RX	99 - Repeater Node	INTERNAL	C_INTERNAL	NO	I_DEBUG	0404
    255	22.08.2016 22:15:50	TX	0 - Gateway	N/A	C_INTERNAL	NO	I_DEBUG	R
    257	22.08.2016 22:15:50	RX	0 - Gateway	INTERNAL	C_INTERNAL	NO	I_DEBUG	0263
    259	22.08.2016 22:15:50	RX	0 - Gateway	INTERNAL	C_INTERNAL	NO	I_DEBUG	6363
    

  • Admin

    @karl261 hmm...indeed, that's weird. Do you have the debug log of node 3?



  • @tekka Which log exactly? Node 3 is Mysensors 1.5... It is sitting somewhere hidden...


  • Admin

    @karl261 But you wrote:

    Btw, all is on 2.0.0.

    mixed setups are not advisable (and not supported). Please update if possible.



  • @tekka Yes, with "all" I meant those being involved in the repeater stuff.


  • Admin

    @karl261 Can you add this to node 4 (this is the relayed one?):

    #define MY_PARENT_NODE_ID 99
    #define MY_PARENT_NODE_IS_STATIC
    


  • @tekka I can add it to node 30 right now. It is also supposed to be relayed. In fact this is why I did start this thread in the first place, I had no luck with these two lines. Will try again.

    Oooohhh, there is a mistake further up: I am talking about node 30, and wrote node 3. That is incorrect. Let's see if I can edit. That is why you were asking about the 1.5...



  • @tekka Node 30 does still not care about the two lines. It is sending direct.
    It also does not send back any routing table. Maybe because it is sleeping most of the time?


  • Admin

    @karl261 If it's not defined as repeater, it won't have a routing table. And yes, sleeping nodes do not listen for incoming traffic. But still, if GW and node 99 are up, it should prefer 99 - can you show me the log of node 30 during booting?



  • @tekka Now it seems to work.

    But I recompiled, because I had MY_DEBUG commented out. Somehow there is something wrong with debug...

    Starting sensor (RNNNA-, 2.0.0)
    TSM:INIT
    TSM:RADIO:OK
    TSP:ASSIGNID:OK (ID=30)
    TSM:FPAR
    TSP:MSG:SEND 30-30-255-255 s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=bc:
    TSP:MSG:READ 3-3-30 s=255,c=3,t=8,pt=1,l=1,sg=0:1
    TSP:MSG:FPAR RES (ID=3, dist=1)
    TSP:MSG:PAR OK (ID=3, dist=2)
    TSP:MSG:READ 99-99-30 s=255,c=3,t=8,pt=1,l=1,sg=0:1
    TSP:MSG:FPAR RES (ID=99, dist=1)
    TSP:MSG:FPAR (PPAR FOUND)
    TSP:MSG:PAR OK (ID=99, dist=2)
    TSM:FPAR:OK
    TSM:ID
    TSM:CHKID:OK (ID=30)
    TSM:UPL
    TSP:PING:SEND (dest=0)
    TSP:MSG:SEND 30-30-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=ok:1
    TSP:MSG:READ 0-0-30 s=255,c=3,t=8,pt=1,l=1,sg=0:0
    TSP:MSG:FPAR RES (ID=0, dist=0)
    TSP:MSG:READ 0-99-30 s=255,c=3,t=25,pt=1,l=1,sg=0:2
    TSP:MSG:PONG RECV (hops=2)
    TSP:CHKUPL:OK
    TSM:UPL:OK
    TSM:READY
    Serial started
    Voltage: 3289 mV
    TSP:MSG:SEND 30-30-99-0 s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=ok:0100
    TSP:MSG:SEND 30-30-99-0 s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=ok:2.0.0
    TSP:MSG:SEND 30-30-99-0 s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=ok:99
    TSP:MSG:READ 0-99-30 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    TSP:MSG:SEND 30-30-99-0 s=255,c=3,t=11,pt=0,l=15,sg=0,ft=0,st=ok:EgTmpHumBat5min
    TSP:MSG:SEND 30-30-99-0 s=255,c=3,t=12,pt=0,l=10,sg=0,ft=0,st=ok:1.0 151106
    TSP:MSG:SEND 30-30-99-0 s=0,c=0,t=6,pt=0,l=0,sg=0,ft=0,st=ok:
    TSP:MSG:SEND 30-30-99-0 s=1,c=0,t=7,pt=0,l=0,sg=0,ft=0,st=ok:
    Node and 2 children presented.
    Request registration...
    TSP:MSG:SEND 30-30-99-0 s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=ok:2
    TSP:MSG:READ 0-99-30 s=255,c=3,t=27,pt=1,l=1,sg=0:1
    Node registration=1
    Init complete, id=30, parent=99, distance=2, registration=1
    T: 21.59
    TempDiff :121.59
    TSP:MSG:SEND 30-30-99-0 s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=ok:21.6
    T sent!
    H: 81
    HumDiff  :181.00
    TSP:MSG:SEND 30-30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0,ft=0,st=ok:81
    H sent!
    Battery voltage: 3279 mV
    Battery percent: 98 %
    TSP:MSG:SEND 30-30-99-0 s=255,c=3,t=0,pt=1,l=1,sg=0,ft=0,st=ok:98
    T: 21.61
    TempDiff :0.02
    H: 81
    HumDiff  :0.00
    

  • Admin

    @karl261 said:

    @tekka Now it seems to work.

    But I recompiled, because I had MY_DEBUG commented out. Somehow there is something wrong with debug...

    You mean, if MY_DEBUG is commented out, the node does not communicate over the repeater (99)?



  • @tekka Well, yes, I added the two lines you suggested, re-compiled, and then it was not using the 99. And also some posts above, I had these weird messages transmitted 6-7 times, see logs. This happend while MY_DEBUG was commented out.

    Hm, I can re-upload the sketch and see if this is reproducible.


  • Admin

    @karl261 Yes, that would be good - node 30 is running@1Mhz?



  • @tekka Yes, @1 MHz.



  • @tekka No, it seems to work as expected. Any idea why I am getting this "fail" line?

    23.08.2016 00:30:33	RX	0;255;3;0;9;TSP:MSG:READ 30-30-255 s=255,c=3,t=7,pt=0,l=0,sg=0:
    23.08.2016 00:30:33	RX	0;255;3;0;9;TSP:MSG:BC
    23.08.2016 00:30:33	RX	0;255;3;0;9;TSP:MSG:FPAR REQ (sender=30)
    23.08.2016 00:30:33	RX	0;255;3;0;9;TSP:CHKUPL:OK
    23.08.2016 00:30:33	RX	0;255;3;0;9;TSP:MSG:GWL OK
    23.08.2016 00:30:34	RX	0;255;3;0;9;TSP:MSG:SEND 0-0-30-30 s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=ok:0
    23.08.2016 00:30:34	RX	0;255;3;0;9;TSP:MSG:READ 99-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:1
    23.08.2016 00:30:34	RX	0;255;3;0;9;TSP:MSG:PINGED (ID=99, hops=1)
    23.08.2016 00:30:34	RX	0;255;3;0;9;TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=ok:1
    23.08.2016 00:30:34	RX	0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=24,pt=1,l=1,sg=0:2
    23.08.2016 00:30:34	RX	0;255;3;0;9;TSP:MSG:PINGED (ID=30, hops=2)
    23.08.2016 00:30:34	RX	0;255;3;0;9;TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=ok:1
    23.08.2016 00:30:35	RX	0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    23.08.2016 00:30:35	RX	0;255;3;0;9;!TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=fail:0100
    23.08.2016 00:30:35	RX	0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=6,pt=1,l=1,sg=0:99
    23.08.2016 00:30:35	RX	30;255;3;0;6;99
    23.08.2016 00:30:35	TX	30;255;3;0;6;M
    23.08.2016 00:30:35	RX	0;255;3;0;9;TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=6,pt=0,l=1,sg=0,ft=0,st=ok:M
    23.08.2016 00:30:35	RX	0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=12,pt=0,l=10,sg=0:1.0 151106
    23.08.2016 00:30:35	RX	30;255;3;0;12;1.0 151106
    23.08.2016 00:30:35	RX	0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=0,t=7,pt=0,l=0,sg=0:
    23.08.2016 00:30:35	RX	30;1;0;0;7;
    23.08.2016 00:30:35	DEBUG	Update child id=1, type=S_HUM
    23.08.2016 00:30:35	RX	0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=26,pt=1,l=1,sg=0:2
    23.08.2016 00:30:35	RX	0;255;3;0;9;TSP:MSG:SEND 0-0-99-30 s=255,c=3,t=27,pt=1,l=1,sg=0,ft=0,st=ok:1
    23.08.2016 00:30:35	RX	0;255;3;0;9;TSP:MSG:READ 30-99-0 s=0,c=1,t=0,pt=7,l=5,sg=0:24.3
    23.08.2016 00:30:35	RX	30;0;1;0;0;24.3
    23.08.2016 00:30:35	RX	0;255;3;0;9;TSP:MSG:READ 30-99-0 s=1,c=1,t=1,pt=2,l=2,sg=0:73
    23.08.2016 00:30:35	RX	30;1;1;0;1;73
    23.08.2016 00:30:35	RX	0;255;3;0;9;TSP:MSG:READ 30-99-0 s=255,c=3,t=0,pt=1,l=1,sg=0:91
    23.08.2016 00:30:35	RX	30;255;3;0;0;91
    

  • Admin

    @karl261 Does it fail regularly?



  • @tekka yes, these fails come and go, I see them all the time, but not at the same place necessarily. The logs posted above show plenty of them.

    I don't understand this radio trouble.,the distances between the nodes are not long. The radios are all connected using all tricks, the relay is a nrf24+pa+lna which is located in a good location... Maybe all radios are crap? There is only one wifi network and it is not very busy... It's my own. Maybe I should change the channel? 110 or so sounds good. I am using default now. Power is set to max for all nodes, the nrf24+pa+lna is shielded from itself, I put small antenna extensions on the normal ones after @petewill, they all have nice caps, gw and repeater have excellent power sources, ...

    I found a script how to test nrf radios... Maybe I should try that?

    If I was going to buy new radios, just to try, which ones are the best???

    Edit: Hm, I think if I use antennas, it really helps if they all point into the same direction. Like all horizontal or all vertical. Which would make sens, wouldn't it?



  • @tekka But now I found something: the repeater sketch does not work, if MY_DEBUG is commented out. I tried several times forth and back. On the gw I get the output below.

    0;255;3;0;9;TSP:MSG:READ 99-99-255 s=255,c=3,t=7,pt=0,l=0,sg=0:
    0;255;3;0;9;TSP:MSG:BC
    0;255;3;0;9;TSP:MSG:FPAR REQ (sender=99)
    0;255;3;0;9;TSP:CHKUPL:OK
    0;255;3;0;9;TSP:MSG:GWL OK
    0;255;3;0;9;!TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=fail:0
    0;255;3;0;9;TSP:MSG:READ 99-99-255 s=255,c=3,t=7,pt=0,l=0,sg=0:
    0;255;3;0;9;TSP:MSG:BC
    0;255;3;0;9;TSP:MSG:FPAR REQ (sender=99)
    0;255;3;0;9;TSP:CHKUPL:OK (FLDCTRL)
    0;255;3;0;9;TSP:MSG:GWL OK
    0;255;3;0;9;!TSP:MSG:SEND 0-0-99-99 s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=fail:0
    

  • Admin

    @karl261 That's weird - I've just tested that scenario and everything is fine here.
    Can you add an indicator in loop() to make sure the repeater sketch is running? Also, what board are you using as repeater and how do you power it?



  • @tekka I will try this a bit later, thanks.
    Right now I am going crazy, the node is again not using the defined parent. Did I overlook something in the sketch?

    Starting sensor (RNNNA-, 2.0.0)
    TSM:INIT
    TSM:RADIO:OK
    TSP:ASSIGNID:OK (ID=4)
    TSM:FPAR
    TSP:MSG:SEND 4-4-255-255 s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=bc:
    TSP:MSG:READ 0-0-4 s=255,c=3,t=8,pt=1,l=1,sg=0:0
    TSP:MSG:FPAR RES (ID=0, dist=0)
    TSP:MSG:PAR OK (ID=0, dist=1)
    TSM:FPAR:OK
    TSM:ID
    TSM:CHKID:OK (ID=4)
    TSM:UPL
    TSP:PING:SEND (dest=0)
    TSP:MSG:SEND 4-4-0-0 s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=ok:1
    TSP:MSG:READ 0-0-4 s=255,c=3,t=25,pt=1,l=1,sg=0:1
    TSP:MSG:PONG RECV (hops=1)
    TSP:CHKUPL:OK
    TSM:UPL:OK
    TSM:READY
    BME init success!
    TSP:MSG:SEND 4-4-0-0 s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=ok:0100
    TSP:MSG:SEND 4-4-0-0 s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=ok:2.0.0
    TSP:MSG:SEND 4-4-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=ok:0
    TSP:MSG:READ 0-0-4 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    TSP:MSG:SEND 4-4-0-0 s=255,c=3,t=11,pt=0,l=13,sg=0,ft=0,st=ok:OUTSIDE P&T&H
    TSP:MSG:SEND 4-4-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=ok:1.2
    TSP:MSG:SEND 4-4-0-0 s=1,c=0,t=6,pt=0,l=0,sg=0,ft=0,st=ok:
    TSP:MSG:SEND 4-4-0-0 s=2,c=0,t=8,pt=0,l=0,sg=0,ft=0,st=ok:
    TSP:MSG:SEND 4-4-0-0 s=0,c=0,t=7,pt=0,l=0,sg=0,ft=0,st=ok:
    Request registration...
    TSP:MSG:SEND 4-4-0-0 s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=ok:2
    TSP:MSG:READ 0-0-4 s=255,c=3,t=27,pt=1,l=1,sg=0:1
    Node registration=1
    Init complete, id=4, parent=0, distance=1, registration=1
    TSP:MSG:SEND 4-4-0-0 s=1,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=ok:24.7
    TSP:MSG:SEND 4-4-0-0 s=0,c=1,t=1,pt=2,l=2,sg=0,ft=0,st=ok:57
    TSP:MSG:SEND 4-4-0-0 s=2,c=1,t=4,pt=7,l=5,sg=0,ft=0,st=ok:1012.9
    TSP:MSG:SEND 4-4-0-0 s=255,c=3,t=0,pt=1,l=1,sg=0,ft=0,st=ok:115
    
    /* Sketch with Si7021 and battery monitoring.
    by m26872, 20151109 
    */
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    #define MY_PARENT_NODE_ID 99
    #define MY_PARENT_NODE_IS_STATIC
    #define MY_NODE_ID 4
    #define MY_DEBUG
    
    #define MY_BAUD_RATE 9600
    
    
    #include <MySensors.h>  
    #include <Wire.h>  //This library allows you to communicate with I2C / TWI devices. 
    #include <SPI.h>
    #include <RunningAverage.h>
    
    #include <SparkFunBME280.h>
    
    
    
    //#define DEBUG   // local debug
    
    #ifdef DEBUG
    #define DEBUG_SERIAL(x) Serial.begin(x)
    #define DEBUG_PRINT(x) Serial.print(x)
    #define DEBUG_PRINTLN(x) Serial.println(x)
    #else
    #define DEBUG_SERIAL(x)
    #define DEBUG_PRINT(x) 
    #define DEBUG_PRINTLN(x) 
    #endif
    
    // #define NODE_ID 132             // <<<<<<<<<<<<<<<<<<<<<<<<<<<   Enter Node_ID
    #define CHILD_ID_HUM 0
    #define CHILD_ID_TEMP 1
    #define CHILD_ID_PRES 2
     #define SLEEP_TIME 15000 // 15s for DEBUG
    //#define SLEEP_TIME 300000   // 5 min
    #define FORCE_TRANSMIT_CYCLE 36  // 5min*12=1/hour, 5min*36=1/3hour 
    #define BATTERY_REPORT_CYCLE 2880   // Once per 5min   =>   12*24*7 = 2016 (one report/week)
    #define VMIN 1900
    #define VMAX 3300
    #define HUMI_TRANSMIT_THRESHOLD 3.0  // THRESHOLD tells how much the value should have changed since last time it was transmitted.
    #define TEMP_TRANSMIT_THRESHOLD 0.5
    #define PRES_TRANSMIT_THRESHOLD 1.0
    #define AVERAGES 2
    
    int batteryReportCounter = BATTERY_REPORT_CYCLE - 1;  // to make it report the first time.
    int measureCount = 0;
    float lastTemperature = -100;
    float lastPressure = -100;
    int lastHumidity = -100;
    
    RunningAverage raHum(AVERAGES);
    //SI7021 humiditySensor;
    BME280 mySensor;
    
    
    // MyMessage to controler
    MyMessage msgTemp(CHILD_ID_TEMP,V_TEMP); // Initialize temperature message
    MyMessage msgHum(CHILD_ID_HUM,V_HUM);
    MyMessage msgPres(CHILD_ID_PRES,V_PRESSURE);
    
    void presentation()
    {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("OUTSIDE P&T&H", "1.2");
      present(CHILD_ID_TEMP, S_TEMP);
      present(CHILD_ID_PRES, S_BARO);
      present(CHILD_ID_HUM, S_HUM);  
      DEBUG_PRINT("Node and "); DEBUG_PRINTLN("3 children presented.");
    }
    
    void setup() {
      DEBUG_SERIAL(9600);    // <<<<<<<<<<<<<<<<<<<<<<<<<< Note BAUD_RATE in MySensors.h
      DEBUG_PRINTLN("Serial started");
      
      DEBUG_PRINT("Voltage: ");
      DEBUG_PRINT(readVcc()); 
      DEBUG_PRINTLN(" mV");
    /*
      delay(500);
      DEBUG_PRINT("Internal temp: ");
      DEBUG_PRINT(GetInternalTemp()); // Probably not calibrated. Just to print something.
      DEBUG_PRINTLN(" *C");
    */  
    
      mySensor.settings.commInterface = I2C_MODE;
      mySensor.settings.I2CAddress = 0x77;
    
      //runMode can be:
      //  0, Sleep mode
      //  1 or 2, Forced mode
      //  3, Normal mode
      mySensor.settings.runMode = 1;
      mySensor.settings.filter = 0;
      mySensor.settings.tempOverSample = 1;
      mySensor.settings.pressOverSample = 1;
      mySensor.settings.humidOverSample = 1;
      
      delay(500); // Allow time for radio if power used as reset
    
      if (!mySensor.begin())
       {
        Serial.println("BME init failed!");
        while (1);
       }
      else Serial.println("BME init success!");
      
      raHum.clear();
      
    }
    
    void loop() { 
    
      measureCount ++;
      batteryReportCounter ++;
      bool forceTransmit = false;
      
      if (measureCount > FORCE_TRANSMIT_CYCLE) {
        forceTransmit = true; 
      }
      mySensor.begin();
      sendTempHumidityMeasurements(forceTransmit);
    /*
      // Read and print internal temp
      float temperature0 = static_cast<float>(static_cast<int>((GetInternalTemp()+0.5) * 10.)) / 10.;
      DEBUG_PRINT("Internal Temp: "); DEBUG_PRINT(temperature0); DEBUG_PRINTLN(" *C");        
    */
      // Check battery
      if (batteryReportCounter >= BATTERY_REPORT_CYCLE) {
        long batteryVolt = readVcc();
        DEBUG_PRINT("Battery voltage: "); DEBUG_PRINT(batteryVolt); DEBUG_PRINTLN(" mV");
        uint8_t batteryPcnt = constrain(map(batteryVolt,VMIN,VMAX,0,100),0,255);   
        DEBUG_PRINT("Battery percent: "); DEBUG_PRINT(batteryPcnt); DEBUG_PRINTLN(" %");
        sendBatteryLevel(batteryPcnt);
        batteryReportCounter = 0;
      }
      
      sleep(SLEEP_TIME);
    //if(isTransportOK()){
    //    sleep(SLEEP_TIME);  // transport is OK, node can sleep
    //  } 
    //  else {
    //    wait(5000); // transport is not operational, allow the transport layer to fix this
    //  }
    }
    
    // function for reading Vcc by reading 1.1V reference against AVcc. Based from http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/
    // To calibrate reading replace 1125300L with scale_constant = internal1.1Ref * 1023 * 1000, where internal1.1Ref = 1.1 * Vcc1 (per voltmeter) / Vcc2 (per readVcc() function) 
    long readVcc() {
      // set the reference to Vcc and the measurement to the internal 1.1V reference
      ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
      delay(2); // Wait for Vref to settle
      ADCSRA |= _BV(ADSC); // Start conversion
      while (bit_is_set(ADCSRA,ADSC)); // measuring
      uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH  
      uint8_t high = ADCH; // unlocks both
      long result = (high<<8) | low;
      result = 1134738L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
      return result; // Vcc in millivolts
    }
    // function for reading internal temp. From http://playground.arduino.cc/Main/InternalTemperatureSensor 
    double GetInternalTemp(void) {  // (Both double and float are 4 byte in most arduino implementation)
      unsigned int wADC;
      double t;
      // The internal temperature has to be used with the internal reference of 1.1V. Channel 8 can not be selected with the analogRead function yet.
      ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));   // Set the internal reference and mux.
      ADCSRA |= _BV(ADEN);  // enable the ADC
      delay(20);            // wait for voltages to become stable.
      ADCSRA |= _BV(ADSC);  // Start the ADC
      while (bit_is_set(ADCSRA,ADSC));   // Detect end-of-conversion
      wADC = ADCW;   // Reading register "ADCW" takes care of how to read ADCL and ADCH.
      t = (wADC - 88.0 ) / 1.0;   // The default offset is 324.31.
      return (t);   // The returned temperature in degrees Celcius.
    }
    
    /*********************************************
     * * Sends temperature and humidity from Si7021 sensor
     * Parameters
     * - force : Forces transmission of a value (even if it's the same as previous measurement)
     *********************************************/
    void sendTempHumidityMeasurements(bool force) {
      bool tx = force;
    
      float temperature = mySensor.readTempC();
      DEBUG_PRINT("T: ");DEBUG_PRINTLN(temperature);
      float diffTemp = abs(lastTemperature - temperature);
      DEBUG_PRINT(F("TempDiff :"));DEBUG_PRINTLN(diffTemp);
      if (diffTemp > TEMP_TRANSMIT_THRESHOLD || tx) {
        send(msgTemp.set(temperature,1));
        lastTemperature = temperature;
        measureCount = 0;
        DEBUG_PRINTLN("T sent!");
      }
      
      int humidity = mySensor.readFloatHumidity();
      DEBUG_PRINT("H: ");DEBUG_PRINTLN(humidity);
      raHum.addValue(humidity);
      humidity = raHum.getAverage();  // MA sample imply reasonable fast sample frequency
      float diffHum = abs(lastHumidity - humidity);  
      DEBUG_PRINT(F("HumDiff  :"));DEBUG_PRINTLN(diffHum); 
      if (diffHum > HUMI_TRANSMIT_THRESHOLD || tx) {
        send(msgHum.set(humidity));
        lastHumidity = humidity;
        measureCount = 0;
        DEBUG_PRINTLN("H sent!");
      }
    
      float pressure = mySensor.readFloatPressure()/100.0;
      DEBUG_PRINT("P: ");DEBUG_PRINTLN(pressure);
      float diffPress = abs(lastPressure - pressure);
      DEBUG_PRINT(F("PressDiff :"));DEBUG_PRINTLN(diffPress);
      if (diffPress > PRES_TRANSMIT_THRESHOLD || tx) {
        send(msgPres.set(pressure,1));
        lastPressure = pressure;
        measureCount = 0;
        DEBUG_PRINTLN("P sent!");
      }
    
    }
    


  • Total madness: I uploaded the same sketch again, and now it is using 99.

    Questions:

    1. Can I see in the log whether it "found" the parent or if it is using the parent I put into the sketch?
    2. Is it possible to avoid this transport failure counter? Like, when I put
      #define MY_PARENT_NODE_ID 99
      #define MY_PARENT_NODE_IS_STATIC
      into my sketch I just want the node to send, whether it reaches the parent or not. Is that possible?


  • @karl261 said:

    @tekka But now I found something: the repeater sketch does not work, if MY_DEBUG is commented out. I tried several times forth and back. On the gw I get the output below.

    I checked and re-programmed the repeater. It seems that it has gone away. I can use my repeater without MY_DEBUG. I don't know what caused this, but the repeater is working now.


Log in to reply
 

Suggested Topics

1
Online

11.2k
Users

11.1k
Topics

112.5k
Posts