蛍光灯の安定器の作成

 

いわゆる蛍光灯は2027年末で製造あんど輸入禁止


 https://www.env.go.jp/content/000200659.pdf
 との事であと3年半で手に入らなくなるようですね。
  使用するのはOKですので、使い続けるのは良いんですけど。
   蛍光灯は寿命が短いので、大量に買い込んでおく人も現れそうです。

 

蛍光灯のあの不安定な感じが好きです。
 無くなってしまうのは悲しいですね。

蛍光灯には安定器と、グローランプが必要で、
 どちらも価格が上がっていると感じています。
 
回路図

アカリセンターより
 https://www.akaricenter.com/chokkan/fujiidenki/img/ecd-20100ab1-kessen.gif

 


 

それで、
そもそも蛍光灯ってどうやってるんだっけ?
 と思い、グローランプ繋いで、直接100Vに接続してみると、一瞬ピカッと光り、
  お亡くなりになりました。
   上の回路の安定器を抜いたバージョンですね。

 

google先生解説
『放電ランプの場合はランプ電流が増加するにつれてランプ電圧が
 低下すると いう特性(負特性)があるため、
 ランプに電流が流れ始めると急激に電流が増大して、
 ランプが壊れてしまいます。 
 そこで、ランプに大きな電流が流れないようにするのが、
 安定器の役割です。』 

 

電流を制限するですね。ちょっと判んないですが、
 間の所にコイルをくっつけて抵抗にするってことですかね?

 

安定器を追加で購入
 ECD-20100AB1
  20W1灯のもので
  1000円ぐらいでした。
   ちなみに蛍光灯はDAISOで150円

 

で、上記の通りに接続して
 電源ON。予定通り光りますね。

 

 

 

この安定器と同じものを挟めば良いって事が判ったので
 測定。1-3間のコイルの直流抵抗とインダクタンスを測定してみた。
  430mH
  28.3Ω
  
これと同じようにコイル巻けば良いんですよね。
って事で。巻いてみた。というか昔巻いたのを持ち出してきた。

 

 

何回巻いたか忘れたけど、
 0.2mmのポリウレタン線を6.8mmの鉄の棒にぐるぐる巻いて、
 電磁石になるまで巻いたのが有ったので、それを使ってみました。
  多分100回から120回ぐらい。

 

自作コイルの測定。
 350mH
 67Ω
 直流抵抗が多めで、インダクタが7割程度ですが、壊れることはなかろう。

 

これで、上記の通りに接続して
 電源ON。ちゃんと光りますね。

 

 

測定すると、蛍光灯の両端にかかっている電圧が78V
 全体の消費電力が12Wでした。蛍光灯が20W型で消費電力18Wの定格のものなので、
  省エネです。

 

1時間程度安定して点灯したのを確認しましたが、
 自作安定器=コイルはほんのり温かい感じです。
 安定機の部分で消費している電力が約2.6Wになる計算です。

 

サンキャッチャーなるものをぐるぐる回す装置。

 

はじめに

 

サンキャッチャーなるものをもらいました。
太陽の光の当たる場所に置くと、反射したり、屈折したりして、
家の中の壁に星のような模様を浮かべてくれます。
おっちゃんは手で回すのが面倒だったのでこれを回転する装置を考えてみました。

 

動いている様子
 https://youtu.be/j7XFsv0Efww

 


 なんか最後のカットが未確認の空飛ぶ飛行物体みたいになった。

 

材料は

 

 タミヤのプーリーがメインで、
  https://www.tamiya.com/japan/products/70140/index.html
  タミヤの 3mmシャフトセット
   https://www.tamiya.com/japan/products/70105/index.html

 

 あとはどこかから集めてきた板の端切れと
  モーター固定するやつ
   https://www.monotaro.com/g/06009597/?t.q=%E3%83%A2%E3%83%BC%E3%82%BF%E3%83%BC%20%E5%9B%BA%E5%AE%9A

 

 手持ちの材料でなんでも作りたいんですけど、
  回転部分の抵抗は少なくしたいので内径3ミリ、
   外形6ミリのベアリングを採用しています。
    https://www.amazon.co.jp/gp/product/B0CFZQRL8C

 

 特別なことはないんですが、
  垂直に穴を開けるのが味噌です。
   ドリルガイド有ったほうが良き
    https://www.amazon.co.jp/gp/product/B0B1ZTB3SW
    

 あと130モーター。
  https://www.amazon.co.jp/gp/product/B00288BIE4
  
