アレクサ対応電源タップ(LITSPED)を音声操作

購入したはいいけどメーカーサイトの説明がない・・・
アレクサでスマートホーム対応電源タップ(WiFi スマートコンセント/スマートプラグ)を音声操作するための手順をまとめます。
ここでは「アレクサ、プラグオフ」と言うと電源タップのコンセントを1つ消すようにします。






購入時のサイトの説明に「電流がしきい値を超えると、回路ブレーカーが自動的に開き、挿入された高温機器の損傷を防ぎます。」と保護回路があるようですが念のため、ACコンセントには消費電力400W以上の機器はつながないようにしています。


1.SmartLife アプリのインストール、アカウント登録と電源タップ追加

Andoridに「SmartLife」アプリをAndoridのスマホにPlayストアよりインストールします。


アカウントとなるメールアドレスを入力して「認証コードの取得」クリックして認証コードをメールで取得します。
取得した認証コードを入力します。

作成するアカウントのパスワードを入力して「完了」をクリックします。
※自動起動が無効な場合、有効にする画面が表示されます。
自動スタートアップの設定のメッセージが表示されたら「設定」をクリックします。
「SmartLife」の右側にあるスイッチをクリックして有効にします。

自動起動するとメモリ消費が多くなると警告されますが「許可」をクリックします。
ここで、電気タップをコンセントに繋ぎます。
すると電源ボタンの周りのあかりが点滅します。



デバイスの追加では、「電源タップ(Wi-Fi)」をクリックします。

電源タップの点滅状態を確認したら電源タップが使用するWi-FiのSIDとパスワードを入力して「確認」をクリックします。
これで「SmartLife」アプリから電源タップを操作することができるようになります。


2.アレクサに SmartLife スキルを導入

「スキル・ゲーム」メニューから「SmartLife」スキルを検索してを導入します。

「有効にして使用する」をクリックして「SmartLife」スキルを有効にします。
「SmartLife」アプリで作成したアカウントのメールアドレスとパスワードを入力して「今すぐログイン」をクリックします。
ログインできたら「許可」をクリックします。

これでリンクが完了します。


3.アレクサに電源タップをデバイス追加

正常にリンクが完了しましたと表示された画面の左上にある「✖」をクリックすると端末を検出する画面が表示されます。
一応、「端末を検出」をクリックして検出しました。

しかし、検出されませんでと表示されましたが画面閉じるとデバイスの画面に検出されましたと表示されてます。
デバイスはこれで追加されておりアレクサで利用可能な状態になっていました。


4.電源タップを音声操作するアレクサの定型アクション作成

「アレクサ、プラグオフ」という定型アクションを作成して電源タップのコンセントを1つ消せるようにします。

参考:アレクサと赤外線学習リモコン(Nature remo mini)連携で音声操作
   (3.定型アクションで音声操作を定義)


定型アクションの作成内容は以下の通りです。

アレクサ対応 LED電球(IRIS OHYAMA)を音声操作

アレクサでスマートホーム対応照明を音声操作するための手順をまとめます。
取扱説明書みればわからないこともないのですがしょうもないところでハマるので備忘録にすることにしました。
ここでは「アレクサ、電球2(説明で追加するデバイス名)をつけて」で電気をつけられるようにします。
(「つけて」を「けして」にすると電気は消えます。)


「出典元」IRIS OHYAMA LED電球用 セットアップ


1.IRIS SmartLF アプリをインストールとアカウント登録

Andoridに「IRIS SmartLF」アプリをAndoridのスマホにPlayストアよりインストールします。


インストールしたアプリの「登録」をクリックしてアカウントを登録します。
(メールアドレスに送信される認証コードを入力してアカウントを登録します。)


2.IRIS SmartLF アプリにLED電球を追加

LED電球にスイッチをつけて明かりが点滅する状態を確認します。
※購入後に電源入れた状態ではLED電球は点灯状態でした。
 LED電球が点灯しているときは電源を1秒間隔でONとOFFを3回行うと点滅するようになります。

