2017年5月6日土曜日

khal + vdirsyncer + (ownCloud -> Yahooカレンダー -> googl calendar)[20190328up]

はじめに

日頃、 メモとか昔の資料の整理とかに emacsのorg-modeを使っていて、重宝している。予定とかTODOとかは、 googleカレンダーをThunderbirdとかWebブラウザで使うのと、 org-modeとの、両刀使いになっている。
 なので、emacs上のorg-modeに統合したいのだが、 私レベルが使えるものが見つからない。
リタイアした者としては密なスケジュール管理は不要だし、 ガラケー使いだから外での接続も不要。なので、 カレンダーサービスをemacs上でダイレクトにハンドリングすることは 現状では諦めることにし、 org-modeを基本に、一部スケジュールをemacs外への転記で妥協することにした(今後の達人達に期待?)。
 代替えは、caldav client + caldav server。クライアントは、khalとThunderbird。サーバーは、Yahooカレンダーと、宅内QNAP上owncloudのカレンダー。ゴミ出し日はYahooカレンダー、タスクはowncloud、 とか使い分ける。 Google calendarとラズパイで走らせているDAViCalここにmemo)。サーバーとPCの同期は、vdirsyncer をcronで動かす。

vdirsyncer の設定

Debianのパッケージにあるので、インストする。設定は、 ~/.config/vdirsyncer/ 以下に作成。

(1)  owncloud用   ~/.config/vdirsyncer/config
[general]
status_path = "~/.cache/vdirsyncer/status/"

[pair calendar]
a = "calendar_local"
b = "calendar_remote"
collections = ["from a", "from b"]

# Calendars also have a color property
metadata = ["displayname", "color"]

[storage calendar_local]
type = "filesystem"
path = "~/Documents/ownCloud/caldav/"
fileext = ".ics"

[storage calendar_remote]
type = "caldav"
url = "http://192.168.0.21/owncloud/remote.php/dav/"
username = "xxxxxxx"
password = "xxxxxxx"

 (2) yahooカレンダー用  ~/.config/vdirsyncer/configya
[general]
status_path = "~/.cache/vdirsyncer/status2/"

[pair yahoo_calendar]
a = "yahoo_calendar_local"
b = "yahoo_calendar_remote"
collections = ["from a", "from b"]

# Calendars also have a color property
metadata = ["displayname", "color"]

[storage yahoo_calendar_local]
type = "filesystem"
path = "~/Documents/ownCloud/caldav2/"
fileext = ".ics"

[storage yahoo_calendar_remote]
type = "caldav"
url = "https://caldav.calendar.yahoo.co.jp/"
username = "xxxxxxxxx"
password = "xxxxxxxxx"


(3) 初回の同期
vdirsyncer -c ~/.config/vdirsyncer/config_oc discover vdirsyncer -c ~/.config/vdirsyncer/config_ya discover
これで、サーバーに作成しているカレンダーが登録される。

(4) 二回目以降
vdirsyncer -c ~/.config/vdirsyncer/config_oc sync vdirsyncer -c ~/.config/vdirsyncer/config_ya sync
これを同期用のスクリプトとして作成し、 crontab -e で cron 登録。
*/45 * * * * /home/hoge/bin/vcal_sync_oc */45 * * * * /home/hoge/bin/vcal_sync_ya

khalの設定

khalは、 軽量なコンソールのカレンダーアプリで、 khal とか ikhal でコンソールに表示させる。 ikhalはインタラクティブ。
 ・予定の登録は、 'khal new -a home tomorrow 16:30 あいつと遊ぶ' とかで、登録。
 ・予定の表示は、 'khal list -a private tomorrow 3d' で、明日から三日間のprivateのリスト表示。
 ikhalはインタラクティブ表示なのだが、 Debianのパッケージは古いので、データのリロードが自動で行われない。 最新版をインストした方がよい。

 設定は、~/.config/khal/config。こちらは一本化出来る。
