snovaのブログ

主にプログラミングやデジタルコンテンツについて書きます。最近はPython, Flutter, VRに興味があります。

簡単な電気回路の問題をpythonで解く

イントロダクション

科学技術計算との相性が比較的良いpythonですが、電気回路に関するものが少なかったので、取り組んでみました。 ここ最近、資格試験や仕事で全くPCをいじれていなかったので、頭の体操代わりに簡単な交流電気回路を解いてみます。

目次

電気回路の基礎

高校物理を履修した人なら、オームの法則とキルヒホッフの法則はご存知かと思いますが、これらに加え行列、微分方程式、ラプラス変換などを使うと、大抵の電気回路、アナログ電子回路を解くことができます。

直流回路

直流回路の電流値を求めてみます。オームの法則で求めます。

問題は以下の通り。

E = 100 # V
R = 1000 # ohm

I = E/R # A
print(I)

答えは、0.1 Aです。

単相交流回路

交流電源に抵抗とコンデンサと入れた回路について解きます。

Em = 100 # V
f = 60 # Hz
R = 1000 # ohm
C = 10 * 10e-6 # F

abs_I = (Em / np.sqrt(2)) / np.abs(R + 1/(2*np.pi*f*C)) # A
print(abs_I)

まとめ

簡単な電気回路の問題を解きました。 頭が鈍っていたので、たったこれだけのことをするのにも、少し時間がかかりました。

今後は、より複雑な問題や三相交流回路、アナログ電子回路の問題を行列や微分方程式を使って、計算機工学の手法を使って解きたいと思います。

参考サイト

電気関係の法令をpythonで収集し、Githubで共有する

イントロダクション

私は普段、電気設備設計や工事に関する仕事をしています。

電気は非常に危険なもので、利用者だけではなく、作業者の安全にも気をつけないといけません。 そのため、いくつもの法令(電気事業法電気工事士法等)や規格(JIS、JEC等)で事故防止を図っているのですが、種類や量が多く、複雑でわかりにくいです。 もっと言うと、通常は法令だけでなく社内基準等もあります。

さらに、法律が改訂されたときはどこが変更になったのか把握する必要があります。 法令を守らないと罰せられるので、どこが変わったのか知っておくべきです。

電気主任技術者やエネルギー管理士等を目指す人にも法律を知ることは重要です。 (ただ、普通は法令の本文を暗記するのではなく、参考書で勉強します。)

そこで、電気法規や電気規格についてまとめ、簡単に調べられるようにgithubに共有することにしました。

目次

現状把握

電気法規に関してはネットで調べたら、個別にわかりやすくまとめられたサイトが複数ありました。 法律本文は国のe-Govで検索できます。

最近はe-Govだけではなく、政府の事業が検索できるサイトワシントン州の法律をまとめたGithub宮崎県総合政策部統計調査課のGithub国土地理院のオープンデータなど、国や自治体がしていることをオープン化しよう、みたいなことが増えています。

仕様

最低限必要な機能をまとめました。

  • 法律の改正があったときに更新履歴がわかる
  • 二次利用できるようにxml, json等に保存できる
  • 著作権保護されている規格は本文を記載せず、リンクを貼る

以上を満たすように検討した結果、今回はGithubで共有することにします。

なお、法律の著作権の扱いは著作権法第13条に記載の通り

十三条 次の各号のいずれかに該当する著作物は、この章の規定による権利の目的となることができない。

一 憲法その他の法令

二 国若しくは地方公共団体の機関、独立行政法人独立行政法人通則法(平成十一年法律第百三号)第二条第一項に規定する独立行政法人をいう。以下同じ。)又は地方独立行政法人地方独立行政法人法(平成十五年法律第百十八号)第二条第一項に規定する地方独立行政法人をいう。以下同じ。)が発する告示、訓令、通達その他これらに類するもの

三 裁判所の判決、決定、命令及び審判並びに行政庁の裁決及び決定で裁判に準ずる手続により行われるもの

四 前三号に掲げるものの翻訳物及び編集物で、国若しくは地方公共団体の機関、独立行政法人又は地方独立行政法人が作成するもの

JIS規格に関しては、公式FAQにて著作権法の保護対象となっているとの記載があるため、本文の記載はせずリンクを貼り付けるだけにしています。

法令の収集