「+」をクリックして表示される「照明」アイコンをクリックします。

「次へ(WiFi設定)」クリックしてLED電球が使用するWiFiのSIDとパスワードを入力します。
「確認します」クリックするとLED電球が検出されて追加されます。


3.アレクサに IRIS SmartLF スキルを導入

アレクサに IRIS SmartLF を導入して IRIS SmartLFアプリで作成したアカウントを利用してアレクサとアカウントリンクします。
アレクサアプリの「IRIS SmartLF」スキルを検索します。

「有効にして使用する」クリックするところより IRIS SmartLF アプリで作成したアカウントのメールアドレスとパスワードを入力して IRIS SmartLF にログインします。
ログインできたらアレクサから利用できるように「許可」をクリックします。


正常にリンクが完了したと表示されます。


4.スマートスピーカー対応LED電球をデバイスに追加

「IRIS SmartLF」アプリで追加したLED電球をアレクサアプリのデバイスに追加します 。
これにより音声での操作や定型アクションでの指定が可能になります。

「デバイスを追加」⇒「照明」「その他」と選択します。

「デバイスを検出」からLED電球を検出します。
ここでは、検出したデバイスへのグループ追加はスキップします。

定型アクションを登録しなくても記載の通り「アレクサ、電球2をオフにして」で消灯できるし「アレクサ、電球2をオンにして」で点灯できるようになります。

Raspberry pi にリモートデスクトップから接続

Raspberry pi は制御機器として利用するのでモニターを付けずに利用する場合があります。
そんな時にリモートデスクトップで色々と操作したい時に使います。



1.Raspberry pi のインターフェイスVNC設定を有効化

リモートデスクトップで接続可能にするにはRaspberry pi設定にあるインターフェイスのVNCを有効にします。

「Raspberry Piの設定」メニューをクリックして画面を開きます。

「インターフェイス」タブにあるVNCの「有効」をクリックします。


2.Raspberry pi のXRDPパッケージをインストール

XRDPをコマンドでインストールします。

コマンド:sudo apt-get install xrdp

「続行しますか?」にはもちろんYを入力します。

こんな感じでインストールは終了します。


3.Windows10からリモートデスクトップ接続

Windows10からリモートデスクトップでRaspberry piに接続します。

スタートメニューの「アクセサリ」にある「リモートデスクトップ」をクリックします。

接続先のアドレス(ホスト名、IPアドレス)を「コンピューター」に入力します。
(ここではデフォルトの名前を入力しています。)

この画面が表示されたら「はい」をクリックします。

「username」(ユーザー名)と「password」(パスワード)を入力して「OK」ボタンをクリックします。
(Rapsspberry pi にログインする時のアカウントを使用します。)
※デフォルトのユーザー名は、pi です。
 パスワードには、Rapsspberry pi をセットアップした時に入力したパスワードを入力します。

参考:Raspberry pi にOSをWindowsからセットアップ


これでリモートデスクトップが接続されてRapspberry piのデスクトップが表示されます。

アレクサを使い音声リモコン(IRKit学習リモコン + Node-RED + Raspberry pi)を作成

アレクサを利用して赤外線学習リモコン(IRKit)から赤外線信号を送信させる環境を作成する手順をまとめます。
構成は下図の通りです。


Nature remo mini(赤外線学習リモコン)を使えばアレクサ用スキル(Nature Remo Smart Home Skill)があるのでもっと簡単に構築できます。

参照:アレクサと赤外線学習リモコン(Nature remo mini)連携で音声操作

しかし、ここでは以下の構成を使うことでより拡張性の高くします。

・Raspberry pi
・Node-RED(GUOでフロー制御プログラム)
・Node-RED Alexa Home Skill Bridge(アレクサのスキル)

Node-RED を使った以下のフローで WebAPI を IRKit にリクエストして赤外線信号を送信させます。

前提となる内容については以下を参考にしてください。

