Help us improve
Share bugs, ideas, or general feedback.
From totally-integrated-claude
Provides installation, setup, and object hierarchy reference for the siemens_tia_scripting Python library used to automate Siemens TIA Portal (PLC/HMI programming).
npx claudepluginhub czarnak/totally-integrated-claude --plugin totally-integrated-claudeHow this skill is triggered — by the user, by Claude, or both
Slash command
/totally-integrated-claude:tia-pythonThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Library: `siemens_tia_scripting` (v1.1.0)
Entry point that routes TIA Portal automation tasks to the correct implementation path (MCP, Python, C#) and loads the right domain skills.
Routes Python dev tasks to specialist skills by trigger-matching Typer CLI, Rich terminal UI, Textual TUI, uv, Hatchling, pre-commit, async code, PyPI packaging, linting, and modernization.
Toscript provides instructions and context for Claude Code. Invoke directly via `/Toscript` or let Claude load it when relevant.
Share bugs, ideas, or general feedback.
Library: siemens_tia_scripting (v1.1.0)
Requires: Python 3.12.x, TIA Portal V15.1+, TIA Portal Openness V15.1+
Do not use pip install siemens_tia_scripting or pip install siemens-tia-scripting
from PyPI. Download TIA Scripting Python from Siemens Industry Online Support,
unzip it, then choose one Siemens-supported setup path:
TIA_SCRIPTING environment variable to the extracted
binaries directory and append it to sys.path.binaries directory and install
the matching wheel file, for example:cd C:\Path\To\Your\TIA_Scripting_Python\binaries
py -3.12 -m pip install .\siemens_tia_scripting-x.x.x-cp312-cp312-win_amd64.whl
Replace x.x.x with the version in the downloaded wheel filename.
import os
import sys
# Option A – environment variable (file import method)
sys.path.append(os.getenv('TIA_SCRIPTING'))
import siemens_tia_scripting as ts
# Option B – installed as pip package
import siemens_tia_scripting as ts
siemens_tia_scripting (Global functions)
└── Portal
└── Project
├── Plc
│ ├── ProgramBlock / SystemBlock
│ ├── PlcTagTable → PlcTag / UserConstant
│ ├── UserDataType
│ ├── ExternalSource
│ ├── ForceTable / WatchTable
│ ├── TechnologyObject
│ ├── SoftwareUnit (contains same sub-objects as Plc)
│ └── SafetyAdministration
├── Hmi
│ ├── HmiTagTable → HmiTag
│ ├── HmiScreen / HmiScript / HmiCycle
│ ├── HmiAlarm / HmiAlarmClass
│ ├── HmiConnection
│ ├── HmiGraphicList / HmiTextList
└── ProjectLibrary
└── LibraryType → LibraryTypeVersion
Portal
└── GlobalLibrary
└── LibraryTypeFolder → LibraryType → LibraryTypeVersion
Accessing any object requires: Portal open → Project open → device retrieved.
These methods behave identically across all classes that have them. Do NOT repeat their full docs in reference files — refer here instead.
Returns the name of the object.
Returns a single property value as string. Non-string values are auto-converted.
val = obj.get_property(name="CreationDate")
Returns all property names of the object.
Sets a property. Value must be passed as string regardless of underlying type:
"True" / "False""42""3.14""0" or name string "OptionA"obj.set_property(name="Name", value="MyNewName")
Returns a unique identifier string for the object.
Exports the object. Shared signature across PLC/HMI data objects.
export_options: Enums.ExportOptions (WithDefaults=0, Nan=1, WithReadOnly=2)export_format: Enums.ExportFormats (SimaticML=0, ExternalSource=1, SimaticSD=2)keep_folder_structure: bool — if True, folder hierarchy is preservedobj.export(target_directory_path="C:\\ws\\export",
export_options=ts.Enums.ExportOptions.WithDefaults)
Deletes the object from TIA Portal.
get_path() → path up to the parent system folderget_path_full() → full path up to project rootReturns fingerprint data for the object.
Returns a list of export format strings supported by the object.
Opens the object in the TIA Portal editor UI.
Returns True if the object is consistent (compiled, no errors).
ts.Enums.PortalMode # WithGraphicalUserInterface=0, WithoutGraphicalUserInterface=1, AnyUserInterface=2
ts.Enums.UmacUserMode # Project=0, Global=1
ts.Enums.ExportFormats # SimaticML=0, ExternalSource=1, SimaticSD=2
ts.Enums.ExportOptions # WithDefaults=0, Nan=1, WithReadOnly=2
ts.Enums.CleanUpMode # PreserveDefaultVersionOfUnusedTypes=0, DeleteUnusedTypes=1
ts.Enums.LibraryExportOptions # Nan=0, WithLibraryVersionInfoFile=1, OnlyLibraryVersionInfoFile=2
ts.Enums.HarmonizeOptions # HarmonizePathsAndNames=0, HarmonizePaths=1, HarmonizeNames=2
ts.Enums.DependenciesMode # DoNotAutomaticallyCreateOrReleaseDependencies=0, AutomaticallyCreateOrReleaseDependenciesIfRequired=1
ts.set_logging(path="C:\\ws\\tiascripting.log", console=True)
Call early in the script, before opening a portal.
Load only the file(s) relevant to the task at hand:
| File | When to load |
|---|---|
skills/tia-python/references/global_portal.md | Opening/attaching portal, project management, UMAC, credentials |
skills/tia-python/references/plc.md | Working with PLC devices, blocks, tags, UDTs, technology objects, software units |
skills/tia-python/references/hmi.md | Working with HMI devices, screens, tags, scripts, alarms, connections |
skills/tia-python/references/library.md | Working with GlobalLibrary, ProjectLibrary, LibraryTypes and versions |
skills/tia-python/references/project.md | Project-level operations, ProjectServer, transactions, TestSuite |
For pipelines that span multiple domains, load all relevant files before generating code.
compile_hardware() and compile_software() return True if there are errors.folder_path parameters — most get_* methods accept an optional folder_path: str using "group1/group2" syntax to scope retrieval.import_* methods take a directory path, not a file path — point to the folder containing exported XML files.project.start_transaction() / project.end_transaction() for bulk changes that should be undoable.set_property values are always strings — even for booleans and numbers.These rules are mandatory for generated Python TIA Scripting code:
delete() and any bulk overwrite/import operation as destructive.delete() as a bare one-line mutation. Wrap destructive changes in
project.start_transaction() / project.end_transaction() when the API supports
that operation inside a transaction.compile_check through MCP after generated block, tag,
hardware, or HMI changes. Do not present generated project changes as deployable
until that check passes.