2024年5月24日の投稿[2件]
eth0 と eth1 に Art-Net のIPアドレスを設定する bashスクリプトです。
体裁の都合でタブ下げを全角空白にしています。パクってくださる方はテキストエディタなりで全角空白を削除するか半角空白に変換してください。utf-8でも全角空白はエラーの元です。
Art-Net の OEMコードを取っていませんので、0x29DA を勝手に使ってます。身近な器具で使われていないのと「肉だ」の語呂です。製品化する際には OEMコードを取得します。
set_artnet_ipaddress_eth0eth1.sh
// RaspberryPi:4B
// OS:RaspberryPiOS(bookworm) 32bit-Lite
// パーミッション:755
// bashスクリプトですのでファイルに実行権限を与え、Sudo で実行してください。
#!/bin/bash
# 定数定義
OEM_CODE_H=41 # Art-NetのOEMコードの上位バイト10進数で表記
OEM_CODE_L=218 # Art-NetのOEMコードの下位バイト10進数で表記 仮に0x29DA Oem_hdl_dmxnode8_1 HDL
NETWORK_SWITCH=2 # NetworkSwitch/ON=2,OFF=10
ETH0_NAME="artnet-in-eth0"
ETH1_NAME="artnet-out-eth1"
# 必要なファイル、コマンドの有無を確認
# bcコマンド
if !(type "bc" > /dev/null 2>&1); then
/usr/bin/echo "[Art-Net] Please Install the bc command."
exit
fi
## ipアドレス設定
ETH_NAME=$ETH0_NAME
for (( i=0; i<2; i++ )); do
## ethの有無を確認
P_eth=$(/usr/sbin/ifconfig | /usr/bin/grep eth$i)
if [ -z "$P_eth" ]; then
/usr/bin/echo "[Art-Net] eth"$i" does not exist"
exit
fi
## ethのMACアドレスを変数に格納する
MAC_ADDR_eth=$(/usr/bin/cat `find /sys/devices/ -name eth$i`/address)
## MACアドレスの有無を確認し、あればIPアドレスの設定を実行
if [ -n "$MAC_ADDR_eth" ]; then
# ethのIPアドレス作成
# 区切り文字「:」で配列変数化
MAC_eth=(${MAC_ADDR_eth//:/ })
# 16進数の文字列を数値に変換する
MAC_eth_4=$((16#${MAC_eth[3]}))
MAC_eth_5=$((16#${MAC_eth[4]}))
MAC_eth_6=$((16#${MAC_eth[5]}))
# Art-NetのIPアドレスを計算
ArtNet_IP_eth_1=$NETWORK_SWITCH
ArtNet_IP_eth_2=$(((MAC_eth_4 + OEM_CODE_H + OEM_CODE_L) % 256))
ArtNet_IP_eth_3=$MAC_eth_5
ArtNet_IP_eth_4=$MAC_eth_6
ArtNet_IP_eth=$ArtNet_IP_eth_1"."$ArtNet_IP_eth_2"."$ArtNet_IP_eth_3"."$ArtNet_IP_eth_4
/usr/bin/echo "[Art-Net] "$ETH_NAME" is "$ArtNet_IP_eth
# NetworkManager設定ファイルの有無確認
if [ ! -e "/etc/NetworkManager/system-connections/"$ETH_NAME".nmconnection" ]; then
# 設定ファイルが無いので新規設定し有効化
/usr/bin/nmcli connection add con-name $ETH_NAME type ethernet ifname eth$i connection.autoconnect yes ipv4.addresses $ArtNet_IP_eth"/8" ipv4.method manual ipv4.never-default no ipv6.method disabled >> /dev/null
/usr/bin/nmcli c reload
/usr/bin/nmcli c up $ETH_NAME >> /dev/null
else
# 設定ファイルがある IPアドレスが違うなら更新
# 現在のIPアドレスを取得
Current_IP_eth=$(/usr/bin/ip -f inet -o addr show eth$i|cut -d\ -f 7 | cut -d/ -f 1)
# 現在のIPアドレスがArt-NetのIPアドレスと違うなら更新
if [ "$Current_IP_eth" != "$ArtNet_IP_eth" ]; then
/usr/bin/nmcli c modify $ETH_NAME ipv4.address $ArtNet_IP_eth"/8"
/usr/bin/nmcli c down $ETH_NAME >> /dev/null
/usr/bin/nmcli c reload
/usr/bin/nmcli c up $ETH_NAME >> /dev/null
/usr/bin/echo "[Art-Net] Updated eth"$i" IP address."
else
# IPアドレスが同じなので何もしない
/usr/bin/echo "[Art-Net] eth"$i" does not need to be changed."
fi
fi
else
# MACアドレスを取得出来ません
/usr/bin/echo "[Art-Net] Unable to obtain IP address for eth"$i"."
fi
## eth1に切換え
ETH_NAME=$ETH1_NAME
## for 折り返し
done
手直ししたコードに差し替えました。
下手糞コードは勘弁してください。。。
スマホで表示すると表示が崩れますが原因は不明です。
#[Art-Net]
体裁の都合でタブ下げを全角空白にしています。パクってくださる方はテキストエディタなりで全角空白を削除するか半角空白に変換してください。utf-8でも全角空白はエラーの元です。
Art-Net の OEMコードを取っていませんので、0x29DA を勝手に使ってます。身近な器具で使われていないのと「肉だ」の語呂です。製品化する際には OEMコードを取得します。
set_artnet_ipaddress_eth0eth1.sh
// RaspberryPi:4B
// OS:RaspberryPiOS(bookworm) 32bit-Lite
// パーミッション:755
// bashスクリプトですのでファイルに実行権限を与え、Sudo で実行してください。
#!/bin/bash
# 定数定義
OEM_CODE_H=41 # Art-NetのOEMコードの上位バイト10進数で表記
OEM_CODE_L=218 # Art-NetのOEMコードの下位バイト10進数で表記 仮に0x29DA Oem_hdl_dmxnode8_1 HDL
NETWORK_SWITCH=2 # NetworkSwitch/ON=2,OFF=10
ETH0_NAME="artnet-in-eth0"
ETH1_NAME="artnet-out-eth1"
# 必要なファイル、コマンドの有無を確認
# bcコマンド
if !(type "bc" > /dev/null 2>&1); then
/usr/bin/echo "[Art-Net] Please Install the bc command."
exit
fi
## ipアドレス設定
ETH_NAME=$ETH0_NAME
for (( i=0; i<2; i++ )); do
## ethの有無を確認
P_eth=$(/usr/sbin/ifconfig | /usr/bin/grep eth$i)
if [ -z "$P_eth" ]; then
/usr/bin/echo "[Art-Net] eth"$i" does not exist"
exit
fi
## ethのMACアドレスを変数に格納する
MAC_ADDR_eth=$(/usr/bin/cat `find /sys/devices/ -name eth$i`/address)
## MACアドレスの有無を確認し、あればIPアドレスの設定を実行
if [ -n "$MAC_ADDR_eth" ]; then
# ethのIPアドレス作成
# 区切り文字「:」で配列変数化
MAC_eth=(${MAC_ADDR_eth//:/ })
# 16進数の文字列を数値に変換する
MAC_eth_4=$((16#${MAC_eth[3]}))
MAC_eth_5=$((16#${MAC_eth[4]}))
MAC_eth_6=$((16#${MAC_eth[5]}))
# Art-NetのIPアドレスを計算
ArtNet_IP_eth_1=$NETWORK_SWITCH
ArtNet_IP_eth_2=$(((MAC_eth_4 + OEM_CODE_H + OEM_CODE_L) % 256))
ArtNet_IP_eth_3=$MAC_eth_5
ArtNet_IP_eth_4=$MAC_eth_6
ArtNet_IP_eth=$ArtNet_IP_eth_1"."$ArtNet_IP_eth_2"."$ArtNet_IP_eth_3"."$ArtNet_IP_eth_4
/usr/bin/echo "[Art-Net] "$ETH_NAME" is "$ArtNet_IP_eth
# NetworkManager設定ファイルの有無確認
if [ ! -e "/etc/NetworkManager/system-connections/"$ETH_NAME".nmconnection" ]; then
# 設定ファイルが無いので新規設定し有効化
/usr/bin/nmcli connection add con-name $ETH_NAME type ethernet ifname eth$i connection.autoconnect yes ipv4.addresses $ArtNet_IP_eth"/8" ipv4.method manual ipv4.never-default no ipv6.method disabled >> /dev/null
/usr/bin/nmcli c reload
/usr/bin/nmcli c up $ETH_NAME >> /dev/null
else
# 設定ファイルがある IPアドレスが違うなら更新
# 現在のIPアドレスを取得
Current_IP_eth=$(/usr/bin/ip -f inet -o addr show eth$i|cut -d\ -f 7 | cut -d/ -f 1)
# 現在のIPアドレスがArt-NetのIPアドレスと違うなら更新
if [ "$Current_IP_eth" != "$ArtNet_IP_eth" ]; then
/usr/bin/nmcli c modify $ETH_NAME ipv4.address $ArtNet_IP_eth"/8"
/usr/bin/nmcli c down $ETH_NAME >> /dev/null
/usr/bin/nmcli c reload
/usr/bin/nmcli c up $ETH_NAME >> /dev/null
/usr/bin/echo "[Art-Net] Updated eth"$i" IP address."
else
# IPアドレスが同じなので何もしない
/usr/bin/echo "[Art-Net] eth"$i" does not need to be changed."
fi
fi
else
# MACアドレスを取得出来ません
/usr/bin/echo "[Art-Net] Unable to obtain IP address for eth"$i"."
fi
## eth1に切換え
ETH_NAME=$ETH1_NAME
## for 折り返し
done
手直ししたコードに差し替えました。
下手糞コードは勘弁してください。。。
スマホで表示すると表示が崩れますが原因は不明です。
#[Art-Net]
資料映像のレンダリング中に Art-Net の IPアドレスを設定する Bashスクリプトを書いてみました。
実機は自宅ですが ssh で遠隔操作が出来ます。
dhcpcd.conf の書き換えを NetworkManager のコマンドに置き換えるだけですので難しくはありません。
とりあえず本体プログラムを書くための準備は終わりました。
#[Art-Net]
実機は自宅ですが ssh で遠隔操作が出来ます。
dhcpcd.conf の書き換えを NetworkManager のコマンドに置き換えるだけですので難しくはありません。
とりあえず本体プログラムを書くための準備は終わりました。
#[Art-Net]