前記事
一応一番やりたかったことだけ、一番楽な実装しました。
ある時間から、ある時間にかけてだんだん照明を暗くして、最後には消灯するスクリプト。
明るさを一定時間ごとに落として、最後は消灯するだけの簡単なスクリプトです。第一引数に秒数設定できるようになっています。
軽い解説
命令の詳しい話は以下のページに大体書いてあります。
LimitlessLED Technical Developer Opensource API | LimitlessLED
命令三バイトの構成は
- 命令
- レベル(輝度、色変更命令のみ。それ以外は何でもよい?)
- 55固定(たぶん)
と非常に単純なものになっています。
今回使ったのは
- 0x45:GRP1 ON
- 0x46:GRP1 OFF
- 0xC5:GRP1 Color/Blightness Reset
- 0x40:Color Setting(00-FF)
- 0x4E:Blightness setting(02-1B,1Bが最も明るい)
です。
説明は不要ですね。上四つは\x45\x00\x55とか書いて送り付ければ動きます。
下二つは、2バイト目が括弧の中の数字の範囲で調整できます。色は頭に貼ったリンクの中に記述してあります。一部はカラーコードと合わせて記述されてます。すごい。たぶん、電源はいってても入ってなくても、命令先グループを指定する必要があるので命令投げる前にとりあえずON命令投げておくといいんじゃないかと思います。
で、上記の命令をブリッジの8899ポートにぶんなげればLED操作できます。
ソケット部分は先人のコピペなので困らなく、命令も簡単なのでさほど困りませんでした。電源ON命令の2バイト目書き換えて輝度変わらねーなーとかやってた程度。
むしろ困ったのはpython全然触ってこなかったので、数値、文字列をバイナリに変換する方法がわからなかったことですね。
間隔調整はtime.sleep()で行っています。もっといい方法あるんですかね?
ループ前の処理は
- 命令対象決めるためにON命令
- 電球色/昼白色以外の場合や極端に暗い場合があるので色/明るさリセット
- すでにリセットされてた場合わかりづらいのでアラーム代わりに一瞬消灯
です。
で、肝心の定時実行ですけど、今回は手抜き実装なのでcrontabでこれ呼んでるだけです。はじめて使ったんですけど、便利ですねcrontab。問題もあるそうですが。自鯖があればそこに設定するのがよいと思います。私は今回用意できなかったのでVPSから呼んでます。
余談ですが、Gistにコードあげたとき自宅のIPそのまま書いていて、危うく自宅の照明をおもちゃにされるとこでした。あぶないあぶない。
おわりに
こんな感じで結構遊べました。これでまぶしくて変な時間に起きるなんてことがなくなるはず。
一応昨晩やってみて、かなりいい感じに暗くなっていってました。体感だと、夕方太陽がだんだん落ちていく感じ。手元が気づいたら見難くなっているあの感じ。PCとか使ってるとディスプレイの明るさで台無しです。
逆にすれば目覚まし調光もできますね。暗いと起きれないので、カーテン開けて寝たら5時に目が覚めて大変だったんでやろうかなぁ・・・。
こいつの許せない不満点は、ON/OFF/RESET命令がグループごとに存在することです。どう考えても命令対象はは2バイト目で実装すべきだった。
今後の展望としましては、cronだと設定がめんどうなのでandroidあたりから呼べるようにしたいなぁなんて思ってます(元気があれば)。androidネイティブかいたことないのでこの機会に勉強したいとこです。特定の時間になったら自動で命令送信するようなアプリケーション、どう書いたらいいんだろ。教えてください。