Time(NTP+RTC)

系統時間 date

date
sudo date -s "2014-11-19 00:00:00"
sudo date 112900002014.00

NTP: Network Time Protocol

sudo apt-get install ntpdate
sudo ntpdate -u watch.stdtime.gov.tw

手動設定系統時間

sudo date -s "2011-01-01 01:01:01"

確認NTP服務裝態

sudo service ntp status
sudo service ntp start
sudo service ntp stop

台灣NTP server列表

  • tock.stdtime.gov.tw
  • watch.stdtime.gov.tw
  • time.stdtime.gov.tw
  • clock.stdtime.gov.tw
  • tick.stdtime.gov.tw

Auto NTP

pi@raspberrypi:~ $ timedatectl  
Local time: Tue 2016-08-30 17:27:05 CST  
Universal time: Tue 2016-08-30 09:27:05 UTC  
RTC time: n/a  
Time zone: Asia/Taipei (CST, +0800)  
NTP enabled: no  
NTP synchronized: yes  
RTC in local TZ: no  
DST active: n/a  
pi@raspberrypi:~ $ sudo timedatectl set-ntp yes  
pi@raspberrypi:~ $ sudo timedatectl   
Local time: Tue 2016-08-30 17:27:52 CST  
Universal time: Tue 2016-08-30 09:27:52 UTC  
RTC time: n/a  
Time zone: Asia/Taipei (CST, +0800)  
NTP enabled: yes  
NTP synchronized: yes  
RTC in local TZ: no  
DST active: n/a

注意這行

NTP enabled: yes

另一個設定自動NTP的方式

sudo timedatectl set-ntp yes

NTP啟動/停止/看狀態

pi@raspberrypi:~ $ sudo service ntp start
...(skip)
pi@raspberrypi:~ $ sudo service ntp stop
...(skip)
pi@raspberrypi:~ $ sudo service ntp status 
...(skip)

透過NTP更新時間

https://victorhurdugaci.com/raspberry-pi-sync-date-and-time

1) 查亞洲NTP伺服器

2) 修改ntp.conf

3) 設定時區檔 (應該是給ntpd程式去抓來用的,不設定的話ntpd會起不來)

4) 當系統時間與NTP報時差太多(預設1000秒)時,NTP會覺得其中有鬼而不敢更新系統時間。此時需手動強制同步。

實驗記錄

1) RTC設定錯誤時間,啟動時斷網,無NTP,啟動後系統時間為正確時間向前推一段短時間(約1小時內),猜測為樹莓久久會偷把系統時間更新於SD卡內。

2) RTC設定為錯誤時間,啟動時連網,有NTP,系統時間仍為錯誤。猜測為誤差時間過大,NTP不更新系統時間。

3) 延續2) 手動強制使用NTP更新系統時間 sudo ntp -gq 而後重啟動系統,系統時間恢復正確。RTC時間也被修正為正確時間。

結論1: 當NTP成功同步時,會連RTC一併同步

4) 有NTP(連網),RTC正確,系統時間錯誤,斷電重啟:系統時間錯誤,RTC錯誤。

x) 無NTP(未連網),RTC正確,系統時間錯誤,軟體重啟(不斷電):系統時間恢復正確。

x) 無NTP(未連網),RTC正確,系統時間錯誤,斷電重啟:系統時間錯誤,RTC錯誤。

TIPS:

修改系統時間

sudo date 112900002014.00

讀寫RTC

sudo hwclock -r
sudo hwclock --systohc
sudo hwclock --hctosys

啟動時載入RTC裝置

sudo vim /etc/rc.local
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s

使用NTP Client同步時間

http://linux.vbird.org/linux_server/0440ntp.php

http://luijnijei.blog.163.com/blog/static/350245942010913912192/

pi@raspberrypi:~ $ sudo date 112900002014
Sat 29 Nov 00:00:00 CST 2014
pi@raspberrypi:~ $ date
Sat 29 Nov 00:00:02 CST 2014
pi@raspberrypi:~ $ sudo ntpdate asia.pool.ntp.org
20 Apr 17:35:52 ntpdate[1317]: step time server 211.233.84.186 offset 75490526.577625 sec
pi@raspberrypi:~ $ date
Thu 20 Apr 17:35:56 CST 2017

RTC(i2c)

[rpi+rtc](http://yehnan.blogspot.tw/2014/01/raspberry-pirtc.html)

[Adding a Real Time Clock to your Raspberry Pi](http://thepihut.com/blogs/raspberry-pi-tutorials/17209332-adding-a-real-time-clock-to-your-raspberry-pi)


安裝i2c工具程式

pi@raspberrypi:~ $ sudo apt-get install python-smbus i2c-tools

開啟I2C介面:開始程式集/Preferences/Raspberry Pi Configuration

測試是否偵測得到i2c晶片 (先確認I2C介面是否已開啟)

pi@raspberrypi:~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

手動插入驅動程式

pi@raspberrypi:~ $ sudo modprobe i2c-bcm2708
pi@raspberrypi:~ $ sudo modprobe i2c-dev
pi@raspberrypi:~ $ sudo modprobe rtc-ds1307

開機時自動載入驅動模組:編輯 /etc/modules,加入以下內容

i2c-bcm2708
i2c-dev
rtc-ds1307

提升權限並寫入設定值

pi@raspberrypi:~ $ sudo bash
root@raspberrypi:/home/pi# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
root@raspberrypi:/home/pi# exit
exit

開機時自動加入裝置並更新系統時間,修改/etc/rc.local,加入以下兩行

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s

寫入RTC

pi@raspberrypi:~ $ sudo hwclock -r
Sat 01 Jan 2000 08:25:02 CST  -0.664135 seconds
pi@raspberrypi:~ $ date
Wed 19 Apr 14:57:02 CST 2017
pi@raspberrypi:~ $ sudo hwclock -w
pi@raspberrypi:~ $ sudo hwclock -r
Wed 19 Apr 2017 14:57:19 CST  -0.300283 seconds

同場加映

手動修改系統時間

pi@raspberrypi:~ $ date
Wed 19 Apr 15:27:04 CST 2017
pi@raspberrypi:~ $ sudo date -s "2011-01-01 01:01:01"
Sat  1 Jan 01:01:01 CST 2011
pi@raspberrypi:~ $ date
Sat  1 Jan 01:01:03 CST 2011

無法設定RTC解法:重新插入rtc-ds1307模組並提升權限並設定0x68。

pi@raspberrypi:~ $ sudo hwclock -r
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --debug option to see the details of our search for an access method.

檢查驅動,重新設定

pi@raspberrypi:~ $ lsmod | grep i2c
i2c_bcm2708             4834  0 
i2c_dev                 5859  0 
pi@raspberrypi:~ $ lsmod | grep rtc
rtc_ds1307              9521  0 
pi@raspberrypi:~ $ sudo bash 
root@raspberrypi:/home/pi# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
root@raspberrypi:/home/pi# exit
exit
pi@raspberrypi:~ $ sudo hwclock -r
Sat 01 Jan 2011 01:34:36 CST  -0.952313 seconds
pi@raspberrypi:~ $ sudo hwclock -w
pi@raspberrypi:~ $ sudo hwclock -r
Wed 19 Apr 2017 16:05:32 CST  -0.467660 seconds

猜測為開機時未加入ds1307裝置,修改rc.local為開機時自動加入ds1307

加入以下兩行:

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s

如下:

pi@raspberrypi:~ $ sudo cat /etc/rc.local 
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s

exit 0

results matching ""

    No results matching ""