参照:Node-RED の基本的な使い方
参照:Node-RED を Raspberry pi にセットアップ
参照:Raspberry pi にOSをWindowsからセットアップ
参照:IRKit(学習リモコン)コマンド送受信(屋内からのアクセス)
参照:IRKit(学習リモコン)の基本的な使い方


1.Node-RED Alexa Home Skill Bridge にデバイスを追加

Node-RED Alexa Home Skill Bridge サイトでアカウントを作成します。

Node-RED Alexa Home Skill Bridge サイトのアカウントを作成
Node-RED Alexa Home Skill Bridge にデバイスを追加


(1)Node-RED Alexa Home Skill Bridge サイトのアカウントを作成

以下サイトよりアカウントを作成します。

「出典元」Node-RED Alexa Home Skill Bridge Resiter

Username(ユーザー名)、Email(Eメール)、Password(パスワード)を入力してResiter(登録)ボタンをクリックしてアカウントを登録します。


(2)Node-RED Alexa Home Skill Bridge にデバイスを追加

Node-RED Alexa Home Skill Bridge サイトのアカウントでログインします。
(アカウント作成でログインした状態ではログイン不要です。)

「出典元」Node-RED Alexa Home Skill Bridge Login


ヘッダーにある「Devices」メニューをクリックします。
ページ左下にある「Add Device」ボタンをクリックします。
項目に任意の設定(ここでは画像の内容)をします。
・Name(デバイス名で使用)
・Description(説明)
・Action(アクション)
・ApplicationType(アプリケーションタイプ)
一通り入力したら一番したにある「OK」ボタンをクリックします。


2.アレクサに Node-RED スキルを追加

アレクサアプリで「スキル・ゲーム」から「Node-RED」で検索して有効にします。

Node-RED Alexa Home Skill Bridge サイトのアカウントで「Username」「Password」入力して「Authorise」ボタンをクリックします。
これでアレクサのデバイスに表示されリンク可能になります。


3.アレクサに Node-RED Alexa Home Skill Bridge で作成したデバイスを追加

アレクサアプリの「デバイスを追加」メニューから「デバイスを検出」ボタンをクリックします。

検出したデバイスをセットアップして「終了」ボタンをクリックします。
これで追加したデバイスは定型アクションから利用可能になります。


4.Node-RED の パレットに Alexa を追加

フローのノードにアレクサと連携するためのアプレットを追加します。

「alexa-home-skill」でパレットを検索して「ノードを追加」をクリックします。

alexa のパレットが追加されます。


5.Node-RED でフローを作成

フローの作成方法については以下を参考にしてください。
ここでは個々のノードの設定内容を説明します。

参照:Node-RED の基本的な使い方

作成するのは以下のフローになります。


alexa-home ノード(Device:TV1)
function ノード(名前:送信ヘッダー作成)
change ノード(名前:送信データ作成)
http request ノード(名前:WEBAPI送信)
・debug ノード(名前:未入力で設定はしていません。デフォルトのままです。)


(1)alexa-home ノード(Device:TV1)

alexa-home ノードには、Node-RED Alexa Home Skill Bridge サイトで作成したアカウントを「Username」「Password」に入力します。

「Account」でアカウントを選択すると「Device」に作成したTV1が自動で選択されます。


(2)function ノード(名前:送信ヘッダー作成)

コードの設定内容は以下の通りです。(コードの3行目は初期表示されます。)

msg.headers = {};
msg.headers['X-Requested-With'] = 'Node-RED';


(3)change ノード(名前:送信データ作成)

「ルール」の「対象の値」には JSON形式の送信データを入力します。
用意する送信データは以下のページを参考にしてください。

参照:IRKit(学習リモコン)コマンド送受信(屋内からのアクセス)
※JSONのダブルコーテーションはエスケープする必要はありません。



(4)http request ノード(名前:WEBAPI送信)

URLには、IRKit赤外線リモコンのIPアドレスを指定します。
※名前解決できないネットワーク環境ではホスト名をつかえません。


