Skip navigation
All Places > All Things PI - Ask, Discuss, Connect > Japan PI Square > Blog > Author: Jerome Lefebvre
1 2 Previous Next

Japan PI Square

19 Posts authored by: Jerome Lefebvre

GitHub - JeromeLefebvre/SilentInstaller: OSIsoftのサイレントインストールの例のページに下記にあるファイルをダウンロードできます。

事前

PI Systemの管理者は、多くのマシンにPIの製品をインストールしなくてはならず、多くの場合、自動インストール(サイレントインストール)を利用すると、効率よく作業できます。 そのサイレントインストールに使用するsilent.iniの書き方は、資料がとても少ないため、今回、その例を作成いたしました。

作業と環境の条件

今回はPI Buffer SubsystemはインストールせずにPISDK201664ビットのみをサイレントインストールにてインストールします。 (注意:平常は32ビットと64ビットの両方をインストールします。短い例を作成のため、64ビットのみのサイレントインストールさせて頂きます。)

環境の条件:

  1. PI-TestPI-Mainという二つPI Data Archiveがあり、規定サーバーはPI-Mainになり、「Production」というPI-Mainの別名があります。
  2. Domainositestです。
  3. PI Data Archiveとの接続は5450の規定ポートを利用します。
  4. PI Buffer Subsystemをインストールしない。
  5. 事前条件の.Net 4.6がすでにインストールされているものとします。

KST_INI_FILEの準備

KST(Known Server Table)はこのマシンに登録されているPI Data Archiveの一覧リストになります。 PI SDKにインストールすると、このリストにいくつかのPI Data Archiveを登録できます。 登録するために、「KST_INI_FILE」の作成が必要です。

KST_INI_FILE

[NUM_SERVERS]
; PI Data Archiveの数
NUM = 2
[PI_SERVER]
; それぞれのPI Data Archiveの名前
1 = PI-Main
2 = PI-Test
; PI Data Archiveのネットワークのパス
[PI_PATH]
1 = PI-Main.ositest.com
2 = PI-Test.ositest.com
; ポートを記入したい場合は、[PI_PORT]を使えますが規定の5450ポートの利用しているので、設定の必要がありません。
; 規定のPI Data Archiveは1です。
[PI_DEFAULT_SERVER]
1 = TRUE
; それぞれのPI Data Archiveのアリアスです。
[PI_ALIAS]
1 = Production

SILENT.INI

新規のインストールではSETUPKITNUMSETUPMODULESSETUPMODULESCOMMANDLINEの四つのモジュールがあります。

SETUPKIT

[SETUPKIT]
; インストールの表示名前
; 下記にあるNAMEとDISPLAYNAMEのパラメーターはインストールのログにでます。
NAME = SetupPISDK
DISPLAYNAME = PI Software Development Kit (PI SDK) 2016 64 bit
; サイレントインストールを実行すると下記の四つの設定はすべてTRUEに設定する
SUPPRESSCOMPLETIONMESSAGE = TRUE
SUPPRESSPROGRESSMESSAGE = TRUE
SUPPRESSHEADERMESSAGE = TRUE
SUPPRESSDIALOGS = TRUE

NUMSETUPMODULES

[NUMSETUPMODULES]
; 下記にモジュールの数
NUM=4

SETUPMODULES

setup.exeは、以下のモジュールを使用し、COMMANDLINEの下にリストされている与えられたパラメータを使用してインストーラーを実行します。

[SETUPMODULES]
; 下記の三つのmsiのファイルは事前条件のアプリケーションになります。
1 = MSRuntimes\MSRuntimes.msi
2 = VS2008Redistrib\MSVC9SP1x64Redistrib
3 = VS2015Redistrib\MSRuntimesVS2015u2_x64
;PI SDKの64ビットのインストーラー
4 = pisdk\PISDK_x64.msi

COMMANDLINE