プログラムもいらないですね。電源にモーターを直結してください。

 

上から見た図


下から見た図

 

 

横から見た図

 


壁の光

 


キャッチャー

 


130モーターなので、結構動作音が気になります。

 もう少し、音の小さいほうが実用性はありそうですね。

 

UBUNTU22でSIPサーバーasteriskをインストール

 

■ubuntu22をダウンロード

 

https://jp.ubuntu.com/download
から Ubuntu Desktop 22.04.4 LTS をダウンロードしてきます。

 

■USBメモリに書き込みます。

 

ダウンロードすると
 ubuntu-22.04.4-desktop-amd64.iso
  が取得できます。
 isoの書き込めるソフトを使ってDVDか、USBに書き込みます。

今回はrufusを使ってUSBに書き込みます。

 

■UBUNTUの最新化

 

sudo apt update

 

sudo apt upgrade

 

sudo shutdown -r now

 

■asteriskをインストール

 

sudo apt search asterisk


sudo apt show asterisk


sudo apt install asterisk -y

 

これで終わり。centOSに比べてすごい簡単。

途中でソースを変更したり、必要なパッケージを足したりとかは不要でした。

 

■asteriskを有効化して起動

 

systemctl enable asterisk

 

systemctl start asterisk

 

sudo systemctl status asterisk

 

■pjsip

 

※pjsipは上記で有効になるのでしょうか?
※centOSでは別にインストールしていたんですけどね。

 

===============
asterisk設定と音声ガイダンス

===============

 

■音声ガイダンス

 

前回と同じく6003にかけた時に
 「こちら〇〇です。電話がつながったらお話ください。」とガイダンスを流します。
ファイルはgsmという形式で配置するので、
 wavファイルに録音後、http://convertio.co/ja/m4a-gsm/
 にアクセスして変換しておきます。
  
ガイダンス用の応答の音声ファイルの置き場
 CentOSと違って、/var/lib/asterisk/sounds配下にenが無くてcustomが存在するのでそこに配置

ls /var/lib/asterisk/sounds
cp /home/housou/eiwadai.gsm /var/lib/asterisk/sounds/custom

 

■設定を入れます。

 

vi /etc/asterisk/pjsip.conf 

 

[transport-udp]
type=transport
protocol=udp
;udp,tcp,tls,ws,wss,flow
bind=0.0.0.0

[6001]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6001
aors=6001
rewrite_contact=yes

[6001]
type=auth
auth_type=userpass
password=6001
username=6001

[6001]
type=aor
max_contacts=2

[6002]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6002
aors=6002
rewrite_contact=yes

[6002]
type=auth
auth_type=userpass
password=6002
username=6002

[6002]
type=aor
max_contacts=2

[6003]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6003
aors=6003
rewrite_contact=yes

[6003]
type=auth
auth_type=userpass
password=6003
username=6003

[6003]
type=aor
max_contacts=2

※pjsip.confはCentOSと変わらず

 

vi /etc/asterisk/extensions.conf

 

[default]
exten => 6001,1,Dial(PJSIP/6001,,r)
exten => 6001,2,Hangup()

exten => 6002,1,Dial(PJSIP/6002,,r)
exten => 6002,2,Hangup()

exten => 6003,1,Answer()
exten => 6003,2,Playback(/var/lib/asterisk/sounds/custom/eiwadai)
exten => 6003,3,Dial(PJSIP/6003,,r)
exten => 6003,4,Hangup()

※ポイントは「音声ガイダンスをフルパスで書く」です。

 

systemctl stop asterisk

 

systemctl start asterisk

 

