SSブログ
前の10件 | -

ESXIのパッチ適用とドライバ更新 [ESXI]

ESXIでパッチ適用とドライバ更新を同時に行う場合、以下のコマンドで行う。

esxcli software vib install -d <zip> -d <zip>

nice!(0)  コメント(0) 

alexaスキルから自宅サーバー経由でデバイスを動作させた時のメモ [QNAP]


Pythonの勉強を兼ねて、Alexaスキルから自宅サーバーを経由でデバイスを動作させるプログラムを作成した。

そのときの手順と参考にしたページのブックマーク。

    

    

1.操作したいデバイスのI/F仕様(API)を調査

   デバイスとスマフォのメーカー製アプリの通信をWireSharkでキャプチャして、

   I/F仕様を調査した。

   【構成】

    デバイス <= 無線 => AP <= 有線 => Hub(GS108Tv2)

                                                         ||

                                                         += ミラー元 => AP  <= 無線 => スマフォ

                                                         ||

                                                         += ミラー先(Probe) => PC(WireShark)

                                                   

    ※廃棄予定のAPがあったため、それを使用した。

      Hub(GS108Tv2)は、前に買ってあったもの(テレビ周辺で使用していたもの)を使用した。

    

    

2.デバイスを制御するプログラムをPCで作成

    調査した結果、HTTPで通信していたので、自作プログラムによる制御が可能と

  判断して、プログラムを作成した。

    プログラムは、Pythonで作成。(Pythonの勉強のため)

    

    

3.Debian10のVM作成

    debian.jpでインストールDVDをダウンロードして、インストールした。

    
    ▲参考

    ・nfsサーバーのインストール


    ・viで十字キーがきかなかった。


    ・WindowsでNFSサーバーをマウント


    
    

4.dginx + uWSGI + Djangoのインストール・初期設定

    各ソフトをインストールし、HTTPでアクセスすると文字列が出るところまで確認

    

    ▲参考







    

    

       ※今回の構成では使用しなかったけど、なんかのため



    
    

    ▲はまった箇所

    ・uwsgiのiniファイル

      wsgi-fileは、{プロジェクトのサイトディレクトリ}/wsgi.pyを指定

    
    
5.HTTPS化(証明書作成)

    最初は、おれおれ認証のつもりだったが、

    無料で作成できるところがあるのでそちらを使用した

      

    ▲参考




  

6. Django RESTful

     AlexaとDebian間のI/FをRESTfulで行うため、当該ソフトをインストールした。

     その後、(lambdaがpost/getした際に呼ばれる)モジュールを作成

       

     ▲参考




  

  

     ▲はまった箇所

     ・csrfがらみ(「AttributeError: 'class name' object has no attribute 'COOKIES'」)



  

7.Alexa Home Skill (lambda)

    AWSのlambda、Alexa Skills Kit管理コンソールでのスキル作成を行った。

  

    ▲参考






    <レイヤー関連>



    ▲注意点等

    ・requestsをアップロードを行う場合、Lambdaのコーディングを行う前に行った方が

      よいかも

   (アップロード時にLambdaのソースファイルが削除されるかもレイヤーに登録すれば大丈夫 )

    ・alexaアプリでのテスト時のログは、awsの「CloudWatch」-「ログ」

        -「ロググループ」で確認できる

    ・Alexa Skills Kit(amazon.com)のアカウントを作成した場合、作成後、

      一度ログインし直して、個人情報を入力してから使用開始したほうがいいかも。

    ・Alexaのスキルは、一度インストールしたら削除出来ない仕様ぽい

    ・状態を教えてもらう機能(【デバイス名】の【コントローラ名】の状態を

   教えて?等)は、対応していないものもあるっぽい。

       APIマニュアルに記載されていても出来ないぽい。

      (ModeControllerの状態レポートに記載されている発話でいっても、

       「その操作に対応していません」と返ってくる。

        ダイソンの扇風機も対応していないぽいので、あきらめた)

    ・TemperatureSensorは、Alexaアプリ内で設定画面が表示されなくなるので

   使用するのをやめた。他の案を考えよう。

  

一通り作成後、β版(限定公開)の期限が三か月であるに気が付いた。

三か月後に限定公開を一度終了して、再度、限定公開すればいいのかな?

