ラズパイ3で赤外線リモコンの操作

ラズパイ3で赤外線リモコンの操作

Raspberry Pi 3 で赤外線リモコン&温度センサーを試す

を参考に実践

まず
irMagician を ラズパイ3にUSB ケーブルで接続

使用するのはAndroid で使っているものでOK

irMagician の黄色LEDが点滅していれば認識している

また

ls -l /dev/ttyACM0


/dev 以下に ttyACM0 が存在していれば認識しているのを
確認できる

次に
ptyhon-pip と pyserial のインストール

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py
pip install pyserial

制御プログラムを git で取得

git clone https://github.com/netbuffalo/irmcli.git
cd irmcli/

で移動してから赤外線センサーの学習

udo python irmcli.py -c

を実行したけど

  File "irmcli.py", line 15
    print "Capturing IR..."
                          ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Capturing IR...")?

となる

SyntaxError: Missing parentheses in call to ‘print’.
で検索してみると
どうやら
python3 から print の構文が変わっていて

Python3 print でシンタックスエラーになった。

によれば

Python3からはprint()で実行しないとエラーになる

とのこと

15行目の
print “Capturing IR…”

print(“Capturing IR…”)
として
実行したら

  File "irmcli.py", line 19
    print msg
            ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(msg)?

となるので

さすがに毎回変更は面倒なので

vim irmcli.py

でファイルを開き

:%s/print msg/print(msg)/g

で一度に変更

vim の置き換えについては
vim置換

を参考に

いくつか修正するところがあるので
/print ”
で検索し
print() になるように修正

  File "irmcli.py", line 113
    print ir_serial.readline().rstrip()

については

print(ir_serial.readline().rstrip())

とすると

Traceback (most recent call last):
  File "irmcli.py", line 142, in <module>
    captureIR(args.file)
  File "irmcli.py", line 16, in captureIR
    ir_serial.write("c\r\n")
  File "/home/pi/.pyenv/versions/3.6.10/lib/python3.6/site-packages/serial/serialposix.py", line 532, in write
    d = to_bytes(data)
  File "/home/pi/.pyenv/versions/3.6.10/lib/python3.6/site-packages/serial/serialutil.py", line 63, in to_bytes
    raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
TypeError: unicode strings are not supported, please encode to bytes: 'c\r\n'

となってしまう

irmagician ラズパイ エラー
で検索し

JSONに保存した赤外線データを使って赤外線照射したいのですが、エラーが出てできません。

によれば
python3 だと
“n,%d\r\n” % recNumberはstr型なので提示エラーになる

~.encode()とbyte型に変換するとよい
とのこと
python3 pySerial TypeError: unicode strings are not supported, please encode to bytes:

も参考にするように書いてある

少しわかりにくかったので
ser.write
で検索し

Python3でpyserialを使う

をみると
write() で
文字列の前に
b
をつければOKらしい