6.アレクサ定型スキルを作成

アレクサの定型スキルに Node-RED Alexa Home Skill Bridge サイトで作成したデバイス「TV1」をアクションとして追加します。
定型アクションの作成については以下のページを参考にしてください。

参照:アレクサと赤外線学習リモコン(Nature remo mini)連携で音声操作
  (3.定型アクションで音声操作を定義)


「アクションを追加」から「すべてのデバイス」をクリックします。

デバイス「TV1」を選択して「追加」をクリックします。
お疲れ様です。これで利用可能になります。

Node-RED の基本的な使い方

どんなものか理解するのはまず使ってみるのもよいかと思います。
プログラムにはデバックの作業も必要になるので一緒に最小の構成で説明します。

完成イメージ

環境の作成は Raspberry pi への説明になりますがページが参考になります。

参照:Node-RED を Raspberry pi にセットアップ


1.リクエスト受け付ける「TEST1ページアドレス」ノードの作成

ブラウザからのページにアクセスしたときのリクエストを受け付ける部分の作成になります。
Node-RED のベースとなるURL + 新しく作成するURLの組み合わせで決まるURLを記入します。

まず。ネットワークにある「http in」ノードをドラッグ&ドロップしてフローを作成します。

親メソッドは、「GET」とします。
URLと名前を入力して「完了」をクリックします。
(Node-RED のベースとなるURLの記載は省略しています。)


2.ページのHTMLを定義する「HTMLを記述」ノードの作成

ページの表示内容となるHTMLを記述します。
機能にある「template」ノードをドラッグ&ドロップしてフローに追加します。

ドロップした「template」ノードを図のようにつなぎます。
(つなぐにはピンになっているところをマウスで押してつなぎたい箇所で放します。)

「template」ノードをダブルクリックしてテンプレートにページを表示するHTMLを記述します。
構文は「HTML」を選択します。
形式は「平文」を選択します。
最後に名前を入力して「完了」をクリックします。


3.定義したHTMLをブラウザに返す「HTTPレスポンス」ノードの作成

ネットワークにある「http responset」ノードをドラッグ&ドロップしてフローに追加します。

ドロップした「http responset」ノードを図のようにつなぎます。

とくに設定項目はありませんがノードの名前を入力して「完了」をクリックします。

フローは以下のようになります。
(フローとして機能する程度に完成していますがデプロイしていないのでまだ使えません)


4.フローで流れるデータを確認する「デバック出力」ノードの作成

フローの状態を把握するのに「debug」ノードを利用します。
共通にある「debug」ノードをドラッグ&ドロップしてフローに追加します。

ドロップした「debug」ノードを図のようにつなぎます。

ダブルクリックして設定を開き、名前を入力します。
対象には、「msgオブジェクト全体」を選択します。
(まず、どんな内容か理解するためにすべてデバック出力させる設定です。変更の必要はありません。)

実行した結果は、デバックメッセージの虫のボタンをクリックして表示されますので内容を確認します。


5.編集したフローのデプロイ

編集した内容はデプロイすることで利用可能になります。
「デプロイ」をクリックして変更を反映させます。

完了すると「デプロイが成功しました」とメッセージが表示されます。
(「使われていない「ノード設定」があります。と表示されますが確認動作に影響しません。」)

Node-RED を Raspberry pi にセットアップ

Node-RED は Raspberry pi の Node.js で動作するGUIでフローを記述するプログラミング開発ツールです。
簡単に IoT を実現できる便利なツールなので利用することにしました。
ここではインストールして使える状態にするまでの手順の備忘録とします。

基本的な使い方やOSのセットアップについては以下のページを参考にしてください。

参照:Node-RED の基本的な使い方
参照:Raspberry pi にOSをWindowsからセットアップ


1.Node-REDのインストール

インストールする説明は本家に詳細が記載されています。

「出典元」Node-RED User Group Japan Raspberry Piで実行する

Raspberry pi のターミナルから以下のコマンドでインストールします。

