{"id":20144245,"url":"https://github.com/made2591/predix-configurator","last_synced_at":"2026-05-12T15:32:00.970Z","repository":{"id":71123042,"uuid":"104495621","full_name":"made2591/predix-configurator","owner":"made2591","description":"A Predix© configurator tool (cli) written in Python + an AngularJS 4 webapp to help you manage your Edge Connectivity stack, from machines in your factory to Predix microservices in your cloud space.","archived":false,"fork":false,"pushed_at":"2017-09-23T15:07:04.000Z","size":7376,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-02T23:44:10.900Z","etag":null,"topics":["cloudfoundry","cloudspace","factory","igs","json-schema","predix-cloud","predix-configurator","predix-dev","predix-global","predix-machine"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/made2591.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-09-22T16:27:24.000Z","updated_at":"2018-05-11T15:01:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"0f412a52-73d5-4c0c-bf42-0e47de7f6797","html_url":"https://github.com/made2591/predix-configurator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/made2591/predix-configurator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/made2591%2Fpredix-configurator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/made2591%2Fpredix-configurator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/made2591%2Fpredix-configurator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/made2591%2Fpredix-configurator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/made2591","download_url":"https://codeload.github.com/made2591/predix-configurator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/made2591%2Fpredix-configurator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32945306,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T09:19:52.626Z","status":"ssl_error","status_checked_at":"2026-05-12T09:17:33.438Z","response_time":102,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudfoundry","cloudspace","factory","igs","json-schema","predix-cloud","predix-configurator","predix-dev","predix-global","predix-machine"],"created_at":"2024-11-13T22:09:23.384Z","updated_at":"2026-05-12T15:32:00.954Z","avatar_url":"https://github.com/made2591.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Predix Configurator\n\nA [Predix](http://predix.io)\u0026copy; configurator tool (cli) written in Python + an AngularJS 4 webapp to help you manage your Edge Connectivity stack, from machines in your factory to Predix microservices in your cloud space.\n\n### Factory stack\n\n__Note__: the tool is intended for a factory infrastructure like the one below:\n\n![Picture](images/screen-factory-stack.png)\n\nAs you can see, the working schema involves:\n\n- Use of a machine-protocol gateway able to handle several industrial communication protocols used by different machines. For our purpose we used [IGS](http://www.geautomation.com/node/12978) by [GE Automation](http://www.geautomation.com);\n- Use of a Predix Machine (you can find pre-configured version of Predix Machine [here](https://github.com/PredixDev/predix-machine-templates) and other useful starting template for your application in [Predix Dev](https://github.com/PredixDev)'s Github page);\n- Available cloud space in Predix Platform;\n\n### How it works\n\nThe tool is intended for both Predix dev / common users. I prepared two different step-by-step guidelines:\n\n- [Old-school way](#oldschoolway): prepare your JSON schema manually =\u003e run the configuration tool =\u003e enjoy.\n\n- [Third Millennium way](#thirdmillenniumway): prepare your JSON schema through the use of a stunning serverless web app XD =\u003e run the configuration tool =\u003e enjoy.\n\n### \u003ca name=\"oldschoolway\"\u003e\u003c/a\u003e How it works: old-school way\n\nThe only script you need is the python script under the folder ```cli/``` named ```predix-configurator.py```. The script has only one dependency to pretty print xml to file.\nYou can run it from your command line simply following this step:\n \n ```\n git clone https://github.com/made2591/predix-configurator\n cd predix-configurator\n cd cli\n #[optional create venv] virtualenv .venv \u0026 source .venv/bin/activate\n pip install requirements.txt\n python predix-configurator.py\n ```\n \nWhen ```predix-configurator``` starts, it looks for a configuration file under the folder ```schema``` called ```your-factory.json``` (you can change the name of the file and update the const value in the header of the script with the new name / path as well).\n\nA ```your-factory.json``` schema is already available in ```schema``` folder: for obvious reasons, I can't provide more details using real parameters instances XD.\n\n#### JSON Schema details\n\n##### GLOBAL_CONFIG\n\nThe __```GLOBAL_CONFIG```__ key in the root of JSON specify the output path of python-configurator. When you run the ```predix-configurator.py```, generated configuration files will be created in the ```GLOBAL_CONFIG.OUTPUT_DIR``` folder.\n\n```\n{\n\t\"GLOBAL_CONFIG\" : {\n\n\t\t\"OUTPUT_DIR\" : \"./config/\"\n\n\t},\n}\n```\n\n##### GLOBAL\\_IGS\\_CONFIG\n\nThe __```GLOBAL_IGS_CONFIG```__ key in the root of JSON specify [IGS](http://www.geautomation.com/node/12978) parameters. The most important parameter is ```SERVER_URI```, that specify ```opcua``` endpoint exposed by your IGS instance to Predix Machine.\n```\n{\n\t\"IGS_CONFIG\" : {\n\n\t\t\"SERVER_URI\" : \"opc.tcp://localhost:49310\",\n\t\t\"APP_URI\" : \"urn:localhost:Intellution.IntellutionGatewayOPCServer:UA Client Driver\",\n\t\t\"PRODUCT_URI\" : \"urn:localhost:UA:PredixMachine_OPCUAAdapter\",\n\t\t\"NAMESPACE_INDEX\" : \"your.namespace.index\"\n\t},\n}\n```\n\n##### PREDIX\\_GLOBAL\\_CONFIG\n\nThe __```PREDIX_GLOBAL_CONFIG```__ key in the root of JSON specify [Predix Machine](https://github.com/PredixDev/predix-machine-templates) most-important configuration file names and extensions. This field is intended to provide more flexibility to future version of Predix Machine.\n\n```\n\t\"PREDIX_GLOBAL_CONFIG\" : {\n\n\t\t\"GLOBAL_CONFIG_SUFFIX\" : \".config\",\n\t\t\"DATATYPE_CONFIG_SUFFIX\" : \".xml\",\n\t\t\"OPCUA_DATANODES\" : \"com.ge.dspmicro.machineadapter.opcua-0\",\n\t\t\"HOOVER_SPILLWAY\" : \"com.ge.dspmicro.hoover.spillway-0\",\n\t\t\"PREDIX_CLOUD_IDENTITY\" : \"com.ge.dspmicro.predixcloud.identity\",\n\t\t\"PREDIX_WEBSOCKER_RIVER\" : \"com.ge.dspmicro.websocketriver.send-0\",\n\t\t\"PROXY_CONFIGURATION\" : \"org.apache.http.proxyconfigurator-0\"\n\n\t},\n```\n\n##### PREDIX\\_CLOUD\\_CONFIG\n\nThe __```PREDIX_CLOUD_CONFIG```__ key in the root of JSON specify [Predix Cloud](https://www.ge.com/digital/predix) most-important configuration parameters. Here you can define your timeseries Zone-ID (env vars), UAA parameters and proxy (if needed by your organization) with exceptions.\nThe files involved by these keys are the one pointed by ```PREDIX_GLOBAL_CONFIG.PREDIX_WEBSOCKER_RIVER```, ```PREDIX_GLOBAL_CONFIG.PREDIX_CLOUD_IDENTITY``` and ```PREDIX_GLOBAL_CONFIG.PROXY_CONFIGURATION```.\n\n```\n\t\"PREDIX_CLOUD_CONFIG\": {\n\n\t\t\"TIMESERIES_ZONE_ID\": \"f37*****-****-****-****-************\",\n\t\t\"URL_OAUTH_TOKEN\": \"https://********-****-****-****-************.*****************/oauth/token\",\n\t\t\"APP_CLIENT_ID\": \"**********\",\n\t\t\"APP_CLIENT_SECRET\": \"**********\",\n\t\t\"PROXY_HOST\": \"**********\",\n\t\t\"PROXY_EXCEPTIONS\": [\n\t\t\t\"**********\"\n\t\t]\n\n\t},\n```\n\nYou can add more then one exception from Webgui (see below).\n\n![Picture](images/screen-cloud-exception.gif)\n\n##### TAG\\_MAPPING\\_SCHEMA\n\nThe __```TAG_MAPPING_SCHEMA```__ key in the root of JSON specify Tag Mapping between your Predix Cloud application and [IGS](http://www.geautomation.com/node/12978) (or your collector): it is a dict, with key defining Tag Mapping schema names, and values, the respective content of the schema.\nThe file involved by these keys are the one pointed by ```PREDIX_GLOBAL_CONFIG.OPCUA_DATANODES```.\n\n__NOTE__: each Tag Schema have to be named: if you procede without giving a name to a Tag Schema, a default name will be assigned to the schema. Further, each Tag Couple has to be \"headed\" with a destination tags: if you procede without giving a name to a Tag Couple (pairing), a default head tag will be assigned. This logic is intended to prevent losing of partial setup during step.\n\n```\n\t\"TAG_MAPPING_SCHEMA\": {\n\n\t\t\"tag_mapping_schema_1\": {\n\n\t\t\t\"CHANNEL_PREFIX\": \"channel_prefix_1\",\n\t\t\t\"MAPPING\": {\n\t\t\t\t\"PREDIX_TAG_1\": \"MACHINE_TAG_1\",\n\t\t\t\t\"PREDIX_TAG_2\": \"MACHINE_TAG_2\",\n\t\t\t\t\"PREDIX_TAG_3\": \"MACHINE_TAG_3\",\n\t\t\t\t\"PREDIX_TAG_4\": \"MACHINE_TAG_4\",\n\t\t\t\t\"PREDIX_TAG_5\": \"MACHINE_TAG_5\",\n\t\t\t\t\"PREDIX_TAG_6\": \"MACHINE_TAG_6\",\n\t\t\t\t\"PREDIX_TAG_7\": \"MACHINE_TAG_7\",\n\t\t\t\t\"PREDIX_TAG_8\": \"MACHINE_TAG_8\",\n\t\t\t\t\"PREDIX_TAG_9\": \"MACHINE_TAG_9\"\n\t\t\t}\n\n\t\t},\n\n\t\t\"tag_mapping_schema_2\": { ... },\n\t\t... // other schema go here\n\n\t}\n```\n\nYou can easly add new Tag Schema using web app.\n\n![Picture](images/screen-tag-schemas.gif)\n\n##### SITES\n\nThe __```SITES```__ key in the root of JSON specify Sites and Groups of machine: it is a dict, with key defining Site names, that maps into another dict, with key defining Group name, the maps into another dict with values defining the specific Group.\nIn the last step before result you can define machines for each Group in each Site. The key are clear: ```GLOBAL_ENABLE_SETUP``` enable setup for each machine, ```GLOBAL_TAG_MAPPING_SCHEMA``` schema will define a general tag mapping schema (you could define a local one for each machine in each group, and enable/disable setup for specific machine), and so on...\nThe file involved by these keys are the one pointed by ```PREDIX_GLOBAL_CONFIG.OPCUA_DATANODES```.\n\n__NOTE__: each Site and each Group of machines in each Site have to be named: if you procede without giving a name to a Site Schema, a default name will be assigned to the schema. Further, each Group has to be \"headed\" with a name: if you procede without giving a name to a Group, a default head name will be assigned. This logic is intended to prevent losing of partial setup during step.\n\n```\n  \"SITES\": {\n    \"site_1_name\": {\n      \"group_1_name\": {\n        \"GLOBAL_TAG_MAPPING_SCHEMA\": \"tag_mapping_schema_1\",\n        \"GLOBAL_ENABLE_SETUP\": true,\n        \"GLOBAL_PREFIX\": \"predix.group.prefix.1_\",\n        \"MACHINES\": {\n          \"machine_plate_1\": {\n            \"PCU\": \"pcu_name_1\",\n            \"IP\": \"machine_ip\",\n            \"NAT\": \"machine_natted_ip\",\n            \"INFO\": \"machine_description\",\n            \"PROTOCOL\": \"machine_protocol\",\n            \"LOCAL_TAG_MAPPING_SCHEMA\": \"tag_mapping_schema_1\",\n            \"LOCAL_ENABLE_SETUP\": true\n          },\n          \"machine_plate_2\": {\n\n        \"tag_mapping_schema_2\": { ... },\n        ... // other schema go here\n\n\t}\n```\n\n##### MACHINES\n\nThe __```MACHINES```__ key in the body of a Group specify machines: it is a dict, with key defining properties. They are not all necessary: the most important are the machine plate and the PCU name for IGS. The other one are only descriptive information.\nThe file involved by these keys are the one pointed by ```PREDIX_GLOBAL_CONFIG.OPCUA_DATANODES```.\n\n__NOTE__: each machine plate must be different from the others in the same Group.\n\n```\n  \"SITES\": {\n    \"site_1_name\": {\n      \"group_1_name\": {\n        \"GLOBAL_TAG_MAPPING_SCHEMA\": \"tag_mapping_schema_1\",\n        \"GLOBAL_ENABLE_SETUP\": true,\n        \"GLOBAL_PREFIX\": \"predix.group.prefix.1_\",\n        \"MACHINES\": {\n          \"machine_plate_1\": {\n            \"PCU\": \"pcu_name_1\",\n            \"IP\": \"machine_ip\",\n            \"NAT\": \"machine_natted_ip\",\n            \"INFO\": \"machine_description\",\n            \"PROTOCOL\": \"machine_protocol\",\n            \"LOCAL_TAG_MAPPING_SCHEMA\": \"tag_mapping_schema_1\",\n            \"LOCAL_ENABLE_SETUP\": true\n          },\n          \"machine_plate_2\": {\n\n        \"tag_mapping_schema_2\": { ... },\n        ... // other schema go here\n\n\t}\n```\n\n### \u003ca name=\"thirdmillenniumway\"\u003e\u003c/a\u003e How it works: Third Millennium way\n\nI create an angular4-based webapp to help you create your ```your-factory.json``` configuration file. The app will guide you through various step, but you can always see in real time the preview of your json configuration changing over time. You can setup your app to run locally or use the one host on [TODO](https://predix-configurator.github.io)\n\n#### Setup Webapp to run locally\n\nMake sure you have [NPM](https://www.npmjs.com/get-npm) and [AngularCLI](https://cli.angular.io) installed on your machine. Then:\n\n```\ngit clone https://github.com/made2591/predix-configurator\ncd predix-configurator/webgui\nnpm install\nng serve\n```\n\nAnd point your browser to [http://localhost:4200/](http://localhost:4200/)\n\n##### Welcome Page\n![Picture](images/screen-welcome.png)\n\n##### STEP 1: IGS Configuration Page\n![Picture](images/screen-igs.png)\n\n##### STEP 2: Predix Global Configuration\n![Picture](images/screen-predix-global.png)\n\n##### STEP 3: Predix Cloud Configuration\n![Picture](images/screen-predix-cloud.png)\n\n##### STEP 4: Tag Schemas Configuration\n![Picture](images/screen-tag-schemas.png)\n\n##### STEP 5: Sites Groups Configuration\n![Picture](images/screen-sites-groups.png)\n\n##### STEP 6: Machines Configuration\n![Picture](images/screen-machines.png)\n\n##### STEP 7: Result\n![Picture](images/screen-result.png)\n\n### Thank you\n\n- [cwun](https://github.com/cwun), I was really inspired by your multi-step wizard using UI-Router 1.0 and TypeScript 2.0.10.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmade2591%2Fpredix-configurator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmade2591%2Fpredix-configurator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmade2591%2Fpredix-configurator/lists"}