下記の四つのインストーラーではマシンを再起動しないで済むので、 REBOOT=Suppress」と「/norestart」のパラメーターを使い、無駄な再起動が起きないようにインストールします。

[COMMANDLINE]
; MSRuntimes
1 = ALLUSERS=1 REBOOT=Suppress /qn
; 2008 SP1 Runtimes (64-bit)
2 = /q /norestart
; 2015 update 2 Runtimes (64-bit)
3 = /q /norestart
; PI SDK (64-bit)
; KST_INI_FILEのパラメーターはKSTのファイルのフルパスです。
; INSTALLDIRは%pihome64%のフォルダーになります。
4 = ALLUSERS=1 REBOOT=Suppress /qn INSTALLDIR="C:\Program Files\PIPC" IMPORT_KST=1 KST_INI_FILE="c:\kst.ini"

インストーラーを実行します

kst.iniのファイルをKST_INI_FILEに保存し、 PISDK_2016_が展開されたフォルダーにsilent.iniのファイルを入れ替え後に、下記のコマンドを実行します。

     silent.bat -install

実行後、インストーラーの結果が表示されます。 無事にインストールしたかどうか確認します。

 

他の製品のサイレントインストール

PI SDKに含まれているsilent.iniのファイルにはPI Buffer Subsystemなど、他の製品の設定例もあるので、参照になります。

下記のKB(英)もあります。

  1. KB01034 - How to Silently Install OSIsoft Software
  2. 3044OSI8 - How to perform a silent install of PI ProcessBook
  3. 3045OSI8 - How to perform a silent install of PI DataLink

今年の春から、ご要望の多いテクニカルサポートのKBを日本語に翻訳しております。

KB Articlesのサイトにアクセスすると、日本語の記事の一覧が表示されます。

 

追加で翻訳してほしいKBがあれば、ぜひこのブログにコメントしてください!

お客様の要望が多い場合には、次の翻訳対象として扱わせていただきます。

 

その他、KBの日本語の内容につきましても、何かフィードバックやコメント等ございまいたら、

ぜひ本記事に、コメントしてみてください。

    2016年8月2日

    OSIsoftのコミュニティサイト PI Squareのご案内

PI Squareについて

PI Squareは2014年末から運用されているOSIsoftのオンラインコミュニティサイトです。

世界中のPI Systemのユーザー様をはじめとし、OSIsoftのサポートスタッフ、製品開発者なども参加し、PI Systemのユーザー様の参考になるような情報交換の場として提供しています。

 

 

PI Squareのログインについて

OSIsoftのテクニカルサポートサイトでも使用いただいているSSOアカウントでログインします。

 

 

表示言語の設定

PI Squareは日本語でもご利用いただけます。英語で表示される場合は、下記設定を編集してください。

   

Preferences(個人設定)ページの「Language」にて「Japanese」を選択し、画面下部のSaveボタンをクリックします。

 

プライバシー

会社名を公開するかどうかも設定可能です。

プロフィールの編集 > プライバシータブ > 会社: の部分を「あなた自身」とすると、会社名は公開されません。

 

コンテンツの検索

拡大鏡のアイコンをクリックすると、コンテンツの検索が可能です。興味のあるトピックを記入すると自動で検索結果を表示します。

   

    PI Squareがオープンする2014年末以前は、vCampusというコミュニティサイトが運用されていました。そのため、英語のコンテンツが多くあります。興味があるトピックについては英語での検索も一度お試しください。

    今後、日本のユーザー様と一緒に日本語のコンテンツを増やしていきたいと考えています。

 

 

スペースについて

PI Squareにあるコンテンツはスペース(Space)ごとに分けられています。

 

Japan PI Square (日本のお客様向けのスペース)

PI SquareのトップページにあるQUICK LINKSの日本語というリンクから表示可能です。

日本語にてご質問やブログ記事など、投稿していただけるようになっています。

 

 

 

PI Developers Club開発者向けコンテンページ

   

Japan PI Square内のリンクから表示可能です。

