#不満解消!i5ノートPCも24H2アップデート可能
あけましておめでとうございます。今年もよろしくお願いします。
昨年末に少し画面の大きなノートPCが欲しくなって、Amazomで下記を購入しました。
到着して、早速Windows Updateをしたところ最新の23H2になり、動作もキビキビしており、満足していましたが、24H2にならないことが、不満でした。その内降ってくるだろうと思っていましたが(他にWin11機を2台所有していますが、2台とも24H2にアップデートされました。)、なかなか降ってこないので、検索したところ、i5は、アップデート対象外であることが分かりました。検索したところ、下記サイトの方法で無事24H2にアップデートできました。(個人的には一番簡単であると感じられました。)
※あくまでも自己責任でお願いします。
●25H2も同じ方法でアップデートできました。(2025.10.17追記)
USBホストコントローラーのトラブルシューティング方法(2024/10/12更新)
2024/9/28に「2024-09x64 ベース システム用 Windows 11 Version 23H2 の累積更新プログラム (KB5043145)」をインストールしたところ、USB接続していたキーボードとマウスが全く反応しなくなり、ログインができなくなりました。
BIOS設定画面は、起動することができたので、USBは、Windows11起動後、認識しないことが分かりました。他のPCからRDP接続し、デバイスマネージャーを確認したところ、USBホストコントローラーがロードされていないことが原因であることがわかりました。ネットで調べ、高速スタートアップを切ったり、ドライバを削除して、再起動してみましたが、やはりドライバがロードされず、詰まってしまいました。
ところが、たまたま間違って他のPCをWindows Updateで修復インストールしたところ、違うドライバがロードできないというメッセージが出て、ロードするには、Windows セキュリティ→コア分離→メモリ整合性をオフにするように指示されたため、その通りにすると無事にドライバがロードされました。
続いて、USBホストコントローラーがロードされていないPCで同様にWindows セキュリティ→コア分離→メモリ整合性をオフしたところ、無事にUSBホストコントローラーがロードされました。おま環かもしれませんが、おなじ現象があれば試してみてください。(自己責任でおねがいします。)下は、設定画面のスクリーンショットです。