systemctl status asterisk

 

■Zoiperをインストール

 

ダウンロード
https://www.zoiper.com/en/voip-softphone/download/current
Linux用をダウンロードしてきます。

 

解凍
 tar Jxfv Zoiper5_5.6.4_x86_64.tar.xz

 

起動

cd Zoiper5/
./zoiper

 

起動してくる画面でfreeで進んで
ログインID : 6003@192.168.120:5060
パスワード : 6003
↑はpjsip.confに設定したもの

自動応答
 proにアップグレードして、設定から自動応答
   再起動後に設定を維持をクリックしておく

 

■自動ログイン

 

 OS起動と同時にZoiperも起動したいので、
 UBUNTUの設定で自動ログインにしておく。
 設定→ユーザ→ロック解除→自動ログイン
 

DELL-inspironにLinuxをインストールする方法

 

DELL inspiron 14 5430にLinuxをインストールする時に
 いろいろハマりましたので記録に残します。

 

■ハマりポイント

 

 3つあります。

 そもそもCentOS7.9はM.2のSSDには対応できない。
 ビットロッカーで暗号化されているために、Linuxから認識できない。
 セキュアブートがBios設定ONになっているため、Linuxを入れるのはOFFにしなきゃならない

 

■CentOS7.9

 

CentOS7.9はもう古いんです。Windows7でも同じ事象が出てるみたいですが、
 M.2のSSDはインストール先として一覧に出てきません。
 自分としては色々使っていたOSなので、名残惜しいですが、
 今年7月だったかなーでサポート切れでセキュリティーアップデートも出なくなるので
 今後はUbuntuに乗り換えかなーと思います。
 Ubuntuの22.04.4ならあと3年は大丈夫です。
 
■ビットロッカー
 
インストールされてきたWindows11ですが、ビットロッカーが標準でONになってます。
このため、他から見ようと思ってもその領域見れません。
Windowsの設定 セキュリティーからOFFにしておきます。
 
■セキュリティーブート

 

これはCentOS7.9でやろうとしていたからなんですけど、
 古いLinuxをインストールする場合はBios設定のセキュリティーブートを
  OFFにするのが効く場合もあるようです。
 Unbuntuの22.04.4はセキュリティーブートに対応しているようで大丈夫ですね。
 いちおう記録としてメモっておきます。

DELL-inspironにWindows11をクリーンインストールする方法

 

2もあります。

 DELL-inspironにWindows11をクリーンインストールする方法2

 

DELL inspiron 5430にLinuxをインストールした後に、

 Windowsに戻すのにいろいろハマりましたので記録に残します。

 

■まえがき

 

Windowsに対応していないソフトが有りまして、
  Linuxでシステムを作りたかったので、
  簡単にノートパソコンを購入し、
   Windowsを消してLinuxに入れ替えて使い終わったら
  Windowsに戻す!!ということを考えておりました。
 戻すときの方法を普通にマイクロソフトのサイトからWindows11を
 ダウンロードしてインストールすればよいと思っておりました。
 
 これが甘かった。

 

■ハマった所
 
 自作PCとかだと、MicrosoftからダウンロードしたWindows11の
  インストーラーのisoをdvdに焼いて起動すれば、インストールOK
   となるんですけど。
 
 本パソコンでは
  DVDから起動して進むんだけど、インストール先のHDDの指定で
   SSDのディスクが表示されない事象が発生。
 
 ここから調べたり試したりが始まって・・・
 
 M.2のSSDだと出来ない場合がある。
  とか、
 M.2のSSDだと、SerialATAじゃ無いのでNVMEがー
  とか
 BIOSでIntel VMDに関する項目を探して確認。有効の場合は無効にするか、
  有効のままドライバーを組み込んでWindowsをインストール
   とか
 いろいろ情報があったんですけど、本パソコンにはいまいち当てはまらず。
 
 何時間か経過・・・・

 

