API ログ ファイルをダウンロードして変換する | Python
- Moku:Lab
- Moku:Go
-
Moku:Pro
Moku:Proに関するよくある質問 Moku:Pro波形発生器 Moku:Proタイム&周波数アナライザ Moku:Proロジックアナライザ/パターンジェネレーター Moku:Proレレーザーロックボックス Moku:Proロックインアンプ Moku:Proスペクトラムアナライザ Moku:Proデータロガー Moku:Pro任意波形発生器 Moku:Proマルチ機器モード Moku:Pro位相計 Moku:Pro FIRフィルタービルダー Moku:Pro PIDコントローラー Moku:Proオシロスコープ Moku:Pro周波数応答アナライザ Moku:Proデジタルフィルターボックス
- Python API
- MATLAB API
- 任意波形発生器
- データロガー
- デジタルフィルターボックス
- FIR フィルタ ビルダー
- 周波数応答アナライザー
- レーザーロックボックス
- ロックインアンプ
- オシロスコープ
- 位相計
- PIDコントローラー
- スペクトラムアナライザー
- 時間と周波数アナライザー
- 波形発生器
- ロジックアナライザ/パターンジェネレーター
- マルチ機器モード
- Mokuクラウドコンパイル
- Mokuに関するよくある質問
- LabVIEW API
.li ファイルをログに記録してダウンロードする
ファイルにログを記録する代わりに、ファイルにストリーミングする (1 つのスクリプト内でログに記録して変換する) には、この記事を参照してください。
API ストリーミングと stream_to_file | Python
まず、ログセッションを開始してファイルをダウンロードします。API の詳細については、API リファレンスをご覧ください。
データロガー | API リファレンスdownload_file Python のデータロガーの例
# moku example: Basic Datalogger
# (c) 2025 Liquid Pty. Ltd.
import os
import time
from moku.instruments import Datalogger
# Connect to your Moku
i = Datalogger('192.168.###.###', force_connect=False)
try:
# Set-up the Datalogger
i.set_samplerate(100)
i.set_acquisition_mode(mode='Precision')
i.generate_waveform(channel=1, type='Sine', amplitude=1, frequency=10e3)
# Start a logging session
logFile = i.start_logging(duration=10)
# Track progress percentage of the data logging session
complete = False
while complete is False:
time.sleep(0.5)
progress = i.logging_progress()
complete = progress['complete']
if 'time_remaining' in progress:
print(f"Remaining time {progress['time_remaining']} seconds")
# Download the .li log from Moku
i.download(logFile['location'], logFile['file_name'],
os.path.join(os.getcwd(), logFile['file_name']))
print(f"Downloaded log file to local directory. {logFile['file_name']}")
except Exception as e:
print(f'Exception occurred: {e}')
finally:
# Close the connection to the Moku device
i.relinquish_ownership()
出力例:
{'sample_rate': 100.0}
{'mode': 'Precision'}
{'amplitude': 1.0, 'frequency': 10000.0, 'offset': 0.0, 'phase': 0.0, 'type': 'Sine'}
...
Remaining time 0 seconds
Downloaded log file to local directory. MokuDataLoggerData_20250116_102402.li
Mokuクリ法
mokucli がインストールされていることを確認してください。 ユーティリティページからダウンロードできます。
コマンドラインから、希望するファイル タイプ (csv、npy、mat、または hdf5) に変換できます。この例では csv に変換します。ファイルがあるディレクトリに変更するか、完全なファイル パスを使用します。
C:\Users\user\Downloads>mokucli convert MokuDataLoggerData_20250116_102402.li --format=csv
[===========================================================================]
Done.
別の方法としては、スクリプト内から mokucli を呼び出すことです。このユースケースでは、 streaming
とstream_to_file
が理想的です。次の記事を参照してください。
API ストリーミングと stream_to_file | Python
スクリプト内から mokucli を呼び出すのはベストプラクティスではありませんが、オプションとして利用できます。
import subprocess
sp = subprocess.run(f'mokucli convert --format=csv {logFile['file_name']}', capture_output=True, text=True)
print(sp.stdout)
file_name = logFile['file_name'][:-2] + 'csv'
LIファイルコンバーター方式
あるいは、LIファイルコンバータGUIを使用してファイルを変換することもできます。これはMoku :アプリからアクセスするか、 ユーティリティページからダウンロードできます。