AF SDK, PI Web API, PI SQL Framework, PI Visionカスタムシンボル, UFLについて学習できるコンテンツが揃っています。

PI Developers Clubライセンスをご購入いただいた方はこちらで開発言語の勉強ができます。

 

オンライン講座

自分のペースでOSIsoftの製品について学習したい場合は、オンライン講座が利用できます。

Japan PI Square内のリンクから表示可能です。

   

現在はPI DataLinkのトレーニングのみですが、英語版ではPI Vision, PI AF、CBM, 分析などの講座があります。

   

英語版はPI Squareのトップページより、スペース > Learn PIから表示できます。

 

質問方法

PI Square内の情報を確認し、それでもわからないことがあれば、ぜひ質問をしてみてください。 Japan PI Squareから質問できます。

Japan PI Square

   

例えば、海外ではあまり使われていないPI Melsec Interfaceについてはコミュニティー上に情報が少ないため、このインターフェースについて質問をしてみます。

   

質問するボタンをクリックすると、記載した内容がタイトルとなり投稿が編集できるようになります。

質問の詳細も記載します。

   

 

入力が完了したら、投稿するプレイスを決めます。Japan PI Squareから質問すると、デフォルトでJapan PI Squareが入力されています。

 

変更する場合、変更のリンクより、スペース名を入力、または「プレイスを参照」をクリックしてスペース名の一覧を表示し、選択します。

 

開発に関する質問であれば、PI Developers Clubのスペースを選択してください。(日本語であれば Japan PI Squareで構いません)

そのほか、タグを付ける機能もあるので、日本語であればjapaneseなどのタグを付けてください。カテゴリも関連するものを可能な限り選択するのが良いでしょう。

日本語で投稿していただくと、日本語のできるエンジニアが回答することが多くなります。英語でご質問いただければ、世界中の技術者が回答してくれる可能性が高くなります。

たくさんのご利用をお待ちしております。

(This note and the code comments are in Japanese and I do not intend to translate it to English, but the latest version of the code is posted on GitHub. The code should be readable enough that if you ignore all the comments, I believe it would still be a useful (but very brief) intro to using python to make requests against PI Web API.)

PI Web APIの特徴はプログラミングの言語とプラットホームを自由に選べることです。

 

Pythonを使い、PI Web APIのGETのリクエストの例を紹介したいと思います。

更に、テスト環境でよく使われている自己署名証明書についての設定も紹介します。

 

構成:python3 (3.5.0のみテスト)

pipのパッケージ: requests (2.8.1のみテスト)

Requestsについてパッケージのホームページは参考になります。

 

コードの最新版はGitHubに乗せていますので、ご参考ください。

 

■ 基本のコード

import json

import requests
# PI Web APIのリクエストはHTTPSが必要ですが、
# テストの環境では、PI Web APIのサーバーに自己署名証明書しかないことが多いです。
# この場合、HTTPSのリクエストをするとrequestsのパッケージか警告またはエラーが発生します。
# 下記の行は警告を無視するためです。
requests.packages.urllib3.disable_warnings()

# PI Web APIのサーバー名を記入してください。
piwebapi_server = ''
base_url = 'https://' + piwebapi_server + '/piwebapi/'

# PI Web APIにて認証は三種類ありますが、このポストではKerberosについては言及しません。
# Basic認識を使う場合はユーザー名とパスワードを送る必要があります。
# Anonymousを使う場合は下記のように空白でよいです。
user = ''
password = ''

def pi_get_requests(action, parameters={}):
  # pi_get_requestsの関数は変数として:
  # actionにelement、assetdatabasessetなどのController(Method)名か
  #   
  # parametersに"Url Parameters"を設定する

    # verify=Falseのパラメーターは自己署名証明書しかない環境では
    # エラーを発生させないためのパラメーターです。
    response = requests.get(url=base_url + controller,
                            params=parameters,
                            verify=False,
                            auth=(user, password))
    return json.loads(response.text)