■解決

 

 なんか翻訳がおかしくて「Linuxを再インストールする」ってなってますけど、
  Winodws11のクリーンインストールが可能です。
   もともとLinuxで出荷されたのはLinuxが入るのかもです。
 
 OS Recovery Toolを以下からダウンロードして
 https://www.dell.com/support/home/ja-jp/drivers/osiso/recoverytool/w2021
 ツールを起動するとUSBにリカバリブート用のセットアップを書き込んでくれる。
 そのUSBをパソコンにセットして、
  起動直後F12を押してUSBから起動させて、後はメニューに合わせて進んでいく。
 いちおう、システム検査後、リセットを選択。

 


 Windows11の初期化へ進んで無事Windows11に戻りました。

 途中の試行錯誤でBios設定を色々いじってたので、工場出荷状態に戻したり、
  工場出荷状態に戻らない項目は手動で戻したりいろいろしましたけど、
   結果は上記の通り

音声転送プログラム

 

■前書き


 現代において
  インターネット回線を使ってPC同士で会議とか、通話とかする事が出来ます。

今回はその初歩的部分。
  pythonを使って一方通行ですが、
   音声を送るプログラムを作ってみたので、そのプログラムとセットアップ方法を
    記録しておきます。

 

■構成

 

  マイク-PC1-(LAN)-PC2-アンプスピーカー

 

■方式
 
 PC1
   PyAudioでマイクから音声を入力。44.1Khz モノラル 16Bit
    そのままUDPで宛先を指定して送信
 
 PC2
    UDPでデータを受け取って
    PyAudioでスピーカーに音声を入力。44.1Khz モノラル 16Bit

 ※この方式の欠点
    全く圧縮していないので、ネットワーク帯域を結構使う。
      といっても、計算すると
       44100×2×8=約71Kbps 
        ぐらいですので、構内LANで単独使用なら問題ないかなーと思います。
    UDPなので、順序保証とか、データの保障が無い。
      とはいえ、こちらも多少ノイズとして聞こえるぐらいの
       影響しかないかなーと思います。
     送信側と受信側で同期を取っていないので、長時間使うと遅延したり、
      バッファーがオーバーフローする可能性あり。
     送受信の両方でエラー時に自動的に再起動するとか、対処必要になると
      思われ。

 

========================
セットアップ
========================

 

■ファイル配置

 

 /usr/local/bin/audio-transferに所定のファイルを配置していく

 

[root@localhost audio-transfer]# pwd

/usr/local/bin/audio-transfer

 

[root@localhost audio-transfer]# ls -al
合計 12
drwxr-xr-x. 2 root root   57  3月 21 09:42 .
drwxr-xr-x. 3 root root   28  3月 21 09:42 ..
-rw-r--r--. 1 root root 1241  3月 21 09:42 recv.py
-rw-r--r--. 1 root root 1526  3月 21 09:42 send.py
-rw-r--r--. 1 root root 1248  3月 21 09:42 show-audio.py
[root@localhost audio-transfer]# 

 

■python準備

 

Windowsも手順は同じ。
以下はCentOSの場合を記載しています。

 

[root@localhost audio-transfer]# python --version
Python 2.7.5

古い。せめて3系にしたいなー
って事で・・・

 

yum install -y python36
yum install -y python36-devel
pip3 install pyaudio

 

■テスト

 

python3.6 show-audio.py

これで、パソコンに入っているオーディオの入出力ポートが一覧出力される。

 

 Device 0: HDA Intel HDMI: HDMI 0 (hw:0,3), Channels: 0
 Device 1: HDA Intel HDMI: HDMI 1 (hw:0,7), Channels: 0
 Device 2: HDA Intel HDMI: HDMI 2 (hw:0,8), Channels: 0
 Device 3: HDA Intel HDMI: HDMI 3 (hw:0,9), Channels: 0
 Device 4: HDA Intel HDMI: HDMI 4 (hw:0,10), Channels: 0
 Device 5: HDA Intel PCH: ALC269VC Analog (hw:1,0), Channels: 2
 Device 6: hdmi, Channels: 0
 Device 7: pulse, Channels: 32
 Device 8: default, Channels: 32
 