ファイルの種類を選択して、ファイルをコンバーターにドラッグアンドドロップするか、「ファイル | ファイルを開く」または「Ctrl/Cmd + O」を使用してコンバーターからファイルを開くことができます。

ファイルからデータを読み込む
変換されたファイルを使用してデータを読み込んで分析できます。
import os
import csv
import numpy as np
import matplotlib.pyplot as plt
file_name = "MokuDataLoggerData_20250116_102402.csv"
channels = 2
print(file_name)
assert os.path.isfile(file_name), "Streaming failed, no file received"
data = {'time':[], 'ch1':[]}
with open(file_name, 'r') as f:
load = csv.reader(f)
file = np.array([[float(row[0])] + [float(row[i]) for i in range(1, channels+1)] for row in load if row[0][0] != '%'])
f.close()
data['time'] = file[:,0]
for i in range(1, channels+1):
data[f'ch{i}'] = file[:,i]
keys = data.keys()
for key in keys:
print(f"'{key}': {str(data[key][:3])[:-1]} ... {data[key][-1]}]")
fig = plt.figure(figsize=(10, 3))
for i in range(1, channels+1):
plt.plot(data['time'], data[f'ch{i}'], label=f'Channel {i}')
plt.title("Logged Data")
plt.grid(True)
plt.xlabel("Time (s)")
plt.ylabel("Voltage (V)")
plt.legend(loc=0)
plt.show()
出力例:
MokuDataLoggerData_20250116_102402.csv
'time': [0. 0.01 0.02 ... 9.99]
'ch1': [0.00063297 0.00077466 0.00071688 ... 0.00067479823461]
'ch2': [0.01406568 0.01389566 0.014152 ... 0.014421103911]

Python のその他のファイルタイプの変換と読み取り方法
ここでは、ファイルタイプの変換と、それを Python で読み取る方法についてのチートシート形式の概要を示します。実験に合わせて、 file_name
およびchannels
パラメータを調整してください。
。マット
C:\Users\LItes\Downloads>mokucli convert MokuDataLoggerData_20250116_102402.li --format=mat
[===========================================================================]
Done.
import os
from scipy.io import loadmat
file_name = "MokuDataLoggerData_20250116_102402.mat"
channels = 2
print(file_name)
assert os.path.isfile(file_name), "Convert failed, no file received"
data = {'time':[], 'ch1':[]}
file = loadmat(file_name)
data['time'] = file['moku']['data'][0, 0][:,0]
for i in range(1, channels+1):
data[f'ch{i}'] = file['moku']['data'][0, 0][:,i]
keys = data.keys()
for key in keys:
print(f"'{key}': {str(data[key][:3])[:-1]} ... {data[key][-1]}]")
.npy
C:\Users\LItes\Downloads>mokucli convert MokuDataLoggerData_20250116_102402.li --format=npy
[===========================================================================]
Done.
import os
import numpy as np
file_name = "MokuDataLoggerData_20250116_102402.npy"
channels = 2
print(file_name)
assert os.path.isfile(file_name), "Convert failed, no file received"
data = {'time':[], 'ch1':[]}
load = np.load(file_name)
file = np.array([[load[i][0]] + [load[i][j] for j in range(1, channels+1)] for i in range(len(load))])
data['time'] = file[:,0]
for i in range(1, channels+1):
data[f'ch{i}'] = file[:,i]
keys = data.keys()
for key in keys:
print(f"'{key}': {str(data[key][:3])[:-1]} ... {data[key][-1]}]")
.hdf5
C:\Users\LItes\Downloads>mokucli convert MokuDataLoggerData_20250116_102402.li --format=hdf5
[===========================================================================]
Done.
import os
import numpy as np
import h5py
file_name = "MokuDataLoggerData_20250116_102402.hdf5"
channels = 2
print(file_name)
assert os.path.isfile(file_name), "Convert failed, no file received"
data = {'time':[], 'ch1':[]}
load = h5py.File(file_name, 'r')
file = np.array(list(load['moku']),dtype=np.dtype('float'+',float'*channels))
file.dtype.names=['time'] + [f'ch{i}' for i in range(1, channels+1)]
data['time'] = file['time']
for i in range(1, channels+1):
data[f'ch{i}'] = file[f'ch{i}']
keys = data.keys()
for key in keys:
print(f"'{key}': {str(data[key][:3])[:-1]} ... {data[key][-1]}]")