Search not working for me . Firefox browser.
Posts made by Nigel31
-
RE: Forum Search not working?
-
RE: Sensebender Gateway 1.0 - Init weirdness...
Hi all,
This is what I Simply ended up with to clear the eeprom,
// load core modules only #define MY_CORE_ONLY #include <MySensors.h> void before(){ Serial.begin(115200); Serial.println("Started clearing. Please wait..."); for (uint16_t i=0; i<EEPROM_LOCAL_CONFIG_ADDRESS; i++) { hwWriteConfig(i,0xFF); } Serial.println("Clearing done."); } void setup() { Serial.begin(115200); Serial.println("Started clearing. Please wait..."); for (uint16_t i=0; i<EEPROM_LOCAL_CONFIG_ADDRESS; i++) { hwWriteConfig(i,0xFF); Serial.println(i); } Serial.println("Clearing done."); } void loop() { // Nothing to do here... }
-
RE: Sensebender Gateway 1.0 - Init weirdness...
@tomtastic
Hi, I had similar problems in the last year. There is definitely a issue with the clear eeprom sketch, I ended up having to make changes myself, in order to correctly wipe it. When I'm next on my pc I'll post the sketch.Regards Nigel
-
signal report functionality 2.2.0 to 2.3.2 changes?
Hi.
I have been using a child to report signal strength. All working on various nodes at 2.2.0
Gateway is now at 2.3.2
Nodes that thabe been upgraded to 2.3.2 now only ever report zero for the
send(msgRxRSSI.set(transportGetSignalReport(SR_RX_RSSI)));
I have set the define MY_SIGNAL_REPORT_ENABLED
Having found the requirement in the forum (didn't need to set in 2.2.0)
What else?To reiterate builds of the same code in 2.2.0 work. Builds of 2.3.2 don't.
Suggestions please.
Regards Nigel
-
RE: Sudden Dead node, and consequent !TSM:FPAR:NO REPLY
I have built new node, reusing PIR sensor, discrete resistors and caps, plus regulator. New pro mini and rfm69 and base PCB. Had to replace these items at once, as no real possibility of removing them. Worked straight away. I am assuming that the output stage of the rfm69 module had died, given that mysensors wasn't complaining about coms to the module.
-
RE: Sudden Dead node, and consequent !TSM:FPAR:NO REPLY
Hi,
Yes cheap clones for me too.
Vcc remains at 3.282v (external egulator) after having been away from it for 10 days, lipo battery is still at 4.08v, with it constantly trying to find a parent.
Decent explanation though, I'm going to have to build another I think.Many thanks,
Nigel -
Sudden Dead node, and consequent !TSM:FPAR:NO REPLY
Hi all,
A quick sence check please, before I have to build a new node.
One of my battery powered PIR sensors in the home, suddenly stopped communicating, node has been in existence for well over 18 months, working flawlessly, no hangups or anything.
I received a email from my domoticz system, when there had been no coms for a period of time from the node.
I looked at the reported battery voltage, and thought, ok, time for a recharge (LIPO battery), in fact it's first recharge.
after charging, nothing, did not show up again in domoticz, so plugged into the pro-mini, to see the serial output, of which there wasn't any, as the debug wasn't enabled. Reflashed code, with debug enabled, and node cannot find any parent? whilst I am going this, I am sat on my sofa, 10 feet from the gateway, and another node which is a repeater. I fiddle with the tx power, to make sure it's now not too high, for its current (temporary location) I try it in it's normal location as well, equally no joy.Here is the log, well a bit of it
60194 TSF:TRI:TSB Motion 0 60246 !MCO:SND:NODE NOT REG RAWbatcount :987 batV :4.10 batP :88 60665 !MCO:SND:NODE NOT REG 60667 !MCO:SND:NODE NOT REG Sleep 3000 60672 MCO:SLP:MS=3000,SMS=0,I1=255,M1=255,I2=255,M2=255 60678 !MCO:SLP:TNR Sleep infinit 63680 MCO:SLP:MS=3600000,SMS=0,I1=1,M1=1,I2=255,M2=255 63686 !MCO:SLP:TNR 66232 TSM:FAIL:RE-INIT 66234 TSM:INIT 66236 TSM:INIT:TSP OK 66240 TSM:INIT:STATID=21 66242 TSF:SID:OK,ID=21 66244 TSM:FPAR 67246 ?TSF:MSG:SEND,21-21-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 69255 !TSM:FPAR:NO REPLY 69257 TSM:FPAR 70260 ?TSF:MSG:SEND,21-21-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 72269 !TSM:FPAR:NO REPLY 72271 TSM:FPAR 73273 ?TSF:MSG:SEND,21-21-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 73689 MCO:SLP:MS=3589999 73691 TSF:TDI:TSL 73693 MCO:SLP:WUP=1 73695 TSF:TRI:TSB Motion 0 73748 !MCO:SND:NODE NOT REG RAWbatcount :987 batV :4.10 batP :88 74166 !MCO:SND:NODE NOT REG 74168 !MCO:SND:NODE NOT REG Sleep 3000 74172 MCO:SLP:MS=3000,SMS=0,I1=255,M1=255,I2=255,M2=255 74178 !MCO:SLP:TNR 75282 !TSM:FPAR:NO REPLY 75284 TSM:FPAR 76288 ?TSF:MSG:SEND,21-21-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: Sleep infinit 77180 MCO:SLP:MS=3600000,SMS=0,I1=1,M1=1,I2=255,M2=255 77187 !MCO:SLP:TNR 78297 !TSM:FPAR:FAIL 78299 TSM:FAIL:CNT=4 78301 TSM:FAIL:DIS 78303 TSF:TDI:TSL 87189 MCO:SLP:MS=3590000 87191 TSF:TDI:TSL
here is the battery voltage graph before failure
and a switch log, showing the working connection, when the voltage had dropped / dropping.
given that the voltage has dropped very quickly in recent time , see years chart below.
Do people think there has been a catastrophic failure on the radio module (RFM69HW)?
Here is the sketch, in reflashing this node to enable the debug, the version migrated from 2.2.0 to 2.3.2
I have also tried clearing the eeprom, and have restarted domoticz.// Enable debug prints //#define MY_DEBUG //#define MY_DEBUG_VERBOSE //#define MY_DEBUG_VERBOSE_RFM69 //#define MY_DEBUG_VERBOSE_SIGNING //#define MY_SIGNING_SOFT //#define MY_SIGNING_SOFT_RANDOMSEED_PIN 7 //#define MY_SIGNING_REQUEST_SIGNATURES #define MY_SPLASH_SCREEN_DISABLED //#define MY_DISABLE_RAM_ROUTING_TABLE_FEATURE #define MY_TRANSPORT_WAIT_READY_MS 20000 // Enable and select radio type attached //#define MY_REPEATER_FEATURE #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RFM69_433MHZ // Set your frequency here //#define MY_RFM69_MAX_POWER_LEVEL_DBM (13) // max. TX power 10dBm = 10mW #define MY_RFM69_TX_POWER_DBM (13) #define MY_IS_RFM69HW // Omit if your RFM is not "H" //#define MY_RF69_IRQ_PIN 2 //#define MY_RFM69_CS_PIN 9 // NSS. Use MY_RF69_SPI_CS for older versions (before 2.2.0) //#define MY_RFM69_ENABLE_ENCRYPTION //#define MY_RFM69_NETWORKID 100 // Default is 100 in lib. Uncomment it and set your preferred network id if needed #define MY_NODE_ID 21 //#include <MyConfig.h> //#include <Filter.h> #include <MySensors.h> //#include <TimeLib.h> //#include <Bounce2.h> //#include <avr/wdt.h> #include <Vcc.h> #define VCC_MIN 3.0 #define VCC_MAX 4.25 Vcc vcc; int rawbatteryLevel = 0; int prevbatterylevel=0; int scaledbatterylevel = 0; uint8_t batP = 100; float batV = 3.250; int oldBatteryPcnt = 0; const float BatVccMin = 3000; // Minimum expected Battery Vcc level, in Volts. const float BatVccMax = 4250; // Maximum expected BatteryVcc level, in Volts. const int MaxBattCount = 1023; const float BatVccCorrection = 4.15 / 4.18; // Measured Battery Vcc by multimeter divided by reported Vcc #define CHILD_ID_PRESENCE 4 #define CHILD_ID_RX_RSSI 5 #define CHILD_ID_BATVCC 6 int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point const int PresenceDetect = 3; const long interval = 20000; unsigned long previousMillis,previousrelayMillis,previouprescence= 0; unsigned long debouncetime =0; bool myprescenceDetected = 0; bool Relaystate = 0; bool uplinkAvailable = true; bool requestState; bool firstStart = true; unsigned long MYsleepTime = 3600000;//SLEEP_SEC*1000 * SLEEP_MINS * 60 ; //period_t is an enum type defined in the LowPower library (LowPower.h) int sleepcnt =0; volatile long currenttime = 0; volatile long temptime = 0; //long lightLevel = 0; // Initialize message MyMessage msgPrescenceDetect(CHILD_ID_PRESENCE, V_TRIPPED); MyMessage msgRxRSSI(CHILD_ID_RX_RSSI, V_LEVEL); MyMessage msgVcc(CHILD_ID_BATVCC, V_VOLTAGE); void setup() { // put your setup code here, to run once: pinMode(PresenceDetect, INPUT); // interruptPin pinMode(2, INPUT_PULLUP); // interruptPin2 EIFR = (1<<INTF0) | (1<<INTF1);// prevent initial trigger, clear interrupt wait(100); EIFR = (1<<INTF0) | (1<<INTF1); // attachInterrupt(digitalPinToInterrupt(PresenceDetect), prescenceDetected, RISING); wdt_disable(); // Might be redundant as the bootloader should have done this already analogReference(INTERNAL); }//end setup void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Motion Sensor", "1.0.1"); // Register all sensors to gw (they will be created as child devices) // present(CHILD_ID_LIGHTLEVEL, S_LIGHT_LEVEL,"LIGHT_LEVEL",true); // wait(250); present(CHILD_ID_RX_RSSI, S_SOUND, "Motion RX RSSI",true); wait(1000); present(CHILD_ID_PRESENCE, S_MOTION, "Prescence", true); wait(250); present(CHILD_ID_BATVCC, S_MULTIMETER, "Motion Battery V"); }//end presentation void loop() { // put your main code here, to run repeatedly: // Read digital motion value wait(50);// wait a bit, then read in level, avoid spurious noise as PIR holds high state for 27sec bool Motion = digitalRead(PresenceDetect) == HIGH; Serial.print("Motion "); Serial.println(Motion); send(msgPrescenceDetect.set(Motion?"1":"0")); // Send tripped value to gw // get the battery Voltage if(Motion == 0){ wait(5); rawbatteryLevel = analogRead(BATTERY_SENSE_PIN);// if(prevbatterylevel != rawbatteryLevel){ wait(5); long tempV=0; for(int i=1;i<=50;i++){ wait(5); rawbatteryLevel = analogRead(BATTERY_SENSE_PIN);// tempV=tempV + rawbatteryLevel; } rawbatteryLevel = tempV/50; prevbatterylevel = rawbatteryLevel; float scaledbatterylevel = map(rawbatteryLevel,0,MaxBattCount,0,BatVccMax );// changed it to milivolts float batV = scaledbatterylevel /(1000); // Battery voltage uint8_t batP = (((scaledbatterylevel - BatVccMin)*100)/(BatVccMax-BatVccMin)); //((input - min) * 100) / (max - min) #ifdef MY_DEBUG Serial.print("RAWbatcount :"); Serial.println(rawbatteryLevel); Serial.print("batV :"); Serial.println(batV); Serial.print("batP :"); Serial.println(batP); #endif wait(100); float volts = vcc.Read_Volts(); send(msgVcc.set(batV,2),false); if (oldBatteryPcnt != batP) { sendBatteryLevel(batP); oldBatteryPcnt = batP; } RX_SEND(); } } Serial.println("Sleep 3000"); sleep(3000); Serial.println("Sleep infinit"); // EIFR = 1;// clear interrupts // EIFR = 2; EIFR = (1<<INTF0) | (1<<INTF1);// clear interrupts sleep(digitalPinToInterrupt(PresenceDetect), CHANGE, MYsleepTime); }// end loop void receive(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.isAck()) { #ifdef MY_DEBUG Serial.println("+Ack FMGW"); #endif } #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getFloat()); #endif if (message.type == V_STATUS || S_HEATER || V_LIGHT || V_HVAC_SETPOINT_HEAT || V_TEMP || S_HVAC) { if (message.getCommand() == 2){// THIS PROCESSES THE CONTROLLERS EXPECTED STATE OF THE OUTPUT // put code here to be executed when the message is from a request #ifdef MY_DEBUG Serial.print("REQ_Msg :"); Serial.print(message.type); Serial.print(" MsgCmd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif switch (message.sensor) {// the child ID case 1: break; case 6: break; } // end switch }// end msg=2 if (message.getCommand() == 1){// THIS PROCESSES DIRECTED COMMANDS #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif switch (message.sensor) {// the child ID case 1: break; case 3: break; case 6: break; } // end switch }// end if msg = 1 }// end msg type function }// end void loop void prescenceDetected() { // action when interrupt button doesnt really do anyhing as edge triggered currenttime = millis(); if ((currenttime - debouncetime) > 2000) { myprescenceDetected = 1; } debouncetime = currenttime; } void RX_SEND() { send(msgRxRSSI.set(transportGetSignalReport(SR_RX_RSSI))); } void sendBatteryReport() { float p = vcc.Read_Perc(VCC_MIN, VCC_MAX, true); int batP = static_cast<int>(p); #ifdef MY_DEBUG Serial.print("Battery is: "); Serial.println(batP); #endif sendBatteryLevel(batP); } /* // This is called when a new time value was received void receiveTime(unsigned long controllerTime) { // Ok, set incoming time #ifdef MY_DEBUG Serial.print("Time value received: "); #endif if (controllerTime > 1525129200){ setTime(controllerTime); #ifdef MY_DEBUG Serial.print("Time value valid: "); Serial.println(controllerTime); #endif // RTC.set(controllerTime); // this sets the RTC to the time from controller - which we do want periodically timeReceived = true; #ifdef MY_DEBUG Serial.print(hour()); Serial.print(" "); Serial.print(minute()); Serial.print(" "); Serial.print(second()); Serial.print(" "); Serial.print(day()); Serial.print(" "); Serial.print(month()); Serial.print(" "); Serial.print(year()); Serial.println(); #endif } } */
Any suggestions gratefully received.
Regards
Nigel -
RE: Questions about an old setup
@dbemowsk
I can only comment on the Controlicz skill. I did a trial for myself, lasting 5 or 6 months, and it worked very well. I discontinued only because of my basic tennet of not wanting to allow data outside of where it needs to be, and wanted to see if the convenience of voice control was worth it. I decided for me, it is too high a price to pay, but it did work very well.Regards Nigel
-
RE: Sleep3 class to be used with many interrupts
@cvdenzen
I for one am interested, I have raised issues I have had with sleep, and interrupts in other forum entries. -
RE: Is it possible to extract child ID from a just sent message?
I Guess given the lack of response, that the answer is no.
I am passing the child ID to my function as a separate int.
-
RE: Blockley in Domoticz-not working correctly. Anyone know how to fix.... ?
@Bren
Hi, I don't use blocky myself, however 2 questions for you.- for something so simple, why not use the timer feature to turn on at xx mins before sunset, and turn off at another time.
- what triggers your blocky? If it's never being called, then your comparison is never made or actioned.
Regards Nigel
-
Is it possible to extract child ID from a just sent message?
Hi,
In my ongoing effort to ensure end to end data transmission of some more critical data, is it possible to extract / retrieve the constituent elements of a message, just sent. in the manner of an incoming message in the receive() function?
i.e. can I in a separate function, handling the "logging" of outgoing messages (to be compared to incoming echos) do something likesend(msgSPFlag.set(SPupdateFlag), true); ChildIDtoCheck = message.sensor;
My aim would be to put the sent childID's into a buffer and then loop through the childID's (in the buffer) in the receive function, and then remove them from the buffer on successful receipt of an echo, if this works, I could possibly expand this to check the actual message payload against what was sent, but that is probably unnecessary.
If that isn't possible, than I'll just have to pass the child to my function as well, but it would be nicer if I can "extract" it.
Many thanks Nigel
-
RE: Problem with Recursive calls on signed node (Solved)
Dear all,
I have removed code for "resending" if no hardware ack.
I have come to the conclusion that having wait(200); or even wait(1000); after a send, but before another send, can result in the above recursive calls log entries, when "collision" occurs in the code,
My node is now stable again, and running on 2.3.2.
I still loose many transmissions to the node, but am compensating, (as I had prior to the resending code) by the setting of flags, both in the node and on the controller, such that the controller resends the data, untill the " I have had an update on child x" flag is reset, this works, although not in a near realtime way, but sufficient for the changing of setpoints on the thermostat.
I did try a repeater, but that didn't help.Many thanks for the input
Nigel -
RE: Problem with Recursive calls on signed node (Solved)
@virtualmkr
The logs already show that preceding the recursive calls that TXError1 for example proceeds the entries. In and off itself I thought it a little suggestive, as I couldn't see any without a retransmitted effort. (There wouldn't be a entry at all if the first transmission successfully occurred)
I'll wind things back to no retransmissions, and see how that behaves. I'm not sure how to use a state machine for this, I've got some reading and experimenting to do. Any hints or know of any other code out there in the mysensors world to check for successfull end to end transmissions, and consequently retransmissions?Many thanks for the input
Regards Nigel
-
RE: Problem with Recursive calls on signed node (Solved)
Many thanks for the input. I don't use wait() within the receive function, however, as part of my "mittigation" for lost / failed coms, I have the following code. Do you believe looking at it, that the wait(repeatdelay); after the send(msg,ack); preceeding it, may end up with "collisions" in the case of a delayed response?
If these occurrences are not harmful as such, I am not sure what else I may have done to cause the vast decrease in the node's stability.
bool resend(MyMessage & msg, bool ack, int repeats) { if ((millis() - lastTXtime) < 200) wait(millis() - lastTXtime); Watchdog.reset(); TX(1);// flash Tx iCON on HMI int repeat = 1; int repeatdelay = 0; volatile boolean sendOK = false; if (ack == false or ack == 0) { send(msg, false); } else { while ((sendOK == false) and (repeat < repeats)) { if (send(msg, ack)) { sendOK = true; //Serial.println(" Sent OK ACK Received"); } else { sendOK = false; Serial.print("Tx Error "); Serial.println(repeat); repeatdelay += 200; if (repeatdelay >= 1000) { repeatdelay = 1000; } Watchdog.reset(); } repeat++; wait(repeatdelay); } lastTXtime = millis(); } return sendOK; }
Also on requests
bool RErequest(int Child, int Type, int repeats) { if ((millis() - lastRXtime) < 200) wait(millis() - lastRXtime); Watchdog.reset(); int repeat = 1; int repeatdelay = 0; volatile boolean REQOK = false; while ((REQOK == false) and (repeat < repeats)) { if (request(Child, Type)) { REQOK = true; Serial.println(" Request OK ACK Received"); } else { REQOK = false; Serial.print("Rx Error "); Serial.println(repeat); repeatdelay += 200; if (repeatdelay >= 1000) { repeatdelay = 1000; } Watchdog.reset(); } repeat++; wait(repeatdelay); //wait(repeatdelay,message.getCommand(),message.getType()); } lastRXtime = millis(); return REQOK; }
In an effrot to help with things, and to point either to my code, or the library version, I have rolled back the node to 2.2.0, only having to change isEcho() to isAck(), so I'll see how the stability goes.
Many thanks again, Nigel
-
Problem with Recursive calls on signed node (Solved)
Dear All,
I have a newish issue with a node, which only seems to have manifested since I upgraded to 2.3.2 on the node (gateway still on 2.2.0)
The node is my "smart" thermostat, which has been operating at various revision levels for 3 years or more, generally without issue. this node platform is a Teensy 3.2 operating at 24MHz see this post
Since upgrading to 2.3.2 to "resolve" issues previously encountered forum entry here although this particular node doesn't sleep, I am in the process of migrating nodes to 2.3.2. Subsequent to a code / library version revision to this thermostat node, it has started to "lock up / stop transmitting " of a semi regular basis. I recently asked about determining that a node is "off line" from the nodes perspective here and was spending a few happy hours playing, and was musing about leaving a laptop connected to the serial OP of the node and logging to file the output, to assist in fault finding. whilst doing this I have had the node connected to my PC for several hours, and have seen several occurrances of the situation described here and referenced above.
example6173359 TSF:MSG:READ,0-0-10,s=1,c=3,t=16,pt=0,l=0,sg=0: 6173369 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=1,st=OK:<NONCE> 6174314 TSF:MSG:READ,0-0-10,s=1,c=1,t=45,pt=0,l=4,sg=1:19.0 6174316 TSF:MSG:ECHO REQ 6175680 !TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=0,l=4,sg=0,ft=0,st=NACK:19.0 *InMsgty :45 MsgComd:1 childID:1 Data:S/19.0 Data:I/ 19 Data:B/ 1 Incoming SET TempSP:19.00 6176899 !TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=1,st=NACK:19.0 TX Error 1 6176899 !MCO:WAI:RC=1 6176899 !MCO:PRO:RC=1 6176899 !MCO:PRO:RC=1 6176899 !MCO:PRO:RC=1 6176899 !MCO:PRO:RC=1 6176899 !MCO:PRO:RC=1 6176900 !MCO:PRO:RC=1 6176900 !MCO:PRO:RC=1 6176900 !MCO:PRO:RC=1 6176900 !MCO:PRO:RC=1 6176900 !MCO:PRO:RC=1 6176900 !MCO:PRO:RC=1 6176900 !MCO:PRO:RC=1 6176900 !MCO:PRO:RC=1 6176900 !MCO:PRO:RC=1 6176900 !MCO:PRO:RC=1 6176900 !MCO:PRO:RC=1
there are THOUSANDS of such lines, sequentially. way too many to put in a post, although I can make the full log available on a file share
As I understand it this is an issue relating to 2.3.2 and signing.Is there any liklyhood of this being resolved (fixed) in the immediate future?
If not, am I best to roll back to a previous revision of MySensors? If so, which?
I should obviously prefer NOT to turn off signing for this node.
The node is currently falling over every day to a week, which is clearly undesirable. This node prior to changing to 2.32. would go for many months, without falling over, the "issues" I have had related to not receiving data in particular (now mostly resolved by workarounds)I know this is going to be a awkward issue to help with, bur many thanks in advance...
Regards
Nigel -
RE: Is there an inbuilt way to tell that a node is "off network" from the nodes perspective?
@TheoL
Are you willing / is it in a state where you can share your code?regards
Nigel -
RE: Is there an inbuilt way to tell that a node is "off network" from the nodes perspective?
@mfalkvidd
If I understand correctly, isTransportReady() relates to the transmitter (rfm69 in my case) and the setup / interfacing with the mcu, rather than the connection or lack thereof with the gateway / controller?transportCheckUplink() looks like it might do the trick, if I poll the check periodically.
I already check for ack's ( send(msg,true) ) as part of my coping mechanism for often failed coms , so I can use this to set a flag myself (say 3 failed sequential attempts ), I was wondering however if there is an inbuilt register / boolean responce from the library, where it keeps track of the connection, or lack of to the gateway. It seems to me that reading through things, that the library will re-ititialise finding a parent for example, subject to some seeming loss of coms. I was hoping I could simply tap into this, recovering this "coms / uplink" status, rather than "re-inventing the wheel". Space and memory isn't an issue for me in this instance, as I am using a Teensy as the MCU, so I can just add a bit more code, Just wondering if there was a way to "retrieve" the info that almost certainly exists within the library somewhere.
Many thanks for the thoughts.
Regards Nigel
-
Is there an inbuilt way to tell that a node is "off network" from the nodes perspective?
HI,
I have a node that is my central heating thermostat, does all sorts of nice to have stuff, in conjunction with the controller and other nodes.
In the event that the controller is completely off line, for what ever reason, it would be good to KNOW this from the nodes perspective, after all I still need the thermostat to perform it's basic function. I already make periodic receive requests, and can set my own flag based on this, but is there a MySensors internal library call I can make to retrieve the state of the transport system?Something like "isTransportuplinkOk()"
In the case that the node is offline, I should prefer to not keep sending and asking stuff for a period of time, and perhaps skip parts of code and perhaps display a much simpler screen, with setpoint and actual temperature only.
Many thanks in advance for your knowledge.
-
RE: Is there a timing issue with "faster" platforms?
Thank you, at least I'm not going mad.
Would this issue likely be the root cause of the curious inverse clock speed / performance results / performance?regards Nigel
-
RE: Is there a timing issue with "faster" platforms?
No one have any ideas?
It can't just be me surely?
regards Nigel -
RE: Is there a timing issue with "faster" platforms?
more of the 48Mhz log
84639 !MCO:PRO:RC=1 84639 !MCO:PRO:RC=1 84639 !MCO:PRO:RC=1 84639 !MCO:PRO:RC=1 84639 !MCO:PRO:RC=1 84639 !MCO:PRO:RC=1 84639 !MCO:PRO:RC=1 84639 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84640 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84641 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84642 !MCO:PRO:RC=1 84643 !MCO:PRO:RC=1 84643 !MCO:PRO:RC=1 84643 !MCO:PRO:RC=1 84643 !MCO:PRO:RC=1 84643 !MCO:PRO:RC=1 84643 !MCO:PRO:RC=1 84643 !MCO:PRO:RC=1 84643 !MCO:PRO:RC=1 84643 !MCO:PRO:RC=1 84643 !MCO:PRO:RC=1 84643 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84644 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84645 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84646 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84647 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84648 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84649 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84650 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84651 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84652 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84653 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84654 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84655 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84656 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84657 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84658 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84659 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84660 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84661 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84662 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84663 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84664 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84665 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84666 !MCO:PRO:RC=1 84667 !MCO:PRO:RC=1 84667 !MCO:PRO:RC=1 84667 !MCO:PRO:RC=1 84667 !MCO:PRO:RC=1 84667 !MCO:PRO:RC=1 84667 !MCO:PRO:RC=1 84667 !MCO:PRO:RC=1 84667 !MCO:PRO:RC=1 84667 !MCO:PRO:RC=1 84667 !MCO:PRO:RC=1 84667 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84668 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84669 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84670 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84671 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84672 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84673 !MCO:PRO:RC=1 84674 !MCO:PRO:RC=1 84674 !MCO:PRO:RC=1 84674 !MCO:PRO:RC=1 84674 !MCO:PRO:RC=1 84674 !MCO:PRO:RC=1 84674 !MCO:PRO:RC=1 84674 !MCO:PRO:RC=1 84674 !MCO:PRO:RC=1 84674 !MCO:PRO:RC=1 84674 !MCO:PRO:RC=1 84674 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84675 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84676 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84677 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84678 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84679 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84680 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84681 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84682 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84683 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84684 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84685 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84686 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84687 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84688 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84689 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84690 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84691 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84692 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84693 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84694 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84695 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84696 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84697 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84698 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84699 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84700 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84701 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84702 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84703 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84704 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84705 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84706 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84707 !MCO:PRO:RC=1 84708 !MCO:PRO:RC=1 84708 !MCO:PRO:RC=1 84708 !MCO:PRO:RC=1 84708 !MCO:PRO:RC=1 84708 !MCO:PRO:RC=1 84708 !MCO:PRO:RC=1 84708 !MCO:PRO:RC=1 84709 !MCO:PRO:RC=1 84709 !MCO:PRO:RC=1 84709 !MCO:PRO:RC=1 84709 !MCO:PRO:RC=1 84709 !MCO:PRO:RC=1 84709 !MCO:PRO:RC=1 84709 !MCO:PRO:RC=1 84709 !MCO:PRO:RC=1 84709 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84710 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84711 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84712 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84713 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84714 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84715 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84716 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84717 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84718 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84719 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84720 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84721 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84722 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84723 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84724 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84725 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84726 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84727 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84728 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84729 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84730 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84731 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84732 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84733 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84734 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84735 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84736 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84737 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84738 !MCO:PRO:RC=1 84739 SGN:SGN:NREQ=0 85878 TSF:MSG:SEND,10-10-0-0,s=11,c=1,t=47,pt=0,l=16,sg=0,ft=0,st=OK:2021:8:18:10:4:9 Resent Dateboot SendInterval Timed :TEMPERATURE :1.91 85883 SGN:SGN:NREQ=0 88149 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:1.91 88160 SGN:SGN:NREQ=0 89572 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:1 89572 SGN:SGN:NREQ=0 93622 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 Setpoint requested : 93632 SGN:SGN:NREQ=0 95044 TSF:MSG:SEND,10-10-0-0,s=1,c=2,t=0,pt=0,l=0,sg=0,ft=0,st=OK: Request OK ACK Received 95049 SGN:SGN:NREQ=0 95055 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: 95055 SGN:SGN:NREQ=0 96504 TSF:MSG:SEND,10-10-0-0,s=8,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 TEMP1 SP sent :14.00 TEMP1 SP sent :14.00 TEMP1 SP sent :14.00 SendInterval Timed :TEMPERATURE :19.31 156806 SGN:SGN:NREQ=0 157102 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:19.31 157112 SGN:SGN:NREQ=0 159321 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 159321 SGN:SGN:NREQ=0 160733 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 161562 TSF:MSG:READ,0-0-10,s=5,c=1,t=37,pt=2,l=2,sg=0:0 161562 SGN:SKP:ECHO CMD=1,TYPE=37 161562 TSF:MSG:ECHO +Ack/Echo FMGW *InMsgty :37 MsgComd:1 childID:5 Data:S/ Data:I/ 0 Data:B/ 0 TEMP1 SP sent :14.00
-
RE: Is there a timing issue with "faster" platforms?
48Mhz Log
1317 TSF:MSG:READ,0-0-10,s=255,c=3,t=8,pt=1,l=1,sg=0:0 1318 SGN:SKP:MSG CMD=3,TYPE=8 1318 TSF:MSG:FPAR OK,ID=0,D=1 2305 TSM:FPAR:OK 2305 TSM:ID 2305 TSM:ID:OK 2305 TSM:UPL 2305 SGN:SGN:NREQ=0 5661 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1 6869 TSF:MSG:READ,0-0-10,s=255,c=3,t=25,pt=1,l=1,sg=0:1 6869 SGN:SKP:MSG CMD=3,TYPE=25 6869 TSF:MSG:PONG RECV,HP=1 6869 TSM:UPL:OK 6869 TSM:READY:ID=10,PAR=0,DIS=1 6869 SGN:PRE:SGN REQ 6869 SGN:PRE:WHI NREQ 6869 SGN:SGN:NREQ=0 6875 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0101 6876 SGN:PRE:XMT,TO=0 6876 SGN:PRE:WAIT GW 8084 TSF:MSG:READ,0-0-10,s=255,c=3,t=15,pt=6,l=2,sg=0:0100 8085 SGN:SKP:MSG CMD=3,TYPE=15 8085 SGN:SGN:NREQ=0 9091 TSF:MSG:SEND,10-10-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.3.2 9091 SGN:SGN:NREQ=0 9670 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0 10477 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 10477 SGN:SKP:MSG CMD=3,TYPE=16 10478 SGN:SGN:NREQ=0 14347 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 14348 SGN:NCE:XMT,TO=10 LivingRm Thermostat Present, 1.1.12 14348 SGN:SGN:NREQ=0 16669 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=11,pt=0,l=19,sg=0,ft=0,st=OK:LivingRm Thermostat 16669 SGN:SGN:NREQ=0 17675 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=12,pt=0,l=6,sg=0,ft=0,st=OK:1.1.12 17676 SGN:SGN:NREQ=0 18684 TSF:MSG:SEND,10-10-0-0,s=0,c=0,t=6,pt=0,l=16,sg=0,ft=0,st=OK:Room Temperature 18784 SGN:SGN:NREQ=0 19997 TSF:MSG:SEND,10-10-0-0,s=5,c=0,t=33,pt=0,l=18,sg=0,ft=0,st=OK:Thermostat RX RSSI 20098 SGN:SGN:NREQ=0 21311 TSF:MSG:SEND,10-10-0-0,s=2,c=0,t=3,pt=0,l=16,sg=0,ft=0,st=OK:Thermostat Relay 21411 SGN:SGN:NREQ=0 22951 !TSF:MSG:SEND,10-10-0-0,s=3,c=0,t=3,pt=0,l=13,sg=0,ft=0,st=NACK:Heat Override 23051 SGN:SGN:NREQ=0 24058 TSF:MSG:SEND,10-10-0-0,s=7,c=0,t=6,pt=0,l=11,sg=0,ft=1,st=OK:Who is Home 24158 SGN:SGN:NREQ=0 26371 TSF:MSG:SEND,10-10-0-0,s=1,c=0,t=14,pt=0,l=13,sg=0,ft=0,st=OK:Temp Setpoint 26471 SGN:SGN:NREQ=0 27993 TSF:MSG:SEND,10-10-0-0,s=6,c=0,t=4,pt=0,l=11,sg=0,ft=0,st=OK:Oil Tank PC 28093 SGN:SGN:NREQ=0 30157 TSF:MSG:SEND,10-10-0-0,s=12,c=0,t=36,pt=0,l=12,sg=0,ft=0,st=OK:Display Text 30258 SGN:SGN:NREQ=0 32593 !TSF:MSG:SEND,10-10-0-0,s=8,c=0,t=3,pt=0,l=14,sg=0,ft=0,st=NACK:SP Update Flag 32678 !SGN:BND:TMR 32881 TSF:MSG:READ,0-0-10,s=8,c=0,t=3,pt=0,l=14,sg=0:SP Update Flag 32881 SGN:SKP:ECHO CMD=0,TYPE=3 32881 TSF:MSG:ECHO +Ack/Echo FMGW 32882 SGN:SGN:NREQ=0 35095 TSF:MSG:SEND,10-10-0-0,s=9,c=0,t=3,pt=0,l=13,sg=0,ft=1,st=OK:HotWater Flag 35195 SGN:SGN:NREQ=0 37410 TSF:MSG:SEND,10-10-0-0,s=10,c=0,t=36,pt=0,l=21,sg=0,ft=0,st=OK:Returned Display Text 37510 SGN:SGN:NREQ=0 39721 TSF:MSG:SEND,10-10-0-0,s=11,c=0,t=36,pt=0,l=8,sg=0,ft=0,st=OK:BootTime LivingRm Thermostat END Present, 1.1.12 39821 MCO:REG:REQ 39821 SGN:SGN:NREQ=0 39827 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 41042 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 41042 SGN:SKP:MSG CMD=3,TYPE=16 41042 SGN:SGN:NREQ=0 42840 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 42841 SGN:NCE:XMT,TO=10 42841 SGN:SGN:NREQ=0 43847 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 45062 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 45062 SGN:SKP:MSG CMD=3,TYPE=16 45062 SGN:SGN:NREQ=0 47526 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 47527 SGN:NCE:XMT,TO=10 47527 SGN:SGN:NREQ=0 48533 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 49747 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 49747 SGN:SKP:MSG CMD=3,TYPE=16 49747 SGN:SGN:NREQ=0 49898 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 49898 SGN:NCE:XMT,TO=10 50986 TSF:MSG:READ,0-0-10,s=255,c=3,t=27,pt=1,l=1,sg=1:1 50987 SGN:BND:NONCE=C13859714FA31337A133BAB1F5CD132246438213AC9B278A5AAAAAAAAAAAAAAA 50988 SGN:BND:HMAC=F01FDEF38DB44960D2D22E4E38A141D08432DB6DE34268815F1E29133D451B6D 50988 SGN:VER:OK 50988 MCO:PIM:NODE REG=1 50988 MCO:BGN:STP Loaded values :Relay output : 1 51035 SGN:SGN:NREQ=0 51041 TSF:MSG:SEND,10-10-0-0,s=7,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:0.0 51042 SGN:SGN:NREQ=0 51445 TSF:MSG:SEND,10-10-0-0,s=2,c=2,t=2,pt=0,l=0,sg=0,ft=0,st=OK: uplink available 52092 TSF:MSG:READ,0-0-10,s=2,c=3,t=16,pt=0,l=0,sg=1: 52092 SGN:SKP:MSG CMD=3,TYPE=16 52092 SGN:SGN:NREQ=0 53101 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 53102 SGN:NCE:XMT,TO=10 53102 SGN:SGN:NREQ=0 54108 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 54108 SGN:SGN:NREQ=0 55115 TSF:MSG:SEND,10-10-0-0,s=12,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... REQ DISPLAYTXT 55115 SGN:SGN:NREQ=0 57323 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: Request OK ACK Received Req PC 57324 SGN:SGN:NREQ=0 59532 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: Request OK ACK Received Req SP 59533 SGN:SGN:NREQ=0 60945 TSF:MSG:SEND,10-10-0-0,s=1,c=2,t=0,pt=0,l=0,sg=0,ft=0,st=OK: Request OK ACK Received display init WD Enabled 60996 SGN:SGN:NREQ=0 63407 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 63413 SGN:SGN:NREQ=0 63419 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 63453 !SGN:BND:TMR 64020 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 64021 SGN:SKP:MSG CMD=3,TYPE=16 64021 SGN:SGN:NREQ=0 66060 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 66061 SGN:NCE:XMT,TO=10 Time REQ 1 66061 SGN:SGN:NREQ=0 67066 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 68098 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 68099 SGN:SKP:MSG CMD=3,TYPE=16 68099 SGN:SGN:NREQ=0 69956 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 69957 SGN:NCE:XMT,TO=10 Time REQ 2 69957 SGN:SGN:NREQ=0 73296 !TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=NACK: Time REQ 3 75296 SGN:SGN:NREQ=0 76853 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=1,st=OK: 76870 !SGN:BND:TMR 77871 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 77872 SGN:SKP:MSG CMD=3,TYPE=16 77872 SGN:SGN:NREQ=0 80120 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 80121 SGN:NCE:XMT,TO=10 Time REQ 4 80121 SGN:SGN:NREQ=0 81810 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 82828 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 82828 SGN:SKP:MSG CMD=3,TYPE=16 82828 SGN:SGN:NREQ=0 83837 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 83838 SGN:NCE:XMT,TO=10 Time REQ 5 Timedout 83838 MCO:BGN:INIT OK,TSP=1 TEMP1 SP sent :14.00 84628 TSF:MSG:READ,0-0-10,s=255,c=3,t=1,pt=0,l=10,sg=1:1629281049 84629 SGN:BND:NONCE=15658CB551D0856E0D3D26A68781A1AAA1D936FC5D7D7FF61DAAAAAAAAAAAAAA 84630 SGN:BND:HMAC=B47AA377E18CFCB9727224D78769289C4CAADC0D13EBEF44E8C5A371F9303002 84630 SGN:VER:OK Time value received: Time value valid: 1629281049 10 4 9 18 8 2021 Boot = 2021:8:18:10:4:9 84630 SGN:SGN:NREQ=0 84639 TSF:MSG:SEND,10-10-0-0,s=11,c=1,t=47,pt=0,l=16,sg=0,ft=0,st=OK:2021:8:18:10:4:9 84639 !MCO:WAI:RC=1
-
RE: Is there a timing issue with "faster" platforms?
24Mhz Log
1304 ?TSF:MSG:SEND,10-10-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 2096 TSF:MSG:READ,0-0-10,s=255,c=3,t=8,pt=1,l=1,sg=0:0 2096 SGN:SKP:MSG CMD=3,TYPE=8 2096 TSF:MSG:FPAR OK,ID=0,D=1 2510 TSF:MSG:READ,4-4-10,s=255,c=3,t=8,pt=1,l=1,sg=0:1 2510 SGN:SKP:MSG CMD=3,TYPE=8 3306 TSM:FPAR:OK 3306 TSM:ID 3306 TSM:ID:OK 3306 TSM:UPL 3306 SGN:SGN:NREQ=0 3312 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1 3640 TSF:MSG:READ,0-0-10,s=255,c=3,t=25,pt=1,l=1,sg=0:1 3640 SGN:SKP:MSG CMD=3,TYPE=25 3640 TSF:MSG:PONG RECV,HP=1 3640 TSM:UPL:OK 3641 TSM:READY:ID=10,PAR=0,DIS=1 3641 SGN:PRE:SGN REQ 3641 SGN:PRE:WHI NREQ 3641 SGN:SGN:NREQ=0 3647 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0101 3647 SGN:PRE:XMT,TO=0 3648 SGN:PRE:WAIT GW 4079 TSF:MSG:READ,0-0-10,s=255,c=3,t=15,pt=6,l=2,sg=0:0100 4079 SGN:SKP:MSG CMD=3,TYPE=15 4079 SGN:SGN:NREQ=0 4710 TSF:MSG:SEND,10-10-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.3.2 4711 SGN:SGN:NREQ=0 4834 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0 4905 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 4905 SGN:SKP:MSG CMD=3,TYPE=16 4906 SGN:SGN:NREQ=0 5226 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 5226 SGN:NCE:XMT,TO=10 5608 TSF:MSG:READ,0-0-10,s=255,c=3,t=6,pt=0,l=1,sg=1:M 5608 SGN:BND:NONCE=A0F7C4739126DCC8FFF8C2362FA2D4EEADF11ED4190AB1459AAAAAAAAAAAAAAA 5610 SGN:BND:HMAC=9BE81338877EFE874F06BB1A04505380A33D70758C03AB43E6DAC26F0E56DDE0 5610 SGN:VER:OK LivingRm Thermostat Present, 1.1.12 5610 SGN:SGN:NREQ=0 5683 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=11,pt=0,l=19,sg=0,ft=0,st=OK:LivingRm Thermostat 5683 SGN:SGN:NREQ=0 5819 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=12,pt=0,l=6,sg=0,ft=0,st=OK:1.1.12 5820 SGN:SGN:NREQ=0 5977 TSF:MSG:SEND,10-10-0-0,s=0,c=0,t=6,pt=0,l=16,sg=0,ft=0,st=OK:Room Temperature 6077 SGN:SGN:NREQ=0 7371 !TSF:MSG:SEND,10-10-0-0,s=5,c=0,t=33,pt=0,l=18,sg=0,ft=0,st=NACK:Thermostat RX RSSI 7471 SGN:SGN:NREQ=0 7479 TSF:MSG:SEND,10-10-0-0,s=2,c=0,t=3,pt=0,l=16,sg=0,ft=1,st=OK:Thermostat Relay 7579 SGN:SGN:NREQ=0 8739 TSF:MSG:SEND,10-10-0-0,s=3,c=0,t=3,pt=0,l=13,sg=0,ft=0,st=OK:Heat Override 8840 SGN:SGN:NREQ=0 10080 !TSF:MSG:SEND,10-10-0-0,s=7,c=0,t=6,pt=0,l=11,sg=0,ft=0,st=NACK:Who is Home 10180 SGN:SGN:NREQ=0 10254 TSF:MSG:SEND,10-10-0-0,s=1,c=0,t=14,pt=0,l=13,sg=0,ft=1,st=OK:Temp Setpoint 10354 SGN:SGN:NREQ=0 11578 !TSF:MSG:SEND,10-10-0-0,s=6,c=0,t=4,pt=0,l=11,sg=0,ft=0,st=NACK:Oil Tank PC 11678 SGN:SGN:NREQ=0 12902 !TSF:MSG:SEND,10-10-0-0,s=12,c=0,t=36,pt=0,l=12,sg=0,ft=1,st=NACK:Display Text 13002 SGN:SGN:NREQ=0 13010 TSF:MSG:SEND,10-10-0-0,s=8,c=0,t=3,pt=0,l=14,sg=0,ft=2,st=OK:SP Update Flag 13110 SGN:SGN:NREQ=0 14335 TSF:MSG:SEND,10-10-0-0,s=9,c=0,t=3,pt=0,l=13,sg=0,ft=0,st=OK:HotWater Flag 14436 SGN:SGN:NREQ=0 15672 !TSF:MSG:SEND,10-10-0-0,s=10,c=0,t=36,pt=0,l=21,sg=0,ft=0,st=NACK:Returned Display Text 15772 SGN:SGN:NREQ=0 16996 !TSF:MSG:SEND,10-10-0-0,s=11,c=0,t=36,pt=0,l=8,sg=0,ft=1,st=NACK:BootTime LivingRm Thermostat END Present, 1.1.12 17096 MCO:REG:REQ 17096 SGN:SGN:NREQ=0 17102 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=2,st=OK:2 17359 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 17360 SGN:SKP:MSG CMD=3,TYPE=16 17360 SGN:SGN:NREQ=0 17398 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 17399 SGN:NCE:XMT,TO=10 17491 TSF:MSG:READ,0-0-10,s=255,c=3,t=27,pt=1,l=1,sg=1:1 17492 SGN:BND:NONCE=81EDDA5E5C3E58FF581C825AFD692672D7C406E97307271B86AAAAAAAAAAAAAA 17494 SGN:BND:HMAC=86BA35CDE1A83AEBD795C850A9B6DE4FAF4A311D8EDEC969DEBC8E7B000BFEF8 17494 SGN:VER:OK 17494 MCO:PIM:NODE REG=1 17494 MCO:BGN:STP Loaded values :Relay output : 1 17541 SGN:SGN:NREQ=0 17548 TSF:MSG:SEND,10-10-0-0,s=7,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:0.0 17549 SGN:SGN:NREQ=0 17625 TSF:MSG:SEND,10-10-0-0,s=2,c=2,t=2,pt=0,l=0,sg=0,ft=0,st=OK: uplink available 17721 TSF:MSG:READ,0-0-10,s=2,c=3,t=16,pt=0,l=0,sg=1: 17721 SGN:SKP:MSG CMD=3,TYPE=16 17721 SGN:SGN:NREQ=0 17760 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 17760 SGN:NCE:XMT,TO=10 17854 TSF:MSG:READ,0-0-10,s=2,c=2,t=2,pt=0,l=1,sg=1:0 17855 SGN:BND:NONCE=FAB0FAFA566EB33918E67D902BE5D7B7ABEFACEEBDD07D897FAAAAAAAAAAAAAA 17857 SGN:BND:HMAC=DDDD34C0FB7050D86BE29336AF71BCBFC08DDE8DAB01133D70FB17F12358BE24 17857 SGN:VER:OK REQ_Msg :2 MsgCmd:2 childID:2 Data:S/0 Data:I/ 0 Data:B/ 0 19125 SGN:SGN:NREQ=0 20343 !TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=NACK:0 20343 SGN:SGN:NREQ=0 20444 TSF:MSG:SEND,10-10-0-0,s=12,c=1,t=47,pt=0,l=8,sg=0,ft=1,st=OK:Boot ... REQ DISPLAYTXT 20445 SGN:SGN:NREQ=0 21810 !TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=NACK: Rx Error 1 22010 SGN:SGN:NREQ=0 22015 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=1,st=OK: Request OK ACK Received 22078 TSF:MSG:READ,0-0-10,s=12,c=3,t=16,pt=0,l=0,sg=1: 22079 SGN:SKP:MSG CMD=3,TYPE=16 22079 SGN:SGN:NREQ=0 22239 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 22239 SGN:NCE:XMT,TO=10 Req PC 22239 SGN:SGN:NREQ=0 23583 !TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=NACK: Rx Error 1 23783 SGN:SGN:NREQ=0 23788 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=1,st=OK: Request OK ACK Received 23842 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 23842 SGN:SKP:MSG CMD=3,TYPE=16 23843 SGN:SGN:NREQ=0 23858 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 23858 SGN:NCE:XMT,TO=10 23986 TSF:MSG:READ,0-0-10,s=6,c=2,t=3,pt=0,l=2,sg=1:65 23986 SGN:BND:NONCE=66FA19948675FCDD4A73D33EC0C4B5F6F7D57A8A112CE93A1DAAAAAAAAAAAAAA 23988 SGN:BND:HMAC=E34A8061453CB4DC770DFD3AC83567E58DCA3D42FA7CDB743CDBF40EE9327DD7 23988 SGN:VER:OK REQ_Msg :3 MsgCmd:2 childID:6 Data:S/65 Data:I/ 65 Data:B/ 1 Req SP 23989 SGN:SGN:NREQ=0 24033 TSF:MSG:SEND,10-10-0-0,s=1,c=2,t=0,pt=0,l=0,sg=0,ft=0,st=OK: Request OK ACK Received display init WD Enabled 24084 SGN:SGN:NREQ=0 24090 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 24095 SGN:SGN:NREQ=0 24101 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 24196 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 24196 SGN:SKP:MSG CMD=3,TYPE=16 24197 SGN:SGN:NREQ=0 25447 !TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=NACK:<NONCE> 25447 !SGN:NCE:XMT,TO=10 FAIL Time REQ 1 26101 SGN:SGN:NREQ=0 26918 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=1,st=OK: 26963 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=0: 26963 SGN:SKP:MSG CMD=3,TYPE=16 26964 SGN:SGN:NREQ=0 27232 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 27233 SGN:NCE:XMT,TO=10 27326 TSF:MSG:READ,0-0-10,s=255,c=3,t=1,pt=0,l=10,sg=1:1629281252 27326 SGN:BND:NONCE=96DC361C795A3C064B82B2F1C201D95BF3C78786A2187E36CFAAAAAAAAAAAAAA 27328 SGN:BND:HMAC=F65B83755837BAF5093BE2D62C9EE70C5B115B1330F9886B6481D8884A9E8E32 27328 SGN:VER:OK Time value received: Time value valid: 1629281252 10 7 32 18 8 2021 Boot = 2021:8:18:10:7:32 27329 SGN:SGN:NREQ=0 28621 TSF:MSG:SEND,10-10-0-0,s=11,c=1,t=47,pt=0,l=17,sg=0,ft=0,st=OK:2021:8:18:10:7:32 28621 !MCO:WAI:RC=1 28622 !MCO:PRO:RC=1 28622 !MCO:PRO:RC=1 28622 !MCO:PRO:RC=1 28622 !MCO:PRO:RC=1 28622 !MCO:PRO:RC=1 28622 !MCO:PRO:RC=1 28622 !MCO:PRO:RC=1 28622 !MCO:PRO:RC=1 28622 !MCO:PRO:RC=1 28622 !MCO:PRO:RC=1 28622 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28623 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28624 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28625 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28626 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28627 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28628 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28629 !MCO:PRO:RC=1 28630 !MCO:PRO:RC=1 28630 !MCO:PRO:RC=1 28630 !MCO:PRO:RC=1 28630 !MCO:PRO:RC=1 28630 !MCO:PRO:RC=1 28630 !MCO:PRO:RC=1 28630 !MCO:PRO:RC=1 28630 !MCO:PRO:RC=1 28630 !MCO:PRO:RC=1 28630 !MCO:PRO:RC=1 28630 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28631 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28632 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28633 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28634 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28635 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28636 !MCO:PRO:RC=1 28637 !MCO:PRO:RC=1 28637 !MCO:PRO:RC=1 28637 !MCO:PRO:RC=1 28637 !MCO:PRO:RC=1 28637 !MCO:PRO:RC=1 28637 !MCO:PRO:RC=1 28637 !MCO:PRO:RC=1 28637 !MCO:PRO:RC=1 28637 !MCO:PRO:RC=1 28637 !MCO:PRO:RC=1 28637 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28638 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28639 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28640 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28641 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28642 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28643 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28644 !MCO:PRO:RC=1 28645 !MCO:PRO:RC=1 28645 !MCO:PRO:RC=1 28645 !MCO:PRO:RC=1 28645 !MCO:PRO:RC=1 28645 !MCO:PRO:RC=1 28645 !MCO:PRO:RC=1 28645 !MCO:PRO:RC=1 28645 !MCO:PRO:RC=1 28645 !MCO:PRO:RC=1 28645 !MCO:PRO:RC=1 28645 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28646 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28647 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28648 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28649 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28650 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28651 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28652 !MCO:PRO:RC=1 28653 !MCO:PRO:RC=1 28653 !MCO:PRO:RC=1 28653 !MCO:PRO:RC=1 28653 !MCO:PRO:RC=1 28653 !MCO:PRO:RC=1 28653 !MCO:PRO:RC=1 28653 !MCO:PRO:RC=1 28653 !MCO:PRO:RC=1 28653 !MCO:PRO:RC=1 28653 !MCO:PRO:RC=1 28653 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28654 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28655 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28656 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28657 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28658 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28659 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28660 !MCO:PRO:RC=1 28661 !MCO:PRO:RC=1 28661 !MCO:PRO:RC=1 28661 !MCO:PRO:RC=1 28661 !MCO:PRO:RC=1 28661 !MCO:PRO:RC=1 28661 !MCO:PRO:RC=1 28661 !MCO:PRO:RC=1 28661 !MCO:PRO:RC=1 28661 !MCO:PRO:RC=1 28661 !MCO:PRO:RC=1 28661 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28662 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28663 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28664 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28665 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28666 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28667 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28668 !MCO:PRO:RC=1 28669 !MCO:PRO:RC=1 28669 !MCO:PRO:RC=1 28669 !MCO:PRO:RC=1 28669 !MCO:PRO:RC=1 28669 !MCO:PRO:RC=1 28669 !MCO:PRO:RC=1 28669 !MCO:PRO:RC=1 28669 !MCO:PRO:RC=1 28669 !MCO:PRO:RC=1 28669 !MCO:PRO:RC=1 28669 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28670 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28671 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28672 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28673 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28674 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28675 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28676 !MCO:PRO:RC=1 28677 !MCO:PRO:RC=1 28677 !MCO:PRO:RC=1 28677 !MCO:PRO:RC=1 28677 !MCO:PRO:RC=1 28677 !MCO:PRO:RC=1 28677 !MCO:PRO:RC=1 28677 !MCO:PRO:RC=1 28677 !MCO:PRO:RC=1 28677 !MCO:PRO:RC=1 28677 !MCO:PRO:RC=1 28677 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28678 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28679 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28680 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28681 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28682 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28683 !MCO:PRO:RC=1 28684 !MCO:PRO:RC=1 28684 !MCO:PRO:RC=1 28684 !MCO:PRO:RC=1 28684 !MCO:PRO:RC=1 28684 !MCO:PRO:RC=1 28684 !MCO:PRO:RC=1 28684 !MCO:PRO:RC=1 28684 !MCO:PRO:RC=1 28684 !MCO:PRO:RC=1 28684 !MCO:PRO:RC=1 28684 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28685 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28686 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28687 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28688 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28689 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28690 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28691 !MCO:PRO:RC=1 28692 !MCO:PRO:RC=1 28692 !MCO:PRO:RC=1 28692 !MCO:PRO:RC=1 28692 !MCO:PRO:RC=1 28692 !MCO:PRO:RC=1 28692 !MCO:PRO:RC=1 28692 !MCO:PRO:RC=1 28692 !MCO:PRO:RC=1 28692 !MCO:PRO:RC=1 28692 !MCO:PRO:RC=1 28692 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28693 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28694 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28695 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28696 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28697 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28698 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28699 !MCO:PRO:RC=1 28700 !MCO:PRO:RC=1 28700 !MCO:PRO:RC=1 28700 !MCO:PRO:RC=1 28700 !MCO:PRO:RC=1 28700 !MCO:PRO:RC=1 28700 !MCO:PRO:RC=1 28700 !MCO:PRO:RC=1 28700 !MCO:PRO:RC=1 28700 !MCO:PRO:RC=1 28700 !MCO:PRO:RC=1 28700 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28701 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28702 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28703 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28704 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28705 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28706 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28707 !MCO:PRO:RC=1 28708 !MCO:PRO:RC=1 28708 !MCO:PRO:RC=1 28708 !MCO:PRO:RC=1 28708 !MCO:PRO:RC=1 28708 !MCO:PRO:RC=1 28708 !MCO:PRO:RC=1 28708 !MCO:PRO:RC=1 28708 !MCO:PRO:RC=1 28708 !MCO:PRO:RC=1 28708 !MCO:PRO:RC=1 28708 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28709 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28710 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28711 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28712 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28713 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28714 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28715 !MCO:PRO:RC=1 28716 !MCO:PRO:RC=1 28716 !MCO:PRO:RC=1 28716 !MCO:PRO:RC=1 28716 !MCO:PRO:RC=1 28716 !MCO:PRO:RC=1 28716 !MCO:PRO:RC=1 28716 !MCO:PRO:RC=1 28716 !MCO:PRO:RC=1 28716 !MCO:PRO:RC=1 28716 !MCO:PRO:RC=1 28716 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28717 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28718 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28719 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28720 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28721 !MCO:PRO:RC=1 28722 SGN:SGN:NREQ=0 30046 !TSF:MSG:SEND,10-10-0-0,s=11,c=1,t=47,pt=0,l=17,sg=0,ft=0,st=NACK:2021:8:18:10:7:32 Resent Dateboot Time REQ 2 Time Received in Setup Boot = 2021:8:18:10:7:34 30046 SGN:SGN:NREQ=0 31277 !TSF:MSG:SEND,10-10-0-0,s=11,c=1,t=47,pt=0,l=17,sg=0,ft=1,st=NACK:2021:8:18:10:7:34 31377 SGN:SGN:NREQ=0 31385 TSF:MSG:SEND,10-10-0-0,s=11,c=1,t=47,pt=0,l=17,sg=0,ft=2,st=OK:2021:8:18:10:7:34 Resent Dateboot 31386 MCO:BGN:INIT OK,TSP=1 TEMP1 SP sent :14.00 32177 TSF:MSG:READ,0-0-10,s=11,c=1,t=47,pt=0,l=17,sg=0:2021:8:18:10:7:34 32177 SGN:SKP:ECHO CMD=1,TYPE=47 32177 TSF:MSG:ECHO +Ack/Echo FMGW *InMsgty :47 MsgComd:1 childID:11 Data:S/2021:8:18:10:7:34 Data:I/ 2021 Data:B/ 1
-
Is there a timing issue with "faster" platforms?
Hi All,
Thermostat node NOW 2.3.2 - teensy 3.2
Gateway 2.2.0 - uno clone
Controller Domoticz, recent buildI have posted previously with woes getting requesting data or otherwise getting data INTO a particular node, my thermostat.
This thermostat is software Signed, and in another post I was asking about where signing is actually used, because lots of messages seemed to NOT be signed.
post here
I also had issues getting the teensy working with the radio.
teensy post
Which I eventually solved by dropping the frequency of the processor to 48Mhz.It occurred to me mulling this over in bed, that I had read some older posts about timings relating to a M0 processor, and that how it was resolved by introducing a delay(10) into the core code somewhere, and it was agreed that the issue was related to "timing".
I thought I would see if I could lower the teensy speed further, so I have, and the results are startling.The logs are below, but long story short, running at 48Mhz (the speed at which I could get the RFM69 to work), Getting to the same point in the sketch, where I send the "Boot time" to the controller takes 85878ms
The same sketch, BUT slowing the processor to 24Mhz takes 30046ms
And yes I definitely have that the right way round.
Additionally the node now mostly gets the data sent to it or requested by it.
You can see this to an extent in the logs, where I request the time (looped 5 times in setup) At the faster speed, the time is almost never received until later in the sketch, and after certain "keys" are successfully exchanged.I hope that one or more of the core team will read this, and have some Ideas.
This post is split, as I can't post over 32kbytes of text
Kind regards
Nigel -
RE: Help or advice on getting node to RECEIVE data for text child objects
Upgrading to 2.3.2 has helped somewhat
-
RE: Help or advice on getting node to RECEIVE data for text child objects
del....................
-
RE: Help or advice on getting node to RECEIVE data for text child objects
LOG
4737 TSF:MSG:SEND,10-10-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 5742 TSF:MSG:READ,0-0-10,s=255,c=3,t=8,pt=1,l=1,sg=0:0 5742 SGN:SKP:MSG CMD=3,TYPE=8 5742 TSF:MSG:FPAR OK,ID=0,D=1 6738 TSM:FPAR:OK 6738 TSM:ID 6738 TSM:ID:OK 6738 TSM:UPL 6738 SGN:SGN:NREQ=0 6744 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1 7478 TSF:MSG:READ,0-0-10,s=255,c=3,t=25,pt=1,l=1,sg=0:1 7478 SGN:SKP:MSG CMD=3,TYPE=25 7478 TSF:MSG:PONG RECV,HP=1 7479 TSM:UPL:OK 7479 TSM:READY:ID=10,PAR=0,DIS=1 7479 SGN:PRE:SGN REQ 7479 SGN:PRE:WHI NREQ 7479 SGN:SGN:NREQ=0 9106 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0101 9106 SGN:PRE:XMT,TO=0 9106 SGN:PRE:WAIT GW 10315 TSF:MSG:READ,0-0-10,s=255,c=3,t=15,pt=6,l=2,sg=0:0100 10315 SGN:SKP:MSG CMD=3,TYPE=15 10315 SGN:SGN:NREQ=0 11321 TSF:MSG:SEND,10-10-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.2.0 11321 SGN:SGN:NREQ=0 13735 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0 13963 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 13963 SGN:SKP:MSG CMD=3,TYPE=16 13963 SGN:SGN:NREQ=0 15178 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 15179 SGN:NCE:XMT,TO=10 LivingRm Thermostat Present, 1.1.12 15735 SGN:SGN:NREQ=0 15744 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=11,pt=0,l=19,sg=0,ft=0,st=OK:LivingRm Thermostat 15744 SGN:SGN:NREQ=0 16750 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=12,pt=0,l=6,sg=0,ft=0,st=OK:1.1.12 16751 SGN:SGN:NREQ=0 18743 TSF:MSG:SEND,10-10-0-0,s=0,c=0,t=6,pt=0,l=16,sg=0,ft=0,st=OK:Room Temperature 18843 SGN:SGN:NREQ=0 20843 TSF:MSG:SEND,10-10-0-0,s=5,c=0,t=33,pt=0,l=18,sg=0,ft=0,st=OK:Thermostat RX RSSI 20944 SGN:SGN:NREQ=0 22157 TSF:MSG:SEND,10-10-0-0,s=2,c=0,t=3,pt=0,l=16,sg=0,ft=0,st=OK:Thermostat Relay 22257 SGN:SGN:NREQ=0 23487 !TSF:MSG:SEND,10-10-0-0,s=3,c=0,t=3,pt=0,l=13,sg=0,ft=0,st=NACK:Heat Override 23587 SGN:SGN:NREQ=0 24595 TSF:MSG:SEND,10-10-0-0,s=1,c=0,t=14,pt=0,l=13,sg=0,ft=1,st=OK:Temp Setpoint 24695 SGN:SGN:NREQ=0 25906 TSF:MSG:SEND,10-10-0-0,s=6,c=0,t=4,pt=0,l=11,sg=0,ft=0,st=OK:Oil Tank PC 26006 SGN:SGN:NREQ=0 29230 !TSF:MSG:SEND,10-10-0-0,s=12,c=0,t=36,pt=0,l=12,sg=0,ft=0,st=NACK:Display Text 29330 SGN:SGN:NREQ=0 32363 TSF:MSG:SEND,10-10-0-0,s=8,c=0,t=3,pt=0,l=14,sg=0,ft=1,st=OK:SP Update Flag 32463 SGN:SGN:NREQ=0 33676 TSF:MSG:SEND,10-10-0-0,s=9,c=0,t=3,pt=0,l=13,sg=0,ft=0,st=OK:HotWater Flag 33776 SGN:SGN:NREQ=0 35815 TSF:MSG:SEND,10-10-0-0,s=10,c=0,t=36,pt=0,l=21,sg=0,ft=0,st=OK:Returned Display Text 35915 SGN:SGN:NREQ=0 37126 TSF:MSG:SEND,10-10-0-0,s=11,c=0,t=36,pt=0,l=8,sg=0,ft=0,st=OK:BootTime LivingRm Thermostat END Present, 1.1.12 37226 MCO:REG:REQ 37226 SGN:SGN:NREQ=0 40640 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 40853 !SGN:BND:TMR 41855 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 41855 SGN:SKP:MSG CMD=3,TYPE=16 41855 SGN:SGN:NREQ=0 44091 !TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=NACK:<NONCE> 44091 !SGN:NCE:XMT,TO=10 FAIL 44091 SGN:SGN:NREQ=0 45503 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=1,st=OK:2 46718 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 46718 SGN:SKP:MSG CMD=3,TYPE=16 46718 SGN:SGN:NREQ=0 49804 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 49805 SGN:NCE:XMT,TO=10 49805 SGN:SGN:NREQ=0 50811 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 52026 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 52026 SGN:SKP:MSG CMD=3,TYPE=16 52026 SGN:SGN:NREQ=0 54653 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 54654 SGN:NCE:XMT,TO=10 54654 SGN:SGN:NREQ=0 55660 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 56875 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 56875 SGN:SKP:MSG CMD=3,TYPE=16 56875 SGN:SGN:NREQ=0 58915 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 58916 SGN:NCE:XMT,TO=10 58916 MCO:BGN:STP Loaded values :Relay output : 1 58962 SGN:SGN:NREQ=0 58968 TSF:MSG:SEND,10-10-0-0,s=2,c=2,t=2,pt=0,l=0,sg=0,ft=0,st=OK: uplink available 60001 TSF:MSG:READ,0-0-10,s=2,c=3,t=16,pt=0,l=0,sg=1: 60001 SGN:SKP:MSG CMD=3,TYPE=16 60001 SGN:SGN:NREQ=0 61010 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 61011 SGN:NCE:XMT,TO=10 61011 SGN:SGN:NREQ=0 62423 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 62423 SGN:SGN:NREQ=0 63430 TSF:MSG:SEND,10-10-0-0,s=12,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... REQ DISPLAYTXT 63430 SGN:SGN:NREQ=0 65638 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: Request OK ACK Received Req PC 65639 SGN:SGN:NREQ=0 67284 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: Request OK ACK Received Req SP 67285 SGN:SGN:NREQ=0 68558 TSF:MSG:SEND,10-10-0-0,s=1,c=2,t=0,pt=0,l=0,sg=0,ft=0,st=OK: Request OK ACK Received display init WD Enabled 69104 SGN:SGN:NREQ=0 70109 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 70110 SGN:SGN:NREQ=0 72318 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: Time REQ 1 72319 SGN:SGN:NREQ=0 75137 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: Time REQ 2 75137 SGN:SGN:NREQ=0 77345 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: Time REQ 3 77346 SGN:SGN:NREQ=0 78770 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: Time REQ 4 78771 SGN:SGN:NREQ=0 81044 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: Time REQ 5 Timedout Boot = 1970:1:1:0:1:21 81045 SGN:SGN:NREQ=0 83463 TSF:MSG:SEND,10-10-0-0,s=11,c=1,t=47,pt=0,l=15,sg=0,ft=0,st=OK:1970:1:1:0:1:21 83563 SGN:SGN:NREQ=0 84702 TSF:MSG:SEND,10-10-0-0,s=11,c=1,t=47,pt=0,l=15,sg=0,ft=0,st=OK:1970:1:1:0:1:21 Resent Dateboot 84702 MCO:BGN:INIT OK,TSP=1 TEMP1 SP sent :14.00 84702 SGN:SGN:NREQ=0 86114 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :2.15 86893 SGN:SGN:NREQ=0 89103 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:2.15 89104 SGN:SGN:NREQ=0 90720 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:1 90720 SGN:SGN:NREQ=0 92132 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-52 Setpoint requested : 92138 SGN:SGN:NREQ=0 96510 !TSF:MSG:SEND,10-10-0-0,s=1,c=2,t=0,pt=0,l=0,sg=0,ft=0,st=NACK: Rx Error 1 96710 SGN:SGN:NREQ=0 98324 TSF:MSG:SEND,10-10-0-0,s=1,c=2,t=0,pt=0,l=0,sg=0,ft=1,st=OK: Request OK ACK Received 98525 SGN:SGN:NREQ=0 100752 TSF:MSG:SEND,10-10-0-0,s=8,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 requesting time 100752 SGN:SGN:NREQ=0 104020 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 104800 !SGN:BND:TMR 104802 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 104802 SGN:SKP:MSG CMD=3,TYPE=16 104802 SGN:SGN:NREQ=0 104812 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 104813 SGN:NCE:XMT,TO=10 TEMP1 SP sent :14.00 104813 SGN:SGN:NREQ=0 106225 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received requesting time 110899 SGN:SGN:NREQ=0 110905 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 111684 !SGN:BND:TMR 112686 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 112686 SGN:SKP:MSG CMD=3,TYPE=16 112686 SGN:SGN:NREQ=0 114444 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 114445 SGN:NCE:XMT,TO=10 requesting time 121454 SGN:SGN:NREQ=0 122459 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 123239 !SGN:BND:TMR 123518 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 123518 SGN:SKP:MSG CMD=3,TYPE=16 123519 SGN:SGN:NREQ=0 124528 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 124529 SGN:NCE:XMT,TO=10 TEMP1 SP sent :14.00 125308 SGN:SGN:NREQ=0 125315 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received requesting time 131545 SGN:SGN:NREQ=0 132550 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 133330 !SGN:BND:TMR 133332 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 133332 SGN:SKP:MSG CMD=3,TYPE=16 133332 SGN:SGN:NREQ=0 133342 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 133343 SGN:NCE:XMT,TO=10 134828 TSF:MSG:READ,0-0-10,s=255,c=3,t=1,pt=0,l=10,sg=1:1628947137 134829 SGN:BND:NONCE=A3CD283B0D7495D966CF1AC5E4E5A9C7D1359478D3FFB6FF30AAAAAAAAAAAAAA 134830 SGN:BND:HMAC=6872FA8969AFD71697AC17EAF26E2724CF0A24F1951EB76D3E5F61A7F62CB028 134830 SGN:VER:OK Time value received: Time value valid: 1628947137 13 18 57 14 8 2021 TEMP1 SP sent :14.00 145735 SGN:SGN:NREQ=0 145742 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.63 161318 SGN:SGN:NREQ=0 162324 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.63 162325 SGN:SGN:NREQ=0 166810 !TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=NACK:0 Tx Error 1 167822 TSF:MSG:READ,0-0-10,s=8,c=3,t=16,pt=0,l=0,sg=1: 167822 SGN:SKP:MSG CMD=3,TYPE=16 167822 SGN:SGN:NREQ=0 171070 !TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=1,st=NACK:<NONCE> 171070 !SGN:NCE:XMT,TO=10 FAIL 171070 SGN:SGN:NREQ=0 172076 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=2,st=OK:0 172276 SGN:SGN:NREQ=0 173485 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 TEMP1 SP sent :14.00 173516 SGN:SGN:NREQ=0 176131 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received 177689 !SGN:BND:TMR 178690 TSF:MSG:READ,0-0-10,s=8,c=3,t=16,pt=0,l=0,sg=1: 178691 SGN:SKP:MSG CMD=3,TYPE=16 178691 SGN:SGN:NREQ=0 182172 !TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=NACK:<NONCE> 182172 !SGN:NCE:XMT,TO=10 FAIL 182953 TSF:MSG:READ,0-0-10,s=12,c=3,t=16,pt=0,l=0,sg=1: 182953 SGN:SKP:MSG CMD=3,TYPE=16 182953 SGN:SGN:NREQ=0 182964 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=1,st=OK:<NONCE> 182964 SGN:NCE:XMT,TO=10 192310 !SGN:BND:TMR 193311 TSF:MSG:READ,0-0-10,s=8,c=3,t=16,pt=0,l=0,sg=1: 193312 SGN:SKP:MSG CMD=3,TYPE=16 193312 SGN:SGN:NREQ=0 195733 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 195734 SGN:NCE:XMT,TO=10 TEMP1 SP sent :14.00 195734 SGN:SGN:NREQ=0 196740 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received 198300 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 198301 SGN:SKP:MSG CMD=3,TYPE=16 198301 SGN:SGN:NREQ=0 198311 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 198311 SGN:NCE:XMT,TO=10 206879 !SGN:BND:TMR 207881 TSF:MSG:READ,0-0-10,s=8,c=3,t=16,pt=0,l=0,sg=1: 207881 SGN:SKP:MSG CMD=3,TYPE=16 207881 SGN:SGN:NREQ=0 211422 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 211423 SGN:NCE:XMT,TO=10 TEMP1 SP sent :14.00 216096 SGN:SGN:NREQ=0 216103 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received 223113 !SGN:BND:TMR 224114 TSF:MSG:READ,0-0-10,s=8,c=3,t=16,pt=0,l=0,sg=0: 224115 SGN:SKP:MSG CMD=3,TYPE=16 224115 SGN:SGN:NREQ=0 228177 !TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=NACK:<NONCE> 228177 !SGN:NCE:XMT,TO=10 FAIL SendInterval Timed :TEMPERATURE :21.62 233629 SGN:SGN:NREQ=0 233636 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=1,st=OK:21.62 233636 SGN:SGN:NREQ=0 235253 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 235253 SGN:SGN:NREQ=0 236665 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-50 TEMP1 SP sent :14.00 236698 SGN:SGN:NREQ=0 237890 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 257361 SGN:SGN:NREQ=0 257368 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 277620 SGN:SGN:NREQ=0 277627 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.69 297098 SGN:SGN:NREQ=0 298104 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.69 298105 SGN:SGN:NREQ=0 300314 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 300314 SGN:SGN:NREQ=0 301565 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-50 Timed Request DISPLAYTXT 301571 SGN:SGN:NREQ=0 302852 !TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=NACK: Req PC 303852 SGN:SGN:NREQ=0 304857 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=1,st=OK: 305112 !SGN:BND:TMR 306113 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 306114 SGN:SKP:MSG CMD=3,TYPE=16 306114 SGN:SGN:NREQ=0 307329 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 307330 SGN:NCE:XMT,TO=10 307330 SGN:SGN:NREQ=0 309541 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... TEMP1 SP sent :14.00 309541 SGN:SGN:NREQ=0 311316 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 330008 SGN:SGN:NREQ=0 331313 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 350784 SGN:SGN:NREQ=0 351790 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.69 369704 SGN:SGN:NREQ=0 369711 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.69 369711 SGN:SGN:NREQ=0 372326 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 372326 SGN:SGN:NREQ=0 373738 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-50 Timed Request DISPLAYTXT 373744 SGN:SGN:NREQ=0 377164 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 377194 !SGN:BND:TMR 378195 TSF:MSG:READ,0-0-10,s=12,c=3,t=16,pt=0,l=0,sg=1: 378196 SGN:SKP:MSG CMD=3,TYPE=16 378196 SGN:SGN:NREQ=0 379205 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 379206 SGN:NCE:XMT,TO=10 Req PC 379206 SGN:SGN:NREQ=0 381414 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: 382457 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 382457 SGN:SKP:MSG CMD=3,TYPE=16 382457 SGN:SGN:NREQ=0 383466 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 383467 SGN:NCE:XMT,TO=10 383467 SGN:SGN:NREQ=0 387494 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... TEMP1 SP sent :14.00 387494 SGN:SGN:NREQ=0 388906 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 407600 SGN:SGN:NREQ=0 407607 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 427857 SGN:SGN:NREQ=0 427864 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.64 448114 SGN:SGN:NREQ=0 448121 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.64 448121 SGN:SGN:NREQ=0 449533 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 449533 SGN:SGN:NREQ=0 452070 !TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=NACK:-50 452070 SGN:SGN:NREQ=0 452482 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=1,st=OK:0 Timed Request DISPLAYTXT 452488 SGN:SGN:NREQ=0 453905 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 453923 !SGN:BND:TMR 454925 TSF:MSG:READ,0-0-10,s=12,c=3,t=16,pt=0,l=0,sg=1: 454925 SGN:SKP:MSG CMD=3,TYPE=16 454925 SGN:SGN:NREQ=0 457964 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 457965 SGN:NCE:XMT,TO=10 Req PC 457965 SGN:SGN:NREQ=0 458970 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: 459990 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=0: 459991 SGN:SKP:MSG CMD=3,TYPE=16 459991 SGN:SGN:NREQ=0 463455 !TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=NACK:<NONCE> 463455 !SGN:NCE:XMT,TO=10 FAIL 463455 SGN:SGN:NREQ=0 464462 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=1,st=OK:Boot ... TEMP1 SP sent :14.00 464462 SGN:SGN:NREQ=0 467614 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 484749 SGN:SGN:NREQ=0 484756 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 505006 SGN:SGN:NREQ=0 505013 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.63 524484 SGN:SGN:NREQ=0 524491 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.63 524491 SGN:SGN:NREQ=0 527051 !TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=NACK:0 Tx Error 1 527251 SGN:SGN:NREQ=0 529460 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=1,st=OK:0 529660 SGN:SGN:NREQ=0 531684 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 Timed Request DISPLAYTXT 531690 SGN:SGN:NREQ=0 534908 !TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=NACK: Req PC 535908 SGN:SGN:NREQ=0 535914 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=1,st=OK: 535940 !SGN:BND:TMR 536347 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 536348 SGN:SKP:MSG CMD=3,TYPE=16 536348 SGN:SGN:NREQ=0 537357 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 537358 SGN:NCE:XMT,TO=10 537358 SGN:SGN:NREQ=0 538773 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... TEMP1 SP sent :14.00 538773 SGN:SGN:NREQ=0 540982 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 558896 SGN:SGN:NREQ=0 558903 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 579152 SGN:SGN:NREQ=0 580158 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.62 598850 SGN:SGN:NREQ=0 598857 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.62 598857 SGN:SGN:NREQ=0 601472 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 601472 SGN:SGN:NREQ=0 605087 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-50 Timed Request DISPLAYTXT 605093 SGN:SGN:NREQ=0 607022 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 607050 !SGN:BND:TMR 608052 TSF:MSG:READ,0-0-10,s=12,c=3,t=16,pt=0,l=0,sg=1: 608052 SGN:SKP:MSG CMD=3,TYPE=16 608052 SGN:SGN:NREQ=0 611596 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 611597 SGN:NCE:XMT,TO=10 Req PC 611597 SGN:SGN:NREQ=0 613009 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: 614041 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 614041 SGN:SKP:MSG CMD=3,TYPE=16 614041 SGN:SGN:NREQ=0 615918 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 615919 SGN:NCE:XMT,TO=10 615919 SGN:SGN:NREQ=0 617558 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... TEMP1 SP sent :14.00 617558 SGN:SGN:NREQ=0 618990 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 637684 SGN:SGN:NREQ=0 637691 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 657941 SGN:SGN:NREQ=0 658464 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.68 677936 SGN:SGN:NREQ=0 678942 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.68 678943 SGN:SGN:NREQ=0 680370 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 680370 SGN:SGN:NREQ=0 682782 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-50 Timed Request DISPLAYTXT 682788 SGN:SGN:NREQ=0 684997 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 685028 !SGN:BND:TMR 686029 TSF:MSG:READ,0-0-10,s=12,c=3,t=16,pt=0,l=0,sg=1: 686030 SGN:SKP:MSG CMD=3,TYPE=16 686030 SGN:SGN:NREQ=0 687039 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 687040 SGN:NCE:XMT,TO=10 Req PC 687040 SGN:SGN:NREQ=0 688947 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: 689972 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 689973 SGN:SKP:MSG CMD=3,TYPE=16 689973 SGN:SGN:NREQ=0 690982 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 690983 SGN:NCE:XMT,TO=10 690983 SGN:SGN:NREQ=0 693194 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... TEMP1 SP sent :14.00 693194 SGN:SGN:NREQ=0 695403 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 713317 SGN:SGN:NREQ=0 714323 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 733795 SGN:SGN:NREQ=0 733802 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.69 753274 SGN:SGN:NREQ=0 753281 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.69 753281 SGN:SGN:NREQ=0 754693 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 754693 SGN:SGN:NREQ=0 756105 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-50 Timed Request DISPLAYTXT 756111 SGN:SGN:NREQ=0 758726 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 758741 !SGN:BND:TMR 759743 TSF:MSG:READ,0-0-10,s=12,c=3,t=16,pt=0,l=0,sg=1: 759743 SGN:SKP:MSG CMD=3,TYPE=16 759743 SGN:SGN:NREQ=0 760752 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 760753 SGN:NCE:XMT,TO=10 Req PC 760753 SGN:SGN:NREQ=0 762961 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: 763498 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 763499 SGN:SKP:MSG CMD=3,TYPE=16 763499 SGN:SGN:NREQ=0 766330 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 766331 SGN:NCE:XMT,TO=10 766331 SGN:SGN:NREQ=0 767338 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... TEMP1 SP sent :14.00 767338 SGN:SGN:NREQ=0 770361 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received 778929 !SGN:BND:TMR 779931 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=0: 779931 SGN:SKP:MSG CMD=3,TYPE=16 779931 SGN:SGN:NREQ=0 780940 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 780941 SGN:NCE:XMT,TO=10 TEMP1 SP sent :14.00 787950 SGN:SGN:NREQ=0 787957 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received 797304 !SGN:BND:TMR 797306 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 797306 SGN:SKP:MSG CMD=3,TYPE=16 797306 SGN:SGN:NREQ=0 797316 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 797317 SGN:NCE:XMT,TO=10 798098 TSF:MSG:READ,0-0-10,s=6,c=1,t=3,pt=0,l=2,sg=1:66 798098 SGN:BND:NONCE=244A5C46AAC321A005B095F794D14ADD3A39BB8CA726775DA7AAAAAAAAAAAAAA 798099 SGN:BND:HMAC=6A5A8C456CA37D10A13BF5C92B68A1AAA32F7C765FF556774B3F0225FEEA6484 798099 SGN:VER:OK *InMsgty :3 MsgComd:1 childID:6 Data:S/66 Data:I/ 66 Data:B/ 1 TEMP1 SP sent :14.00 808224 SGN:SGN:NREQ=0 808231 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.69 827704 SGN:SGN:NREQ=0 827711 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.69 827711 SGN:SGN:NREQ=0 829929 !TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=NACK:0 Tx Error 1 830129 SGN:SGN:NREQ=0 830338 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=1,st=OK:0 830538 SGN:SGN:NREQ=0 832562 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 Timed Request DISPLAYTXT 832568 SGN:SGN:NREQ=0 835226 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 836243 TSF:MSG:READ,0-0-10,s=12,c=3,t=16,pt=0,l=0,sg=1: 836244 SGN:SKP:MSG CMD=3,TYPE=16 836244 SGN:SGN:NREQ=0 837253 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 837254 SGN:NCE:XMT,TO=10 Req PC 837254 SGN:SGN:NREQ=0 838666 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: 840105 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 840105 SGN:SKP:MSG CMD=3,TYPE=16 840105 SGN:SGN:NREQ=0 841704 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 841705 SGN:NCE:XMT,TO=10 841705 SGN:SGN:NREQ=0 842712 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... TEMP1 SP sent :14.00 842712 SGN:SGN:NREQ=0 843941 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 863412 SGN:SGN:NREQ=0 863419 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 883669 SGN:SGN:NREQ=0 885111 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.68 903025 SGN:SGN:NREQ=0 904031 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.68 904032 SGN:SGN:NREQ=0 906444 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 906444 SGN:SGN:NREQ=0 907871 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-50 Timed Request DISPLAYTXT 907877 SGN:SGN:NREQ=0 910095 !TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=NACK: Req PC 911095 SGN:SGN:NREQ=0 911101 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=1,st=OK: 911128 !SGN:BND:TMR 911532 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=0: 911532 SGN:SKP:MSG CMD=3,TYPE=16 911532 SGN:SGN:NREQ=0 912541 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 912542 SGN:NCE:XMT,TO=10 912542 SGN:SGN:NREQ=0 913549 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... TEMP1 SP sent :14.00 913549 SGN:SGN:NREQ=0 917999 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 933576 SGN:SGN:NREQ=0 935925 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 953838 SGN:SGN:NREQ=0 953845 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.68 974095 SGN:SGN:NREQ=0 974102 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.68 974102 SGN:SGN:NREQ=0 976921 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 976921 SGN:SGN:NREQ=0 978536 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-50 Timed Request DISPLAYTXT 978542 SGN:SGN:NREQ=0 981157 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 981279 !SGN:BND:TMR 982281 TSF:MSG:READ,0-0-10,s=12,c=3,t=16,pt=0,l=0,sg=1: 982281 SGN:SKP:MSG CMD=3,TYPE=16 982281 SGN:SGN:NREQ=0 984496 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 984497 SGN:NCE:XMT,TO=10 Req PC 984497 SGN:SGN:NREQ=0 986024 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: 987060 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 987060 SGN:SKP:MSG CMD=3,TYPE=16 987060 SGN:SGN:NREQ=0 988069 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 988070 SGN:NCE:XMT,TO=10 988070 SGN:SGN:NREQ=0 989485 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... TEMP1 SP sent :14.00 989485 SGN:SGN:NREQ=0 990747 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 1010218 SGN:SGN:NREQ=0 1011224 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 1030696 SGN:SGN:NREQ=0 1031702 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.68 1049616 SGN:SGN:NREQ=0 1049623 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.68 1049623 SGN:SGN:NREQ=0 1052450 !TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=NACK:0 Tx Error 1 1052650 SGN:SGN:NREQ=0 1053656 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=1,st=OK:0 1053856 SGN:SGN:NREQ=0 1056674 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 Timed Request DISPLAYTXT 1056679 SGN:SGN:NREQ=0 1059090 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 1059123 !SGN:BND:TMR 1060124 TSF:MSG:READ,0-0-10,s=12,c=3,t=16,pt=0,l=0,sg=1: 1060125 SGN:SKP:MSG CMD=3,TYPE=16 1060125 SGN:SGN:NREQ=0 1064845 !TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=NACK:<NONCE> 1064845 !SGN:NCE:XMT,TO=10 FAIL Req PC 1064845 SGN:SGN:NREQ=0 1066333 !TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=1,st=NACK: 1067333 SGN:SGN:NREQ=0 1068340 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=2,st=OK:Boot ... TEMP1 SP sent :14.00 1068340 SGN:SGN:NREQ=0 1070320 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 1089012 SGN:SGN:NREQ=0 1089019 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 1109269 SGN:SGN:NREQ=0 1110275 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received SendInterval Timed :TEMPERATURE :21.68 1128968 SGN:SGN:NREQ=0 1129584 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.68 1129585 SGN:SGN:NREQ=0 1131006 !TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=NACK:0 Tx Error 1 1131206 SGN:SGN:NREQ=0 1132415 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=1,st=OK:0 1132615 SGN:SGN:NREQ=0 1133706 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 Timed Request DISPLAYTXT 1133712 SGN:SGN:NREQ=0 1137529 TSF:MSG:SEND,10-10-0-0,s=12,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 1137558 !SGN:BND:TMR 1137760 TSF:MSG:READ,0-0-10,s=12,c=3,t=16,pt=0,l=0,sg=1: 1137760 SGN:SKP:MSG CMD=3,TYPE=16 1137760 SGN:SGN:NREQ=0 1138976 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 1138977 SGN:NCE:XMT,TO=10 Req PC 1138977 SGN:SGN:NREQ=0 1139982 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: 1141012 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 1141012 SGN:SKP:MSG CMD=3,TYPE=16 1141012 SGN:SGN:NREQ=0 1143433 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 1143434 SGN:NCE:XMT,TO=10 1143434 SGN:SGN:NREQ=0 1144441 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=8,sg=0,ft=0,st=OK:Boot ... TEMP1 SP sent :14.00 1144441 SGN:SGN:NREQ=0 1145677 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received TEMP1 SP sent :14.00 1165148 SGN:SGN:NREQ=0 1166384 TSF:MSG:SEND,10-10-0-0,s=1,c=1,t=45,pt=7,l=5,sg=0,ft=0,st=OK:14.0 Sent OK ACK Received
-
Help or advice on getting node to RECEIVE data for text child objects
Hi All.
MySensors ver = 2.2.0
Controller Domoticz
MCU = teensy 3.2
Reported Signal Strength = -52dbI have a MySensors based thermostat, which has existed for about 2 years. I have a nice to have feature, which id to display some text on the HMI, which is "who is home" and consequently what preferred temperature is set.
The only way I could get this to work, was to register a child object as a additional setpoint and use code to infer some text to displayaccording to the integer value of this "set point" ( not the actual temperature setpoint, just a handy method to pass the data) e.g.
1 = Nigel
2 = Emma
3 = Nigel & Emma= 4 = Manual
this worked ok, but there were many failed updates from the controller.
I had assumed this to be related to hardware, so I built a test node, with a different MCU and Radio, this worked almost flawlessly, admittedly it had less code on it, as it didn't have a HMI, and I was just testing the transmission, and retrieval of data.
As part of this testing, I learnt to use the "V_TEXT" type, and was able to transfer an incrementing count and some other text reliably.
I have modified my main program (thermostat) to utilise V_TEXT rather then the clunky work around I was employing, this would allow me to send other text as desired, and display it on the thermostat much easier.IBuilt the node using NEW hardware but still had severe problems with the transfer of data TO the node, either by pushing it by updating the child object on the controller, OR requesting it from the node. NOTE that any data transferred the other way i.e. sent from the node, works fine.
I then set about trying to refine this using the origional hardware from the thermostat, now employting this used hardware as a testing node.
I have run this for days, counting successful and failed PUSH updates ( I also sent data, but wasn't concerned to establish the reliability, as I know it is already very high)
These push updates were made by using the node update a child, use script on controller to change data on another text child, causing it to be pushed to the node. The node compared what it sent on a child object, with whar is received, and so long as they were different, the transfer of data was OK.
I did this on a unsigned, then as a signed node, to see if that was part of the issue.
The results were Unsigned = 97% success for pushed data reception
Signed = 92% Success.
Not Ideal, but good enough , as the low priority text update would most likely be "caught" on the next pull request, or push update.All looking good then?
I modified my thermostat code to reflect what I had successfully used on the test node.
Still loads of issues getting this data reliably into the node.
Here is a current log -- see below
I have tried changing Node ID's to see if there was some sort of hangover in domoticz, but that doesn't seem to have helped at all.
Thias post was too long to send, So I will have to put the sketch code and the log file on other posts below this
Suggestions please?
Regards
Nigel -
Question about security signing, and when it is "applied"
Hi,
Background.
I have a smart thermostat node, which is signed, and requires signed messages from the gateway.
As a nice to have, as part of the initialisation, time is requested., this is used to post the boot time in a text field back in the controller.
when developing this version of the thermostat, I didn't use signing, until deployment, and all proceeded more or less as expected. After deployment however, it became apparent that "booting" was taking a considerable period of time ( up to 3 mins on one occasion) I narrowed this down to the infinate loop of getting the time I had created (now limited to 5 tries) in the startup().
Prior to enabling the signing, the booting would complete in circa 40 secs ( I have 10 or so child objects and use wait(250); between presentations).My question : Is signing applied to ALL communications, including presentations, or is it only applied after the initial preambles, and utilised only on "received" commands( requested or directed)?
Looking at the log of the node, once connected back up, the signing " NONCE KEY"t ype packets didn't appear until after much time, and definitely not at the start of the logs.
here is an example log
3522 TSF:MSG:SEND,10-10-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 4318 TSF:MSG:READ,0-0-10,s=255,c=3,t=8,pt=1,l=1,sg=0:0 4319 SGN:SKP:MSG CMD=3,TYPE=8 4319 TSF:MSG:FPAR OK,ID=0,D=1 5523 TSM:FPAR:OK 5523 TSM:ID 5523 TSM:ID:OK 5523 TSM:UPL 5523 SGN:SGN:NREQ=0 5529 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1 6866 TSF:MSG:READ,0-0-10,s=255,c=3,t=25,pt=1,l=1,sg=0:1 6867 SGN:SKP:MSG CMD=3,TYPE=25 6867 TSF:MSG:PONG RECV,HP=1 6867 TSM:UPL:OK 6867 TSM:READY:ID=10,PAR=0,DIS=1 6867 SGN:PRE:SGN REQ 6867 SGN:PRE:WHI NREQ 6867 SGN:SGN:NREQ=0 8390 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0101 8390 SGN:PRE:XMT,TO=0 8390 SGN:PRE:WAIT GW 9598 TSF:MSG:READ,0-0-10,s=255,c=3,t=15,pt=6,l=2,sg=0:0100 9598 SGN:SKP:MSG CMD=3,TYPE=15 9598 SGN:SGN:NREQ=0 10604 TSF:MSG:SEND,10-10-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.2.0 10605 SGN:SGN:NREQ=0 12729 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0 13753 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 13753 SGN:SKP:MSG CMD=3,TYPE=16 13753 SGN:SGN:NREQ=0 14762 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 14763 SGN:NCE:XMT,TO=10 LivingRm Thermostat Present, 1.1.11 14763 SGN:SGN:NREQ=0 18109 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=11,pt=0,l=19,sg=0,ft=0,st=OK:LivingRm Thermostat 18109 SGN:SGN:NREQ=0 19115 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=12,pt=0,l=6,sg=0,ft=0,st=OK:1.1.11 19116 SGN:SGN:NREQ=0 20124 TSF:MSG:SEND,10-10-0-0,s=0,c=0,t=6,pt=0,l=16,sg=0,ft=0,st=OK:Room Temperature 20224 SGN:SGN:NREQ=0 20232 TSF:MSG:SEND,10-10-0-0,s=5,c=0,t=33,pt=0,l=18,sg=0,ft=0,st=OK:Thermostat RX RSSI 20333 SGN:SGN:NREQ=0 21546 TSF:MSG:SEND,10-10-0-0,s=2,c=0,t=3,pt=0,l=16,sg=0,ft=0,st=OK:Thermostat Relay 21646 SGN:SGN:NREQ=0 23579 TSF:MSG:SEND,10-10-0-0,s=3,c=0,t=3,pt=0,l=13,sg=0,ft=0,st=OK:Heat Override 23679 SGN:SGN:NREQ=0 24909 !TSF:MSG:SEND,10-10-0-0,s=1,c=0,t=14,pt=0,l=13,sg=0,ft=0,st=NACK:Temp Setpoint 25009 SGN:SGN:NREQ=0 25016 TSF:MSG:SEND,10-10-0-0,s=6,c=0,t=4,pt=0,l=11,sg=0,ft=1,st=OK:Oil Tank PC 25117 SGN:SGN:NREQ=0 27896 TSF:MSG:SEND,10-10-0-0,s=7,c=0,t=36,pt=0,l=16,sg=0,ft=0,st=OK:Text Who is Home 27996 SGN:SGN:NREQ=0 29315 TSF:MSG:SEND,10-10-0-0,s=8,c=0,t=3,pt=0,l=14,sg=0,ft=0,st=OK:SP Update Flag 29415 SGN:SGN:NREQ=0 30553 TSF:MSG:SEND,10-10-0-0,s=9,c=0,t=3,pt=0,l=13,sg=0,ft=0,st=OK:HotWater Flag 30653 SGN:SGN:NREQ=0 35314 !TSF:MSG:SEND,10-10-0-0,s=10,c=0,t=36,pt=0,l=20,sg=0,ft=0,st=NACK:Returned Who is Home 35414 SGN:SGN:NREQ=0 36635 TSF:MSG:SEND,10-10-0-0,s=11,c=0,t=36,pt=0,l=8,sg=0,ft=1,st=OK:BootTime LivingRm Thermostat END Present, 1.1.11 36635 MCO:REG:REQ 36635 SGN:SGN:NREQ=0 37641 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 37855 !SGN:BND:TMR 38857 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 38857 SGN:SKP:MSG CMD=3,TYPE=16 38857 SGN:SGN:NREQ=0 41278 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 41279 SGN:NCE:XMT,TO=10 41279 SGN:SGN:NREQ=0 43691 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 43905 !SGN:BND:TMR 44906 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 44907 SGN:SKP:MSG CMD=3,TYPE=16 44907 SGN:SGN:NREQ=0 45916 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 45917 SGN:NCE:XMT,TO=10 45917 SGN:SGN:NREQ=0 48532 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 49746 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 49747 SGN:SKP:MSG CMD=3,TYPE=16 49747 SGN:SGN:NREQ=0 50756 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 50757 SGN:NCE:XMT,TO=10 50757 SGN:SGN:NREQ=0 52251 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 53465 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 53466 SGN:SKP:MSG CMD=3,TYPE=16 53466 SGN:SGN:NREQ=0 54475 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 54476 SGN:NCE:XMT,TO=10 54476 MCO:BGN:STP Loaded values :Relay output : 1 54522 SGN:SGN:NREQ=0 56543 TSF:MSG:SEND,10-10-0-0,s=2,c=2,t=2,pt=0,l=0,sg=0,ft=0,st=OK: uplink available 57561 TSF:MSG:READ,0-0-10,s=2,c=3,t=16,pt=0,l=0,sg=1: 57561 SGN:SKP:MSG CMD=3,TYPE=16 57561 SGN:SGN:NREQ=0 60305 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 60306 SGN:NCE:XMT,TO=10 60306 SGN:SGN:NREQ=0 61312 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 Req SP 61312 SGN:SGN:NREQ=0 63331 TSF:MSG:SEND,10-10-0-0,s=1,c=2,t=0,pt=0,l=0,sg=0,ft=0,st=OK: Req PC 63581 SGN:SGN:NREQ=0 63587 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: display init WD Enabled 63633 SGN:SGN:NREQ=0 66044 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 66065 !SGN:BND:TMR 67067 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 67067 SGN:SKP:MSG CMD=3,TYPE=16 67067 SGN:SGN:NREQ=0 69282 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 69283 SGN:NCE:XMT,TO=10 Time REQ 1 69283 SGN:SGN:NREQ=0 70288 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 71317 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 71318 SGN:SKP:MSG CMD=3,TYPE=16 71318 SGN:SGN:NREQ=0 73739 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 73740 SGN:NCE:XMT,TO=10 Time REQ 2 73740 SGN:SGN:NREQ=0 74745 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 75778 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 75778 SGN:SKP:MSG CMD=3,TYPE=16 75778 SGN:SGN:NREQ=0 76787 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 76788 SGN:NCE:XMT,TO=10 Time REQ 3 76788 SGN:SGN:NREQ=0 79541 !TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=NACK: Time REQ 4 80041 SGN:SGN:NREQ=0 80047 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=1,st=OK: 80676 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 80677 SGN:SKP:MSG CMD=3,TYPE=16 80677 SGN:SGN:NREQ=0 81310 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 81311 SGN:NCE:XMT,TO=10 Time REQ 5 81311 SGN:SGN:NREQ=0 82316 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 83334 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 83335 SGN:SKP:MSG CMD=3,TYPE=16 83335 SGN:SGN:NREQ=0 84344 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 84345 SGN:NCE:XMT,TO=10 Time REQ 6 84345 SGN:SGN:NREQ=0 86553 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 87115 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 87115 SGN:SKP:MSG CMD=3,TYPE=16 87116 SGN:SGN:NREQ=0 88745 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 88746 SGN:NCE:XMT,TO=10 Time REQ 7 88746 SGN:SGN:NREQ=0 89751 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 89980 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 89980 SGN:SKP:MSG CMD=3,TYPE=16 89980 SGN:SGN:NREQ=0 91195 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 91196 SGN:NCE:XMT,TO=10 Time REQ 8 91196 SGN:SGN:NREQ=0 92201 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 93231 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 93231 SGN:SKP:MSG CMD=3,TYPE=16 93231 SGN:SGN:NREQ=0 94240 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 94241 SGN:NCE:XMT,TO=10 Time REQ 9 94241 SGN:SGN:NREQ=0 95653 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 96680 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 96681 SGN:SKP:MSG CMD=3,TYPE=16 96681 SGN:SGN:NREQ=0 97690 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 97691 SGN:NCE:XMT,TO=10 Time REQ 10 97691 SGN:SGN:NREQ=0 99804 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: Timedout 99805 MCO:BGN:INIT OK,TSP=1 100831 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 100831 SGN:SKP:MSG CMD=3,TYPE=16 100831 SGN:SGN:NREQ=0 103964 !TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=NACK:<NONCE> 103964 !SGN:NCE:XMT,TO=10 FAIL Interval Timed :TEMPERATURE :2.08 104743 SGN:SGN:NREQ=0 105749 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=1,st=OK:2.08 105750 SGN:SGN:NREQ=0 108040 !TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=NACK:1 TX Error 1 108240 SGN:SGN:NREQ=0 110077 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=1,st=OK:1 110277 SGN:SGN:NREQ=0 111486 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 111486 SGN:SGN:NREQ=0 114512 !TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=NACK: 114512 SGN:SGN:NREQ=0 114518 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=1,st=OK: Who is Home Status requested :Manual ... Setpoint requested : 114518 SGN:SGN:NREQ=0 115930 TSF:MSG:SEND,10-10-0-0,s=1,c=2,t=0,pt=0,l=0,sg=0,ft=0,st=OK: Tank Level requested : 115930 SGN:SGN:NREQ=0 116935 TSF:MSG:SEND,10-10-0-0,s=6,c=2,t=3,pt=0,l=0,sg=0,ft=0,st=OK: Who is Home Status requested :116936 SGN:SGN:NREQ=0 118993 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 118994 SGN:SGN:NREQ=0 120406 TSF:MSG:SEND,10-10-0-0,s=8,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 requesting time 120406 SGN:SGN:NREQ=0 122817 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=1,pt=0,l=0,sg=0,ft=0,st=OK: 122843 !SGN:BND:TMR 123340 TSF:MSG:READ,0-0-10,s=255,c=3,t=16,pt=0,l=0,sg=1: 123341 SGN:SKP:MSG CMD=3,TYPE=16 123341 SGN:SGN:NREQ=0 124350 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 124351 SGN:NCE:XMT,TO=10 125132 TSF:MSG:READ,0-0-10,s=255,c=3,t=1,pt=0,l=10,sg=1:1628438223 125132 SGN:BND:NONCE=83AF3CB5A90DA3FE33E45D341D189DA4040C6960FC16D6AB88AAAAAAAAAAAAAA 125133 SGN:BND:HMAC=8BEA40C87AB3848F8455AEB87414BC6AFFF9C5337BC0AD46CBA29CC66B7E5D3D 125133 SGN:VER:OK Time value received: Time value valid: 1628438223 15 57 3 8 8 2021 Interval Timed :TEMPERATURE :20.93 180614 SGN:SGN:NREQ=0 181620 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:20.93 181621 SGN:SGN:NREQ=0 183839 !TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=NACK:0 TX Error 1 184039 SGN:SGN:NREQ=0 184451 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=1,st=OK:0 184651 SGN:SGN:NREQ=0 186266 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 186266 SGN:SGN:NREQ=0 188475 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 188475 SGN:SGN:NREQ=0 189887 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: Who is Home Status requested :Manual ... 191743 TSF:MSG:READ,0-0-10,s=7,c=3,t=16,pt=0,l=0,sg=1: 191743 SGN:SKP:MSG CMD=3,TYPE=16 191743 SGN:SGN:NREQ=0 192752 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 192753 SGN:NCE:XMT,TO=10 Interval Timed :TEMPERATURE :21.00 249889 SGN:SGN:NREQ=0 249896 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.00 249896 SGN:SGN:NREQ=0 251309 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 251309 SGN:SGN:NREQ=0 252721 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-46 252721 SGN:SGN:NREQ=0 256544 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 256545 SGN:SGN:NREQ=0 260159 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: Who is Home Status requested :Manual ... 261009 !SGN:BND:TMR 262011 TSF:MSG:READ,0-0-10,s=7,c=3,t=16,pt=0,l=0,sg=1: 262011 SGN:SKP:MSG CMD=3,TYPE=16 262011 SGN:SGN:NREQ=0 263020 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 263021 SGN:NCE:XMT,TO=10 305253 !SGN:BND:TMR 305618 TSF:MSG:READ,0-0-10,s=6,c=3,t=16,pt=0,l=0,sg=1: 305618 SGN:SKP:MSG CMD=3,TYPE=16 305618 SGN:SGN:NREQ=0 307450 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 307451 SGN:NCE:XMT,TO=10 Interval Timed :TEMPERATURE :21.03 320699 SGN:SGN:NREQ=0 321909 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.03 321910 SGN:SGN:NREQ=0 323322 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 323322 SGN:SGN:NREQ=0 324557 !TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=NACK:-47 TX Error 1 324757 SGN:SGN:NREQ=0 326060 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=1,st=OK:-47 326260 SGN:SGN:NREQ=0 327469 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 327469 SGN:SGN:NREQ=0 328881 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: Who is Home Status requested :Manual ... 329730 !SGN:BND:TMR 329732 TSF:MSG:READ,0-0-10,s=7,c=3,t=16,pt=0,l=0,sg=1: 329732 SGN:SKP:MSG CMD=3,TYPE=16 329732 SGN:SGN:NREQ=0 329743 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 329743 SGN:NCE:XMT,TO=10 331573 TSF:MSG:READ,0-0-10,s=7,c=2,t=47,pt=0,l=13,sg=1:Nigel & Emma. 331573 SGN:BND:NONCE=FF59DC85B6BA907ED7E4FD01AF31A6B5ABC510899FDDCF9435AAAAAAAAAAAAAA 331574 SGN:BND:HMAC=559FD511A684ADEA51424D002F644A41D472903F21D014B718FAFED81ABC1CA8 331574 SGN:VER:OK REQ_Msg :47 MsgCmd:2 childID:7 Data:S/Nigel & Emma. Data:I/ 0 Data:B/ 0 Incomming message From REQUEST Who is Home Nigel & Emma. 331574 SGN:SGN:NREQ=0 332582 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=13,sg=0,ft=0,st=OK:Nigel & Emma. Who is Home Status sent :Nigel & Emma. Interval Timed :TEMPERATURE :21.06 388892 SGN:SGN:NREQ=0 388899 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.06 388899 SGN:SGN:NREQ=0 390124 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 390124 SGN:SGN:NREQ=0 392536 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-47 392536 SGN:SGN:NREQ=0 393948 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 393948 SGN:SGN:NREQ=0 396584 !TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=NACK: Who is Home Status requested :Nigel & Emma. Interval Timed :TEMPERATURE :21.06 457058 SGN:SGN:NREQ=0 457065 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=1,st=OK:21.06 457065 SGN:SGN:NREQ=0 458487 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 458487 SGN:SGN:NREQ=0 459712 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:-47 459712 SGN:SGN:NREQ=0 461075 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: 461075 SGN:SGN:NREQ=0 462833 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK: Who is Home Status requested :Nigel & Emma. 463690 TSF:MSG:READ,0-0-10,s=7,c=3,t=16,pt=0,l=0,sg=1: 463690 SGN:SKP:MSG CMD=3,TYPE=16 463690 SGN:SGN:NREQ=0 463701 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 463701 SGN:NCE:XMT,TO=10 465080 TSF:MSG:READ,0-0-10,s=7,c=2,t=47,pt=0,l=13,sg=1:Nigel & Emma. 465080 SGN:BND:NONCE=35BA9FD8ED811D46C550E974D198A143AC4B7AFB7A7EF19583AAAAAAAAAAAAAA 465081 SGN:BND:HMAC=EDAFEA584D649579693E418859559FBF30E8C2D66019EDB34705F4EE4D982201 465081 SGN:VER:OK REQ_Msg :47 MsgCmd:2 childID:7 Data:S/Nigel & Emma. Data:I/ 0 Data:B/ 0 Incomming message From REQUEST Who is Home Nigel & Emma. 465082 SGN:SGN:NREQ=0 465847 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=13,sg=0,ft=0,st=OK:Nigel & Emma. Who is Home Status sent :Nigel & Emma. 466679 TSF:MSG:READ,0-0-10,s=10,c=1,t=47,pt=0,l=13,sg=0:Nigel & Emma. 466679 SGN:SKP:ACK CMD=1,TYPE=47 466679 TSF:MSG:ACK +Ack FMGW *InMsgty :47 MsgComd:1 childID:10 Data:S/Nigel & Emma. Data:I/ 0 Data:B/ 0 480931 TSF:MSG:READ,0-0-10,s=1,c=3,t=16,pt=0,l=0,sg=1: 480932 SGN:SKP:MSG CMD=3,TYPE=16 480932 SGN:SGN:NREQ=0 480948 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 480948 SGN:NCE:XMT,TO=10 Interval Timed :TEMPERATURE :21.06 523178 SGN:SGN:NREQ=0 523185 TSF:MSG:SEND,10-10-0-0,s=0,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:21.06 523185 SGN:SGN:NREQ=0 524598 TSF:MSG:SEND,10-10-0-0,s=2,c=1,t=2,pt=1,l=1,sg=0,ft=0,st=OK:0 524598 SGN:SGN:NREQ=0 527746 !TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=NACK:-46 TX Error 1 527933 !SGN:BND:TMR 528935 TSF:MSG:READ,0-0-10,s=5,c=1,t=37,pt=2,l=2,sg=0:-46 528935 SGN:SKP:ACK CMD=1,TYPE=37 528935 TSF:MSG:ACK +Ack FMGW *InMsgty :37 MsgComd:1 childID:5 Data:S/ Data:I/ -46 Data:B/ 0 528935 SGN:SGN:NREQ=0 529941 TSF:MSG:SEND,10-10-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=1,st=OK:-46 530141 SGN:SGN:NREQ=0 533171 !TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=NACK: 533171 SGN:SGN:NREQ=0 533177 TSF:MSG:SEND,10-10-0-0,s=7,c=2,t=47,pt=0,l=0,sg=0,ft=1,st=OK: Who is Home Status requested :Nigel & Emma. 534034 TSF:MSG:READ,0-0-10,s=7,c=3,t=16,pt=0,l=0,sg=1: 534034 SGN:SKP:MSG CMD=3,TYPE=16 534034 SGN:SGN:NREQ=0 534045 TSF:MSG:SEND,10-10-0-0,s=255,c=3,t=17,pt=6,l=25,sg=0,ft=0,st=OK:<NONCE> 534045 SGN:NCE:XMT,TO=10 534875 TSF:MSG:READ,0-0-10,s=7,c=2,t=47,pt=0,l=13,sg=1:Nigel & Emma. 534876 SGN:BND:NONCE=C998AAAA6856A8D375F6B5DC6AC0CCE8DF6482EA8EDF525B91AAAAAAAAAAAAAA 534877 SGN:BND:HMAC=A3EF9AFD5F50A710D6D50A0ADA4F4391CA059E491050D972D996179144356451 534877 SGN:VER:OK REQ_Msg :47 MsgCmd:2 childID:7 Data:S/Nigel & Emma. Data:I/ 0 Data:B/ 0 Incomming message From REQUEST Who is Home Nigel & Emma. 534877 SGN:SGN:NREQ=0 534885 TSF:MSG:SEND,10-10-0-0,s=10,c=1,t=47,pt=0,l=13,sg=0,ft=0,st=OK:Nigel & Emma. Who is Home Status sent :Nigel & Emma. 536197 TSF:MSG:READ,0-0-10,s=10,c=1,t=47,pt=0,l=13,sg=0:Nigel & Emma. 536197 SGN:SKP:ACK CMD=1,TYPE=47 536197 TSF:MSG:ACK +Ack FMGW *InMsgty :47 MsgComd:1 childID:10 Data:S/Nigel & Emma. Data:I/ 0 Data:B/ 0
Kind Regards
Nigel -
RE: Sensebender. Still same problems with NEW board and radio
Question.
Would using the "ClearEepromConfig" sketch, do anything nasty to the sencebender gateway eeprom? -
RE: Is there a "standard" way to terminate a sleep time, after waking by an interrupt?
@Yveaux
Yes, that is what the sencebender gateway was for, so I could start with an easily swappable item, and the core of the network, however you might remember that I am having issues with sencebender gateway.. with no solution in sight. -
RE: Is there a "standard" way to terminate a sleep time, after waking by an interrupt?
We seem to have been talking at a little crossed terminology.
When I refer to the IRQ handler I mean to reference the FUNCTION which is handling the Interrupt, when the interrupt PIN is in the required state. That's why I couldn't understand why the reference to passing the handler to the sleep function was likely to work.This really brings us back to the point where I WAS using the MYSensors sleep with the interrupt pin, and interrogating as to the return (reason for waking), which in my case was "-1" even though it definitely had woken with the interrupt.
This implementation ( and I didn't try a minimal sketch) wasn't working for me, as I couldn't determine why it had woken.This ultimately led me to my current solution, and calling in a loop, a 1000ms sleep, and breaking the loop if the interrupt had fired, having set a flag.
I always use a WDT on my sketches, knowing that MYSensors, stores the state before sleeping, (needing as it does the hardware timer on avr) and restores it after waking (having read this elsewhere)
this is the current and working sketch, , as I say I have tried using a "pure" mysensors solution, but I ONLY got "-1" for wakeupReason returned from the function.
wakeupReason = sleep(digitalPinToInterrupt(INT_PIN), CHANGE, sleepTime);
this is the current working code.
// Enable debug prints //#define MY_DEBUG //#define MY_DEBUG_VERBOSE_SIGNING //#define MY_SIGNING_SOFT //#define MY_SIGNING_SOFT_RANDOMSEED_PIN 7 //#define MY_SIGNING_REQUEST_SIGNATURES #define MY_SPLASH_SCREEN_DISABLED //#define MY_DISABLE_RAM_ROUTING_TABLE_FEATURE #define MY_TRANSPORT_WAIT_READY_MS 10000 #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RFM69_433MHZ // Set your frequency here //#define MY_RFM69_MAX_POWER_LEVEL_DBM (13) // max. TX power 10dBm = 10mW #define MY_RFM69_TX_POWER_DBM (13) #define MY_IS_RFM69HW // Omit if your RFM is not "H" #define MY_NODE_ID 32 #include <MySensors.h> #include <SPI.h> #include <math.h> //#include <TimeLib.h> #include <avr/wdt.h> #include <Vcc.h> #define CHILD_ID 32 // Id of the sensor child #define VCC_MIN 3.1 #define VCC_MAX 4.16 Vcc vcc; #define CHILD_ID_S_MOISTURE 1 //#define CHILD_ID_RELAYSTATUS 2 //#define CHILD_ID_SETPOINT 7 //#define CHILD_ID_WATERTIME 9 #define CHILD_ID_RX_RSSI 5 #define CHILD_ID_BATVCC 6 #define CHILD_ID_RAIN 11 // Indicates Tripped when rain detected #define CHILD_ID_RAINREPORT 10 // Indicates Tripped when rain detected // EEPROM LOCATIONS int SetpointADD = 1; int WaterTimeADD = 2; int WatermmADD = 8; // Pins int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point int Soil_ip_pin = A1; int SoilPowerPin = 6; int RainPin = 3; const int Debouncetime = 40; int wakeupReason =0; float fullCounter = 0.0f; float bucketSize = 0.3f;//0.3mm rain per tip volatile float Watermmtot = 0.0f; float prevWatermmtot = 0.0f; float rainratenow = 0.0f; unsigned long previousMillis, previousrelayMillis, previouprescence , SleepCnt , RemainSleep = 0; volatile long currenttime = 0; int ScaledMoisture = 20; int oldBatteryPcnt = 0; int SoilSetPoint = loadState(SetpointADD) ; int WaterTime = loadState(WaterTimeADD) ; int RawSoil = 0; bool Slept = 0; volatile bool RainInterrupt = 0; bool ValidWaterCount = 0; float batteryV = 3.70f; int batteryPcnt = 50; unsigned long MYsleepTime , BaseMYsleepTime = 900000;//SLEEP_SEC*1000 * SLEEP_MINS * 60 ; //period_t is an enum type defined in the LowPower library (LowPower.h) 900000 unsigned long lastTipTime = 0; // Initialize message MyMessage msgSoil(CHILD_ID_S_MOISTURE, V_LEVEL); MyMessage msgRxRSSI(CHILD_ID_RX_RSSI, V_LEVEL); MyMessage msgVcc(CHILD_ID_BATVCC, V_VOLTAGE); MyMessage msgRain(CHILD_ID_RAINREPORT, V_RAIN); MyMessage lastCounterMsg(CHILD_ID_RAIN, V_TEXT); MyMessage msgRainRate(CHILD_ID_RAINREPORT, V_RAINRATE); // EEPROM //This function will write a 4 byte (32bit) long to the eeprom at //the specified address to address + 3. void EEPROMWritelong(int address, long value) { wdt_reset(); //Decomposition from a long to 4 bytes by using bitshift. //One = Most significant -> Four = Least significant byte byte four = (value & 0xFF); byte three = ((value >> 8) & 0xFF); byte two = ((value >> 16) & 0xFF); byte one = ((value >> 24) & 0xFF); //Write the 4 bytes into the eeprom memory. saveState(address, four); saveState(address + 1, three); saveState(address + 2, two); saveState(address + 3, one); }// end eeprom write long EEPROMReadlong(long address)// long eeprom read { //Read the 4 bytes from the eeprom memory. long four = loadState(address); long three = loadState(address + 1); long two = loadState(address + 2); long one = loadState(address + 3); //Return the recomposed long by using bitshift. return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF); } // end EEPROM void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(SoilPowerPin, OUTPUT); // output pinMode(RainPin, INPUT_PULLUP); EIFR = (1 << INTF0) | (1 << INTF1); // prevent initial trigger, clear interrupt wait(100); EIFR = (1 << INTF0) | (1 << INTF1); attachInterrupt(digitalPinToInterrupt(RainPin), RainINT, FALLING); request( CHILD_ID_RAIN, V_TEXT); // readback count wait(4000); if (ValidWaterCount == 0 ) { // of did not receive valid count request( CHILD_ID_RAIN, V_TEXT); // readback count wait(4000); } if (ValidWaterCount == 0 ) { // of did not receive valid count Watermmtot = EEPROMReadlong(WatermmADD); // long eeprom read prevWatermmtot = Watermmtot; } // ReadEEprom(); wdt_disable(); // Might be redundant as the bootloader should have done this already Serial.print("Rain & Soil Sensor RES 1.1.2"); // use the 1.1 V internal reference #if defined(__AVR_ATmega2560__) analogReference(INTERNAL1V1); #else analogReference(INTERNAL); #endif // ReadEEprom(); wdt_enable(WDTO_8S); }//end setup void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Soil Moisture_R", "1.1.2"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID_S_MOISTURE, S_MOISTURE, "Soil Moisture", false); wait(250); present(CHILD_ID_RX_RSSI, S_SOUND, "Soil & Rain Transmitter RX RSSI", true); wait(250); present(CHILD_ID_BATVCC, S_MULTIMETER, "Battery V", false); wait(250); present(CHILD_ID_RAINREPORT, S_RAIN, "Rain", true); wait(250); present(CHILD_ID_RAIN, S_INFO, "TxTCount", true); }//end presentation void loop() { // put your main code here, to run repeatedly: wdt_reset(); if (RainInterrupt == 0) { getSoil(); //unsigned long currentMillis = millis(); // use the 1.1 V internal reference #if defined(__AVR_ATmega2560__) analogReference(INTERNAL1V1); #else analogReference(INTERNAL); #endif for (int i = 0; i <= 10; i++) { analogRead(BATTERY_SENSE_PIN); wait(5); } // get the battery Voltage int sensorValue = analogRead(BATTERY_SENSE_PIN);// * ((1e6 + 470e3) / 470e3); #ifdef MY_DEBUG Serial.print("sensorValue raw "); Serial.println(analogRead(BATTERY_SENSE_PIN)); Serial.print("sensorValue V "); Serial.println(sensorValue); #endif wdt_reset(); // 1M, 470K divider across battery and using internal ADC ref of 1.1V // Sense point is bypassed with 0.1 uF cap to reduce noise at that point // ((1e6+360e3)/360e3)*1.1 = Vmax = 4.15 Volts // 3.44/1023 = Volts per bit = 0.004062127 //long batteryVt = map(sensorValue, 0 , 1023, 0, 43000); // get the target positionsensorValue * 0.003363075; batteryV = (sensorValue * (4.08 / 3.88)) * 0.004062127; // batteryVt/10000; batteryPcnt = ((batteryV - VCC_MIN) / (VCC_MAX - VCC_MIN)) * 100;// sensorValue / 10; send(msgSoil.set(ScaledMoisture, 0)); // send moisture wait(100); wdt_reset(); //float volts = vcc.Read_Volts(); send(msgVcc.set(batteryV, 1)); //#ifdef MY_DEBUG Serial.print("Soil Moisture : "); Serial.print(ScaledMoisture); Serial.println(" cb"); Serial.print("Battery Voltage count: "); Serial.print(sensorValue); Serial.println(" int"); Serial.print("Battery Voltage: "); Serial.print(batteryV); Serial.println(" V"); Serial.print("Battery percent: "); Serial.print(batteryPcnt); Serial.println(" %"); //#endif wdt_reset(); if (oldBatteryPcnt != batteryPcnt) { // sendBatteryReport(); sendBatteryLevel(batteryPcnt); oldBatteryPcnt = batteryPcnt; } RX_SEND(); if( Watermmtot == prevWatermmtot){ rainratenow = 0.0; } else{ rainratenow = ((Watermmtot - prevWatermmtot)*4) *100; } resend(lastCounterMsg.set(Watermmtot, 1) , true, 5); resend(msgRain.set(Watermmtot, 1) , true, 5); if(resend(msgRainRate.set(rainratenow,1) , true, 2)){ prevWatermmtot = Watermmtot; } }// end if not rain interrupt if (batteryPcnt < 35) { //send(msgText.set("Sleep*10"), false); Serial.println("Sleep*10"); MYsleepTime = (BaseMYsleepTime * 10); wdt_reset(); //requestTime();// get time } else if (batteryPcnt<75 and batteryPcnt>35) { //send(msgText.set("Sleep*3"), false); Serial.println("Sleep*3"); wdt_reset(); MYsleepTime = (BaseMYsleepTime * 3) ; //requestTime();// get time } else { Serial.println("Sleep :"); wdt_reset(); MYsleepTime = BaseMYsleepTime; } // Serial.print("Sleepcount = ");Serial.println(SleepCnt); // Serial.print("Sleeptime = ");Serial.println(MYsleepTime); MYsleepTime = constrain((MYsleepTime - SleepCnt),1000,MYsleepTime);// calc how much left from last sleep // Serial.print("RemainSleep = ");Serial.println(MYsleepTime); SleepCnt=0; RainInterrupt = 0; // Sleeping while((SleepCnt < MYsleepTime) ){//or (wakeupReason != digitalPinToInterrupt(RainPin)) or (RainInterrupt != 1) sleep(1000); if(RainInterrupt == 1){ break; } else{ Slept = 1; wdt_reset(); } SleepCnt=SleepCnt+1000; // count another 1000ms of sleep wdt_reset(); }// end while if(SleepCnt>=(MYsleepTime - 10000)){ SleepCnt=0; } attachInterrupt(digitalPinToInterrupt(RainPin), RainINT, FALLING); wdt_reset(); wait(Debouncetime + 1);// need to wait otherwisee the debounce won't work because millis not updated in sleep if (RainInterrupt == 1) {// of woken due to rain bucket actions // Serial.println(F("RainInterrupt=1")); resend(lastCounterMsg.set(Watermmtot, 1) , true, 5); if (resend(msgRain.set(Watermmtot, 1) , true, 5)) { // only reset if sending succeeded resend(msgRainRate.set(30) , true, 5); fullCounter = fullCounter - 1; //RainInterrupt = 0; EEPROMWritelong(WatermmADD, Watermmtot); } } }// end loop void receive(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. wdt_reset(); if (message.isAck()) { #ifdef MY_DEBUG Serial.println("+Ack FMGW"); #endif } #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getFloat()); #endif if (message.type == V_STATUS || S_HEATER || V_LIGHT || V_TEXT || V_HVAC_SETPOINT_HEAT || V_PERCENTAGE || S_DIMMER) { if (message.getCommand() == 2) { // THIS PROCESSES THE CONTROLLERS EXPECTED STATE OF THE OUTPUT // put code here to be executed when the message is from a request #ifdef MY_DEBUG Serial.print("REQ_Msg :"); Serial.print(message.type); Serial.print(" MsgCmd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif switch (message.sensor) {// the child ID case 11: Watermmtot = message.getFloat(); //#ifdef MY_DEBUG Serial.print(" Incoming Rain mm:"); Serial.println(Watermmtot); //#endif if (Watermmtot >= 0.3) { EEPROMWritelong(WatermmADD, Watermmtot); } else { Watermmtot = EEPROMReadlong(WatermmADD); // long eeprom read ValidWaterCount = 1; } break; } // end switch }// end msg=2 if (message.getCommand() == 1) { // THIS PROCESSES DIRECTED COMMANDS #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif /* switch (message.sensor) {// the child ID case 2: TempRELAY = message.getBool(); //#ifdef MY_DEBUG Serial.print(" Incoming rELAY:"); Serial.println(TempRELAY); //#endif watering = TempRELAY; send(msgRelay.set(watering, 0)); // send relay state break; } // end switch */ }// end if msg = 1 }// end msg type function }// end void loop void RX_SEND() { wdt_reset(); send(msgRxRSSI.set(transportGetSignalReport(SR_RX_RSSI))); wdt_reset(); } void sendBatteryReport() { wdt_reset(); float p = vcc.Read_Perc(VCC_MIN, VCC_MAX, true); int batteryPcnt = static_cast<int>(p); #ifdef MY_DEBUG Serial.print("Battery is: "); Serial.println(batteryPcnt); #endif sendBatteryLevel(batteryPcnt); } void ReadEEprom() { wdt_reset(); //if (EEPROMReadlong(SetpointADD) > 0) SoilSetPoint = EEPROMReadlong(SetpointADD) ; //if (EEPROMReadlong(WaterTimeADD) > 0) WaterTime = EEPROMReadlong(WaterTimeADD) ; if (loadState(SetpointADD) > 0) SoilSetPoint = loadState(SetpointADD) ; if (loadState(WaterTimeADD) > 0) WaterTime = loadState(WaterTimeADD) ; } void getSoil() { wdt_reset(); analogReference(DEFAULT); for (int i = 0; i <= 10; i++) { RawSoil = analogRead(Soil_ip_pin); wait(5); } int soilCount = 0; unsigned long soilAccum = 0; digitalWrite(SoilPowerPin, HIGH); // Power up sensor wait(1000); RawSoil = analogRead(Soil_ip_pin); soilAccum = RawSoil; while (soilCount < 50) { wait(20); RawSoil = analogRead(Soil_ip_pin); if (RawSoil > 0) { soilAccum = soilAccum + RawSoil; } soilCount++; } Serial.print("SCount "); Serial.println(soilCount); RawSoil = soilAccum / soilCount; Serial.print("RawSoil "); Serial.println(RawSoil); wait(1); ScaledMoisture = map(RawSoil, 600 , 0, 0, 100); // get the target position digitalWrite(SoilPowerPin, LOW); // Power down sensor Serial.print("Scaled Moisture CB "); Serial.println(ScaledMoisture); } void RainINT() { unsigned long thisTipTime = millis(); if (thisTipTime - lastTipTime > (Debouncetime)) {// debounce 20ms Watermmtot = Watermmtot + bucketSize; fullCounter = fullCounter + bucketSize;//Count so we send the counter for every 1mm RainInterrupt = 1; lastTipTime = thisTipTime; } } bool resend(MyMessage & msg, bool ack, int repeats) { wdt_reset(); int repeat = 1; int repeatdelay = 0; boolean sendOK = false; while ((sendOK == false) and (repeat < repeats)) { if (send(msg, ack)) { sendOK = true; } else { sendOK = false; Serial.print("TX Error "); Serial.println(repeat); repeatdelay += 200; if (repeatdelay >= 500) { repeatdelay = 500; } wdt_reset(); } repeat++; wait(repeatdelay); } return sendOK; }
For my own education, I will build a new note to test the sleep and interrupt, and see where / how thing are not working, but that won't happen till later in the week.
Please note that I am still on V 2.2.0
-
RE: Is there a "standard" way to terminate a sleep time, after waking by an interrupt?
@Yveaux
Many thanks for coming back.
Ok, so if I just define the pin as INPUT_PULLUP, and not attach a interrupt, when I call sleep, passing the interrupt handler, it WILL call the handler?the compiler outputs:
N:\Home Automation\Arduino\MySensors\Solar_Soil_Sensor_and_Rain_Sensor\Solar_Soil_Sensor_and_Rain_Sensor.ino:298:40: warning: invalid conversion from 'void (*)()' to 'uint8_t {aka unsigned char}' [-fpermissive] sleep(RainINT, FALLING, MYsleepTime);
when I invoke the sleep, passing the interrupt handler.
How is it possible to utilise an interrupt on a otherwise sleeping node, WHEN it is awake?
This is one of the "issues" I mentioned above by not using / invoking the attachment of the interrupt at all, and why I tried to use the normal attachment of the interrupt, then detaching it, just prior to calling the sleep (albeit passing the pin, rather than the handler). devices that would suffer without being able to utilise interrupts when awake, would include among others, a rain sensor, a flow meter, even a pulse counter for say a water meter, if battery powered, and needing to sleep.separately, what is wrong with my watchdog implementation?
many thanks and regards Nigel
-
RE: Is there a "standard" way to terminate a sleep time, after waking by an interrupt?
Update.
If I called the sleep, passing the interrupt, rather than the pinsleep(digitalPinToInterrupt(RainINT), FALLING, MYsleepTime);
the compiler complained (unsurprisingly I thought), as it is expecting a uint8_t
int8_t hwSleep(const uint8_t interrupt1, const uint8_t mode1, const uint8_t interrupt2,
If I passed the pin, but utilised the return value as in
wakeupReason = sleep(digitalPinToInterrupt(INT_PIN), CHANGE, sleepTime);
ALL Iever got was "-1" as a return value, EVEN THOUGH the interrupt was firing (still having defined and attached the interrupt)
pinMode(RainPin, INPUT_PULLUP); EIFR = (1 << INTF0) | (1 << INTF1); // prevent initial trigger, clear interrupt wait(100); EIFR = (1 << INTF0) | (1 << INTF1); attachInterrupt(digitalPinToInterrupt(RainPin), RainINT, FALLING);
If I detached the interrupt, before calling the sleep function with
detachInterrupt(digitalPinToInterrupt(RainPin));
then the Interrupt failed to execute, NOR did the return value from the sleep function deviate from -1
I was calling this for 1000ms, in a loop, checking the return value and executing the original RainInt() to do the counting/ incrementing.In the end I have gone with my own looping sleep, and checking at the end of each sleep, for the interrupt having fired.
// Sleeping while((SleepCnt < MYsleepTime) ){ sleep(1000); if(RainInterrupt == 1){ break; } else{ Slept = 1; wdt_reset(); } SleepCnt=SleepCnt+1000; // count another 1000ms of sleep wdt_reset(); }// end while
This works fine, including actioning the interrupt if it occurs during the rest of the loop.
should anyone be interested, here is the whole sketch, no douby it can be much improved upon, but it is working.
// Enable debug prints //#define MY_DEBUG //#define MY_DEBUG_VERBOSE_SIGNING //#define MY_SIGNING_SOFT //#define MY_SIGNING_SOFT_RANDOMSEED_PIN 7 //#define MY_SIGNING_REQUEST_SIGNATURES #define MY_SPLASH_SCREEN_DISABLED //#define MY_DISABLE_RAM_ROUTING_TABLE_FEATURE #define MY_TRANSPORT_WAIT_READY_MS 10000 #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RFM69_433MHZ // Set your frequency here //#define MY_RFM69_MAX_POWER_LEVEL_DBM (13) // max. TX power 10dBm = 10mW #define MY_RFM69_TX_POWER_DBM (13) #define MY_IS_RFM69HW // Omit if your RFM is not "H" #define MY_NODE_ID 32 #include <MySensors.h> #include <SPI.h> #include <math.h> //#include <TimeLib.h> #include <avr/wdt.h> #include <Vcc.h> #define CHILD_ID 32 // Id of the sensor child #define VCC_MIN 3.1 #define VCC_MAX 4.16 Vcc vcc; #define CHILD_ID_S_MOISTURE 1 //#define CHILD_ID_RELAYSTATUS 2 //#define CHILD_ID_SETPOINT 7 //#define CHILD_ID_WATERTIME 9 #define CHILD_ID_RX_RSSI 5 #define CHILD_ID_BATVCC 6 #define CHILD_ID_RAIN 11 // Indicates Tripped when rain detected #define CHILD_ID_RAINREPORT 10 // Indicates Tripped when rain detected // EEPROM LOCATIONS int SetpointADD = 1; int WaterTimeADD = 2; int WatermmADD = 8; // Pins int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point int Soil_ip_pin = A1; int SoilPowerPin = 6; int RainPin = 3; const int Debouncetime = 40; int wakeupReason =0; float fullCounter = 0.0f; float bucketSize = 0.3f;//0.3mm rain per tip volatile float Watermmtot = 0.0f; float prevWatermmtot = 0.0f; float rainratenow = 0.0f; unsigned long previousMillis, previousrelayMillis, previouprescence , SleepCnt , RemainSleep = 0; volatile long currenttime = 0; int ScaledMoisture = 20; int oldBatteryPcnt = 0; int SoilSetPoint = loadState(SetpointADD) ; int WaterTime = loadState(WaterTimeADD) ; int RawSoil = 0; bool Slept = 0; volatile bool RainInterrupt = 0; bool ValidWaterCount = 0; float batteryV = 3.70f; int batteryPcnt = 50; unsigned long MYsleepTime , BaseMYsleepTime = 900000;//SLEEP_SEC*1000 * SLEEP_MINS * 60 ; //period_t is an enum type defined in the LowPower library (LowPower.h) 900000 unsigned long lastTipTime = 0; // Initialize message MyMessage msgSoil(CHILD_ID_S_MOISTURE, V_LEVEL); MyMessage msgRxRSSI(CHILD_ID_RX_RSSI, V_LEVEL); MyMessage msgVcc(CHILD_ID_BATVCC, V_VOLTAGE); MyMessage msgRain(CHILD_ID_RAINREPORT, V_RAIN); MyMessage lastCounterMsg(CHILD_ID_RAIN, V_TEXT); MyMessage msgRainRate(CHILD_ID_RAINREPORT, V_RAINRATE); // EEPROM //This function will write a 4 byte (32bit) long to the eeprom at //the specified address to address + 3. void EEPROMWritelong(int address, long value) { wdt_reset(); //Decomposition from a long to 4 bytes by using bitshift. //One = Most significant -> Four = Least significant byte byte four = (value & 0xFF); byte three = ((value >> 8) & 0xFF); byte two = ((value >> 16) & 0xFF); byte one = ((value >> 24) & 0xFF); //Write the 4 bytes into the eeprom memory. saveState(address, four); saveState(address + 1, three); saveState(address + 2, two); saveState(address + 3, one); }// end eeprom write long EEPROMReadlong(long address)// long eeprom read { //Read the 4 bytes from the eeprom memory. long four = loadState(address); long three = loadState(address + 1); long two = loadState(address + 2); long one = loadState(address + 3); //Return the recomposed long by using bitshift. return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF); } // end EEPROM void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(SoilPowerPin, OUTPUT); // output pinMode(RainPin, INPUT_PULLUP); EIFR = (1 << INTF0) | (1 << INTF1); // prevent initial trigger, clear interrupt wait(100); EIFR = (1 << INTF0) | (1 << INTF1); attachInterrupt(digitalPinToInterrupt(RainPin), RainINT, FALLING); request( CHILD_ID_RAIN, V_TEXT); // readback count wait(4000); if (ValidWaterCount == 0 ) { // of did not receive valid count request( CHILD_ID_RAIN, V_TEXT); // readback count wait(4000); } if (ValidWaterCount == 0 ) { // of did not receive valid count Watermmtot = EEPROMReadlong(WatermmADD); // long eeprom read prevWatermmtot = Watermmtot; } // ReadEEprom(); wdt_disable(); // Might be redundant as the bootloader should have done this already Serial.print("Rain & Soil Sensor RES 1.1.2"); // use the 1.1 V internal reference #if defined(__AVR_ATmega2560__) analogReference(INTERNAL1V1); #else analogReference(INTERNAL); #endif // ReadEEprom(); wdt_enable(WDTO_8S); }//end setup void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Soil Moisture_R", "1.1.2"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID_S_MOISTURE, S_MOISTURE, "Soil Moisture", false); wait(250); present(CHILD_ID_RX_RSSI, S_SOUND, "Soil & Rain Transmitter RX RSSI", true); wait(250); present(CHILD_ID_BATVCC, S_MULTIMETER, "Battery V", false); wait(250); present(CHILD_ID_RAINREPORT, S_RAIN, "Rain", true); wait(250); present(CHILD_ID_RAIN, S_INFO, "TxTCount", true); }//end presentation void loop() { // put your main code here, to run repeatedly: wdt_reset(); if (RainInterrupt == 0) { getSoil(); //unsigned long currentMillis = millis(); // use the 1.1 V internal reference #if defined(__AVR_ATmega2560__) analogReference(INTERNAL1V1); #else analogReference(INTERNAL); #endif for (int i = 0; i <= 10; i++) { analogRead(BATTERY_SENSE_PIN); wait(5); } // get the battery Voltage int sensorValue = analogRead(BATTERY_SENSE_PIN);// * ((1e6 + 470e3) / 470e3); #ifdef MY_DEBUG Serial.print("sensorValue raw "); Serial.println(analogRead(BATTERY_SENSE_PIN)); Serial.print("sensorValue V "); Serial.println(sensorValue); #endif wdt_reset(); // 1M, 470K divider across battery and using internal ADC ref of 1.1V // Sense point is bypassed with 0.1 uF cap to reduce noise at that point // ((1e6+360e3)/360e3)*1.1 = Vmax = 4.15 Volts // 3.44/1023 = Volts per bit = 0.004062127 //long batteryVt = map(sensorValue, 0 , 1023, 0, 43000); // get the target positionsensorValue * 0.003363075; batteryV = (sensorValue * (4.08 / 3.88)) * 0.004062127; // batteryVt/10000; batteryPcnt = ((batteryV - VCC_MIN) / (VCC_MAX - VCC_MIN)) * 100;// sensorValue / 10; send(msgSoil.set(ScaledMoisture, 0)); // send moisture wait(100); wdt_reset(); //float volts = vcc.Read_Volts(); send(msgVcc.set(batteryV, 1)); //#ifdef MY_DEBUG Serial.print("Soil Moisture : "); Serial.print(ScaledMoisture); Serial.println(" cb"); Serial.print("Battery Voltage count: "); Serial.print(sensorValue); Serial.println(" int"); Serial.print("Battery Voltage: "); Serial.print(batteryV); Serial.println(" V"); Serial.print("Battery percent: "); Serial.print(batteryPcnt); Serial.println(" %"); //#endif wdt_reset(); if (oldBatteryPcnt != batteryPcnt) { // sendBatteryReport(); sendBatteryLevel(batteryPcnt); oldBatteryPcnt = batteryPcnt; } RX_SEND(); if( Watermmtot == prevWatermmtot){ rainratenow = 0.0; } else{ rainratenow = ((Watermmtot - prevWatermmtot)*4) *100; } resend(lastCounterMsg.set(Watermmtot, 1) , true, 5); resend(msgRain.set(Watermmtot, 1) , true, 5); if(resend(msgRainRate.set(rainratenow,1) , true, 2)){ prevWatermmtot = Watermmtot; } }// end if not rain interrupt if (batteryPcnt < 35) { //send(msgText.set("Sleep*10"), false); Serial.println("Sleep*10"); MYsleepTime = (BaseMYsleepTime * 10); wdt_reset(); //requestTime();// get time } else if (batteryPcnt<75 and batteryPcnt>35) { //send(msgText.set("Sleep*3"), false); Serial.println("Sleep*3"); wdt_reset(); MYsleepTime = (BaseMYsleepTime * 3) ; //requestTime();// get time } else { Serial.println("Sleep :"); wdt_reset(); MYsleepTime = BaseMYsleepTime; } // Serial.print("Sleepcount = ");Serial.println(SleepCnt); // Serial.print("Sleeptime = ");Serial.println(MYsleepTime); MYsleepTime = constrain((MYsleepTime - SleepCnt),1000,MYsleepTime);// calc how much left from last sleep // Serial.print("RemainSleep = ");Serial.println(MYsleepTime); SleepCnt=0; RainInterrupt = 0; // Sleeping while((SleepCnt < MYsleepTime) ){//or (wakeupReason != digitalPinToInterrupt(RainPin)) or (RainInterrupt != 1) sleep(1000); if(RainInterrupt == 1){ break; } else{ Slept = 1; wdt_reset(); } SleepCnt=SleepCnt+1000; // count another 1000ms of sleep wdt_reset(); }// end while if(SleepCnt>=(MYsleepTime - 10000)){ SleepCnt=0; } attachInterrupt(digitalPinToInterrupt(RainPin), RainINT, FALLING); wdt_reset(); wait(Debouncetime + 1);// need to wait otherwisee the debounce won't work because millis not updated in sleep if (RainInterrupt == 1) {// of woken due to rain bucket actions // Serial.println(F("RainInterrupt=1")); resend(lastCounterMsg.set(Watermmtot, 1) , true, 5); if (resend(msgRain.set(Watermmtot, 1) , true, 5)) { // only reset if sending succeeded resend(msgRainRate.set(30) , true, 5); fullCounter = fullCounter - 1; //RainInterrupt = 0; EEPROMWritelong(WatermmADD, Watermmtot); } } }// end loop void receive(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. wdt_reset(); if (message.isAck()) { #ifdef MY_DEBUG Serial.println("+Ack FMGW"); #endif } #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getFloat()); #endif if (message.type == V_STATUS || S_HEATER || V_LIGHT || V_TEXT || V_HVAC_SETPOINT_HEAT || V_PERCENTAGE || S_DIMMER) { if (message.getCommand() == 2) { // THIS PROCESSES THE CONTROLLERS EXPECTED STATE OF THE OUTPUT // put code here to be executed when the message is from a request #ifdef MY_DEBUG Serial.print("REQ_Msg :"); Serial.print(message.type); Serial.print(" MsgCmd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif switch (message.sensor) {// the child ID case 11: Watermmtot = message.getFloat(); //#ifdef MY_DEBUG Serial.print(" Incoming Rain mm:"); Serial.println(Watermmtot); //#endif if (Watermmtot >= 0.3) { EEPROMWritelong(WatermmADD, Watermmtot); } else { Watermmtot = EEPROMReadlong(WatermmADD); // long eeprom read ValidWaterCount = 1; } break; } // end switch }// end msg=2 if (message.getCommand() == 1) { // THIS PROCESSES DIRECTED COMMANDS #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif }// end if msg = 1 }// end msg type function }// end void loop void RX_SEND() { wdt_reset(); send(msgRxRSSI.set(transportGetSignalReport(SR_RX_RSSI))); wdt_reset(); } void sendBatteryReport() { wdt_reset(); float p = vcc.Read_Perc(VCC_MIN, VCC_MAX, true); int batteryPcnt = static_cast<int>(p); #ifdef MY_DEBUG Serial.print("Battery is: "); Serial.println(batteryPcnt); #endif sendBatteryLevel(batteryPcnt); } void ReadEEprom() { wdt_reset(); //if (EEPROMReadlong(SetpointADD) > 0) SoilSetPoint = EEPROMReadlong(SetpointADD) ; //if (EEPROMReadlong(WaterTimeADD) > 0) WaterTime = EEPROMReadlong(WaterTimeADD) ; if (loadState(SetpointADD) > 0) SoilSetPoint = loadState(SetpointADD) ; if (loadState(WaterTimeADD) > 0) WaterTime = loadState(WaterTimeADD) ; } void getSoil() { wdt_reset(); analogReference(DEFAULT); for (int i = 0; i <= 10; i++) { RawSoil = analogRead(Soil_ip_pin); wait(5); } int soilCount = 0; unsigned long soilAccum = 0; digitalWrite(SoilPowerPin, HIGH); // Power up sensor wait(1000); RawSoil = analogRead(Soil_ip_pin); soilAccum = RawSoil; while (soilCount < 50) { wait(20); RawSoil = analogRead(Soil_ip_pin); if (RawSoil > 0) { soilAccum = soilAccum + RawSoil; } soilCount++; } Serial.print("SCount "); Serial.println(soilCount); RawSoil = soilAccum / soilCount; Serial.print("RawSoil "); Serial.println(RawSoil); wait(1); ScaledMoisture = map(RawSoil, 600 , 0, 0, 100); // get the target position digitalWrite(SoilPowerPin, LOW); // Power down sensor Serial.print("Scaled Moisture CB "); Serial.println(ScaledMoisture); } void RainINT() { unsigned long thisTipTime = millis(); if (thisTipTime - lastTipTime > (Debouncetime)) {// debounce 20ms Watermmtot = Watermmtot + bucketSize; fullCounter = fullCounter + bucketSize;//Count so we send the counter for every 1mm RainInterrupt = 1; lastTipTime = thisTipTime; } } bool resend(MyMessage & msg, bool ack, int repeats) { wdt_reset(); int repeat = 1; int repeatdelay = 0; boolean sendOK = false; while ((sendOK == false) and (repeat < repeats)) { if (send(msg, ack)) { sendOK = true; } else { sendOK = false; Serial.print("TX Error "); Serial.println(repeat); repeatdelay += 200; if (repeatdelay >= 500) { repeatdelay = 500; } wdt_reset(); } repeat++; wait(repeatdelay); } return sendOK; }
Many thanks for the input.
Regards
Nigel -
RE: Is there a "standard" way to terminate a sleep time, after waking by an interrupt?
@Yveaux
many thanks for the response.
So if I understand correctly, you are saying (in my code above) that I should callsleep(digitalPinToInterrupt(RainINT), FALLING, MYsleepTime);
that is passing the interrupt handler RATHER than the PIN?
BUT still call
pinMode(RainPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(RainPin), RainINT, FALLING);
in the setup?
From my reading of the code you reference above, any existing interrupt handler is disabled prior to the final sleeping, and re-attachment of the interrupt. However I don't see where it might reference the interrupt handler.
I see that a value is returned after waking, which is either the pin, or "0" dependant on wake cause, and this is utilised in the example you quote above.Question, Is an existing interrupt handler re-instated anywhere after waking? or is it up to me to re-attech the IRQ handler? I ask, as if not then any "event" occurring whilst not sleeping will be missed. which in my case is quite likely during heavy rain.
Sorry if I am being a little thick. Might it be better for me to use just a short timed sleep (say 1 sec), loop for n sec to provide my ultimate sleep time, subject to breaking the loop if a interrupt occurs, by setting a flag in the IRQ handler.
I realise this is what is sort of being done in the example above, using Mysensors returned value from the sleep + interrupt function, but it won't (I think) address the case of an interrupt occuring whilst actioning the several seconds potentially utilised during the main loop, especially if there are re-transmit attempts.Once again many thanks for the help.
regards Nigel
-
RE: Is there a "standard" way to terminate a sleep time, after waking by an interrupt?
@Yveaux
Could you elaborate a little please on the declaration of the interrupt?
Are you saying that the sleep functionsleep(RainPin, FALLING, MYsleepTime);
Sets an interrupt handler, the same as
attachInterrupt(digitalPinToInterrupt(RainPin), RainINT, FALLING);
If that's the case, how does it know what routeen to call?
If I do not declare the interrupt, as usual, then surely, when code is in the middle of executing in the loop, or another function, how would the event be captured?many thanks
Nigel -
RE: Is there a "standard" way to terminate a sleep time, after waking by an interrupt?
Full sketch as requested. the sketch includes some serial.prints in the interrupt handler for debug purposes.
the vast majority of the interrupt code, was in the main loop, I have moved it in order to get "on demand" transmissions, so I can test Domoticz / setup the device. I HAD to include somthing for the rainrate, else donoticz wouldnt create the device, even though it showed up in hardware OK.// Enable debug prints //#define MY_DEBUG //#define MY_DEBUG_VERBOSE_SIGNING //#define MY_SIGNING_SOFT //#define MY_SIGNING_SOFT_RANDOMSEED_PIN 7 //#define MY_SIGNING_REQUEST_SIGNATURES #define MY_SPLASH_SCREEN_DISABLED //#define MY_DISABLE_RAM_ROUTING_TABLE_FEATURE #define MY_TRANSPORT_WAIT_READY_MS 10000 #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RFM69_433MHZ // Set your frequency here //#define MY_RFM69_MAX_POWER_LEVEL_DBM (13) // max. TX power 10dBm = 10mW #define MY_RFM69_TX_POWER_DBM (13) #define MY_IS_RFM69HW // Omit if your RFM is not "H" #define MY_NODE_ID 32 #include <MySensors.h> #include <SPI.h> #include <math.h> #include <TimeLib.h> #include <avr/wdt.h> #include <Vcc.h> #define CHILD_ID 32 // Id of the sensor child #define VCC_MIN 3.1 #define VCC_MAX 4.1 Vcc vcc; #define CHILD_ID_S_MOISTURE 1 //#define CHILD_ID_RELAYSTATUS 2 //#define CHILD_ID_SETPOINT 7 //#define CHILD_ID_WATERTIME 9 #define CHILD_ID_RX_RSSI 5 #define CHILD_ID_BATVCC 6 #define CHILD_ID_RAIN 11 // Indicates Tripped when rain detected #define CHILD_ID_RAINREPORT 10 // Indicates Tripped when rain detected // EEPROM LOCATIONS int SetpointADD = 1; int WaterTimeADD = 2; int WatermmADD = 8; // Pins int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point int Soil_ip_pin = A1; int SoilPowerPin = 6; int RainPin = 3; float fullCounter = 0.0f; float bucketSize = 0.3f;//0.3mm rain per tip float Watermmtot = 0.0f; unsigned long previousMillis, previousrelayMillis, previouprescence = 0; volatile long currenttime = 0; int ScaledMoisture = 20; int oldBatteryPcnt = 0; int SoilSetPoint = loadState(SetpointADD) ; int WaterTime = loadState(WaterTimeADD) ; int RawSoil = 0; bool Slept = 0; bool RainInterrupt = 0; bool ValidWaterCount = 0; unsigned long MYsleepTime = 3600000;//SLEEP_SEC*1000 * SLEEP_MINS * 60 ; //period_t is an enum type defined in the LowPower library (LowPower.h) unsigned long lastTipTime = 0; // Initialize message MyMessage msgSoil(CHILD_ID_S_MOISTURE, V_LEVEL); MyMessage msgRxRSSI(CHILD_ID_RX_RSSI, V_LEVEL); MyMessage msgVcc(CHILD_ID_BATVCC, V_VOLTAGE); MyMessage msgRain(CHILD_ID_RAINREPORT, V_RAIN); MyMessage lastCounterMsg(CHILD_ID_RAIN, V_TEXT); MyMessage msgRainRate(CHILD_ID_RAINREPORT, V_RAINRATE); // EEPROM //This function will write a 4 byte (32bit) long to the eeprom at //the specified address to address + 3. void EEPROMWritelong(int address, long value) { wdt_reset(); //Decomposition from a long to 4 bytes by using bitshift. //One = Most significant -> Four = Least significant byte byte four = (value & 0xFF); byte three = ((value >> 8) & 0xFF); byte two = ((value >> 16) & 0xFF); byte one = ((value >> 24) & 0xFF); //Write the 4 bytes into the eeprom memory. saveState(address, four); saveState(address + 1, three); saveState(address + 2, two); saveState(address + 3, one); }// end eeprom write long EEPROMReadlong(long address)// long eeprom read { //Read the 4 bytes from the eeprom memory. long four = loadState(address); long three = loadState(address + 1); long two = loadState(address + 2); long one = loadState(address + 3); //Return the recomposed long by using bitshift. return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF); } // end EEPROM void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(SoilPowerPin, OUTPUT); // output pinMode(RainPin, INPUT_PULLUP); EIFR = (1 << INTF0) | (1 << INTF1); // prevent initial trigger, clear interrupt wait(100); EIFR = (1 << INTF0) | (1 << INTF1); attachInterrupt(digitalPinToInterrupt(RainPin), RainINT, FALLING); request( CHILD_ID_RAIN, V_TEXT); // readback count wait(4000); if (ValidWaterCount == 0 ) { // of did not receive valid count request( CHILD_ID_RAIN, V_TEXT); // readback count wait(4000); } if (ValidWaterCount == 0 ) { // of did not receive valid count Watermmtot = EEPROMReadlong(WatermmADD); // long eeprom read } // ReadEEprom(); wdt_disable(); // Might be redundant as the bootloader should have done this already Serial.print("Rain & Soil Sensor RES 1.1.1"); // use the 1.1 V internal reference #if defined(__AVR_ATmega2560__) analogReference(INTERNAL1V1); #else analogReference(INTERNAL); #endif // ReadEEprom(); wdt_enable(WDTO_8S); }//end setup void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Soil Moisture_R", "1.1.1"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID_S_MOISTURE, S_MOISTURE, "Soil Moisture", false); wait(250); present(CHILD_ID_RX_RSSI, S_SOUND, "Soil & Rain Transmitter RX RSSI", true); wait(250); present(CHILD_ID_BATVCC, S_MULTIMETER, "Battery V", false); wait(250); present(CHILD_ID_RAINREPORT, S_RAIN, "Rain", true); wait(250); present(CHILD_ID_RAIN, S_INFO, "TxTCount", true); }//end presentation void loop() { // put your main code here, to run repeatedly: wdt_reset(); getSoil(); //unsigned long currentMillis = millis(); // use the 1.1 V internal reference #if defined(__AVR_ATmega2560__) analogReference(INTERNAL1V1); #else analogReference(INTERNAL); #endif for (int i = 0; i <= 10; i++) { analogRead(BATTERY_SENSE_PIN); wait(5); } // get the battery Voltage int sensorValue = analogRead(BATTERY_SENSE_PIN);// * ((1e6 + 470e3) / 470e3); #ifdef MY_DEBUG Serial.print("sensorValue raw "); Serial.println(analogRead(BATTERY_SENSE_PIN)); Serial.print("sensorValue V "); Serial.println(sensorValue); #endif wdt_reset(); // 1M, 470K divider across battery and using internal ADC ref of 1.1V // Sense point is bypassed with 0.1 uF cap to reduce noise at that point // ((1e6+360e3)/360e3)*1.1 = Vmax = 4.15 Volts // 3.44/1023 = Volts per bit = 0.004062127 //long batteryVt = map(sensorValue, 0 , 1023, 0, 43000); // get the target positionsensorValue * 0.003363075; float batteryV = (sensorValue * (4.08 / 3.88)) * 0.004062127; // batteryVt/10000; int batteryPcnt = ((batteryV - VCC_MIN) / (VCC_MAX - VCC_MIN)) * 100;// sensorValue / 10; send(msgSoil.set(ScaledMoisture, 0)); // send moisture wait(100); wdt_reset(); //float volts = vcc.Read_Volts(); send(msgVcc.set(batteryV, 1)); //#ifdef MY_DEBUG Serial.print("Soil Moisture : "); Serial.print(ScaledMoisture); Serial.println(" cb"); Serial.print("Battery Voltage count: "); Serial.print(sensorValue); Serial.println(" int"); Serial.print("Battery Voltage: "); Serial.print(batteryV); Serial.println(" V"); Serial.print("Battery percent: "); Serial.print(batteryPcnt); Serial.println(" %"); //#endif wdt_reset(); if (oldBatteryPcnt != batteryPcnt) { // sendBatteryReport(); sendBatteryLevel(batteryPcnt); oldBatteryPcnt = batteryPcnt; } RX_SEND(); if (batteryPcnt < 35) { //send(msgText.set("Sleep*10"), false); Serial.println("Sleep*10"); wdt_reset(); //sleep(MYsleepTime*5); // sleep(MYsleepTime); RainInterrupt = 0; sleep(RainPin, FALLING, MYsleepTime * 5); Slept = 1; wdt_reset(); //requestTime();// get time } else if (batteryPcnt<75 and batteryPcnt>35) { //send(msgText.set("Sleep*3"), false); Serial.println("Sleep"); wdt_reset(); RainInterrupt = 0; //sleep(MYsleepTime*3); // sleep(MYsleepTime); sleep(RainPin, FALLING, MYsleepTime * 3); Slept = 1; wdt_reset(); //requestTime();// get time } else { Serial.println("Sleep :"); wdt_reset(); RainInterrupt = 0; //sleep(MYsleepTime); // sleep(MYsleepTime) sleep(RainPin, FALLING, MYsleepTime); Slept = 1; wdt_reset(); } wait(100);// need to wait otherwisee the debounce won't work }// end loop void receive(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. wdt_reset(); if (message.isAck()) { #ifdef MY_DEBUG Serial.println("+Ack FMGW"); #endif } #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getFloat()); #endif if (message.type == V_STATUS || S_HEATER || V_LIGHT || V_TEXT || V_HVAC_SETPOINT_HEAT || V_PERCENTAGE || S_DIMMER) { if (message.getCommand() == 2) { // THIS PROCESSES THE CONTROLLERS EXPECTED STATE OF THE OUTPUT // put code here to be executed when the message is from a request #ifdef MY_DEBUG Serial.print("REQ_Msg :"); Serial.print(message.type); Serial.print(" MsgCmd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif switch (message.sensor) {// the child ID case 11: Watermmtot = message.getFloat(); //#ifdef MY_DEBUG Serial.print(" Incoming Rain mm:"); Serial.println(Watermmtot); //#endif if (Watermmtot >= 0.3) { EEPROMWritelong(WatermmADD, Watermmtot); } else { Watermmtot = EEPROMReadlong(WatermmADD); // long eeprom read ValidWaterCount = 1; } break; } // end switch }// end msg=2 if (message.getCommand() == 1) { // THIS PROCESSES DIRECTED COMMANDS #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif /* switch (message.sensor) {// the child ID case 2: TempRELAY = message.getBool(); //#ifdef MY_DEBUG Serial.print(" Incoming rELAY:"); Serial.println(TempRELAY); //#endif watering = TempRELAY; send(msgRelay.set(watering, 0)); // send relay state break; } // end switch */ }// end if msg = 1 }// end msg type function }// end void loop void RX_SEND() { wdt_reset(); send(msgRxRSSI.set(transportGetSignalReport(SR_RX_RSSI))); wdt_reset(); } void sendBatteryReport() { wdt_reset(); float p = vcc.Read_Perc(VCC_MIN, VCC_MAX, true); int batteryPcnt = static_cast<int>(p); #ifdef MY_DEBUG Serial.print("Battery is: "); Serial.println(batteryPcnt); #endif sendBatteryLevel(batteryPcnt); } void ReadEEprom() { wdt_reset(); //if (EEPROMReadlong(SetpointADD) > 0) SoilSetPoint = EEPROMReadlong(SetpointADD) ; //if (EEPROMReadlong(WaterTimeADD) > 0) WaterTime = EEPROMReadlong(WaterTimeADD) ; if (loadState(SetpointADD) > 0) SoilSetPoint = loadState(SetpointADD) ; if (loadState(WaterTimeADD) > 0) WaterTime = loadState(WaterTimeADD) ; } void getSoil() { wdt_reset(); analogReference(DEFAULT); for (int i = 0; i <= 10; i++) { RawSoil = analogRead(Soil_ip_pin); wait(5); } int soilCount = 0; unsigned long soilAccum = 0; digitalWrite(SoilPowerPin, HIGH); // Power up sensor wait(1000); RawSoil = analogRead(Soil_ip_pin); soilAccum = RawSoil; while (soilCount < 50) { wait(20); RawSoil = analogRead(Soil_ip_pin); if (RawSoil > 0) { soilAccum = soilAccum + RawSoil; } soilCount++; } Serial.print("SCount "); Serial.println(soilCount); RawSoil = soilAccum / soilCount; Serial.print("RawSoil "); Serial.println(RawSoil); wait(1); ScaledMoisture = map(RawSoil, 600 , 0, 0, 100); // get the target position digitalWrite(SoilPowerPin, LOW); // Power down sensor Serial.print("Scaled Moisture CB "); Serial.println(ScaledMoisture); } void RainINT() { unsigned long thisTipTime = millis(); Serial.println("int"); if (thisTipTime - lastTipTime > 20UL) {// debounce 100ms Watermmtot = Watermmtot + bucketSize; fullCounter = fullCounter + bucketSize;//Count so we send the counter for every 1mm Serial.println(Watermmtot); RainInterrupt = 1; lastTipTime = thisTipTime; } wait(21);// need to wait otherwisee the debounce won't work if (RainInterrupt == 1) {// of woken due to rain bucket actions Serial.print("Total Water = "); Serial.print(Watermmtot); Serial.println(" mm"); if (fullCounter >= 1) { resend(lastCounterMsg.set(Watermmtot, 1) , true, 5); if (resend(msgRain.set(Watermmtot, 1) , true, 5)) { // only reset if sending succeeded resend(msgRainRate.set(100) , true, 5); Serial.print("Total Water Transmitted = "); Serial.print(Watermmtot); Serial.println(" mm"); fullCounter = fullCounter - 1; RainInterrupt = 0; EEPROMWritelong(WatermmADD, Watermmtot); } } } } bool resend(MyMessage & msg, bool ack, int repeats) { wdt_reset(); int repeat = 1; int repeatdelay = 0; boolean sendOK = false; while ((sendOK == false) and (repeat < repeats)) { if (send(msg, ack)) { sendOK = true; } else { sendOK = false; Serial.print("TX Error "); Serial.println(repeat); repeatdelay += 200; if (repeatdelay >= 500) { repeatdelay = 500; } wdt_reset(); } repeat++; wait(repeatdelay); } return sendOK; }
-
RE: Is there a "standard" way to terminate a sleep time, after waking by an interrupt?
@mfalkvidd
Yes, that is exactly what I am doing, however, as I hopefully explained, AFTER the interrupt, the node returns to sleep and does not action the rest of the main loop.I am Calling
sleep(RainPin, FALLING, MYsleepTime*3);
having already defined the pin and interrupt handler etc.
pinMode(RainPin, INPUT_PULLUP); EIFR = (1<<INTF0) | (1<<INTF1);// prevent initial trigger, clear interrupt wait(100); EIFR = (1<<INTF0) | (1<<INTF1); attachInterrupt(digitalPinToInterrupt(RainPin), RainINT, FALLING);
all works perfectly, in that the interrupt executes.
What I am asking is . Is there a way of stopping the sleep from continuing for the rest of the time defined by MYsleepTime? ( actually MYsleepTime = 3600000)
I can, and am for the moment, performing the calculations, and sending data to the controller in the interrupt, but that is very poor programming in principal. What I wish to do is simply set a flag, and then have the main loop execute, where I can decide what to do, and then return to sleep, after I have done all I wish.Many thanks
Nigel -
Is there a "standard" way to terminate a sleep time, after waking by an interrupt?
HI,
I have a sleeping battery node, soil moisture sensor, to which I am adding a Rain tipping bucket sensor.
The node sleeps for an hour, before waking, measuring soil, and reporting.
I have added an interrupt to this to set a flag, to process counts, and report as necessary.
The code however, due to I imagine the looping multiples of (probably) 8 sec WDT loops to enable a longer sleep function, simply goes back to sleep, untill either another interrupt, or the timeout of the sleep time, AFTER which the rest of the code executes as expected.
So my question is this, is there asleep(end);
type function? (can't find one)
I can do this by externally to the mysensors core by looping n times, and sleeping for say 8 sec, check for the flag from the interrupt, and break the loop, but is there a mysensors way to do this?
Kind Regards,
Nigel -
RE: Cannot find parent when USB plugged in, Works when NOT plugged in!
Update:
The issue seems to be with the Mega Mini board.I managed to remove the Adafruit RFM69HW daughter board from the verroboard, and wired this to a Nano, and a Teensy 3.2. Both worked with the same PSU.
The USB converter however is still giving garbage , no matter which of the three sources above.
So I am in the belated process of porting code to the teensy as the target.Many thanks for the help to you all.
Now, if I can only sort out my sensebender gateway problem....
-
RE: Cannot find parent when USB plugged in, Works when NOT plugged in!
@electrik
I'm doing one better, the motherboard has serial ports, they are on headers, and were not brought out to the rear on DB9 connectors. I have ordered a header, so I can get a native serial port to try.Regards Nigel
-
RE: Sensebender. Still same problems with NEW board and radio
@Yveaux Thank you for the clarification, big job to upgrade!
Question. Anyone know if I can run two mysensors serial gateways on Domoticz? Different network ID's? That would enable me to move nodes over to the latest release / drivers, and only have the node I was working on at the time offline! Assuming I can ever get my sensebender working!
-
RE: Sensebender. Still same problems with NEW board and radio
@rejoe2
The reason for 2.2.0 is that when I (when 2.3.0) came out, I upgraded, and quite simply nothing worked, even though in theory, no significant "breaking" changes had been made.
I could try upgrading, and building the gateway under 2.3.x, just to see if it works, but I am loth to change things, unless I can run some offline trials. I have about 20 nodes, including the whole central heating system. given it's now summer, I can give it a go, time depending.The NEW rfm69 driver, is it wirelessly compatible with the OLD driver? i.e. can old talk to new?
the first Sensebender gateway, which I inadvertantly killed, by upping the max power, was built under 2.2.0.regards Nigel
-
Sensebender. Still same problems with NEW board and radio
Re: Trouble with Sensebender gateway initialisation
Hi.
I'm having the same issues with a NEW Sensebender gateway board, fitted with a diffrent RFM69 radio.Diagnostics STILL fail at the eeprom reading.
See log
What can I possibly be doing wrong, given that the first one of these I built, worked fine?
Regards Nigel
Sensebender GateWay test routine Mysensors core version : 2.2.0 GateWay sketch version : 0.2 ---------------------------------- - > SHA204 Ok (serial : 01234DB597196D83EE) - > SD CARD SD CARD did not initialize! -> EEPROM 0;255;hu;0;hu;3 MCO:BGN:INIT GW,CP=RRNGS---,VER=2.2.0 0;255;hu;0;hu;3 TSF:LRT:OK 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 TSF:WUR:MS=0 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL 0;255;hu;0;hu;3 TSM:FAIL:RE-INIT 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL 0;255;hu;0;hu;3 TSM:FAIL:RE-INIT 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL 0;255;hu;0;hu;3 TSM:FAIL:RE-INIT 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL
-
RE: Cannot find parent when USB plugged in, Works when NOT plugged in!
Hi All,
Making the RS232 hasn't worked, in sofar as all I am getting is gibberish. I am having to use a USB to rs232 converter, I have chopped a lead, and connected to the MCU pins, but all I get is gibberish. I have tried it also on another node, to eliminate the MCU, and the output is similarly gibberish. Have obviously played with baud rates, and even UART settings, no joy. For those wanting the Pic, here it is. I have got one of the underside, but I don't think it will help.
I don't have a "real" serial port on this PC.(atleast not a DB9 on the rear)
One recent time I had the USB port connected, if found the gateway!0 MCO:BGN:INIT NODE,CP=RRNNA---,VER=2.2.0 3 TSM:INIT 4 TSF:WUR:MS=60000 7 TSM:INIT:TSP OK 8 TSM:INIT:STATID=35 10 TSF:SID:OK,ID=35 12 TSM:FPAR 1229 TSF:MSG:SEND,35-35-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 3236 !TSM:FPAR:NO REPLY 3238 TSM:FPAR 4453 TSF:MSG:SEND,35-35-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 4621 TSF:MSG:READ,0-0-35,s=255,c=3,t=8,pt=1,l=1,sg=0:0 4626 TSF:MSG:FPAR OK,ID=0,D=1 6460 TSM:FPAR:OK 6461 TSM:ID 6462 TSM:ID:OK 6464 TSM:UPL 6477 TSF:MSG:SEND,35-35-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1 6700 TSF:MSG:READ,0-0-35,s=255,c=3,t=25,pt=1,l=1,sg=0:1 6705 TSF:MSG:PONG RECV,HP=1 6708 TSM:UPL:OK 6709 TSM:READY:ID=35,PAR=0,DIS=1 6737 TSF:MSG:SEND,35-35-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100 6940 TSF:MSG:READ,0-0-35,s=255,c=3,t=15,pt=6,l=2,sg=0:0100 6957 TSF:MSG:SEND,35-35-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.2.0 6977 TSF:MSG:SEND,35-35-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0 7020 TSF:MSG:READ,0-0-35,s=255,c=3,t=6,pt=0,l=1,sg=0:M 7036 TSF:MSG:SEND,35-35-0-0,s=255,c=3,t=11,pt=0,l=12,sg=0,ft=0,st=OK:Water Relay4 7057 TSF:MSG:SEND,35-35-0-0,s=255,c=3,t=12,pt=0,l=5,sg=0,ft=0,st=OK:1.0.0 7076 TSF:MSG:SEND,35-35-0-0,s=9,c=0,t=35,pt=0,l=13,sg=0,ft=0,st=OK:Soil Moisture 7357 TSF:MSG:SEND,35-35-0-0,s=7,c=0,t=14,pt=0,l=13,sg=0,ft=0,st=OK:Soil Setpoint 7636 TSF:MSG:SEND,35-35-0-0,s=11,c=0,t=36,pt=0,l=15,sg=0,ft=0,st=OK:Water Time1 Min 7917 TSF:MSG:SEND,35-35-0-0,s=12,c=0,t=36,pt=0,l=15,sg=0,ft=0,st=OK:Water Time2 Min 8197 TSF:MSG:SEND,35-35-0-0,s=13,c=0,t=36,pt=0,l=15,sg=0,ft=0,st=OK:Water Time3 Min 8476 TSF:MSG:SEND,35-35-0-0,s=14,c=0,t=36,pt=0,l=15,sg=0,ft=0,st=OK:Water Time4 Min 9966 !TSF:MSG:SEND,35-35-0-0,s=15,c=0,t=14,pt=0,l=20,sg=0,ft=0,st=NACK:Watering UPDATE Bits 10235 TSF:MSG:SEND,35-35-0-0,s=5,c=0,t=33,pt=0,l=24,sg=0,ft=1,st=OK:Soil Transmitter RX RSSI 10459 TSF:MSG:READ,0-0-35,s=5,c=0,t=33,pt=0,l=24,sg=0:Soil Transmitter RX RSSI 10466 TSF:MSG:ACK +Ack FMGW
-
RE: Cannot find parent when USB plugged in, Works when NOT plugged in!
@skywatch
The PC port (direct, no hub) is the supply. Should provide 500mA. it's powering the mega, and the RFM breakout board, and two small H bridges, with no loads.
Ill post a pic after I try the RS232 -
RE: Cannot find parent when USB plugged in, Works when NOT plugged in!
@mfalkvidd
Have tried, however com port isn't "made" in windows, so nothing to connect to. Ill make a RS232 connection, and report back. -
RE: Cannot find parent when USB plugged in, Works when NOT plugged in!
@skywatch . The same USB port(s) and cable(s) have been used many times recently on other projects, and it works (tx only) using the 5V or 8V supplies as mentioned above. When supplied via Vin, I imagine that the USB supply is cut off from the 5v buss, though I have no schematics to back up that assumption, it is just that's what other boards do.
-
Cannot find parent when USB plugged in, Works when NOT plugged in!
Hi All,
I am building a node, for irrigation control. I am using a mini Mega 2560 based mcu, so get enough I/O .
I have used one of these boards on a previous project sucessfully. The radio (RFM69HCW) is a adafruit breakout board, which is new to me. I have already spent several hours pulling hair, when I found forum posts relating to the reset pin, and toggling it.
IF i power the system via the USB connection, it fails to find a parent.10:21:30.198 -> 0 MCO:BGN:INIT NODE,CP=RRNNA---,VER=2.2.0 10:21:30.198 -> 3 TSM:INIT 10:21:30.198 -> 4 TSF:WUR:MS=60000 10:21:30.198 -> 7 TSM:INIT:TSP OK 10:21:30.198 -> 8 TSM:INIT:STATID=35 10:21:30.198 -> 10 TSF:SID:OK,ID=35 10:21:30.198 -> 12 TSM:FPAR 10:21:31.462 -> 1242 TSF:MSG:SEND,35-35-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 10:21:33.468 -> 3249 !TSM:FPAR:NO REPLY 10:21:33.468 -> 3251 TSM:FPAR 10:21:34.693 -> 4476 TSF:MSG:SEND,35-35-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 10:21:36.709 -> 6484 !TSM:FPAR:NO REPLY 10:21:36.709 -> 6487 TSM:FPAR 10:21:37.925 -> 7715 TSF:MSG:SEND,35-35-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 10:21:39.936 -> 9722 !TSM:FPAR:NO REPLY 10:21:39.936 -> 9724 TSM:FPAR 10:21:41.153 -> 10949 TSF:MSG:SEND,35-35-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 10:21:43.168 -> 12956 !TSM:FPAR:FAIL 10:21:43.168 -> 12957 TSM:FAIL:CNT=1 10:21:43.168 -> 12959 TSM:FAIL:DIS
If I power either from a 5V supply into the 5V line, or a 8Vsupply int the Vin, then EVIDENTLY it finds the parent, as I can see it communicating in the Domoticz log. data is updated etc.
I say EVIDENTLY, because I cannot see the debug output in the terminal window, as as soon as I plug the USB in, the device resets, and then fails to find the parent again.I am sitting 6 ft from the gateway, I have tried varying the Tx power using #define MY_RFM69_TX_POWER_DBM (13)
I have a 220microF and a 0.1 microF Tantalum fitted near the board pins of the Adafruit breakout board.
ALSO please note that when data is being passed to the controller( no usb connected) SENDING data to the node always fails, according to the controller log.I could try and redirect Serial.prints to another port, and manage to cobble together a rs232 into my PC, but other than that, any ideas as to the cause?
-
requesting data from controller (Domoticz)
Hi All,
I have a battery node, which I wish to poll the latest data from the controller.
I am using a presentation
present(CHILD_ID_WATERTIME1, S_HEATER, "Water Time1 Min", false);I request data
request( CHILD_ID_WATERTIME1, V_HVAC_SETPOINT_HEAT);The returned and actioned result has no data payload
119631 TSF:MSG:SEND,33-33-0-0,s=11,c=2,t=47,pt=0,l=0,sg=0,ft=0,st=OK:
119676 TSF:MSG:READ,0-0-33,s=11,c=2,t=47,pt=0,l=0,sg=0:the true data is 13
I have tried V_VAR1, indeed, in a loop I have tried types "0" to "50"
I have gotten round this by having the node set a value of a child item, and then run a script to "push" the values to the node, which works fine,
The code in the "command" and "request" functions is identical, one returns a data value, one does not.I realise I must be doing something fundamentally wrong.
Does Domoticz have issues with requests? It all seems fine on the controller page on this website.The code is a bit of a mess at the moment, as I have been trying to get the request working.
Regards and thanks, Nigel
Got a work around, used S_INFO and V_TEXT.
THE CONTROLLER page definitely shows Thea requests are supported for almost all types, so something isn't right.
-
RE: Trouble with Sensebender gateway initialisation
@evb
Hi,Sorry for the confusion, I mean the entire RFM69HW sub board.
The difficulty is that by the nature of the edge connections, and the "holes" the solder flows under the "pads" as well as to the sides, and given that there is no "flex" in the board, it isn't possible (at least on my attempts) to stop any pad from re-attaching to the main board. As I say, I had a go with the previous one, and damaged it beyond repair, removing the RFM69HW.
My solder station is a cheap temperature controllable one, with a circa 1mm round tip, solder sucking off the majority of the solder isn't able to freeup a pad. I have removed the solder and re-soldered this chip three times now, to ensure good connections, which is why you will see loads of excess flux, which I haven't bothered to clean off as yet, given the project isn't finished / working. I have tried getting the smallest, circa 0.5mm jewellers screwdriver under the edge of the RFM69 board, whilst heating the nearest corner pad, without success.Photos below, as I say a bit of a mess with the excess flux, the continuity has however been proven to all the MCU pins.
The excess solder is due to the fact I attached wires to each pad, for the continuity checking, being as it is that the MCU chip is on the other side of the PCB.The on sketch testing is definitely failing as mentioned above.
-
RE: Trouble with Sensebender gateway initialisation
Hi,
Well something not right.
I went looking for the functions used for the eeprom,
found it in "MyHWSAMD.cpp"
Modified the code temporarily to see what if anything was happeningCode mod
uint8_t hwReadConfig(int adr) { SerialUSB.print("EEPROM Read Address MyHwsamd.cpp = ");SerialUSB.println(adr); SerialUSB.print("EEPROM Read VALUE MyHwsamd.cpp = ");SerialUSB.print(eep.read(adr)); return eep.read(adr); }
which gives this output in the test prog
Mysensors core version : 2.2.0 GateWay sketch version : 0.2 ---------------------------------- - > SHA204 Ok (serial : 012329BE97196D83EE) - > SD CARD SD Card initialized correct! - type detected : SDHC -> EEPROM EEPROM Read Address MyHwsamd.cpp = 1 EEPROM Read VALUE MyHwsamd.cpp =
So without further digging, I am stuffed as there seems to not be anything being read back from the eeprom, either that or the code is stuffed (unlikely)
If people think the Sensebender is faulty, Ill see if I can get a replacement under warranty?
Can anyone / is anyone able to duplicate the test prog situation with the eeprom fail ?
-
RE: Trouble with Sensebender gateway initialisation
Hi All,
So I have re-visited the onboard diag sketch, and ran it, the prog hangs at the eeprom testing, as soon as it makes an attempt to read
eeprom_d1 = hwReadConfig(EEPROM_VERIFICATION_ADDRESS);
I have added some additional Serial outputs to see where it was failing, but it fails at the first hurdle.
This might indicate to me that the board is indeed faulty.Sketch output
Sensebender GateWay test routine Mysensors core version : 2.2.0 GateWay sketch version : 0.2 ---------------------------------- - > SHA204 Ok (serial : 012329BE97196D83EE) - > SD CARD SD Card initialized correct! - type detected : SDHC -> EEPROM
Sensebender Sketch
/** * The MySensors Arduino library handles the wireless radio link and protocol * between your home built sensors/actuators and HA controller of choice. * The sensors forms a self healing radio network with optional repeaters. Each * repeater and gateway builds a routing tables in EEPROM which keeps track of the * network topology allowing messages to be routed to nodes. * * Created by Henrik Ekblad <henrik.ekblad@mysensors.org> * Copyright (C) 2013-2015 Sensnology AB * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors * * Documentation: http://www.mysensors.org * Support Forum: http://forum.mysensors.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * ******************************* * * 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. * * This GW code is designed for Sensebender GateWay / (Arduino Zero variant) * * Wire connections (OPTIONAL): * - Inclusion button should be connected to SW2 * * LEDs on board (default assignments): * - Orange: USB RX/TX - Blink when receiving / transmitting on USB CDC device * - Yellow: RX - Blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved * - Green : TX - Blink fast on radio message transmitted. In inclusion mode will blink slowly * - Red : ERR - Fast blink on error during transmission error or recieve crc error * - Blue : free - (use with LED_BLUE macro) * */ #define SKETCH_VERSION "0.2" // Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached //#define MY_RADIO_NRF24 //#define MY_RADIO_NRF5_ESB #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RFM69_433MHZ // Set your frequency here #define MY_RFM69_TX_POWER_DBM (13) //#define MY_RFM69_MAX_POWER_LEVEL_DBM (13) // max. TX power 10dBm = 10mW #define MY_IS_RFM69HW // Omit if your RFM is not "H" //#define MY_RADIO_RFM95 // 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_HIGH // 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 // 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 // Set blinking period #define MY_DEFAULT_LED_BLINK_PERIOD 300 // Inverses the behavior of leds //#define MY_WITH_LEDS_BLINKING_INVERSE // Flash leds on rx/tx/err // 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 <MySensors.h> #include <SD.h> #include <drivers/ATSHA204/ATSHA204.cpp> Sd2Card card; #define EEPROM_VERIFICATION_ADDRESS 0x01 static uint8_t num_of_leds = 5; static uint8_t leds[] = {LED_BLUE, LED_RED, LED_GREEN, LED_YELLOW, LED_ORANGE}; void setup() { // Setup locally attached sensors } void presentation() { // Present locally attached sensors } void loop() { // Send locally attached sensor data here } void preHwInit() { pinMode(MY_SWC1, INPUT_PULLUP); pinMode(MY_SWC2, INPUT_PULLUP); if (digitalRead(MY_SWC1) && digitalRead(MY_SWC2)) { return; } uint8_t tests = 0; for (int i=0; i< num_of_leds; i++) { pinMode(leds[i], OUTPUT); } uint8_t led_state = 0; if (digitalRead(MY_SWC1)) { while (!Serial) { digitalWrite(LED_BLUE, led_state); led_state ^= 0x01; delay(500); } // Wait for USB to be connected, before spewing out data. } digitalWrite(LED_BLUE, LOW); if (Serial) { Serial.println("Sensebender GateWay test routine"); Serial.print("Mysensors core version : "); Serial.println(MYSENSORS_LIBRARY_VERSION); Serial.print("GateWay sketch version : "); Serial.println(SKETCH_VERSION); Serial.println("----------------------------------"); Serial.println(); } if (testSha204()) { digitalWrite(LED_GREEN, HIGH); tests++; } if (testSDCard()) { digitalWrite(LED_YELLOW, HIGH); tests++; } if (testEEProm()) { digitalWrite(LED_ORANGE, HIGH); tests++; } if (testAnalog()) { digitalWrite(LED_BLUE, HIGH); tests++; } if (tests == 4) { while(1) { for (int i=0; i<num_of_leds; i++) { digitalWrite(leds[i], HIGH); delay(200); digitalWrite(leds[i], LOW); } } } else { while (1) { digitalWrite(LED_RED, HIGH); delay(200); digitalWrite(LED_RED, LOW); delay(200); } } } bool testSha204() { uint8_t rx_buffer[SHA204_RSP_SIZE_MAX]; uint8_t ret_code; if (Serial) { Serial.print("- > SHA204 "); } atsha204_init(MY_SIGNING_ATSHA204_PIN); ret_code = atsha204_wakeup(rx_buffer); if (ret_code == SHA204_SUCCESS) { ret_code = atsha204_getSerialNumber(rx_buffer); if (ret_code != SHA204_SUCCESS) { if (Serial) { Serial.println(F("Failed to obtain device serial number. Response: ")); } Serial.println(ret_code, HEX); } else { if (Serial) { Serial.print(F("Ok (serial : ")); for (int i=0; i<9; i++) { if (rx_buffer[i] < 0x10) { Serial.print('0'); // Because Serial.print does not 0-pad HEX } Serial.print(rx_buffer[i], HEX); } Serial.println(")"); } return true; } } else { if (Serial) { Serial.println(F("Failed to wakeup SHA204")); } } return false; } bool testSDCard() { if (Serial) { Serial.print("- > SD CARD "); } if (!card.init(SPI_HALF_SPEED, MY_SDCARD_CS)) { if (Serial) { Serial.println("SD CARD did not initialize!"); } } else { if (Serial) { Serial.print("SD Card initialized correct! - "); Serial.print("type detected : "); switch(card.type()) { case SD_CARD_TYPE_SD1: Serial.println("SD1"); break; case SD_CARD_TYPE_SD2: Serial.println("SD2"); break; case SD_CARD_TYPE_SDHC: Serial.println("SDHC"); break; default: Serial.println("Unknown"); } } return true; } return false; } bool testEEProm() { uint8_t eeprom_d1, eeprom_d2; SerialUSB.print(" -> EEPROM "); eeprom_d1 = hwReadConfig(EEPROM_VERIFICATION_ADDRESS); delay(500); SerialUSB.print("EEPROM Read Address ");SerialUSB.print(EEPROM_VERIFICATION_ADDRESS); SerialUSB.print(" EEPROM Read Value ");SerialUSB.println(eeprom_d1); eeprom_d1 = ~eeprom_d1; // invert the bits hwWriteConfig(EEPROM_VERIFICATION_ADDRESS, eeprom_d1); SerialUSB.print("EEPROM Write Address ");SerialUSB.print(EEPROM_VERIFICATION_ADDRESS); SerialUSB.print(" EEPROM Write Value ");SerialUSB.println(eeprom_d1); delay(500); eeprom_d2 = hwReadConfig(EEPROM_VERIFICATION_ADDRESS); SerialUSB.print("EEPROM RE- READ Address ");SerialUSB.print(EEPROM_VERIFICATION_ADDRESS); SerialUSB.print(" EEPROM RE-READ Value ");SerialUSB.println(eeprom_d2); if (eeprom_d1 == eeprom_d2) { SerialUSB.println("PASSED"); hwWriteConfig(EEPROM_VERIFICATION_ADDRESS, ~eeprom_d1); return true; } SerialUSB.println("FAILED!"); return false; } bool testAnalog() { int bat_detect = analogRead(MY_BAT_DETECT); Serial.print("-> analog : "); Serial.print(bat_detect); if (bat_detect < 400 || bat_detect > 650) { Serial.println(" Failed"); return false; } Serial.println(" Passed"); return true; }
-
RE: Trouble with Sensebender gateway initialisation
@evb
Hi,Have checked continuity, all connected, including DIO 5 (not sure what that's used for)
RFM69 is powered, at the pads of the sub board, (3.293V)
If the RFM69HW is faulty< I don't think I can safely remove it, thats what ultimately did for the first Sensebender GW board, I destroyed the pads trying to remove the RFM69.Any Suggestions as to how to attempt. I don't have a hot air type tool for SMD components, Just a soldering Iron. Buying one would cost the same as buying a new Sensebender, without the knowledge that replacing the RFM69 is the actual answer.
-
RE: Trouble with Sensebender gateway initialisation
Hi All,
And the hits keep coming......
Ok, So I have messed up my Arduino IDE / compiler somehow.
I thought I would roll back the board definition, as the board I have is several months old.
That didn't work, insofar as i now get the following error, upon compiling for the Sensebender GW board******************************************************************************* **Arduino: 1.8.13 (Windows 10), TD: 1.53, Board: "Sensebender Gateway" In file included from D:\NWCloudDrive\Home Automation\Arduino\libraries\MySensors/hal/architecture/SAMD/MyHwSAMD.cpp:20:0, from D:\NWCloudDrive\Home Automation\Arduino\libraries\MySensors/MySensors.h:67, from N:\Home Automation\Arduino\MySensors\testing_node\testing_node.ino:29: D:\NWCloudDrive\Home Automation\Arduino\libraries\MySensors/hal/architecture/SAMD/MyHwSAMD.h:26:10: fatal error: avr/dtostrf.h: No such file or directory #include <avr/dtostrf.h> ^~~~~~~~~~~~~~~ compilation terminated. exit status 1 Error compiling for board Sensebender Gateway.** *********************************************************************************
I re installed upto 1.0.6 but the error remains.
I have looked in backups and googled as to where the file should be, to no avail! (i've found where it should be, but it doesn't exist in that location in my backups).Help if you can Please, I realise this may not be the best place for this particular issue, but I thought I should avoid starting a new thread if I can.
SOLUTION to this Compiler issue WAS FOUND HERE
basically Roll back SAMD board definition to 1.8.9
The basic issue of the non functional Radio still remains.
-
RE: Teensy 3.2 and RFM69HW not working
Hi,
Well progress, and questions !
When I started this with the Teensy3.2, I used a RFM69CW (smaller pcb) device, and ran into the problems as detailed above.
As part of the troubleshooting, I part assembled a "EASY PCB" which I have, to enable, hopefully proving a different radio module (RFM69HW) which is my normal radio module, and attempt to "tight fit" a Pro mini to header pins on the board, to "prove" the radio. This was sucessful, as mentioned above. Using this proven radio / assembly, I removed the Pro Mini, and jumpered to the Teensy with dupont cables, which got the radio "working" in the sense that the transport succeeded, it just couldn't find the parent / gateway.
I mentioned above the possibility of connecting the reset pin, as I had the origional bare RFM69CW already to go, I soldered another wire to the reset pad, and utilised this at the radio, commenting out the #define MY_IS_RFM69HW .
and adding the #define MY_RFM69_RST_PIN 9 .I uploaded this, and it found, and presented to the GW / Controller.
BUT subsequent messages were met with "!MCO:SND:NODE NOT REG"
as in the log below300 MCO:BGN:INIT NODE,CP=RRNNT---,VER=2.2.0 300 TSM:INIT 300 TSF:WUR:MS=0 301 TSM:INIT:TSP OK 301 TSM:INIT:STATID=44 301 TSF:SID:OK,ID=44 301 TSM:FPAR 1529 TSF:MSG:SEND,44-44-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 1547 TSF:MSG:READ,0-0-44,s=255,c=3,t=8,pt=1,l=1,sg=0:0 1547 TSF:MSG:FPAR OK,ID=0,D=1 3530 TSM:FPAR:OK 3530 TSM:ID 3530 TSM:ID:OK 3530 TSM:UPL 3536 TSF:MSG:SEND,44-44-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1 3747 TSF:MSG:READ,0-0-44,s=255,c=3,t=25,pt=1,l=1,sg=0:1 3747 TSF:MSG:PONG RECV,HP=1 3747 TSM:UPL:OK 3747 TSM:READY:ID=44,PAR=0,DIS=1 4774 TSF:MSG:SEND,44-44-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100 4985 TSF:MSG:READ,0-0-44,s=255,c=3,t=15,pt=6,l=2,sg=0:0100 6218 !TSF:MSG:SEND,44-44-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=NACK:2.2.0 6234 TSF:MSG:SEND,44-44-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=1,st=OK:0 6459 TSF:MSG:READ,0-0-44,s=255,c=3,t=6,pt=0,l=1,sg=0:M 7492 TSF:MSG:SEND,44-44-0-0,s=255,c=3,t=11,pt=0,l=9,sg=0,ft=0,st=OK:test Node 7502 TSF:MSG:SEND,44-44-0-0,s=255,c=3,t=12,pt=0,l=5,sg=0,ft=0,st=OK:1.0.0 7515 TSF:MSG:SEND,44-44-0-0,s=5,c=0,t=33,pt=0,l=14,sg=0,ft=0,st=OK:Motion RX RSSI 7729 TSF:MSG:READ,0-0-44,s=5,c=0,t=33,pt=0,l=14,sg=0:Motion RX RSS 7729 TSF:MSG:ACK +Ack FMGW *InMsgty :33 MsgComd:0 childID:5 Switch:0.00 7936 TSF:MSG:READ,0-0-44,s=5,c=0,t=33,pt=0,l=14,sg=0:Motion RX RSS 7936 TSF:MSG:ACK +Ack FMGW *InMsgty :33 MsgComd:0 childID:5 Switch:0.00 8141 TSF:MSG:READ,0-0-44,s=5,c=0,t=33,pt=0,l=14,sg=0:Motion RX RSS 8141 TSF:MSG:ACK +Ack FMGW *InMsgty :33 MsgComd:0 childID:5 Switch:0.00 8344 TSF:MSG:READ,0-0-44,s=5,c=0,t=33,pt=0,l=14,sg=0:Motion RX RSS 8345 TSF:MSG:ACK +Ack FMGW *InMsgty :33 MsgComd:0 childID:5 Switch:0.00 8937 TSF:MSG:SEND,44-44-0-0,s=4,c=0,t=1,pt=0,l=9,sg=0,ft=0,st=OK:Prescence 9149 TSF:MSG:READ,0-0-44,s=4,c=0,t=1,pt=0,l=9,sg=0:Prescenc 9149 TSF:MSG:ACK +Ack FMGW *InMsgty :1 MsgComd:0 childID:4 Switch:0.00 10225 TSF:MSG:SEND,44-44-0-0,s=6,c=0,t=30,pt=0,l=16,sg=0,ft=0,st=OK:Motion Battery V 10226 MCO:REG:REQ 10234 TSF:MSG:SEND,44-44-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 10444 TSF:MSG:READ,0-0-44,s=255,c=3,t=27,pt=1,l=1,sg=0:0 10444 MCO:PIM:NODE REG=0 10445 MCO:BGN:STP 10445 MCO:BGN:INIT OK,TSP=1 Motion 0 10495 !MCO:SND:NODE NOT REG 10647 TSF:MSG:READ,0-0-44,s=255,c=3,t=27,pt=1,l=1,sg=0:0 10647 MCO:PIM:NODE REG=0 RAWbatcount :179 batV :0.74 batP :0 10850 TSF:MSG:READ,0-0-44,s=255,c=3,t=27,pt=1,l=1,sg=0:0 10850 MCO:PIM:NODE REG=0 10857 !MCO:SND:NODE NOT REG 10857 !MCO:SND:NODE NOT REG wait 10000 11258 TSF:MSG:READ,0-0-44,s=255,c=3,t=27,pt=1,l=1,sg=0:0 11258 MCO:PIM:NODE REG=0
Progress of a sort. I noticed however that in the Controller, each child presentation, including the MYSENSORS version was missing the last character. I have seen this sort of thing in entirely different situations with serial coms, baud rates mismatching slightly (due to processor speed dividing ratios), and I knew that out of the box, the teensy runs overclocked at 96Mhz, so I changed the speed of the processor, to 72Mhz, and uploaded, had the same results, Then I selected 48Mhz, and uploaded again, and Eureka, it all works.
So in summary, I have wired in the Reset Pad to (in my case) Pin 9, and slowed the Processor to 48Mhz, and all is working.
AFTER this, I have simplified the sketch, to be a incrementing count, in a txt field.
Sketch as is NOW, but AFTER it was working// Enable debug prints #define MY_DEBUG #define MY_DEBUG_VERBOSE_RFM69 //#define MY_DEBUG_VERBOSE_SIGNING //#define MY_SIGNING_SOFT //#define MY_SIGNING_SOFT_RANDOMSEED_PIN 7 //#define MY_SIGNING_REQUEST_SIGNATURES #define MY_SPLASH_SCREEN_DISABLED //#define MY_DISABLE_RAM_ROUTING_TABLE_FEATURE //#define MY_TRANSPORT_WAIT_READY_MS 5000 // Enable and select radio type attached //#define MY_REPEATER_FEATURE #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RFM69_433MHZ // Set your frequency here #define MY_RFM69_MAX_POWER_LEVEL_DBM (14) // max. TX power 10dBm = 10mW #define MY_RFM69_TX_POWER_DBM (14) //#define MY_IS_RFM69HW // Omit if your RFM is not "H" #define MY_RFM69_IRQ_PIN 2 #define MY_RFM69_IRQ_NUM digitalPinToInterrupt(MY_RFM69_IRQ_PIN) #define MY_RFM69_CS_PIN 10 // NSS. Use MY_RF69_SPI_CS for older versions (before 2.2.0) #define MY_RFM69_RST_PIN 9 // try reset pin //#define MY_RFM69_ENABLE_ENCRYPTION //#define MY_RFM69_NETWORKID 100 // Default is 100 in lib. Uncomment it and set your preferred network id if needed #define MY_NODE_ID 45 //#include <MyConfig.h> #include <MySensors.h> long counter = 0; #define CHILD_ID_RX_RSSI 5 #define CHILD_ID_TEXT1 7 // Initialize message MyMessage msgRxRSSI(CHILD_ID_RX_RSSI, V_LEVEL); MyMessage msgText(CHILD_ID_TEXT1, V_TEXT); void setup() { // put your setup code here, to run once: analogReference(INTERNAL); }//end setup void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("test Node", "1.0.1"); present(CHILD_ID_RX_RSSI, S_SOUND, "Motion RX RSSI",true); wait(250); present(CHILD_ID_TEXT1, S_INFO,"UpdateTxt",false); }//end presentation void loop() { // put your main code here, to run repeatedly: counter++; send(msgText.set(counter), false); wait(10000);// wait a bit, then read in level, avoid spurious noise as PIR holds high state for 27sec RX_SEND(); wait(10000); }// end loop void RX_SEND() { send(msgRxRSSI.set(transportGetSignalReport(SR_RX_RSSI))); }
Log NOW
300 MCO:BGN:INIT NODE,CP=RRNNT---,VER=2.2.0 300 TSM:INIT 300 TSF:WUR:MS=0 300 TSM:INIT:TSP OK 300 TSM:INIT:STATID=45 300 TSF:SID:OK,ID=45 300 TSM:FPAR 1520 TSF:MSG:SEND,45-45-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 1604 TSF:MSG:READ,0-0-45,s=255,c=3,t=8,pt=1,l=1,sg=0:0 1604 TSF:MSG:FPAR OK,ID=0,D=1 3521 TSM:FPAR:OK 3521 TSM:ID 3521 TSM:ID:OK 3521 TSM:UPL 3527 TSF:MSG:SEND,45-45-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1 3739 TSF:MSG:READ,0-0-45,s=255,c=3,t=25,pt=1,l=1,sg=0:1 3739 TSF:MSG:PONG RECV,HP=1 3739 TSM:UPL:OK 3739 TSM:READY:ID=45,PAR=0,DIS=1 3759 TSF:MSG:SEND,45-45-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100 3968 TSF:MSG:READ,0-0-45,s=255,c=3,t=15,pt=6,l=2,sg=0:0100 3983 TSF:MSG:SEND,45-45-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.2.0 3994 TSF:MSG:SEND,45-45-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0 4024 TSF:MSG:READ,0-0-45,s=255,c=3,t=6,pt=0,l=1,sg=0:M 4050 TSF:MSG:SEND,45-45-0-0,s=255,c=3,t=11,pt=0,l=9,sg=0,ft=0,st=OK:test Node 4066 TSF:MSG:SEND,45-45-0-0,s=255,c=3,t=12,pt=0,l=5,sg=0,ft=0,st=OK:1.0.1 4081 TSF:MSG:SEND,45-45-0-0,s=5,c=0,t=33,pt=0,l=14,sg=0,ft=0,st=OK:Motion RX RSSI 4294 TSF:MSG:READ,0-0-45,s=5,c=0,t=33,pt=0,l=14,sg=0:Motion RX RSSI 4295 TSF:MSG:ACK 4338 TSF:MSG:SEND,45-45-0-0,s=7,c=0,t=36,pt=0,l=9,sg=0,ft=0,st=OK:UpdateTxt 4338 MCO:REG:REQ 4346 TSF:MSG:SEND,45-45-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 4555 TSF:MSG:READ,0-0-45,s=255,c=3,t=27,pt=1,l=1,sg=0:1 4555 MCO:PIM:NODE REG=1 4555 MCO:BGN:STP 4555 MCO:BGN:INIT OK,TSP=1 4577 TSF:MSG:SEND,45-45-0-0,s=7,c=1,t=47,pt=4,l=4,sg=0,ft=0,st=OK:1 14583 TSF:MSG:SEND,45-45-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 24589 TSF:MSG:SEND,45-45-0-0,s=7,c=1,t=47,pt=4,l=4,sg=0,ft=0,st=OK:2 34595 TSF:MSG:SEND,45-45-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 44601 TSF:MSG:SEND,45-45-0-0,s=7,c=1,t=47,pt=4,l=4,sg=0,ft=0,st=OK:3 54607 TSF:MSG:SEND,45-45-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 64613 TSF:MSG:SEND,45-45-0-0,s=7,c=1,t=47,pt=4,l=4,sg=0,ft=0,st=OK:4 74619 TSF:MSG:SEND,45-45-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 84625 TSF:MSG:SEND,45-45-0-0,s=7,c=1,t=47,pt=4,l=4,sg=0,ft=0,st=OK:5 94631 TSF:MSG:SEND,45-45-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 106058 !TSF:MSG:SEND,45-45-0-0,s=7,c=1,t=47,pt=4,l=4,sg=0,ft=0,st=NACK:6 115278 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 115278 TSF:MSG:BC 115482 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 115482 TSF:MSG:BC 115685 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 115686 TSF:MSG:BC 115889 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 115889 TSF:MSG:BC 116673 TSF:MSG:SEND,45-45-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=1,st=OK:0 118528 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 118528 TSF:MSG:BC 118731 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 118731 TSF:MSG:BC 118934 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 118934 TSF:MSG:BC 119138 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 119139 TSF:MSG:BC 119342 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 119342 TSF:MSG:BC 119545 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 119545 TSF:MSG:BC 126679 TSF:MSG:SEND,45-45-0-0,s=7,c=1,t=47,pt=4,l=4,sg=0,ft=0,st=OK:7 136690 TSF:MSG:SEND,45-45-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 147104 TSF:MSG:SEND,45-45-0-0,s=7,c=1,t=47,pt=4,l=4,sg=0,ft=0,st=OK:8 157111 TSF:MSG:SEND,45-45-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0 167117 TSF:MSG:SEND,45-45-0-0,s=7,c=1,t=47,pt=4,l=4,sg=0,ft=0,st=OK:9 177123 TSF:MSG:SEND,45-45-0-0,s=5,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:0
Has anyone had to reduce the Processor speed to make Teensy 3.2 Work previously?
Any thoughts gratefully received.
-
RE: Trouble with Sensebender gateway initialisation
Hi,
Solder sucked off all I could, have re-soldered, cannot remove the RFM69. Output still the same.
0;255;hu;0;hu;3 MCO:BGN:INIT GW,CP=RRNGSA--,VER=2.2.0 0;255;hu;0;hu;3 SGN:PER:OK 0;255;hu;0;hu;3 SGN:INI:BND OK 0;255;hu;0;hu;3 TSF:LRT:OK 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 TSF:WUR:MS=0 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL 0;255;hu;0;hu;3 TSM:FAIL:RE-INIT 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL 0;255;hu;0;hu;3 TSM:FAIL:RE-INIT 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL 0;255;hu;0;hu;3 TSM:FAIL:RE-INIT 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL 0;255;hu;0;hu;3 TSM:FAIL:RE-INIT 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL 0;255;hu;0;hu;3 TSM:FAIL:RE-INIT 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL 0;255;hu;0;hu;3 TSM:FAIL:RE-INIT 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL
Other than the RFM69 and the antenna, there is nothing else for me to fit / configure is there?
-
RE: Teensy 3.2 and RFM69HW not working
Hi,
I have uncommented the defines for the IRX and the CS pins, they are however the defaults.
I have tried other pins for the IRQ (9)
A log is below.300 MCO:BGN:INIT NODE,CP=RRNNT---,VER=2.2.0 300 TSM:INIT 300 TSF:WUR:MS=0 301 TSM:INIT:TSP OK 301 TSM:INIT:STATID=43 301 TSF:SID:OK,ID=43 301 TSM:FPAR 7502 TSF:MSG:SEND,43-43-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 9503 !TSM:FPAR:NO REPLY 9503 TSM:FPAR 16703 TSF:MSG:SEND,43-43-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 18704 !TSM:FPAR:NO REPLY 18704 TSM:FPAR 25904 TSF:MSG:SEND,43-43-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 27905 !TSM:FPAR:NO REPLY 27905 TSM:FPAR 35105 TSF:MSG:SEND,43-43-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 37106 !TSM:FPAR:FAIL 37106 TSM:FAIL:CNT=1 37106 TSM:FAIL:DIS 37106 TSF:TDI:TSL 47107 TSM:FAIL:RE-INIT 47107 TSM:INIT 47157 !TSM:INIT:TSP FAIL 47157 TSM:FAIL:CNT=2 47157 TSM:FAIL:DIS 47157 TSF:TDI:TSL 57158 TSM:FAIL:RE-INIT 57158 TSM:INIT 57208 !TSM:INIT:TSP FAIL 57208 TSM:FAIL:CNT=3 57208 TSM:FAIL:DIS 57208 TSF:TDI:TSL 67209 TSM:FAIL:RE-INIT 67209 TSM:INIT 67259 !TSM:INIT:TSP FAIL 67259 TSM:FAIL:CNT=4 67259 TSM:FAIL:DIS 67259 TSF:TDI:TSL 77260 TSM:FAIL:RE-INIT 77260 TSM:INIT 77310 !TSM:INIT:TSP FAIL 77310 TSM:FAIL:CNT=5 77310 TSM:FAIL:DIS 77310 TSF:TDI:TSL 87311 TSM:FAIL:RE-INIT 87311 TSM:INIT 87361 !TSM:INIT:TSP FAIL 87361 TSM:FAIL:CNT=6 87361 TSM:FAIL:DIS 87361 TSF:TDI:TSL 97362 TSM:FAIL:RE-INIT 97362 TSM:INIT 97412 !TSM:INIT:TSP FAIL 97412 TSM:FAIL:CNT=7 97412 TSM:FAIL:DIS 97412 TSF:TDI:TSL
The sketch for this log is below
// Enable debug prints #define MY_DEBUG #define MY_DEBUG_VERBOSE_RFM69 //#define MY_DEBUG_VERBOSE_SIGNING //#define MY_SIGNING_SOFT //#define MY_SIGNING_SOFT_RANDOMSEED_PIN 7 //#define MY_SIGNING_REQUEST_SIGNATURES #define MY_SPLASH_SCREEN_DISABLED //#define MY_DISABLE_RAM_ROUTING_TABLE_FEATURE //#define MY_TRANSPORT_WAIT_READY_MS 5000 // Enable and select radio type attached //#define MY_REPEATER_FEATURE #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RFM69_433MHZ // Set your frequency here #define MY_RFM69_MAX_POWER_LEVEL_DBM (13) // max. TX power 10dBm = 10mW #define MY_RFM69_TX_POWER_DBM (13) #define MY_IS_RFM69HW // Omit if your RFM is not "H" #define MY_RFM69_IRQ_PIN 2 #define MY_RFM69_IRQ_NUM digitalPinToInterrupt(MY_RFM69_IRQ_PIN) #define MY_RFM69_CS_PIN 10 // NSS. Use MY_RF69_SPI_CS for older versions (before 2.2.0) //#define MY_RFM69_ENABLE_ENCRYPTION //#define MY_RFM69_NETWORKID 100 // Default is 100 in lib. Uncomment it and set your preferred network id if needed #define MY_NODE_ID 43 //#include <MyConfig.h> //#include <Filter.h> #include <MySensors.h> //#include <TimeLib.h> //#include <Bounce2.h> //#include <avr/wdt.h> //#include <Vcc.h> #define VCC_MIN 3.0 #define VCC_MAX 4.25 //Vcc vcc; int rawbatteryLevel = 0; int prevbatterylevel=0; int scaledbatterylevel = 0; uint8_t batP = 100; float batV = 3.250; int oldBatteryPcnt = 0; const float BatVccMin = 3000; // Minimum expected Battery Vcc level, in Volts. const float BatVccMax = 4250; // Maximum expected BatteryVcc level, in Volts. const int MaxBattCount = 1023; const float BatVccCorrection = 4.15 / 4.18; // Measured Battery Vcc by multimeter divided by reported Vcc #define CHILD_ID_PRESENCE 4 #define CHILD_ID_RX_RSSI 5 #define CHILD_ID_BATVCC 6 int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point const int PresenceDetect = 3; const long interval = 20000; unsigned long previousMillis,previousrelayMillis,previouprescence= 0; unsigned long debouncetime =0; bool myprescenceDetected = 0; bool Relaystate = 0; bool uplinkAvailable = true; bool requestState; bool firstStart = true; unsigned long MYsleepTime = 3600000;//SLEEP_SEC*1000 * SLEEP_MINS * 60 ; //period_t is an enum type defined in the LowPower library (LowPower.h) int sleepcnt =0; volatile long currenttime = 0; volatile long temptime = 0; //long lightLevel = 0; // Initialize message MyMessage msgPrescenceDetect(CHILD_ID_PRESENCE, V_TRIPPED); MyMessage msgRxRSSI(CHILD_ID_RX_RSSI, V_LEVEL); MyMessage msgVcc(CHILD_ID_BATVCC, V_VOLTAGE); void setup() { // put your setup code here, to run once: //pinMode (MY_RFM69_IRQ_PIN, INPUT_PULLUP); // pinMode(PresenceDetect, INPUT); // interruptPin // pinMode(2, INPUT_PULLUP); // interruptPin2 // EIFR = (1<<INTF0) | (1<<INTF1);// prevent initial trigger, clear interrupt // wait(100); // EIFR = (1<<INTF0) | (1<<INTF1); // attachInterrupt(digitalPinToInterrupt(PresenceDetect), prescenceDetected, RISING); //wdt_disable(); // Might be redundant as the bootloader should have done this already analogReference(INTERNAL); }//end setup void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("test Node", "1.0.0"); // Register all sensors to gw (they will be created as child devices) // present(CHILD_ID_LIGHTLEVEL, S_LIGHT_LEVEL,"LIGHT_LEVEL",true); // wait(250); present(CHILD_ID_RX_RSSI, S_SOUND, "Motion RX RSSI",true); wait(1000); present(CHILD_ID_PRESENCE, S_MOTION, "Prescence", true); wait(250); present(CHILD_ID_BATVCC, S_MULTIMETER, "Motion Battery V"); }//end presentation void loop() { // put your main code here, to run repeatedly: // Read digital motion value wait(50);// wait a bit, then read in level, avoid spurious noise as PIR holds high state for 27sec bool Motion = digitalRead(PresenceDetect) == HIGH; Serial.print("Motion "); Serial.println(Motion); send(msgPrescenceDetect.set(Motion?"1":"0")); // Send tripped value to gw // get the battery Voltage if(Motion == 0){ wait(5); rawbatteryLevel = analogRead(BATTERY_SENSE_PIN);// if(prevbatterylevel != rawbatteryLevel){ wait(5); long tempV=0; for(int i=1;i<=50;i++){ wait(5); rawbatteryLevel = analogRead(BATTERY_SENSE_PIN);// tempV=tempV + rawbatteryLevel; } rawbatteryLevel = tempV/50; prevbatterylevel = rawbatteryLevel; float scaledbatterylevel = map(rawbatteryLevel,0,MaxBattCount,0,BatVccMax );// changed it to milivolts float batV = scaledbatterylevel /(1000); // Battery voltage uint8_t batP = (((scaledbatterylevel - BatVccMin)*100)/(BatVccMax-BatVccMin)); //((input - min) * 100) / (max - min) #ifdef MY_DEBUG Serial.print("RAWbatcount :"); Serial.println(rawbatteryLevel); Serial.print("batV :"); Serial.println(batV); Serial.print("batP :"); Serial.println(batP); #endif wait(100); // float volts = vcc.Read_Volts(); send(msgVcc.set(batV,2),false); if (oldBatteryPcnt != batP) { sendBatteryLevel(batP); oldBatteryPcnt = batP; } RX_SEND(); } } Serial.println("Sleep 10000"); sleep(10000); Serial.println("Sleep infinit"); // EIFR = 1;// clear interrupts // EIFR = 2; // EIFR = (1<<INTF0) | (1<<INTF1);// clear interrupts //sleep(digitalPinToInterrupt(PresenceDetect), CHANGE, MYsleepTime); }// end loop void receive(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.isAck()) { #ifdef MY_DEBUG Serial.println("+Ack FMGW"); #endif } #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getFloat()); #endif if (message.type == V_STATUS || S_HEATER || V_LIGHT || V_HVAC_SETPOINT_HEAT || V_TEMP || S_HVAC) { if (message.getCommand() == 2){// THIS PROCESSES THE CONTROLLERS EXPECTED STATE OF THE OUTPUT // put code here to be executed when the message is from a request #ifdef MY_DEBUG Serial.print("REQ_Msg :"); Serial.print(message.type); Serial.print(" MsgCmd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif switch (message.sensor) {// the child ID case 1: break; case 6: break; } // end switch }// end msg=2 if (message.getCommand() == 1){// THIS PROCESSES DIRECTED COMMANDS #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif switch (message.sensor) {// the child ID case 1: break; case 3: break; case 6: break; } // end switch }// end if msg = 1 }// end msg type function }// end void loop void prescenceDetected() { // action when interrupt button doesnt really do anyhing as edge triggered currenttime = millis(); if ((currenttime - debouncetime) > 2000) { myprescenceDetected = 1; } debouncetime = currenttime; } void RX_SEND() { send(msgRxRSSI.set(transportGetSignalReport(SR_RX_RSSI))); } void sendBatteryReport() { // float p = vcc.Read_Perc(VCC_MIN, VCC_MAX, true); // int batP = static_cast<int>(p); #ifdef MY_DEBUG Serial.print("Battery is: "); Serial.println("99"); #endif sendBatteryLevel(99); } /* // This is called when a new time value was received void receiveTime(unsigned long controllerTime) { // Ok, set incoming time #ifdef MY_DEBUG Serial.print("Time value received: "); #endif if (controllerTime > 1525129200){ setTime(controllerTime); #ifdef MY_DEBUG Serial.print("Time value valid: "); Serial.println(controllerTime); #endif // RTC.set(controllerTime); // this sets the RTC to the time from controller - which we do want periodically timeReceived = true; #ifdef MY_DEBUG Serial.print(hour()); Serial.print(" "); Serial.print(minute()); Serial.print(" "); Serial.print(second()); Serial.print(" "); Serial.print(day()); Serial.print(" "); Serial.print(month()); Serial.print(" "); Serial.print(year()); Serial.println(); #endif } } */
one thing of interest is that after the point or re-init it fails.
Should the Reset be connected for this? I see that a comment is made on the Radio hardware build page, that
"* Adafruit modules need RST connected to GND, or to MY_RFM69_RST_PIN"
Ill try that in a while.
I also tried the#define TEENSYDUINO, just in case, but this failed to compile as a re- definition, so that is being set. -
RE: Teensy 3.2 and RFM69HW not working
@electrik
Hi sorry, the GW and all nodes use the old driver. I did try the new one, some time ago, and it plain didn't work for me. I am sticking with 2.2.0 for the moment, when I upgraded to 2.3.0, everything broke, so I am sticking with 2.2.0 untill a major revision. -
RE: Teensy 3.2 and RFM69HW not working
@electrik
Hi, yes it is the higher power HW. Model.
The same sketch was used in the teensy and the pro mini, with the same radio module. One worked, one didn't. -
RE: Teensy 3.2 and RFM69HW not working
@TheoL
Hi. The serial log is the second "code" entry in the original post. -
Teensy 3.2 and RFM69HW not working
HI,
I have a daft problem.
I have 20 nodes around, using Pro Mini / Nano / Uno and Mega, all with RFM69 tranceivers.
I wish to rebuild one of the Mega nodes, using a Teensy 3.2, mainly for the physical size, needing as I do more program storage for this node ( Central heating thermostat, with touchscreen).
Try as I might, I am failing at the first hurdle.
I thought I would just upload a simple sketch, and test that the communication is all ok, and build from there.
The node isn't seeing the gateway / controller, and the gateway is definitely not receiving anything from this new node.To prove the radio module, I wired it to a pro Mini, and uploaded the same sketch, which was then recognised, and added to the controller.
the GW log for the ProMini sucessful presenting is below
43;255;0;0;17;2.2.0 43;255;3;0;6;0 43;255;3;0;6;M 43;255;3;0;11;test Node 43;255;3;0;12;1.0.0 43;5;0;0;33;Motion RX RSSI 43;4;0;0;1;Prescence 43;6;0;0;30;Motion Battery V 43;4;1;0;16;0
I have reconnected the Teensy to the same hardware, but it still fails, in desperation, I have changed pins for the IRQ and the CS pins, and defined them in the sketch, still no joy. I clearly am doing something basic wrong, but I am going round is a very small circle.
first bit of the failing Log from the teensy300 MCO:BGN:INIT NODE,CP=RRNNT---,VER=2.2.0 300 TSM:INIT 300 TSF:WUR:MS=0 301 TSM:INIT:TSP OK 301 TSM:INIT:STATID=43 301 TSF:SID:OK,ID=43 301 TSM:FPAR 1502 TSF:MSG:SEND,43-43-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 3503 !TSM:FPAR:NO REPLY 3503 TSM:FPAR 4703 TSF:MSG:SEND,43-43-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 6704 !TSM:FPAR:NO REPLY 6704 TSM:FPAR 7904 TSF:MSG:SEND,43-43-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 9905 !TSM:FPAR:NO REPLY 9905 TSM:FPAR 11105 TSF:MSG:SEND,43-43-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 13106 !TSM:FPAR:FAIL 13106 TSM:FAIL:CNT=1 13106 TSM:FAIL:DIS 13106 TSF:TDI:TSL 23107 TSM:FAIL:RE-INIT 23107 TSM:INIT
Connections are:
Teensy > RFM69HW
DIO 2 (pin 4) > DIO 0
DIO 10 CS > NSS
DIO 11 DOUT > MOSI
DIO 12 DIN > MISO
DIO 13 SCK > SCK0V and 3.3V Connected 3.311v actual measured on the pads of the RFM69
the sketch is below.
Please point out my stupid mistake.
Many thanks
Nigel
// Enable debug prints #define MY_DEBUG #define MY_DEBUG_VERBOSE_RFM69 //#define MY_DEBUG_VERBOSE_SIGNING //#define MY_SIGNING_SOFT //#define MY_SIGNING_SOFT_RANDOMSEED_PIN 7 //#define MY_SIGNING_REQUEST_SIGNATURES #define MY_SPLASH_SCREEN_DISABLED //#define MY_DISABLE_RAM_ROUTING_TABLE_FEATURE //#define MY_TRANSPORT_WAIT_READY_MS 5000 // Enable and select radio type attached //#define MY_REPEATER_FEATURE #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RFM69_433MHZ // Set your frequency here #define MY_RFM69_MAX_POWER_LEVEL_DBM (13) // max. TX power 10dBm = 10mW #define MY_RFM69_TX_POWER_DBM (13) #define MY_IS_RFM69HW // Omit if your RFM is not "H" //#define MY_RFM69_IRQ_PIN 2 //#define MY_RFM69_IRQ_NUM digitalPinToInterrupt(MY_RFM69_IRQ_PIN) //#define MY_RFM69_CS_PIN 10 // NSS. Use MY_RF69_SPI_CS for older versions (before 2.2.0) //#define MY_RFM69_ENABLE_ENCRYPTION //#define MY_RFM69_NETWORKID 100 // Default is 100 in lib. Uncomment it and set your preferred network id if needed #define MY_NODE_ID 43 //#include <MyConfig.h> //#include <Filter.h> #include <MySensors.h> //#include <TimeLib.h> //#include <Bounce2.h> //#include <avr/wdt.h> //#include <Vcc.h> #define VCC_MIN 3.0 #define VCC_MAX 4.25 //Vcc vcc; int rawbatteryLevel = 0; int prevbatterylevel=0; int scaledbatterylevel = 0; uint8_t batP = 100; float batV = 3.250; int oldBatteryPcnt = 0; const float BatVccMin = 3000; // Minimum expected Battery Vcc level, in Volts. const float BatVccMax = 4250; // Maximum expected BatteryVcc level, in Volts. const int MaxBattCount = 1023; const float BatVccCorrection = 4.15 / 4.18; // Measured Battery Vcc by multimeter divided by reported Vcc #define CHILD_ID_PRESENCE 4 #define CHILD_ID_RX_RSSI 5 #define CHILD_ID_BATVCC 6 int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point const int PresenceDetect = 3; const long interval = 20000; unsigned long previousMillis,previousrelayMillis,previouprescence= 0; unsigned long debouncetime =0; bool myprescenceDetected = 0; bool Relaystate = 0; bool uplinkAvailable = true; bool requestState; bool firstStart = true; unsigned long MYsleepTime = 3600000;//SLEEP_SEC*1000 * SLEEP_MINS * 60 ; //period_t is an enum type defined in the LowPower library (LowPower.h) int sleepcnt =0; volatile long currenttime = 0; volatile long temptime = 0; //long lightLevel = 0; // Initialize message MyMessage msgPrescenceDetect(CHILD_ID_PRESENCE, V_TRIPPED); MyMessage msgRxRSSI(CHILD_ID_RX_RSSI, V_LEVEL); MyMessage msgVcc(CHILD_ID_BATVCC, V_VOLTAGE); void setup() { // put your setup code here, to run once: //pinMode (MY_RFM69_IRQ_PIN, INPUT_PULLUP); // pinMode(PresenceDetect, INPUT); // interruptPin // pinMode(2, INPUT_PULLUP); // interruptPin2 // EIFR = (1<<INTF0) | (1<<INTF1);// prevent initial trigger, clear interrupt // wait(100); // EIFR = (1<<INTF0) | (1<<INTF1); // attachInterrupt(digitalPinToInterrupt(PresenceDetect), prescenceDetected, RISING); //wdt_disable(); // Might be redundant as the bootloader should have done this already analogReference(INTERNAL); }//end setup void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("test Node", "1.0.0"); // Register all sensors to gw (they will be created as child devices) // present(CHILD_ID_LIGHTLEVEL, S_LIGHT_LEVEL,"LIGHT_LEVEL",true); // wait(250); present(CHILD_ID_RX_RSSI, S_SOUND, "Motion RX RSSI",true); wait(1000); present(CHILD_ID_PRESENCE, S_MOTION, "Prescence", true); wait(250); present(CHILD_ID_BATVCC, S_MULTIMETER, "Motion Battery V"); }//end presentation void loop() { // put your main code here, to run repeatedly: // Read digital motion value wait(50);// wait a bit, then read in level, avoid spurious noise as PIR holds high state for 27sec bool Motion = digitalRead(PresenceDetect) == HIGH; Serial.print("Motion "); Serial.println(Motion); send(msgPrescenceDetect.set(Motion?"1":"0")); // Send tripped value to gw // get the battery Voltage if(Motion == 0){ wait(5); rawbatteryLevel = analogRead(BATTERY_SENSE_PIN);// if(prevbatterylevel != rawbatteryLevel){ wait(5); long tempV=0; for(int i=1;i<=50;i++){ wait(5); rawbatteryLevel = analogRead(BATTERY_SENSE_PIN);// tempV=tempV + rawbatteryLevel; } rawbatteryLevel = tempV/50; prevbatterylevel = rawbatteryLevel; float scaledbatterylevel = map(rawbatteryLevel,0,MaxBattCount,0,BatVccMax );// changed it to milivolts float batV = scaledbatterylevel /(1000); // Battery voltage uint8_t batP = (((scaledbatterylevel - BatVccMin)*100)/(BatVccMax-BatVccMin)); //((input - min) * 100) / (max - min) #ifdef MY_DEBUG Serial.print("RAWbatcount :"); Serial.println(rawbatteryLevel); Serial.print("batV :"); Serial.println(batV); Serial.print("batP :"); Serial.println(batP); #endif wait(100); // float volts = vcc.Read_Volts(); send(msgVcc.set(batV,2),false); if (oldBatteryPcnt != batP) { sendBatteryLevel(batP); oldBatteryPcnt = batP; } RX_SEND(); } } Serial.println("Sleep 10000"); sleep(10000); Serial.println("Sleep infinit"); // EIFR = 1;// clear interrupts // EIFR = 2; // EIFR = (1<<INTF0) | (1<<INTF1);// clear interrupts //sleep(digitalPinToInterrupt(PresenceDetect), CHANGE, MYsleepTime); }// end loop void receive(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.isAck()) { #ifdef MY_DEBUG Serial.println("+Ack FMGW"); #endif } #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getFloat()); #endif if (message.type == V_STATUS || S_HEATER || V_LIGHT || V_HVAC_SETPOINT_HEAT || V_TEMP || S_HVAC) { if (message.getCommand() == 2){// THIS PROCESSES THE CONTROLLERS EXPECTED STATE OF THE OUTPUT // put code here to be executed when the message is from a request #ifdef MY_DEBUG Serial.print("REQ_Msg :"); Serial.print(message.type); Serial.print(" MsgCmd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif switch (message.sensor) {// the child ID case 1: break; case 6: break; } // end switch }// end msg=2 if (message.getCommand() == 1){// THIS PROCESSES DIRECTED COMMANDS #ifdef MY_DEBUG Serial.print("*InMsgty :"); Serial.print(message.type); Serial.print(" MsgComd:"); Serial.print(message.getCommand()); Serial.print(" childID:"); Serial.print(message.sensor); Serial.print(" Switch:"); Serial.println(message.getBool()); #endif switch (message.sensor) {// the child ID case 1: break; case 3: break; case 6: break; } // end switch }// end if msg = 1 }// end msg type function }// end void loop void prescenceDetected() { // action when interrupt button doesnt really do anyhing as edge triggered currenttime = millis(); if ((currenttime - debouncetime) > 2000) { myprescenceDetected = 1; } debouncetime = currenttime; } void RX_SEND() { send(msgRxRSSI.set(transportGetSignalReport(SR_RX_RSSI))); } void sendBatteryReport() { // float p = vcc.Read_Perc(VCC_MIN, VCC_MAX, true); // int batP = static_cast<int>(p); #ifdef MY_DEBUG Serial.print("Battery is: "); Serial.println("99"); #endif sendBatteryLevel(99); } /* // This is called when a new time value was received void receiveTime(unsigned long controllerTime) { // Ok, set incoming time #ifdef MY_DEBUG Serial.print("Time value received: "); #endif if (controllerTime > 1525129200){ setTime(controllerTime); #ifdef MY_DEBUG Serial.print("Time value valid: "); Serial.println(controllerTime); #endif // RTC.set(controllerTime); // this sets the RTC to the time from controller - which we do want periodically timeReceived = true; #ifdef MY_DEBUG Serial.print(hour()); Serial.print(" "); Serial.print(minute()); Serial.print(" "); Serial.print(second()); Serial.print(" "); Serial.print(day()); Serial.print(" "); Serial.print(month()); Serial.print(" "); Serial.print(year()); Serial.println(); #endif } } */
-
Trouble with Sensebender gateway initialisation
Hi all,
I have been using MySensors for 3 years now. I built my origional serial GW using a UNO, and utilising soft signing. All worked well for a few months at a time, but I ran into issues, as detailed here.I bought, built and installed a Sensebender gateway, and all was well for a while, However I seemingly killed it when I upped the MY_RFM69_TX_POWER_DBM (13) up to "20", in an effort to solve a troublesome node often not getting messages that were sent to it.
I reverted to my home built UNO gateway, and ordered a new Sensebender Gateway, which has sat on a shelf for several months. I decided to assemble and make use of the "new" sensebender gateway today, fitting a new RFM69HW to the board.
I have wiped it, personalised it, and uploaded the same GW sketch as previously used.It doesn't work! this is the output, which I put through the log parser, which also doesn't work?
0;255;hu;0;hu;3 MCO:BGN:INIT GW,CP=RRNGSA--,VER=2.2.0 0;255;hu;0;hu;3 SGN:PER:OK 0;255;hu;0;hu;3 SGN:INI:BND OK 0;255;hu;0;hu;3 TSF:LRT:OK 0;255;hu;0;hu;3 TSM:INIT 0;255;hu;0;hu;3 TSF:WUR:MS=0 0;255;hu;0;hu;3 !TSM:INIT:TSP FAIL 0;255;hu;0;hu;3 TSM:FAIL:CNT=hu 0;255;hu;0;hu;3 TSM:FAIL:DIS 0;255;hu;0;hu;3 TSF:TDI:TSL
I reflowed the RFM69 Pads, incase there was a crack or otherwise faulty joint, to no avail, I joined SWC2, and that stopped at eprom.
for completeness, here is the GW sketch. Arduino IDE is 1.8.13
Suggestions?
/** * 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. * * This GW code is designed for Sensebender GateWay / (Arduino Zero variant) * * Wire connections (OPTIONAL): * - Inclusion button should be connected to SW2 * * LEDs on board (default assignments): * - Orange: USB RX/TX - Blink when receiving / transmitting on USB CDC device * - Yellow: RX - Blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved * - Green : TX - Blink fast on radio message transmitted. In inclusion mode will blink slowly * - Red : ERR - Fast blink on error during transmission error or recieve crc error * - Blue : free - (use with LED_BLUE macro) * */ #define SKETCH_VERSION "0.2" // Enable debug prints to serial monitor #define MY_DEBUG #define MY_DEBUG_VERBOSE_SIGNING #define MY_SIGNING_ATSHA204 //#define MY_SIGNING_SOFT //#define MY_SIGNING_SOFT_RANDOMSEED_PIN 7 //#define MY_SIGNING_WEAK_SECURITY // only for debug // Enable and select radio type attached #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RFM69_433MHZ // Set your frequency here #define MY_RFM69_TX_POWER_DBM (14) //#define MY_RFM69_MAX_POWER_LEVEL_DBM (14) // max. TX power 10dBm = 10mW #define MY_IS_RFM69HW // Omit if your RFM is not "H" //#define MY_RF69_IRQ_PIN 2 //#define MY_RF69_IRQ_NUM MY_RF69_IRQ_PIN //#define MY_RFM69_CS_PIN 10 // NSS. Use MY_RF69_SPI_CS for older versions (before 2.2.0) //#define MY_TRANSPORT_WAIT_READY_MS 25000 //#define MY_RFM69_ENABLE_ENCRYPTION //#define MY_RFM69_NETWORKID 100 // Default is 100 in lib. Uncomment it and set your preferred network id if needed //#define MY_SPLASH_SCREEN_DISABLED // 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 // 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 // Set blinking period #define MY_DEFAULT_LED_BLINK_PERIOD 300 // Inverses the behavior of leds //#define MY_WITH_LEDS_BLINKING_INVERSE // Flash leds on rx/tx/err // 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 <MySensors.h> #include <SD.h> //#include <drivers/ATSHA204/ATSHA204.cpp> Sd2Card card; #define EEPROM_VERIFICATION_ADDRESS 0x01 static uint8_t num_of_leds = 5; static uint8_t leds[] = {LED_BLUE, LED_RED, LED_GREEN, LED_YELLOW, LED_ORANGE}; void setup() { // Setup locally attached sensors } void presentation() { // Present locally attached sensors } void loop() { // Send locally attached sensor data here } void preHwInit() { pinMode(MY_SWC1, INPUT_PULLUP); pinMode(MY_SWC2, INPUT_PULLUP); if (digitalRead(MY_SWC1) && digitalRead(MY_SWC2)) { return; } uint8_t tests = 0; for (int i=0; i< num_of_leds; i++) { pinMode(leds[i], OUTPUT); } uint8_t led_state = 0; if (digitalRead(MY_SWC1)) { while (!Serial) { digitalWrite(LED_BLUE, led_state); led_state ^= 0x01; delay(500); } // Wait for USB to be connected, before spewing out data. } digitalWrite(LED_BLUE, LOW); if (Serial) { Serial.println("Sensebender GateWay test routine"); Serial.print("Mysensors core version : "); Serial.println(MYSENSORS_LIBRARY_VERSION); Serial.print("GateWay sketch version : "); Serial.println(SKETCH_VERSION); Serial.println("----------------------------------"); Serial.println(); } if (testSha204()) { digitalWrite(LED_GREEN, HIGH); tests++; } if (testSDCard()) { digitalWrite(LED_YELLOW, HIGH); tests++; } if (testEEProm()) { digitalWrite(LED_ORANGE, HIGH); tests++; } if (testAnalog()) { digitalWrite(LED_BLUE, HIGH); tests++; } if (tests == 4) { while(1) { for (int i=0; i<num_of_leds; i++) { digitalWrite(leds[i], HIGH); delay(200); digitalWrite(leds[i], LOW); } } } else { while (1) { digitalWrite(LED_RED, HIGH); delay(200); digitalWrite(LED_RED, LOW); delay(200); } } } bool testSha204() { uint8_t rx_buffer[SHA204_RSP_SIZE_MAX]; uint8_t ret_code; if (Serial) { Serial.print("- > SHA204 "); } atsha204_init(MY_SIGNING_ATSHA204_PIN); ret_code = atsha204_wakeup(rx_buffer); if (ret_code == SHA204_SUCCESS) { ret_code = atsha204_getSerialNumber(rx_buffer); if (ret_code != SHA204_SUCCESS) { if (Serial) { Serial.println(F("Failed to obtain device serial number. Response: ")); } Serial.println(ret_code, HEX); } else { if (Serial) { Serial.print(F("Ok (serial : ")); for (int i=0; i<9; i++) { if (rx_buffer[i] < 0x10) { Serial.print('0'); // Because Serial.print does not 0-pad HEX } Serial.print(rx_buffer[i], HEX); } Serial.println(")"); } return true; } } else { if (Serial) { Serial.println(F("Failed to wakeup SHA204")); } } return false; } bool testSDCard() { if (Serial) { Serial.print("- > SD CARD "); } if (!card.init(SPI_HALF_SPEED, MY_SDCARD_CS)) { if (Serial) { Serial.println("SD CARD did not initialize!"); } } else { if (Serial) { Serial.print("SD Card initialized correct! - "); Serial.print("type detected : "); switch(card.type()) { case SD_CARD_TYPE_SD1: Serial.println("SD1"); break; case SD_CARD_TYPE_SD2: Serial.println("SD2"); break; case SD_CARD_TYPE_SDHC: Serial.println("SDHC"); break; default: Serial.println("Unknown"); } } return true; } return false; } bool testEEProm() { uint8_t eeprom_d1, eeprom_d2; SerialUSB.print(" -> EEPROM "); eeprom_d1 = hwReadConfig(EEPROM_VERIFICATION_ADDRESS); delay(500); eeprom_d1 = ~eeprom_d1; // invert the bits hwWriteConfig(EEPROM_VERIFICATION_ADDRESS, eeprom_d1); delay(500); eeprom_d2 = hwReadConfig(EEPROM_VERIFICATION_ADDRESS); if (eeprom_d1 == eeprom_d2) { SerialUSB.println("PASSED"); hwWriteConfig(EEPROM_VERIFICATION_ADDRESS, ~eeprom_d1); return true; } SerialUSB.println("FAILED!"); return false; } bool testAnalog() { int bat_detect = analogRead(MY_BAT_DETECT); Serial.print("-> analog : "); Serial.print(bat_detect); if (bat_detect < 400 || bat_detect > 650) { Serial.println(" Failed"); return false; } Serial.println(" Passed"); return true; }
-
RE: is there a list of supported MCU platforms?
Thank you all, the last offering is ideal. As it happens, it also covers the device I wish to use, for physical size and program storage capacity. Teensy' 3.2
Many thanks, look as I might I couldn't find it.
-
is there a list of supported MCU platforms?
I cannot seem to find a simple, current list of the supported MCU platforms. I am particularly thinking of cortex M0 and M4. Teensy' and adafruit in particular.
Can anyone provide or point to such a list please.
Many thanks -
RE: What is the correct way to implement a WDT, for reset on a Sleeping node?
Hi. Power side switching.
-
RE: What is the correct way to implement a WDT, for reset on a Sleeping node?
@zboblamont . Have modified hardware, re-instated mosfet power of the Ultrasonic sensor AND am currently using 3xAA Alkaline batteries, The UC is now powered again from RAW battery voltage, as seemingly (not definately) stepping up to 5v didn't help much, and added noise (undoubtedly) and power overhead, however small.
It's working at the moment. I know thats several changes in one go, however given the mtbf, I will be at this for many months. If this is no more stable than any other versions, I will re-instate the LIPO battery / Solar charging to the circuit.I see you are indeed "doing your own" pings as it were, however for the moment I will persist with the newping library, as the last "failure" definitely occurred post "pinging". Also you use sleep's rather than wait's. Ill have to look into this method myself.
I have investigated several single chip WDT's however they all have short reset time requirements (1.2s max, most a few hundred ms) so it looks like I would definitely need to make my own circuit, seems strange, but I can't find anything with a "interval" in the many mins. Unless I sleep in a loop, reset the WDT, sleep again, and count say 1200 loops of 500ms sleep, then continue on with my main loop.
Regards Nigel
-
RE: What is the correct way to implement a WDT, for reset on a Sleeping node?
Hi @zboblamont
No offence taken at all. I chose to keep the sensor powered simply as a debug process, to eliminate "extra" hardware and code, in an effort to see if somehow that was contributing to my woes! I will re-instigate powering the JSN sensor with the mosfet, as clearly there is no indication that powering up the sensor was causing a brownout, and thus lockup. the other battery nodes have run for months with no issues on 2xAA batteries, with much life remaining in the batteries, and no lockups. The 10 min interval is because the same node also reports external temperature, which I use to accelerate or retard the central heating timing, and set point.
Returning the efficiency of the node to the original however won't help me with the locking up issue, for which I don't seem (as yet) to be able to tie down, and given that a reset ALWAYS "fixes" things, this is why I am pursuing a WDT as a "solution"
Given that the only real differences between this problematic (rebuilt with alt hardware) node and others is limited to- Powersupply, lipo battery and solar vs 2xAA Alkaline
- A ultrasonic sensor
I can eliminate (1) by powering the node with 2xAA, and see what the results are, and I can change the sensor type to a Sharp GP2Y0A60SZLF Analog Distance Sensor (which was my original design before deployment), however the sensor output isn't linear, and whilst I came up with a quadratic equation to approximate the distance, it wasn't ideal.
I am intrigued with your comments regarding limiting the number of pings / time limiting the loop. In my sketch I utilise the new ping library with a median request of 10 pings, I am assuming that the library employs timed loops to create a "window" for pings, based on the maximum distance you tell the library you are interested in, and thus (hopefully) it never gets stuck in a loop waiting for a ping which will never come, or it has already missed. Do you use a library, or do you use your own code to generate and measure pings, thus calculate time / distance?
Many thanks
Regards Nigel -
RE: What is the correct way to implement a WDT, for reset on a Sleeping node?
Hi All,
So in an effort to resolve this, I have rebuilt this device entirely, using all new hardware, and to an extent, topology.
The origional was built on verroboard, and utilised a couple of logic level mosfets to power sensors when needed, sleeping for 10 mins between waking, sampling, transmitting.
I rebuilt using one of the easyPCB boards I have, which are employed in other nodes, very reliably.
I then uprated the battery size, powering the MCU board with raw battery voltage, and using a low dropout 3.3 regulator to power this board. A new utlrasonic board was employed, and powered via a stepup converter to 5v. Level switching IC was used to convert logic levels. The ultrasonic sensor (jsn-sr04t-2.0) was left powered constantly, having a specified consumption when not active of circa 5mA (hence the bigger battery)
During testing it became apparent that when actually starting the sampling for distance measurement, the drain was sufficient to occasionally cause the MCU to reset, adding 220 microF capacitance resolved this, for over 24 hours on the bench.
I deployed this, with a stripped down and potted sensor, to minimise surface area, and have the sensor surface lowermost physically, to atleast help with the possibility of condensate on the surface.This has been running for over a week, but locked up last night. As part of the code changes (power switching no longer required) I added a text reporting entry present(CHILD_ID_TEXT1, S_INFO,"UpdateTxt",false); and used this at several points in the sketch, as a poor man's debug tool. The last entry was AFTER the ultrasonic sampling (fully completed) and before the transmission of the data to the gateway. The battery voltage was 4.11v as reported (fairly accurate).My thoughts are that perhaps I can stop the node sleeping, and see if the solar charging keeps up with the drain, and employ the inbuilt WDT, alternatively I will have to build a long interval WDT, to enable me to sleep the node, or possibly sleep for short intervals, and loop to reset a external WDT, sampling and sending on the same sort of 10 min interval as current.
Any experience or thoughts?
Regards and thanks Nigel
-
RE: 💬 Easy/Newbie PCB (RFM69 HW/W edition) for MySensors
Schematic rfm69 version.
Needs updating, as it shows nrf radio.
-
RE: Signing 2.3.1 no longer allowing upload of new data?
GW Sketch, built under 2.3.1. I have not tried any more recent versions.
Regards
/** * 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 any of the MY_DEFAULT_xx_LED_PINs * - 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 #define MY_SIGNING_SOFT #define MY_SIGNING_SOFT_RANDOMSEED_PIN 7 //#define MY_SIGNING_WEAK_SECURITY // only for debug // Enable and select radio type attached #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY RFM69_433MHZ // Set your frequency here //#define MY_RFM69_TX_POWER_DBM (13) //#define MY_RFM69_MAX_POWER_LEVEL_DBM (13) // max. TX power 10dBm = 10mW //#define MY_IS_RFM69HW // Omit if your RFM is not "H" //#define MY_RF69_IRQ_PIN 2 //#define MY_RF69_IRQ_NUM MY_RF69_IRQ_PIN #define MY_RFM69_CS_PIN 10 // NSS. Use MY_RF69_SPI_CS for older versions (before 2.2.0) //#define MY_RFM69_ENABLE_ENCRYPTION //#define MY_RFM69_NETWORKID 100 // Default is 100 in lib. Uncomment it and set your preferred network id if needed #define MY_SPLASH_SCREEN_DISABLED // 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_MAX // 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 // 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 // Set blinking period #define MY_DEFAULT_LED_BLINK_PERIOD 300 // Inverses the behavior of leds //#define MY_WITH_LEDS_BLINKING_INVERSE // Flash leds on rx/tx/err // 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 7 // tx #include <MySensors.h> void setup() { // Setup locally attached sensors } void presentation() { // Present locally attached sensors } void loop() { // Send locally attached sensor data here }```
-
RE: Signing 2.3.1 no longer allowing upload of new data?
Hi Anticimex,
Given that things must therefore be approaching the end for this platform, I'll bite the bullet for a Sencebender from the US. It is a bit of a pain, as the duty to be paid will be just a couple of pounds, but the "handling fee" is 12 pounds!, almost doubling the cost of the origional board.
When the GW booted, there wasn't a splash screen.
As above, when "in use" the GW has the debugs disabled.I am assuming that IF the signing isn't happening, the only obvious way of knowing, is that the "uploads" will cease?
Regards
Nigel -
RE: Signing 2.3.1 no longer allowing upload of new data?
Hi All,
GW is a Uno Clone At328 based.
I noticed the restart, and had observed this previously when frantically reflashing on Sunday.
When "in situ" on the controller, I remove the debug entries (comment out).
If I should employ an alternate GW base, what would you suggest?
I would otherwise buy the "official" but I am in the UK, and it looks like having to buy from the US?
I am using RFM69 series for radio.Regards
Nigel -
RE: Signing 2.3.1 no longer allowing upload of new data?
Hi,
I have re-flashed the GW and one of the nodes using signing.
This is the log of the GW, when connected to PC, it is NOT connected to the controller.
The Signed node is Node 7.I'm not sure what I might have done any diffrent, but after trying this again all connected up, this now works! I must say though that the coms are now very sketchy when sending new data to node7 (switching outputs).
As always I am grateful for the help.
Regards
Nigelthe signing relivent parts of the sketch on the node are
#define MY_SIGNING_SOFT #define MY_SIGNING_SOFT_RANDOMSEED_PIN 7 #define MY_SIGNING_REQUEST_SIGNATURES
Log from GW
0;255;3;0;9;0 MCO:BGN:INIT GW,CP=RRNGAS--,REL=255,VER=2.3.1 0;255;3;0;9;11 SGN:PER:OK 0;255;3;0;9;40 SGN:INI:BND OK 0;255;3;0;9;44 TSM:INIT 0;255;3;0;9;46 TSF:WUR:MS=0 0;255;3;0;9;49 TSM:INIT:TSP OK 0;255;3;0;9;52 TSM:INIT:GW MODE 0;255;3;0;9;55 TSM:READY:ID=0,PAR=0,DIS=0 0;255;3;0;9;58 MCO:REG:NOT NEEDED 0;255;3;0;14;Gateway startup complete. 0;255;0;0;18;2.3.1 0;255;3;0;9;63 MCO:BGN:STP 0;255;3;0;9;69 MCO:BGN:INIT OK,TSP=1 0;255;3;0;9;72 TSM:READY:NWD REQ 0;255;3;0;9;75 SGN:SGN:NREQ=255 0;255;3;0;9;1311 TSF:MSG:SEND,0-0-255-255,s=255,c=3,t=20,pt=0,l=0,sg=0,ft=0,st=OK: 0;255;3;0;9;1393 TSF:MSG:READ,4-4-0,s=255,c=3,t=21,pt=1,l=1,sg=0:0 4;255;3;0;21;0 0;255;3;0;9;1453 TSF:MSG:READ,7-7-0,s=255,c=3,t=21,pt=1,l=1,sg=0:0 7;255;3;0;21;0 0;255;3;0;9;1468 TSF:MSG:READ,7-7-0,s=30,c=1,t=45,pt=7,l=5,sg=0:55.0 7;30;1;0;45;55.0 0;255;3;0;9;1484 TSF:MSG:READ,7-7-0,s=11,c=2,t=2,pt=0,l=0,sg=0: 7;11;2;0;2; 0;255;3;0;9;1712 TSF:MSG:READ,10-10-0,s=2,c=1,t=2,pt=7,l=5,sg=0: 1 10;2;1;0;2; 1 0;255;3;0;9;1914 TSF:MSG:READ,10-10-0,s=2,c=1,t=2,pt=7,l=5,sg=0: 1 10;2;1;0;2; 1 0;255;3;0;9;1939 TSF:MSG:READ,7-7-0,s=10,c=1,t=2,pt=1,l=1,sg=0:0 7;10;1;0;2;0 0;255;3;0;9;1954 TSF:MSG:READ,7-7-0,s=6,c=1,t=37,pt=2,l=2,sg=0:-55 7;6;1;0;37;-55 0;255;3;0;9;1970 TSF:MSG:READ,7-7-0,s=255,c=3,t=1,pt=0,l=0,sg=0: 7;255;3;0;1; 0;255;3;0;9;2028 TSF:MSG:READ,10-10-0,s=4,c=1,t=16,pt=7,l=5,sg=0: 0 10;4;1;0;16; 0 0;255;3;0;9;2142 TSF:MSG:READ,10-10-0,s=1,c=1,t=45,pt=7,l=5,sg=0:20.5 10;1;1;0;45;20.5 0;255;3;0;9;2254 TSF:MSG:READ,10-10-0,s=5,c=1,t=37,pt=2,l=2,sg=0:0 10;5;1;0;37;0 0;255;3;0;9;2314 TSF:MSG:READ,10-10-0,s=1,c=2,t=29,pt=0,l=0,sg=0: 10;1;2;0;29; 0;255;3;0;9;3678 TSF:MSG:READ,7-7-0,s=1,c=1,t=0,pt=7,l=5,sg=0:54.50 7;1;1;0;0;54.50 0;255;3;0;9;3693 TSF:MSG:READ,7-7-0,s=12,c=2,t=2,pt=0,l=0,sg=0: 7;12;2;0;2; 0;255;3;0;9;3707 TSF:MSG:READ,7-7-0,s=11,c=1,t=2,pt=1,l=1,sg=0:0 7;11;1;0;2;0 0;255;3;0;9;3822 TSF:MSG:READ,7-7-0,s=23,c=1,t=2,pt=1,l=1,sg=0:0 7;23;1;0;2;0 0;255;3;0;9;10138 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 0;255;3;0;9;10144 TSF:MSG:BC 0;255;3;0;9;10147 TSF:MSG:FPAR REQ,ID=7 0;255;3;0;9;10150 TSF:PNG:SEND,TO=0 0;255;3;0;9;10153 TSF:CKU:OK 0;255;3;0;9;10157 TSF:MSG:GWL OK 0;255;3;0;9;11104 SGN:SKP:MSG CMD=3,TYPE=8 0;255;3;0;9;11522 TSF:MSG:SEND,0-0-7-7,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=OK:0 0;255;3;0;9;11720 TSF:MSG:READ,4-4-0,s=25,c=1,t=39,pt=7,l=5,sg=0:2.6 4;25;1;0;39;2.6 0;255;3;0;9;11735 TSF:MSG:READ,4-4-0,s=26,c=1,t=38,pt=7,l=5,sg=0:248.7 4;26;1;0;38;248.7 0;255;3;0;9;11748 TSF:MSG:READ,4-4-0,s=32,c=1,t=37,pt=2,l=2,sg=0:-66 4;32;1;0;37;-66 0;255;3;0;9;11865 TSF:MSG:READ,4-4-0,s=1,c=1,t=17,pt=5,l=4,sg=0:535 4;1;1;0;17;535 0;255;3;0;9;11878 TSF:MSG:READ,4-4-0,s=1,c=1,t=24,pt=5,l=4,sg=0:11406923 4;1;1;0;24;11406923 0;255;3;0;9;11893 TSF:MSG:READ,4-4-0,s=1,c=1,t=18,pt=7,l=5,sg=0:3168.5898 4;1;1;0;18;3168.5898 0;255;3;0;9;13390 TSF:MSG:READ,7-7-0,s=255,c=3,t=24,pt=1,l=1,sg=0:1 0;255;3;0;9;13396 TSF:MSG:PINGED,ID=7,HP=1 0;255;3;0;9;13401 SGN:SKP:MSG CMD=3,TYPE=25 0;255;3;0;9;13411 TSF:MSG:SEND,0-0-7-7,s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=OK:1 0;255;3;0;9;13437 TSF:MSG:READ,7-7-0,s=255,c=3,t=15,pt=6,l=2,sg=0:0101 0;255;3;0;9;13444 SGN:PRE:SGN REQ,FROM=7 0;255;3;0;9;13448 SGN:PRE:SGN NREQ,TO=7 0;255;3;0;9;13452 SGN:PRE:WHI NREQ,TO=7 0;255;3;0;9;13455 SGN:SKP:MSG CMD=3,TYPE=15 0;255;3;0;9;13465 TSF:MSG:SEND,0-0-7-7,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100 0;255;3;0;9;13473 SGN:PRE:XMT,TO=7 0;255;3;0;9;13686 TSF:MSG:READ,7-7-0,s=255,c=0,t=17,pt=0,l=5,sg=0:2.3.1 7;255;0;0;17;2.3.1 0;255;3;0;9;13702 TSF:MSG:READ,7-7-0,s=255,c=3,t=6,pt=1,l=1,sg=0:0 7;255;3;0;6;0 0;255;3;0;9;15733 TSF:MSG:READ,7-7-0,s=255,c=3,t=11,pt=0,l=23,sg=0:Airing Cupboard Control 7;255;3;0;11;Airing Cupboard Control 0;255;3;0;9;15751 TSF:MSG:READ,7-7-0,s=255,c=3,t=12,pt=0,l=5,sg=0:1.3.2 7;255;3;0;12;1.3.2 0;255;3;0;9;15768 TSF:MSG:READ,7-7-0,s=0,c=0,t=6,pt=0,l=14,sg=0:Water Tank Top 7;0;0;0;6;Water Tank Top 0;255;3;0;9;16037 TSF:MSG:READ,7-7-0,s=1,c=0,t=6,pt=0,l=14,sg=0:Water Tank Mid 7;1;0;0;6;Water Tank Mid 0;255;3;0;9;16306 TSF:MSG:READ,7-7-0,s=2,c=0,t=6,pt=0,l=17,sg=0:Water Tank Bottom 7;2;0;0;6;Water Tank Bottom 0;255;3;0;9;16575 TSF:MSG:READ,7-7-0,s=3,c=0,t=6,pt=0,l=20,sg=0:Airing Cupboard Temp 7;3;0;0;6;Airing Cupboard Temp 0;255;3;0;9;16845 TSF:MSG:READ,7-7-0,s=4,c=0,t=6,pt=0,l=20,sg=0:Water Tank Loft Temp 7;4;0;0;6;Water Tank Loft Temp 0;255;3;0;9;17115 TSF:MSG:READ,7-7-0,s=5,c=0,t=6,pt=0,l=9,sg=0:Loft Temp 7;5;0;0;6;Loft Temp 0;255;3;0;9;17381 TSF:MSG:READ,7-7-0,s=6,c=0,t=33,pt=0,l=7,sg=0:RX RSSI 0;255;3;0;9;17387 TSF:MSG:ACK REQ 0;255;3;0;9;17390 SGN:SKP:ACK CMD=0,TYPE=33 0;255;3;0;9;17401 TSF:MSG:SEND,0-0-7-7,s=6,c=0,t=33,pt=0,l=7,sg=0,ft=0,st=OK:RX RSSI 7;6;0;0;33;RX RSSI 0;255;3;0;9;18908 TSF:MSG:READ,7-7-0,s=10,c=0,t=3,pt=0,l=5,sg=0:SSR_1 0;255;3;0;9;18914 TSF:MSG:ACK REQ 0;255;3;0;9;18917 SGN:SKP:ACK CMD=0,TYPE=3 0;255;3;0;9;18927 TSF:MSG:SEND,0-0-7-7,s=10,c=0,t=3,pt=0,l=5,sg=0,ft=0,st=OK:SSR_1 7;10;0;0;3;SSR_1 0;255;3;0;9;19174 TSF:MSG:READ,7-7-0,s=11,c=0,t=3,pt=0,l=5,sg=0:SSR_2 0;255;3;0;9;19181 TSF:MSG:ACK REQ 0;255;3;0;9;19184 SGN:SKP:ACK CMD=0,TYPE=3 0;255;3;0;9;19194 TSF:MSG:SEND,0-0-7-7,s=11,c=0,t=3,pt=0,l=5,sg=0,ft=0,st=OK:SSR_2 7;11;0;0;3;SSR_2 0;255;3;0;9;19440 TSF:MSG:READ,7-7-0,s=12,c=0,t=3,pt=0,l=5,sg=0:SSR_3 0;255;3;0;9;19446 TSF:MSG:ACK REQ 0;255;3;0;9;19450 SGN:SKP:ACK CMD=0,TYPE=3 0;255;3;0;9;19461 TSF:MSG:SEND,0-0-7-7,s=12,c=0,t=3,pt=0,l=5,sg=0,ft=0,st=OK:SSR_3 7;12;0;0;3;SSR_3 0;255;3;0;9;19706 TSF:MSG:READ,7-7-0,s=13,c=0,t=3,pt=0,l=5,sg=0:SSR_4 0;255;3;0;9;19713 TSF:MSG:ACK REQ 0;255;3;0;9;19716 SGN:SKP:ACK CMD=0,TYPE=3 0;255;3;0;9;19727 TSF:MSG:SEND,0-0-7-7,s=13,c=0,t=3,pt=0,l=5,sg=0,ft=0,st=OK:SSR_4 7;13;0;0;3;SSR_4 0;255;3;0;9;19975 TSF:MSG:READ,7-7-0,s=14,c=0,t=3,pt=0,l=16,sg=0:Relay_DISRUPT_CH 0;255;3;0;9;19982 TSF:MSG:ACK REQ 0;255;3;0;9;19985 SGN:SKP:ACK CMD=0,TYPE=3 0;255;3;0;9;19997 TSF:MSG:SEND,0-0-7-7,s=14,c=0,t=3,pt=0,l=16,sg=0,ft=0,st=OK:Relay_DISRUPT_CH 7;14;0;0;3;Relay_DISRUPT_CH 0;255;3;0;9;20244 TSF:MSG:READ,7-7-0,s=15,c=0,t=3,pt=0,l=14,sg=0:Relay_HotWater 0;255;3;0;9;20250 TSF:MSG:ACK REQ 0;255;3;0;9;20253 SGN:SKP:ACK CMD=0,TYPE=3 0;255;3;0;9;20265 TSF:MSG:SEND,0-0-7-7,s=15,c=0,t=3,pt=0,l=14,sg=0,ft=0,st=OK:Relay_HotWater 7;15;0;0;3;Relay_HotWater 0;255;3;0;9;20513 TSF:MSG:READ,7-7-0,s=16,c=0,t=3,pt=0,l=20,sg=0:Relay_CentralHeating 0;255;3;0;9;20521 TSF:MSG:ACK REQ 0;255;3;0;9;20525 SGN:SKP:ACK CMD=0,TYPE=3 0;255;3;0;9;21807 !TSF:MSG:SEND,0-0-7-7,s=16,c=0,t=3,pt=0,l=20,sg=0,ft=0,st=NACK:Relay_CentralHeating 7;16;0;0;3;Relay_CentralHeating 0;255;3;0;9;21862 TSF:MSG:READ,10-10-0,s=2,c=1,t=2,pt=7,l=5,sg=0: 1 10;2;1;0;2; 1 0;255;3;0;9;21976 TSF:MSG:READ,10-10-0,s=4,c=1,t=16,pt=7,l=5,sg=0: 0 10;4;1;0;16; 0 0;255;3;0;9;22088 TSF:MSG:READ,10-10-0,s=1,c=1,t=45,pt=7,l=5,sg=0:20.5 10;1;1;0;45;20.5 0;255;3;0;9;22201 TSF:MSG:READ,10-10-0,s=5,c=1,t=37,pt=2,l=2,sg=0:0 10;5;1;0;37;0 0;255;3;0;9;22261 TSF:MSG:READ,10-10-0,s=1,c=2,t=29,pt=0,l=0,sg=0: 10;1;2;0;29; 0;255;3;0;9;22478 TSF:MSG:READ,7-7-0,s=17,c=0,t=3,pt=0,l=13,sg=0:SSR_IMMERSION 0;255;3;0;9;22486 TSF:MSG:ACK REQ 0;255;3;0;9;22489 SGN:SKP:ACK CMD=0,TYPE=3 0;255;3;0;9;22501 TSF:MSG:SEND,0-0-7-7,s=17,c=0,t=3,pt=0,l=13,sg=0,ft=0,st=OK:SSR_IMMERSION 7;17;0;0;3;SSR_IMMERSION 0;255;3;0;9;22748 TSF:MSG:READ,7-7-0,s=20,c=0,t=3,pt=0,l=19,sg=0:Shower Pump Running 0;255;3;0;9;22755 TSF:MSG:ACK REQ 0;255;3;0;9;22758 SGN:SKP:ACK CMD=0,TYPE=3 0;255;3;0;9;22771 TSF:MSG:SEND,0-0-7-7,s=20,c=0,t=3,pt=0,l=19,sg=0,ft=0,st=OK:Shower Pump Running 7;20;0;0;3;Shower Pump Running 0;255;3;0;9;23017 TSF:MSG:READ,7-7-0,s=21,c=0,t=3,pt=0,l=15,sg=0:CH Pump Running 0;255;3;0;9;23024 TSF:MSG:ACK REQ 0;255;3;0;9;23027 SGN:SKP:ACK CMD=0,TYPE=3 0;255;3;0;9;23040 TSF:MSG:SEND,0-0-7-7,s=21,c=0,t=3,pt=0,l=15,sg=0,ft=0,st=OK:CH Pump Running 7;21;0;0;3;CH Pump Running 0;255;3;0;9;23287 TSF:MSG:READ,7-7-0,s=22,c=0,t=3,pt=0,l=22,sg=0:Immersion Heater ON FB 0;255;3;0;9;23296 TSF:MSG:ACK REQ 0;255;3;0;9;23299 SGN:SKP:ACK CMD=0,TYPE=3 0;255;3;0;9;23312 TSF:MSG:SEND,0-0-7-7,s=22,c=0,t=3,pt=0,l=22,sg=0,ft=0,st=OK:Immersion Heater ON FB 7;22;0;0;3;Immersion Heater ON FB 0;255;3;0;9;23559 TSF:MSG:READ,7-7-0,s=30,c=0,t=14,pt=0,l=22,sg=0:Temperature 1 Setpoint 0;255;3;0;9;23567 TSF:MSG:ACK REQ 0;255;3;0;9;23570 SGN:SKP:ACK CMD=0,TYPE=14 0;255;3;0;9;24810 !TSF:MSG:SEND,0-0-7-7,s=30,c=0,t=14,pt=0,l=22,sg=0,ft=0,st=NACK:Temperature 1 Setpoint 7;30;0;0;14;Temperature 1 Setpoint 0;255;3;0;9;26826 TSF:MSG:READ,7-7-0,s=255,c=3,t=26,pt=1,l=1,sg=0:2 0;255;3;0;9;26832 SGN:SKP:MSG CMD=3,TYPE=16 0;255;3;0;9;26843 TSF:MSG:SEND,0-0-7-7,s=255,c=3,t=16,pt=0,l=0,sg=0,ft=0,st=OK: 0;255;3;0;9;26850 SGN:SGN:NCE REQ,TO=7 0;255;3;0;9;26868 TSF:MSG:READ,7-7-0,s=255,c=3,t=17,pt=6,l=25,sg=0:<NONCE> 0;255;3;0;9;26874 SGN:NCE:FROM=7 0;255;3;0;9;26878 SGN:BND:NONCE=0E92DADC44930DBA963AE05F948FCBCAAD56AD406929AC6E67AAAAAAAAAAAAAA 0;255;3;0;9;3204178589 SGN:BND:HMAC=7E75749D03A4DDC0AA3504697193B20458089AE4CC74A60874E0D66BC517060A 0;255;3;0;9;0 MCO:BGN:INIT GW,CP=RRNGAS--,REL=255,VER=2.3.1 0;255;3;0;9;12 SGN:PER:OK 0;255;3;0;9;46 SGN:INI:BND OK 0;255;3;0;9;49 TSM:INIT 0;255;3;0;9;51 TSF:WUR:MS=0 0;255;3;0;9;54 TSM:INIT:TSP OK 0;255;3;0;9;57 TSM:INIT:GW MODE 0;255;3;0;9;60 TSM:READY:ID=0,PAR=0,DIS=0 0;255;3;0;9;64 MCO:REG:NOT NEEDED 0;255;3;0;14;Gateway startup complete. 0;255;0;0;18;2.3.1 0;255;3;0;9;68 MCO:BGN:STP 0;255;3;0;9;74 MCO:BGN:INIT OK,TSP=1 0;255;3;0;9;78 TSM:READY:NWD REQ 0;255;3;0;9;81 SGN:SGN:NREQ=255 0;255;3;0;9;1303 TSF:MSG:SEND,0-0-255-255,s=255,c=3,t=20,pt=0,l=0,sg=0,ft=0,st=OK: 0;255;3;0;9;1375 TSF:MSG:READ,7-7-0,s=255,c=3,t=21,pt=1,l=1,sg=0:0 7;255;3;0;21;0 0;255;3;0;9;1936 TSF:MSG:READ,7-7-0,s=255,c=3,t=26,pt=1,l=1,sg=0:2 0;255;3;0;9;1942 SGN:SKP:MSG CMD=3,TYPE=16 0;255;3;0;9;1952 TSF:MSG:SEND,0-0-7-7,s=255,c=3,t=16,pt=0,l=0,sg=0,ft=0,st=OK: 0;255;3;0;9;1959 SGN:SGN:NCE REQ,TO=7 0;255;3;0;9;1978 TSF:MSG:READ,7-7-0,s=255,c=3,t=17,pt=6,l=25,sg=0:<NONCE> 0;255;3;0;9;1985 SGN:NCE:FROM=7 0;255;3;0;9;1988 SGN:BND:NONCE=D8CED04EF84C6D5857E71E2AD5EF14F30C6D4C65EBEAF90AF5AAAAAAAAAAAAAA 0;255;3;0;9;3224681300 SGN:BND:HMAC=80D86928F9B24139397069BDAB37B38BB162CA17B09BC2AF2A15C529B9263A57 0;255;3;0;9;1 MCO:BGN:INIT GW,CP=RRNGAS--,REL=255,VER=2.3.1 0;255;3;0;9;13 SGN:PER:OK 0;255;3;0;9;49 SGN:INI:BND OK 0;255;3;0;9;52 TSM:INIT 0;255;3;0;9;54 TSF:WUR:MS=0 0;255;3;0;9;57 TSM:INIT:TSP OK 0;255;3;0;9;60 TSM:INIT:GW MODE 0;255;3;0;9;63 TSM:READY:ID=0,PAR=0,DIS=0 0;255;3;0;9;67 MCO:REG:NOT NEEDED 0;255;3;0;14;Gateway startup complete. 0;255;0;0;18;2.3.1 0;255;3;0;9;71 MCO:BGN:STP 0;255;3;0;9;77 MCO:BGN:INIT OK,TSP=1 0;255;3;0;9;81 TSM:READY:NWD REQ 0;255;3;0;9;84 SGN:SGN:NREQ=255 0;255;3;0;9;1305 TSF:MSG:SEND,0-0-255-255,s=255,c=3,t=20,pt=0,l=0,sg=0,ft=0,st=OK: 0;255;3;0;9;1345 TSF:MSG:READ,7-7-0,s=255,c=3,t=21,pt=1,l=1,sg=0:0 7;255;3;0;21;0 0;255;3;0;9;1555 TSF:MSG:READ,10-10-0,s=255,c=3,t=21,pt=1,l=1,sg=0:0 10;255;3;0;21;0 0;255;3;0;9;1938 TSF:MSG:READ,7-7-0,s=255,c=3,t=26,pt=1,l=1,sg=0:2 0;255;3;0;9;1944 SGN:SKP:MSG CMD=3,TYPE=16 0;255;3;0;9;1953 TSF:MSG:SEND,0-0-7-7,s=255,c=3,t=16,pt=0,l=0,sg=0,ft=0,st=OK: 0;255;3;0;9;1960 SGN:SGN:NCE REQ,TO=7 0;255;3;0;9;1980 TSF:MSG:READ,7-7-0,s=255,c=3,t=17,pt=6,l=25,sg=0:<NONCE> 0;255;3;0;9;1986 SGN:NCE:FROM=7 0;255;3;0;9;1989 SGN:BND:NONCE=7084126762BEC1FA72C020B81DD22C3FAC3F3591CEB5A614BDAAAAAAAAAAAAAA 0;255;3;0;9;357226624 SGN:BND:HMAC=61F31C34FD0B2C6651575468ED0327A8E09C38F8831B4543BBFCA4132998FDF3 0;255;3;0;9;0 MCO:BGN:INIT GW,CP=RRNGAS--,REL=255,VER=2.3.1 0;255;3;0;9;12 SGN:PER:OK 0;255;3;0;9;40 SGN:INI:BND OK 0;255;3;0;9;43 TSM:INIT 0;255;3;0;9;46 TSF:WUR:MS=0 0;255;3;0;9;49 TSM:INIT:TSP OK 0;255;3;0;9;52 TSM:INIT:GW MODE 0;255;3;0;9;55 TSM:READY:ID=0,PAR=0,DIS=0 0;255;3;0;9;58 MCO:REG:NOT NEEDED 0;255;3;0;14;Gateway startup complete. 0;255;0;0;18;2.3.1 0;255;3;0;9;62 MCO:BGN:STP 0;255;3;0;9;69 MCO:BGN:INIT OK,TSP=1 0;255;3;0;9;72 TSM:READY:NWD REQ 0;255;3;0;9;75 SGN:SGN:NREQ=255 0;255;3;0;9;1296 TSF:MSG:SEND,0-0-255-255,s=255,c=3,t=20,pt=0,l=0,sg=0,ft=0,st=OK: 0;255;3;0;9;1343 TSF:MSG:READ,4-4-0,s=255,c=3,t=21,pt=1,l=1,sg=0:0 4;255;3;0;21;0 0;255;3;0;9;1473 TSF:MSG:READ,10-10-0,s=255,c=3,t=21,pt=1,l=1,sg=0:0 10;255;3;0;21;0 0;255;3;0;9;1499 TSF:MSG:READ,7-7-0,s=255,c=3,t=21,pt=1,l=1,sg=0:0 7;255;3;0;21;0 0;255;3;0;9;1560 TSF:MSG:READ,4-4-0,s=25,c=1,t=39,pt=7,l=5,sg=0:2.6 4;25;1;0;39;2.6 0;255;3;0;9;1574 TSF:MSG:READ,4-4-0,s=26,c=1,t=38,pt=7,l=5,sg=0:248.7 4;26;1;0;38;248.7 0;255;3;0;9;1588 TSF:MSG:READ,4-4-0,s=32,c=1,t=37,pt=2,l=2,sg=0:-71 4;32;1;0;37;-71 0;255;3;0;9;1703 TSF:MSG:READ,4-4-0,s=1,c=1,t=17,pt=5,l=4,sg=0:534 4;1;1;0;17;534 0;255;3;0;9;1718 TSF:MSG:READ,4-4-0,s=1,c=1,t=24,pt=5,l=4,sg=0:11406934 4;1;1;0;24;11406934 0;255;3;0;9;1732 TSF:MSG:READ,4-4-0,s=1,c=1,t=18,pt=7,l=5,sg=0:3168.5928 4;1;1;0;18;3168.5928 0;255;3;0;9;2021 TSF:MSG:READ,7-7-0,s=17,c=2,t=2,pt=0,l=0,sg=0: 7;17;2;0;2; 0;255;3;0;9;3545 TSF:MSG:READ,7-7-0,s=30,c=2,t=45,pt=0,l=0,sg=0: 7;30;2;0;45; 0;255;3;0;9;3560 TSF:MSG:READ,7-7-0,s=255,c=3,t=1,pt=0,l=0,sg=0: 7;255;3;0;1; 0;255;3;0;9;4660 TSF:MSG:READ,7-7-0,s=21,c=1,t=2,pt=7,l=5,sg=0: 1 7;21;1;0;2; 1 0;255;3;0;9;4675 TSF:MSG:READ,7-7-0,s=0,c=1,t=0,pt=7,l=5,sg=0:59.50 7;0;1;0;0;59.50 0;255;3;0;9;4790 TSF:MSG:READ,7-7-0,s=30,c=1,t=45,pt=7,l=5,sg=0:55.0 7;30;1;0;45;55.0 0;255;3;0;9;4806 TSF:MSG:READ,7-7-0,s=11,c=2,t=2,pt=0,l=0,sg=0: 7;11;2;0;2; 0;255;3;0;9;4820 TSF:MSG:READ,7-7-0,s=10,c=1,t=2,pt=1,l=1,sg=0:0 7;10;1;0;2;0 0;255;3;0;9;4836 TSF:MSG:READ,7-7-0,s=6,c=1,t=37,pt=2,l=2,sg=0:-65 7;6;1;0;37;-65 0;255;3;0;9;4851 TSF:MSG:READ,7-7-0,s=255,c=3,t=1,pt=0,l=0,sg=0: 7;255;3;0;1; 0;255;3;0;9;9698 TSF:MSG:READ,7-7-0,s=1,c=1,t=0,pt=7,l=5,sg=0:54.50 7;1;1;0;0;54.50 0;255;3;0;9;9712 TSF:MSG:READ,7-7-0,s=12,c=2,t=2,pt=0,l=0,sg=0: 7;12;2;0;2; 0;255;3;0;9;9728 TSF:MSG:READ,7-7-0,s=11,c=1,t=2,pt=1,l=1,sg=0:0 7;11;1;0;2;0 0;255;3;0;9;9842 TSF:MSG:READ,7-7-0,s=23,c=1,t=2,pt=1,l=1,sg=0:0 7;23;1;0;2;0 0;255;3;0;9;9928 TSF:MSG:READ,10-10-0,s=0,c=1,t=0,pt=7,l=5,sg=0:20.26 10;0;1;0;0;20.26 0;255;3;0;9;10041 TSF:MSG:READ,10-10-0,s=2,c=1,t=2,pt=7,l=5,sg=0: 1 10;2;1;0;2; 1 0;255;3;0;9;10153 TSF:MSG:READ,10-10-0,s=4,c=1,t=16,pt=7,l=5,sg=0: 0 10;4;1;0;16; 0 0;255;3;0;9;10267 TSF:MSG:READ,10-10-0,s=1,c=1,t=45,pt=7,l=5,sg=0:20.5 10;1;1;0;45;20.5 0;255;3;0;9;10381 TSF:MSG:READ,10-10-0,s=5,c=1,t=37,pt=2,l=2,sg=0:0 10;5;1;0;37;0 0;255;3;0;9;10441 TSF:MSG:READ,10-10-0,s=1,c=2,t=29,pt=0,l=0,sg=0: 10;1;2;0;29; 0;255;3;0;9;14735 TSF:MSG:READ,7-7-0,s=2,c=1,t=0,pt=7,l=5,sg=0:37.00 7;2;1;0;0;37.00 0;255;3;0;9;14749 TSF:MSG:READ,7-7-0,s=13,c=2,t=2,pt=0,l=0,sg=0: 7;13;2;0;2; 0;255;3;0;9;14764 TSF:MSG:READ,7-7-0,s=12,c=1,t=2,pt=1,l=1,sg=0:0 7;12;1;0;2;0 0;255;3;0;9;14925 TSF:MSG:READ,7-7-0,s=255,c=3,t=1,pt=0,l=0,sg=0: 7;255;3;0;1; 0;255;3;0;9;19771 TSF:MSG:READ,7-7-0,s=3,c=1,t=0,pt=7,l=5,sg=0:10.00 7;3;1;0;0;10.00 0;255;3;0;9;19786 TSF:MSG:READ,7-7-0,s=14,c=2,t=2,pt=0,l=0,sg=0: 7;14;2;0;2; 0;255;3;0;9;19801 TSF:MSG:READ,7-7-0,s=13,c=1,t=2,pt=1,l=1,sg=0:0 7;13;1;0;2;0 0;255;3;0;9;21699 TSF:MSG:READ,4-4-0,s=25,c=1,t=39,pt=7,l=5,sg=0:2.5 4;25;1;0;39;2.5 0;255;3;0;9;21712 TSF:MSG:READ,4-4-0,s=26,c=1,t=38,pt=7,l=5,sg=0:248.6 4;26;1;0;38;248.6 0;255;3;0;9;21726 TSF:MSG:READ,4-4-0,s=32,c=1,t=37,pt=2,l=2,sg=0:-68 4;32;1;0;37;-68 0;255;3;0;9;21841 TSF:MSG:READ,4-4-0,s=1,c=1,t=17,pt=5,l=4,sg=0:531 4;1;1;0;17;531 0;255;3;0;9;21856 TSF:MSG:READ,4-4-0,s=1,c=1,t=24,pt=5,l=4,sg=0:11406945 4;1;1;0;24;11406945 0;255;3;0;9;21870 TSF:MSG:READ,4-4-0,s=1,c=1,t=18,pt=7,l=5,sg=0:3168.5959 4;1;1;0;18;3168.5959 0;255;3;0;9;24807 TSF:MSG:READ,7-7-0,s=4,c=1,t=0,pt=7,l=5,sg=0:28.50 7;4;1;0;0;28.50 0;255;3;0;9;24821 TSF:MSG:READ,7-7-0,s=15,c=2,t=2,pt=0,l=0,sg=0: 7;15;2;0;2; 0;255;3;0;9;24836 TSF:MSG:READ,7-7-0,s=14,c=1,t=2,pt=1,l=1,sg=0:0 7;14;1;0;2;0 0;255;3;0;9;24851 TSF:MSG:READ,7-7-0,s=20,c=1,t=2,pt=7,l=5,sg=0: 0 7;20;1;0;2; 0 0;255;3;0;9;24998 TSF:MSG:READ,7-7-0,s=255,c=3,t=1,pt=0,l=0,sg=0: 7;255;3;0;1; 0;255;3;0;9;29843 TSF:MSG:READ,7-7-0,s=5,c=1,t=0,pt=7,l=5,sg=0:9.00 7;5;1;0;0;9.00 0;255;3;0;9;29858 TSF:MSG:READ,7-7-0,s=16,c=2,t=2,pt=0,l=0,sg=0: 7;16;2;0;2; 0;255;3;0;9;29873 TSF:MSG:READ,7-7-0,s=15,c=1,t=2,pt=1,l=1,sg=0:0 7;15;1;0;2;0 0;255;3;0;9;29949 TSF:MSG:READ,10-10-0,s=0,c=1,t=0,pt=7,l=5,sg=0:20.31 10;0;1;0;0;20.31 0;255;3;0;9;30063 TSF:MSG:READ,10-10-0,s=2,c=1,t=2,pt=7,l=5,sg=0: 1 10;2;1;0;2; 1 0;255;3;0;9;30177 TSF:MSG:READ,10-10-0,s=4,c=1,t=16,pt=7,l=5,sg=0: 0 10;4;1;0;16; 0 0;255;3;0;9;30289 TSF:MSG:READ,10-10-0,s=1,c=1,t=45,pt=7,l=5,sg=0:20.5 10;1;1;0;45;20.5 0;255;3;0;9;30402 TSF:MSG:READ,10-10-0,s=5,c=1,t=37,pt=2,l=2,sg=0:0 10;5;1;0;37;0 0;255;3;0;9;30464 TSF:MSG:READ,10-10-0,s=1,c=2,t=29,pt=0,l=0,sg=0: 10;1;2;0;29; 0;255;3;0;9;34881 TSF:MSG:READ,7-7-0,s=18,c=1,t=39,pt=7,l=5,sg=0:0.00 7;18;1;0;39;0.00 0;255;3;0;9;34896 TSF:MSG:READ,7-7-0,s=20,c=1,t=2,pt=7,l=5,sg=0:0.00 7;20;1;0;2;0.00 0;255;3;0;9;34912 TSF:MSG:READ,7-7-0,s=17,c=2,t=2,pt=0,l=0,sg=0: 7;17;2;0;2; 0;255;3;0;9;34926 TSF:MSG:READ,7-7-0,s=16,c=1,t=2,pt=1,l=1,sg=0:0 7;16;1;0;2;0 0;255;3;0;9;35074 TSF:MSG:READ,7-7-0,s=255,c=3,t=1,pt=0,l=0,sg=0: 7;255;3;0;1; 0;255;3;0;9;39917 TSF:MSG:READ,7-7-0,s=21,c=1,t=2,pt=7,l=5,sg=0: 1 7;21;1;0;2; 1 0;255;3;0;9;39931 TSF:MSG:READ,7-7-0,s=10,c=2,t=2,pt=0,l=0,sg=0: 7;10;2;0;2; 0;255;3;0;9;39946 TSF:MSG:READ,7-7-0,s=17,c=1,t=2,pt=1,l=1,sg=0:0 7;17;1;0;2;0 0;255;3;0;9;41841 TSF:MSG:READ,4-4-0,s=25,c=1,t=39,pt=7,l=5,sg=0:2.6 4;25;1;0;39;2.6 0;255;3;0;9;41854 TSF:MSG:READ,4-4-0,s=26,c=1,t=38,pt=7,l=5,sg=0:248.4 4;26;1;0;38;248.4 0;255;3;0;9;41868 TSF:MSG:READ,4-4-0,s=32,c=1,t=37,pt=2,l=2,sg=0:-68 4;32;1;0;37;-68 0;255;3;0;9;41985 TSF:MSG:READ,4-4-0,s=1,c=1,t=17,pt=5,l=4,sg=0:540 4;1;1;0;17;540 0;255;3;0;9;41998 TSF:MSG:READ,4-4-0,s=1,c=1,t=24,pt=5,l=4,sg=0:11406956 4;1;1;0;24;11406956 0;255;3;0;9;42013 TSF:MSG:READ,4-4-0,s=1,c=1,t=18,pt=7,l=5,sg=0:3168.5989 4;1;1;0;18;3168.5989 0;255;3;0;9;44953 TSF:MSG:READ,7-7-0,s=14,c=1,t=2,pt=7,l=5,sg=0: 0 7;14;1;0;2; 0 0;255;3;0;9;45068 TSF:MSG:READ,7-7-0,s=21,c=1,t=2,pt=7,l=5,sg=0: 1 7;21;1;0;2; 1 0;255;3;0;9;45184 TSF:MSG:READ,7-7-0,s=22,c=1,t=2,pt=7,l=5,sg=0: 0 7;22;1;0;2; 0 0;255;3;0;9;45298 TSF:MSG:READ,7-7-0,s=18,c=1,t=39,pt=7,l=5,sg=0:0.00 7;18;1;0;39;0.00 0;255;3;0;9;45315 TSF:MSG:READ,7-7-0,s=255,c=3,t=1,pt=0,l=0,sg=0: 7;255;3;0;1; 0;255;3;0;9;49974 TSF:MSG:READ,10-10-0,s=0,c=1,t=0,pt=7,l=5,sg=0:20.31 10;0;1;0;0;20.31 0;255;3;0;9;49990 TSF:MSG:READ,7-7-0,s=0,c=1,t=0,pt=7,l=5,sg=0:59.50 7;0;1;0;0;59.50 0;255;3;0;9;50086 TSF:MSG:READ,10-10-0,s=2,c=1,t=2,pt=7,l=5,sg=0: 0 10;2;1;0;2; 0 0;255;3;0;9;50107 TSF:MSG:READ,7-7-0,s=30,c=1,t=45,pt=7,l=5,sg=0:55.0 7;30;1;0;45;55.0 0;255;3;0;9;50123 TSF:MSG:READ,7-7-0,s=11,c=2,t=2,pt=0,l=0,sg=0: 7;11;2;0;2; 0;255;3;0;9;50138 TSF:MSG:READ,7-7-0,s=10,c=1,t=2,pt=1,l=1,sg=0:0 7;10;1;0;2;0 0;255;3;0;9;50152 TSF:MSG:READ,7-7-0,s=6,c=1,t=37,pt=2,l=2,sg=0:-61 7;6;1;0;37;-61 0;255;3;0;9;50200 TSF:MSG:READ,10-10-0,s=4,c=1,t=16,pt=7,l=5,sg=0: 0 10;4;1;0;16; 0 0;255;3;0;9;50314 TSF:MSG:READ,10-10-0,s=1,c=1,t=45,pt=7,l=5,sg=0:20.5 10;1;1;0;45;20.5 0;255;3;0;9;50425 TSF:MSG:READ,10-10-0,s=5,c=1,t=37,pt=2,l=2,sg=0:0 10;5;1;0;37;0 0;255;3;0;9;50486 TSF:MSG:READ,10-10-0,s=1,c=2,t=29,pt=0,l=0,sg=0: 10;1;2;0;29; 0;255;3;0;9;55026 TSF:MSG:READ,7-7-0,s=1,c=1,t=0,pt=7,l=5,sg=0:54.50 7;1;1;0;0;54.50 0;255;3;0;9;55041 TSF:MSG:READ,7-7-0,s=12,c=2,t=2,pt=0,l=0,sg=0: 7;12;2;0;2; 0;255;3;0;9;55055 TSF:MSG:READ,7-7-0,s=11,c=1,t=2,pt=1,l=1,sg=0:0 7;11;1;0;2;0 0;255;3;0;9;55170 TSF:MSG:READ,7-7-0,s=23,c=1,t=2,pt=1,l=1,sg=0:0 7;23;1;0;2;0 0;255;3;0;9;55387 TSF:MSG:READ,7-7-0,s=255,c=3,t=1,pt=0,l=0,sg=0: 7;255;3;0;1; 0;255;3;0;9;60062 TSF:MSG:READ,7-7-0,s=2,c=1,t=0,pt=7,l=5,sg=0:37.00 7;2;1;0;0;37.00 0;255;3;0;9;60078 TSF:MSG:READ,7-7-0,s=13,c=2,t=2,pt=0,l=0,sg=0: 7;13;2;0;2; 0;255;3;0;9;60092 TSF:MSG:READ,7-7-0,s=12,c=1,t=2,pt=1,l=1,sg=0:0 7;12;1;0;2;0 0;255;3;0;9;61981 TSF:MSG:READ,4-4-0,s=25,c=1,t=39,pt=7,l=5,sg=0:2.3 4;25;1;0;39;2.3 0;255;3;0;9;61995 TSF:MSG:READ,4-4-0,s=26,c=1,t=38,pt=7,l=5,sg=0:248.6 4;26;1;0;38;248.6 0;255;3;0;9;62008 TSF:MSG:READ,4-4-0,s=32,c=1,t=37,pt=2,l=2,sg=0:-66 4;32;1;0;37;-66 0;255;3;0;9;62125 TSF:MSG:READ,4-4-0,s=1,c=1,t=17,pt=5,l=4,sg=0:439 4;1;1;0;17;439 0;255;3;0;9;62139 TSF:MSG:READ,4-4-0,s=1,c=1,t=24,pt=5,l=4,sg=0:11406965 4;1;1;0;24;11406965 0;255;3;0;9;62153 TSF:MSG:READ,4-4-0,s=1,c=1,t=18,pt=7,l=5,sg=0:3168.6013 4;1;1;0;18;3168.6013 0;255;3;0;9;65099 TSF:MSG:READ,7-7-0,s=3,c=1,t=0,pt=7,l=5,sg=0:10.00 7;3;1;0;0;10.00 0;255;3;0;9;65114 TSF:MSG:READ,7-7-0,s=14,c=2,t=2,pt=0,l=0,sg=0: 7;14;2;0;2; 0;255;3;0;9;65128 TSF:MSG:READ,7-7-0,s=13,c=1,t=2,pt=1,l=1,sg=0:0 7;13;1;0;2;0 0;255;3;0;9;65462 TSF:MSG:READ,7-7-0,s=255,c=3,t=1,pt=0,l=0,sg=0: 7;255;3;0;1;
-
RE: Signing 2.3.1 no longer allowing upload of new data?
Hi,
Excellent, I'll do that.
Many thanks
Nigel -
RE: Signing 2.3.1 no longer allowing upload of new data?
Hi Anticimex,
I will have to do it on Tuesday, it is the earliest I can spend time on it. (re-flash etc)
I can easily send logs from the nodes, however getting debug logs directly from the gateway will be an issue for me, as I don't know how to access the serial logs, once it is connected to the controller, If I just have it connected to the PC, obviously I won't be generating the appropriate inputs.Any idea how I might access the raw GW serial output when it is connected to the Controller?
Many thanks
Nigel -
Signing 2.3.1 no longer allowing upload of new data?
Hi,
I have a number of nodes, a few of which utilise signing. this has been the case for about 9 months, all working ok.
Signing is soft signing based. I was on 2.2.0 currently 2.3.1. Controller is Domoticz on a synology NAS.
Today, all my nodes that are signed, stopped receiving any sent updates, values sent from the nodes to the GW and thus controller, continued to function. I have seen this before, and eventually solved it by re-flashing the gateway from scratch (serial GW) , first clearing the EEprom, re-signing, and then uploading GW sketch.
I re-performed this today after the "issue" and after a false start of the software signing sketch not compiling, I resolved this, and re performed as above on the gateway. No Joy, same behaviour. OK, so I might need to reflash all the nodes with the 2.3.1 soft signing, so clear eeprom, sign, reflash, in each case. No dice, cannot "send" data to nodes, can only receive. In desperation, I have removed signing from my nodes, in order to get my Central Heating working again. Obviously this isn't ideal, and I wish to re-establish security as soon as possible. (nodes now work upload as well as download)
Given that it has all been working for months, and all that has other wise changed is the mysensors changing from 2.2.0 to 2.3.1 (in my case) What has changed, and what do I need to do differently to get signing working again?I cant get simultaneous logs from my devices, as they are physically installed in disparate locations.
Anybody else had a problem?
I did come across this bug report, which I followed, to enable the personaliser to complile. [https://forum.mysensors.org/topic/10068/node-personalizer-sketch-seems-broken-in-mysensors-2-3-1/3](link url)Suggestions / help please.
Regards Nigel
-
RE: What is the correct way to implement a WDT, for reset on a Sleeping node?
As a simple fix, i've stepped up the whole supply , with the addition of a step up booster to 5v, I'll see the results!
-
RE: What is the correct way to implement a WDT, for reset on a Sleeping node?
Many thanks, Do you think then that given I wish to remain with a lithium battery, which otherwise has performed suitably, that inclusion of a step-up regulator, to provide a 5v rail for the ultrasonic sensor?
Do you imagine the battery drain with the additional regulator to be a problem?
Would you supply the whole system with the stepped up 5v, or just the ultrasonic?
The radio and temperature sensor are supplied via the 3.3v regulator on the mcu board, the ultrasonic, via a logic level Nch mosfet, fed off the main battery rail.
The ultrasonic device is supposed to have a supply range of 3.3 - 5.5vregards
-
RE: What is the correct way to implement a WDT, for reset on a Sleeping node?
Hi,
3.8v on a 8Mhz , Rocket Scream unit, with onboard regulator, and a input range 3.4 – 6 V
This system is a Lithium, charged by solar, even through the winter, it has maintained circa 3.8v, until the week of no data receiving (my assumption of locking up with sensor powered).I am uncertain as to why or how a condensated sensor surface would cause the processor to lock, incorrect readings for sure, I suppose it is conceivable that the library I am using might get stuck in a loop, and thus never return to the main loop of the program, thus never sleep, or turn off the power to the sensor. The library is located here -
[https://bitbucket.org/teckel12/arduino-new-ping/downloads/](link url) The installed version is 1.9.0, I see there is an update, Ill re-build and upload any way, and see if that helps over time.However to return to the origional question, it seems that using the onboard WDT is not really possible, I did try enabling it at the top of the main loop, and disabling before sleep, but that didn't allow it to run either.
Unless there are any other suggestions, Ill, have to employ a TPL5110 timer, and power cycle the board every interval. Not what I really want to do, anybody have a better solution?
regards
-
RE: What is the correct way to implement a WDT, for reset on a Sleeping node?
RFM69 Series, Signal strength is good, circa -77db.
When this occurs, the battery is significantly drained, if I don't reset it, This leads me to believe that it is hanging mid process, and leaving the sensors powered.
The sensors are powered via logic level mosfets, which are controlled via digital pins on the processor.
As I say, it works fine for weeks on end, then hangs on an indeterminate frequency, this has worked in this fashion for 8 months, the code transmits the data several times for each loop, which is once every 10 mins, I (when I have specifically checked on occasion) get all the transmits of a loop. The ultrasonic sensor, can pull in the order of 60mA, when operating, hence the power mosfet(s).
I have concluded thus, that the "system" is hanging after the mosfet is enabled, but before it is disabled. There may be myriad reasons as to why, but the system is otherwise OK, when reset, hence the wish to employ a hardware WDT, as the onboard WDT is used by the Sleep function, I don't seem able to employ that, at least I haven't been able to successfully.Thus I am asking mysensors people (so to speak) as how I may implement a WDT, other than building a external circuit.
regards
-
What is the correct way to implement a WDT, for reset on a Sleeping node?
Hi,
I have a node, which is both remote (middle of the garden, measuring oil level, and external temperature) ,and battery powered, it sleeps for 10 Mins, then wakes, measures and reports. All is mostly well, however occasionally, it fails to report for an extended period, and I have to manually reset it, when all is then well for weeks.
I have tried to implement using the onboard WDT, however this results in the board never really initialising, and sending data.
I can build an external WDT, however before revisiting this, I thought I should ask for other wisdom, as there may be an established method for doing this, that I can't seem to find.Many thanks