しかし、このままではどれがマイクからの入力なのかわからん。
 なので、0から順番に試していって、
  5番がそれである事を突き止めて、
   input_device_index = 5 #
    に決定。

 

だけど、一瞬つながった後にエラーになる。
 その一瞬に送信側でなにか叫ぶと受信側のスピーカーから音が鳴る。
  少し成功。あと一歩です。

 

Traceback (most recent call last):
  File "send.py", line 42, in <module>
    data = stream.read(chunk)
  File "/usr/local/lib64/python3.6/site-packages/pyaudio/__init__.py", line 571, in read
    exception_on_overflow)
OSError: [Errno -9981] Input overflowed

[root@localhost audio-transfer]# 

 

バッファーが足りなくなるとダメっぽいので5倍にする。
「chunk = 50240」に変更

 

Traceback (most recent call last):
  File "send.py", line 45, in <module>
    sock.sendto(data, addr)
OSError: [Errno 90] Message too long
[root@localhost audio-transfer]# 

 

今度はUDP送信でメッセージが長いって。

 

試行錯誤・・・・

 

結局googleで探して
音声をマイクから読み込む部分に「exception_on_overflow=False」を追加。
data = stream.read(chunk, exception_on_overflow=False)

 

いちおうこれで落ち無くなった。

 

いろいろいじってると判るんだけど、
chunkを大きくすると遅延が出ることが判明。
結局chunkは元に戻して1024とする。
「chunk = 1024」

 

■解決

 

音はクリアですね。デジタル通信なんだから当たり前といえば当たり前。
 しかし、圧縮してないので、理論的に考えて普通のIP電話よりクリアですね。
帯域さえ確保できれば(といいつつも、それほど大きな帯域でもないし)
44.1Khz/16Bitですから、CD音質で音を運ぶのは現代の通信回線において余裕です

 

■起動

 

受信側PC(Windows)
 python3.6 recv.py
 ※受信側はOSのFW設定でUDPの5005を開けてください。

 

送信側PC(CentOS)
 python3.6 send.py

 

■結果のソース。

 

「送信側」

 

import pyaudio
import socket
import sys

# ネットワーク設定
UDP_IP = "192.168.10.111"  # 送信先のIPアドレス
UDP_PORT = 5005  # 送信先のポート番号
addr = (UDP_IP, UDP_PORT)

# PyAudioの設定
chunk = 1024 # 音声データのチャンクサイズ
#chunk = 10240 # 音声データのチャンクサイズ
format = pyaudio.paInt16  # 音声のフォーマット
channels = 1  # モノラル
rate = 44100  # サンプリングレート
input_device_index = 5 # 

# UDPソケットの初期化
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# PyAudioの初期化
p = pyaudio.PyAudio()

# 音声入力ストリームの開始
stream = p.open(format=format,
                channels=channels,
                rate=rate,
                input=True,
                frames_per_buffer=chunk,
                input_device_index=input_device_index)

# 音声出力ストリームの開始
#output_stream = p.open(format=format,
#                       channels=channels,
#                       rate=rate,
#                       output=True,
#                       frames_per_buffer=chunk)

print("録音を開始します。CTRL+Cで終了します。")

try:
    while True:
        data = stream.read(chunk, exception_on_overflow=False)
        #output_stream.write(data)  # スピーカーから音声出力
        sock.sendto(data, addr)  # UDPで音声データを送信
except KeyboardInterrupt:
    print("録音を終了します。")

# ストリームを閉じる
stream.stop_stream()
stream.close()
#output_stream.stop_stream()
#output_stream.close()
p.terminate()

# ソケットを閉じる
sock.close()

 

 

 

「受信側」

 

import pyaudio
import socket
import sys

# ネットワーク設定
HOST = ""  # 送信先のIPアドレス
PORT = 5005  # 送信先のポート番号

# PyAudioの設定
chunk = 102400  # 音声データのチャンクサイズ
format = pyaudio.paInt16  # 音声のフォーマット
channels = 1  # モノラル
rate = 44100  # サンプリングレート