dateformat を変更。短くした。

[calendars]

[[private]]
path = /home/hoge/Documents/ownCloud/caldav/private
color = light cyan

[[work]]
path = /home/hoge/Documents/ownCloud/caldav/work
color = light red

[[yahoo-cal]]
path = /home/hoge/Documents/ownCloud/caldav2/yahoo-cal
color = dark red

[[weather]]
path = "/home/hoge/Documents/ownCloud/caldav2/大阪府 大阪の天気"
color = light blue
readonly = True

# update 
[locale]
timeformat = %H:%M
dateformat = %m-%d
longdateformat = %Y%m%d
datetimeformat = %Y%m%d %H:%M
longdatetimeformat = %Y%m%d %H:%M
firstweekday = 0
unicode_symbols = true
weeknumbers = off


[default]
# default_command = calendar
# version 0.10.0 から不要扱い(20190328)
default_calendar = private
highlight_event_days = True
timedelta = 10d

[view]
theme = dark
event_view_weighting = 2

 Yahooカレンダーで天気を登録しておくと、このデータも同期される。コンソールでansiwratherとかでもよいが、 週間予報が表示されるのは嬉しい誤算。


 
しばらく使ってみようと思う。 googleとは一旦、お別れ。
一応、org-agendaにデフォのgoogleカレンダー表示は残す。


[20170624追加]
 khalでは月表示みたいな比較的長いスパンでの作業が不便に感じている。そこで、 KOrganizerを併用しはじめた。 KOrganierのインターフェースは今ひとつ好みでないが、設定が簡単。なお、KOrganizerを終了しても、akonadi 関連が残るので、akonadictl stop で終了させること必要。ここは不便だ。

 Thunderbirdのカレンダーに、Yahooカレンダーを登録する設定がわからなかったので諦めた。

 QNAP上のownCloudは反応が遅すぎてストレスになるのでWebで使うのはやめた。(ラズパイへ移行した)

 で、予定については、通常はkhalで、長スパンが必要な場合はKOrganizerという二本立てでしばらく試してみる。

しかし、khalのドキュメントのとおりに動かない。なにかを間違えているのだと思うが、ペンディング。 khal at と khal list で日付のformatが違ったりする。 

khalを簡単なメモ代わりに使うのもありかも。

$ khal new today ほにゃなら
$ khal new tomorrow 9:00 10:30 ほにゃなら :: ほにゃらについて
$ khal new -a works today ほにゃなら
でいけちゃう。

[20171108追加]
ラズパイのmicroSDが逝った。jessieからstretchへのupgradeに伴いownCloudのVer.も上げたら、カレンダーが使えない。Ver.を下げるのも癪に障るので、caldavサーバーをDAViCalに変更した。結果的に良くなったかも。
# CALDAV
[pair ayage_calendar]
a = "a_calendar_local"
b = "a_calendar_remote"
collections = ["from a", "from b"]

# Calendars also have a color property
metadata = ["displayname", "color"]

[storage ayage_calendar_local]
type = "filesystem"
path = "~/Documents/calDav/caldav/"
fileext = ".ics"

[storage ayage_calendar_remote]
type = "caldav"
url = "http://192.168.0.21/baikal/cal.php/calendars/hoge/"
username = "hoge"
password = "hogepass"
[20171123追加]
Yahooのsyncがエラーを吐くようになった。基本的にurlを指定してアクセスすることはできなくなってた(ここ)わけで、やはりダメなのだろうか。短かったなあ。で、googleに再トライした。
[pair google_calendar]
a = "google_calendar_local"
b = "google_calendar_remote"
conflict_resolution = "b wins"
collections = ["hogehoge@gmail.com"]
collections = ["from a", "from b"]
metadata = ["displayname", "color"]

[storage google_calendar_local]
type = "filesystem"
path = "~/Documents/ownCloud/caldav1/"
fileext = ".ics"

