0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

3DプリンタをZabbixで監視する【Moonraker API】

0
Posted at

初めに

3DプリンタをZabbixで監視できたらうれしいんじゃないかと思い監視用テンプレートを作成しました。Moonraker APIを利用することで思ったよりも簡単に作成できました。

3DプリンタをZabbixで監視したいという物好きがどれだけいるか分かりませんが公開しておきます。

構成

弊宅の構成です。
バージョンが古いですが基本的に新しいバージョンであれば同様に利用可能かと思います。

Zabbix

  • version : 6.0

Printer

検証に利用したプリンターは下記の2台です。

  • Creality K2 Plus
  • Creality K1

API検証

まず初めにMoonraker APIが仕様通りに使えるか確認しました。
以下、確認用にGeminiくんが作成したPowershellスクリプトです。
Moonraker APIを利用しプリンタにアクセスし、結果をjson形式で取得します。

# MoonrakerのIPアドレスとポートを指定してください(デフォルトは7125)
$moonraker_ip = "<<プリンタのIPアドレス>>"
$port = 7125

# 1. プリンタオブジェクト(前回+追加項目)のテスト
# 追加項目: gcode_move(現在位置/速度), fan(冷却ファン), mcu(基板負荷)
$query_objects = "webhooks&print_stats&extruder=target,temperature&heater_bed=target,temperature&virtual_sdcard=progress&gcode_move&fan&mcu"
$endpoint_objects = "http://${moonraker_ip}:${port}/printer/objects/query?${query_objects}"

# 2. ホストOSリソース(ラズパイ等)のテスト
$endpoint_machine = "http://${moonraker_ip}:${port}/machine/stats"

try {
    Write-Host "【テスト1】プリンタ詳細オブジェクトを取得中..." -ForegroundColor Cyan
    $response_objects = Invoke-RestMethod -Uri $endpoint_objects -Method Get -TimeoutSec 10
    Write-Host "取得成功!追加したオブジェクトのデータを表示します:`n" -ForegroundColor Green
    
    # ログが長くなりすぎるのを防ぐため、今回追加した項目だけを抽出してJSON化
    $response_objects.result.status | Select-Object gcode_move, fan, mcu | ConvertTo-Json -Depth 5

    Write-Host "`n=================================================`n"

    Write-Host "【テスト2】ホストOS(ラズパイ等)のリソースを取得中..." -ForegroundColor Cyan
    $response_machine = Invoke-RestMethod -Uri $endpoint_machine -Method Get -TimeoutSec 10
    Write-Host "取得成功!ホストOSのデータを表示します:`n" -ForegroundColor Green
    
    # 取得したシステムリソース情報をJSON化
    $response_machine.result | ConvertTo-Json -Depth 5

} catch {
    Write-Host "接続エラー: APIにアクセスできませんでした。" -ForegroundColor Red
    Write-Host $_.Exception.Message
}

実際に実行した結果は下記のようになりました。テスト2の部分でエラーが出ていますが欲しい情報は取れているので問題ありません。
基本的なプリンタの状態や、MCUの状態が取得できています。

PS > .\apitest.ps1
【テスト1】プリンタ詳細オブジェクトを取得中...
取得成功!追加したオブジェクトのデータを表示します:

{
  "gcode_move": {
    "speed_factor": 1.0,
    "speed": 600.0,
    "extrude_factor": 1.0,
    "absolute_coordinates": true,
    "absolute_extrude": false,
    "homing_origin": [
      0.0,
      0.0,
      0.0,
      0.0
    ],
    "position": [
      225.0,
      345.0,
      173.18,
      257726.88620271155
    ],
    "gcode_position": [
      225.0,
      345.0,
      173.18,
      -76.95999999996275
    ]
  },
  "fan": {},
  "mcu": {
    "mcu_version": "1.1.0.48-293-g493f9a0f-dirty-20241220_140327-ubuntu1804",
    "mcu_build_versions": "gcc: (GNU Tools for Arm Embedded Processors 9-2019-q4-major) 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599] binutils: (GNU Tools for Arm Embedded Processors 9-2019-q4-major) 2.33.1.20191025",
    "mcu_constants": {
      "ADC_MAX": 4095,
      "CLOCK_FREQ": 120000000,
      "INITIAL_PINS": "!PB1,!PB2,!PB3,!PB4,!PA0,PB0,PA12,!PC8,!PC12",
      "MCU": "gd32f303xe",
      "RECEIVE_WINDOW": 192,
      "RESERVE_PINS_serial": "PA2,PA3",
      "SERIAL_BAUD": 230400,
      "STATS_SUMSQ_BASE": 256,
      "STEPPER_BOTH_EDGE": 1,
      "build_machine_uid": "Dec 20 202414:03:23"
    },
    "last_stats": {
      "mcu_awake": 0.005,
      "mcu_task_avg": 9E-06,
      "mcu_task_stddev": 4E-06,
      "bytes_write": 601010141,
      "bytes_read": 389410432,
      "bytes_retransmit": 191,
      "bytes_invalid": 0,
      "send_seq": 11511110,
      "receive_seq": 11511110,
      "retransmit_seq": 6312088,
      "srtt": 0.001,
      "rttvar": 0.001,
      "rto": 0.025,
      "ready_bytes": 0,
      "stalled_bytes": 0,
      "freq": 119998387
    }
  }
}

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

