2022年1月30日日曜日

今週末はDIY三昧

昨日の内窓工事 に続いて今日も朝からDIYです。昨年11月に書いた洗面所の棚 が、ようやくできました。ネットで買った集成材はとっくに届いていたのですが、なかなか週末に時間が取れず延び延びに。あと塗装作業が残っていますが気温が低いのでどうするか悩んでます。

浴室の内窓はかなりよい感じです。凄く暖かいというほどではないですが、冷えびえすることはなくなりました。プラシーボ効果もあるかも知れないけど。お湯張りのときに蓋を開けておくと浴室が温まってよい感じになりそう。今まではどんどん冷めるので蓋を閉めていました。

ということで洗面所にも付けようか検討し始めました。資金の都合で来シーズンかな。

LINEダッシュボタンのプログラム見直しもしています。microSDに平文でLINE NotifyのトークンやWiFiのパスワードを入れるのは躊躇われるので簡単な暗号化プログラムを書きました。



2022年1月29日土曜日

浴室にDIYで内窓工事

連日の寒さに耐えかねて浴室の出窓に内窓を付けることにしました。ポリカダンボールを使った簡易型も考えましたが、それでも1万円程度かかりそうなので思い切って本格的な内窓です。

下記は工事前の様子です。両サイドが開くタイプの出窓です。出窓は浴室が広く感じられてよいのですが、いかんせん冬場は寒い。ここから冷気が降りてきて浴室が全然暖まらない。

取り付けた内窓は、YKK APのプラマードu というモノです。内枠のサイズを測り、ネットで探したショップで注文しました。折角なので高い断熱効果を期待してペアガラスにしてみました。曇りガラスですが写真では結構透けていますね。実際にはもっと見えないです。


価格は送料込みで3万2千円程度。ペアガラスではなく通常の1枚ガラスならもっと安いです。

工事は手順書通りに行えばよいので難しくなかったです。2時間程度。注文の際、寸法を間違えないようにだけ注意です。今回、取り付ける場所の枠がアルミ製だったので、付属していたビスではなくステンレスのタッピングビスを使いました。窓枠にガラスを嵌めるときガラスが思いの外重くて苦戦。

ちょっと圧迫感がありますが、そのうち慣れるでしょう。どのくらい暖かくなるか、今夜風呂に入るのが楽しみです。よかったら脱衣場兼洗面所にも付けようかと思っています。ここも寒いのです。赤外線ヒータを使っていますが、全然暖まらない。

2022年1月28日金曜日

LINEダッシュボタン少し改善、動画とスケッチ

LINEダッシュボタンを少し改善しました。ボタン単体での動作を想定して、PCのシリアルモニタでの状態確認ではなく、ブレッドボードに載せたLEDで状態を表示するようにしました。また、ボタンが押されてからWiFiに接続し、メッセージのポストが終わったらWiFi接続を切るようにして省電力化しました。このため、ポストに少し時間がかかります。

緑のLED点滅はWiFi接続中、赤のLED点灯はメッセージのポスト中です。


今後やりたいこと
  1. アクセスポイント情報やLINE Notifyのトークン、メッセージなどをmicroSDカードに格納して汎用化する
  2. ESP32をSleepさせて省電力化
スケッチです。無保証です。元スケッチはネットにある色々な情報を参考にさせて頂きました。感謝。
//---------------------------------------------------------------
//                                                2022.1.28 naka
// LINE Dash Button
//
//---------------------------------------------------------------
#include <WiFi.h>
#include <WiFiClientSecure.h>

#define SW    25
#define LED_G 33
#define LED_R 32

#define ON  1
#define OFF 0

// WiFi Access Point
const char* ssid     = "AccessPointName";
const char* password = "Himitsu";

// LINE Notify
const char* host  = "notify-api.line.me";
const char* token = "LINE Notifyから取得したトークン";
const char* message = "押されたヨ";

void setup()
{
    pinMode(SW,INPUT_PULLUP);
    pinMode(LED_G,OUTPUT);
    pinMode(LED_R,OUTPUT);
    led_green(OFF);
    led_red(OFF);
}

void loop(){
  if (!digitalRead(SW)) {
    wifi_connect();
    send_msg2line();
    wifi_disconnect();
    while(!digitalRead(SW));
  }  
}

void led_green(int onoff) {
  if (onoff==ON) digitalWrite(LED_G,LOW);
  else           digitalWrite(LED_G,HIGH);
}