自分のアカウントは、そのまま使用し続けられるのかな?

違う方法を考えよう。。。


nice!(0)  コメント(0) 

AppCenterでPython3のインストール時に行うこと [QNAP]


.profileを作成し、


. /etc/profile.d/python3.bash

 

を入力する


(参考)



nice!(0)  コメント(0) 

+Style PS-IRC-W01の初期設定時に悩んだこと [スマートマルチリモコン]

1.デバイス名を付ける時に気をつけること

(1)”△△の〇〇”とつけない

・アレクサアプリで”△△”をグループ名に設定し、デバイス名を”△△の〇〇”とつけると”△△”をグループ名、”〇〇”をデバイス名と解釈する可能性がある。

 例えば、+Styleアプリでデバイス名:”リビングのエアコン”とつけて、アレクサアプリでグループ名:”リビング”とつけた後、”アレクサ、リビングのエアコンをつけて”と言うと”リビング”をグループ名と解釈される。

 その結果、アレクサ内で”リビングをつけて”と言ったと思われ、”リビング”グループに属する全デバイスの電源がつく。


 ※ok googleで”リビングのエアコンをつけて”と言うと”リビングのエアコン”のみがつく


・グループ名をカタカナ表記を使用するのであれば、漢字表記+デバイス名でもいいかも。

 例えば、ブループ名に”リビング”とする場合、デバイス名に”居間のエアコン”とか。



2.シーン作成時に気をつけること

(1)デフォルトの名称をそのまま使用しない(デバイス名称が入っていない名称(シーン名)をつける)

デフォルトにつく名称には、デバイス名が入っている。そのため、そのまま使用すると”〇〇から応答がありません”とアレクサに言われる。(”〇〇から応答がありません”は、取説の7.2 スマートスピーカー発話例に記載していない言葉を言った場合にアレクサから返ってくるぽい)


例えば、テレビの入力切替を押すシーンを作成した場合、デフォルトにつく”(テレビ名)入力切替”の名称から”入力切替”に変更する。(アレクサに言うときは、”アレクサ、入力切替をつけて”と言う)




(2)”アレクサ、暖房消して”のシーンを作成した時に発生する変な現象

①”アレクサ、暖房つけて”と言うとエアコンの暖房がつく(想定している動作)

②”アレクサ、暖房けして”と言うとそんな動作知らない的なことを言う(想定している動作)

③+Styleアプリで”暖房消して”との名称の暖房が停止するシーンを作成する

④”アレクサ、暖房消してをつけて”と言うとエアコンの暖房が停止する(想定している動作)
⑤”アレクサ、暖房つけて”と言うとなぜかエアコンの暖房が停止する(?な動作)



nice!(0)  コメント(0) 

固定IPアドレスの設定 [Debian]

固定IPアドレスに設定した際にDNSサーバーの設定方法を忘れたので、メモ。

  • IPアドレス(/etc/network/interfaces)

    allow-hotplug eth0

    iface eth0 inet static

        address ***.***.***.***

        netmask 255.255.255.0

        network ***.***.***.0

        broadcast ***.***.***.255

        gateway ***.***.***.***  ← デフォルト

        dns-nameservers  ***.***.***.***  ← "apt-get install resolvconf"実行後設定する


VNCのインストール [Debian]

1.インストール

  # apt-get install vnc4server

2.初期設定

VNCで入りたいユーザーでログインし、

# vnc4server

を実行する。

パスワードを聞いてくる。(確認込みで2回) 

# vi ~/.vnc/xstartup 

# unset SESSION_MANAGER

# exec /etc/X11/xinit/xinitrc

の先頭の#をはずす 

 3.自動起動の設定

(1) /etc/init.d/vncserverを作成

内容は、以下のとおり

#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          vncserver
# Required-Start:    networking
# Default-Start:     2 3 4 5
# Default-Stop:      0 6
### END INIT INFO

PATH="$PATH:/usr/X11R6/bin/"

# The Username:Group that will run VNC
export USER="ユーザー名に変更"
#${RUNAS}

# The display that VNC will use
DISPLAY="1"

# Color depth (between 8 and 32)
DEPTH="16"

