{"id":21765332,"url":"https://github.com/org-arl/fjage-sentuator","last_synced_at":"2025-04-13T15:07:46.552Z","repository":{"id":46762134,"uuid":"199866894","full_name":"org-arl/fjage-sentuator","owner":"org-arl","description":"Sensor/actuator framework for fjåge","archived":false,"fork":false,"pushed_at":"2024-05-08T03:50:48.000Z","size":174,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-13T15:07:41.709Z","etag":null,"topics":["distributed-systems","groovy","java","middleware","sensors"],"latest_commit_sha":null,"homepage":"","language":"Groovy","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/org-arl.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":"2019-07-31T13:57:47.000Z","updated_at":"2024-05-08T03:50:45.000Z","dependencies_parsed_at":"2024-05-06T11:46:56.048Z","dependency_job_id":null,"html_url":"https://github.com/org-arl/fjage-sentuator","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/org-arl%2Ffjage-sentuator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/org-arl%2Ffjage-sentuator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/org-arl%2Ffjage-sentuator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/org-arl%2Ffjage-sentuator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/org-arl","download_url":"https://codeload.github.com/org-arl/fjage-sentuator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248732484,"owners_count":21152852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["distributed-systems","groovy","java","middleware","sensors"],"created_at":"2024-11-26T13:11:42.559Z","updated_at":"2025-04-13T15:07:46.532Z","avatar_url":"https://github.com/org-arl.png","language":"Groovy","funding_links":[],"categories":[],"sub_categories":[],"readme":"fjåge-sentuator\n===============\n**Sensor/actuator framework for fjåge**\n\nIntroduction\n------------\n\n[fjåge](http://github.com/org-arl/fjage) provides a **lightweight** and **easy-to-learn** framework for [agent-oriented software development](http://en.wikipedia.org/wiki/Agent-oriented_programming) in Java and Groovy. The fjåge-sentuator project builds on top of fjåge to provide a development framework for agents providing sensor \u0026 actuator services.\n\nKey Features\n------------\n\n* Flexible API for sensor and actuator services\n* Support for sensor/actuator configuration \u0026 health monitoring\n* Distributed framework enabling producers and consumers to be on different nodes\n* Lightweight, fast and easy to learn\n* Agent development in Java or Groovy\n* Interactive Groovy shell and scripting\n* fjåge provides APIs for access from Java, Groovy, Python, C, Julia, and Javascript, and a JSON-based protocol to interface with external applications\n\nDocumentation\n-------------\n\nIf you are not already familiar with fjåge, [get familiar with it](https://fjage.readthedocs.io/en/latest/quickstart.html) first!\n\nWe illustrate how to develop a sentuator driver through a simple example (`MySentuator.groovy`):\n```groovy\nimport org.arl.fjage.sentuator.*\n\nclass MySentuator extends Sentuator {\n\n  void setup() {\n    sentuatorName = 'Demo Sentuator'    // name your sentuator\n    config.ofs = 0.0                    // setup your configuration parameters\n  }\n\n  Measurement measure() {\n    // generate a random measurement with the configured offset\n    def m = new GenericMeasurement(type: sentuatorName)\n    m.x = new Quantity(Math.random() + config.ofs, 'm')\n    return m\n  }\n\n}\n```\n\nPlace this agent and `fjage-sentuator.jar` in the classpath, and fire up fjåge to interact with the agent. On the shell, we load the sentuator agent:\n```console\n\u003e container.add 'mysen', new MySentuator()\n\u003e ps\nmysen: MySentuator - IDLE\nshell: org.arl.fjage.shell.ShellAgent - RUNNING\n```\nWe then setup the environment for easy interaction with sentuators:\n```console\n\u003e org.arl.fjage.sentuator.GroovyExtensions.enable()\n```\nand play with our simple demo sentuator:\n```console\n\u003e mysen\n« Demo Sentuator »\n\n[org.arl.fjage.sentuator.ConfigParam]\n  ofs ⤇ 0.0\n\n[org.arl.fjage.sentuator.SentuatorParam]\n  enable = false\n  poll = 0\n\n\u003e mysen.enable = true\ntrue\n\n\u003e mysen.ofs = 1.0\n1.0\n\n\u003e mysen\n« Demo Sentuator »\n\n[org.arl.fjage.sentuator.ConfigParam]\n  ofs ⤇ 1.0\n\n[org.arl.fjage.sentuator.SentuatorParam]\n  enable = true\n  poll = 0\n\n\u003e mysen.status\nOK\n\n\u003e mysen.measure()\nGenericMeasurement[type:Demo Sentuator x:1.01437940 m]\n\n\u003e mysen.measure()\nGenericMeasurement[type:Demo Sentuator x:1.7872058 m]\n\n\u003e mysen.measure()\nGenericMeasurement[type:Demo Sentuator x:1.0283573 m]\n\n\u003e mysen.measure().x\n1.8090699\n\n\u003e mysen.measure().x\n1.395348\n\n\u003e mysen.actuate(2)   // we have not defined an actuate() method, so this should fail\nREFUSE\n\n\u003e subscribe(topic(mysen))\n\u003e mysen.poll = 100   // get us a measurement every 100 ms\n100\nmysen \u003e\u003e GenericMeasurement:INFORM[time:1564865016105 x:2.6327257]\nmysen \u003e\u003e GenericMeasurement:INFORM[time:1564865016207 x:2.7943153]\nmysen \u003e\u003e GenericMeasurement:INFORM[time:1564865016307 x:2.8590062]\nmysen \u003e\u003e GenericMeasurement:INFORM[time:1564865018704 x:2.7272174]\n\n\u003e mysen.poll = 0\n0\n```\n\nFor more information on doing cool stuff with fjåge-sentuators, check out the [API documentation](http://org-arl.github.io/fjage-sentuator/).\n\nSupport\n-------\n\n* [Project Home](http://github.com/org-arl/fjage-sentuator)\n* [Issue Tracking](http://github.com/org-arl/fjage-sentuator/issues)\n\nMaven Central dependency\n------------------------\n\n    \u003cdependency\u003e\n      \u003cgroupId\u003ecom.github.org-arl\u003c/groupId\u003e\n      \u003cartifactId\u003efjage-sentuator\u003c/artifactId\u003e\n      \u003cversion\u003e1.3.0\u003c/version\u003e\n    \u003c/dependency\u003e\n\nContributing\n------------\n\nContributions are always welcome! Clone, develop and do a pull request!\n\nTry to stick to the coding style already in use in the repository. Additionally, some guidelines:\n\n* [Commit message style](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#commits)\n\nBuilding:\n\n* `gradle` to build the jars\n* `gradle check` to run all regression tests (automated through Travis CI)\n* `gradle upload` to upload jars to Maven staging (requires credentials)\n* `gradle groovydoc` to build the Java API documentation\n\nLicense\n-------\n\nfjåge-sentuator is licensed under the Simplified (3-clause) BSD license.\nSee [LICENSE](http://github.com/org-arl/fjage-sentuator/blob/master/LICENSE) for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forg-arl%2Ffjage-sentuator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Forg-arl%2Ffjage-sentuator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forg-arl%2Ffjage-sentuator/lists"}