{"id":38542278,"url":"https://github.com/mitigate-dev/opcua-client-ruby","last_synced_at":"2026-01-17T07:12:18.871Z","repository":{"id":35097084,"uuid":"177774864","full_name":"mitigate-dev/opcua-client-ruby","owner":"mitigate-dev","description":"Incomplete OPC-UA client library for Ruby","archived":false,"fork":false,"pushed_at":"2023-02-15T13:31:15.000Z","size":386,"stargazers_count":5,"open_issues_count":2,"forks_count":6,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-10-08T01:25:16.775Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","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/mitigate-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-03-26T11:29:32.000Z","updated_at":"2024-09-12T06:42:36.000Z","dependencies_parsed_at":"2023-07-12T16:58:02.729Z","dependency_job_id":null,"html_url":"https://github.com/mitigate-dev/opcua-client-ruby","commit_stats":null,"previous_names":["mak-it/opcua-client-ruby"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mitigate-dev/opcua-client-ruby","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitigate-dev%2Fopcua-client-ruby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitigate-dev%2Fopcua-client-ruby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitigate-dev%2Fopcua-client-ruby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitigate-dev%2Fopcua-client-ruby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mitigate-dev","download_url":"https://codeload.github.com/mitigate-dev/opcua-client-ruby/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitigate-dev%2Fopcua-client-ruby/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28503175,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T06:57:29.758Z","status":"ssl_error","status_checked_at":"2026-01-17T06:56:03.931Z","response_time":85,"last_error":"SSL_read: 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":[],"created_at":"2026-01-17T07:12:18.185Z","updated_at":"2026-01-17T07:12:18.859Z","avatar_url":"https://github.com/mitigate-dev.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# opcua-client-ruby\n\nIncomplete OPC-UA client library for Ruby. Wraps open62541: \u003chttps://open62541.org\u003e.\n\n![ci-badge](https://github.com/mak-it/opcua-client-ruby/actions/workflows/build.yml/badge.svg)\n\n## Installation\n\nAdd it to your Gemfile:\n\n```ruby\ngem 'opcua_client'\n```\n\n## Basic usage\n\nUse `start` helper to automatically close connections:\n\n```ruby\nrequire 'opcua_client'\n\nOPCUAClient.start(\"opc.tcp://127.0.0.1:4840\") do |client|\n  # write to ns=2;s=1\n  client.write_int16(2, \"1\", 888)\n  puts client.read_int16(2, \"1\")\nend\n```\n\nOr handle connections manually:\n\n```ruby\nrequire 'opcua_client'\n\nclient = OPCUAClient::Client.new\nbegin\n  client.connect(\"opc.tcp://127.0.0.1:4840\")\n  # write to ns=2;s=1\n  client.write_int16(2, \"1\", 888)\n  puts client.read_int16(2, \"1\")\n\n  client.multi_write_int16(2, (1..10).map{|x| \"action_#{x}\"}, (1..10).map{|x| x * 10}) # 10x writes\n  client.multi_write_int32(2, (1..10).map{|x| \"amount_#{x}\"}, (1..10).map{|x| x * 10 + 1}) # 10x writes\nensure\n  client.disconnect\nend\n```\n\n### Available methods - connection:\n\n* ```client.connect(String url)``` - raises OPCUAClient::Error if unsuccessful\n* ```client.disconnect =\u003e Fixnum``` - returns status\n\n### Available methods - reads and writes:\n\nAll methods raise OPCUAClient::Error if unsuccessful.\n\n* ```client.read_int16(Fixnum ns, String name) =\u003e Fixnum```\n* ```client.read_uint16(Fixnum ns, String name) =\u003e Fixnum```\n* ```client.read_int32(Fixnum ns, String name) =\u003e Fixnum```\n* ```client.read_uint32(Fixnum ns, String name) =\u003e Fixnum```\n* ```client.read_float(Fixnum ns, String name) =\u003e Float```\n* ```client.read_boolean(Fixnum ns, String name) =\u003e true/false```\n* ```client.write_int16(Fixnum ns, String name, Fixnum value)```\n* ```client.write_uint16(Fixnum ns, String name, Fixnum value)```\n* ```client.write_int32(Fixnum ns, String name, Fixnum value)```\n* ```client.write_uint32(Fixnum ns, String name, Fixnum value)```\n* ```client.write_float(Fixnum ns, String name, Float value)```\n* ```client.write_boolean(Fixnum ns, String name, bool value)```\n* ```client.multi_write_int16(Fixnum ns, Array[String] names, Array[Fixnum] values)```\n* ```client.multi_write_uint16(Fixnum ns, Array[String] names, Array[Fixnum] values)```\n* ```client.multi_write_int32(Fixnum ns, Array[String] names, Array[Fixnum] values)```\n* ```client.multi_write_uint32(Fixnum ns, Array[String] names, Array[Fixnum] values)```\n* ```client.multi_write_float(Fixnum ns, Array[String] names, Array[Float] values)```\n* ```client.multi_write_boolean(Fixnum ns, Array[String] names, Array[bool] values)```\n\n### Available methods - misc:\n\n* ```client.state =\u003e Fixnum``` - client internal state\n* ```client.human_state =\u003e String``` - human readable client internal state\n* ```OPCUAClient::Client.human_status_code(Fixnum status) =\u003e String``` - returns human status for status\n\n## Subscriptions and monitoring\n\n```ruby\ncli = OPCUAClient::Client.new\n\ncli.after_session_created do |cli|\n  subscription_id = cli.create_subscription\n  ns_index = 1\n  node_name = \"the.answer\"\n  cli.add_monitored_item(subscription_id, ns_index, node_name)\nend\n\ncli.after_data_changed do |subscription_id, monitor_id, server_time, source_time, new_value|\n  puts(\"data changed: \" + [subscription_id, monitor_id, server_time, source_time, new_value].inspect)\nend\n\ncli.connect(\"opc.tcp://127.0.0.1:4840\")\n\nloop do\n  cli.connect(\"opc.tcp://127.0.0.1:4840\") # no-op if connected\n  cli.run_mon_cycle\n  sleep(0.2)\nend\n```\n\n### Available methods:\n\n* ```client.create_subscription =\u003e Fixnum``` - nil if error\n* ```client.add_monitored_item(Fixnum subscription, Fixnum ns, String name) =\u003e Fixnum``` - nil if error\n* ```client.run_mon_cycle``` - returns status\n* ```client.run_mon_cycle!``` - raises OPCUAClient::Error if unsuccessful\n\n### Available callbacks:\n* ```after_session_created```\n* ```after_data_changed```\n\n## Contribute\n\n### Set up\n\n```console\nbundle\n```\n\n### Build and start dummy OPCUA server\n\n```bash\nmake -C tools/server/ clean all # clean+all\ntools/server/server # run\n```\n\n### Try out changes\n\n```console\n$ bin/rake compile\n$ bin/console\npry\u003e client = OPCUAClient::Client.new\npry\u003e client.connect(\"opc.tcp://127.0.0.1:4840\")\npry\u003e client.read_uint32(5, \"uint32b\")\npry\u003e client.read_uint16(5, \"uint16b\")\npry\u003e client.read_bool(5, \"true_var\")\n```\n\n### Test it\n\n```console\n$ bin/rake compile\n$ bin/rake spec\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitigate-dev%2Fopcua-client-ruby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmitigate-dev%2Fopcua-client-ruby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitigate-dev%2Fopcua-client-ruby/lists"}