{"id":16608375,"url":"https://github.com/ufechner7/pykitemodels","last_synced_at":"2026-03-02T09:01:28.471Z","repository":{"id":249777538,"uuid":"832527948","full_name":"ufechner7/pykitemodels","owner":"ufechner7","description":"Kite power system models for Python","archived":false,"fork":false,"pushed_at":"2024-08-23T14:37:06.000Z","size":70,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-26T16:12:25.669Z","etag":null,"topics":["airborne","airborne-wind-energy","kite","kitepower"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ufechner7.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":"2024-07-23T07:52:38.000Z","updated_at":"2024-12-09T15:00:03.000Z","dependencies_parsed_at":"2024-07-23T09:43:54.210Z","dependency_job_id":"48fa635f-6522-4180-8d88-24f260a457b4","html_url":"https://github.com/ufechner7/pykitemodels","commit_stats":null,"previous_names":["ufechner7/pykitemodels"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ufechner7/pykitemodels","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ufechner7%2Fpykitemodels","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ufechner7%2Fpykitemodels/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ufechner7%2Fpykitemodels/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ufechner7%2Fpykitemodels/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ufechner7","download_url":"https://codeload.github.com/ufechner7/pykitemodels/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ufechner7%2Fpykitemodels/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29996260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T01:47:34.672Z","status":"online","status_checked_at":"2026-03-02T02:00:07.342Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["airborne","airborne-wind-energy","kite","kitepower"],"created_at":"2024-10-12T01:26:00.536Z","updated_at":"2026-03-02T09:01:28.163Z","avatar_url":"https://github.com/ufechner7.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pykitemodels\n[![linting: pylint](https://img.shields.io/badge/linting-pylint-yellowgreen)](https://github.com/pylint-dev/pylint)  [![CI](https://github.com/ufechner7/pykitemodels/actions/workflows/CI.yml/badge.svg)](https://github.com/ufechner7/pykitemodels/actions/workflows/CI.yml)\n\nA package that provides the kite power system models as described in [KiteModels.jl](https://ufechner7.github.io/KiteModels.jl/stable/), [WinchModels.jl](https://github.com/aenarete/WinchModels.jl), [KitePodModels.jl](https://github.com/aenarete/KitePodModels.jl) and [AtmosphericModels.jl](https://github.com/aenarete/AtmosphericModels.jl) \nwith a Python interface. For now, only working on Linux. If you need Windows support, please create a GitHub issue.\n\nCould also be extended with an interface for Matlab/ Simulink. If you need that, please create a GitHub issue.\n\n## Prerequisite\nCheck that `systemctl` is installed on your system:\n```bash\nwhich systemctl\n```\nExpected output: \n```bash\n/usr/bin/systemctl\n```\nor similar.\n\nIf you are using a docker container, please install [docker systemctl replacement](https://github.com/gdraheim/docker-systemctl-replacement) before you continue.\n\n## Installation\nCheck out this repository with git:\n```bash\ngit clone https://github.com/ufechner7/pykitemodels.git\ncd pykitemodels\n```\n\nYou can use the bash script `bin/install` to install `pixi` and Julia, to add the alias jl and py\nfor starting Julia and Python and to configure `ipython`. Just execute point one to seven.\n```bash\ncd bin\n./install\n```\nExpected output:\n```\n(pykitemodels) ufechner@ufryzen:~/repos/pykitemodels/bin$ ./install \n1) Install pixi\n2) Install ipython config file \n3) Install juliaup\n4) Install Julia 1.10\n5) Initial install of Julia packages\n6) Add alias for jl and py to ~/.bashrc \n7) Install modelserver.service \n8) Update Julia packages\n9) Quit\nPlease enter your choice, 9 to quit: 9\n```\n\u003cdetails\u003e\n  \u003csummary\u003eDetailed installation instruction with using the install script\u003c/summary\u003e\n  \n   ### pixi\n   ```\n   curl -fsSL https://pixi.sh/install.sh | bash\n   ```\n\n   ### Julia\n   First, install the Julia installer `juliaup`:\n   ```\n   curl -fsSL https://install.julialang.org | sh\n   ```\n   Then, install Julia with the commands:\n   ```\n   juliaup add 1.10\n   juliaup default 1.10\n   ```\n   Julia 1.10 is the current stable version at the time of writing, you can also use `juliaup` to install any other version.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003ePython (pixi) projects\u003c/summary\u003e\n  \n   ### Using pixi to create a new Python project\n   **Remark:** Not needed if you just checkout this git repository.\n\n   #### Create a new project\n\n   ```\n   pixi init new_project\n   cd new_project\n   pixi add python==3.8.19\n   pixi add ipython\n   pixi add numpy\n   ```\n   By default `conda` packages are installed, but with the parameter `--pypi` you can also install packages from the Python package index PyPI. You can specify version numbers, if you don't then the newest compatible version is installed.\n\n   #### Use a project created with pixi\n   ```bash\n   pixi shell\n   ```\n   This gives you a project-specific prompt. From this prompt, you can launch for example `ipython`.\n   Further reading: https://pixi.sh/latest/basic_usage/\n\n   Alternatively, just use the script `bin/run_python`.\n\u003c/details\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eManaging Julia projects without using the install script\u003c/summary\u003e\n\n   ### Installing the Julia packages\n   Launch Julia with\n   ```\n   julia --project\n   ```\n   Then, execute in the Julia REPL:\n   ```julia\n   using Pkg\n   Pkg.instantiate()\n   ```\n   ### Updating the Julia packages\n   Launch Julia with\n   ```\n   julia --project\n   ```\n   Then, execute in the Julia REPL:\n   ```julia\n   using Pkg\n   Pkg.update()\n   ```\n\u003c/details\u003e\n\n## Usage\n### Running the model server service\nIn the bash terminal, type\n```\nbin/modelserver start\n```\nOther options are `stop`, `restart` and `status`.\n\n\u003cdetails\u003e\n  \u003csummary\u003eRunning the model server for testing and debugging\u003c/summary\u003e\n\n   ### Running the model server for testing and debugging\n   Start Julia by typing `jl`, and then execute:\n   ```julia\n   julia\u003e \"include(\\\"model_server.jl\\\")\n   ```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eCreating a systemd service manually\u003c/summary\u003e\n  \n   An example service file is provided: `utils/modelserver.service.template`.\n\n   To install it, use the script `bin/install` and select option seven.\n\n   Enable it with\n   ```\n   sudo systemctl enable modelserver.service\n   ```\n   Start it with\n   ```\n   sudo systemctl start modelserver.service\n   ```\n   After 10 s, check if it works with\n   ```\n   sudo systemctl status modelserver.service\n   ```\n   Expected output:\n   ```\n   fechner@ufryzen:/etc/systemd/system$ sudo systemctl status modelserver.service \n   ● modelserver.service - provide http functions for kite simulation\n      Loaded: loaded (/etc/systemd/system/modelserver.service; enabled; vendor preset: enabled)\n      Active: active (running) since Fri 2024-07-19 12:25:56 CEST; 20s ago\n      Main PID: 41969 (run_modelserver)\n         Tasks: 21 (limit: 37416)\n      Memory: 445.5M\n         CPU: 7.768s\n      CGroup: /system.slice/modelserver.service\n               ├─41969 /bin/bash /home/ufechner/repos/pykitemodels/bin/run_modelserver\n               └─41973 /home/ufechner/.julia/juliaup/julia-1.10.4+0.x64.linux.gnu/bin/julia --project -t 2 --gcthreads=2,1 -e \"include(\\\"model_server.jl\\\")\"\n\n   jul 19 12:26:02 ufryzen run_modelserver[41973]:   / __ \\_  ____  ______ ____  ____\n   jul 19 12:26:02 ufryzen run_modelserver[41973]:  / / / / |/_/ / / / __ `/ _ \\/ __ \\\n   jul 19 12:26:02 ufryzen run_modelserver[41973]: / /_/ /\u003e  \u003c/ /_/ / /_/ /  __/ / / /\n   jul 19 12:26:02 ufryzen run_modelserver[41973]: \\____/_/|_|\\__, /\\__, /\\___/_/ /_/\n   jul 19 12:26:02 ufryzen run_modelserver[41973]:           /____//____/\n   jul 19 12:26:02 ufryzen run_modelserver[41973]: [ Info: 📦 Version 1.5.12 (2024-06-18)\n   jul 19 12:26:02 ufryzen run_modelserver[41973]: [ Info: ✅ Started server: http://127.0.0.1:8080\n   jul 19 12:26:02 ufryzen run_modelserver[41973]: [ Info: 📖 Documentation: http://127.0.0.1:8080/docs\n   jul 19 12:26:02 ufryzen run_modelserver[41973]: [ Info: 📊 Metrics: http://127.0.0.1:8080/docs/metrics\n   ```\n\n\u003c/details\u003e\n\n\n### Running the model_client script\nOpen a new bash terminal, then execute `bin/run_python` or use the alias `py`. Finally, execute:\n```python\nIn [1]: %run src/model_client.py \n```\nExpected output: The first and second state of a simulation as dictionaries.\n\n### Running the stress test script\nStart ipython with `py`, and then execute:\n```python\nIn [1]: %run test/test_stress.py \n```\nExpected output:\n```\nTime, elevation: 0.05 71.19\n...\nTime, elevation: 29.90 68.93\nTime, elevation: 29.95 68.93\nTime, elevation: 30.00 68.92\nErrors:  0\n```\n\n### Test the error handling\nStart ipython with `py`, and then execute:\n```python\nIn [3]: %run test/test_error.py\n```\nExpected output:\n```\nTime, elevation: 0.05 71.19\n...\nTime, elevation: 67.45 1.11\nTime, elevation: 67.50 0.75\nTime, elevation: 67.55 0.40\nAssertionError(\"height \u003e 0\")\nError in step()\nErrors:  1\n```\n## Reference\n### Provided functions\nUsing the command\n```python\nfrom src.model_client import *\n```\nyou can import the following functions:\n- set_data_path(path)\n- set_set(setdict)\n- init()\n- step(set_speed = None, set_torque=None, v_wind_gnd=6.0, wind_dir=0.0, depower=0.25, steering=0.0)\n- sys_state()\n- settings()\n- get_errors()\n- get_last_error()\n- clear_errors()\n\n## Licence\nThis project is licensed under the MIT License. Please see the below WAIVER in association with the license.\n\n## WAIVER\nTechnische Universiteit Delft hereby disclaims all copyright interest in the package “pykitemodels” (models of airborne wind energy systems) written by the Author(s).\n\nProf.dr. H.G.C. (Henri) Werij, Dean of Aerospace Engineering\n\n## Donations\nIf you like this software, please consider donating to https://gofund.me/508e041b .\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fufechner7%2Fpykitemodels","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fufechner7%2Fpykitemodels","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fufechner7%2Fpykitemodels/lists"}