※2024-10 x64 ベース システム用 Windows 11 Version 23H2 の累積更新プログラム (KB5044285)をインストールしたところ上記不具合は、解消しました。
SwitchBotApiのアップデートによる温湿度計取得障害の解消
SwitchBotの温湿度計を屋内用と屋外用の2台を所有しており、SwitchBotApi V1.0を使用して、温度と湿度を近くのアメダスのjsonデータと合わせて取得していましたが、5月23日から突然SwitchBotの温度と湿度を取得することができなくなりました。いろいろ、原因を検索したのですが、解決しませんでした。それで、SwitchBotApi をV1.0からV1.1に変更したところ取得することができたので、投稿します。
import json
import time
import hashlib
import hmac
import base64
import uuid
import requests
# Declare empty header dictionary
apiHeader = {}
# open token
token = '' # copy and paste from the SwitchBot app V6.14 or later
# secret key
secret = '' # copy and paste from the SwitchBot app V6.14 or later
nonce = uuid.uuid4()
t = int(round(time.time() * 1000))
string_to_sign = '{}{}{}'.format(token, t, nonce)
string_to_sign = bytes(string_to_sign, 'utf-8')
secret = bytes(secret, 'utf-8')
sign = base64.b64encode(hmac.new(secret, msg=string_to_sign, digestmod=hashlib.sha256).digest())
#Build api header JSON
apiHeader['Authorization']=token
apiHeader['Content-Type']='application/json'
apiHeader['charset']='utf8'
apiHeader['t']=str(t)
apiHeader['sign']=str(sign, 'utf-8')
apiHeader['nonce']=str(nonce)
# API endpoint for getting device list
api_url = "https://api.switch-bot.com/v1.1/devices"
# Send GET request to the API
response = requests.get(api_url, headers=apiHeader)
# Check if the request was successful
if response.status_code == 200:
# Parse the JSON response
devices = response.json()
for device in devices["body"]["deviceList"]:
print("- Device ID: {}, Device Name: {}".format(device["deviceId"], device["deviceName"]))
else:
print("Failed to retrieve device list. Status Code:", response.status_code)
以上のコードでDevice IDを取得します。
import requests
import json
import sys
import datetime
import time
import base64
import uuid
import hmac
import hashlib
import pandas as pd
# wind direction
wd = { 0:"-", 1:"北北東", 2:"北東", 3:"東北東", 4:"東", 5:"東南東", 6:"南東", 7:"南南東", 8:"南", 9:"南南西", 10:"南西", 11:"西南西", 12:"西", 13:"西北西", 14:"北西", 15:"北北西", 16:"北" }
# functions
def get_rdate():
# date time now
dt_now = datetime.datetime.now()
gdate = dt_now + datetime.timedelta(minutes=-12) # 現在時刻から12分引く
gdate = gdate.strftime('%Y%m%d%H%M') # 時刻を表す文字列に変換
return gdate[0:11] + "000" # 分の1の位と秒を0に
def dt2str(dt):
return f"{dt[0:4]}-{dt[4:6]}-{dt[6:8]} {dt[8:10]}:{dt[10:12]}"
get_dt = get_rdate()
dt_str = dt2str( get_dt )
# get json
jdata = f"https://www.jma.go.jp/bosai/amedas/data/map/{get_dt}.json"
dt_str_list = dt_str.split(' ')
df = requests.get(jdata).json()
fields = ["時間", "気温", '日照時間(1h)', '降水量(ih)', "風向", "風速", "自宅外気温", "自宅外湿度", "室温", "湿度"]
df_data1 = [df['14136']['temp'][0], df['14136']['sun1h'][0], df['14136']['precipitation1h'][0], wd[df['14136']['windDirection'][0]], df['14136']['wind'][0]]
#現在時刻を取得
now = datetime.datetime.now(JST)
def make_apiheader():
# Declare empty header dictionary
apiHeader = {}
# open token
token = '' # copy and paste from the SwitchBot app V6.14 or later
# secret key
secret = '' # copy and paste from the SwitchBot app V6.14 or later
nonce = uuid.uuid4()
t = int(round(time.time() * 1000))
string_to_sign = '{}{}{}'.format(token, t, nonce)
string_to_sign = bytes(string_to_sign, 'utf-8')
secret = bytes(secret, 'utf-8')
sign = base64.b64encode(hmac.new(secret, msg=string_to_sign, digestmod=hashlib.sha256).digest())
#Build api header JSON
apiHeader['Authorization']=token
apiHeader['Content-Type']='application/json'
apiHeader['charset']='utf8'
apiHeader['t']=str(t)
apiHeader['sign']=str(sign, 'utf-8')
apiHeader['nonce']=str(nonce)
return apiHeader
# API endpoint for getting device list
api_url = "https://api.switch-bot.com/v1.1/devices"
apiHeader= make_apiheader()
# Send GET request to the API
response = requests.get(api_url, headers=apiHeader)
device_id_list = ['Device ID’ 1,'Device ID 2']
df_data2 = []
for s in device_id_list:
url = api_url + "/" + s + '/status'
response = requests.get(url, headers=apiHeader)
res=json.loads(response.text)
temp, hum = res['body']['temperature'], res['body']['humidity']
df_data2.append(temp)
df_data2.append(hum)
row = dt_str_list[1:] + df_data1 + df_data2
df = pd.DataFrame(row, index=fields)
df.columns = [dt_str_list[0]]
print(df)
以上のコードで近くのアメダスの値とSwitchBot2台の値を取得しています。
取得結果
2024-05-27 時間 23:00 気温 15.0 日照時間(1h) 0.0 降水量(ih) 0.0 風向 南南東 風速 3.8 自宅外気温 15.5 自宅外湿度 86 室温 20.1 湿度 72
参考URL
<
ラズパイのWireGuardからTailscaleへの移行手順
先日、ubuntuを20.04から22,04にアップグレードして、WireGuardサーバーとして24時間運用しているラズパイ(raspberry Pi 4)をtailscaleに移行しました。
下記のリンク先を参考にしたところ、本当に簡単に移行することができました。
(下記リンク先では、githubアカウントでログインしていますが、私はgoofgleアカウントでログインしました。また、20.04を22.04に読み替えてください。)
ルーターのポート開放の必要なく、sshもWireGuardと同様に使えるのでおすすめです。
速度もドコモ光ですが、問題ありません。
ラズパイにおけるUbuntu 22.04へのアップグレード体験
ラズパイでubuntuを20.04から22,04にdo-release-upgradeでアップグレードしました。
kernelの更新ではまりましたが、何とかアップグレードできましたので、投稿します。
do-release-upgrade終了時にkernelがアップグレードされず、再起動して、dpkg --configure -aを実行すると

となり、kernelのアップグレードに失敗しました。
デバイスに空き容量がありませんのメッセージがあるので、それをキーワードにgoogleさんで検索しましたが。/bootの容量を増やすという検索結果が多く、なかなか解決しませんでした。
そこで8Gのラズパイにubuntu22.04をインストールしたとき、ramdiskに/tmp等を設定すると起動しなかったことを思い出し、/etc/fstabの
tmpfs /tmp tmpfs defaults,size=128m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=128m,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,size=64m,noatime,mode=0755 0 0
の部分をコメントアウトして、rebootし、dpkg --configure -aを実行すると無事アップグレードされました。
uname -a
Linux ubuntu 5.15.0-1048-raspi #51-Ubuntu SMP PREEMPT Thu Feb 22 10:30:12 UTC 2024 aarch64 aarch64 aarch64 GNU/Linu
cat /etc/os-release
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
よろしければ、参考にしてください。
日の出と日の入の時刻から経過時間を求める方法
日 出 入り
1 06:51 16:46
2 06:50 16:47
3 06:49 16:48
上記のようにdataframeに日の出と日の入の時刻が格納されていて、経過時間を計算するのに、試行錯誤を繰り返して、やっとうまくいったので、備忘録として投稿します。
import pandas as pd
df['経過時間'] = df['入り'] - df['出']
df['経過時間''] = df['経過時間''].map(lambda x: str(datetime.timedelta(seconds=x.total_seconds())))
df['経過時間''] = pd.to_datetime(df['経過時間'']).dt.strftime('%H:%M')
時刻を計算するとデータ形式がtimedeltaになるので、一度経過時間を総秒数に変換し、再度pd.to_datetimeでデータ形式を時刻形式に変換することで下記のように表示することができました。
日 出 入り 経過時間
1 06:51 16:46 09:55
2 06:50 16:47 09:57
3 06:49 16:48 09:59
dt.strftime('%H:%M')←ここを変えれば自由に表示を変えることができます。