コマンド:bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

本当にインストールしますかと聞かれるのでもちろん「Y」入力します。
(再度、聞かれますが同じく「y」と入力しています。)

以下の状態で終了します。

この状態では Node-RED は起動してはいません。
以下のコマンドで Node-RED を起動します。

コマンド:node-red-start



2.Node-REDの自動起動設定

以下のコマンドで Node-RED をサービスで起動するようにすることでOSを起動した時に Node-RED を起動して利用可能にします。

コマンド:sudo systemctl enable nodered.service

これでOSを再起動しても Node-RED が利用可能になります。

ブラウザでWindows10からブラウザで開いた状態ですが以下のように利用可能になります。

Linux(Raspberry pi/Ubuntu)での共有フォルダ(Samba)を使う

共有フォルダはネットワークで利用するとなると必須の機能ですよね。
Raspberry pi も Ubuntu と同じようにフォルダを共有できるかと思って調べたけど見当たらないので両方の共有方法をまとめておきます。


1.Ubuntuのフォルダ共有

ファイルマネージャーで共有したいフォルダを選択してマウス右クリックの「プロパティ」メニューをクリックします。
「このフォルダを共有する」にチェックをつけます。

共有サービスがインストールされていないとメッセージが表示されます。
「サービスのインストール」ボタンをクリックします。

つづいてメッセージが表示されると「インストール」ボタンをクリックします。

ようやく「このフォルダを共有する」にチェックがつきます。
任意の項目を設定したら「共有を作成」ボタンをクリックしてフォルダの共有は完了します。

こんな感じで他のパソコンから見えて使えるようになります。


2.RaspberryをSambaでフォルダ共有

Sambaをコマンドでインストールします。

コマンド:sudo apt-install samba

途中で続行しますか?と聞かれるので「Y」を入力してENTERキーを押します。

DHCPサーバーを使用していますが「いいえ」を選択します。
(市販の無線ルーターを利用してデフォルトのDHCPを利用しているところが一般的かと思います。うちも同じ環境です。)

こんな感じでよくわからない状態で終了します。

インストールして作成された smb.comf ファイルを編集して共有するフォルダを指定します。
指定したらファイルを保存して画面を閉じます。

編集するコマンド:sudo mousepad /etc/samba/smb.conf

・「[PicTures]」には共有名を指定します。
・「path = 」に共有するパスを指定します。
・他は見ての通り参照・更新権限を認証なしで公開する設定です。


サービスを再起動して設定を反映させます。

こんな感じで他のパソコンから見えて使えるようになります。

Raspberry pi にOSをWindowsからセットアップ

raspberry pi は SDカードにOSをインストールして使用します。
インストールがだいぶ簡単になってるのはいいんですが手順がかわると戸惑うのでまとめておきます。



1.ダウンロード

SDカードにイメージを書き込むプログラムをダウンロードします。

「出典元」Raspberry Pi Foundation Downloads 

「Raspberry Pi Imager for Windows」リンクよりダウンロードします。


2.SDカードにイメージ書込み

ダウンロードしたimager.exeを実行します。
「Install」ボタンをクリックします。

「Finish」ボタンをクリックします。

「CHOOSE OS」をクリックします。

ここでは一番上のOSを選択します。

パソコンにSDカードを差し込んで、「SHOOSE SD CARD」をクリックします。

「WRITE」をクリックします。

SDカードを取り外して画面を閉じます。


3.Raspberry pi で起動と初期設定

Raspberry pi にSDカードを差し込んで電源を入れます。(パワーONリセットなので電源スイッチはありません。)
「Contry」「Language」「Timezone」を選択して「Next」ボタンをクリックします。

パスワードを入力して「Next」ボタンをクリックします。

「Next」ボタンをクリックします。

ここではネットワークへの接続をWiFiにします。
対象のアクセスポイントを選択して「Next」ボタンをクリックします。

アクセスポイントのパスワードを入力して「Next」ボタンをクリックします。

