# gpsdclient
[![PyPI Version][pypi-version]][pypi-url]
[![PyPI License][pypi-license]][mit-license]
[![tests][test-badge]][test-url]
> A simple and lightweight [gpsd](https://gpsd.gitlab.io/gpsd) client and library
## Installation
Needs Python 3 (no other dependencies).
If you want to use the library, use pip:
```
pip3 install gpsdclient
```
If you want to use only the standalone gpsd viewer, I recommend to use pipx:
```
pipx install gpsdclient
```
## Library usage
```python
from gpsdclient import GPSDClient
# get your data as json strings:
with GPSDClient(host="127.0.0.1") as client:
for result in client.json_stream():
print(result)
# or as python dicts (optionally convert time information to `datetime` objects)
with GPSDClient() as client:
for result in client.dict_stream(convert_datetime=True, filter=["TPV"]):
print("Latitude: %s" % result.get("lat", "n/a"))
print("Longitude: %s" % result.get("lon", "n/a"))
# you can optionally filter by report class
with GPSDClient() as client:
for result in client.dict_stream(filter=["TPV", "SKY"]):
print(result)
```
You can find the documentation for the available data and JSON fields in the
[gpsd_json(5) manpage](https://www.mankier.com/5/gpsd_json).
## Command line usage
You can use the `gpsdclient` standalone program or execute the module with
`python3 -m gpsdclient`.
```
$ gpsdclient
Connected to gpsd v3.17
Devices: /dev/ttyO4
Mode | Time | Lat | Lon | Speed | Track | Alt | Climb
-----+----------------------+--------------+--------------+--------+--------+-----------+-----------
1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a
1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a
1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a
3 | n/a | 51.813360383 | 6.550329033 | n/a | n/a | 46.518 | 0.0
3 | n/a | 51.813360383 | 6.550329033 | n/a | n/a | 46.518 | 0.0
3 | 2021-08-13 14:06:25 | 51.813360383 | 6.550329033 | 0.674 | 260.53 | 46.518 | 0.0
3 | 2021-08-13 14:06:27 | 51.81335905 | 6.550316283 | 0.54 | 245.71 | 46.002 | 0.0
3 | 2021-08-13 14:06:28 | 51.8133673 | 6.55033345 | 0.422 | 241.88 | 46.476 | 0.0
3 | 2021-08-13 14:06:29 | 51.813365833 | 6.5503352 | 0.34 | 246.35 | 46.868 | 0.0
3 | 2021-08-13 14:06:30 | 51.81336285 | 6.550339117 | 0.242 | 246.35 | 47.22 | 0.0
3 | 2021-08-13 14:06:31 | 51.8133614 | 6.550350367 | 0.273 | 246.35 | 46.846 | 0.0
3 | 2021-08-13 14:06:32 | 51.813359233 | 6.550353767 | 0.226 | 246.35 | 46.635 | 0.0
3 | 2021-08-13 14:06:33 | 51.8133574 | 6.550349817 | 0.221 | 246.35 | 46.52 | 0.0
3 | 2021-08-13 14:06:34 | 51.813356733 | 6.550345917 | 0.319 | 274.21 | 46.453 | 0.0
3 | 2021-08-13 14:06:35 | 51.813357917 | 6.5503521 | 0.149 | 274.21 | 46.529 | 0.0
^C
```
Or use the raw json mode:
```json
$ gpsdclient --json
{"class":"VERSION","release":"3.17","rev":"3.17","proto_major":3,"proto_minor":12}
{"class":"DEVICES","devices":[{"class":"DEVICE","path":"/dev/ttyO4","driver":"NMEA0183","activated":"2021-08-13T12:25:00.896Z","flags":1,"native":0,"bps":9600,"parity":"N","stopbits":1,"cycle":1.00}]}
{"class":"WATCH","enable":true,"json":true,"nmea":false,"raw":0,"scaled":false,"timing":false,"split24":false,"pps":false}
{"class":"SKY","device":"/dev/ttyO4","xdop":0.87,"ydop":1.86,"vdop":0.93,"tdop":2.26,"hdop":1.36,"gdop":3.96,"pdop":1.65,"satellites":[{"PRN":1,"el":84,"az":318,"ss":22,"used":true},{"PRN":22,"el":78,"az":234,"ss":16,"used":true},{"PRN":21,"el":72,"az":115,"ss":0,"used":false},{"PRN":3,"el":55,"az":239,"ss":19,"used":true},{"PRN":17,"el":34,"az":309,"ss":20,"used":true},{"PRN":32,"el":32,"az":53,"ss":32,"used":true},{"PRN":8,"el":21,"az":172,"ss":13,"used":false},{"PRN":14,"el":18,"az":274,"ss":13,"used":false},{"PRN":131,"el":10,"az":115,"ss":0,"used":false},{"PRN":19,"el":9,"az":321,"ss":33,"used":true},{"PRN":4,"el":4,"az":187,"ss":0,"used":false},{"PRN":31,"el":1,"az":106,"ss":0,"used":false},{"PRN":69,"el":80,"az":115,"ss":17,"used":true},{"PRN":84,"el":73,"az":123,"ss":0,"used":false},{"PRN":85,"el":42,"az":318,"ss":26,"used":true},{"PRN":68,"el":33,"az":39,"ss":0,"used":false},{"PRN":70,"el":27,"az":208,"ss":0,"used":false},{"PRN":76,"el":12,"az":330,"ss":19,"used":true},{"PRN":83,"el":12,"az":133,"ss":16,"used":false},{"PRN":77,"el":9,"az":18,"ss":0,"used":false}]}
{"class":"TPV","device":"/dev/ttyO4","mode":3,"time":"2021-08-13T12:25:01.000Z","ept":0.005,"lat":51.813525983,"lon":6.550081367,"alt":63.037,"epx":13.150,"epy":27.967,"epv":21.390,"track":211.3400,"speed":0.000,"climb":0.000,"eps":62.58,"epc":42.78}
^C
```
All command line options:
```
$ gpsdclient -h
usage: gpsdclient [-h] [--host HOST] [--port PORT] [--json]
Connect to a running gpsd instance and show human readable output.
optional arguments:
-h, --help show this help message and exit
--host HOST The host running GPSD (default: 127.0.0.1)
--port PORT GPSD port (default: 2947)
--json Output as JSON strings (default: False)
```
## Why
I made this because I just needed a simple client library to read the json data gpsd is
sending.
The other python libraries have various problems, like 100 % cpu usage, missing python 3
support, license problems, lots of dependencies or they aren't available on PyPI.
I also wanted a simple gpsd client to check if everything is working.
This client is as simple as possible with one exception: It supports the automatic
conversion of "time" data into `datetime.datetime` objects.
Have fun, hope you like it.
## License
[MIT][mit-license]
<!-- Badges -->
[pypi-version]: https://img.shields.io/pypi/v/gpsdclient
[pypi-license]: https://img.shields.io/pypi/l/gpsdclient
[pypi-url]: https://pypi.org/project/gpsdclient/
[mit-license]: https://choosealicense.com/licenses/mit/
[test-badge]: https://github.com/tfeldmann/gpsdclient/actions/workflows/tests.yml/badge.svg?branch=main
[test-url]: https://github.com/tfeldmann/gpsdclient/actions/workflows/tests.yml
Raw data
{
"_id": null,
"home_page": "https://github.com/tfeldmann/gpsdclient",
"name": "gpsdclient",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6,<4.0",
"maintainer_email": "",
"keywords": "gpsd,gps,client,standalone,socket,stream",
"author": "Thomas Feldmann",
"author_email": "mail@tfeldmann.de",
"download_url": "https://files.pythonhosted.org/packages/0a/85/9bfbc7ea5dd5c61f43ad048efe10d0a5a2d8ffd82143329fa380771221b8/gpsdclient-1.3.2.tar.gz",
"platform": null,
"description": "# gpsdclient\n\n[![PyPI Version][pypi-version]][pypi-url]\n[![PyPI License][pypi-license]][mit-license]\n[![tests][test-badge]][test-url]\n\n> A simple and lightweight [gpsd](https://gpsd.gitlab.io/gpsd) client and library\n\n## Installation\n\nNeeds Python 3 (no other dependencies).\nIf you want to use the library, use pip:\n\n```\npip3 install gpsdclient\n```\n\nIf you want to use only the standalone gpsd viewer, I recommend to use pipx:\n\n```\npipx install gpsdclient\n```\n\n## Library usage\n\n```python\nfrom gpsdclient import GPSDClient\n\n# get your data as json strings:\nwith GPSDClient(host=\"127.0.0.1\") as client:\n for result in client.json_stream():\n print(result)\n\n# or as python dicts (optionally convert time information to `datetime` objects)\nwith GPSDClient() as client:\n for result in client.dict_stream(convert_datetime=True, filter=[\"TPV\"]):\n print(\"Latitude: %s\" % result.get(\"lat\", \"n/a\"))\n print(\"Longitude: %s\" % result.get(\"lon\", \"n/a\"))\n\n# you can optionally filter by report class\nwith GPSDClient() as client:\n for result in client.dict_stream(filter=[\"TPV\", \"SKY\"]):\n print(result)\n```\n\nYou can find the documentation for the available data and JSON fields in the\n[gpsd_json(5) manpage](https://www.mankier.com/5/gpsd_json).\n\n## Command line usage\n\nYou can use the `gpsdclient` standalone program or execute the module with\n`python3 -m gpsdclient`.\n\n```\n$ gpsdclient\nConnected to gpsd v3.17\nDevices: /dev/ttyO4\n\nMode | Time | Lat | Lon | Speed | Track | Alt | Climb\n-----+----------------------+--------------+--------------+--------+--------+-----------+-----------\n1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a\n1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a\n1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a\n3 | n/a | 51.813360383 | 6.550329033 | n/a | n/a | 46.518 | 0.0\n3 | n/a | 51.813360383 | 6.550329033 | n/a | n/a | 46.518 | 0.0\n3 | 2021-08-13 14:06:25 | 51.813360383 | 6.550329033 | 0.674 | 260.53 | 46.518 | 0.0\n3 | 2021-08-13 14:06:27 | 51.81335905 | 6.550316283 | 0.54 | 245.71 | 46.002 | 0.0\n3 | 2021-08-13 14:06:28 | 51.8133673 | 6.55033345 | 0.422 | 241.88 | 46.476 | 0.0\n3 | 2021-08-13 14:06:29 | 51.813365833 | 6.5503352 | 0.34 | 246.35 | 46.868 | 0.0\n3 | 2021-08-13 14:06:30 | 51.81336285 | 6.550339117 | 0.242 | 246.35 | 47.22 | 0.0\n3 | 2021-08-13 14:06:31 | 51.8133614 | 6.550350367 | 0.273 | 246.35 | 46.846 | 0.0\n3 | 2021-08-13 14:06:32 | 51.813359233 | 6.550353767 | 0.226 | 246.35 | 46.635 | 0.0\n3 | 2021-08-13 14:06:33 | 51.8133574 | 6.550349817 | 0.221 | 246.35 | 46.52 | 0.0\n3 | 2021-08-13 14:06:34 | 51.813356733 | 6.550345917 | 0.319 | 274.21 | 46.453 | 0.0\n3 | 2021-08-13 14:06:35 | 51.813357917 | 6.5503521 | 0.149 | 274.21 | 46.529 | 0.0\n^C\n```\n\nOr use the raw json mode:\n\n```json\n$ gpsdclient --json\n{\"class\":\"VERSION\",\"release\":\"3.17\",\"rev\":\"3.17\",\"proto_major\":3,\"proto_minor\":12}\n{\"class\":\"DEVICES\",\"devices\":[{\"class\":\"DEVICE\",\"path\":\"/dev/ttyO4\",\"driver\":\"NMEA0183\",\"activated\":\"2021-08-13T12:25:00.896Z\",\"flags\":1,\"native\":0,\"bps\":9600,\"parity\":\"N\",\"stopbits\":1,\"cycle\":1.00}]}\n{\"class\":\"WATCH\",\"enable\":true,\"json\":true,\"nmea\":false,\"raw\":0,\"scaled\":false,\"timing\":false,\"split24\":false,\"pps\":false}\n{\"class\":\"SKY\",\"device\":\"/dev/ttyO4\",\"xdop\":0.87,\"ydop\":1.86,\"vdop\":0.93,\"tdop\":2.26,\"hdop\":1.36,\"gdop\":3.96,\"pdop\":1.65,\"satellites\":[{\"PRN\":1,\"el\":84,\"az\":318,\"ss\":22,\"used\":true},{\"PRN\":22,\"el\":78,\"az\":234,\"ss\":16,\"used\":true},{\"PRN\":21,\"el\":72,\"az\":115,\"ss\":0,\"used\":false},{\"PRN\":3,\"el\":55,\"az\":239,\"ss\":19,\"used\":true},{\"PRN\":17,\"el\":34,\"az\":309,\"ss\":20,\"used\":true},{\"PRN\":32,\"el\":32,\"az\":53,\"ss\":32,\"used\":true},{\"PRN\":8,\"el\":21,\"az\":172,\"ss\":13,\"used\":false},{\"PRN\":14,\"el\":18,\"az\":274,\"ss\":13,\"used\":false},{\"PRN\":131,\"el\":10,\"az\":115,\"ss\":0,\"used\":false},{\"PRN\":19,\"el\":9,\"az\":321,\"ss\":33,\"used\":true},{\"PRN\":4,\"el\":4,\"az\":187,\"ss\":0,\"used\":false},{\"PRN\":31,\"el\":1,\"az\":106,\"ss\":0,\"used\":false},{\"PRN\":69,\"el\":80,\"az\":115,\"ss\":17,\"used\":true},{\"PRN\":84,\"el\":73,\"az\":123,\"ss\":0,\"used\":false},{\"PRN\":85,\"el\":42,\"az\":318,\"ss\":26,\"used\":true},{\"PRN\":68,\"el\":33,\"az\":39,\"ss\":0,\"used\":false},{\"PRN\":70,\"el\":27,\"az\":208,\"ss\":0,\"used\":false},{\"PRN\":76,\"el\":12,\"az\":330,\"ss\":19,\"used\":true},{\"PRN\":83,\"el\":12,\"az\":133,\"ss\":16,\"used\":false},{\"PRN\":77,\"el\":9,\"az\":18,\"ss\":0,\"used\":false}]}\n{\"class\":\"TPV\",\"device\":\"/dev/ttyO4\",\"mode\":3,\"time\":\"2021-08-13T12:25:01.000Z\",\"ept\":0.005,\"lat\":51.813525983,\"lon\":6.550081367,\"alt\":63.037,\"epx\":13.150,\"epy\":27.967,\"epv\":21.390,\"track\":211.3400,\"speed\":0.000,\"climb\":0.000,\"eps\":62.58,\"epc\":42.78}\n^C\n```\n\nAll command line options:\n\n```\n$ gpsdclient -h\nusage: gpsdclient [-h] [--host HOST] [--port PORT] [--json]\n\nConnect to a running gpsd instance and show human readable output.\n\noptional arguments:\n -h, --help show this help message and exit\n --host HOST The host running GPSD (default: 127.0.0.1)\n --port PORT GPSD port (default: 2947)\n --json Output as JSON strings (default: False)\n```\n\n## Why\n\nI made this because I just needed a simple client library to read the json data gpsd is\nsending.\nThe other python libraries have various problems, like 100 % cpu usage, missing python 3\nsupport, license problems, lots of dependencies or they aren't available on PyPI.\nI also wanted a simple gpsd client to check if everything is working.\n\nThis client is as simple as possible with one exception: It supports the automatic\nconversion of \"time\" data into `datetime.datetime` objects.\n\nHave fun, hope you like it.\n\n## License\n\n[MIT][mit-license]\n\n<!-- Badges -->\n\n[pypi-version]: https://img.shields.io/pypi/v/gpsdclient\n[pypi-license]: https://img.shields.io/pypi/l/gpsdclient\n[pypi-url]: https://pypi.org/project/gpsdclient/\n[mit-license]: https://choosealicense.com/licenses/mit/\n[test-badge]: https://github.com/tfeldmann/gpsdclient/actions/workflows/tests.yml/badge.svg?branch=main\n[test-url]: https://github.com/tfeldmann/gpsdclient/actions/workflows/tests.yml\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A simple gpsd client.",
"version": "1.3.2",
"split_keywords": [
"gpsd",
"gps",
"client",
"standalone",
"socket",
"stream"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "76e9f8a624fbbe177da2274e8d37d08fabde8269e8fead25b22deda94c3caf88",
"md5": "f8b79aedcb094138e9a66f9322d9fef1",
"sha256": "35a7f781ae69a04f2d80278a6ae94564e524efaf061646c0a9bbb6ba4ffbcac8"
},
"downloads": -1,
"filename": "gpsdclient-1.3.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f8b79aedcb094138e9a66f9322d9fef1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6,<4.0",
"size": 7934,
"upload_time": "2023-01-09T11:29:16",
"upload_time_iso_8601": "2023-01-09T11:29:16.461928Z",
"url": "https://files.pythonhosted.org/packages/76/e9/f8a624fbbe177da2274e8d37d08fabde8269e8fead25b22deda94c3caf88/gpsdclient-1.3.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0a859bfbc7ea5dd5c61f43ad048efe10d0a5a2d8ffd82143329fa380771221b8",
"md5": "1b673c6ac192e3c66e9e22d22b4ed7a5",
"sha256": "70a496550a9747dff5e0e50b3c95a6e1dcab9d842860997e95120767e2060a7a"
},
"downloads": -1,
"filename": "gpsdclient-1.3.2.tar.gz",
"has_sig": false,
"md5_digest": "1b673c6ac192e3c66e9e22d22b4ed7a5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6,<4.0",
"size": 7619,
"upload_time": "2023-01-09T11:29:17",
"upload_time_iso_8601": "2023-01-09T11:29:17.995791Z",
"url": "https://files.pythonhosted.org/packages/0a/85/9bfbc7ea5dd5c61f43ad048efe10d0a5a2d8ffd82143329fa380771221b8/gpsdclient-1.3.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-01-09 11:29:17",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "tfeldmann",
"github_project": "gpsdclient",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "gpsdclient"
}