Surface Pro 5にWindows11をインストール
WIndows11をインストールするのに必要な要件は、以下のようになっています。
www.microsoft.com
第7世代のCPUも一部緩和されたのですが、残念ながらSurface Pro 5の第7世代CPUは2021年10月現在非対応になっています。
ですが、タブレット利用としても最適化されているWindows11をインストールしたいということでその実施方法となります。
方法は以下に公式で記載がありまして、レジストリに値を追加してインストーラーを進める形になります。
公式に記載されているとはいえ、自己責任になります。
support.microsoft.com
インストール方法
自己責任となりますのでご注意ください。
レジストリエディタを開き以下の値を追加します。
| レジストリキー | HKEY_LOCAL_MACHINE\SYSTEM\Setup\MoSetup |
| 名前 | AllowUpgradesWithUnsupportedTPMOrCPU |
| 種類 | REG_DWORD |
| 値 | 1 |
あとは、Windows11のISOからセットアップを実行するだけになります。
途中以下のようなメッセージがでてきますので承諾を押して進めます。
ちゃんとインストール方法もこのようなメニューも用意されているところがMicrosoftさんのありがたいところです。
ただし、記載の通り本当に更新プログラムが受け取れなくなったらきっと戻すと思います。

インストール自体は1時間くらいかかりました。
すごく良い感じで動いています。
モバイルディスプレイ EVP-301レビュー
Geoyeao EVP-301という15.6インチモバイルディスプレイのレビューです。
モバイルディスプレイを選ぶ際に以下のような機能が求められます。
・適応したサイズ: 13.3、15.6など
・Full HD以上
・スタンドできること
・軽さ、大きさ
・USB-TypeC映像 x1、USB-TypeC給電x1 、HDMI x1 以上
・スピーカー有無、音質
・USB-Type-C , HDMIの切り替えが比較的容易であること
・タッチパネル機能
・ペンなどでスタンドできること
・VESA対応
・グレアかノングレア
・sRGB色域、視野角
・iPhoneダイレクト接続(あまりない)
今回外出先の利用ではなくセカンドディスプレイとして利用するために、
VESA対応を求めて、結局EVP-301にしました。
もちろん外出先でも利用することは想定されるためどちらでも利用できることが必要です。
EVP-301の仕様
Geoyeao EVP-301の仕様は以下の通りです。
中国製モバイルディスプレイにありがちな、時折細かい仕様が急に変わっていたりするので
都度最新情報を入手してください。
・サイズ:15.6インチ フルHD(1920x1080)
・入力:USB Type-Cx1 、miniHDMI
・電源供給: USB Type-Cx1
・その他I/f: microUSB(OTG 用 スマホ等でKeyboad/mouseを接続)
3.5mmヘッドホンポート
・カバースタンドあり(本体へ専用のねじで止めるタイプ)
・スタンディング用ペン穴あり
・タッチパネルはなし

中身は以下が入っていました。
・EVP-301本体
・カバー兼スタンド
・取扱説明書、クイック操作ガイド
・USB-TypeC - TYPECケーブル映像出力用 x 1
・USB-TypeC - Type-A給電用 x 1
・HDMI - miniHDMI 映像出力用 x 1
・USB-TypeC - AC 電源アダプタ
・HDMI - MiniDMI変換アダプタ x 1
VESAスタンドへの取付

取り付けはVESAにて!
としたかったのですが、、私のモニタスタンドとVESA取付穴の場所の関係上
取り付け後に結構低くなってしまい、結果以下のようなVESA対応のディスプレイホルダ(サンワサプライ CR-LATAB20BK)を使うことにしました。
なお、もう2つ付いている外側の穴は付属スタンドのねじになります。付属スタンドはねじ止めで、ケースに少しねじが飛び出ているため
気にする方もいるかもしれません。
そのディスプレイホルダの取付はVESA用のねじ(’M4x10)でよいのですが、(本当は直取付で)取り外ししやすいように、
手で取り外しできるねじにしました。なお直取付の場合、EVP-301にはM4x10だと長すぎるのようなのでご注意ください。
画面表示

色は綺麗というほどでもないのですが、通常利用においては問題ないようです。
今回サブディスプレイなので特に気にしません。
設定

設定メニューはボタンを使って操作します。
左から、「MENU、+、-」ですが若干操作方法が特殊で
「MENU」押してからメニューがでますが、その後は「MENU」は確定ボタンとなり、
戻るには、「-」を少し長押しします


いくつかのメニューがあります。


一部マニュアルに書いて無さそうなのですが、追加で以下の操作も可能です。
・「MENU」長押し:電源断
・メニュー開いていないときに「-」短押し:入力の切り替え
・メニュー開いていないときに「+」短押し:音量変更 ※記載アリ
・メニュー開いていないときに「-」長押し:Information表示
・メニュー開いていないときに「+」短押し:明るさ変更 ※記載アリ
まとめ
EVP-301は他のモバイルディスプレイと比べても安価でしたが、メニューもクイックメニューがあり(特殊ながら)操作性もよかったです。
普段使いのサブディスプレイもしくはモバイルディスプレイとしては使いやすいのではないかと思います。
Nature RemoのセンサーデータをLineに通知
前回に引き続き、今度はNatureRemoで取得した値の閾値を設けて必要に応じてLineに通知するようにします。
LineAPIトークン取得
こちらからLineのAPIを取得します。
https://notify-bot.line.me/ja/