# pi_get_requestsを綺麗に出力するため
def pprint(response):
    print(json.dumps(response, indent=4, sort_keys=True))

 

このポストで使用しているpi_get_requestsの構成は、piwebapi/helpのActionの構成を模倣するように設計されています。

 

■使用例

piwebapi/help/controllers/assetserversのページを見るとGet、GetByPathなどのActionsがあります。

 

ヘルプを参照すると、GetByPathのActionについて下記の情報が見つかります。

GetByPath
GET assetservers

URL Parameters

  • path

 

このヘルプから分かることは以下です:

  • Getのリクエストを使う
  • Controllerはassetserversです
  • Parameters(変数)はpathの変数のみがある

 

Pathの変数はAF Serverのパスになります。

# AF Server名を記入してください。
af_server_name = ''
parameters = {'path': r'\\' + af_server_name}
af_server = pi_get_requests('assetservers', parameters)

 

assetserversの他のActionにはGetがあります。

Get
GET assetservers/{webId}

Getの場合はWebIDが必要ですが、上記のaf_serverの変数から取得できます。

pi_get_requestsの第1引数にcontroller名+WebIDを設定し、第2引数のパラメーターは無しとすることでAF Serverの情報が取得できます。

webID = af_server['WebId']
pi_get_requests(r'assetservers/' + webID) == af_server # True

 

上記の例でWebIDを除くとすべてのAF Serverが取得できます。

allServers = pi_get_requests('assetservers')

 

■あるデータベースのエレメントを反復する

 

# piwebapi/help/controllers/assetdatabase/actions/getelementsによると
# あるデータベースのエレメントを収集したい場合は下記の様に収集できます。
# GET assetdatabases/{webId}/elements
af_server = ''
af_database = 'Pumps'
parameters = {'path': r'\\' + af_server + '\\' + af_database}
pump_db_web_Id = pi_get_requests('assetdatabases', parameters)['WebId']


# assetdaabases/{webId}/elementsのURLを作成し、
# エレメントを反復する
pumps = pi_get_requests('assetdatabases\{0}\elements'.format(pump_db_web_Id))


for element in pumps['Items']:
    print(element['Name'], element['TemplateName'])

web_Id))  for element in pumps['Items']:     print(element['Name'], element['TemplateName'])

 

■デバッグの情報

エラーが発生すると、レスポンスのヘッダーなどを見て何かあったと分かるケースが多いので、

pi_get_requestsを下記の様に編集するとこの情報が出力できます。

def pi_get_requests(controller, parameters={}, debug=False):
   # pi_get_requestsの関数は変数として:
   # controllerにelement、assetdatabasessetなどのController(Method)名
   # parametersに"Url Parameters"を設定する

    # verify=Falseのパラメーターは自己署名証明書しかない環境では
    # エラーを発生させないためのパラメーターです。
    response = requests.get(url=base_url + controller,
                            params=parameters,
                            verify=False,
                            auth=(user, password))
    if debug:
        # レスポンスなどを出力する
        print('デバッグのための情報です')
        print('{0: <10} {1}'.format('url:', response.url))
        print('{0: <10} {1}'.format('status:', response.status_code))
        print('{0: <10} {1}'.format('reason:   ', response.reason))
        print('{0: <10} '.format('headers:'))
        for key in response.headers:
            print('     {0: <17} {1}'.format(key + ':', response.headers[key]))
        # print('{0: <10} {1}'.format('text:'), response.text)
    return json.loads(response.text)

 

■セキュリティーについて

コーディングのファイルにパスワードを記入するのは良くないので、下記の様に実行する時にプロンプトを表示するようにもできます。

import getpass
_password = ''
def password():
    if _password != '':
        return _password
    password = getpass.getpass('please type in your password: ')
    return password

requestsのパッケージのSessionの機能も役立つと思います。

 

今後、Update、Deleteなどの例を記載するつもりです。