[storage google_calendar_remote]
type = "google_calendar"
token_file = "/home/hogehoge/.config/vdirsyncer/token_file"
client_id = ""
client_secret = ""
start_date = "datetime.now() - timedelta(days=60)"
end_date = "datetime.now() + timedelta(days=240)"

 vdirsyncer -vdebug -c ~/.config/vdirsyncer/config_gc discover 
で、吐かれたメッセージ見ながら、 requests-oauthlib をインストしたり、 Google Calendar CalDAV API を有効にしたりとか、 色々怒られながたやってたら、なんとか、デフォのマイカレンダーはシンクロできるようになった。
あとは、複数のマイカレンダーがシンクロ出来るようにしたいけど、出来るのかなあ。 [出来た。普通だった。]
週間予報が無くなるのはショックかも。

[20171130追加]
Yahooカレンダーを止めたので、週間天気予報が表示されない。で、ical形式の天気予報データの入手方法を探してたら、英語だけど、phpでics形式で吐き出してくれるスクリプト [weather-calendar-feed]を見つけたので、使ってみた。 サブディレクトリのライブラリも必要なので、一緒にいれておく。
サーバーサイトで、自宅近くのサイトを探してパラメータをセット。
$location = param('location', 'Japan/Osaka/Hirakata');
あとは、
php index.php > weatherdata
で、データが得られる。ただし、9日間のデータが一つのファイルになっていて、そのままではkhalで使えない。 そこで、awkで分割してcaldav用に放り込むスクリプトを書いて、cronを設定してお試し中。 使いながら、php のスクリプトを修正してゆこう。
gawk -f split_weather.awk < weatherdata

[20180902追加]
khal のカラーテーマの配色は、ソースコードを変更すれば、好みに修正できるようだ。 私は pyenv 環境で使ってるので、以下のファイルを編集するだけ。 mlterm から st に変更したら配色が変になったので、こちらを修正した次第。 本末転倒か。
$ ~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/khal/ui/colors.py
これまでメモった、khalのコマンドサンプル。
$ khal at                                 今の情報
$ khal list                               今日から一週間(デフォ値)の予定
$ khal list 20170723 10d                  20170723から 10日間 
# x $ khal list 7-23 10d                      20180723から 10日間 
$ khal list -a bikes                      bikes だけの予定
# x $ khal list -d bikes 12-01 14d            bikes 以外の予定
$ khal search 病                           病 を探す

# default calendar は使えなくなった(20190327)。

$ khal new today hogehoge                     
$ khal new tomorrow 12:00 ほにゃなら :: ほげ
$ khal new now 15m 今から15分ほどバグ探し
# $ khal new 10-30 ほにゃなら            10月30日に ほにゃら
$ khal new today 16:25 5m 振込 :: 今日、16:25 から5分ほど、振込作業。
$ khal new -a work 20180213 hoge :: hoge     
$ khal new -a pubs 20181020 13:00 病院 :: 車で行く
$ khal new -a pubs 10-20 13:00 病院 :: 車で行く
$ khal new 20180828 09:30 20180830 17:00 Travel
$ khal new -a pubs today 08:45 25m update blogger
$ khal new -a pubs today 3d 今日から3日の予定
$ khal new -a pubs now 10m update vim plugins

$ khal new -a work `date "+%Y%m%d %H:%M" --date='15 minutes ago'` 10m  update ctags
  15分前から10分ほど、ctags の更新作業をした。(pet に登録して使っている)





0 件のコメント:

コメントを投稿

麻のボディタオル

2018年の秋(まだ、自転車を封印してない)、 近江上布伝統産業会館 で、興味からボディタオルを購入した。 お、よかった。: 自然派パン工房 ふるさとの道 ほぼ毎日風呂で使ってきて、ついに寿命がきたようだ。 お店の方に、「糸が痩せて破れてくる」まで使える、と...