void led_red(int onoff) {
  if (onoff==ON) digitalWrite(LED_R,LOW);
  else           digitalWrite(LED_R,HIGH);
}

void wifi_connect() {
    WiFi.begin(ssid, password);
    int onoff = 0;
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        if (onoff==0) led_green(ON);
        else          led_green(OFF);
        onoff ^= 1;
    }

    // 以下の5行は普通は不要のはず。
    IPAddress gateway(192,168,0,1);
    IPAddress subnet(255,255,255,0);
    IPAddress dns1(8, 8, 8, 8); // Google DNS primery server
    IPAddress dns2(8, 8, 4, 4); // Google DNS secondary server
    WiFi.config(WiFi.localIP(),gateway,subnet,dns1,dns2);    

    led_green(ON);
}

void wifi_disconnect() {
    WiFi.disconnect(true);
    led_green(OFF);
}

void send_msg2line() {
  WiFiClientSecure client;

  led_red(ON);

  client.setInsecure();
  if (!client.connect(host, 443)) {
      int onoff = 1;
      int i;
      for (i=0;i<10;i++) { // blink 5 times
          delay(100);
          if (onoff==0) led_red(ON);
          else          led_red(OFF);
          onoff ^= 1;
      }
    led_red(OFF);
    return;
  }
  
  String query = String("message=") + String(message);
  String request = String("") +
               "POST /api/notify HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Authorization: Bearer " + token + "\r\n" +
               "Content-Length: " + String(query.length()) +  "\r\n" + 
               "Content-Type: application/x-www-form-urlencoded\r\n\r\n" +
                query + "\r\n";
  client.print(request);
 
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      break;
    }
  }
  
  String line = client.readStringUntil('\n');
  led_red(OFF);
}

2022年1月26日水曜日

LINEダッシュボタン、DNSの問題解決?

昨日作ったLINEダッシュボタンがLINEのサーバをFQDNで指定していたら接続できず、IPアドレスに変更したら上手くつながった件をもう少し調べてみました。昨夜、ノートPC(Windows7)のDNS設定をGoogleのDNSサーバから自動取得に戻したら、アドレスの解決ができなくなった。やはり、DNSが上手く動いていない模様。でも、Windows10のノートPCやスマホなどは大丈夫なのがイマイチわからない。

ということで、ESP32のスケッチ内でDNSサーバを指定するようにしてみました。コードは以下のような感じ。
    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    
    IPAddress gateway(192,168,0,1);
    IPAddress subnet(255,255,255,0);
    IPAddress dns1(8, 8, 8, 8); // Google DNS primery server
    IPAddress dns2(8, 8, 4, 4); // Google DNS secondary server
    WiFi.config(WiFi.localIP(),gateway,subnet,dns1,dns2);

DNSサーバだけ設定することができないようで、IPアドレス、ゲートウェイ、サブネットマスクも指定しています。本来、WiFi.config()は、WiFi.begin()の前に呼ぶようですが、IPアドレスは自動取得したいので、一旦begin()して取得したIPアドレスをWiFi.localIP()で指定しました。

上手くいくか分からなかったのですが、無事にFQDNでサーバを指定してもLINEサーバに繋がるようになりました。デフォルトでDNSが上手く動いてない原因は不明ですが、取り合えず解決。


ダッシュボタンというからにはタクトスイッチではなく、それなりのスイッチにしてみようと、昨夜アマゾンでチャイム用スイッチを購入しました。先ほど届いて早速繋いでみました。ボタン内にESP32を組み込むのは無理そうですが、台になるケースを用意して組んでみようかと思っています。できれば電池駆動にしたいのですが、消費電力を抑えるためのDeepSleepとWiFi接続の相性はどうなんでしょうか?

2022年1月25日火曜日

LINEダッシュボタンを作ってみた

今夜は動画配信サービスを観るのはやめて、久しぶりにESP32で遊んでいます。

以前、アマゾンがサービスしていたAmazon Dash ButtonというIoTデバイスがありました。これは、家庭などの消耗品を小さなボタンを押すだけで注文できるというすぐれモノでした。しかし、いつのまにかサービスが終了してところをみるとこのボタンでの注文は少なかったのかな。確かに間違えて押すと幾つも注文してしまいそうで危ないです。一応、1日1回しか有効にならなかった仕様だった気がするけど、それでも間違えそう。

今回作っているのはこれと似たような感じで、名付けてLINE Dash Buttonです。ボタンを押すと、LINEに通知が届きます。


