Top image

Perl Monk

主にPerlとRaspberryPiの個人的技術研鑽


[Node-RED]配列の要素を取り出しながらループ

2020/04/27 20:00
category:サーバ全般

配列の要素を取り出しながらループ

msg.payload.shift() で配列の先頭を取り出す

payload.length で配列の長さを取得

でループさせれば出来ます。

以下フロー

> read more


[Node-RED]SeleniumでWEBスクレイピング ~Node-REDで操作編~

2020/04/25 12:00
category:サーバ全般

前回でサーバ側の準備が整ったので、実際にNode-RED側から操作してスクレイピングします。

Node-REDにSeleniumノードを追加したらポチポチしていきます。

Remote URLはサーバを指定します。同一サーバであれば

http://localhost:4444/wd/hub

になりますね。

であとは、実際のWEB操作をなぞって配置していきます。

テキストボックスやボタンなどは、XPath指定の方が楽だと思います。

Firefoxでの取得方法は

・F12を押おすと、画面下に開発モード用の画面が開きます。

・タブでインスペクタを選択、HTML内のソースをポチポチすると実際の画面で該当箇所がわかるので

 選択したい項目まで移動します

・右クリックのコピー → XPath(X) を選択すると、クリップボードにXPathの値が入ります。

・F12押して閉じる

で取得できます。

以下のフローは

【Seleniumサーバに接続する】~【IDとパスワードを入力してボタンを押す】~【移行した先の該当テキスト欄をデバッグに出力】~【画面キャプチャを行う】~【ブラウザを閉じる】~【キャプチャファイルを添付としてメールを送信】

【メール送信の完了を確認】~【キャプチャファイルを消す】

までの一連の操作です。

Seleniumのノードサンプル

VNCなどでサーバ側にGUIログインしてると、実際にブラウザ開いて移行して閉じるまでの

動作確認が視認できるので面白いです。

以下フロー

> read more


[Node-RED]SeleniumでWEBスクレイピング ~Serverインストール編~

2020/04/15 20:00
category:サーバ全般

Node-REDでそろそろWEBスクレイピングをしたいと思います。

これができると、RPAに一歩近づいた気分になれます。

あまり選択肢はなく、Seleniumを使うのがよさそうのなので実験してみました。

が、Seleniumサーバ周りをインストールするのがちょっとめんどくさそうなのでDockerでデプロイする方法がよさそうでした。

Selenium構成イメージ

~ Dockerインストールは略 ~

docker run -d -p 4444:4444 -p 5900:5900 -v /dev/shm:/dev/shm selenium/standalone-firefox-debug

以上・・・! 上記はFirefoxのパターンの為、Chrome等の場合は別のモノを指定します。

https://github.com/SeleniumHQ/docker-selenium

debugを使うと、x11vncが立ち上がってる様子なのでVNCビューア等で5900を指定してログインする事が可能です。

あとは、Seleniumのサーバとブラウザを接続するドライバ、ブラウザが入っています。

GUIにログインすると、実際の操作しているブラウザの挙動が確認出来ます。

解像度を変更するには、Docker側の環境変数用ファイルを修正します。

/var/lib/docker/containers/コンテナID/config.v2.json

SCREEN_WIDTH ⇒幅

SCREEN_HEIGHT ⇒高さ

これでサーバ側の準備は整いました。


[Node-RED]フォームを作り、Postで送信し受け取って表示させる

2020/04/02 20:00
category:サーバ全般

HTML編

Postで送信されたデータは、

msg.payload.【postデータの名前】

で簡単に受け取れます。

まずはシンプルなところから。

フォームを作り、Postで送信し受け取って表示させる

以下フロー

> read more


[Node-RED]SSHで自動ログインしてコマンドを叩き、出力結果をWEBで表示したい編

2020/03/23 20:00
category:サーバ全般

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2020/4/27 追記

node-red-contrib-ssh-v2-reconnection

ですが、2個以上設置した時点で挙動がおかしいのでやめました。

現状は直接execノードとsshpassコマンドで実装しています。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

そしていきなりハマった。すでにくじけそう。

まず、追加ノード:node-red-contrib-ssh-v2-reconnection を利用してみました。なんか他のがうまくいかなかったぽいので。

実行するコマンドはmsg.payloadに入れて渡せばいいんですが、実行後の出力結果を取る情報に関しては全く記載がない。

Usage

Input: msg.payload has to contain the command.

Output: none

て書いてある。none?! どういう事なんだぜ・・・。ノードのソースコードをみたら、msg.stdoutで取れそうなのでdebugで確認した所、恐らくいけそうでした。

ただ、その出力結果をWEBで表示できない。

色々調べたところhttp getが実行された場合、 .req と . res というパラメータができ、それを元にhttpレスポンスを返す仕組みぽいです。これが消えると No response object というエラーがでてうまくいきません。

Node-REDでSSH①

