OpenTetsu API標準

OpenTetsu API標準は、システム間でデータを受け渡しするための標準的な方法として、タヌ電で使用されています。

C#をお使いの方は、Tanuden.Commonアセンブリファイルを参照することで、API標準のOpenTetsuクラスを利用することができます。

なぜ標準を作るのか?

このAPI標準はプラットフォームにとらわれず、また最も重要なこととして、トレインシミュレータのアドオンやプラグイン間でデータ構造を統一するために設計されています。元々はTrainCrewのために設計されたものですが、この標準は日本のトレインシミュレータにとって十分かつ柔軟なものです。

TrainCrewのAPIとの違い

TrainCrewが提供するAPIは包括的ですが、命名規則やデータ構造が明確ではありません(例えば、いくつかの変数はnullではなく空文字列として返されます)。OpenTetsuは、変数がグループにネストされた構造を提供し、変数の命名がより予測しやすくなっています。

API例

{
    "atsState": {
        "classType": "普通",
        "speed": 112.0,
        "state": "無表示"
    },
    "controllerState": {
        "notch": -8,
        "reverser": 1
    },
    "currentTime": "13:05:25.8310000",
    "diagram": {
        "direction": "outbound",
        "boundFor": "館浜",
        "remainingDistance": 4292.4,
        "serviceType": "普通",
        "stations": [
            {
                "distanceFromKmZero": 0.0,
                "index": 0,
                "name": "虹ケ浜",
                "positionName": "虹ケ浜駅下り",
                "stopType": 0,
                "timings": {
                    "arrival": "13:05:35",
                    "departure": "13:05:55"
                }
            },
            {
                "distanceFromKmZero": 1940.2,
                "index": 1,
                "name": "海岸公園",
                "positionName": "海岸公園駅下り",
                "stopType": 0,
                "timings": {
                    "arrival": "13:07:50",
                    "departure": "13:08:10"
                }
            },
            {
                "distanceFromKmZero": 3260.3,
                "index": 2,
                "name": "河原崎",
                "positionName": "河原崎駅下り",
                "stopType": 0,
                "timings": {
                    "arrival": "13:09:45",
                    "departure": "13:10:05"
                }
            },
            {
                "distanceFromKmZero": 4292.4,
                "index": 3,
                "name": "駒野",
                "positionName": "駒野駅3番下り",
                "stopType": 0,
                "timings": {
                    "arrival": "13:11:30",
                    "departure": "13:12:00"
                }
            }
        ]
    },
    "nextStation": {
        "distance": 0.0,
        "index": 0,
        "isStopping": true,
        "name": "虹ケ浜"
    },
    "runNumber": "1261",
    "trainState": {
        "carStates": [
            {
                "amperage": 0.0,
                "bcPressure": 440.0,
                "carNo": 1,
                "isDoorClosed": false
            },
            {
                "amperage": 0.0,
                "bcPressure": 440.0,
                "carNo": 2,
                "isDoorClosed": false
            },
            {
                "amperage": 0.0,
                "bcPressure": 440.0,
                "carNo": 3,
                "isDoorClosed": false
            },
            {
                "amperage": 0.0,
                "bcPressure": 440.0,
                "carNo": 4,
                "isDoorClosed": false
            }
        ],
        "consist": 4,
        "lamps": {
            "ats": {
                "brakeApplication": false,
                "inOperation": true,
                "isolated": false
            },
            "eBrake": true,
            "ebTimer": false,
            "overload": false,
            "pilot": false,
            "regenBrake": false
        },
        "mrPressure": 700.0,
        "nextSpeedLimit": {
            "distance": -1.0,
            "limit": -1.0,
            "type": "speedlimit"
        },
        "speed": 0.0,
        "speedLimit": 110.0,
        "speedLimitType": "speedlimit"
    },
    "signalStates": [
        {
            "name": "下り閉塞59",
            "type": "standard",
            "phase": "G",
            "distance": 11.93904,
            "transponders": [
                {
                    "type": "SigIfStop",
                    "speedlimit": 45.0,
                    "distance": -151.1066
                },
                {
                    "type": "SigIfStop",
                    "speedlimit": 0.0,
                    "distance": -36.10801
                },
                {
                    "type": "Signal",
                    "speedlimit": 0.0,
                    "distance": 3.892306
                },
                {
                    "type": "SigIfStop",
                    "speedlimit": 30.0,
                    "distance": -86.10764
                }
            ]
        }
    ]
}

最終更新