Skip to main content

Talk to Mitsubishi PLCs from Python over the MC protocol via a bundled, auto-launched gomc-rest server — with optional REST API exposure.

Project description

gomc-rest (Python)

English / 日本語

A Python library for talking to Mitsubishi PLCs. Read and write PLC devices over the MC protocol (3E/4E frames) — the protocol is handled for you by a bundled gomc-rest server that the package auto-launches, so you never have to start or distribute an executable yourself.

Bonus — expose a REST API. Enable server_mode to make the bundled server's REST API reachable from other apps on your network (a GUI, another machine, another language); and connect() talks to a gomc-rest server that is already running elsewhere. See Access control.

Under the hood the HTTP layer is provided by gomc-rest-client; this package adds the bundled binary and its process lifecycle.

your Python process
└─ gomc_rest.launch()
     ├─ spawns the bundled gomc-rest on a free loopback port  ── MC protocol ──▶ PLC
     └─ returns a Server that provides a PLCClient pointed at it

Install

pip install gomc-rest

Usage

import gomc_rest

with gomc_rest.launch(plc_host="192.168.0.1") as plc:
    values = plc.read("D100", 3)
    plc.write("D100", [10, 20, 30])
# the bundled server is stopped automatically on exit

launch() returns a Server; using it as a context manager yields a PLCClient (see gomc-rest-client for the full read/write/remote API) and stops the server on exit. Without with, the server is stopped at interpreter exit.

Pass server flags through extra_args:

with gomc_rest.launch(plc_host="192.168.0.1", extra_args=["-enable-remote"]) as plc:
    plc.remote_run()

Client mode (connect to an existing server)

To talk to a gomc-rest server that is already running elsewhere — a shared instance, another machine, or one you launched with server_mode=True — use connect() instead of starting the bundled binary:

with gomc_rest.connect("http://192.168.0.1:8080", token="...") as plc:
    plc.read("D100", 3)

Both launch() and connect() hand you the same PLCClient, so one package covers "bundle and run the server" and "just be a client".

connect() needs no bundled binary, so it works even on platforms without a prebuilt wheel (macOS, Windows arm64, glibc < 2.34): there pip install gomc-rest installs from the sdist, and only launch() is unavailable (it raises a clear error).

Access control

Two independent layers protect the server, both on by default:

  1. Per-launch bearer token. A random token is generated each launch and required by the server, so even another process on the same host that discovers the port cannot call the API. It is set automatically on the returned client and exposed as server.token. Pass an explicit token= to share with another app, or token="" to disable auth (closed-network use).
  2. Loopback binding. By default the server binds to 127.0.0.1, so no other host can reach it.

Set server_mode=True to bind all interfaces so other apps on the network (e.g. gomc-rest-gui, curl from another machine) can call it — give them server.token:

server = gomc_rest.launch(plc_host="192.168.0.1", server_mode=True)
print(server.base_url)   # other apps connect to http://<this-host>:<port>
print(server.token)      # ...with this bearer token
try:
    server.client.read("D100", 3)
finally:
    server.close()

The server has no TLS — only enable server_mode on a trusted network.

Threat model. The token is passed to the server via the GOMCR_TOKEN environment variable (not the command line), so it does not appear in the process list. It protects against other hosts and other OS users. It does not protect against another process running as the same OS user, which can read the server's environment (e.g. /proc/<pid>/environ); the OS user boundary is the trust boundary here.

Versions

This package bundles a pinned gomc-rest binary (currently v1.4.0, set in GOMC_REST_VERSION) that must satisfy gomc-rest-client's MINIMUM_SUPPORTED_GOMC_REST_VERSION; launch() verifies this on startup. The gomc-rest-client dependency is capped (>=0.10.0,<0.11) so a future client that raises its minimum server version can't be installed without also bumping the bundled binary.

Development

Release procedure and bundled-binary maintenance are documented in RELEASING.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gomc_rest-0.1.2.tar.gz (17.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

gomc_rest-0.1.2-py3-none-win_amd64.whl (6.0 MB view details)

Uploaded Python 3Windows x86-64

gomc_rest-0.1.2-py3-none-manylinux_2_34_x86_64.whl (6.0 MB view details)

Uploaded Python 3manylinux: glibc 2.34+ x86-64

gomc_rest-0.1.2-py3-none-manylinux2014_aarch64.whl (5.4 MB view details)

Uploaded Python 3

File details

Details for the file gomc_rest-0.1.2.tar.gz.

File metadata

  • Download URL: gomc_rest-0.1.2.tar.gz
  • Upload date:
  • Size: 17.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gomc_rest-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f94144095d0baf1d37a158f1826c8c2c6245caaae15a65de06a75c469b7f9adf
MD5 d920a2e56abee242adb27c8d9fbf8773
BLAKE2b-256 ea2f1449751d6ea589542fdeddb71040b9185034395a30e04ba971cf0a3941f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for gomc_rest-0.1.2.tar.gz:

Publisher: release.yml on Moge800/gomc_rest_python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gomc_rest-0.1.2-py3-none-win_amd64.whl.

File metadata

  • Download URL: gomc_rest-0.1.2-py3-none-win_amd64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gomc_rest-0.1.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 d9d4b8b795a192d10a8e07930704227e3aca8a1f1a7920e06354647a41ff884f
MD5 83f8a6480bd831c6e2f458f6342f0209
BLAKE2b-256 a5c0a36b4006600275aff29623b260656b52b75936857c591bcaaab755792e6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for gomc_rest-0.1.2-py3-none-win_amd64.whl:

Publisher: release.yml on Moge800/gomc_rest_python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gomc_rest-0.1.2-py3-none-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for gomc_rest-0.1.2-py3-none-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5ad2bb110a1532c7ad23fd1138e5383ab61ef034af259c6dd5d0ec4e493d2e0a
MD5 02bfe60cf7090fa5db5463e02deebf90
BLAKE2b-256 6e30f3a5bfcc02794a1a157d66d1951d9e3d56dcfc05cbeb0049ef0829171aec

See more details on using hashes here.

Provenance

The following attestation bundles were made for gomc_rest-0.1.2-py3-none-manylinux_2_34_x86_64.whl:

Publisher: release.yml on Moge800/gomc_rest_python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gomc_rest-0.1.2-py3-none-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for gomc_rest-0.1.2-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 79d479ce21a9189e2e7f488a0f51ffb3fec818d6da200a74d9d2d20b911437ea
MD5 8e8e4fec45b028e61134a97a3c5685c3
BLAKE2b-256 b6fa5f39a921fd473627e08949bbc89b56d776613a7b7f468a12723308ce2185

See more details on using hashes here.

Provenance

The following attestation bundles were made for gomc_rest-0.1.2-py3-none-manylinux2014_aarch64.whl:

Publisher: release.yml on Moge800/gomc_rest_python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page