curにてテストします。
curl -X POST -H "Authorization: Bearer 取得したToken" -F "message=ABC" https://notify-api.line.me/api/notify
{"status":200,"message":"ok"
スクリプトに反映
前回作成したスクリプトに追記して通知できるようにします。
import requests import json def main(): remoheaders = { 'Accept' : 'application/json', 'Authorization' : 'Bearer [トークン]' } try: res= requests.get('https://api.nature.global/1/devices', headers=remoheaders) res.raise_for_status() remodata = json.loads(res.text) #print(remodata[0]) hu = remodata[0]['newest_events']['hu']['val'] il = remodata[0]['newest_events']['il']['val'] mo = remodata[0]['newest_events']['mo']['val'] te = remodata[0]['newest_events']['te']['val'] print('humidity:' + str(hu) + ' illminance:' + str(il) + ' motion:' + str(mo) + ' temperature:' + str(te)) except requests.exceptions.RequestException as e: print("APIエラー: ",e) hu='nodata' il='nodata' mo='nodata' te='nodata' #ここから追加 lineheaders = { 'Content-Type' : 'application/x-www-form-urlencoded;charset=UTF-8', 'Authorization' : 'Bearer [トークン]' } if type(te) is str or type(hu) is str: msg = '\nNatureRemoのデータが取得できませんでした' payload = {'message': msg} lineres = requests.post('https://notify-api.line.me/api/notify',headers=lineheaders, data=payload) #print(lineres.text) else: if te > 29 or hu < 40: # 文頭に[bot]が入るため改行 msg = '\nリビングアラート(29.0度以上40%以下)\n温度:' + str(te) + ' 湿度: ' + str(hu) payload = {'message': msg} #print(msg) lineres = requests.post('https://notify-api.line.me/api/notify',headers=lineheaders, data=payload) #print(lineres.text) if __name__ == "__main__": main()
Nature RemoのセンサーデータをCactiでグラフ化
Nature Remoで取得できるセンサー情報をCactiでグラフ化します。
Nature Remoで取得可能なセンサー情報
Nature RemoではCloud API及び、Local APIが用意されており、Cloud APIにて以下のようなNature Remo本体のセンサー情報を取得することができます。
・hu : 湿度(%)
・il: 照度:独自の値(以下トリガーで定義されている値より)
暗い:1-50
薄暗い: 51-127
薄明るい:128-205
明るい:206-255
・mo: 人感(常に1。反応した際にcreated_atの日時が更新される)
・te: 温度(度)
このうち、hu, il, teをCactiにてグラフ化します。取得用のスクリプトはpythonにて実施します。
その他、NatureRemoAPIの認証や制限などこちらをご参照ください。
https://developer.nature.global/
Nature Remo APIの取得
アクセストークンを取得します。
https://home.nature.global/

アクセストークンは再度表示されないのでメモしておきます。
第三者に家電など操作されてしまうため、外部に漏れないように注意してください。
curlにてテストしてみます。上記温度などのデータが取得できているはずです。
curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -H "Authorization: Bearer 取得したアクセストークン"
Cactiでスクリプトを実行
/usr/share/cacti/scriptsなどcactiのスクリプトを置くディレクトリに以下のpythonコードを置きます。
import requests import json def main(): remoheaders = { 'Accept' : 'application/json', 'Authorization' : 'Bearer [トークン]' } try: res= requests.get('https://api.nature.global/1/devices', headers=remoheaders) res.raise_for_status() remodata = json.loads(res.text) #print(remodata[0]) hu = remodata[0]['newest_events']['hu']['val'] il = remodata[0]['newest_events']['il']['val'] mo = remodata[0]['newest_events']['mo']['val'] te = remodata[0]['newest_events']['te']['val'] print('humidity:' + str(hu) + ' illminance:' + str(il) + ' motion:' + str(mo) + ' temperature:' + str(te)) except requests.exceptions.RequestException as e: print("APIエラー: ",e) hu='nodata' il='nodata' mo='nodata' te='nodata' if __name__ == "__main__": main()
スクリプトを配置します。
# cd /usr/share/cacti/scripts # vi nature-remo-api.py # chown cacti実行アカウント. nature-remo-api.py # chmod 755 nature-remo.api.py
テストしてみます。
# python3 nature-remo-api.py humidity:59 illminance:245 motion:1 temperature:24.3
グラフの表示
一定時間待つと、無事グラフが作成されました。

なお、NatureRemoとNatureRemo miniというものがありますが、Miniは温度のみしか取得できないため
ご注意ください。