法令とは、法律や省令などを総称した表現です。 電気設備や工事等に関係する法令を以下にまとめました。

上記の法令をe-Govから取得します。 取得方法は公式のPDFマニュアルを参考にしました。 なお、公式マニュアルではリクエスURIhttpとなっていますが、すべてhttpsに置き換えないと値が返ってきませんのでご注意。 (2019/08/17現在ではAPIのバージョンは1です)

まず、法令の一覧表を取得します。

URI

https://elaws.e-gov.go.jp/api/{Version}/lawlists/{法令種別}

です。

このとき、法令種別は以下の通りです。

1: 全法令
2: 憲法、法律
3: 政令、勅令
4: 府省令

法令の一覧表を取得するコード。

import requests

url_lawlist = 'https://elaws.e-gov.go.jp/api/1/lawlists/1' # api/{Version}/lawdata/{法令番号}
path_lawlist = 'lawlist.xml'

with requests.get(url_lawlist) as res_lawlist:
    print(res_lawlist.status_code)

    with open(path_lawlist, 'w') as f_lawlist:
        f_lawlist.write(res_lawlist.text)

取得した法令一覧の一部を示します。

<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
    <Result>
        <Code>0</Code>
        <Message></Message>
    </Result>
    <ApplData>
        <Category>1</Category>
        <LawNameListInfo>
            <LawName>明治五年太政官布告第三百三十七号(改暦ノ布告)</LawName>
            <LawNo>明治五年太政官布告第三百三十七号</LawNo>
            <PromulgationDate>18721109</PromulgationDate>
        </LawNameListInfo>
        <LawNameListInfo>
            <LawName>明治六年太政官布告第六十五号(絞罪器械図式)</LawName>
            <LawNo>明治六年太政官布告第六十五号</LawNo>
            <PromulgationDate>18730220</PromulgationDate>
        </LawNameListInfo>

...

        <LawNameListInfo>
            <LawName>行政手続における特定の個人を識別するための番号の利用等に関する法律第四十五条の二第一項の法務省令で定める情報を定める省令</LawName>
            <LawNo>令和元年法務省令第三号</LawNo>
            <PromulgationDate>20190620</PromulgationDate>
        </LawNameListInfo>
    </ApplData>
</DataRoot>

e-Govで検索できるように、法律の番号をリスト化します。 少しコードが汚いですが、取得した法令一覧XMLファイルから知りたい法令の番号を抽出していくプログラムのコードを載せます。

import xml.etree.ElementTree as ET 

ET_root = ET.parse(path_lawlist)
ET_root = ET_root.getroot()
list_all_LawName = [i.text for i in ET_root.findall('.//LawName')]
list_all_LawNo = [i.text for i in ET_root.findall('.//LawNo')]
list_elec_law =[r'電気事業法', r'電気事業法施行令']

list_LawNo = []
for i_elec_law in list_elec_law:
    if i_elec_law in list_all_LawName:
        num_LawName_index = list_all_LawName.index(i_elec_law)
        str_LawName = list_all_LawName[num_LawName_index]
        str_LawNo = list_all_LawNo[num_LawName_index]
        print(str_LawName)
        print(str_LawNo)
        list_LawNo.append(str_LawNo)
print(list_LawNo)

法令番号から実際に法令のデータを取得します。

URI

https://elaws.e-gov.go.jp/api/{Version}/lawdata/{法令番号}

です。

コードを載せます。

law_name = [r'電気事業法']
lawnum = [r'昭和三十九年法律第百七十号']

for i_loop, i_lawdata in enumerate(law_num):
    path_lawname = law_name[i_loop]+'.xml'
    lawdata_url = 'https://elaws.e-gov.go.jp/api/1/lawdata/'+i_lawdata

    with requests.get(lawdata_url) as res_lawdata:
        print(res_lawdata.status_code)

        with open(path_lawname, 'w') as f_lawname:
            f_lawname.write(res_lawdata.text)

status_codeで確認したとき、HTTPレスポンスが406を吐き出すことがあります。 法令取得APIが特定サイズ(10MB)を超える法令の取得を制限しているためです。

回避しようと思ったら、条項の部分まで個別で取得する方法と、法令データを一括ダウンロードできるページを使う方法があります。

なお、条項まで含んだときのURI

