読者です 読者をやめる 読者になる 読者になる

ほのぼのぼのぼの

ひよっこエンジニアのほのぼの記録

Windows 7 のインストールディスクに Windows Update を適用して初回のアップデートを短縮してみました

概要

Windows のインストールで時間がかかる作業のひとつに、Windows Update の適用があります。 インストールディスクの版にもよりますが、初回は 100~200 個程度の更新プログラムの適用を必要とすることも少なくありません。

今回はインストールディスクに前もって更新プログラムを適用しておくことで、初回の Windows Update を短縮できないか試しました。

具体的には、インストールイメージの wim ファイルへ更新プログラムのロールアップファイルを適用します。

実施環境

対象OS

Windows 7 Professional SP1 64bit

作業PC

更新プログラムのダウンロード

以下の更新プログラムをダウンロードします。

また、IE11へアップグレートする場合は、以下の更新プログラムをダウンロードします。

作業フォルダの準備

ダウンロードしたファイルを作業フォルダにコピーします。今回は作業フォルダをC:\tmpとしました。

今後の作業に合わせて、各ファイルを以下のフォルダへコピーします。

C:\TMP
└─update
    │  IE11-Windows6.1-x64-ja-jp.exe
    │
    ├─iepre
    │      windows6.1-kb2533623-x64_8a59ea3c7378895791e6cdca38cc2ad9e83bebff.msu
    │      windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu
    │      windows6.1-kb2729094-v2-x64_e1a3ecc5030a51711f558f90dd1db52e24ce074b.msu
    │      windows6.1-kb2731771-x64_98dba6673cedbc2860c76b9686e895664d463347.msu
    │      windows6.1-kb2786081-x64_dc63b04c58d952d533c40b185a8b555b50d47905.msu
    │      windows6.1-kb2834140-v2-x64_3db9d9b3dc20515bf4b164821b721402e34ad9d6.msu
    │
    ├─kb3020369
    │      windows6.1-kb3020369-x64_5393066469758e619f21731fc31ff2d109595445.msu
    │
    ├─kb3125574
    │      windows6.1-kb3125574-v4-x64_2dafb1d203c8964239af3048b5dd4b1264cd93b9.msu
    │
    ├─kb3172605
    │      windows6.1-kb3172605-x64_2bb9bc55f347eee34b1454b50c436eb6fd9301fc.msu
    │
    ├─kb3177467
    │      windows6.1-kb3177467-x64_42467e48b4cfeb44112d819f50b0557d4f9bbb2f.msu
    │
    └─kb3212646
            windows6.1-kb3212646-x64_a94cf69326099fb121cdd7daf9dfc558f740afb8.msu

Internet Explorer 11 インストールファイルの解凍

Internet Explorer 11 (IE11)のインストールファイルを wim ファイルへ統合できる形へ解凍します。

C:\tmp\update\IE11-Windows6.1-x64-ja-jp.exe /x:C:\tmp\update\ie

C:\tmp\update\ieにインストールファイルが解凍されました。

作業フォルダにWindowsインストールディスクをコピー

Windows 7 のインストールDVDを挿入し、インストールファイルをコピーします。

> robocopy /E /V /DCOPY:T /A-:R D: C:\tmp\windows

ここで、

  • D: は光学トライブのドライブ
  • C:\tmp\windowsはコピー先のディレクト

です。

更新プログラムの適用

以降の作業は、「展開およびイメージング ツール環境」を管理者権限で起動して実施します。

アップデートするwindowsを確認

Windows 7 のインストールディスクには、複数のエディションのイメージファイルが含まれています。 適用するエディションのインデックス番号を次のコマンドで確認します。

今回は Professional に適用するので、インデックス: 3であることが確認できました。

> dism /Get-WimInfo /wimFile:C:\tmp\windows\sources\install.wim

展開イメージのサービスと管理ツール
バージョン: 10.0.14393.0

イメージの詳細: C:\tmp\windows\sources\install.wim

インデックス: 1
名前: Windows 7 Home Basic
説明: Windows 7 Home Basic
サイズ: 11,681,373,841 バイト

インデックス: 2
名前: Windows 7 Home Premium
説明: Windows 7 Home Premium
サイズ: 12,194,650,761 バイト

インデックス: 3
名前: Windows 7 Professional
説明: Windows 7 Professional
サイズ: 12,096,751,107 バイト