LINEがサービスしているLINE Notifyという機能を使い、LINEのサーバにメッセージを投げるとスマホに通知が届きます。サーバにメッセージを投げるのはESP32マイコンで、WiFi経由で繋ぎます。


写真左のブレッドボードに載っているのがESP32の開発モジュールとタクトスイッチ。緑色のタクトスイッチを押すと、メッセージが送られて、右のスマホに届きます。隣にありますがデータは、どこかにあるLINEのサーバを経由していますので、ネットに繋がっていれば世界中何処でも届きます。

当初、LINEのサーバに接続するところで失敗していて散々悩みました。ライブラリのバージョンなどを確認したり、同様の症状がないか検索したりと1時間以上。原因は未だ分かりませんが、サーバ名ではなくIPアドレスで指定したらすんなり繋がりました。DNSが上手く動いてない模様。プロバイダの問題かな?

以前、プロバイダのDNSサーバの応答が悪かったので、PCのDNSサーバはgoogleのDNSサーバを使っています。でもスマホやFire TV Stickは特に指定してないからなあ。よくわかりません。

とりあえずメッセージを送る基本的なパスは通ったので、これから色々試したいと考えています。ボタンイベントだけでなく、気温や湿度などの情報や、ドアや窓の開閉イベントなどセキュリティにも使えそうな感じです。


2022年1月24日月曜日

我が家の動画配信サービスが充実していた

昨年10月に 第三世代Fire TV Stickを購入 して、第二世代と合わせてネット動画環境が2台になりました。主にAmazonのPrime Videoを楽しんでいました。年末年始は見続けてしまい、今も毎日映画やドラマなどを見ています。ドラマは主に米国ドラマで映画並みにお金がかかってそうなモノ。何シーズンもあって楽しめます。時間を束縛されず、好きな時に自分のペースで見られるのがいいです。


そして最近、子供がNetflixとDisney+に、かみさんがFODに加入していることが判明。なんでもっと早く教えてくれないんだ。二人とも主にタブレットで見ていたので気づかなかったよ。早速Fire TVでも見られるようにアプリをインストール。

これで動画配信サービスにさらに拍車がかかりました。以前からあまりテレビ番組は見ていなかったのですが、ほぼ見なくなりました。ただ、本を読んだり、工作したりプログラムを書く時間が減ってきているので、少しは節制しなければ。


2022年1月22日土曜日

LED電球を交換したらサイズが違った

ダイニングのLED電球が切れました。約10年前に電球型蛍光灯から交換したものです。その前は白熱電球でした。

当時はまだLED電球は高くて、6灯まとめて交換するのを躊躇した記憶があります。定格寿命は4万時間だったと思うので、1日当たり10時間点灯させて365日×10年で3.6万時間。でも1日10時間も使ってないな。他の5灯はまだ大丈夫そうなので、これがハズレだったのか。

しばらく前から照明を点けるとジーっというコイル鳴きのような音がしていたのですが、どの電球か特定はしていませんでした。切れてから音がしなくなったので、この電球だったようです。

6灯セットなので同じ電球に交換しようと元の型番と同じ型番のものをネットで買ったのですが、サイズがこんなに違いました。左が切れた古いモノ。カバーの根本に焦げたような茶色のシミが出ています。

東芝製で型番は新旧共にLDA8L-Gです。新しい方は後ろに/60V1と印字されていますが、これがこんなに違う事を表しているの? 形が大きく異なるなら同じ型番にしないで欲しいよ。

同じサイズと形である事を期待して高価な東芝製を買ったのに、これなら他社の安いモノでもよかった。

ちなみに重さも2倍以上違います。古い方は109グラム、新しい方は46グラムです。他も切れる事を想定して2個セットを購入したのですがあまりの軽さに、間違って1個入りが届いたのかと思った。




交換した様子です。一番奥が交換した電球。遠近法を考慮しても小さい。

点灯させると一番明るい。まぁ新品と10年モノの違いですね。色も違う。

さて、他の電球はあとどのくらいもつでしょうか。

2022年1月21日金曜日

再び在宅勤務になりました

MacBookの乗り換えも終わり、丁度、蔓延防止等重点措置に合わせるかのように在宅勤務生活になりました。でも紙書類提出の必要があって来週も1日は出勤です。

テレワーク机の様子です。macのOSは最新のモントレーですが、デスクトップはカタリナにしてあります。モントレーはちょっと派手過ぎて目が疲れるので。