# The Desktop geometry to use.
#GEOMETRY="<WIDTH>x<HEIGHT>"
#GEOMETRY="800x600"
GEOMETRY="1024x768"
#GEOMETRY="1280x1024"

# The name that the VNC Desktop will have.
NAME="vnc-server"

OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"

. /lib/lsb/init-functions

case "$1" in
start)
log_action_begin_msg "Starting vncserver for user '${USER}' on   localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
;;

stop)
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
;;

restart)
$0 stop
$0 start
;;
esac

exit 0
   
  

(2)実行権限の付加

# chmod +x /etc/init.d/vncserver

(3)自動起動の設定

#  insserv -d vncserver

 

なにか大事なことをメモるのを忘れているような・・・

参考: 
 
(ランレベルに関して)

Eclipsのインストールメモ [java]

・Eclipse本体

http://www.eclipse.org/downloads/ 

・eclipse日本語化

http://mergedoc.sourceforge.jp/

本体のみは、Pleiades All in One の下にある。

 eclipse.iniの最後に下記行を追記

 -javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

・Android SDKは、以下を参照(英文だが、感覚でなんとなくわかると思う) 

http://developer.android.com/sdk/eclipse-adt.html#installing 


localhostでTCP/IPのパケットをキャプチャする方法 [プログラム]

Wiresharkを使用して、同一PC内での通信パケットがキャプチャ出来なかったので、
キャプチャする方法のメモ

・Wiresharkを使用する前に以下のコマンドを実行
route add [自分のIPアドレス] [デフォルトゲートウェイのアドレス]

・Wiresharkを終了後
route delete [自分のIPアドレス]





ソケット通信のプログラムを書いていて思ったことのメモ書き [プログラム]

久しぶりにTCP/IPのプログラムを書いていて考えたこと。

BSDソケットを使用する場合は、ioctl(winsock:ioctlsocket)で
非同期(FIONBIO:1)にして、タイムアウト付きでselectすれば、
プロセスが死んだときにブロッキングしたまま死ぬことは、
取りあえず、避けられる。
スレッドを使用したプログラムなんかだと、何かのタイミングで
通信を終了したい場合にこの方法が有効かと思う。
※ スレットの終わり方は、基本的に他殺ではなくて、自滅だと思うので・・・

winsockでも、スレッドを作って↑の方法で行うのも可能。
しかし、winsockの場合、selectは非推奨らしい。
WSAAsyncSelect(or WSAEventSelect)を使って欲しいらしい。

WSAEventSelectを使用する場合でも、WSACreateEvenとWSAEventSelectして、
WSAWaitForMultipleEventsで待て、WSAEnumNetworkEventsでイベント要因を
取得すればいいだけだから、まあ、ちょっと手間だけどselectと同じ使い方が出来ると思う。
関係ないけど、WSACreateEvenしたら、WSACloseEventしないといけないな。
※ 実際にWSAEventSelectを使用したプログラムを作成したことは、無いけど・・・ 

ちょっと気になったのが、WSAAsyncSelect。
hWndをパラメータに渡してあげなければいけない。
まあ、普通にVC++(MFC)の時は、CDialogかCMainFrameなどのm_hWnd、
Win32APIの時は、CreateWindowなどのHWNDを渡せば良い話なのだが。
(機能や目的別にクラスの構成を考えた時)ソケット通信を行うクラスでも、
ウィンドウを作成しなければいけなくなってしまう。
なんか、通信することが目的なのに、ウィンドウを作成しなけばいけいことに、
なんか、もやもやとしたものが心に残る。
(まあ、通信ログを表示するウィンドウを作成すると考えればいいのだけど。 非表示でも、いいんだし・・・。
 でも、しっくりこない)
オブジェクト指向をもっと勉強すれば、しっくりくる方法があるのかな。

あと気になるのが、acceptして、forkして、子プロセスでrecvなり、sendなりすること。
仮に、チームもしくは、会社のコーディング規則でオブジェクトの動的生成が駄目な場合、
どうすればいいのだろう。まあ、そうなると、予めスレッドを作成して、
スレッド間通信でソケットのfd(ハンドル?)をやり取りするのかな。
(今のところ、オブジェクトの動的生成NGと言われたことはないけど)


タグ:prog
前の10件 | -


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。