インデックス: 4
名前: Windows 7 Ultimate
説明: Windows 7 Ultimate
サイズ: 12,259,188,245 バイト

操作は正常に完了しました。

イメージファイルのマウント

> dism /mount-wim /wimfile:C:\tmp\windows\sources\install.wim /index:3 /MountDir:C:\tmp\mount

展開イメージのサービスと管理ツール
バージョン: 10.0.14393.0

イメージをマウントしています
[==========================100.0%==========================]
操作は正常に完了しました。

更新プログラムの適用

> dism /image:C:\tmp\mount /Add-package /packagepath:C:\tmp\update\kb3020369
> dism /image:C:\tmp\mount /Add-package /packagepath:C:\tmp\update\kb3125574
> dism /image:C:\tmp\mount /Add-package /packagepath:C:\tmp\update\kb3172605
> dism /image:C:\tmp\mount /Add-package /packagepath:C:\tmp\update\kb3212646
> dism /image:C:\tmp\mount /Add-package /packagepath:C:\tmp\update\iepre
> dism /image:C:\tmp\mount /Add-package /packagepath:C:\tmp\update\ie

イメージのアンマウント

更新プログラムが正常に適用できたら、以下のコマンドで更新内容を保存します。

> dism /Unmount-Image /MountDir:C:\tmp\mount /commit

ここで、/commitは更新内容を保存する(commit)を示します。更新内容を破棄する場合は、 /discardを指定します。これは、更新が失敗した場合に、指定するとよいでしょう。

ISOファイルへ書き出し

> oscdimg -n -m -bc:\tmp\windows\boot\etfsboot.com c:\tmp\windows c:\tmp\win7_hotfixed.iso

動作確認

作成したインストールディスクを用いて、Windowsインストールを実施した結果、初回の更新プログラムは63個と大幅に減らすことができました(2017/3/26実施)。

参考文献

Windows 7 のカスタムインストールディスクを作成してみました

概要

前回は、Windows をネットワークストレージ経由でインストールしました。 この方法で、複数台に同時にかつ、高速にインストールできるようになりました。 ただし、この方法でインストールされる Windows はまっさらな状態です。 そのため、この後に MS-Office や、ユーティリティといった各種ソフトウェアを それぞれの PC でインストールする必要があります。

今回は、各種ソフトウェアをインストールした状態を、複数の PC に展開する方法を試してみました。 感覚的には、家電量販店などで購入できる PC のリカバリディスクのように、 様々なソフトウェアがインストールされたイメージディスクを作成すると思っていただければと思います。

エンジニア的には、開発機に各種開発環境を構築した状態でイメージを作成しておけば、 システムが不安定になった場合でも、サクッときれいな状態に戻せるのがメリットだと思います。

環境

手順

大まかに次の手順で進めていきます。

  1. Windows 7 のインストール
  2. ひな形の作成
  3. ハードウェアドライバ、ソフトウェアのインストールなど環境の構築
  4. システムの一般化
  5. コピー用イメージの作成
  6. コピー先 PC への展開

MS のこちらの記事を参考に進めました。ただし、こちらの記事ではイメージの作成に ImageX コマンドを使用しているのに対し、今回は Dism コマンドで作成してみました。

Windows 7 の標準イメージの作成: ステップバイステップ ガイド

Windows のインストール

いつもどおりに Windows をインストールします。

注意点としては、インストール時に作成するユーザアカウントは、コピーイメージの準備だけに使用します。 そのため、コピー先 PC への展開時には保持されないことに注意してください。

各種ソフトウェアのインストール

Windows のインストールが完了したら、各種ソフトウェアをインストールします。

今回は次のソフトウェアのインストールと環境設定を行いました。

システムの一般化

インストール後の Windows は、それぞれのハードウェア固有の情報を持っています。
これらの情報を削除して、他の PC に展開できるようにします。

クリーンアップ

Windows キー + R」で「ファイル名を指定して実行」を起動します。 以下のパスで、Sysprep(システム準備ツール)を起動します。

C:\Windows\System32\sysprep\sysprep.exe

Sysprep が起動したら、次の手順で監査モードに入ります。

  1. 「システム クリーンアップ アクション」 で 「システム監査モードに入る」を選択
  2. 「一般化する」にチェック
  3. 「シャットダウン オプション」で 「再起動」 を選択
  4. 「OK」を押下して、再起動