https://elaws.e-gov.go.jp/api/{Version}/articles;lawNum={法令番号};article={条};paragraph={項};appdxTable={別表}

です。

それでは、取得した法令データの例を以下に示します。

<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
    <Result>
        <Code>0</Code>
        <Message></Message>
    </Result>
    <ApplData>
        <LawNum>昭和三十九年法律第百七十号</LawNum>
        <LawFullText>
<Law Era="Showa" Lang="ja" LawType="Act" Num="170" Year="39">
  <LawNum>昭和三十九年法律第百七十号</LawNum>
  <LawBody>
    <LawTitle>電気事業法</LawTitle>
    <TOC>
      <TOCLabel>目次</TOCLabel>
      <TOCChapter Delete="false" Num="1">
        <ChapterTitle>第一章 総則</ChapterTitle>
        <ArticleRange>(第一条・第二条)</ArticleRange>
      </TOCChapter>

...

    <SupplProvision AmendLawNum="平成二九年五月三一日法律第四一号" Extract="true" Type="Amend">
      <SupplProvisionLabel>附 則</SupplProvisionLabel>
      <Article Delete="false" Hide="false" Num="1">
        <ArticleCaption>(施行期日)</ArticleCaption>
        <ArticleTitle>第一条</ArticleTitle>
        <Paragraph Hide="false" Num="1">
          <ParagraphNum/>
          <ParagraphSentence>
            <Sentence Function="main" Num="1" WritingMode="vertical">この法律は、平成三十一年四月一日から施行する。</Sentence>
            <Sentence Function="proviso" Num="2" WritingMode="vertical">ただし、次条及び附則第四十八条の規定は、公布の日から施行する。</Sentence>
          </ParagraphSentence>
        </Paragraph>
      </Article>
      <Article Delete="false" Hide="false" Num="48">
        <ArticleCaption>(政令への委任)</ArticleCaption>
        <ArticleTitle>第四十八条</ArticleTitle>
        <Paragraph Hide="false" Num="1">
          <ParagraphNum/>
          <ParagraphSentence>
            <Sentence WritingMode="vertical">この附則に規定するもののほか、この法律の施行に関し必要な経過措置は、政令で定める。</Sentence>
          </ParagraphSentence>
        </Paragraph>
      </Article>
    </SupplProvision>
  </LawBody>
</Law>
</LawFullText>
    </ApplData>
</DataRoot>

コード全文をgistで共有します。

日本の電気関係の法令を取得するプログラム

取得した法令データはgithubで共有します。

github.com

規格の収集

電気設備に関係する規格を以下にまとめました。

  • JIS規格(日本産業規格)
  • JEC規格(電気規格調査会規格)
  • 内線規定(需要設備における電気設備設計の規格)

※JISは日本工業規格の略でしたが、2019/07/01に日本語名が日本産業規格となりました。今後、データ等の標準化も進んでいきます。詳しくは経産省のHPで。

なお、多くの規格が民間規格なので、著作権のためGithubに上げることはできませんでした。

JIS規格

国立国会図書館のHPを見てみると、JIS規格は規格表と呼ばれる冊子を検索、閲覧するか、JISCのHPから調べることができます。

また、個人や法人が運営するサイトでも一部公開や規格の解説されています。

JEC規格

電気学会 電気規格調査会が作成している規格です。

規格の内容は公開していません。 中身を知りたい場合は電気学会のHPで冊子または電子版を購入してください。

内線規定

電気需要場所における電気設備の保安を確保するための民間規格です。 電力会社によって付録が違います。

規格の内容は公開していません。 内容を知りたい場合は電気協会のHPで購入してください。

まとめ

XMLが使いにくいので、jsonyamlで管理したいなと思いました。 (そのうち対応します。)

規格に関しては民間主体のものが多く、著作権的な関係で本文データを扱いにくいなという印象でした。 JIS規格や内線規定は有名ですが、他にも専門的な規格が多くあるとは知らず、勉強になりました。

今後は専門的な法令や規格(省エネ法、火技解釈)も取り扱いたいと思います。

以上、記事についてミスがあれば、ご連絡ください。 また、法律のまとめ方についてご意見等ございましたら、ご教示いただけると幸いです。

今後の展開

参考サイト

※本記事は2019/08/17現在の法令に則り執筆しています

スマートスピーカー、ロック、コンセント、照明を使って賃貸住宅をスマートホーム化する