【テスト2】ホストOS(ラズパイ等)のリソースを取得中...
接続エラー: APIにアクセスできませんでした。                                                                             
Response status code does not indicate success: 404 (Not Found).

作成したテンプレート

テンプレートは下記リポジトリにアップロードしました。

マスターアイテムでMoonraker APIを叩きjsonで情報を取得、それをもとに依存アイテムで各パラメータを抽出しています。

なおレイヤー関連のアイテムは一部のスライサーでは情報が取得できません。適宜無効化するなどする必要があります。実際Creality Printで生成したGコードではレイヤーのパラメータが更新されませんでした。

1. マスターアイテム

アイテム名 キー データ型 監視間隔 取得URL
Moonraker API Master moonraker.api.master TEXT 30s http://{HOST.CONN}:7125/printer/objects/query?webhooks&print_stats&extruder=target,temperature&heater_bed=target,temperature&virtual_sdcard=progress&gcode_move

2. 監視アイテム(依存アイテム)

すべて「Moonraker API Master」を親として構成されています。

アイテム名 キー 単位 保存前処理 (JSONPath / JS)
Nozzle target temperature moonraker.extruder.target ℃ $.result.status.extruder.target
Nozzle temperature moonraker.extruder.temp ℃ $.result.status.extruder.temperature
Bed target temperature moonraker.heater_bed.target ℃ $.result.status.heater_bed.target
Bed temperature moonraker.heater_bed.temp ℃ $.result.status.heater_bed.temperature
Z Position moonraker.position.z mm $.result.status.gcode_move.gcode_position[2]
Current layer moonraker.print.current_layer layer $.result.status.print_stats.info.current_layer
Total layer moonraker.print.total_layer layer $.result.status.print_stats.info.total_layer
Print progress moonraker.print.progress % $.result.status.virtual_sdcard.progress (※ JSで Math.round(value * 100) の処理あり)
Print File Name moonraker.print.filename - $.result.status.print_stats.filename
Print state moonraker.print.state - $.result.status.print_stats.state
Printer state moonraker.webhooks.state - $.result.status.webhooks.state
Print Message moonraker.print.message - $.result.status.print_stats.message
System Status Message moonraker.webhooks.message - $.result.status.webhooks.state_message

3. トリガー

トリガー名 深刻度 障害条件式 運用データ (Opdata) / 備考
Start printing : {?last(//moonraker.print.filename)} INFO last(/.../moonraker.print.state)="printing" and last(/.../moonraker.print.state,#2)<>"printing" 復旧条件: last()<>"printing"
Cancel Printing : {?last(//moonraker.print.filename)} WARNING last(/.../moonraker.print.state)="cancelled" 復旧条件: last()<>"cancelled"
3D Printing Error AVERAGE last(/.../moonraker.webhooks.state)="error" 運用データ: {?last(//moonraker.print.message)}
Klipper system error AVERAGE last(/.../moonraker.webhooks.state)="error" 運用データ: {?last(//moonraker.webhooks.message)} 復旧条件: last()<>"error"

4. グラフ

グラフ名 描画アイテム 概要 / 設定
Temperature moonraker.heater_bed.temp moonraker.heater_bed.target moonraker.extruder.temp moonraker.extruder.target 現在温度は実線、目標温度は点線(DOTTED_LINE)で描画されます。
Print progress moonraker.print.progress moonraker.position.z Z軸位置(moonraker.position.z)は右側のY軸(RIGHT)を使用して表示されます。
Layer Progress moonraker.print.current_layer moonraker.print.total_layer 現在のレイヤーは塗りつぶし領域(FILLED_REGION)として描画されます。

実際の動作

レイヤー関連のパラメータは取得できていないのでグラフは表示されていませんがその他の情報は問題なく表示できています。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?