SSHノードを経由するとこれが消えてしまうので、一旦フローの変数に入れてSSHを実行し、.reqと.resを戻してからhttpレスポンスするという荒業でなんとかできました。

もうちょっとスマートなやり方がある気がしてならないけど、いかんせん情報が少ない。これでいいのかすらわからない。Javascriptよく知らんし。

Node-REDでSSH②

まあまだ触り始めただけなので、空いた時間で進めていこうと思います。

以下フロー

> read more


[Node-RED]CentOS7にインストール編

2020/03/17 21:00
category:サーバ全般

社内の業務をそろそろできるところから自動化していきたいのですが、UiPathはあまりうちの会社にはマッチしなかったです。お役所仕事とかにはとてもいいかもしれないけど。

まあ自動化の前に、小さい単位で効率化が必要だと思ってます。

とあるRPAサービスがあって、ベースはNode-REDで動いていました。まずはOSSのNode-REDで出来る範囲で理解を深めようかと思います。

今回はインストール編です。

(以下全てrootにて)

〇最新のnodejsを指定してインストール※今回は13入れました。

curl -sL https://rpm.nodesource.com/setup_13.x | bash -
yum install -y nodejs

〇epel経由でnpmをインストール

yum install epel-release
yum install npm --enablerepo=epel

〇node-redをインストール

npm install -g node-red

〇起動確認

node-red

で起動し、

http://IPアドレス:1880

で接続できる事を確認、CTRL+Cで抜ける。

〇systemctlに登録します。

githubに転がっているものはraspi用だったりしたので、そのまま使えませんでした。

その為、ExecStart行は実際にいれた環境に合わせる必要があります。

事前にターミナルにて、

/usr/bin/node --max-old-space-size=128 /usr/lib/node_modules/node-red/red.js -v

が起動できる事を確認しても良いかもです。

vi /etc/systemd/system/node-red.service
[Unit]
After=syslog.target network.target
Documentation=http://nodered.org/
[Service]
Environment="NODE_OPTIONS=--max-old-space-size=128"
Environment="NODE_RED_OPTIONS=-v"
ExecStart=/usr/bin/node $NODE_OPTIONS /usr/lib/node_modules/node-red/red.js $NODE_RED_OPTIONS
WorkingDirectory=/root/.node-red/
User=root
Group=root
Nice=10
SyslogIdentifier=Node-RED
StandardOutput=syslog
Restart=on-failure
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target

〇systemctlのdaemon-reloadと起動確認

systemctl daemon-reload
systemctl start node-red
systemctl status node-red

〇完成!

Node-RED画面

ここからがスタート・・・!


Nixie Version2

2020/03/16 20:00
category:RaspberryPi

ぱっと見、Nixie管時計です。

本サイトが稼働しているサーバが、これなのです。

Nixie管時計

Ver1は音声認識がなく、だんだんと後から改造していった結果マイクを外につけていたので、一度ガワを全部作り直してマイクも内臓してみました。

中味は色々なモノを詰め込んでいて、数年かけてじっくりプログラミングしています。

こんなものが入っています。

Nixie管時計内部

どういったものが稼働しているかというと

・WEBサーバ

・ラズパイ制御で動くNixie時計

・AnyEventによるイベント駆動プログラム

 ┣ 音声認識による各種イベント操作

 ┣ 外出時の動体検知によるカメラ撮影

 ┣ 赤外線による照明操作

 ┣ 温度・湿度・気圧の情報測定

 ┣ 地震情報取得及び音声通知

 ┣ 天気情報取得

 ┣ 時報お知らせ

 ┣ 目覚ましアラーム

 ┣ 一定以上の温度になったらファンで冷却

 ┗ etc...

がこの中でうごいてます。スマホにTermuxを入れ、一部機能はスマホから操作できるようにもしてあります。

Nixie管は こちら で作成させて頂いたものを使って、Perlで作り直しました。Nixie管には寿命があるので、家にいない時はOFFにするリレー回路も入れて、Nixie管の寿命が極力長くなるように努めます。

なぜならもうNixie管は製造してないから。今のストックが無くなったら絶滅するでしょうね。


検索パフォーマンスの現状

2020/03/04 20:00
category:サーバ全般

ATL

ATL

地道・・・っ!


Linuxでユーザ単位にてSSHログインのIPアクセス制限をかける方法と注意点

2020/02/20 20:00
category:サーバ全般

/etc/hosts.allowではユーザ単位で細かく制限をかけられないので、pamを利用して制限します。

> read more


ラズパイのMicroSDカードが逝って更新してませんでした。

2020/02/17 20:00
category:RaspberryPi

無調整で3年ぐらい運用してたんですが、やっぱり壊れました。中途半端に壊れたので日記の更新もできません。

稼働中はファイルの書き込みや更新等はできるんですが、再起動するとすべてが元に戻ります。

inodeの管理領域あたりが壊れたんかしら。

MicroSDの寿命を延ばす方法を考えてみます。

> read more


< Prev Page
[ page:4 ]
Next Page >