# UDPソケットの初期化
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((HOST, PORT))

# PyAudioの初期化
p = pyaudio.PyAudio()

# 音声出力ストリームの開始
output_stream = p.open(format=format,
                       channels=channels,
                       rate=rate,
                       output=True,
                       frames_per_buffer=chunk)

print("受信を開始します。CTRL+Cで終了します。")

try:
    while True:
        data, address = sock.recvfrom(chunk*2)
        #print(f"address: {address}")
        output_stream.write(data)  # スピーカーから音声出力
except KeyboardInterrupt:
    print("受信を終了します。")

# ストリームを閉じる
output_stream.stop_stream()
output_stream.close()
p.terminate()

# ソケットを閉じる
sock.close()

 

「オーディオデバイス確認」

import pyaudio

p = pyaudio.PyAudio()

# 使用可能なオーディオデバイスのリストを表示
for i in range(p.get_device_count()):
    info = p.get_device_info_by_index(i)
    print(f"Device {i}: {info['name']}, Channels: {info['maxInputChannels']}")

# 目的のデバイスのインデックスを選択
input_device_index = 0  # 例えば、リストから選んだ入力デバイスのインデックス
output_device_index = 2  # 例えば、リストから選んだ出力デバイスのインデックス

# 音声入力ストリームの開始(特定のデバイスを使用)
stream = p.open(format=pyaudio.paInt16,
                channels=1,
                rate=44100,
                input=True,
                frames_per_buffer=1024,
                input_device_index=input_device_index)  # 入力デバイスを指定

# 音声出力ストリームの開始(特定のデバイスを使用)
output_stream = p.open(format=pyaudio.paInt16,
                       channels=1,
                       rate=44100,
                       output=True,
                       frames_per_buffer=1024,
                       output_device_index=output_device_index)  # 出力デバイスを指定
 

CentOSのSELINUXとFWをOFFにしていたので、ONにして穴開けする。

 

 CentOS7.9の記事の続き

   https://ameblo.jp/fc2miha/entry-12843730608.html

 

 

■SELINUXをONにする

 

su - root

 

vi /etc/selinux/config

ELINUX=enforcing
SELINUXTYPE=targeted

:wq

 

reboot

→SELINUXをONにすると起動が遅くなった

 

getenforce
→Enforcingになっている

 

■FWをONにして穴開け

 

systemctl enable firewalld


systemctl start firewalld


systemctl status firewalld

 

FWがONになる。この時点でasteriskはうまく動作できない

 

■FW穴開け

 

firewall-cmd --add-port=5060/udp --zone=public --permanent

 

firewall-cmd --reload

 

firewall-cmd --list-all

 

reboot

 

asteriskの設定 ガイダンスを流した後に通話開始

 

 

■音声ファイルをサーバー上に配置する。


ls /var/lib/asterisk/sounds/en
上のディレクトリにeiwadai.gsmという名前でファイルを配置。
このファイルはgsmなので、
 wavファイルに録音後、http://convertio.co/ja/m4a-gsm/
  にアクセスして変換しておく

 

■extensions.confの6003を書き換える。


exten => 6003,1,Answer()
exten => 6003,2,Playback(eiwadai)
exten => 6003,3,Dial(PJSIP/6003,,r)
exten => 6003,4,Hangup()

 

answerで電話をとって、Playbackで音声ファイルを再生する。
その後、ダイヤルする

SIPクライアントzoiperをLinuxのCentOS7.9へインストール

 

SIPクライアントzoiperをLinuxへインストールする場合に
 Netに出回っている情報と違ったのでハマりました。
 みんなハマってないのかなー

 

CentOS7.9にSIPクライアントであるZoiperをインストールする記事です。

 

■ダウンロード

 

zoiperのページからtar.xz版をダウンロード

 

■解凍

 

tar Jxfv Zoiper5_5.6.4_x86_64.tar.xz

 

■起動

 

cd Zoiper5

 

./zoiper

 

エラーになる・・・

 

■エラー対応

 

