暫定 - 技術メモなど

今のところはRaspberry Piを使ったIoTが話題の中心です

iPhoneのウィジェットにショートカットを登録して一発でWi-Fiオフする

iOS11から、コントロールセンターを使ってWi-Fiを完全にオフすることができなくなりました。完全にオフしたい場合、[設定]からわざわざオフしなくてはならず、これはiOSの改悪だな、と思っていました。
iOS12になってもこの仕様は変わらず、アップルはずっとこのまま行くのだな、と思っていましたが、ふとショートカットアプリでWi-Fiを完全オフできるのではないか、と思ったら実際できました。そして、ウィジェット(ロック画面やホーム画面の右スワイプで表示される画面)に登録することで、コントロールセンターと同じくらい使い勝手がよくなりましたので、今日はそちらの話題を取り上げたいと思います。

参考サイトはこちらになります。
mobilelaby.com

参考サイトと言いますか、この通りやればまったく問題ありません。
(iOS11を使用している際、まだworkflowの名前で提供されていたときから使っていましたが、そのときからこの手順でWi-Fiオフできていたかは不明です)

まずはiOS12にアップデート後、App Storeでショートカットをダウンロードします。f:id:yrn7:20180926122930p:plain

その後、設定を行います。
起動して[ショートカットの作成]をタップし、検索窓に「Wi-Fi」と入力して[Wi-Fiを設定]をタップします。
f:id:yrn7:20180926122954p:plain

そのあと出てきた画面で[Wi-Fi]を無効にして、右上にコントロールセンター風のアイコンをタップ、名前をつけてアイコンを変更します。[ウィジェットに表示]をオンするのをお忘れなく。
必要に応じて[Siriに追加][ホーム画面に追加]を行なってください。
あとは[完了]を二回タップして閉じます。

ウィジェットを見ると設定した項目が表示されます。
f:id:yrn7:20180926123026p:plain
ウィジェットを開いて、一番下に表示される[編集]からショートカットを追加し、適宜順番を変更しましょう。

ショートカットにはホームアプリのシーンの登録も可能で、ウィジェットに表示するととても便利です。
また、先人が生み出した便利なショートカットがギャラリーに登録されていて、それらをすぐに使用することもできます。

ちなみに、今回のiOS12はhomebridgeに対して不具合は起こしていないようで、快適に使えています。

PowerShellを使用した文字列抽出と置換について

テキストファイルからある文字列を抽出したいことがよくあります。
通常であれば grep を使用するのがお手軽ではありますが、今回は一般ユーザー向けに手順を用意する必要があり、一般ユーザーが使用しているWindows PCには当然 grep が導入されていません。

Windowsの場合、よくある例では find が使用されます。しかし時は2018年も後半、いまどきバッチではなくPowerShellだろう、ということでPowerShellを使用しました。

今回はPowerShellを使用して文字列を抽出した際、UNIXコマンドとは違う結果になり結構手こずったので、必要となった文字列置換も含めてのメモとなります。

今回の参考サイトは下記になります。
tech.sanwasystem.com
mtgpowershell.blogspot.com
news.mynavi.jp

1.PowerShellを使った文字列抽出

PowerShellの場合、 Select-String を使用します。

Get-Content 抽出元ファイル名 | Select-String "抽出したい文字列" > 抽出先ファイル名

上記のダブルクォーテーションは念の為つけておきましょう。
(空白が含まれる場合があるので)

私の場合は時間経過ごとに抽出先ファイルを新しく作る方が有利だったので、日時分がファイル名につくように変数を使いました。

$filedate = Get-Date -Format "yyMMdd_hhmm"
Get-Content 抽出元ファイル名 | Select-String "抽出したい文字列" > $filedate-抽出先ファイル名1

当初、一般ユーザー向けに手順起こしをする前は Cygwingrep を使用していました。PowerShellでもまずまず同じような結果になったのですが、grepを使うとタブになっていた箇所が、PowerShellでは半角スペース3つに変わって出力されていました。
これは次の処理では困ったことになるので、置換についても対処しました。

2.PowerShellを使った文字列置換

前述のとおり、半角スペース3つのタブへの変換という、実に地味な変換の為、以下のようにしました。

$encoding = [Text.Encoding]::default 
$sr = new-Object IO.StreamReader((Convert-Path "$filedate-抽出先ファイル名1"),$encoding) 
$text = $sr.Readtoend()
$sr.close()
$text -replace '   ',"`t" > 抽出先ファイル名2

というわけで、最終的なスクリプトはつなげて下記のようになりました。これを拡張子 ps1 として適当なファイル名で保存すればOKです。

$filedate = Get-Date -Format "yyMMdd_hhmm"
Get-Content 抽出元ファイル名 | Select-String "抽出したい文字列" > $filedate-抽出先ファイル名1
$encoding = [Text.Encoding]::default 
$sr = new-Object IO.StreamReader((Convert-Path "$filedate-抽出先ファイル名1"),$encoding) 
$text = $sr.Readtoend()
$sr.close()
$text -replace '   ',"`t" > 抽出先ファイル名2

おしまい。

macOS High SierraでFritzingのファイルを保存できなかった場合の対処

Raspberry Pi で homebridge を運用していて、いくつかブログのネタにもしてきましたが、まだ書いていないことがあります。GPIOに接続している温度・湿度センサーの情報をホームアプリに表示する方法です。この方法を記事に書こうと思うと配線図を作らないといけないのですが、これが手間取りそうでずっと避けてきました。