:%s/write(“/write(b”/g
で置き換えて実行したが
リモコンの学習ができない

仕方ないので
コードを書き換えるより
ディレクトリ単位で python 環境を構築することに

pyenv-virtualenvでディレクトリ単位のpython環境構築

ラズパイにpyenv・Python3.7.0をインストールしてpyenv-virtualenvで仮想環境の構築!

を参考に

なお pyenv-virtualenv のインストールに関しては
pyenv と pyenv-virtualenv で環境構築

を参考に

 git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

でファイルを取得

sudo vim .bash_profile 

でファイルを開き

最終行に

eval "$(pyenv virtualenv-init -)"

を追記して保存

source ~/.bash_profile

でファイルをリロード

次に仮想環境の構築

cd irmcli/

で irmagician のディレクトリに移動

次に python 2.7.9 をインストール

pyenv install 2.7.9

しかし

ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

となる

エラーを検索

RaspberryPiにpyenvを入れて複数のPython動かすよ

を参考に

sudo apt install -y libssl1.0-dev

Debian 9 Stretchでは、libssl-devは
OpenSSL 1.1.xベースになっているので
あったlibsslを入れろとの事

再度

pyenv install 2.7.9

を実行しインストール成功

pyenv は
global なら全体のバージョンを設定

local なら
カレントディレクトリに反映となるので

pyenv local 2.7.9 

として
irmcli ディレクトリのみ
python を 2.7.9 にする

次に
仮想環境の保存と再構築のため

pyenv exec pip install wheel

で wheel をインストール

freeze コマンドで
requirements ファイルを作成し
wheel ファイルを出力

pyenv exec pip freeze > ~/pyp_list.txt
pyenv exec pip wheel --wheel-dir=~/wheelhouse -r ~/pyp_list.txt

としておく

次に

python --version

で ver 2.7.9 になっているのを確認

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py
pip install pyserial
[/shell
で必要なものをインストール


vim irmcli.py

で変更した部分を元に戻しておく

元に戻したら

sudo python irmcli.py -c

で部屋のリモコンの全灯を押し学習させる

sudo python irmcli.py -s -f light_on.json

でファイルへ書き出し

リモコンの消灯を押して照明を消す

sudo python irmcli.py -p -f light_on.json

を実行すると全灯になって照明が点灯する

なお距離は2mでも動作するが
リモコンと異なり
赤外線センサーの向きなどがあっていないと
操作できないので注意

Amazon Echo でラズパイのコマンドを実行

Amazon Echo でラズパイのコマンドを実行

声で部屋の電気のON/OFFをしたい(後編:音声認識しちゃうよ)

AmazonEchoからRaspberryPiのコマンドを実行する(node-red-contrib-amazon-echo)

を参考に

ubuntu のブラウザ
今回は firefox で
http://raspberrypi.local:1880/admin/
へアクセス

すでにログインしているなら数日間は
自動ログインできる

ハンバーガーメニューから
パレットの管理をクリック

ノードを追加 をクリック

node-red-contrib-amazon-echo
で検索

node-red-contrib-amazon-echo

ノードを追加をクリック

追加をクリック

しばらくすると追加されるので
閉じるをクリック

これで入力欄に
amazon echo hub
amazon echo device
が追加される

amazon echo hub をドラッグ&ドロップ

ダブルクリックし
編集画面をだす

Port を 8111 にして
完了をクリック

次に
Amazon Echo Device をドラッグ&ドロップし
灰色の○をクリックして
Amazon Echo Hub とワイヤーをつなげる

Amazon Echo Device をダブルクリックし
設定画面で
Name に任意の名前を入力

今回は テスト として完了をクリック

これでデブロイをクリック

次に
https://alexa.amazon.co.jp/
へアクセスし

スマートホーム > デバイス > 検出
としたが
なぜか追加されない

とりあえず後にして
Node-RED のフローを作成

http://raspberrypi.local:1880/admin/
へアクセス

debug をドラッグ&ドロップすると
msg.payload となるので

これを
テスト
とワイヤーでつなぐ

なお
つなげるところを間違えたら
ワイヤーをクリックし
delete キーで消すことができる

今回はテストと
Amazon Echo Hub をつなげるときに
ワイヤーを間違えて設定したので
これを修正した

つなげることができたら
デブロイをクリック

次に
msg.payload をクリックし
デバッグアイコンをクリック

しかし反応がないため

sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8111

で設定

iptables コマンドについては
iptables – システム管理コマンドの説明 – Linux コマンド集 一覧表

を参考に
ーI オプションでルール追加
–dport は送信先ポート設定
今回は80ポートを送信先にしている
-j で行動の設定
ACCEPTなのでパケットを通している

-A はルールの追加
PREROUTING は
送信先IPをマシン自身のIPへ変換

sudo apt-get install iptables-persistent

でインストール

現在のIpv4ルールを保存しますか?
現在のIpv6ルールを保存しますか?
となるので
はい
を選択

これで

sudo reboot

で再起動後

再度
デバイスを検出すると
Royal Philips Electronics スマートデバイス
として認識された

これで
Amazon Echo に
アレクサ テスト オン
アレクサ テスト つけて
と言っても動作しない

Android の Alexa アプリで見ると
照明として認識されているので

アレクサ 照明 オン
アレクサ 照明 オフ
とすると反応した

これで反応するようにはなったので
次に
Node-RED でのラズパイコマンドを実行

機能のところにある
exec をドラッグ&ドロップ

テストから
exec までをワイヤーでつなぐ

execをダブルクリックし
コマンドに
sh /home/pi/test.sh
として
完了をクリック

デブロイをクリック

次にラズパイで

vim test.sh

でファイルを作成し

if [ $1 = "on" ]
then
    echo "ON" >> /tmp/test.txt
elif [ $1 = "off" ]
then
    echo "OFF" >> /tmp/test.txt
fi

として保存

これで
アレクサ 照明 つけて
とすると
/tmp/test.txt

ON
と書き込まれる

確認したいのなら

cat /tmp/test.txt

とすればファイルの中身を見ることができる

なお
Alexa アプリで
文字化けしていたデバイス名を
テスト
と変更すれば
アレクサ テスト つけて
でも反応するようになった

ラズパイ3で Google カレンダー取得

ラズパイ3で Google カレンダー取得

Google Calenderの予定をPython3から取得する


Raspberry PiでGoogle Calendarの予定を読み上げさせる

Google Calendarの予定に応じてRaspberryPiに処理をさせる(その1)

Raspberry PiとGoogle カレンダでGoogle Homeにゴミの日を教えてもらう


参考に

まずはセットアップ
Google Calendar APIのPython Quickstart

を参考に行う

Enable the Google Calender API
をクリック

どのプラットフォームか聞かれるので
とりあえず Desktop app にして
CREATE をクリック

認証に必要な情報がでるので
DOWNLOAD CLIENTCONFIGURATION
をクリックし
json ファイルをダウンロード

終わったら
DONE をクリック

次にダウンロードしたファイルを
ラズパイ3にコピーする

scp credentials.json  pi@192.168.1.4:/home/pi/

次にラズパイ3で必要なライブラリのインストール

sudo pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

次に認証のためのスクリプトの取得

wget https://raw.githubusercontent.com/gsuitedevs/python-samples/master/calendar/quickstart/quickstart.py

次に認証をブラウザで行うことになるので

【ラズベリーパイ(ラズパイ)】ラズパイをスピーカーにもっとも簡単に接続する方法!

を参考に
VNCで設定を行う

sudo raspi-config

5 Interfacing OPtions を選択

P3 VNC を選択

はい を選択

設定できたら
Finish を選択

./VNC-Viewer-6.20.113-Linux-x64

でVNC Viewer を起動

使い方に関しては
Raspberry Pi(ラズパイ)をSSHとVNC設定してリモート接続してみた!【Windows10】

を参考に

IPアドレスを入力

ユーザ名 pi
パスワードはログインパスワードを入力し
OK をクリック

これでリモートデスクトップが表示されるので
端末アイコンをクリック

python quickstart.py

しかし

Traceback (most recent call last):
  File "quickstart.py", line 20, in <module>
    from googleapiclient.discovery import build
ImportError: No module named googleapiclient.discovery

となってしまう

googleapis /google-api-python-client

を見ると
virtualenv が必要らしい

pip install virtualenv

でインストール

virtualenv google_calender

で仮想環境を作成

source google_calender/bin/activate

で仮想環境を有効化

pip install google-api-python-client

の後に

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

を実行したが

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))': /simple/pytz/

と同じようにでてくる

仕方がないので
ラズパイ3での認証はやめて
Ubuntu で認証することに

Google Calenderの予定をPython3から取得する

を参考に

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

で必要なライブラリのインストール

Enable the Google Calender API をクリックし
API Console をクリック

これで API の設定画面になるので
OAuth 2.0 クライアントIDの
ダウンロードアイコンをクリックし
ダウンロードしたファイルを
credentials.json
へ変更

あとは

vim quickstart.py

でファイルを作成

from __future__ import print_function
import datetime
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']

def main():
    """Shows basic usage of the Google Calendar API.
    Prints the start and name of the next 10 events on the user's calendar.
    """
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('calendar', 'v3', credentials=creds)

    # Call the Calendar API
    now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
    print('Getting the upcoming 10 events')
    events_result = service.events().list(calendarId='primary', timeMin=now,
                                        maxResults=10, singleEvents=True,
                                        orderBy='startTime').execute()
    events = events_result.get('items', [])

    if not events:
        print('No upcoming events found.')
    for event in events:
        start = event['start'].get('dateTime', event['start'].get('date'))
        print(start, event['summary'])

if __name__ == '__main__':
    main()

で保存

python quickstart.py 

を実行すると認証画面になる

最後のほうで
このアプリは 確認されていません
とでるが

https://eguweb.jp/gas/this-application-has-not-been-confirmed
を参考に
承認作業を行えばOK

これで
token.pickle
が作成されるので

Google カレンダーに予定を追加し

python quickstart.py 

を実行すると
最新10件まで Google カレンダーの予定を取得できる

あとは
token.pickle
credentials.json
をラズパイ3へ scp で転送する

scp token.pickle pi@192.168.1.4:/home/pi/
scp credentials.json  pi@192.168.1.4:/home/pi/

次に
天気予報情報・Googleカレンダーの予定をpythonで取得する方法 on Raspberry Pi/Mac

を参考に
ラズパイ3で

wget https://raw.githubusercontent.com/karaage0703/karaage-echo/master/get_gcal_schedule.py

でファイルを取得

python get_gcal_schedule.py

を実行したけど

Traceback (most recent call last):
  File "get_gcal_schedule.py", line 7, in <module>
    from oauth2client import client
ModuleNotFoundError: No module named 'oauth2client'

となるので
raspberry piでGoogleカレンダー取得スクリプトのセットアップ

を参考に

sudo pip install --upgrade oauth2client --ignore-installed six 

でインストール後

再度実行しても

/home/pi/.pyenv/versions/3.6.10/lib/python3.6/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access /home/pi/.credentials/calendar-python-quickstart.json: No such file or directory
  warnings.warn(_MISSING_FILE_MESSAGE.format(filename))
Traceback (most recent call last):
  File "/home/pi/.pyenv/versions/3.6.10/lib/python3.6/site-packages/oauth2client/clientsecrets.py", line 121, in _loadfile
    with open(filename, 'r') as fp:
FileNotFoundError: [Errno 2] No such file or directory: 'client_secret.json'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "get_gcal_schedule.py", line 91, in <module>
    get_schedule()
  File "get_gcal_schedule.py", line 60, in get_schedule
    credentials = get_credentials()
  File "get_gcal_schedule.py", line 45, in get_credentials
    flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
  File "/home/pi/.pyenv/versions/3.6.10/lib/python3.6/site-packages/oauth2client/_helpers.py", line 133, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/home/pi/.pyenv/versions/3.6.10/lib/python3.6/site-packages/oauth2client/client.py", line 2135, in flow_from_clientsecrets
    cache=cache)
  File "/home/pi/.pyenv/versions/3.6.10/lib/python3.6/site-packages/oauth2client/clientsecrets.py", line 165, in loadfile
    return _loadfile(filename)
  File "/home/pi/.pyenv/versions/3.6.10/lib/python3.6/site-packages/oauth2client/clientsecrets.py", line 125, in _loadfile
    exc.strerror, exc.errno)
