読者です 読者をやめる 読者になる 読者になる

takashiskiのブログ

覚書の殴り書き

カラーLED電球で定時になったらだんだん照明暗くしていくようにしてみた

前記事

 

一応一番やりたかったことだけ、一番楽な実装しました。

ある時間から、ある時間にかけてだんだん照明を暗くして、最後には消灯するスクリプト

自動消灯用スクリプト

 

明るさを一定時間ごとに落として、最後は消灯するだけの簡単なスクリプトです。第一引数に秒数設定できるようになっています。

 

軽い解説

命令の詳しい話は以下のページに大体書いてあります。

LimitlessLED Technical Developer Opensource API | LimitlessLED

命令三バイトの構成は

  1. 命令
  2. レベル(輝度、色変更命令のみ。それ以外は何でもよい?)
  3. 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()で行っています。もっといい方法あるんですかね?

 

ループ前の処理は

  1. 命令対象決めるためにON命令
  2. 電球色/昼白色以外の場合や極端に暗い場合があるので色/明るさリセット
  3. すでにリセットされてた場合わかりづらいのでアラーム代わりに一瞬消灯

です。

 

で、肝心の定時実行ですけど、今回は手抜き実装なのでcrontabでこれ呼んでるだけです。はじめて使ったんですけど、便利ですねcrontab。問題もあるそうですが。自鯖があればそこに設定するのがよいと思います。私は今回用意できなかったのでVPSから呼んでます。

余談ですが、Gistにコードあげたとき自宅のIPそのまま書いていて、危うく自宅の照明をおもちゃにされるとこでした。あぶないあぶない。

 

おわりに

こんな感じで結構遊べました。これでまぶしくて変な時間に起きるなんてことがなくなるはず。

一応昨晩やってみて、かなりいい感じに暗くなっていってました。体感だと、夕方太陽がだんだん落ちていく感じ。手元が気づいたら見難くなっているあの感じ。PCとか使ってるとディスプレイの明るさで台無しです。

 

逆にすれば目覚まし調光もできますね。暗いと起きれないので、カーテン開けて寝たら5時に目が覚めて大変だったんでやろうかなぁ・・・。

 

こいつの許せない不満点は、ON/OFF/RESET命令がグループごとに存在することです。どう考えても命令対象はは2バイト目で実装すべきだった。

 

今後の展望としましては、cronだと設定がめんどうなのでandroidあたりから呼べるようにしたいなぁなんて思ってます(元気があれば)。androidネイティブかいたことないのでこの機会に勉強したいとこです。特定の時間になったら自動で命令送信するようなアプリケーション、どう書いたらいいんだろ。教えてください。