timesync fixes
This commit is contained in:
		
							parent
							
								
									a88ea16e3a
								
							
						
					
					
						commit
						d597f50d53
					
				| @ -126,22 +126,6 @@ | ||||
|             ] | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "id": "f4c5b6de.f95148", | ||||
|         "type": "function", | ||||
|         "z": "449c1517.e25f4c", | ||||
|         "name": "Time_Sync_Ans", | ||||
|         "func": "/* LoRaWAN Timeserver\n\nconstruct 6 byte timesync_answer from gateway timestamp and node's time_sync_req\n\nbyte    meaning\n0       sequence number (taken from node's time_sync_req)\n1..4    current second (from epoch time 1970)\n5       1/250ths fractions of current second\n\n*/\n\n  let buf = new ArrayBuffer(6);\n  let timestamp = (+new Date(msg.payload.metadata.gateways[0].time));\n  \n  var seconds = Math.floor(timestamp/1000);\n  var fractions = (timestamp % 1000) / 4;\n  var seqno = msg.payload.payload_raw[0];\n\n  new DataView(buf).setUint8(0, seqno);\n  new DataView(buf).setUint32(1, seconds);\n  new DataView(buf).setUint8(5, fractions);\n\n  msg.payload = new Buffer(new Uint8Array(buf));\n  \n  return msg;", | ||||
|         "outputs": 1, | ||||
|         "noerr": 0, | ||||
|         "x": 400, | ||||
|         "y": 280, | ||||
|         "wires": [ | ||||
|             [ | ||||
|                 "49e3c067.e782e" | ||||
|             ] | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "id": "dac8aafa.389298", | ||||
|         "type": "json", | ||||
| @ -219,7 +203,23 @@ | ||||
|         "y": 200, | ||||
|         "wires": [ | ||||
|             [ | ||||
|                 "f4c5b6de.f95148" | ||||
|                 "595229b0.5df3d8" | ||||
|             ] | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "id": "595229b0.5df3d8", | ||||
|         "type": "function", | ||||
|         "z": "449c1517.e25f4c", | ||||
|         "name": "Time_Sync_Ans", | ||||
|         "func": "/* LoRaWAN Timeserver\n\nconstruct 6 byte timesync_answer from gateway timestamp and node's time_sync_req\n\nbyte    meaning\n0       sequence number (taken from node's time_sync_req)\n1..4    current second (from epoch time 1970)\n5       1/250ths fractions of current second\n\n*/\n\n  let timestamp = (+new Date(msg.payload.metadata.gateways[0].time));\n  let timestamp_server = (+new Date(msg.payload.metadata.time));\n  \n  if ((timestamp < timestamp_server) && (timestamp > 0)) {\n   \n  var seconds = Math.floor(timestamp/1000);\n  var fractions = (timestamp % 1000) / 4;\n  var seqno = msg.payload.payload_raw[0];\n\n  let buf = new ArrayBuffer(6);\n  new DataView(buf).setUint8(0, seqno);\n  new DataView(buf).setUint32(1, seconds);\n  new DataView(buf).setUint8(5, fractions);\n\n  msg.payload = new Buffer(new Uint8Array(buf));\n  \n  return msg;\n}\n\nelse\n\nreturn null;", | ||||
|         "outputs": 1, | ||||
|         "noerr": 0, | ||||
|         "x": 380, | ||||
|         "y": 280, | ||||
|         "wires": [ | ||||
|             [ | ||||
|                 "49e3c067.e782e" | ||||
|             ] | ||||
|         ] | ||||
|     }, | ||||
|  | ||||
| @ -187,7 +187,7 @@ void setup() { | ||||
| // set low power mode to off
 | ||||
| #ifdef HAS_LOWPOWER_SWITCH | ||||
|   pinMode(HAS_LOWPOWER_SWITCH, OUTPUT); | ||||
|   digitalWrite(HAS_LOWPOWER_SWITCH, HIGH); | ||||
|   digitalWrite(HAS_LOWPOWER_SWITCH, LOW); | ||||
|   strcat_P(features, " LPWR"); | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -155,15 +155,18 @@ void process_timesync_req(void *taskparameter) { | ||||
|       ESP_LOGD(TAG, "waiting %dms", 1000 - time_offset_msec); | ||||
|       vTaskDelay(pdMS_TO_TICKS(1000 - time_offset_msec)); | ||||
| 
 | ||||
|       setTime(time_to_set); | ||||
|       // sync timer pps to top of second
 | ||||
|       if (ppsIRQ) | ||||
|         timerWrite(ppsIRQ, 10000); // fire interrupt
 | ||||
|       if (ppsIRQ) { | ||||
|         timerRestart(ppsIRQ); // reset pps timer
 | ||||
|         CLOCKIRQ(); // fire clock pps interrupt
 | ||||
|       } | ||||
| 
 | ||||
|       setTime(time_to_set); | ||||
|       timeSource = _lora; | ||||
|       timesyncer.attach(TIME_SYNC_INTERVAL * 60, | ||||
|                         timeSync); // set to regular repeat
 | ||||
|       ESP_LOGI(TAG, "Timesync finished, time adjusted by %lld ms", time_offset.count()); | ||||
|       ESP_LOGI(TAG, "Timesync finished, time adjusted by %lld ms", | ||||
|                time_offset.count()); | ||||
|     } else | ||||
|       ESP_LOGI(TAG, "Timesync finished, time not adjusted, is up to date"); | ||||
|   } else | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user