deemesh

unified CNC interface

An interface that absorbs the differences between vendor protocols into a single address scheme

Every CNC vendor speaks its own protocol. Fanuc uses FOCAS2, Siemens uses OPC-UA; connecting one machine means learning that vendor's SDK, and the next vendor means starting over.

deemesh puts one interface on top of all of them. Whether the machine is a Fanuc or a Siemens, you read axis positions, alarms, programs and tool offsets through the same command structure, and write through that same structure wherever an address supports writing. One address means the same thing on any supported machine, and the vendor differences are absorbed underneath.

This command structure is what deemesh calls its data model. The data model is made of an address and filters: the address decides what to read or write, and the filters decide which one.

Your application

Browser or your program

Direct call
HTTP

deemesh-sdk

Built into your application

deemesh-hub

Standalone server

Data model

address + filter

Fanuc

FOCAS2

Siemens

OPC-UA

Both routes meet at the same data model, and the vendor differences are absorbed below it.

Find the address behind a value

Click a value on the operator panel and see which address it comes from. It reproduces a real HMI screen — pick any value and the address and filter that fetch it appear as they are.

Find an address from the HMI screen

Reading the machine position of the X axis (axis=1) on channel 1

READ /machine/channel/axis/machinePosition?machine=1&channel=1&axis=1

address

filter

Every address begins with /machine. The data model is rooted at a single machine, so the machine filter shown in yellow is what picks which machine at that root. deemesh-hub needs it because it handles several machines at once; deemesh-sdk does not.

The channel and axis segments in the middle of the path become filters of the same name. The address alone tells you which filters it takes.

Responses always use the same format

{"status":0,"value":123.456}

The command grammar and the complete address list live in the package documentation and the address catalog. Open the address catalog

The SDK and the HUB

The same address scheme comes in two forms. To see it in five minutes without writing code, take deemesh-hub.

deemesh-sdk

Built into your application

A native library (.dll / .so) with its C header. It is a standard C ABI, so you call it with whatever your language already has — P/Invoke in C#, the standard-library ctypes in Python, extern "C" in Rust. There is no wrapper to install.

Use it when you need equipment communication inside your own application

deemesh-hub

Standalone HTTP server with an admin page

Put the machine address and protocol in config.json and run it. Open the admin page in a browser and every address the machine exposes appears as a tree; pick one and run a read (GET) or a write (POST) right there.

Use it when you want to work over HTTP without writing code, or to see it first

The deemesh-hub admin page. Pick an address in the tree on the left and its type, read/write support, filters and description appear on the right — where you can run a GET straight away.
The deemesh-hub admin page. Pick an address in the tree on the left and its type, read/write support, filters and description appear on the right — where you can run a GET straight away.

Supported protocols

IdentifierEquipment
nc_focas2_fanucFanuc CNC (FOCAS2, Ethernet only)
nc_opcua_siemensSiemens Sinumerik CNC (OPC-UA)

These two are supported today, and more protocols will follow.

Machine-side prerequisites

Check these before downloading. Neither is something deemesh can supply, and neither is a deemesh setting — they live on the machine and with its vendor.

Fanuc
Fanuc's own FOCAS2 library is required — fwlib32.dll / fwlib64.dll on Windows, libfocas64.so on Linux. These files are covered by Fanuc's license and are not bundled with deemesh; obtain them separately from Fanuc.
Siemens
The machine needs the OPC-UA server option (SINUMERIK OPC-UA — a separately purchased option) licensed and enabled. A machine without it refuses the connection outright. Support is tested against SINUMERIK 840D; on 828D some features may not work.

Download

deemesh is freeware. The SDK and the HUB are versioned independently, so take the latest release of whichever you need.

Open the GitHub releases