oauth2client.clientsecrets.InvalidClientSecretsError: ('Error opening file', 'cl

となる

このため
一度 ubuntu で
google_calender ディレクトリを作成し
ここで作業

別ディレクトリを作成したのは
quickstart.py がすでにあるので
別のファイルを作りたいため

vim quickstart.py

でファイルを作成

from __future__ import print_function
import httplib2
import os

from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage

import datetime

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/calendar-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/calendar.readonly'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Calendar API Python Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.

    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.

    Returns:
        Credentials, the obtained credential.
    """
    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'calendar-python-quickstart.json')

    store = Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: # Needed only for compatibility with Python 2.6
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials

def main():
    """Shows basic usage of the Google Calendar API.

    Creates a Google Calendar API service object and outputs a list of the next
    10 events on the user's calendar.
    """
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('calendar', 'v3', http=http)

    now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
    print('Getting the upcoming 10 events')
    eventsResult = service.events().list(
        calendarId='primary', timeMin=now, maxResults=10, singleEvents=True,
        orderBy='startTime').execute()
    events = eventsResult.get('items', [])

    if not events:
        print('No upcoming events found.')
    for event in events:
        start = event['start'].get('dateTime', event['start'].get('date'))
        print(start, event['summary'])


if __name__ == '__main__':

で保存し

cp ../ダウンロード/client_secret_354559203980-pd3t3vum75cc19ihvj6pgttqasf8npbd.apps.googleusercontent.com.json client_secret.json

でダウンロードしたファイルを
client_secret.json
として保存

あとは

python quickstart.py

を実行すればブラウザが立ち上がり認証画面になる

詳細をクリックし

Project Default Service Account(安全ではないページ)に移動
をクリック

許可をクリック

許可をクリック

これで ubuntu で
calendar-python-quickstart.json
が生成されるので

scp /home/snowpool/.credentials/calendar-python-quickstart.json    pi@192.168.1.4:/home/pi/.credentials/


ラズパイ3のディレクトリにコピー

これでラズパイ3で再度

python get_gcal_schedule.py

を実行すれば

get_gcal_schedule.pyが正常に動作する

あとは予定の読み上げ

Raspberry PiでGoogle Calendarの予定を読み上げさせる

では

python get_gcal_schedule.py | aquestalkpi/AquestalkPi -f - | aplay #pythonの出力結果をaquestalkpiにパイプし、それをさらに、aplayにパイプ

で読み上げていた

aquestalkpi は個人で非営利なら無料らしい
オプションなどについては
それ、ラズパイでつくれるよ——日本語を喋らせる

を参考に
-f オプションで
読み上げるテキストファイルを指定している

sudo bluetoothctl 
connect 6C:56:97:3A:52:98

を実行し Amazon Echo へ接続

ctrl + d で抜けて

jtalk.sh

でファイルを作成し

#!/bin/bash
tempfile=`tempfile`
#option="-m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice \
option="-m /usr/share/hts-voice/mei/mei_normal.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic 
-ow $tempfile"
#echo "$1" | open_jtalk $option
python get_gcal_schedule.py | open_jtalk $option
#aplay -q $tempfile
aplay  -D bluealsa $tempfile
rm $tempfile

として保存

./jtalk.sh

を実行すれば
予定があれば読み上げ
ないのなら
今日の予定はありません
と Amazon Echo で音声が流れるようになる

ラズパイ3 Node-RED セットアップ

ラズパイ3 Node-RED セットアップ

Raspberry PiにおけるNode-REDの活用について

AmazonEcho (Alexa) と RaspberryPi を連携して声だけでPS4を操作する

Amazon EchoをRaspberry Piのワイヤレス音声認識マイク&スピーカとしてミクさんの声で喋らせたり家電制御(リモコン制御)する方法

を参考に
Node-RED を導入

wget https://git.io/noderedlinux

でインストールスクリプトダウンロード

bash noderedlinux

を実行

This script will remove versions of Node.js prior to version 7.x, and Node-RED and
if necessary replace them with Node.js 12.x LTS (erbium) and the latest Node-RED from Npm.
 
It also moves any Node-RED nodes that are globally installed into your user
~/.node-red/node_modules directory, and adds them to your package.json, so that
you can manage them with the palette manager.
 
It also tries to run 'npm rebuild' to refresh any extra nodes you have installed
that may have a native binary component. While this normally works ok, you need
to check that it succeeds for your combination of installed nodes.
 
To do all this it runs commands as root - please satisfy yourself that this will
not damage your Pi, or otherwise compromise your configuration.
If in doubt please backup your SD card first.
 
Are you really sure you want to do this ? [y/N] ? 

となるので
y で Enter

Would you like to install the Pi-specific nodes ? [y/N] ? 


y で Enter

なお N にすると
標準的な Node-RED となる
もし N にしても再度

bash noderedlinux

を実行すれば選択できる

次に Node-RED の起動

node-red-start 

これで
/home/pi/.node-red/
配下に各種設定ファイルが導入される

Node-RED の停止は
Ctrl + c でログ出力を止めて

node-red-stop 

で停止

ログの確認は

node-red-log

でできる

ログは tail形式で最新のログを順次表示するので
ctrl +c で停止できる

なお自動起動には
systemd スクリプトで設定をする

sudo systemctl enable nodered.service

で自動起動

自動起動解除は

sudo systemctl disable nodered.service

自動起動状態の確認は

sudo systemctl status nodered.service

なおNode-REDの設定を変更した場合

node-red-restart

で再起動する必要がある

次にFlow Editor のログインの画面の設定

Raspberry Pi上のNode-REDにパスワードを設定するスクリプト

を参考に

wget https://git.io/nrpiadminpass.sh

でスクリプト取得

bash nrpiadminpass.sh 任意のパスワード

でパスワードを設定

その後

node-red-restart 

で設定を反映

これで
Ubuntu で
Firefox や Chrome などで
http://raspberrypi.local:1880/
へアクセスすると
ログイン画面になるので
ユーザ名 admin
パスワードは設定したパスワード
でログインできるようになる

次に FlowEditor のURL変更

vim .node-red/settings.js

で設定を開き
94行目の

 //httpAdminRoot: '/admin',

 httpAdminRoot: '/admin',

というようにコメントアウトを削除

その後

node-red-restart 

で設定を反映

これで
http://raspberrypi.local:1880/admin/
へアクセスすると
ログイン画面になる

これで Node-RED のセットはできたので
次回は Node-RED Alexa Home Skill Bridge の設定