OS最新に更新してほしいので「Next」ボタンをクリックします。

「Restart」ボタンをクリックします。
これでひとまず、完了です。

WordPress投稿記事の無駄なhタグを削除

WordPressの投稿記事で使用するHTMLのタグ h1、h2・・・は当然、記事の内容に合わせて作成します。
投稿記事のページのソースを見てみると余計な h2、h6 タグがWordPressのテーマのプログラムから出力されているのに気が付きました。
投稿記事以外で使われてほしくないし、SEO的にもよくないので消します。
※「Nifty Lite」テーマや元の「Specia」テーマのプログラムを直接修正します。
プログラムの修正は、まず管理者でログインして「外観」の「テーマエディタ」をクリックします。
テーマエディタで使用しているプログラムが表示されるので対象プログラムを選択して修正します。


1.サイドバーの「最近の投稿」で使ってるh3タグを削除

いきなりh3からですか!って思いました。
投稿記事を書く人以外が見出しや段落のhタグを出力するのは理解できないので消します。

修正プログラム:Specia: sidebar.php (inc/sidebar/sidebar.php)

無難に「h3」を「p」タグに置き換えます。






2.表示ページタイトルの投稿記事名にあるh2タグを削除

同じ情報を2か所に表示するのは無駄なのでついでにまるごと消すことにします。
いるのであればタグのみ削除すればOKです。

修正プログラム:Nifty Lite: specia-breadcrumb.php (sections/specia-breadcrumb.php)

コメントタグで出力しないようにします。
72行目(修正前:col-md-6 col-xs-12 col-sm-6)はbootstrapグリッドシステムの列がずれないよう調整しています。


3.投稿記事名表示のタグh2をh1に修正

titleとh2タグに同じ投稿記事名が使われてるのですがなぜかh1はありません。
理解できないし意味不明なのでh1に書き換えます。
※titleはページを外から見た人向けに、 h1はサイト閲覧している人向けで使い分けます。
 同じでなくてもよいようなのですがシンプルに同じにしています。


修正プログラム:Specia: content-page.php (template-parts/content-page.php)

h2タグの記述をh1に修正します。


4.投稿日のh6タグを削除

投稿日になぜかh6タグがついています。
しかも見た目が気に入らないので消します。

修正プログラム:Specia: content-page.php (template-parts/content-page.php)

12行目と17行目のコメントタグで無効にします。

Oacle Express Edition 18c でIPアドレス変更(DHCP)に対応させる

Oracleの勉強用としてWindows10にインストールして使う場合はほとんどDHCPの環境になると思います。
DHCPでも割り当てられるIPがかわることはあまりないかもしれませんが変われば動かなくなるのでとりあえず動作する手順をまとめておきます。
※Oracleを運用環境で利用する手順ではありませんし正しい手順でないことを理解頂き自己責任で参考にしてください。

IPアドレスが記載されている以下のファイルをホスト名に変更します。

・listener.ora
・tnsnames.ora

インストール時のIPアドレスとホスト名です。
インストール後にIPアドレスを「192.168.0.11」から「192.168.0.19」に変えてsqlplusで接続できるか確認します。


インストール後の「listener.ora」の状態です。
※ファイルの場所は1行目に記載されています。

# listener.ora Network Configuration File: C:\app\own\product\18.0.0\dbhomeXE\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

DEFAULT_SERVICE_LISTENER = XE

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\own\product\18.0.0\dbhomeXE)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\own\product\18.0.0\dbhomeXE\bin\oraclr18.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

インストール後の「tnsnames.ora」の状態です。
※ファイルの場所は1行目に記載されています。

# tnsnames.ora Network Configuration File: C:\app\own\product\18.0.0\dbhomeXE\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

LISTENER_XE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

「listener.ora」と「tnsnames.ora」ファイルのIPアドレス記載箇所をホスト名に修正して保存します。
DBまたはOSを再起動します。
変更後のIPアドレスでも接続できるのでIPが変更されても接続できる状態と確認できます。