Rubyで家電を操作する

最近暑くなってきて何が困るかでいうと外から帰宅した時の家に熱がこもってる時ですね
エアコンをつけてもすぐ涼しくなるわけではない

そこで休日に秋葉原にいってネットワーク対応した学習リモコンをかった
ただそれは専用アプリからしか操作が出来ないものでAPIなどはなかった
でもどうしてもLINEから「エアコンつけて」としたかったのでAPIで実行できるようにする必要があった

そこでパケットをキャプチャして同じ通信で操作を試みた
パケットキャプチャはこの道で定番のWiresharkを使う

キャプチャするとUDPでどのホストにどのIP宛てに送信しているかが分かる
そして16進数の送信しているデータもとれるのでそれをコピーする

あとはデータグラムで扱う必要があるのでRubyUDPSocketを使う
プログラムは下記のような感じになる

require "socket"

host = "xx.xx.xx.xx"
port = xxxx
row_data ="ff00・・・・・・" # Wiresharkから取得した16進数ストリーム

# 2文字づつで区切ってその文字列を16進数の表現と見なして整数に変換してあげる
hex_array = row_data.scan(/.{2}/).map {|e| "0x#{e}".hex}
socket = UDPSocket.new
socket.send(hex_array.pack('C*'), 0, host, port)