Sysprep が実施されます。

一時ユーザの削除

再起動後には、Administrator ユーザでログインされます。 次に、ソフトウェアのインストールで使用したローカルユーザ情報を削除しましょう。

  1. スタートメニューの「コンピュータ」を右クリックし、「管理」を選択
  2. 「コンピュータの管理」が起動します。「ローカルユーザーとグループ」の「ユーザ」で インストールに使用した「ユーザー」を右クリックし、「削除」を選択

一時ユーザの情報が削除されました。プロファイルも削除しておきましょう。

  1. スタートメニューの「コンピュータ」を右クリックし、「プロパティ」を選択
  2. 「システムの詳細設定」を選択
  3. 「ユーザープロファイル」の「設定」を選択
  4. 「不明なアカウント」を選択し、「削除」

これで一時ユーザのプロファイルが削除されました。

OOBE モード

Sysprep を起動して、OOBE モードに入ります。 OOBE モードに入ると、次回起動時に Windows の初期設定画面が表示されます。

Windows キー + R」で「ファイル名を指定して実行」を起動します。 以下のパスで、Sysprep(システム準備ツール)を起動します。

C:\Windows\System32\sysprep\sysprep.exe

Sysprep が起動したら、次の手順で OOBE モードに入ります。

  1. 「システム クリーンアップ アクション」 で 「システムの OOBE (Out-of-Box Experience) に入る」を選択
  2. 「一般化する」にチェック
  3. 「シャットダウン オプション」で 「シャットダウン」 を選択
  4. 「OK」を押下して、シャットダウン

これで環境に依存しない Windows が作成できました。

展開用イメージの作成

次に他の PC に展開するためのイメージを作成します。

Windows PE ディスクで Windows PE を起動します。

ネットワークストレージへ接続

今回は HDD からキャプチャしたイメージをネットワークストレージに保存するため、 ネットワークストレージに接続します。

X:\windows\system32>net use N: \\192.168.10.100\share /user:john *
\\192.168.10.100\share のパスワードを入力してください:
コマンドは正常に終了しました。

共有フォルダ(\\192.168.10.100\share)が N:\ にマウントされます。

/user:john は接続ユーザ名です。環境に合わせて変更してください。

キャプチャする HDD パーティションの確認

キャプチャするパーティションを確認します。

diskpart で確認するのがよいかと思います。

X:\windows\system32>diskpart

Microsoft DiskPart バージョン 10.0.14393.0

Copyright (C) 1999-2013 Microsoft Corporation.
コンピューター: MININT-XXXXXXX

DISKPART> list volume

  Volume ###  Ltr Label        Fs    Type        Size     Status     Info
  ----------  --- -----------  ----  ----------  -------  ---------  --------
  Volume 0     E   DVD_ROM      UDF    DVD-ROM      444 MB  正常
  Volume 1     C   システムで予約済み    NTFS   Partition    100 MB  正常
  Volume 2     D                NTFS   Partition    126 GB  正常

DISKPART> exit

DiskPart を終了しています...

X:\windows\system32>

D: にマウントされていることが確認できました。

パーティションのキャプチャ

パーティションを確認したら、イメージファイルへキャプチャします。

Dism /Capture-Image /ImageFile:n:\original-system.wim /CaptureDir:D:\ /Name:"Original System"

n:\original-system.wim にイメージファイルが作成されました。

カスタムインストールディスクの作成

Windowsインストーラは、インストールディスクの\sources\install.wimを HDD に展開することで インストールを実現しています。これを今回作成したイメージファイルに置き換えることで、 オリジナルのイメージディスクを作成します。

作業用 PC で、Windows 7 のインストールディスク内のフォルダ、ファイルを、ネットワークストレージにまるごとコピーします。 今回は、以下の共有フォルダにコピーしました。

\\192.168.10.100\share\original-7\

先ほど作成したイメージファイルoriginal-system.wimを、install.wimにリネームし、 sourcesにコピーします。

これでカスタムインストール用のデータが作成できました。

イメージの展開

カスタムインストール用のデータが準備できたので、実際に他の PC へ展開してみましょう。

展開方法は、こちらの記事を参照いただければと思います。

9bo.hateblo.jp

通常どおりにインストールを進めたのち、再起動をすると Windows の初期設定画面が表示されます。 こちらもそのまま進めていきましょう。

