🗐 電装工芸日記 - 舞台照明機器の製作とか -

今年は開発案件を進めたい

or 管理画面へ

No.882

Icon of admin
 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]

■思ってみた

春ですねぇ~。
花粉症の部下は死にそうですが、暖かいってのはいいことです。

編集

■複合検索:

  • 投稿者名:
  • 投稿年月:
  • #タグ:
  • カテゴリ:
  • 出力順序:

■日付検索:

■カレンダー:

2024年5月
1234
567891011
12131415161718
19202122232425
262728293031

■カテゴリ:

■最近の投稿:

最終更新日時:
2025年4月29日(火) 20時16分48秒