イントロダクション

スマートホームが巷で流行っていますが、実際そんなにいいものなのか調べるため、簡単なものを賃貸住宅に導入してみました。 夏休みはもう終わりましたが、資格の勉強と漫画、ゲームしかしなさそうだったので、自由研究として挑戦しました。

目次

自由研究の流れ

以下のような流れで進めました。

  1. 製品の選定、購入
  2. 機器取付
  3. IFTTT等で設定
  4. 評価

選定と購入

ベースとなるスマートスピーカーは以前の記事で紹介しています。

snova301.hatenablog.com

スマートホーム化するとしても、多くのガジェットが存在します。 実際、wikipediaにも

スマートホームとは、IoT(もののインターネット)やAIなどの技術を駆使して、住む人にとってより安全・安心で快適な暮らしを実現する住宅のこと。

という文言から始まり、いくつか商品やサービスが紹介されています。

そこで、何の目的で、何を買うか、からまず考えてみました。 選定結果は以下の通り。

製品群 目的
スマートフォン Android搭載。iOS端末もあるが今回は使用しない。
スマートスピーカ スマートフォンの代わり。持ってる
スマートロック 家の鍵をかけたか忘れることがあるため。
スマートコンセント 電気機器の電気量を個別で知りたいため。
スマート照明 白熱球を使っていたので、新しいものに交換したいため。

(実は監視カメラも買ったのですが、別の機会に紹介します。)

以上を踏まえ、購入したものはこちら。

製品群 製品 理由
スマートスピーカ Google Home Mini すでに持ってる。
スマートロック sesame mini qurioと悩んだがsesameのほうがAmazonレビューが良かったので。
スマートコンセント JULES.V Amazonで安かったので。
スマート照明 TP-Link KL110 Amazonで安かったので。

スマートロック

SESAMEはもともとクラウドファンディングで発表されたものです。 特徴は以下の通り。

  • 多くのタイプの鍵に対応
  • 取り付けが簡単
  • アプリで解錠
  • IFTTT、Google Assistant、Amazon Alexa等に対応
  • 鍵のシェアが可能
  • 従来の鍵も使用可能
  • APIが提供されている

スマートロックって工事がいるようなイメージだったのですが、調べてみると簡易的で安いものがあると知って驚きました。

早速Amazonで購入したので、開封してみます。

設定はわかりやすい説明書があるので、手順通り進めば問題ありません。

取り付け前

取り付け後

電池は上から交換です。

鍵の形状の問題でアタッチメントを取り付けたのですが、その時間を含めても数分で終了しました。

SESAME本体だけだとBluetooth通信で解錠指令を送るのですが、オンラインで解錠したかったら別途アクセスポイントを購入しないといけません。 アクセスポイントはUSBに挿して電源供給するのですが、知らなかったので少し困りました。 みなさま、お気をつけて。

アプリでセッティングして、実際に動かしてみました。 駆動音が気になりますが、便利です。

スマートコンセント

各コンセントから消費される電気量を調べるために購入しました。 設定は説明書通りすれば、問題ありません。

スイッチ機能もありますが、電気機器が物理スイッチで起動するものしか意味ないような気がします。 赤外リモコンを制御できるスマート機器を購入して併用したいです。

スマート照明

照明の消し忘れが多いので、購入しました。

アプリ上で照明の状態を確認したり、使用電気量が確認できるのがいいですね。

明かりは白熱球と特に変わりません。 アプリ立ち上げたり、"OK, Google"と言って照明をつけるのが面倒なので、現在点灯手段を模索中です。

Google Assistantとの連携

SESAMEの場合

Google Homeで"OK Google, 鍵は開いてる?"みたいなことがしたかったので、設定しました。

こちらのサイトの通りに実践しました。

それ以外の場合

Googleの公式に方法が載っていました。

照明のスイッチが地味に便利でした。

Google Assinstantにはルーティンという設定が用意されています。 "ただいま"と言えば、複数のコマンドを実行します。

まとめ

スマートホーム化しなくても生きていけます。 しかし、あったほうが便利ですし、技術を勉強する機会にもなります。 最終的には、家事をほぼ無くすことを目標に、赤外線リモコンやら物理スイッチやらをネットに繋がるようにしていきます。

Google Play and the Google Play logo are trademarks of Google LLC.