f:id:u9bo:20170205135849p:plain

インストール後には、イメージ作成時にインストールしたソフトウェアが、既に存在していることが確認できます。

f:id:u9bo:20170205140129p:plain

まとめ

今回は、各種ソフトウェアをインストール済の環境を他の PC へ展開することを目的に、 カスタムイメージディスクを作成しました。

ソフトウェアのインストール、Windows Update は、イメージ作成時の一度だけ行えばよいため、 キッティング台数が多い場合に、驚異的な威力を発揮します。

今後の予定として、キャプチャしたイメージのwimファイルには、直接 Windows Update の更新データを適用できるそうです。 こちらについて、取り組んでみようと思います。

Windows をネットワークストレージ経由でインストールしてみました

概要

Windows PE を使って、Windows 7 をネットワークストレージ経由でインストールしました。

通常 Windows は、DVD や USB メモリなどのインストールメディアを使って、インストールします。そのため、一度にインストールできる台数はインストールメディアの数に限られます。

一方、ネットワークストレージを使ったインストールでは、複数台の PC からインストールメディアに アクセスできるため、同時にインストールが可能です。 また、ほとんどの環境では DVD よりもネットワークストレージのほうが、高速にアクセスできるかと 思いますので、インストール時間の短縮になります。

なお、Windows PE イメージの作成方法は、こちらの記事を参照いただければと思います。

9bo.hateblo.jp

メリットとデメリット

メリット

  • 同時に複数台のインストールが可能。
  • ネットワーク環境によっては、インストール時間の短縮。

デメリット

  • ネットワーク環境が必須。ネットワーク内に DHCP サーバが存在することが望ましい。
  • ネットワークストレージ(NAS)が必要。

用意するもの

手順

インストールメディアのコピー

作業用 PC で、インストールメディア内のフォルダ、ファイルを、ネットワークストレージにまるごとコピーします。 今回は、以下の共有フォルダにコピーしました。

\\192.168.10.100\share\7x64\

Windows PE で起動

インストール対象の PC で、Windows PE ディスクを使って起動します。 起動が完了すると、コマンドプロンプトが表示されるかと思います。

f:id:u9bo:20170129000022p:plain

ネットワークストレージへのアクセス

まず、ネットワークに接続されていることを確認しましょう。

>ipconfig

Windows IP 構成


イーサネット アダプター イーサネット:

   接続固有の DNS サフィックス . . . . .: xxxx
   IPv4 アドレス . . . . . . . . . . . .: 192.168.10.50
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 192.168.10.1

DHCP サーバから IP アドレスが割り当てられていることを確認します。 DHCP サーバが存在しない環境では、ここで IP アドレスの設定が必要です(今回は割愛します)。

次に、ネットワークストレージへアクセスしましょう

>net use N: \\192.168.10.100\share /user:john *
\\192.168.10.100\share のパスワードを入力してください:
コマンドは正常に終了しました。

共有フォルダ(\\192.168.10.100\share)が N:\ にマウントされます。

/user:john は接続ユーザ名です。環境に合わせて変更してください。

Windows インストーラの起動

Windowsインストーラを起動します。

>N:\7x64\setup.exe

f:id:u9bo:20170204153154p:plain

インストーラが起動しました。あとは、通常と同じようにインストールを進めれば完了です。

f:id:u9bo:20170204153245p:plain

以前、同様な手順で複数台の PC に対して同時にインストールした際には、 Gigabit Ethernet 環境だったということもあり、全体でみると、通常の半分程度の時間で インストールが完了しました。

f:id:u9bo:20170204160646j:plain

まとめ

今回は、ネットワークストレージを使って Windows のインストールを行いました。 難易度は高くなく手軽に実施できるかと思います。

Windows PE は、起動時にシステムファイルが RAM ドライブ(メモリ)に展開されますので、 Windows PE の起動後はディスクを取り外してしまっても問題ありません。 ですので、複数の PC に対して、流れ作業でインストールを行うことができます。

また、Windows PE は PXE でのブートも可能ですので、PXE ブート可能な環境を構築すれば、 Windows PE のディスクを用意する必要なくインストールができるようになります。 こちらについては、今後取り組んでみようと思います。

Windows PE for Windows 10 イメージを作成してみた

概要