./zoiper: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

 

yum install libXScrnSaver

 

■再度起動

 

./zoiper

 

起動してきた。
動作確認。
けど、いろいろ操作できない。
ctrl+Cで終了

 

■再度再度

 

suでrootになっているせいかもしれないので
一般ユーザーで再度

 

./zoiper

 

今度は大丈夫

アカウントを登録
 6003@192.168.10.11:5060
通話できる。

 

成功!!

 

■ログイン時自動起動

 

 Tweaksの自動起動に設定しようと思ったらもう既に入っていた。
 上の./Zoiperの時に設定されるらしい。

 

■自動着信設定

 

※これは、お金払わないと出来ない

 設定→通話
  着信通話処理を有効をチェック
  自動応答 3秒で設定
  再起動後も設定を維持をチェック

 

■自動ログイン設定

 

アプリケーション→システムツール→設定

 →詳細→ユーザー

 ロック解除

 自動ログイン オン

 

asteriskでSIPサーバ構築

 

■参考図書
 https://www.aska-ltd.jp/jp/blog/151
 Kindle版Asterisk徹底入門:VoIPに関する基礎知識からAsteriskによる内線電話環境を構築
 


■OSインストール

 CentOS7.9をインストール
 インストール時の選択で以下にチェック入れる
  GUI
  開発環境

 

■root

 

su - root

 

■最新化

 

yum -y update

 

■必要なパッケージ追加

 

yum install vim epel-release gcc gcc-c++ wget make bzip2 patch subversion json-c json-c-devel unixODBC unixODBC-devel mysql-connector-odbc libtool-ltdl libtool-ltdl-devel jansson-devel libsrtp-devel openssl openssl-devel dmidecode ncurses-devel libxml2-devel newt-devel kernel-devel sqlite-devel libuuid-devel gtk2-devel binutils-devel libedit libedit-devel svn

 

■SELINUXを無効化


 とりあえず開発フェーズなので無効化して進む。
  必要な穴あけは後でで考える

 

sestatus

 

vi /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
:wq

 

reboot

 

getenforce

 →disabledになっている


■Pjsipをインストール

 

cd /usr/src/

 

wget https://github.com/pjsip/pjproject/archive/2.10.tar.gz

 

tar zxvf 2.10.tar.gz

 

cd pjproject-2.10

 

./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" --prefix=/usr --libdir=/usr/lib64 --enable-shared --disable-video --disable-sound --disable-opencore-amr

 

make dep

 

make

 

make install

 

ldconfig

 

■Asterisk18をインストール

 

cd /usr/src/

 

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz

 

tar xvfz asterisk-18-current.tar.gz

 

cd /usr/src/asterisk-18*/

 

contrib/scripts/install_prereq install

 

./configure --libdir=/usr/lib64 --with-jansson-bundled

 

make menuselect.makeopts

 

menuselect/menuselect --enable chan_ooh323 --enable format_mp3 --enable CORE-SOUNDS-JA-WAV --enable CORE-SOUNDS-JA-ULAW --enable CORE-SOUNDS-JA-ALAW --enable CORE-SOUNDS-JA-GSM --enable CORE-SOUNDS-JA-G729 --enable CORE-SOUNDS-JA-G722 --enable CORE-SOUNDS-JA-SLN16 --enable CORE-SOUNDS-JA-SIREN7 --enable CORE-SOUNDS-JA-SIREN14 --enable app_macro --disable BUILD_NATIVE

 

contrib/scripts/get_mp3_source.sh

 

make

 

途中エラーになる。同じエラーの場合は以下の対処で・・・
chan_iax2.c:418:64: エラー: expected ‘;’, ‘,’ or ‘)’ before ‘buf’
[root@localhost asterisk-18.21.0]# find . -name chan_iax2.c
./channels/chan_iax2.c
[root@localhost asterisk-18.21.0]# vi ./channels/chan_iax2.c
    418 /* static char *auth_method_names(int authmethods, char *restrict buf) */
    419 static char *auth_method_names(int authmethods, char *buf)
    :wq

 

