私の知人は、私の業績を見せてくれて、彼らをスマートホームシステムと「呼んだ」。 個人的には、この名前は私の好みではありません。「マインド」はかなり複雑な概念であり、私の意見では、すべての人に固有のものではないからです。 はい、コンピューターの心について話すのは早すぎます。 自動化および自動化という用語を好みます。 簡単にするために、私のアパートの電子世界を次の図に示します。

デバイス間の機能が次のように分散されている場合:
1)サーバー-大量のディスクスペース、無停電電源装置、かなりノイズの多い冷却システムを備えた低電力コンピューター。 クローゼットの中のどこかに隠れて、睡眠を妨げません。
2)デスクトップ-映画を見たり、音楽を聴いたり、サーフィンしたりするためのオーディオシステムを備えた静かな非ゲームコンピューター。
3)他の多くのコンピューティングツール:スマートフォン、タブレット、妻のラップトップ、私のラップトップ。
私の意見では、現代の家族のための「ゲスト」の非常に一般的なリスト。 デスクトップはメディアプレーヤーとして頻繁に使用されますが、その近くに座ってプロセスのオン/オフと制御を行うのは快適ではありません。ソファから立ち上がらずにコンポジションを切り替えたいです。 映画の終わりに、私は起きてデスクトップとアンプをオフにするのではなく、反対側に転がって寝入りたいです。 最終的には、就寝前にコンピューターで音楽を再生して電源を切り、目覚まし時計の代わりに午前中に電源を入れるようにします。 もちろん、そのような機能を何らかの方法で実行する多くの異なるプレイヤーがいますが、コンピューターは何らかの理由でその方法を知りません(AVerMediaからのリモートコントロールは感心しませんでしたが、x64への切り替えで完全に動作を停止しました)。
そこで、デスクトップの次の機能を自動化したいと思います。
1)オン/オフを切り替えます。
2)メディアプレーヤーの制御(順方向/逆方向、静か/大音量、開始/停止)
3)ステレオアンプのオン/オフを切り替えます。
4)スケジュールに従って上記のすべてを実行します。
開始するには十分です。 何がどこでできるかを分析します。
1)コンピューター
コンピューターの電源を切るのは非常に簡単です-Windows API関数(Powrprof.dllライブラリーのSetSuspendState)を呼び出します。
電源を入れるのはもう少し難しくなりますが、コンピューターの電源を切らずにスリープモードにすると、タスクがずっと簡単になります。 これで、USBデバイスのアクティビティ(適切な設定)またはWake-on-Lanテクノロジの使用(これが何であるかを読むことができます)によって起動できます。 常に使用可能なサーバーがある場合、問題なくデスクトップにウェイクアップコマンドを送信できます。
2)オーディオプレーヤー
ほぼすべての最新のプレーヤーには、そのAPIの説明があります。 AIMPを使用します。 APIの説明は開発者のWebサイトで入手でき、C#の既製のコードはGoogleで見つけることができます。 システムの音量を制御することで、ライブラリ( NAudio )が許可されます。これは、ちなみに多くの便利な機能を実行でき、代替オーディオプレーヤーの基盤として使用できます。
3)アンプ
ここでは少し複雑です。 個人的には、私のアンプはかなり古く(Electronics D1-012-Stereo、1982)、スリープモードについては何も知りません。 機械的なボタンでオンとオフを切り替えます。 眠っている間にコンピューターを無人にすること(通常のこと)と、まったく別のことです-そのような露出時間を持つアンプです。 インターネットでは、すべての色と味について、この問題に対する多くの可能な解決策を見つけることができます。 以前に出会った1-Wireの技術が好きです。 ここで技術の基本的な理解を得ることができます 。
単純な機器を製造した後、デバイス図を次のように再描画できます。

(ここでは温度センサーを使用することを考えておらず、機能の明確性とデモンストレーション、および複数の制御されたコンセントの存在のためにそれらを表示します。理論的には、同時に接続されるデバイスの最大数は制限されていますが、1部屋のアパートの規模のサイズは非常に心配ですこれは価値がない)
まず、コンピューターの通信ポートアダプターを1-Wireバスに組み込む必要があります。 COMポートを使用したため、最初にRS232-> UARTコンバーターを組み立てました( このスキームに従って )
次に、アダプター自体-次のように(私は特に電子工学を専門としていないので、スキームの選択とコンサルティングの専門家に頼りました):