Windows PE for Windows 10 イメージを作成してみました。 Windows PE(Windows Preinstallation Environment)は、USBメモリやDVDから起動可能な計量版 Windows で、ローカル環境の Windows が起動しない場合のバックアップや特殊環境での Windows のインストール時などで重宝します。

環境

手順

生成手順をバッチファイルにまとめたので、こちらを見ていただいたほうがわかりやすいかもしれません。

github.com

続きを読む

Windows 10 から Internet Explorer 11 を削除したら PowerShell で wget が使えなくなった

概要

Internet Explorer 11 をアンインストールした Windows 10 環境において,PowerShellwget コマンドを実行したらエラーが出ました。

環境

  • Windows 10 Enterprise 2016 LTSB Evaluation
    • LTSB: Long Term Servicing Branch

エラー内容

PS C:\Users\KUBO\Desktop> wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/50.1.0/win64/kn/Firefox%20Setu
p%2050.1.0.exe
wget : Internet Explorer エンジンを使用できないか、Internet Explorer の初回起動構成が完了していないため、応答のコンテンツを
解析できません。UseBasicParsing パラメーターを指定して再試行してください。
発生場所 行:1 文字:1
+ wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotImplemented: (:) [Invoke-WebRequest], NotSupportedException
    + FullyQualifiedErrorId : WebCmdletIEDomNotSupportedException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

補足

wgetコマンドは,Invoke-WebRequestエイリアスだそうです。

PS C:\Users\KUBO\Desktop> Get-Alias wget

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           wget -> Invoke-WebRequest

その後

  • Internet Explorer 11 を再度インストールしたら使えるようになりました。
  • IEのインストール後には,一度起動して「初回起動構成」を完了させる必要がありました。

アップグレードしたWindows 10をWindows 7に戻せないとき

Windows 10 Windows 7

はじめに

Windows 10 にアップグレードした(された)ものの、ソフトウェアなどが対応してなくて、Windows 7 に戻そうとして戻せなかったときの応急処置。

ロールバックの方法は、次のサイトを参考にしました。 www.atmarkit.co.jp

症状

次のメッセージと再起動を永遠と繰り返す。永遠と。

以前のバージョンの Windows を復元しています

1時間半ぐらい再起動を繰り返した時点で、ロールバックできないんだな、と察しました。

環境

  • NEC LM750/H
    • 2012 年モデル
    • Windows 7 Home Edition プリインストール
    • Windows 8 は公式サポートしているけれど、10 はサポートしていない可哀想なPC

やったこと

  1. 再起動するタイミングで、電源を落とす。メーカロゴが表示されたタイミングで電源を切るのが理想ですが、難しかったらBIOSに入りましょう。間違えても、起動中(「復元しています」やOSブート中)に電源を切ってはいけません。普通に壊れます(もう壊れかけているけれど)。
  2. Windows 8 以上の、つまりUEFI世代のセットアップディスクで起動します。今回はたまたまそこにあったWindows8のディスクを使いました。
    そんなディスクなどない場合は、Windows 10 ISOで作成できます。*1
  3. セットアップディスクで起動したら、「コンピュータを修復する」を選択します。
  4. 「続行」
  5. 起動するOSを選択します。
    Windowsロールバック」と「Windows 10」が表示されているかと思います(記憶あやふや)。Windows10を選択します。
  6. すると、久しぶりのWindows 7が起動しました。なおロールバックに失敗しているので、起動に相当時間かかります。エクスプローラも起動しないかもしれません。そんな場合は、タスクマネージャを起動(Ctrl+Shift+Esc)をして、「新しいタスクの実行」からファイルを操作しましょう。もしくは、メモ帳(notepad.exe)を起動して、「名前をつけて保存」のダイアログから操作します。*2
  7. 起動したWindows7は、システムファイルが破壊されてて全く使い物になりません。そのままの利用は諦めましょう。どうにか起動したらバックアップをとりましょう。各種ソフトウェア(メーラーとか)の設定を控えましょう。今やらないと二度と起動しないかもしれません。
  8. ファイルが救出できたら、再インストールしましょう!

うちの環境で動かなかったソフトウェア

  • 一太郎2008 + ATOK
    • ATOK がだめだった。ストア系アプリで全く入力できない。なおシステムファイルも壊れる模様。

blog.goo.ne.jp

あとがき