make install

 

make samples

 

make config

 

ldconfig

 

■Asterisk18を有効化

 

systemctl status asterisk
systemctl enable asterisk
systemctl start asterisk

 

■停止する場合
####
# systemctl stop asterisk
#

 

■ファイアウォールも無効化
 とりあえず開発フェーズなので無効化して進む。
  必要な穴あけは後でで考える
####
#
# FW stop
#
#  systemctl stop firewalld
#  systemctl status firewalld
#  systemctl disable firewalld
#  systemctl status firewalld
#

####
#
# SE-LINUX stop
#
#  setenforce 0
#  getenforce
#


■Asteriskの設定

 

内線通話設定する
Asteriskは自動応答とか、番号入力への応答とか
 色々できるソフトなんですけど、今は内線通話さえできればOKなので、
  簡単な内線設定を考える。
 
今回の設定の内容。
 内線番号は3つ。
  6001、6002、6003が存在。
 SIPサーバーのIPアドレスは192.168.10.119

 

内線通話だけなら2つのファイルを変更すれば良い。
 /etc/asterisk配下に存在
  pjsip.conf : [endpoint]は内線番号の数だけ記述する。
          内線間で通話できれば良いので同じ記述の繰り返しになる。
          ずらっと書かなければならないのか
          省略した書き方ができるかは不明。
  
  extensions.conf : 通話開始から、動作のシーケンスを記述。
            通話開始後にメニュー音声を読み上げ後に
            番号を押させて分岐もここで記述可能。

 

vi /etc/asterisk/pjsip.conf

 

[transport-udp]
type=transport
protocol=udp
;udp,tcp,tls,ws,wss,flow
bind=0.0.0.0

[6001]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6001
aors=6001
rewrite_contact=yes

[6001]
type=auth
auth_type=userpass
password=6001
username=6001

[6001]
type=aor
max_contacts=2

[6002]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6002
aors=6002
rewrite_contact=yes

[6002]
type=auth
auth_type=userpass
password=6002
username=6002

[6002]
type=aor
max_contacts=2

[6003]
type=endpoint
transport=transport-udp
context=default
disallow=all
allow=ulaw
allow=gsm
auth=6003
aors=6003
rewrite_contact=yes

[6003]
type=auth
auth_type=userpass
password=6003
username=6003

[6003]
type=aor
max_contacts=2

 

vi /etc/asterisk/extensions.conf

 

[default]
exten => 6001,1,Dial(PJSIP/6001,,r)
exten => 6001,2,Hangup()

exten => 6002,1,Dial(PJSIP/6002,,r)
exten => 6002,2,Hangup()

exten => 6003,1,Dial(PJSIP/6003,,r)
exten => 6003,2,Hangup()

 

[default]ひとつ書いておけばOKで、
 pjsip.confに書いたcontext=defaultに対応している。

 

ex...
 exten => 内線番号,シーケンス,コマンド
 シーケンスは内線番号ごとに1から記述。途中飛ばすと止まる
 Dial()は通話してくれる。
  ()の中身は
   通話するSIP技術の種類,
   タイムアウト(秒)省略可(省略時は無限),
   オプションrはリンクバックトーン有
 Hangup()は通話完了

 

■内線電話機の設定
 
 Zoiperを使用する場合。
 Linux、MacOS、Windows、Android等対応しているみたいです。
  フリーの他にも有料版あります。
   実験で使うだけなので、課金はちょっと無理。
 
 というわけで、設定項目はどのOSでも同じです。
 

 


 設定としては
  アカウント6001@192.168.10.119:5060
  SIPアカウント
   ドメイン :192.168.10.119:5060
   ユーザ名 :6001
   パスワード:6001
 5060はサーバーのポート番号5060がデフォルトみたい。
 ドメインはサーバーのIPアドレス。
  ユーザ名とパスワードはpjsip.confファイルにtype=authで
   指定したものを指定。
 
■通話

 

 上記設定できていれば、
 相手の内線番号=上記のユーザ名を入れて通話可能になります。