とうとう重い腰を上げて、配線図の作成から行おうと思い、回路図や配線図作成で名高い Fritzing をインストールしましたが、起動時にファイルが見つからないというメッセージが出たのと、ファイルの保存ができない現象が発生してしまいました。
何とか解決できたのですが、そこで力尽きたので、今日のところはその解決方法をメモとして残しておきます。

なお、当方の環境は下記のとおりです。

また、インストールした Fritzing のバージョンは0.9.3bです。

1.現象

公式サイトからダウンロードし、インストールを行います。

http://fritzing.org/download/

インストール後、起動しようとすると下記のメッセージが表示されました。

Unable to find the following 4 part(s):
‘generic_shrouded_pin_header_10_100mil' at 'parts/core/generic_shrouded_pin_header_10_100mil.fzp'
‘generic_female_pin_header_2_100mil' at 'parts/core/generic_female_pin_header_2_100mil.fzp'
‘mystery_part_sip_3_100mil' at 'parts/core/mystery_part_3.fzp'
‘generic_ic_dip_8_300mil' at 'parts/core/generic_ic_dip_8_300mil.fzp'

「パーツが見つからない」とは出るものの、起動はするのでそのまま進めます。
ファイルを作成して保存しようとすると下記のメッセージが表示され、保存ができませんでした。

Cannot write file temp:
/Users/<username>/.config/Fritzing/e4b07472b1fc5c5c78833dfdf8040360/temp.xml
/Users/<username>/.config/Fritzing/e4b07472b1fc5c5c78833dfdf8040360/Untitled Sketch.fz
Permission denied.
2.解決法

保存時に出てきたメッセージがヒントになって解決できました。(Permission denied)
インストールした Fritzing をアンインストールし、下記のコマンドを実行します。

$ sudo rm -rf ~/.config/Fritzing/
$ sudo chmod 777 ~/.config/

その後、もう一度 Fritzing をインストールします。これで無事 Fritzing でファイルを保存することができ、起動時にもメッセージが表示されなくなりました。

どれだけの需要があるか分かりませんが、配線図ができたらいよいよ温度・湿度センサーのホームアプリ表示の記事を書こうと思います。

rpi-cloneバックアップイメージ書き出し不具合の対処について

普段、Raspberry Piのバックアップを取るときにはrpi-cloneを使っています。

github.com

このツールはとても便利で、接続しているUSBメモリに対話式でバックアップを取ってくれます。ぼくの場合は、ブートに使っているmicroSDと同じ16GBのmicroSDをUSBのアダプタに入れて、バックアップ先にしています。Raspberry Piに何か問題が起きた場合、バックアップ先になっているmicroSDと差し替えればそのままブートできるので、システム変更前のロールバック準備として重宝しています。

rpi-clone自体は何の問題もなく動いているのですが、バックアップ先のmicroSDをイメージとしてMacに残す際に問題が発生しました。
ddコマンドでイメージを取っているのですが、15GBあるはずのデータが300MBで保存されるようになってしまったのです。当然のことながら、そのイメージをmicroSDに書き戻してもブートしません。
原因を調べたのですが、このような症例は見つからず、困り果てていたのですが
(現に、作業前に取得したバックアップより一つ前に戻したかったのに、バックアップファイルが有効ではない、ということがありました)
Raspberry Piでイメージにして、それをMacに移せばいいではないか、と思い至りました。
方法としては下記の流れになります。

  1. rpi-cloneでmicroSDにバックアップ
  2. イメージ書き出し先のUSBメモリの準備
  3. バックアップのイメージをUSBメモリに書き出す
  4. Macにバックアップ

試してみたところこれで解決しましたので、メモとして残しておきたい思います。

続きを読む

Google Home Miniでの家電コントロールとiPhoneの呼び出し

homebridgeとIRKitの組み合わせ、Philips Hue、Koogeekのおかげで、多くの家電をiPhoneでコントロールできるようになりました。
操作はほぼホームアプリを使用しているのでさほど気にはならなかったのですが、私の滑舌の悪さでしょうか、音声コントロールをしようとするとSiriが反応してくれないこともままあり、音声コントロールに不便さを感じることがありました。
試しにGoogle Home Miniを導入してみると、聞き取りの間違いもあまりなく、音声コントロールが非常に快適になりましたので、今回はその話題を取り上げてみたいと思います。

続きを読む

homebridgeがネットワークに接続できない時に自動でリブート

前回の記事では、homebridgeサーバを別のサーバからノード監視し、ノードダウンしたらLINEで知らせてくれるようにしました。
今回はhomebridge自体がデフォルトゲートウェイに通信できなくなったとき、自動的にリブートし、起動したことをLINEで通知してくれるようにしました。そのときの記録です。

参考サイトは前回と同様にこちらと
www.tapun.net

下記になります。
www.asahi-net.or.jp

続きを読む

サーバのノードダウンをLINEで通知

外出先からiPhoneのホームアプリを使って暖房のスイッチを入れようとすると、homebridgeサーバが何らかの理由でダウンしている、なんてことがたまにあります。今はGoogle Home Miniを併用していて、IRKitがフリーズしていない限りそこまで困ることはありません。そのあたりの話はまた別のエントリで書くとして、Raspberry Piの話に戻ると、ウチの場合はhomebridgeサーバを自ら監視して、自分がネットワークに接続できていなければ再起動をかけるように設定しています。
この話は今回書こうと思っているお話と関係なくはないのですが、これまた別のお話。今回は、homebridgeサーバがダウンしていたら、別の監視用のRaspberry Pi ZeroからLINE通知が来るようにしました、というお話です。

続きを読む