これ、家族のPCでのことだったんですが、勝手にアップグレードしてシステムファイル破壊するなんて、まったくテロだよテロ。
でも、個人的にはWindows10はサクサク動くのと仮想デスクトップに対応しているので好き。

というわけで、新しい一太郎を買ったのでした。

それにしても一太郎、未だにEscキーでメニューが表示されて驚き。MS-DOSな操作感で古くからのユーザにとても優しい。 www.justsystems.com

*1:Windowsでアクセスするとインストーラ作成ツールがダウンロードされますが、そんなのがめんどくさい場合は、Windows以外のPC(MacとかMacとかMacとか)でアクセスしましょう。ISOファイルが普通にダウンロードできます。あとは、回復ドライブを作成しましょう。 http://pcfan.121ware.com/useful/1010/

*2:余談ですが、これ、WindowsPEなどExprolerが起動しないときにも使える技です。

Raspberry Pi と交通系ICカードを使ったポイントシステム(ソフトウェア編)

ポイントシステムをつくる

概要図はこんな感じ。 f:id:u9bo:20160626215531p:plain raspi+カードリーダでIDを読み取り、ID情報をサーバへ送信して集計します。 raspiはクライアントとして利用します。そうすることで、今後のraspi増設にも対応できそうです。

もろもろ開発

まずは、nfcpyをpathの通っている場所へ移動します。

$ sudo mv /root/nfcpy /usr/local/lib/nfcpy

こんなプログラムnfctest.pyを作成します。 ライブラリにpygameurllib2を使用しています。 Python初心者なのでもっと良い書き方あるかも。

import binascii
import nfc
import urllib
import urllib2
from urllib2 import Request, urlopen, URLError
from pygame import mixer


class MyCardReader(object):
    def __init__(self):
        mixer.init()
        self.alert = mixer.Sound('./beep.wav')
    
    def on_connect(self, tag):
        print "touched"
        self.idm = binascii.hexlify(tag.idm)
        return True

    def read_id(self):
        clf = nfc.ContactlessFrontend('usb')
        try:
            clf.connect(rdwr={'on-connect': self.on_connect})
        finally:
            clf.close()

    def put_http(self):
        url = 'http://hogehoge.com/nfc.php'
        values = {'id':self.idm}
        data = urllib.urlencode(values)
        req = urllib2.Request(url,data)
        try:
            response = urllib2.urlopen(req)
            self.httpres = response.read()
        except URLError, e:
            if hasattr(e, 'reason'):
                print 'We failed to reach a server.'
                print 'Reason: ', e.reason
            elif hasattr(e, 'code'):
                print 'The server couldn\'t fulfill the request.'
                print 'Error code: ', e.code
        else:
           print self.httpres

    def playsound(self):
        self.alert.play()

if __name__ == '__main__':
    cr = MyCardReader()
    while True:
        print "touch card:"
        cr.read_id()
        print "released"
        print cr.idm
        cr.put_http()
        cr.playsound()

プログラムの概要を説明すると、

  1. ICカード読み込み
  2. カードIDを集計サーバのhttp://hogehoge.com/nfc.phpへ送信

  3. 情報を送信したら./beep.wavを再生

といった感じです。 平文でIDを送信するのはなんだか怖いので、本格的に利用する場合は暗号化など考慮する必要がありそうです。

集計サーバのhttp://hogehoge.com/nfc.phpはこんな感じ。

<?php
$id = $_POST['id'];
if (!empty($id)) {
    date_default_timezone_set('Asia/Tokyo');
    $fp = fopen("./nfclog.txt", "a");
    $str = date('Y-m-d H:i:s')."\t".$id."\n";
    echo $str;
    fwrite($fp, $str);
    fclose($fp);
} else {
    echo "id未指定¥n";
}

$_POST['id']./nfclog.txtに記録しているだけです。 本格的に使う場合は、DBへ登録するようにしたらよいですね。

動かしてみた

うごかしてみました。

$ sudo python nfctest.py 
touch card:
touched
released
xxxxxxxxxxxxxx
2016-06-26 18:25:40 xxxxxxxxxxxxxx

こんな感じで、

  • 読み取ったID
  • サーバのレスポンス(タイムスタンプとID)

が表示されます。

今後の予定

  • プログラムnfctest.pyのデーモン化
  • 集計システムの開発

qiita.com

blog.shibayan.jp