残念ながら、解体困難なケースにこのケースを隠していたため、判明した写真はありませんでした(そして、多くの電気テープを使用しましたが、マナーが悪いことは知っていますが、できるだけ早くすべてを仕事で見たいと思っていました)。
アウトレットを制御するには、 スキームを使用します。 一般的に、このアドレスでは多くの有用な情報を見つけることができます。
私のバージョンのソケットは次のとおりです。
1-Wireバス(上)とリモート(下)トライアックに接続するボード:

ソケットとトライアック:

これで、必要な「機器」がすべて手に入り、プログラミングに進むことができます。
典型的な制御パスを次のように定義しました:タブレット->サーバー->コンピューター。 3つのデバイスがあるため、各デバイスに1つずつ、合計3つのモジュールが必要です。
サーバー上で、Webインターフェース要求に対応し(これは最も単純なソリューションであり、デバイスだけでなく、かなり広範囲のポータブルをカバーします)、コンセントを管理し、クライアントにコマンドを送信する必要があります。 1-Wireバスに関しては、車輪を再発明するのではなく、既製のドライバーと.Netのラッパーを使用することにしました。
ドライバー
.Netのラップ
注意! 以前のバージョンでは、外部電源を使用したスキームに従って温度センサーを操作するとエラーが発生します。現在修正されているかどうかはわかりませんが、この機能が必要な場合は、ソースをわずかに変更する必要があることに注意してください。
2つのコンピューター/プロセス間の相互作用を整理する方法はたくさんあります。 .Net Remotingテクノロジーを選択しました。これは時代遅れですが、私たちの目的には完全に適しています。 その助けにより、Webフォームはサーバーと通信し、サーバーはクライアントと通信します。
最初は、テストプロジェクトまたは抽象的な最も単純な例のいずれかを説明したかったのですが、その説明はかなり面倒で、セマンティックロードを伴わないことを決定しました。そのため、スキーム全体のデバッグと新しいアイデアの実行に使用するウィンドウインターフェイスのスクリーンショットのみを提供します。
サーバーフォーム。
システムの中心は、外部(1-Wire)および内部( openhardwaremonitorプロジェクトを使用したマザーボード)センサーからの温度データの収集です。
インフラストラクチャ全体をサポートし、Telnetを介してADSLモデムのステータスを監視します(再接続の方法がわからないため、シャッターをジャグリングする必要があります)。

お客様
サーバーからの着信コマンドを表示し、それらの一部を開始できます。

Webフォーム。
原始的でかさばるが、タブレット上では見栄えが良く、動作する;)

見込み
周囲を見ている誰もが、日常生活を自動化するための5〜10個のアイデアを提供できると確信しています。 そして、ガスボイラー制御スキーム(もしあれば)の研究をすぐに取り上げる必要はまったくありません。最初の実験では、アパートの照明と浴室とキッチンの換気が落ちます。
音声合成と認識
Microsoftには、人間の音声を合成および認識するための自由にアクセスできるプラットフォームがあります。 ここからエンジンおよび合成および認識モジュールをダウンロードできます。
ランタイム
ランタイム言語 。
認識と合成自体が非常によくできていることは注目に値します。 これは確かにSF映画で見られるものではありませんが、機能し、今日実際に使用できるものです。
音声認識をテストするとき、マイクに手を伸ばすという不便さに遭遇しましたが、手を伸ばせば残りはできます。 しかし、試してみるのはとても面白かったです。 彼はパスフレーズを使用してコンピューターに「アクセス」し、その後コマンドを「リッスン」し始めました(最初のコマンドの後しばらくして、次のものは予備的なフレーズなしに知覚されました)が、コンピューターから何かが必要になるたびにパスフレーズを発音することが判明しましたいまいましい そして今日、私はグーグルからの眼鏡についてのビデオを見ました、そして、今日より良いものが全くないのに気づきました、そして、音声制御で少し待つ必要がある。
しかし、音声シンセサイザーは朝の目覚まし時計に調和して適合し、現在の時刻を報告します。 さらに、天気予報と為替レートを報告するよう彼に「教える」つもりです。
安全性
そして最後になりましたが、基本的な安全規則を忘れないでください。 私の場合、ウェブサイトは外部の世界からはアクセスできず、侵入者を心配する価値はありませんが、外部の世界へのアクセスを開く予定がある場合は、非常に親切で意識のある人々に囲まれていることを期待するのは非常に単純なので、警戒してください。 かつて、私のモデムはRDP接続の標準ポートを開いたままにしていたため、「外の世界」は接続のためにあらゆる種類のログインとパスワードを常にソートしていることが判明しました。 マイナー(またはそうではない)ハッカーがサーバーファイルに侵入した場合に何が起こるかについては、個人的な経験から知らない方が良いでしょう。
実験を頑張ってください!