成長して鉢がいっぱいになったため株分けしたシャコバサボテンが咲きました。元はピンクの花と赤い花が混在していたのですが、この株は赤色でした。

アプリは「ハナノナ」です。

2022年1月19日水曜日

MacBookの移行がなんとか完了

苦戦したMacBook ProからAirへの移行は、なんとか完了しました。昨夜、外付けHDD経由で移行を開始したら今朝には終わってました。WiFi経由やThunderboltの直結では、残り僅かの所で止まっていましたが、止まらずに移行できました。何故でしょうか!?

転送速度は一番遅くて時間がかかりましたが、無事に終わってよかったです。最初からHDD経由にすればよかった。

心配していたPython関係も無事に移行できたようで動いています。ただ、MS-Officeのライセンス認証は移行できませんでした。よくできています。これが移行できたらいくらでもクローンが作れるもんね。という訳で今日も出勤して、アクティベーションしてきました。中々在宅勤務になりません。

CPUがスペックダウンした影響だと思いますが、アプリのレスポンスがイマイチになりました。動き始めたらそれほどでもないのですが、起動がもたつきます。また、Pythonでのデータ処理が結構遅くなりました。体感で2倍は遅い。

来年度、予算が確保できたら新しいProを買ってもらおう。


2022年1月18日火曜日

MacBookの移行がうまくいかない

昨夜、移行アシスタントを動かしっぱなしにしたが、ファイル転送が途中で止まってしまった。転送始めの頃は転送レートが数MB/秒だったが段々遅くなり、止まったときは15KB/秒程度。

OSバージョンが違うのが悪いのかと思い、MacBook Proを最新バージョンにアップデートして、Airと同じにして再トライ。しかし、同じような所で止まった。ファイル数は微妙に違うが。


仕方ないので、USB TypeCケーブル(Thunderbolt)接続してトライし直した。しかし、やっぱりダメ。転送速度はWiFiのピアツーピアより遅い感じだったが、止まったときの速度は少し早かった。転送できたファイル数は少ない。

なお、この状態で移行アシスタントを止めて、Airを起動し直しても中身は空っぽで、全く移行できてない(T_T)

仕方ないので外付けHDDを使って移行しようと、今バックアップ中です。昨日バックアップしたのは、不要なファイルを整理前でそのままではAirのストレージに入らないので、改めてバックアップ。結構時間がかかります。

さてどうなるか?!

幸い今のところタッチバーが光って突然再起動する症状は出ていません。



2022年1月17日月曜日

急遽MacBookの乗り換え

タッチバーが不調になったMacBook Proですが、今朝在宅で使い始めたらいきなり再起動する症状が頻発。リモートでの打ち合わせ中にも落ちた。もっと悪化して起動しなくなったらヤバイので、急遽出勤してたまたま余っていたMacBook Airを借りてきました。

アプリやデータを丸ごと移行する移行アシスタントを使って移行しています。その前に一応外付けHDDにバックアップ。移行先のAirのストレージが512GBと小さかったので不要なデータは整理してダイエット。

WiFi経由でコピーしていますがプログレスバーが全然伸びません。今、残り4時間と表示されているので、終わるのは20時過ぎですね。

簡単に移行できるのですが、アプリやライセンス情報がどの程度移行されるのか気になります。特にUNIX系のプログラムやPython関係が心配。確認は明日ですね。

ストレージの他にもProからAirになることでCPUはi7からi5にダウン。コア数も4から2へ。これらがどの程度影響するかな? 幸いメモリは16GBで変わらなかった。

2022年1月16日日曜日

macbook proのタッチバーが消えた

コロナ感染者が急激に増加傾向のため、先週金曜日から久しぶりの在宅勤務です。来週から出勤と在宅半々くらいになりそうです。

昨日、テレワーク机でmac以外の作業をしていたら、スリープさせておいたmacのタッチバーが高い輝度で点滅し、いきなりmacが再起動を始めた。

その後、下記のようなダイアログが表示。

起動後は普通に使えていると思ったら、ファンクションキー代りのタッチバーが点灯しなくなっていました。写真はExcelアプリを開いていますが、タッチバーに何も表示されない。

普段は外付けキーボードを使っているのでファンクションキーとしてタッチバーは使わないが、輝度や音量コントロールには使うので無いと不便。

ググったら、タッチバーの故障や不具合は結構多いようで対策が見つかった。SMCというハードを管理しているメモリをリセットすれば良いらしい。シャットダウン後に、control + option + shift を長押しして、ジャーンという音がしたら電源スイッチを入れて起動する。

