(57)【要約】【課題】調停役の制御装置が管理する全体占有情報をバックアップさせなくても、新たな第１制御装置に、調停役の役割を引き継がせる。【解決手段】調停役ＧＷは、各ＧＷで起動されるサービスと当該サービスの制御対象機器とを対応付けた全体占有情報を管理する。一般ＧＷが、自身と調停役ＧＷとの通信異常を検知すると、所定の条件に基づき一般ＧＷの中から新たな調停役ＧＷを選出し、新たなＧＷは、各一般ＧＷが記録する履歴情報に基づき全体占有情報を生成する。【選択図】図３
2017090991.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークに接続された機器を制御する複数の制御装置が行う機器制御方法であって、
前記複数の制御装置は、当該複数の制御装置それぞれにおいて起動され、前記機器を制御するアプリケーションからの機器制御要求を実行する第１制御装置と、前記複数の制御装置のうち当該第１制御装置以外の制御装置であって、自身において起動されるアプリケーションからの機器制御要求を前記第１制御装置に転送する１以上の第２制御装置とを含み、
前記第１制御装置は、前記複数の制御装置の全てにおいて起動されるアプリケーションと当該アプリケーションの制御対象機器とを対応付けた全体占有情報を管理し、
前記第１制御装置は、前記第２制御装置から転送された前記機器制御要求を受信したとき、前記全体占有情報を用いて、前記機器制御要求に成功したか否かを判断し、判断結果を示す応答を前記第２制御装置に送信し、
前記１以上の第２制御装置は、前記第１制御装置に転送した前記機器制御要求、当該機器制御要求の要求元であるアプリケーション、および当該機器制御要求に対する当該第１制御装置からの前記応答とを対応付けた履歴情報を記録し、
前記１以上の第２制御装置は、自身と前記第１制御装置との通信異常の有無を判断し、
前記１以上の第２制御装置は、前記通信異常があると判断した場合、所定の条件に基づき新たな第１制御装置を選出し、
前記新たな第１制御装置は、前記１以上の第２制御装置が記録する前記履歴情報に基づき前記全体占有情報を復元する、
機器制御方法。
【請求項２】
前記１以上の第２制御装置は、当該第２制御装置から前記第１制御装置に転送した機器制御要求に対する応答が所定時間以内に得られない場合に通信異常があると判断する、
請求項１記載の機器制御方法。
【請求項３】
前記１以上の第２制御装置は、前記第１制御装置に対して定期的な通信を行い、当該定期的な通信に対する応答がない場合に通信異常があると判断する、
請求項１記載の機器制御方法。
【請求項４】
前記１以上の第２制御装置は、前記通信異常があると判断した場合、前記１以上の第２制御装置に付与され、前記１以上の第２制御装置を一意に識別するための機器識別情報に基づき、前記新たな第１制御装置を選出する、
請求項１記載の機器制御方法。
【請求項５】
前記機器識別情報は、前記１以上の第２制御装置に割り当てられたＭＡＣアドレスであり、
前記１以上の第２制御装置は、当該ＭＡＣアドレスが辞書順で最も若い第２制御装置を前記新たな第１制御装置として選出する、
請求項４記載の機器制御方法。
【請求項６】
前記１以上の第２制御装置は、前記通信異常があると判断した場合、各第２制御装置の負荷を示す情報を取得し、前記取得した負荷を示す情報に基づき、前記新たな第１制御装置を選出する、
請求項１記載の機器制御方法。
【請求項７】
前記負荷を示す情報は、前記１以上の第２制御装置が備えるプロセッサの使用率であり、
前記１以上の第２制御装置は、当該プロセッサの使用率が最も低い第２制御装置を前記新たな第１制御装置として選出する、
請求項６記載の機器制御方法。
【請求項８】
前記負荷を示す情報は、前記１以上の第２制御装置の通信負荷であり、
前記１以上の第２制御装置は、当該通信負荷が最も低い第２制御装置を前記新たな第１制御装置として選出する、
請求項６記載の機器制御方法。
【請求項９】
前記１以上の第２制御装置は、前記通信異常があると判断した場合、各第２制御装置において起動されるアプリケーションを識別する情報を取得し、前記取得した情報に基づき、前記新たな第１制御装置を選出する、
請求項１記載の機器制御方法。
【請求項１０】
前記１以上の第２制御装置は、前記アプリケーションを識別する情報と優先度とを対応付けて管理し、
前記１以上の第２制御装置は、前記優先度が最も高いアプリケーションを起動する第２制御装置を前記新たな第１制御装置として選出する、
請求項９記載の機器制御方法。
【請求項１１】
前記第２制御装置は、前記通信異常があると判断した場合、前記１以上の第２制御装置からランダムで新たな第１制御装置を選出する、
請求項１記載の機器制御方法。
【請求項１２】
前記１以上の第２制御装置は、所定の条件に基づき前記新たな第１制御装置を選出した場合、自身が記録する前記履歴情報に基づき自身において起動されるアプリケーションと当該アプリケーションの制御対象機器とを対応付けた個別占有情報を生成して前記新たな第１制御装置に送信し、
前記新たな第１制御装置は、受信した前記個別占有情報に基づき、前記全体占有情報を復元する、
請求項１記載の機器制御方法。
【請求項１３】
ネットワークに接続された機器を制御する複数の制御装置を構成する制御装置であって、
前記制御装置は、
機器を制御するためのアプリケーションを実行するアプリケーション実行部と、
自制御装置を、前記複数の制御装置それぞれにおいて起動される前記アプリケーションからの機器制御要求を実行する第１制御装置として動作させるための第１動作部と、
自制御装置を、前記複数の制御装置のうち前記第１制御装置以外の制御装置であって、自身において起動される前記アプリケーションからの機器制御要求を前記第１制御装置に転送する第２制御装置として動作させるための第２動作部と、
自制御装置が前記第２制御装置として動作している場合に、前記第１制御装置との通信異常があると判断された場合、所定の条件に基づき新たな第１制御装置を選出する選出部とを備え、
前記第２動作部は、
自制御装置において起動されるアプリケーションからの機器制御要求を前記第１制御装置に転送する転送部と、
前記第１制御装置に転送した前記機器制御要求、当該機器制御要求の要求元であるアプリケーション、および当該機器制御要求に対する前記第１制御装置からの応答とを対応付けた履歴情報を記録する記録部と、
前記履歴情報に基づき、自身において起動されるアプリケーションと当該アプリケーションの制御対象機器とを対応付けた個別占有情報を生成する第１生成部とを備え、
前記第１動作部は、
前記複数の制御装置のそれぞれから前記個別占有情報を取得する取得部と、
前記取得部が取得した前記個別占有情報に基づき前記複数の制御装置の全てにおいて起動されるアプリケーションと当該アプリケーションの制御対象機器とを対応付けた全体占有情報を生成する第２生成部と、
前記第２制御装置から転送された前記機器制御要求を受信したとき、前記全体占有情報を用いて、前記機器制御要求に成功したか否かを判断し、判断結果を前記応答として前記第２制御装置に送信する制御可否判断部と、
を備える、
制御装置。
【請求項１４】
コンピュータを、ネットワークに接続された機器を制御する複数の制御装置を構成する制御装置として機能させるためのプログラムであって、
前記コンピュータを、
機器を制御するためのアプリケーションを実行するアプリケーション実行部と、
自制御装置を、前記複数の制御装置それぞれにおいて起動される前記アプリケーションからの機器制御要求を実行する第１制御装置として動作させるための第１動作部と、
自制御装置を、前記複数の制御装置のうち前記第１制御装置以外の制御装置であって、自身において起動される前記アプリケーションからの機器制御要求を前記第１制御装置に転送する第２制御装置として動作させるための第２動作部と、
自制御装置が前記第２制御装置として動作している場合に、前記第１制御装置との通信異常があると判断された場合、所定の条件に基づき新たな第１制御装置を選出する選出部とを備え、
前記第２動作部は、
自制御装置において起動されるアプリケーションからの機器制御要求を前記第１制御装置に転送する転送部と、
前記第１制御装置に転送した前記機器制御要求、当該機器制御要求の要求元であるアプリケーション、および当該機器制御要求に対する当該第１制御装置からの応答とを対応付けた履歴情報を記録する記録部と、
前記履歴情報に基づき、自身において起動されるサービスと当該サービスの制御対象機器とを対応付けた個別占有情報を生成する第１生成部とを備え、
前記第１動作部は、
前記複数の制御装置のそれぞれから前記個別占有情報を取得する取得部と、
前記取得部が取得した前記個別占有情報に基づき前記複数の制御装置の全てにおいて起動されるアプリケーションと当該アプリケーションの制御対象機器とを対応付けた全体占有情報を復元する第２生成部と、
前記第２制御装置から転送された前記機器制御要求を受信したとき、前記全体占有情報を用いて、前記機器制御要求に成功したか否かを判断し、判断結果を前記応答として前記第２制御装置に送信する制御可否判断部と、
を備える、
制御装置として動作させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ネットワークに接続された機器を制御する複数の制御装置が行う機器制御方法および制御装置に関するものである。
【背景技術】
【０００２】
ネットワークを通じて、宅内の家電機器などを遠隔制御する技術がある。このような技術を活用することで、ＧＵＩおよび音声対話などの入力手段を通じたユーザ指示に基づき機器を制御するサービスや、特定のルール（例えば玄関が開いたら照明を点灯する等）に基づき自動的に機器の制御を行うサービス等、様々なサービスを実現することができる。
【０００３】
このような様々なサービスが同時に実行される場合、異なるサービスから同一機器に対し、互いに競合する制御要求が発行されることがある。ここで制御要求が競合するとは、同一機器が異なるサービスから同時もしくは短時間の間に制御されることを意味する。競合が発生すると、各サービスが正しく動くことができずユーザが混乱することがある。このような問題は、ネットワークに接続された機器から調停役を１台選出し、調停役を介して制御要求を機器に送信する構成とし、調停役がリクエストの実行可否を判断することで防ぐ事ができる。しかし、調停役が何らかの理由で応答できなくなった場合には一切の機器制御ができなくなってしまう。
【０００４】
特許文献１では、通信装置がマスタ装置として機能していないと判断した場合、他の通信端末から、マスタ装置として機能するために必要なマスタ情報（通信暗号化キーなど）を取得する技術が記載されている。
【０００５】
また、特許文献２では、マスタ装置が故障する前に、エラーコードなどから障害復旧情報を検索し、復旧を試みる技術が記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４８４６６２１号
【特許文献２】特開２００１−６７２８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、上記特許文献１、２の技術では更なる改善が必要がある。
【課題を解決するための手段】
【０００８】
本開示の一態様は、ネットワークに接続された機器を制御する複数の制御装置が行う機器制御方法であって、
前記複数の制御装置は、当該複数の制御装置それぞれにおいて起動され、前記機器を制御するアプリケーションからの機器制御要求を実行する第１制御装置と、前記複数の制御装置のうち当該第１制御装置以外の制御装置であって、自身において起動されるアプリケーションからの機器制御要求を前記第１制御装置に転送する１以上の第２制御装置とを含み、
前記第１制御装置は、前記複数の制御装置の全てにおいて起動されるアプリケーションと当該アプリケーションの制御対象機器とを対応付けた全体占有情報を管理し、
前記第１制御装置は、前記第２制御装置から転送された前記機器制御要求を受信したとき、前記全体占有情報を用いて、前記機器制御要求に成功したか否かを判断し、判断結果を示す応答を前記第２制御装置に送信し、
前記１以上の第２制御装置は、前記第１制御装置に転送した前記機器制御要求、当該機器制御要求の要求元であるアプリケーション、および当該機器制御要求に対する当該第１制御装置からの前記応答とを対応付けた履歴情報を記録し、
前記１以上の第２制御装置は、自身と前記第１制御装置との通信異常の有無を判断し、
前記１以上の第２制御装置は、前記通信異常があると判断した場合、所定の条件に基づき新たな第１制御装置を選出し、
前記新たな第１制御装置は、前記１以上の第２制御装置が記録する前記履歴情報に基づき前記全体占有情報を復元する。
【発明の効果】
【０００９】
本開示によれば、事前に調停役に必要な情報をバックアップすることなく、新しい調停役に必要な情報を復元することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の機器制御の構成を模式的に示す図である。
【図２】ＧＷのハードウェア構成の一例を示す図である。
【図３】ＧＷの詳細な構成の一例を示す図である。
【図４】占有情報テーブルのデータ構成の一例を示す図である。
【図５】通信履歴テーブルのデータ構成の一例を示す図である。
【図６Ａ】第１ＧＷが調停役ＧＷの場合に、第３ＧＷ上で実行されるサービスによる機器制御処理の一例を表すフローチャートである。
【図６Ｂ】第１ＧＷが調停役ＧＷの場合に、第３ＧＷ上で実行されるサービスによる機器制御処理の一例を表すフローチャートである。
【図７】機器制御要求転送処理の処理の詳細を示すフローチャートである。
【図８】制御可否判断処理の処理の詳細を示すフローチャートである。
【図９】一般ＧＷ応答処理の処理の詳細を示すフローチャートである。
【図１０】ＧＷ検出部から選出部へ返信されるＧＷ一覧リストのデータ構成の一例を示す図である。
【図１１】調停役ＧＷに通信異常が発生したことを検知する処理の一例を示すフローチャートである。
【図１２】マイグレーション処理の一例を示すフローチャートである。
【図１３】調停役ＧＷ選出処理の一例を示すフローチャートである。
【図１４】個別占有情報テーブルのデータ構成の一例を示す図である。
【図１５】マージテーブルが作成される様子を示す図である。
【図１６】占有情報生成処理の詳細を示すフローチャートである。
【図１７】マージ処理の詳細を示すフローチャートである。
【図１８】優先度テーブルのデータ構成の一例を示す図である。
【発明を実施するための形態】
【００１１】
（本開示の基礎となった知見）
ネットワークに接続された家電機器を遠隔制御するサービスや、家電機器同士を連携して動作させるサービスが検討されている。このようなサービスの数が増加すると、それぞれのサービスが互いに競合し、各サービスが正しく動くことができず、ユーザが混乱することが考えられる。
【００１２】
このような競合は、サービスが家電機器を制御する際に、その家電機器を制御可能な他のサービスが存在するか否か、存在する場合に他のサービスから家電機器に対してどのような制御を行っているかを感知することができないために発生する。そのため、家電機器を制御するサービスを実行する機器（スマートフォンやクラウドサーバ等）のうち一台を調停役として選出し、調停役が、どのサービスがどの機器を制御しているかを管理する。これにより、異なるサービスが同一機器を同時に制御することを禁止することが可能となる。
【００１３】
特許文献１では、通信装置がマスタ装置（調停役）として機能していないと判断した場合、他の通信端末から、マスタ装置として機能するために必要な通信暗号化キーなど静的なマスタ情報を取得する。これらの情報は頻繁に変更されるものではないためマスタ装置に異常が発生する前にあらかじめ必要な情報を他の通信端末へバックアップすることが可能である。
【００１４】
しかしながら、どのサービスがどの機器を制御しているかという情報はサービス利用により逐次変更されるため、予めバックアップすることは難しい。
【００１５】
また、特許文献２では、障害復旧情報を格納したデータベースを用意し、システム内部で発生するエラーコードから復旧方法を検索し、復旧を試みる方法が開示されている。
【００１６】
しかしながら、例えば電源供給が突然途絶える、ネットワークケーブルが外れるなどの突発的な異常に対しては復旧方法を検索することができないため、システムを復旧することができない。
【００１７】
本開示の目的は、調停役の制御装置が管理する全体占有情報をバックアップしなくても、新たな第１制御装置に、調停役の役割を引き継がせることができる技術を提供することである。
【００１８】
本開示の一態様による機器制御方法は、ネットワークに接続された機器を制御する複数の制御装置が行う機器制御方法であって、
前記複数の制御装置は、当該複数の制御装置それぞれにおいて起動され、前記機器を制御するアプリケーションからの機器制御要求を実行する第１制御装置と、前記複数の制御装置のうち当該第１制御装置以外の制御装置であって、自身において起動されるアプリケーションからの機器制御要求を前記第１制御装置に転送する１以上の第２制御装置とを含み、
前記第１制御装置は、前記複数の制御装置の全てにおいて起動されるアプリケーションと当該アプリケーションの制御対象機器とを対応付けた全体占有情報を管理し、
前記第１制御装置は、前記第２制御装置から転送された前記機器制御要求を受信したとき、前記全体占有情報を用いて、前記機器制御要求に成功したか否かを判断し、判断結果を示す応答を前記第２制御装置に送信し、
前記１以上の第２制御装置は、前記第１制御装置に転送した前記機器制御要求、当該機器制御要求の要求元であるアプリケーション、および当該機器制御要求に対する当該第１制御装置からの前記応答とを対応付けた履歴情報を記録し、
前記１以上の第２制御装置は、自身と前記第１制御装置との通信異常の有無を判断し、
前記１以上の第２制御装置は、前記通信異常があると判断した場合、所定の条件に基づき新たな第１制御装置を選出し、
前記新たな第１制御装置は、前記１以上の第２制御装置が記録する前記履歴情報に基づき前記全体占有情報を復元する。
【００１９】
この構成によれば、第１制御装置は、複数の制御装置の全てにおいて起動されるアプリケーションと当該アプリケーションの制御対象機器とを対応付けた全体占有情報を管理している。これにより、第１制御装置は調停役の制御装置として機能する。
【００２０】
そして、１以上の第２制御装置は、自身と第１制御装置との通信異常があると判断した場合、所定の条件に基づき新たな第１制御装置を選出し、新たな第１制御装置は、各第２制御装置が記録する履歴情報に基づき全体占有情報を復元する。
【００２１】
ここで、履歴情報は、第１制御装置に転送した機器制御要求、当該機器制御要求の要求元であるアプリケーション、および当該機器制御要求に対する当該第１制御装置からの応答とが対応付けられた通信履歴であり、応答は、機器制御要求が成功したか否かの判断結果を示す情報である。
【００２２】
したがって、調停役の第１制御装置において、通信異常といった突発的な異常が発生した場合、新たに選出された第１制御装置は、他の第２制御装置の履歴情報を用いて新たな全体構成情報を復元することができる。そのため、第２制御装置に第１制御装置が管理する全体占有情報をバックアップさせなくても、新たな第１制御装置は、調停役の役割を引き継ぐことができる。
【００２３】
上記態様において、前記１以上の第２制御装置は、当該第２制御装置から前記第１制御装置に転送した機器制御要求に対する応答が所定時間以内に得られない場合に通信異常があると判断してもよい。
【００２４】
この構成によれば、第２制御装置から第１制御装置に転送した機器制御要求に対する応答が所定時間以内に得られない場合に通信異常があると判断される。そのため、通信異常を検知するために、別途、パケットを送信する必要がなく、通信量を削減することができる。
【００２５】
上記態様において、前記１以上の第２制御装置は、前記第１制御装置に対して定期的な通信を行い、当該定期的な通信に対する応答がない場合に通信異常があると判断してもよい。
【００２６】
この構成によれば、第１制御装置と第２制御装置との間で定期的な通信が行われ、当該定期的な通信に対する応答がない場合に通信異常があると判断される。そのため、本態様は、アプリケーションの機器制御要求がない場合でも第１制御装置の通信異常を発見することが可能となる。
【００２７】
上記態様において、前記１以上の第２制御装置は、前記通信異常があると判断した場合、前記１以上の第２制御装置に付与され、前記１以上の第２制御装置を一意に識別するための機器識別情報に基づき、前記新たな第１制御装置を選出してもよい。
【００２８】
この構成によれば、各第２制御装置を一意的に識別するために付与された機器識別情報を用いて新たな第１制御装置が選出される。そのため、各第２制御装置に予め付与された既存のリソース情報を用いて新たな第１制御装置を選出でき、新たな第１制御装置の選出が容易になる。
【００２９】
上記態様において、前記機器識別情報は、前記１以上の第２制御装置に割り当てられたＭＡＣアドレスであり、
前記１以上の第２制御装置は、当該ＭＡＣアドレスが辞書順で最も若い第２制御装置を前記新たな第１制御装置として選出してもよい。
【００３０】
この構成によれば、複数の第２制御装置のうち、ＭＡＣアドレスが辞書順で最も若い第２制御装置が新たな第１制御装置として選出される。そのため、各第２制御装置に予め付与された既存のリソース情報を用いて新たな第１制御装置を選出でき、新たな第１制御装置の選出が容易になる。
【００３１】
上記態様において、前記１以上の第２制御装置は、前記通信異常があると判断した場合、各第２制御装置の負荷を示す情報を取得し、前記取得した負荷を示す情報に基づき、新たな第１制御装置を選出してもよい。
【００３２】
この構成によれば、第１制御装置として機能する上で適切な負荷を持つ第２制御装置を第１制御装置として選出できる。
【００３３】
上記態様において、前記負荷を示す情報は、前記１以上の第２制御装置が備えるプロセッサの使用率であり、
前記１以上の第２制御装置は、当該プロセッサの使用率が最も低い第２制御装置を前記新たな第１制御装置として選出してもよい。
【００３４】
この構成によれば、プロセッサの使用率が最も低い第２制御装置が新たな第１制御装置として選出されるので、新たに選出された第１制御装置に過大な負荷がかかることを抑制できる。
【００３５】
上記態様において、前記負荷を示す情報は、前記１以上の第２制御装置の通信負荷であり、
前記１以上の第２制御装置は、当該通信負荷が最も低い第２制御装置を新たな第１制御装置として選出してもよい。
【００３６】
この構成によれば、通信負荷が最も低い第２制御装置が新たな第１制御装置として選出されるので、新たに選出された第１制御装置が直ぐに通信異常になることが抑制できる。
【００３７】
上記態様において、前記１以上の第２制御装置は、前記通信異常があると判断した場合、各第２制御装置において起動されるアプリケーションを識別する情報を取得し、前記取得した情報に基づき、新たな第１制御装置を選出してもよい。
【００３８】
この構成によれば、各第２制御装置で起動されるアプリケーションを識別する情報に基づいて新たな第１制御装置が選出されるので、既存の情報リソースを用いて容易に新たな第１制御装置を選出できる。
【００３９】
上記態様において、前記１以上の第２制御装置は、前記アプリケーションを識別する情報と優先度とを対応付けて管理し、
前記１以上の第２制御装置は、前記優先度が最も高いアプリケーションを起動する第２制御装置を前記新たな第１制御装置として選出してもよい。
【００４０】
この構成によれば、各第２制御装置に対して予め設定された優先度に基づいて新たな第１制御装置が選出されるので、新たな第１制御装置を少ない処理ステップで選出できる。
【００４１】
上記態様において、前記第２制御装置は、前記通信異常があると判断した場合、前記１以上の第２制御装置からランダムで新たな第１制御装置を選出してもよい。
【００４２】
この構成によれば、１以上の第２制御装置の中からランダムで新たな第１制御装置が選出されるので、特定の第２制御装置が第１制御装置として選出される事態を回避できる。
【００４３】
上記態様において、前記１以上の第２制御装置は、所定の条件に基づき前記新たな第１制御装置を選出した場合、自身が記録する前記履歴情報に基づき自身において起動されるアプリケーションと当該アプリケーションの制御対象機器とを対応付けた個別占有情報を生成して前記新たな第１制御装置に送信し、
前記新たな第１制御装置は、受信した前記個別占有情報に基づき、前記全体占有情報を復元してもよい。
【００４４】
この構成によれば、各第２制御装置は、自身が記録する履歴情報に基づき自身において起動されるアプリケーションと当該アプリケーションの制御対象機器とを対応付けた個別占有情報を生成し、新たな第１制御装置に送信する。一方、新たな第１制御装置は送信された個別占有情報を用いて全体占有情報を生成する。したがって、新たな第１制御装置は、現在、起動中のアプリケーションがどの機器に対応しているかを示す全体占有情報を容易に復元できる。
【００４５】
なお、以下で説明する実施の形態は、いずれも本発明の一具体例を示すものである。以下の実施の形態で示される数値、形状、構成要素、ステップ、ステップの順序などは、一例であり、本発明を限定する主旨ではない。また、以下の実施の形態における構成要素のうち、最上位概念を示す独立請求項に記載されていない構成要素については、任意の構成要素として説明される。また全ての実施の形態において、各々の内容を組み合わせることもできる。
【００４６】
（全体構成）
まず、本発明の実施の形態における機器制御の全体構成について説明する。図１は本発明の機器制御の構成を模式的に示す図である。
【００４７】
第１機器１１２、第２機器１１３、及び第３機器１１４は宅内に設置されたエアコン、照明機器、冷蔵庫、電子レンジ、クッキングヒータ、電気錠、電動シャッター、人感センサ、温度センサ、湿度センサ、或いは空気質センサ等の電子機器である。第１ＧＷ（ゲートウェイ）１０４、第２ＧＷ１０５、第３ＧＷ１０６は宅内機器を制御する制御装置である。ここで、第１機器１１２、第２機器１１３、第３機器１１４を総称する場合、機器１１ｘと記述する。また、第１ＧＷ１０４、第２ＧＷ１０５、第３ＧＷ１０６を総称する場合、ＧＷ１０ｘと記述する。
【００４８】
ここで言う制御とは、例えば電源のＯＮ／ＯＦＦ、エアコンの室内温度の設定や、照明機器の明るさの変更などである。宅内機器の制御は、例えばＥＣＨＯＮＥＴ  Ｌｉｔｅ等の接続方式に従い実現できる。ＧＷ１０ｘはその役割に応じ調停役ＧＷ（第１制御装置の一例）と一般ＧＷ（第２制御装置の一例）に分けられる。調停役ＧＷは、機器１１ｘを制御する全てのサービスについて、どのサービスがどの機器１１ｘを制御しているかを把握し、機器制御の可否を判断するＧＷである。一般ＧＷは、調停役ＧＷ以外のＧＷである。第１サービス１０７、第２サービス１０８、第３サービス１０９、及び第４サービス１１０は、ＧＷ１０ｘ上で実行され、機器１１ｘを制御するためのアプリケーションである。ここで、ＧＷ１０ｘは、例えば、単体（スマートフォンやルーター）で構成されてもよいし、機器１１ｘに内蔵されていてもよい。第１〜第４サービス１０７〜１１０を総称する場合、サービス１０ｓと記述する。
【００４９】
ＬＡＮ１１１は、宅内に設置されたローカルエリアネットワークで構成され、第１ＧＷ１０４、第２ＧＷ１０５、第３ＧＷ１０６、第１機器１１２、第２機器１１３、第３機器１１４及び操作端末１０１を相互に接続する。ＬＡＮ１１１は有線、無線を問わない。
【００５０】
以降では第１ＧＷ１０４が第１サービス１０７を実行し、第２ＧＷ１０５が第２サービス１０８を実行し、第３ＧＷ１０６が第３サービス１０９と第４サービス１１０とを実行するものとして説明する。このように、１つのＧＷ１０ｘは２つのサービス１０ｓを同時に実行することもありえ得る。また、第１サービス１０７は、機器１１ｘを利用しておらず、第２サービス１０８は第１、第２機器１１２，１１３のそれぞれを利用し、第３サービス１０９は機器１１ｘを利用しておらず、第４サービス１１０は第３機器１１４を利用するものとする。このように、１つのサービス１０ｓは、複数の機器１１ｘを利用することもあるし、機器１１ｘを利用しないこともある。
【００５１】
操作端末１０１は、好適にはスマートフォン、タブレット、或いはパソコン等の端末である。操作端末１０１はユーザからの操作を受け付ける入力部１０２と、ユーザに機器状態等の情報を提示する表示部１０３とを備える。操作端末１０１はＬＡＮ１１１に接続され、各ＧＷ１０ｘのサービス１０ｓを介して、機器１１ｘを制御したり、機器１１ｘから情報を取得したりすることができる。
【００５２】
図２は、ＧＷ１０ｘのハードウェア構成の一例を示す図である。ＧＷ１０ｘはプロセッサ２０１、メモリ２０２、記録部２０３、入出力部２０４、及び通信部２０５を備える。プロセッサ２０１はＧＷ１０ｘの内部処理を実行するＣＰＵなどの演算装置である。メモリ２０２は、ＲＡＭ等の揮発性記憶装置で構成され、プロセッサ２０１が利用中のデータや、プログラムを保存する装置である。記録部２０３はＨＤＤ、ＳＳＤ、Ｆｌａｓｈ等の不揮発性記憶装置で構成され、ＧＷ１０ｘの電源が遮断されても保持が必要なデータを保存する装置である。通信部２０５は有線ＬＡＮインターフェース、或いはＷｉＦｉインターフェース等の通信装置で構成され、ＬＡＮ１１１を介し、他のＧＷ１０ｘ、機器１１ｘ、及び操作端末１０１と通信する。
【００５３】
次に本開示の具体的な実施の形態を説明する。
【００５４】
（実施の形態）
図３は、ＧＷ１０ｘの詳細な構成の一例を示す図である。ＧＷ１０ｘはサービス１０ｓ、サービス実行部３０１、調停役モジュール３０２（第１動作部の一例）、一般モジュール３０３（第２動作部の一例）、選出部３０４、ＧＷ検出部３０５、及び通信部３０６を備える。
【００５５】
ＧＷ１０ｘはその役割に応じ調停役ＧＷと一般ＧＷとに分けられる。調停役ＧＷは、機器１１ｘを制御する全てのサービス１０ｓについて、どのサービス１０ｓがどの機器１１ｘを制御しているかを把握し、機器制御の可否を判断するＧＷである。一般ＧＷは調停役ＧＷ以外のＧＷである。
【００５６】
サービス１０ｓは、例えばＨＴＭＬ５などのプログラミング言語により構成されたソフトウェアである。サービス１０ｓは、操作端末１０１の入力部１０２から、ユーザの操作に対応した機器制御要求をサービス実行部３０１に出力し、制御結果を表示部１０３に表示する。これにより、制御結果がユーザにフィードバックされる。
【００５７】
サービス実行部３０１は、例えばＨＴＭＬ５ブラウザ等のサービス１０ｓを解釈及び実行する機能を提供するソフトウェアで構成される。
【００５８】
調停役モジュール３０２は、ＧＷ１０ｘが調停役ＧＷとして機能する場合に実行されるモジュールであり、占有情報テーブル３０２１（全体占有情報の一例）、制御可否判断部３０２２、機器制御部３０２３、占有情報マージ部３０２４（第２生成部の一例）、及び占有情報受信部３０２５（取得部の一例）を備える。
【００５９】
占有情報テーブル３０２１は、どのサービス１０ｓがどの機器１１ｘを制御しているかを管理するデータベースである。図４は、占有情報テーブル３０２１のデータ構成の一例を示す図である。列４０１は、機器１１ｘを制御しているサービス１０ｓである占有中サービスの識別子を記憶する。列４０２は、機器１１ｘの識別子を記憶する。占有情報テーブル３０２１の構築及び更新の詳細な方法は後述する。
【００６０】
図３を参照して、制御可否判断部３０２２は、占有情報テーブル３０２１に基づき機器制御部３０２３による機器１１ｘの制御の実行可否を判定する。実行可否の判断の詳細な手順は後述する。
【００６１】
機器制御部３０２３は、一般ＧＷより転送された機器制御要求または調停役ＧＷのサービス実行部３０１から出力された機器制御要求を通信部３０６を用いて機器１１ｘに送信し、機器１１ｘを制御する。
【００６２】
占有情報マージ部３０２４は、調停役ＧＷがダウンして自身が属するＧＷ１０ｘが調停役ＧＷとして新たに選出された場合、他のＧＷ１０ｘで生成された個別占有情報テーブルを用いて占有情報テーブル３０２１を復元する。占有情報テーブル３０２１の復元の詳細な方法は後述する。
【００６３】
占有情報受信部３０２５は、他の一般ＧＷにより生成された、占有中のサービス１０ｓと機器１１ｘとが対応付けられた個別占有情報テーブル（図１４参照）を通信部３０６を用いて受信し、占有情報マージ部３０２４に出力する。
【００６４】
一般モジュール３０３は、ＧＷ１０ｘが一般ＧＷとして機能する場合に実行されるモジュールであり、通信履歴テーブル３０３１（履歴情報の一例）、転送部３０３２、個別占有情報生成部３０３３、及び調停役監視部３０３４を備える。
【００６５】
通信履歴テーブル３０３１は、一般ＧＷと調停役ＧＷとの通信履歴（機器制御要求及び機器制御要求に対する応答（制御結果））を保存するテーブルである。図５は、通信履歴テーブル３０３１のデータ構成の一例を示す図である。通信履歴テーブル３０３１は、ＩＤ５０１、種類５０２、要求元５０３、要求先５０４、及び内容５０５を対応付けて記憶する。種類５０２は「要求」と「応答」との２つのパターンある。
【００６６】
ＩＤ５０１は機器制御要求とその応答とを対応づけるための識別子である。本実施の形態では、一般ＧＷから調停役ＧＷへの機器制御要求に対しては、通信が行われた順に連番でＩＤ５０１の番号が付与される。調停役ＧＷからの応答に対しては対応する機器制御要求と同じ番号がＩＤ５０１に付与される。種類５０２は、通信の種別（「要求」または「応答」）を示す。「要求」は機器制御要求の通信が行われたことを示す。「応答」は機器制御要求に対する応答の通信が行われたことを示す。
【００６７】
要求元５０３は、機器制御要求の発行元のサービス１０ｓを示す。要求先５０４は、サービス１０ｓによって制御される制御対象機器を示す。内容５０５は、通信内容を示す。種類５０２が「要求」の場合、内容５０５は「制御要求」または「制御終了」のいずれかの値を取る。「制御要求」は制御の開始を示し、「制御終了」は制御の終了を示す。
【００６８】
種類５０２が「応答」の場合、内容５０５は「成功」、「失敗」、及び「エラー」のいずれかの値を取る。通信履歴テーブル３０３１の構築及び更新の詳細は後述する。
【００６９】
図５の例では、第３ＧＷ１０６の通信履歴テーブルが示されている。例えば、行５１１，５１２に示す通信は、第３サービス１０９が第１機器１１２に送信した機器制御要求であり、正当な機器制御要求であるので、成功している。
【００７０】
例えば、行５１３，５１４に示す通信は、第４サービス１１０が第３機器１１４に送信した機器制御要求であり、正当な機器制御要求であるが、通信異常等の事象が発生したので失敗している。
【００７１】
例えば、行５１５，５１６に示す通信は、第４サービス１１０が第３機器１１４に送信した機器制御要求であり、正当な機器制御要求なので、成功している。
【００７２】
例えば、行５１９，５２０に示す通信は、第３サービス１０９が第１機器１１２に送信した機器制御要求であり正当な機器制御要求であるが、何らかの理由でエラーが発生したので、内容５０５が「エラー」となっている。
【００７３】
図３を参照して、転送部３０３２は、サービス実行部３０１から出力された機器制御要求を通信部３０６を用いて調停役ＧＷに送信する。
【００７４】
個別占有情報生成部３０３３は、調停役監視部３０３４により調停役ＧＷに通信異常が発生したと判断された場合に、通信履歴テーブル３０３１を参照し、自ＧＷ１０ｘが占有中のサービス１０ｓと機器１１ｘとが対応付けられた個別占有情報（図１４参照）を生成する。
【００７５】
調停役監視部３０３４は、調停役ＧＷに通信異常が発生したか否かを判断する。選出部３０４はシステム起動時、或いは、調停役監視部３０３４により調停役ＧＷに通信異常が発生したと判断された場合、新しい調停役ＧＷを選出するための調停役ＧＷ選出処理を行う。調停役ＧＷ選出処理の詳細な動作は後述する。
【００７６】
ＧＷ検出部３０５は、ＬＡＮ１１１に接続された他のＧＷ１０ｘのＭＡＣアドレスやＩＰアドレス等の通信情報を通信部３０６を用いて収集する。ＧＷ検出部３０５の詳細な動作は後述する。
【００７７】
通信部３０６は、自ＧＷ１０ｘと、他のＧＷ１０ｘ、機器１１ｘ、及び操作端末１０１とを通信させる。
【００７８】
なお、図３において、サービス１０ｓ、サービス実行部３０１はプロセッサ２０１で実行されるプログラムである。また、制御可否判断部３０２２、占有情報マージ部３０２４、機器制御部３０２３、及び占有情報受信部３０２５は、例えば、プロセッサ２０１がプログラムを実行することで実現される。また、占有情報テーブル３０２１は記録部２０３で記録される。また、通信履歴テーブル３０３１は、記録部２０３で記録されている。また、転送部３０３２、個別占有情報生成部３０３３、及び調停役監視部３０３４は、プロセッサ２０１がプログラムを実行することで実現される。また、選出部３０４、及びＧＷ検出部３０５は、プロセッサ２０１がプログラムを実行することで実現される。通信部３０６は、通信部２０５（図２）で構成される。
【００７９】
図６Ａ〜図６Ｂは、第１ＧＷ１０４が調停役ＧＷの場合に、第３ＧＷ１０６上で実行されるサービスによる機器制御処理の一例を表すフローチャートである。
【００８０】
まず、ステップＳ６０１では、第３ＧＷ１０６はサービス１０ｓを起動する。ここでは、第４サービス１１０が起動される。サービスの起動はサービス実行部３０１が、サービス１１０のプログラムを読み込み、実行することで行われる。
【００８１】
ステップＳ６０２では、ユーザは、操作端末１０１の入力部１０２を用いて、第２サービス１０８へ機器１１ｘを制御するための操作を入力する。ここでは、第３機器１１４が制御対象とされる。
【００８２】
ステップＳ６０３では、第３ＧＷ１０６は操作に対応する機器制御要求を調停役ＧＷ（第１ＧＷ１０４）へ転送する機器制御要求転送処理を実行する。
【００８３】
図７は、機器制御要求転送処理の処理の詳細を示すフローチャートである。ステップＳ７０１では、第４サービス１１０がサービス実行部３０１に機器制御要求を出力する。機器制御要求には、制御対象機器の識別子、制御内容、及びサービスの識別子が含まれる。
【００８４】
ステップＳ７０２では、サービス実行部３０１は、機器制御要求を転送部３０３２に出力する。ステップＳ７０３では、転送部３０３２は、機器制御要求を通信履歴として通信履歴テーブル３０３１へ追加する。例えば、機器制御要求が、第４サービス１１０による第３機器１１４への制御要求であったとすると、この機器制御要求には、第３機器１１４の識別子、「制御要求」を示す制御内容、及び第４サービス１１０の識別子が含まれる。よって、図５の行５１５に示すような通信履歴が通信履歴テーブル３０３１に追加される。
【００８５】
ステップＳ７０４では、転送部３０３２は、機器制御要求を、通信部３０６を用いて調停役ＧＷ（第１ＧＷ１０４）に送信する。
【００８６】
図６Ａに参照を戻す。ステップＳ６０４では、調停役ＧＷ（第１ＧＷ１０４）の制御可否判断部３０２２は、制御可否判断処理を行う。図８は、制御可否判断処理の処理の詳細を示すフローチャートである。
【００８７】
ステップＳ８０１では、制御可否判断部３０２２は、転送部３０３２から送信された機器制御要求に含まれる制御対象機器を変数Ｄ、制御要求元のサービスの識別子を変数Ｓとして初期化する。
【００８８】
ステップＳ８０２では、制御可否判断部３０２２は、占有情報テーブル３０２１から列４０２が記憶する情報が変数Ｄと等しい行を検索する。ステップＳ８０３では、制御可否判断部３０２２は、該当する行が占有情報テーブル３０２１に存在するか否かで処理を分岐する。
【００８９】
ステップＳ８０３において該当する行が存在しなかった場合（Ｓ８０３でＮＯ）、制御可否判断部３０２２は、変数Ｄで表される機器１１ｘを占有しているサービスはないので、制御可能と判断し、占有情報テーブル３０２１に列４０２=Ｄ，列４０１=Ｓの行を追加（ステップＳ８０５）する。そして、制御可否判断部３０２２は、「制御可」を戻り値として返す（ステップＳ８０６）。
【００９０】
ステップＳ８０３において該当する行が存在する場合（Ｓ８０３でＹＥＳ）、その行の列４０１が変数Ｓを含む否かを判断する（ステップＳ８０４）。含むと判断した場合（Ｓ８０４でＹＥＳ）、制御可否判断部３０２２は、変数Ｄで表される機器１１ｘを占有しているサービスからの機器制御要求のため、「制御可」を戻り値として返す（ステップＳ８０７）。例えば、第４サービス１１０により第３機器１１４を利用する機器制御要求が送信されたとすると、図４に示す占有情報テーブル３０２１には、第３機器１１４を含む行４１２が存在し、その行４１２の列４０１には第４サービスが記憶されている。よって、Ｓ８０３でＹＥＳ、且つＳ８０４でＹＥＳと判断され、「制御可」と判断される。
【００９１】
ステップＳ８０４において列４０１が変数Ｓを含まない場合（Ｓ８０４でＮＯ）、制御可否判断部３０２２は、変数Ｄで表される機器１１ｘを占有しているサービスとは異なるサービスからの機器制御要求のため、「制御不可」を戻り値として返す（ステップＳ８０７）。
【００９２】
例えば、第４サービス１１０により第２機器１１３を利用する機器制御要求が送信されたとすると、図４に示す占有情報テーブル３０２１には、第２機器１１３を含む行４１１は存在するが、その行４１１の列４０１には第４サービスが記憶されていない。よって、Ｓ８０３でＹＥＳ、且つＳ８０４でＮＯと判断され、「制御不可」と判断される。
【００９３】
図６Ａに参照を戻す。ステップＳ６０５では、第１ＧＷ１０４の機器制御部３０２３は、ステップＳ６０４の判断結果に基づき分岐を行う。ステップＳ６０５において「制御可」と判断された場合（ステップＳ６０５でＹＥＳ）、ステップＳ６０６では、機器制御部３０２３は制御対象機器の識別子をＩＰアドレス等のアドレスに変換し、且つ制御対象機器の制御内容を制御コマンドに変換する等の処理を実行する。そして、機器制御部３０２３は、制御対象機器に制御コマンドを、通信部３０６を用いて送信する。ここでは、第３機器１１４に制御コマンドが送信される。
【００９４】
第３機器１１４は、送信された制御コマンドに対応する制御を実行し（ステップＳ６０７）、制御結果を示す応答を調停役ＧＷ（第１ＧＷ１０４）へ送信する（ステップＳ６０８）。調停役ＧＷ（第１ＧＷ１０４）の機器制御部３０２３は、ステップＳ６０５で、「制御可」と判断された場合には（ステップＳ６０５でＹＥＳ）、機器制御要求に成功したことを示す応答を生成する（ステップＳ６０９）。
【００９５】
ステップＳ６０５で、「制御不可」と判断された場合には（Ｓ６０５でＮＯ）、調停役ＧＷ（第１ＧＷ１０４）の機器制御部３０２３は、機器制御要求に失敗したことを表す応答を生成する（ステップＳ６１０）。
【００９６】
ステップＳ６１１では、調停役ＧＷ（第１ＧＷ１０４）の機器制御部３０２３は、ステップＳ６０９又はステップＳ６１０で生成された応答を、機器制御要求の要求元の第３ＧＷ１０６へ送信する。
【００９７】
ステップＳ６１２では、第３ＧＷ１０６は、調停役ＧＷから送信された応答を受信し、一般ＧＷ応答処理を実行し、応答が示す制御結果を操作端末１０１に送信する。図９は、一般ＧＷ応答処理の処理の詳細を示すフローチャートである。
【００９８】
ステップＳ９０１では、第３ＧＷ１０６の転送部３０３２は、通信部３０６を用いて、調停役ＧＷ（第１ＧＷ１０４）の機器制御部３０２３からの応答を受信する。ステップＳ９０２では、転送部３０３２は、受信した応答に基づいて通信履歴テーブル３０３１を更新する。この時、転送部３０３２は、図５に示す通信履歴テーブル３０３１において、ＩＤ５０２に「応答」と書き込み、内容５０５に受信した応答が示す内容を書き込む。例えば、応答が機器制御要求に成功したことを示すのであれば、転送部３０３２は内容５０５に「成功」と書き込み、応答が機器制御要求に失敗したことを示すのであれば、転送部３０３２は内容５０５に「失敗」と書き込む。
【００９９】
ステップＳ９０３では、転送部３０３２は、サービス実行部３０１へ応答が示す制御結果を出力する。
【０１００】
ステップＳ９０４では、サービス実行部３０１は、出力された制御結果を、操作端末１０１に送信する。
【０１０１】
図６Ｂに参照を戻す。ステップＳ６１３では、操作端末１０１は、制御結果を受信し、機器制御要求が成功または失敗であるかを示すメッセージを表示部１０３に表示し、機器制御要求に対する制御結果をユーザにフィードバックする。
【０１０２】
図１１は、調停役ＧＷに通信異常が発生したことを検知する処理の一例を示すフローチャートである。この処理は、一般ＧＷ（ここでは、第２ＧＷ１０５及び第３ＧＷ１０６）のそれぞれにおいて、例えば、一定の時間間隔で実行される。ステップＳ１１０１では、一般ＧＷの調停役監視部３０３４は、調停役ＧＷに死活確認メッセージを送信する。ここで、死活確認メッセージとしては、例えば、ＧＷ１０ｘがＥＣＨＯＮＥＴ  Ｌｉｔｅの通信規格に準拠するメッセージを送信して機器１１ｘを制御するのであれば、ＥＣＨＯＮＥＴ  Ｌｉｔｅの任意のプロパティ（例えば、空調機器の設定温度）の読み出すメッセージなどが採用できる。
【０１０３】
ステップＳ１１０２では、調停役監視部３０３４は、死活確認メッセージを送信してから所定時間内に調停役ＧＷからの応答を受信できなかった場合（Ｓ１１０２でＮＯ）、調停役ＧＷに異常が発生したと判断し、そのことを選出部３０４及び個別占有情報生成部３０３３に通知する。この通知を受けた選出部３０４及び個別占有情報生成部３０３３は、新たな調停役ＧＷを選出するマイグレーション処理を実行する。
【０１０４】
ここで、所定時間としては、調停役ＧＷと一般ＧＷとにおいて想定されるメッセージの送信時間よりも大幅に大きい時間が採用できる。一方、死活メッセージを送信してから所定時間以内に調停役ＧＷからの応答を受信できた場合（Ｓ１１０２でＹＥＳ）、調停役監視部３０３４は、調停役ＧＷは正常と判断し、処理を終了する。
【０１０５】
図１２は、マイグレーション処理の一例を示すフローチャートである。調停役ＧＷがダウンすると、全ての一般ＧＷはそのことを個別に検出するので、図１２に示すマイグレーション処理は、全ての一般ＧＷ（ここでは、第２ＧＷ１０５及び第３ＧＷ１０６）のそれぞれで実行される。
【０１０６】
ステップＳ１２０１では、一般ＧＷの選出部３０４は、ＬＡＮ１１１に接続された一般ＧＷの中から新たな調停役ＧＷを選出する調停役ＧＷ選出処理を行う。図１３は、調停役ＧＷ選出処理の一例を示すフローチャートである。
【０１０７】
ステップＳ１３０１では、選出部３０４は、ＧＷ検出部３０５にＬＡＮ１１１に接続されたＧＷ１０ｘのＧＷ一覧リストの取得要求をする。
【０１０８】
ＧＷ検出部３０５は、ステップＳ１３０２〜ステップＳ１３０７でＧＷ一覧リストを取得する処理を行う。ステップＳ１３０２では、ＧＷ検出部３０５は、ＧＷ一覧リストに自身のＭＡＣアドレスを書き込んで、ＧＷ一覧リストを初期化する。ステップＳ１３０３では、ＧＷ検出部３０５は各ＧＷ１０ｘのＭＡＣアドレス及びＩＰアドレス等の通信情報の取得要求を、通信部３０６を用いて同報送信する。次に、ＧＷ検出部３０５は、所定時間が経過するまで、ステップＳ１３０５〜ステップＳ１３０６を繰り返す（ステップＳ１３０４，Ｓ１３０７）。
【０１０９】
ステップＳ１３０５では、ＧＷ検出部３０５は、通信部３０６を用いて他のＧＷ１０ｘからの応答を受信する。ステップＳ１３０６では、応答から送信元のＧＷ１０ｘのＩＰアドレスとＭＡＣアドレスとを抽出し、ＧＷ一覧リストに追加する。ステップＳ１３０８では、ＧＷ検出部３０５は、作成したＧＷ一覧リストを戻り値として、選出部３０４に返信する。
【０１１０】
ステップＳ１３０９では、選出部３０４はＧＷ一覧リストからＭＡＣアドレスが辞書順で一番若いＧＷ１０ｘを抽出し（ステップＳ１３０９）、抽出したＧＷ１０ｘを調停役ＧＷとして選出する（ステップＳ１３１０）。
【０１１１】
図１０は、ＧＷ検出部３０５から選出部３０４へ返信されるＧＷ一覧リストのデータ構成の一例を示す図である。ＧＷ一覧リストは、ＩＰアドレスとＭＡＣアドレスとを対応付けて記憶する。
【０１１２】
図１０の例では、行１１１１のＭＡＣアドレスが辞書順で一番若いため、選出部３０４は、行１１１１のＧＷを調停役ＧＷとして選出する。ここでは行１１１１のＧＷ１０ｘは第３ＧＷ１０６であったので、第３ＧＷ１０６が選出される。なお、行１１１２のＧＷ１０ｘは第２ＧＷ１０５である。
【０１１３】
図１２に参照を戻す。ステップＳ１２０３では、第２ＧＷ１０５の個別占有情報生成部３０３３は通信履歴テーブル３０３１の情報を用いて、自ＧＷが実行しているサービスと占有中の機器とが対応付けられた個別占有情報を生成する占有情報生成処理を行う。ステップＳ１２０４でも、ステップＳ１２０３と同様、第３ＧＷ１０５の個別占有情報生成部３０３３は占有情報生成処理を行う。
【０１１４】
図１６は、占有情報生成処理の詳細を示すフローチャートである。ステップＳ１７０１では、個別占有情報生成部３０３３は、個別占有情報テーブルを情報が書き込まれていない空白のテーブルに初期化する。次に、個別占有情報生成部３０３３は、通信履歴テーブル（図５参照）の各行に対し、ステップＳ１７０２〜ステップＳ１７０８を繰り返し実行する。ステップＳ１７０２〜ステップＳ１７０８の処理では、変数ｉは、処理のループ数を示すインデックスであり、１から通信履歴テーブルの行数の半分の値になるまで、１ずつ増大される。
【０１１５】
Ｓ１７０３では、個別占有情報生成部３０３３は、通信履歴テーブル３０３１のＩＤ５０１が変数ｉと等しい２行の通信履歴を読み出す。ステップＳ１７０４では、個別占有情報生成部３０３３は、ステップＳ１７０３で読み出した２行の通信履歴のうち、種類５０２が応答である１行を選出し、選出した１行の内容５０５が「成功」であるか否かを判断する。図５の例では、まず、行５１１，５１２の２行の通信履歴が読み出され、内容５０５が「成功」の行は行５１２なので、行５１２の通信履歴が読み出される。
【０１１６】
内容５０５が「成功」ではない場合（ステップＳ１７０４でＮＯ）、処理はステップＳ１７０２に戻り、個別占有情報生成部３０３３は、変数ｉを１増加させ、通信履歴テーブルから次の２行の通信履歴を読み出す（ステップＳ１７０３）。
【０１１７】
種類５０２が「応答」である行の内容５０５が「成功」の場合（ステップＳ１７０４でＹＥＳ）、個別占有情報生成部３０３３は、ステップＳ１７０３で読み出した２行の通信履歴の中に、種類５０２が「要求」である行を選出し、内容５０５が「制御要求」であるか否かを判断する（ステップＳ１７０５）。
【０１１８】
内容５０５が「制御要求」の場合（ステップＳ１７０５でＹＥＳ）、個別占有情報生成部３０３３は、個別占有情報テーブルに機器制御要求の発行元のサービスと制御対象機器とを追加する（ステップＳ１７０６）。
【０１１９】
上述の行５１１，５１２の例では、種類５０２が「応答」の行５１２は内容５０５が「成功」なので、Ｓ１７０４でＹＥＳと判断される。そして、種類５０２が「要求」の行５１１は内容５０５が「制御要求」なので、ステップＳ１７０５でＹＥＳと判断される。そして、行５１１において、要求元５０３に記憶された「第３サービス」と、要求先５０４に記憶された「第１機器」とが対応付けられた行が個別占有情報テーブルに追加される。
【０１２０】
一方、内容５０５が「制御要求」ではない場合（ステップＳ１７０５でＮＯ）、個別占有情報生成部３０３３は、個別占有情報テーブルから機器制御要求の発行元のサービスと制御対象機器とを削除する（ステップＳ１７０６）。
【０１２１】
例えば、行５１７，５１８の例では、種類５０２が「応答」である行５１８は内容５０５が「成功」なので、ステップＳ１７０４でＹＥＳと判断される。しかし、種類５０２が「要求」である行５１７は内容５０５が「制御終了」なので、ステップＳ１７０５でＮＯと判断され、行５１２の要求元５０３及び要求先５０４が示す「第３サービス」及び「第１機器」が対応付けられた行が、個別占有情報テーブルから削除される（ステップＳ１７０６）。これにより、「第１機器」を利用した「第３サービス」の終了が、個別占有情報テーブルに反映され、「第１機器」を利用した「第３サービス」が終了しているにも拘わらず、個別占有情報テーブルに両者が対応付けられた行が残存することが防止される。
【０１２２】
図１４は、個別占有情報テーブルのデータ構成の一例を示す図である。個別占有情報テーブルは占有情報テーブル３０２１（図４参照）と同様、機器と占有中サービスとを対応付けて記憶するテーブルであるが、列１５０２に記憶されるサービスは全て自ＧＷ１０ｘ上で実行されているサービスに限定されている点が占有情報テーブル３０２１と異なる。図１４では、第２ＧＷ１０５の個別占有情報テーブルが示されている。上述したように、第２ＧＷは第２サービス１０８を実行しており、第２サービス１０８は第１機器１１２及び第２機器１１３を利用するサービスである。よって、図１４では、個別占有情報テーブルは、「第１機器」及び「第２サービス」が対応付けられた行１５１１と、「第２機器」及び「第２サービス」が対応付けられた行１５１２とを含む。
【０１２３】
図１２に参照を戻す。ステップＳ１２０３では、個別占有情報生成部３０３３は、ステップＳ１２０２で作成した個別占有情報テーブルを、通信部３０６を用いて、新しい調停役ＧＷに送信する。
【０１２４】
新しい調停役に選出された第３ＧＷ１０６は、ステップＳ１２０４以降の処理を実行する。ステップＳ１２０４はステップＳ１２０３と同様であるため詳細な説明を省略する。ここでは、第３ＧＷ１０６の選出部３０４は、第２ＧＷ１０５と同様に、ＭＡＣアドレスが辞書順で最も若い第３ＧＷ１０６を新たな調停役ＧＷとして選出している。
【０１２５】
ステップＳ１２０５では、占有情報受信部３０２５は、他の一般ＧＷ（ここでは、第２ＧＷ１０５）から送信された個別占有情報テーブルを通信部３０６を用いて受信する。
【０１２６】
ステップＳ１２０６では、占有情報受信部３０２５は、他の全ての一般ＧＷからの個別占有情報テーブルの受信が完了したか否かを判断する。受信が完了していない場合（ステップＳ１２０６でＮＯ）、処理はステップＳ１２０５に戻る。一方、受信が完了した場合（ステップＳ１２０６でＹＥＳ）、占有情報マージ部３０２４は、受信した全ての個別占有情報テーブルと自ＧＷの個別占有情報テーブルとをマージするマージ処理を行う（ステップＳ１２０７）。
【０１２７】
ここで、占有情報受信部３０２５は、あるＧＷ１０ｘから個別占有情報テーブルを受信した場合、その受信時から所定時間経過した場合に受信が完了したと判断してもよいし、ＬＡＮ１１１に接続された元の調停役ＧＷ（ここでは、第１ＧＷ１０４）以外の他の全てのＧＷ（ここでは、第２ＧＷ１０５）から個別占有情報テーブルを受信した場合に受信が完了したと判断してもよい。
【０１２８】
図１７は、マージ処理の詳細を示すフローチャートである。図１５は、マージテーブルが作成される様子を示す図である。図１５において、セクション（ａ）は第２ＧＷの個別占有情報テーブルを示し、セクション（ｂ）は第３ＧＷの個別占有情報テーブルを示し、セクション（ｃ）はマージテーブルを示す。
【０１２９】
ステップＳ１８０１では、占有情報マージ部３０２４は、マージテーブルを情報が書き込まれていない空のテーブルに初期化する。ステップＳ１８０２〜ステップＳ１８１０では、他のＧＷから受信した個別占有情報テーブルと自ＧＷの個別占有情報テーブルとを用いて、マージテーブルを生成する。
【０１３０】
ステップＳ１８０２では、占有情報マージ部３０２４は、個別占有情報テーブルを送信したＧＷ１０ｘの数だけステップＳ１８０３〜ステップＳ１８１０を繰り返す。ステップＳ１８０３では、占有情報マージ部３０２４は、注目テーブルｔｂｌをｉ番目のＧＷ１０ｘから受信した個別占有情報テーブルで初期化する。ここで、変数ｉは、受信した個別占有情報テーブルを特定するためのインデックスである。変数ｉは、例えば、ＭＡＣアドレス順にＧＷ１０ｘを特定してもよいし、個別占有情報テーブルの受信順にＧＷ１０ｘを特定してもよい。図１５の例では、第２ＧＷ１０５、第３ＧＷ１０６の個別占有情報テーブルが順に注目テーブルｔｂｌとされるものとする。
【０１３１】
ステップＳ１８０４では、占有情報マージ部３０２４は、注目テーブルｔｂｌが示す行数だけステップＳ１８０５〜ステップＳ１８１０の処理を繰り返す。変数ｊは注目テーブルｔｂｌの行を特定するためのインデックスである。
【０１３２】
ステップＳ１８０５では、占有情報マージ部３０２４は、注目テーブルｔｂｌのｊ行目の占有中サービスの列１５０２が記憶するサービスと、一致するサービスを記憶する行をマージテーブルから検索する。一致する行がない場合（ステップＳ１８０６でＮＯ）、占有情報マージ部３０２４は、マージテーブルへｊ行目の内容を追加する（ステップＳ１８０７）。
【０１３３】
図１５の例において、第２ＧＷ１０５の個別占有情報テーブルの行１５１１がｊ行目とされた場合、この時点でマージテーブルは空なので、ステップＳ１８０６でＮＯと判断される。そして、この行１５１１の列１５０１が記憶する「第１機器」及び列１５０２が記憶する「第２サービス」が対応付けられた行がマージテーブルに追加される（マージテーブルの１行目）。
【０１３４】
また、図１５の例において、第３ＧＷ１０６の個別占有情報テーブルの行１５１１がｊ行目とされた場合、この時点でマージテーブルには第４サービスが記憶されていないので、ステップＳ１８０６でＮＯと判断される。そして、行１５１１の列１５０１が記憶する「第３機器」及び列１５０２が記憶する「第４サービス」が対応付けられた行がマージテーブルに追加される（マージテーブルの２行目）。
【０１３５】
Ｓ１８０６において、一致する行がある場合（ステップＳ１８０６でＹＥＳ）、占有情報マージ部３０２４は、マージテーブルの前記一致する行の機器の列に、注目テーブルｔｂｌのｊ行目の機器の列が示す機器を追加する（ステップＳ１８０７）。
【０１３６】
図１５の例において、第２ＧＷ１０５の個別占有情報テーブルの行１５１２がｊ行目とされた場合、マージテーブルには既に、「第２サービス」を記憶する行が存在するので、ステップＳ１８０６でＹＥＳと判断される。そして、この行１５１２の列１５０１に記憶された「第２機器」がマージテーブルの第２サービスの行に追加される。これにより、マージテーブルには、第２サービスと、第１機器及び第２機器とが対応付けられた行が作成される（マージテーブルの１行目）。
【０１３７】
ステップＳ１８０９では、占有情報マージ部３０２４は、変数ｊを１増加し、処理をステップＳ１８０４に戻す。ステップＳ１８１０では、占有情報マージ部３０２４は、変数ｉを１増加し、処理をステップＳ１８０２に戻す。
【０１３８】
図１５のセクション（ｃ）に示すように、マージテーブルは占有情報テーブル３０２１（図４）と同じデータ構造を有している。占有情報マージ部３０２４は、生成したマージテーブルを、新たな占有情報テーブル３０２１として記録部２０３に記録する。そして、新たな調停役ＧＷの制御可否判断部３０２２は、この占有情報テーブル３０２１を用いて機器１１ｘに対する制御の可否を判断する。
【０１３９】
マージテーブルは、元の調停役ＧＷである第１ＧＷ１０４上で動作していた第１サービス１０７に関する情報が欠損した状態になる。しかし、第１サービス１０７自体も第１ＧＷ１０４のダウンと同時に動作継続不可能な状態になっているため、残された第２ＧＷ１０５、第３ＧＷ１０６による第１機器１１２〜第３機器１１４の制御には影響を与えない。
【０１４０】
以上の動作により、調停役の第１ＧＷ１０４がダウンした際に、残された第２ＧＷ１０５、第３ＧＷ１０６から次の調停役ＧＷが選出され、調停役ＧＷとしての動作に必要な占有情報テーブル３０２１を復元することができる。
【０１４１】
なお、第１ＧＷ１０４が復旧した場合、図８のＳ８０５の処理により、第１ＧＷが実行するサービスと、そのサービスによる制御対象機器とが新たな占有情報テーブル３０２１に追加される。よって、第１ＧＷ１０４が復旧した場合、第１ＧＷ１０４でサービスが実行されない事態は回避できる。
【０１４２】
（変形例１）
図１１に示すフローチャートでは、各ＧＷ１０ｘの調停役監視部３０３４は、定期的に死活確認メッセージを送信することで調停役ＧＷの通信異常を判断していた。これは一例であり、調停役監視部３０３４は、転送部３０３２が調停役ＧＷを介して制御対象機器に機器制御要求を送信してから、それに対する応答が所定時間以内に得られない場合に通信異常があると判断してもよい。
【０１４３】
この場合、図６ＡのステップＳ６０３において機器制御要求が送信されてから、所定時間以内に応答を受信できなかった場合に、調停役監視部３０３４は、調停役ＧＷに通信異常があると判断すればよい。
【０１４４】
（変形例２）
上記実施の形態では、ＭＡＣアドレスが辞書順で最も若いＧＷが新たな調停役ＧＷとして選出されていた（図１３のＳ１３０９）。これに代えて、各ＧＷ１０ｘを一意に識別できるＭＡＣアドレス以外の機器識別情報が採用されてもよい。例えば、機器識別情報として、ＩＰアドレスが採用されてもよいし、各ＧＷのシリアル番号が採用されてもよい。また、辞書順が最後の機器識別情報を持つＧＷが新たな調停役ＧＷとして選出されてもよい。
【０１４５】
（変形例３）
また、各ＧＷ１０ｘは、通信異常があると判断した場合、各ＧＷ１０ｘの負荷を示す情報を取得し、取得した負荷を示す情報に基づき、新たな調停役ＧＷを選出してもよい。この場合、例えば、図１３のステップＳ１３０３で、各ＧＷ１０ｘのＧＷ検出部３０５は、他のＧＷ１０ｘに負荷の取得要求を同報送信し、各ＧＷ１０ｘから負荷を示す情報を返信してもらうことで、各ＧＷ１０ｘの負荷を示す情報を取得すればよい。また、この場合、選出部３０４は、負荷が最小のＧＷを新たな調停役ＧＷとして選出すればよい。
【０１４６】
なお、負荷を示す情報としては、例えば、各ＧＷ１０ｘが備えるプロセッサ２０１の使用率が採用されてもよいし、各ＧＷ１０ｘの通信負荷が採用されてもよい。各ＧＷ１０ｘの通信負荷としては、各ＧＷ１０ｘが備える通信部２０５の処理負荷が採用されればよい。
【０１４７】
（変形例４）
また、各ＧＷ１０ｘは、各ＧＷ１０ｘにおいて起動されるサービスの識別情報を取得し、この識別情報を用いて新たな調停役ＧＷを選出してもよい。この場合、各ＧＷ１０ｘのＧＷ検出部３０５は、図１３のＳ１３０３において、他のＧＷ１０ｘに実行中のサービスの識別情報の取得要求を同報送信することで、各ＧＷ１０ｘで実行中のサービスの識別情報を取得すればよい。
【０１４８】
この場合、選出部３０４は、例えば、識別情報が辞書順で最も若いサービスを実行しているＧＷ、或いは、識別情報が辞書順で最も後のサービスを実行しているＧＷを新たな調停役ＧＷとして選出すればよい。或いは、選出部３０４は、特定の識別情報を持つサービスを実行しているＧＷ１０ｘを新たな調停役ＧＷとして選出してもよい。特定の識別情報を持つサービスとしては、プロセッサ２０１の処理負荷が低いことが想定されるサービスが採用できる。
【０１４９】
（変形例５）
また、選出部３０４は、予め定められた優先度が最も高いサービスを実行するＧＷを新たな調停役ＧＷとして選出してもよい。図１８は、変形例５において、各ＧＷ１０ｘが記憶する優先度テーブルのデータ構成の一例を示す図である。この優先度テーブルは、各ＧＷ１０ｘの記録部２０３に予め記憶されている。また、各ＧＷ１０ｘは、同一の優先度テーブルを記憶しているものとする。そのため、ＧＷ１０ｘ毎に異なるＧＷが新たな調停役ＧＷが選出されることはない。
【０１５０】
優先度テーブルは、サービス及び優先度を対応付けて記憶する。図１８の例では、第４，第１，第３，第２サービスの順に優先度が高く設定されている。この場合、選出部３０４は、第４サービスを実行するＧＷ１０ｘを新たな調停役ＧＷとして選出すればよい。
【０１５１】
（変形例６）
選出部３０４は、現在の調停役ＧＷ以外のＧＷの中からランダムで新たな調停役ＧＷを選出してもよい。ランダムで調停役ＧＷを選出する場合、各ＧＷが異なるＧＷ１０ｘを調停役ＧＷと選出する可能性がある。そこで、この場合、現在の調停役ＧＷの通信異常を最初に検知したＧＷ１０ｘの選出部３０４が選出した調停役ＧＷを新たな調停役ＧＷとして決定されればよい。例えば、第２ＧＷ１０５が第２ＧＷ１０５を新たな調停役ＧＷとして選出し、第３ＧＷ１０６が第３ＧＷ１０６を新たな調停役ＧＷとして選出したとする。また、第２ＧＷ１０５が第３ＧＷ１０６よりも現在の調停役ＧＷの通信異常を早く検出していたとする。この場合、両ＧＷの選出部３０４は、相互に現在の調停役ＧＷの通信異常の検出時刻を確認し合う。そして、第２ＧＷ１０５の方が第３ＧＷ１０６よりも先に通信異常を検出しているので、両ＧＷの選出部３０４は、第２ＧＷ１０５が選出した調停役ＧＷである第２ＧＷ１０５を新たな調停役ＧＷとして決定すればよい。
【０１５２】
（変形例７）
図１２に示すマイグレーション処理では、全ての一般ＧＷが調停役ＧＷ選出処理を実行しているが（ステップＳ１２０１）、これは一例であり、通信異常を最も早く検出したＧＷが調停役ＧＷ選出処理を行ってもよい。この場合、残りの一般ＧＷの処理負担を軽減できる。
【産業上の利用可能性】
【０１５３】
本開示によれば、機器を制御するアプリケーションの競合を解消するために設置した調停役ゲートウェイに障害が発生した場合、その障害の復旧させる技術として有用である。
【符号の説明】
【０１５４】
１０ｓ  サービス
１０７  第１サービス
１０８  第２サービス
１０９  第３サービス
１１０  第４サービス
１１ｘ  機器
１１２  第１機器
１１３  第２機器
１１４  第３機器
３０１  サービス実行部
３０２  調停役モジュール
３０３  一般モジュール
３０４  選出部
３０５  ＧＷ検出部
３０６  通信部
５０２  種類
５０３  要求元
５０４  要求先
５０５  内容
３０２１  占有情報テーブル
３０２２  制御可否判断部
３０２３  機器制御部
３０２４  占有情報マージ部
３０２５  占有情報受信部
３０３１  通信履歴テーブル
３０３２  転送部
３０３３  個別占有情報生成部
３０３４  調停役監視部
【図１】
2017090991.tif 000003
【図２】
2017090991.tif 000004
【図３】
2017090991.tif 000005
【図４】
2017090991.tif 000006
【図５】
2017090991.tif 000007
【図６Ａ】
2017090991.tif 000008
【図６Ｂ】
2017090991.tif 000009
【図７】
2017090991.tif 000010
【図８】
2017090991.tif 000011
【図９】
2017090991.tif 000012
【図１０】
2017090991.tif 000013
【図１１】
2017090991.tif 000014
【図１２】
2017090991.tif 000015
【図１３】
2017090991.tif 000016
【図１４】
2017090991.tif 000017
【図１５】
2017090991.tif 000018
【図１６】
2017090991.tif 000019
【図１７】
2017090991.tif 000020
【図１８】
2017090991.tif 000021