X10 (工業規格)

X10 はホームオートメーションでの機器間通信に関する国際オープン工業規格である。屋内の電力配線を使って制御信号を送る（電力線搬送通信参照）。また、電波による通信も定義されている。
X10 は1975年、スコットランド Glenrothes にある Pico Electronics 社が家電製品の遠隔制御のために開発した。ホームオートメーション技術としては最も古くからあり、現在でも欧米を中心に利用されている。
より帯域幅の広い代替規格として、KNX、INSTEON、BACnet、LonWorks などが登場しているが、X10 は家庭用としては最も広く利用されている。

電力線搬送制御の概要

屋内の電力配線が X10 機器間のデジタルデータ送信に使われる。このデジタルデータは 120 kHzの搬送波で符号化され、50/60 Hzの交流波形がゼロ近辺にあるときにバースト転送される。交流波形が1回ゼロ近辺にあるときに1ビットの情報が転送される。
データの中身はアドレスと命令であり、コントローラから制御対象機器に送られる。中にはクエリをコントローラから送って、機器がそれに応答して状態を返すものもある。この場合の状態とは、電源のON/OFFのような単純なものや、照明などの明るさのレベル、温度などのセンサの読み取り値などがある。なお、アメリカでは照明として白熱電球の方が一般的で、調光器で明るさを調節するようになっていることが多い。
搬送波の周波数は比較的高いため、変圧器などを通過できない。また電圧波形がゼロ点を通過するときにデータを送るようになっているため、三相交流などではうまく同期できない。
X10 の制御信号が隣家の家電製品に伝わってしまうのは好ましくないため、コイルを使ったフィルタ回路で減衰させて X10 信号が屋外に出ないように（あるいは屋外から入ってこないように）することがある。

X10プロトコル

X10 制御プロトコルのパケットは、4ビットの "house code"、4ビットの "unit code"、4ビットの "command" で構成される。"house code" は一般に A から P の1文字で表され、"unit code" は 1 から 16 の数で表される。（正確には、unit code と command は 5ビットであり、うち 1 ビットでどちらであるかを示す。つまり、unit code は省略可能でもあり、また複数の unit code を列挙することも可能。）
システムインストール時、各制御対象機器に256種類のアドレスを割り当てる（16種類の house code × 16種類の unit code）。これにより、各機器は自分のアドレスが付いた制御パケットのみを受け付けるようになる。
メッセージは例えば「house code は A」、「unit は 3」、「電源ONせよ」という内容であれば、アドレス "A3" の機器が電源をONにする。unit code を複数並べて指定し、同じコマンドをそれら機器で同時に実行させることもできる。例えば、「house code は A」、「unit は 3」、「unit は 5」、「unit は 4」、「電源ONせよ」というメッセージを送信すれば、A3、A4、A5 の全てが同時に電源ONとなる。
もちろん、house code を1つの家庭内で使い分けることも可能であり、例えば部屋ごとに house code を設定すれば、部屋単位での操作が可能となる。
プロトコルの完全な説明はこちらにある（英文）。

電力線プロトコルの物理層

60 Hz の交流電源では、電圧波形がゼロと交差するポイント（位相が 0°の時点だが、それを含む200μ秒の期間）で 120kHz のバーストを 1ミリ秒間乗せることで '1' を表現し、直後にパルスのない期間を設ける。'0' を表す場合は逆にゼロ交差ポイントでパルスのない期間を設け、その直後にパルスを乗せる。さらに確実性を増すため、メッセージは常に2回送信される。ライン制御なども考慮すると、データ転送レートは約 20 ビット毎秒となる。このように X10 は非常に低速であるため、機器の電源ON/OFFなどの非常に簡単な制御だけを行うようになっている。
メッセージ（パケット）の開始を示すため、データフレームの前には必ず start code と呼ばれるパルス列（パルス、パルス、パルス、パルス無し、すなわち 1110）が送られる。その直後に letter code/house code (A-P) が送られ、function code が送られる。function code は unit code を指定する場合と command を指定する場合があり、最後のビットが '0' ならば unit code、'1' ならば command を表す。start code、letter code、function code の列が X10 の frame であり、データパケットの最小単位となる。
メッセージは常に2回送られ、ノイズによって受信できない場合に対処している。
アドレスからアドレス、アドレスからコマンド、コマンドからコマンドへと移る際、データフレームは 6 個のゼロ（"000000"）で明確に分離される。これにより受信側デコーダのシフトレジスタがリセットされる。

機器モジュール

制御対象に対応して、様々なモジュールが利用される。白熱電球の場合、lamp module や wall switch がある。トライアックという半導体スイッチが使われており、一般に調光機能を備えていることが多い。接続可能な電球は500ワット程度までである。
その他の制御対象（蛍光灯、HIDランプ、その他家電製品）では lamp module と同じ仕組みは使えず、appliance module が使われる。この場合、リレーを使って電源を制御する。アメリカでは、接続可能な負荷は最大でも 15 アンペア程度までである。
いずれの場合もローカル制御が可能となっていることが多い。つまり、モジュールのスイッチがOFFになっているとき、制御対象機器や電球のスイッチをONにすると自動的にモジュールの電源もONになる。この場合、手近の機器の電源を入れるのにX10コントローラのところまで行くという手間が省ける。
wall switch の場合、ローカル調光が可能なものもある。通常、ボタンを押すことで電源ON/OFFとなるが、ローカル調光が可能な場合、ボタンを押し続けることで明るさの調節ができる（サイクリックに明るさが変化する）。
中にはカスタマイズやプログラムが可能なモジュールや、コントローラとしての機能も持つ（コマンドを送信できる）ものもある。

弱点と制限

北アメリカでは単相3線式（120V/240V）が一般的だが、X10 の信号が急激に減衰してしまう場合がある。120Vの機器はどちらか一方の電圧線に接続されるが、両方の電圧線にX10信号が届くには、途中で変圧器を通らなければならない。しかし、X10信号は変圧器を通して伝播することは期待できない。特に240Vのストーブやドライヤーといった機器をON/OFFしたときに状態が変化して信号が途切れる（それらの機器がON状態のとき、2つの電圧線の間の低インピーダンスブリッジとして働く）。これに対処するには、2つの電圧線の間にコンデンサを接続してX10信号がそこを通るようにすればよい。三相交流の場合も似たような対処が必要になる。
漏電遮断器によってX10信号が減衰することもある。
また、ノイズをX10データフレームと誤認して機器の電源が不意にON/OFFされることがある。ノイズフィルタでノイズを除去できる可能性はあるが、X10に対応していないノイズフィルタではX10信号も除去されてしまう。また、コンピュータなどの電源回路ではコンデンサで2本の線が繋がっていることがあり、X10信号がそこで折り返してしまってそこから先の機器に届かないことがある。
コントローラが複数ある場合、それらが同時に送信すると衝突が発生し、受信側がデコードできなくなる。
X10プロトコルは低速である。一回のコマンド送信に4分の3秒ほどかかる。そのため、コンピュータで制御する場合などにその遅延時間を考慮する必要がある。