無事に復活した様子です。

なお、消えているときはキーボード設定画面からタッチバーの項目が消えている。

復活したときは、「Touch Barに表示する項目」というのが表示された。

以前からスリープ中に再起動したりすることがあったので何処かが壊れかけているのかも。一度、使っている時に突然再起動したこともあった。そのときは保存してなかったパワポ資料が消え、1時間位ロスした。

修理に出すべきか、そうするとストレージが消えそうで気が重い。以前、これとは違うmacbookをバッテリ交換に出したら工場出荷状態で戻ってきたからな。事前に消えてもよい旨の項目には同意したけど、なんでバッテリ交換でストレージが消えるの!? 

2022年1月10日月曜日

LED センサーライトの設置

またまたちょっと用事があり、3連休に有給休暇をくっつけて帰省しています。メインの用事ではないのですが、ガレージにセンサーライトを設置しました。赤外線人感センサーで夜間に人が近づくと光る、よくあるタイプです。2,400円という価格にびっくり。昔、自宅につけたハロゲンランプのものは1万円くらいしていた記憶がある。安くなった。自作したら2,400円では到底作れない。 


 
設置した様子。上下方向の向きは変えられるけど左右には動かなかったので、照射方向を決めてから木ネジで桟木に固定。木ネジを中央1本だけにすれば回転するけど、強風などで動く心配もあるので2本で固定しました。
電源はAC100V、元々ガレージ照明用にあった配線からとりました。
 
人感センサ部の裏にある調整用のつまみ。右から反応時の明るさ調整、センサ感度、点灯時間です。明るさ調整すると夜間でなくても反応するようにできるようだが、設置した昼間には反応しなかった。明るすぎたのかも。曇りの昼間に反応しないように月のマークにしておいた。ちなみにセンサは上下左右に動く。
 
センサ感度は商品説明では12mとなっていたが、夜間に試したところ最大感度にしても5m程度だった。点灯時間は最大1時間のようです。そんなに長い時間の必要性があるのかな? ひとまず30秒程度に設定。つまみを左に回しきって少し右に戻したあたり。
 
夜間、点灯した様子。20Wとは思えないほど明るい。LEDの20Wは白熱電球100W以上ある。あまり上に向けると近所迷惑になるので少し下方向に調整しました。

安いので寿命は気になりますが、さてどうでしょうか。

2022年1月7日金曜日

太陽光発電システムのバッテリを充電

以前作った ミニ太陽光発電システム からiPadに充電したらバッテリの電位が下がって、充放電コントローラのLEDが点滅し始めた。12Vを若干下まわっている。数日放置したが冬場で日差しが弱いためか復帰しない。それどころかさらに低下してきた。発電が充放電コントローラの電力を賄えない模様。

余り低下するとバッテリが痛むので(既に目安寿命は越えているが)、自作の定電圧電源をソーラパネルの代わりに繋ぎ充電してみました。定電流電源ではないので、適当な電流になるように電圧を調整しています。バッテリが12Ahなので0.5C位の電流。充電されてバッテリの電圧が上がると電流が下がってくるので時々電圧を上げています。

定電圧電源を外してバッテリの電圧を確認すると12.9Vまで復活しました。まだ満充電ではないのか、バッテリが劣化しているのか? 作った当初は充電すると13.5V以上になったと思う。

このポータブルソーラバッテリは、時々iPhoneやiPadを充電する程度で普段はそれほど放電していませんでした。バッテリ仕様書によるとトリクル充電による待機型の使い方で3〜5年の寿命らしいので、既に寿命を越えている。今度、秋月で部品を買うときに一緒に購入しようかと思う。

最近地震が多いので、バッテリ以外にも非常時の備えを準備しています。一応、飲料水はポリ容器で30リットル備蓄してあるけど、最近水の入れ替えをしてないな。トイレ用の水の備蓄はないので非常用トイレも準備した。風呂の残り湯を残したいが、朝風呂掃除をしてしまうので昼間に災害が起きると空っぽ。

食品はローリングストック方式で、缶詰、レトルト食品、乾麺、米などを備蓄している。カセットコンロのボンベも同様。クルマのガソリンも半分を切ったら入れるようにしている。クルマのバッテリから100Vを作るインバータも準備してある。

これらの出番がないことが一番ですが、近い将来必ず起こると思うので、準備しています。