From 9db3290df15c2b94ab0b29e64a92bde31dd7e6e9 Mon Sep 17 00:00:00 2001 From: Phil Bruckner Date: Wed, 17 Jan 2024 09:38:49 -0600 Subject: [PATCH] Initial implementation --- .github/workflows/validate.yml | 26 +++ .gitignore | 6 + LICENSE | 24 ++ README.md | 45 ++++ custom_components/gpslogger/__init__.py | 127 +++++++++++ custom_components/gpslogger/config_flow.py | 10 + custom_components/gpslogger/const.py | 12 + custom_components/gpslogger/device_tracker.py | 207 ++++++++++++++++++ custom_components/gpslogger/manifest.json | 11 + .../gpslogger/translations/bg.json | 17 ++ .../gpslogger/translations/ca.json | 18 ++ .../gpslogger/translations/cs.json | 18 ++ .../gpslogger/translations/da.json | 18 ++ .../gpslogger/translations/de.json | 18 ++ .../gpslogger/translations/el.json | 18 ++ .../gpslogger/translations/en.json | 18 ++ .../gpslogger/translations/es-419.json | 13 ++ .../gpslogger/translations/es.json | 18 ++ .../gpslogger/translations/et.json | 18 ++ .../gpslogger/translations/fi.json | 18 ++ .../gpslogger/translations/fr.json | 18 ++ .../gpslogger/translations/he.json | 9 + .../gpslogger/translations/hu.json | 18 ++ .../gpslogger/translations/id.json | 18 ++ .../gpslogger/translations/it.json | 18 ++ .../gpslogger/translations/ja.json | 18 ++ .../gpslogger/translations/ka.json | 8 + .../gpslogger/translations/ko.json | 18 ++ .../gpslogger/translations/lb.json | 17 ++ .../gpslogger/translations/lt.json | 18 ++ .../gpslogger/translations/nb.json | 18 ++ .../gpslogger/translations/nl.json | 18 ++ .../gpslogger/translations/pl.json | 18 ++ .../gpslogger/translations/pt-BR.json | 18 ++ .../gpslogger/translations/pt.json | 18 ++ .../gpslogger/translations/ro.json | 18 ++ .../gpslogger/translations/ru.json | 18 ++ .../gpslogger/translations/sk.json | 18 ++ .../gpslogger/translations/sl.json | 16 ++ .../gpslogger/translations/sv.json | 18 ++ .../gpslogger/translations/tr.json | 18 ++ .../gpslogger/translations/uk.json | 18 ++ .../gpslogger/translations/vi.json | 13 ++ .../gpslogger/translations/zh-Hans.json | 18 ++ .../gpslogger/translations/zh-Hant.json | 18 ++ info.md | 10 + 46 files changed, 1093 insertions(+) create mode 100644 .github/workflows/validate.yml create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 custom_components/gpslogger/__init__.py create mode 100644 custom_components/gpslogger/config_flow.py create mode 100644 custom_components/gpslogger/const.py create mode 100644 custom_components/gpslogger/device_tracker.py create mode 100644 custom_components/gpslogger/manifest.json create mode 100644 custom_components/gpslogger/translations/bg.json create mode 100644 custom_components/gpslogger/translations/ca.json create mode 100644 custom_components/gpslogger/translations/cs.json create mode 100644 custom_components/gpslogger/translations/da.json create mode 100644 custom_components/gpslogger/translations/de.json create mode 100644 custom_components/gpslogger/translations/el.json create mode 100644 custom_components/gpslogger/translations/en.json create mode 100644 custom_components/gpslogger/translations/es-419.json create mode 100644 custom_components/gpslogger/translations/es.json create mode 100644 custom_components/gpslogger/translations/et.json create mode 100644 custom_components/gpslogger/translations/fi.json create mode 100644 custom_components/gpslogger/translations/fr.json create mode 100644 custom_components/gpslogger/translations/he.json create mode 100644 custom_components/gpslogger/translations/hu.json create mode 100644 custom_components/gpslogger/translations/id.json create mode 100644 custom_components/gpslogger/translations/it.json create mode 100644 custom_components/gpslogger/translations/ja.json create mode 100644 custom_components/gpslogger/translations/ka.json create mode 100644 custom_components/gpslogger/translations/ko.json create mode 100644 custom_components/gpslogger/translations/lb.json create mode 100644 custom_components/gpslogger/translations/lt.json create mode 100644 custom_components/gpslogger/translations/nb.json create mode 100644 custom_components/gpslogger/translations/nl.json create mode 100644 custom_components/gpslogger/translations/pl.json create mode 100644 custom_components/gpslogger/translations/pt-BR.json create mode 100644 custom_components/gpslogger/translations/pt.json create mode 100644 custom_components/gpslogger/translations/ro.json create mode 100644 custom_components/gpslogger/translations/ru.json create mode 100644 custom_components/gpslogger/translations/sk.json create mode 100644 custom_components/gpslogger/translations/sl.json create mode 100644 custom_components/gpslogger/translations/sv.json create mode 100644 custom_components/gpslogger/translations/tr.json create mode 100644 custom_components/gpslogger/translations/uk.json create mode 100644 custom_components/gpslogger/translations/vi.json create mode 100644 custom_components/gpslogger/translations/zh-Hans.json create mode 100644 custom_components/gpslogger/translations/zh-Hant.json create mode 100644 info.md diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..c3069e1 --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,26 @@ +name: Validate + +on: + pull_request: + push: + +jobs: + validate-hassfest: + runs-on: ubuntu-latest + name: With hassfest + steps: + - name: 📥 Checkout the repository + uses: actions/checkout@v3 + + - name: 🏃 Hassfest validation + uses: "home-assistant/actions/hassfest@master" + + validate-hacs: + runs-on: ubuntu-latest + name: With HACS Action + steps: + - name: 🏃 HACS validation + uses: hacs/action@main + with: + category: integration + ignore: brands diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb2c767 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +.vscode/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cf1ab25 --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/README.md b/README.md new file mode 100644 index 0000000..f12f52e --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +# GPSLogger GPSLogger + +This is a custom version of the Home Assistant built-in [GPSLogger](https://www.home-assistant.io/integrations/gpslogger/) integration. + +It extends the built-in integration in ways that make sense, but are no longer accepted practice. +Specifically, it allows additional attributes, especially `last_seen`, +which is crucial when combining entities from this Device Tracker integration with ones from other integrations, +e.g., via my [Composite Device Tracker](https://github.com/pnbruckner/ha-composite-tracker) integration. +Also, `last_seen` is important when dealing with packets received out of order from the corresponding Android app, +e.g., due to network delays. + +## Installation +### With HACS +[![hacs_badge](https://img.shields.io/badge/HACS-Custom-41BDF5.svg)](https://hacs.xyz/) + +You can use HACS to manage the installation and provide update notifications. + +1. Add this repo as a [custom repository](https://hacs.xyz/docs/faq/custom_repositories/): + +```text +https://github.com/pnbruckner/ha-gpslogger +``` + +2. Install the integration using the appropriate button on the HACS Integrations page. Search for "gpslogger". + +### Manual + +Place a copy of the files from [`custom_components/gpslogger`](custom_components/gpslogger) +in `/custom_components/gpslogger`, +where `` is your Home Assistant configuration directory. + +>__NOTE__: When downloading, make sure to use the `Raw` button from each file's page. + +## Setup + +Please see the standard [GPSLogger](https://www.home-assistant.io/integrations/gpslogger/) documentation for basic set up. + +The following should be added to the **HTTP Body** setting in the Android app (in addition to what the standard docs suggest): + +```text +&last_seen=%TIME&battery_charging=%ISCHARGING +``` + +Note that `%TIME` provides the phone's time in UTC. +If you'd rather have the time specified in the phone's local time zone, use `%TIMEOFFSET` instead. diff --git a/custom_components/gpslogger/__init__.py b/custom_components/gpslogger/__init__.py new file mode 100644 index 0000000..8e9c5ab --- /dev/null +++ b/custom_components/gpslogger/__init__.py @@ -0,0 +1,127 @@ +"""Support for GPSLogger.""" +from http import HTTPStatus +import logging + +from aiohttp import web +import voluptuous as vol + +from homeassistant.components import webhook +from homeassistant.components.device_tracker import ATTR_BATTERY +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import ( + ATTR_BATTERY_CHARGING, + ATTR_LATITUDE, + ATTR_LONGITUDE, + CONF_WEBHOOK_ID, + Platform, +) +from homeassistant.core import HomeAssistant +from homeassistant.helpers import config_entry_flow +import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.dispatcher import async_dispatcher_send + +from .const import ( + ATTR_ACCURACY, + ATTR_ACTIVITY, + ATTR_ALTITUDE, + ATTR_DEVICE, + ATTR_DIRECTION, + ATTR_LAST_SEEN, + ATTR_PROVIDER, + ATTR_SPEED, + DOMAIN, +) + +_LOGGER = logging.getLogger(__name__) + +PLATFORMS = [Platform.DEVICE_TRACKER] +TRACKER_UPDATE = f"{DOMAIN}_tracker_update" + +DEFAULT_ACCURACY = 200 +DEFAULT_BATTERY = -1 + + +def _id(value: str) -> str: + """Coerce id by removing '-'.""" + return value.replace("-", "") + + +WEBHOOK_SCHEMA = vol.Schema( + { + vol.Required(ATTR_DEVICE): _id, + vol.Required(ATTR_LATITUDE): cv.latitude, + vol.Required(ATTR_LONGITUDE): cv.longitude, + vol.Optional(ATTR_ACCURACY, default=DEFAULT_ACCURACY): vol.Coerce(float), + vol.Optional(ATTR_ACTIVITY): cv.string, + vol.Optional(ATTR_ALTITUDE): vol.Coerce(float), + vol.Optional(ATTR_BATTERY, default=DEFAULT_BATTERY): vol.Coerce(float), + vol.Optional(ATTR_BATTERY_CHARGING): cv.boolean, + vol.Optional(ATTR_DIRECTION): vol.Coerce(float), + vol.Optional(ATTR_LAST_SEEN): cv.datetime, + vol.Optional(ATTR_PROVIDER): cv.string, + vol.Optional(ATTR_SPEED): vol.Coerce(float), + } +) + + +async def handle_webhook(hass, webhook_id, request): + """Handle incoming webhook with GPSLogger request.""" + try: + data = WEBHOOK_SCHEMA(dict(await request.post())) + except vol.MultipleInvalid as error: + return web.Response( + text=error.error_message, status=HTTPStatus.UNPROCESSABLE_ENTITY + ) + + if ATTR_LAST_SEEN not in data and not hass.data[DOMAIN]["warned_no_last_seen"]: + _LOGGER.warning( + "HTTP Body does not contain %s. Consider adding it for better results. See " + "https://github.com/pnbruckner/ha-gpslogger/blob/master/README.md", + ATTR_LAST_SEEN, + ) + hass.data[DOMAIN]["warned_no_last_seen"] = True + + attrs = { + ATTR_ACTIVITY: data.get(ATTR_ACTIVITY), + ATTR_ALTITUDE: data.get(ATTR_ALTITUDE), + ATTR_BATTERY_CHARGING: data.get(ATTR_BATTERY_CHARGING), + ATTR_DIRECTION: data.get(ATTR_DIRECTION), + ATTR_LAST_SEEN: data.get(ATTR_LAST_SEEN), + ATTR_PROVIDER: data.get(ATTR_PROVIDER), + ATTR_SPEED: data.get(ATTR_SPEED), + } + + device = data[ATTR_DEVICE] + + async_dispatcher_send( + hass, + TRACKER_UPDATE, + device, + (data[ATTR_LATITUDE], data[ATTR_LONGITUDE]), + data[ATTR_BATTERY], + data[ATTR_ACCURACY], + attrs, + ) + + return web.Response(text=f"Setting location for {device}") + + +async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + """Configure based on config entry.""" + hass.data.setdefault(DOMAIN, {"devices": set(), "warned_no_last_seen": False}) + webhook.async_register( + hass, DOMAIN, "GPSLogger", entry.data[CONF_WEBHOOK_ID], handle_webhook + ) + + await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) + + return True + + +async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + """Unload a config entry.""" + webhook.async_unregister(hass, entry.data[CONF_WEBHOOK_ID]) + return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) + + +async_remove_entry = config_entry_flow.webhook_async_remove_entry diff --git a/custom_components/gpslogger/config_flow.py b/custom_components/gpslogger/config_flow.py new file mode 100644 index 0000000..36e7105 --- /dev/null +++ b/custom_components/gpslogger/config_flow.py @@ -0,0 +1,10 @@ +"""Config flow for GPSLogger.""" +from homeassistant.helpers import config_entry_flow + +from .const import DOMAIN + +config_entry_flow.register_webhook_flow( + DOMAIN, + "GPSLogger Webhook", + {"docs_url": "https://github.com/pnbruckner/ha-gpslogger/blob/master/README.md"}, +) diff --git a/custom_components/gpslogger/const.py b/custom_components/gpslogger/const.py new file mode 100644 index 0000000..23fcf10 --- /dev/null +++ b/custom_components/gpslogger/const.py @@ -0,0 +1,12 @@ +"""Const for GPSLogger.""" + +DOMAIN = "gpslogger" + +ATTR_ALTITUDE = "altitude" +ATTR_ACCURACY = "accuracy" +ATTR_ACTIVITY = "activity" +ATTR_DEVICE = "device" +ATTR_DIRECTION = "direction" +ATTR_LAST_SEEN = "last_seen" +ATTR_PROVIDER = "provider" +ATTR_SPEED = "speed" diff --git a/custom_components/gpslogger/device_tracker.py b/custom_components/gpslogger/device_tracker.py new file mode 100644 index 0000000..bbc361a --- /dev/null +++ b/custom_components/gpslogger/device_tracker.py @@ -0,0 +1,207 @@ +"""Support for the GPSLogger device tracking.""" +from __future__ import annotations + +from datetime import datetime +import logging +from typing import cast + +from homeassistant.components.device_tracker import SourceType, TrackerEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import ( + ATTR_BATTERY_CHARGING, + ATTR_BATTERY_LEVEL, + ATTR_GPS_ACCURACY, + ATTR_LATITUDE, + ATTR_LONGITUDE, +) +from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers import device_registry as dr +from homeassistant.helpers.device_registry import DeviceInfo +from homeassistant.helpers.dispatcher import async_dispatcher_connect +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.util import dt as dt_util + +from . import DOMAIN as GPL_DOMAIN, TRACKER_UPDATE +from .const import ( + ATTR_ACTIVITY, + ATTR_ALTITUDE, + ATTR_DIRECTION, + ATTR_LAST_SEEN, + ATTR_PROVIDER, + ATTR_SPEED, +) + +_LOGGER = logging.getLogger(__name__) + + +async def async_setup_entry( + hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback +) -> None: + """Configure a dispatcher connection based on a config entry.""" + + @callback + def _receive_data(device, gps, battery, accuracy, attrs): + """Receive set location.""" + if device in hass.data[GPL_DOMAIN]["devices"]: + return + + hass.data[GPL_DOMAIN]["devices"].add(device) + + async_add_entities([GPSLoggerEntity(device, gps, battery, accuracy, attrs)]) + + entry.async_on_unload(async_dispatcher_connect(hass, TRACKER_UPDATE, _receive_data)) + + # Restore previously loaded devices + dev_reg = dr.async_get(hass) + dev_ids = { + identifier[1] + for device in dev_reg.devices.values() + for identifier in device.identifiers + if identifier[0] == GPL_DOMAIN + } + if not dev_ids: + return + + entities = [] + for dev_id in dev_ids: + hass.data[GPL_DOMAIN]["devices"].add(dev_id) + entity = GPSLoggerEntity(dev_id, None, None, None, None) + entities.append(entity) + + async_add_entities(entities) + + +class GPSLoggerEntity(TrackerEntity, RestoreEntity): + """Represent a tracked device.""" + + _attr_has_entity_name = True + _attr_name = None + _prv_seen: datetime | None = None + + def __init__(self, device, location, battery, accuracy, attributes): + """Set up GPSLogger entity.""" + self._accuracy = accuracy or 0 + self._attributes = attributes + self._name = device + self._battery = battery + self._location = location + self._unique_id = device + self._prv_seen = attributes and attributes.get(ATTR_LAST_SEEN) + + @property + def battery_level(self): + """Return battery value of the device.""" + return self._battery + + @property + def extra_state_attributes(self): + """Return device specific attributes.""" + return self._attributes + + @property + def latitude(self): + """Return latitude value of the device.""" + return self._location[0] + + @property + def longitude(self): + """Return longitude value of the device.""" + return self._location[1] + + @property + def location_accuracy(self): + """Return the gps accuracy of the device.""" + return self._accuracy + + @property + def unique_id(self): + """Return the unique ID.""" + return self._unique_id + + @property + def device_info(self) -> DeviceInfo: + """Return the device info.""" + return DeviceInfo( + identifiers={(GPL_DOMAIN, self._unique_id)}, + name=self._name, + ) + + @property + def source_type(self) -> SourceType: + """Return the source type, eg gps or router, of the device.""" + return SourceType.GPS + + async def async_added_to_hass(self) -> None: + """Register state update callback.""" + await super().async_added_to_hass() + self.async_on_remove( + async_dispatcher_connect( + self.hass, TRACKER_UPDATE, self._async_receive_data + ) + ) + + # don't restore if we got created with data + if self._location is not None: + return + + if (state := await self.async_get_last_state()) is None: + self._location = (None, None) + self._accuracy = 0 + self._attributes = { + ATTR_ACTIVITY: None, + ATTR_ALTITUDE: None, + ATTR_BATTERY_CHARGING: None, + ATTR_DIRECTION: None, + ATTR_LAST_SEEN: None, + ATTR_PROVIDER: None, + ATTR_SPEED: None, + } + self._battery = None + self._prv_seen = None + return + + attr = state.attributes + self._location = (attr.get(ATTR_LATITUDE), attr.get(ATTR_LONGITUDE)) + self._accuracy = attr.get(ATTR_GPS_ACCURACY, 0) + # Python datetime objects are saved/restored as strings. + # Convert back to datetime object. + restored_last_seen = cast(str | None, attr.get(ATTR_LAST_SEEN)) + if isinstance(restored_last_seen, str): + last_seen = dt_util.parse_datetime(restored_last_seen) + else: + last_seen = None + self._prv_seen = last_seen + self._attributes = { + ATTR_ACTIVITY: attr.get(ATTR_ACTIVITY), + ATTR_ALTITUDE: attr.get(ATTR_ALTITUDE), + ATTR_BATTERY_CHARGING: attr.get(ATTR_BATTERY_CHARGING), + ATTR_DIRECTION: attr.get(ATTR_DIRECTION), + ATTR_LAST_SEEN: last_seen, + ATTR_PROVIDER: attr.get(ATTR_PROVIDER), + ATTR_SPEED: attr.get(ATTR_SPEED), + } + self._battery = attr.get(ATTR_BATTERY_LEVEL) + + @callback + def _async_receive_data(self, device, location, battery, accuracy, attributes): + """Mark the device as seen.""" + if device != self._name: + return + + last_seen = cast(datetime | None, attributes.get(ATTR_LAST_SEEN)) + if self._prv_seen and last_seen and last_seen < self._prv_seen: + _LOGGER.debug( + "%s: Skipping update because last_seen went backwards: %s < %s", + self.entity_id, + last_seen, + self._prv_seen, + ) + return + + self._location = location + self._battery = battery + self._accuracy = accuracy or 0 + self._attributes.update(attributes) + self._prv_seen = last_seen + self.async_write_ha_state() diff --git a/custom_components/gpslogger/manifest.json b/custom_components/gpslogger/manifest.json new file mode 100644 index 0000000..8ac5204 --- /dev/null +++ b/custom_components/gpslogger/manifest.json @@ -0,0 +1,11 @@ +{ + "domain": "gpslogger", + "name": "GPSLogger", + "codeowners": ["@pnbruckner"], + "config_flow": true, + "dependencies": ["webhook"], + "documentation": "https://github.com/pnbruckner/ha-gpslogger/blob/master/README.md", + "iot_class": "cloud_push", + "issue_tracker": "https://github.com/pnbruckner/ha-gpslogger/issues", + "version": "1.0.0b0" +} diff --git a/custom_components/gpslogger/translations/bg.json b/custom_components/gpslogger/translations/bg.json new file mode 100644 index 0000000..e396e08 --- /dev/null +++ b/custom_components/gpslogger/translations/bg.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "\u041d\u0435 \u0435 \u0441\u0432\u044a\u0440\u0437\u0430\u043d \u0441 Home Assistant Cloud.", + "single_instance_allowed": "\u0412\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e. \u0412\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f." + }, + "create_entry": { + "default": "\u0417\u0430 \u0434\u0430 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0434\u043e Home Assistant, \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430 webhook \u0432 GPSLogger. \n\n \u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \n\n - URL: ` {webhook_url} ` \n - Method: POST \n\n \u0412\u0438\u0436\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0442\u0430]({docs_url}) \u0437\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438." + }, + "step": { + "user": { + "description": "\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 GPSLogger Webhook?", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435 \u043d\u0430 GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/ca.json b/custom_components/gpslogger/translations/ca.json new file mode 100644 index 0000000..b5ac4d4 --- /dev/null +++ b/custom_components/gpslogger/translations/ca.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "No connectat a Home Assistant Cloud.", + "single_instance_allowed": "Ja configurat. Nom\u00e9s \u00e9s possible una sola configuraci\u00f3.", + "webhook_not_internet_accessible": "La teva inst\u00e0ncia de Home Assistant ha de ser accessible des d'Internet per poder rebre missatges webhook." + }, + "create_entry": { + "default": "Per enviar esdeveniments a Home Assistant, has de configurar l'opci\u00f3 webhook de GPSLogger.\n\nCompleta la seg\u00fcent informaci\u00f3:\n\n- URL: `{webhook_url}` \n- M\u00e8tode: POST \n\nConsulta la [documentaci\u00f3]({docs_url}) per a m\u00e9s detalls." + }, + "step": { + "user": { + "description": "Est\u00e0s segur que vols configurar el Webhook de GPSLogger?", + "title": "Configuraci\u00f3 del Webhook de GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/cs.json b/custom_components/gpslogger/translations/cs.json new file mode 100644 index 0000000..af5d2da --- /dev/null +++ b/custom_components/gpslogger/translations/cs.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Nen\u00ed p\u0159ipojeno k Home Assistant Cloud.", + "single_instance_allowed": "Ji\u017e nastaveno. Je mo\u017en\u00e9 jen jedin\u00e9 nastaven\u00ed.", + "webhook_not_internet_accessible": "V\u00e1\u0161 Home Assistant mus\u00ed b\u00fdt p\u0159\u00edstupn\u00fd z internetu, aby mohl p\u0159ij\u00edmat zpr\u00e1vy webhook." + }, + "create_entry": { + "default": "Chcete-li odeslat ud\u00e1losti do Home Assistanta, budete muset nastavit funkci Webhook v n\u00e1stroji GPSLogger. \n\nVypl\u0148te n\u00e1sleduj\u00edc\u00ed informace: \n\n - URL: \"{webhook_url}\"\n - Metoda: POST \n\nDal\u0161\u00ed podrobnosti naleznete v [dokumentaci]({docs_url})." + }, + "step": { + "user": { + "description": "Opravdu chcete nastavit GPSLogger Webhook?", + "title": "Nastavit GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/da.json b/custom_components/gpslogger/translations/da.json new file mode 100644 index 0000000..fe877a1 --- /dev/null +++ b/custom_components/gpslogger/translations/da.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Ikke forbundet til Home Assistant Cloud.", + "single_instance_allowed": "Allerede konfigureret. Kun en enkelt konfiguration mulig.", + "webhook_not_internet_accessible": "Din Home Assistant-instans skal v\u00e6re tilg\u00e6ngelig fra internettet for at modtage webhook-meddelelser." + }, + "create_entry": { + "default": "For at sende h\u00e6ndelser til Home Assistant skal du konfigurere webhook-funktionen i GPSLogger.\n\n Udfyld f\u00f8lgende oplysninger: \n\n - Webadresse: `{webhook_url}`\n - Metode: POST\n \nSe [dokumentationen]({docs_url}) for yderligere oplysninger." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil konfigurere GPSLogger Webhook?", + "title": "Konfigurer GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/de.json b/custom_components/gpslogger/translations/de.json new file mode 100644 index 0000000..10665bb --- /dev/null +++ b/custom_components/gpslogger/translations/de.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Nicht mit der Home Assistant Cloud verbunden.", + "single_instance_allowed": "Bereits konfiguriert. Nur eine einzige Konfiguration m\u00f6glich.", + "webhook_not_internet_accessible": "Deine Home Assistant-Instanz muss \u00fcber das Internet erreichbar sein, um Webhook-Nachrichten empfangen zu k\u00f6nnen." + }, + "create_entry": { + "default": "Um Ereignisse an Home Assistant zu senden, muss das Webhook Feature in GPSLogger konfiguriert werden.\n\nF\u00fcge die folgenden Informationen ein: \n\n- URL: `{webhook_url}` \n- Methode: POST \n \nWeitere Informationen finden sich in der [Dokumentation]({docs_url})." + }, + "step": { + "user": { + "description": "M\u00f6chtest du den GPSLogger Webhook wirklich einrichten?", + "title": "GPSLogger Webhook einrichten" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/el.json b/custom_components/gpslogger/translations/el.json new file mode 100644 index 0000000..181cf4b --- /dev/null +++ b/custom_components/gpslogger/translations/el.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf \u03bc\u03b5 \u03c4\u03bf Home Assistant Cloud.", + "single_instance_allowed": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03c4\u03b7\u03ba\u03b5 \u03ae\u03b4\u03b7. \u039c\u03cc\u03bd\u03bf \u03bc\u03af\u03b1 \u03c0\u03b1\u03c1\u03b1\u03bc\u03b5\u03c4\u03c1\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae.", + "webhook_not_internet_accessible": "\u0397 \u03c0\u03b1\u03c1\u03bf\u03c5\u03c3\u03af\u03b1 \u03c4\u03bf\u03c5 Home Assistant \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03c1\u03bf\u03c3\u03b2\u03ac\u03c3\u03b9\u03bc\u03b7 \u03b1\u03c0\u03cc \u03c4\u03bf \u03b4\u03b9\u03b1\u03b4\u03af\u03ba\u03c4\u03c5\u03bf \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03bb\u03b1\u03bc\u03b2\u03ac\u03bd\u03b5\u03b9 \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03b1 webhook." + }, + "create_entry": { + "default": "\u0393\u03b9\u03b1 \u03bd\u03b1 \u03c3\u03c4\u03b5\u03af\u03bb\u03b5\u03c4\u03b5 \u03c3\u03c5\u03bc\u03b2\u03ac\u03bd\u03c4\u03b1 \u03c3\u03c4\u03bf Home Assistant, \u03b8\u03b1 \u03c7\u03c1\u03b5\u03b9\u03b1\u03c3\u03c4\u03b5\u03af \u03bd\u03b1 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 webhook \u03c3\u03c4\u03bf GPSLogger. \n\n \u03a3\u03c5\u03bc\u03c0\u03bb\u03b7\u03c1\u03ce\u03c3\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2: \n\n - URL: ` {webhook_url} `\n - \u039c\u03ad\u03b8\u03bf\u03b4\u03bf\u03c2: POST \n\n \u0394\u03b5\u03af\u03c4\u03b5 [\u03c4\u03b7\u03bd \u03c4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7]( {docs_url} ) \u03b3\u03b9\u03b1 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2." + }, + "step": { + "user": { + "description": "\u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf GPSLogger Webhook;", + "title": "\u03a1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b7 \u03c4\u03bf\u03c5 GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/en.json b/custom_components/gpslogger/translations/en.json new file mode 100644 index 0000000..b800c84 --- /dev/null +++ b/custom_components/gpslogger/translations/en.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Not connected to Home Assistant Cloud.", + "single_instance_allowed": "Already configured. Only a single configuration possible.", + "webhook_not_internet_accessible": "Your Home Assistant instance needs to be accessible from the internet to receive webhook messages." + }, + "create_entry": { + "default": "To send events to Home Assistant, you will need to set up the webhook feature in GPSLogger.\n\nFill in the following info:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details." + }, + "step": { + "user": { + "description": "Are you sure you want to set up the GPSLogger Webhook?", + "title": "Set up the GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/es-419.json b/custom_components/gpslogger/translations/es-419.json new file mode 100644 index 0000000..5fd7759 --- /dev/null +++ b/custom_components/gpslogger/translations/es-419.json @@ -0,0 +1,13 @@ +{ + "config": { + "create_entry": { + "default": "Para enviar eventos a Home Assistant, deber\u00e1 configurar la funci\u00f3n de webhook en GPSLogger. \n\n Complete la siguiente informaci\u00f3n: \n\n - URL: ` {webhook_url} ` \n - M\u00e9todo: POST \n\n Vea [la documentaci\u00f3n] ( {docs_url} ) para m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1 seguro de que desea configurar el Webhook de GPSLogger?", + "title": "Configurar el Webhook de GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/es.json b/custom_components/gpslogger/translations/es.json new file mode 100644 index 0000000..72b5d96 --- /dev/null +++ b/custom_components/gpslogger/translations/es.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "No conectado a Home Assistant Cloud.", + "single_instance_allowed": "Ya est\u00e1 configurado. Solo es posible una \u00fanica configuraci\u00f3n.", + "webhook_not_internet_accessible": "Tu instancia de Home Assistant debe estar accesible desde Internet para recibir mensajes webhook." + }, + "create_entry": { + "default": "Para enviar eventos a Home Assistant, necesitar\u00e1s configurar la funci\u00f3n de webhook en GPSLogger.\n\nCompleta la siguiente informaci\u00f3n:\n\n- URL: `{webhook_url}`\n- M\u00e9todo: POST\n\nConsulta [la documentaci\u00f3n]({docs_url}) para obtener m\u00e1s detalles." + }, + "step": { + "user": { + "description": "\u00bfEst\u00e1s seguro de que quieres configurar el webhook de GPSLogger?", + "title": "Configurar el webhook de GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/et.json b/custom_components/gpslogger/translations/et.json new file mode 100644 index 0000000..641b4ba --- /dev/null +++ b/custom_components/gpslogger/translations/et.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Pilve\u00fchendus puudub", + "single_instance_allowed": "Juba seadistatud. V\u00f5imalik on ainult \u00fcks seadistamine.", + "webhook_not_internet_accessible": "Veebikonksu s\u00f5numite vastuv\u00f5tmiseks peab Home Assistant olema Interneti kaudu juurdep\u00e4\u00e4setav." + }, + "create_entry": { + "default": "S\u00fcndmuste saatmiseks Home Assistantile pead seadistamaGPSLogger'i veebihaagi. \n\n Sisesta j\u00e4rgmine teave: \n\n - URL: \" {webhook_url} \" \n - Meetod: POST \n \n Lisateavet leiad [documentation] ( {docs_url} )." + }, + "step": { + "user": { + "description": "Kas soovid seadistada GPSLogger Webhooki?", + "title": "Seadista GPSLoggeri veebihaak" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/fi.json b/custom_components/gpslogger/translations/fi.json new file mode 100644 index 0000000..9955dda --- /dev/null +++ b/custom_components/gpslogger/translations/fi.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Ei yhdistetty Home Assistant Cloudiin", + "single_instance_allowed": "Jo m\u00e4\u00e4ritetty. Vain yksi konfiguraatio mahdollinen.", + "webhook_not_internet_accessible": "Home Assistant -esiintym\u00e4n on oltava k\u00e4ytett\u00e4viss\u00e4 Internetist\u00e4, jotta se voi vastaanottaa webhook-viestej\u00e4." + }, + "create_entry": { + "default": "L\u00e4hett\u00e4\u00e4ksesi tapahtumia Home Assistantiin, sinun on m\u00e4\u00e4ritett\u00e4v\u00e4 GPSLoggerin webhook-ominaisuus.\n\nT\u00e4yt\u00e4 seuraavat tiedot:\n\n- URL: `{webhook_url}`\n- Menetelm\u00e4: POST\n\nKatso lis\u00e4tietoja [dokumentaatiosta]({docs_url})." + }, + "step": { + "user": { + "description": "Haluatko varmasti m\u00e4\u00e4ritt\u00e4\u00e4 GPSLogger Webhookin?", + "title": "M\u00e4\u00e4rit\u00e4 GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/fr.json b/custom_components/gpslogger/translations/fr.json new file mode 100644 index 0000000..a5d1ca1 --- /dev/null +++ b/custom_components/gpslogger/translations/fr.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Non connect\u00e9 \u00e0 Home Assistant Cloud.", + "single_instance_allowed": "D\u00e9j\u00e0 configur\u00e9. Une seule configuration possible.", + "webhook_not_internet_accessible": "Votre installation de Home Assistant doit \u00eatre accessible depuis internet pour recevoir des messages webhook." + }, + "create_entry": { + "default": "Pour envoyer des \u00e9v\u00e9nements \u00e0 Home Assistant, vous devez configurer la fonction Webhook dans GPSLogger. \n\nRemplissez les informations suivantes\u00a0:\n\n- URL\u00a0: `{webhook_url}`\n- M\u00e9thode\u00a0: POST \n\nVoir [la documentation]({docs_url}) pour plus de d\u00e9tails." + }, + "step": { + "user": { + "description": "Voulez-vous vraiment configurer le webhook GPSLogger\u00a0?", + "title": "Configurer le Webhook GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/he.json b/custom_components/gpslogger/translations/he.json new file mode 100644 index 0000000..55d9377 --- /dev/null +++ b/custom_components/gpslogger/translations/he.json @@ -0,0 +1,9 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "\u05dc\u05d0 \u05de\u05d7\u05d5\u05d1\u05e8 \u05dc\u05e2\u05e0\u05df Home Assistant.", + "single_instance_allowed": "\u05ea\u05e6\u05d5\u05e8\u05ea\u05d5 \u05db\u05d1\u05e8 \u05e0\u05e7\u05d1\u05e2\u05d4. \u05e8\u05e7 \u05ea\u05e6\u05d5\u05e8\u05d4 \u05d0\u05d7\u05ea \u05d0\u05e4\u05e9\u05e8\u05d9\u05ea.", + "webhook_not_internet_accessible": "\u05de\u05d5\u05e4\u05e2 \u05d4-Home Assistant \u05e9\u05dc\u05da \u05e6\u05e8\u05d9\u05da \u05dc\u05d4\u05d9\u05d5\u05ea \u05e0\u05d2\u05d9\u05e9 \u05de\u05d4\u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8 \u05db\u05d3\u05d9 \u05dc\u05e7\u05d1\u05dc \u05d4\u05d5\u05d3\u05e2\u05d5\u05ea webhook." + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/hu.json b/custom_components/gpslogger/translations/hu.json new file mode 100644 index 0000000..886dcdc --- /dev/null +++ b/custom_components/gpslogger/translations/hu.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Nincs csatlakoztatva a Home Assistant Cloudhoz.", + "single_instance_allowed": "M\u00e1r konfigur\u00e1lva van. Csak egy konfigur\u00e1ci\u00f3 lehets\u00e9ges.", + "webhook_not_internet_accessible": "A Home Assistant p\u00e9ld\u00e1ny\u00e1nak el\u00e9rhet\u0151nek kell lennie az internet fel\u0151l a webhook \u00fczenetek fogad\u00e1s\u00e1hoz." + }, + "create_entry": { + "default": "Ha esem\u00e9nyeket szeretne k\u00fcldeni Home Assistantba, be kell \u00e1ll\u00edtania a GPSLogger webhook funkci\u00f3j\u00e1t. \n\n T\u00f6ltse ki a k\u00f6vetkez\u0151 adatokat: \n\n - URL: `{webhook_url}`\n - Met\u00f3dus: POST\n\nB\u0151vebb inform\u00e1ci\u00f3 [a dokument\u00e1ci\u00f3ban]({docs_url}) olvashat\u00f3." + }, + "step": { + "user": { + "description": "Biztos benne, hogy be szeretn\u00e9 \u00e1ll\u00edtani a GPSLogger Webhookot?", + "title": "GPSLogger Webhook be\u00e1ll\u00edt\u00e1sa" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/id.json b/custom_components/gpslogger/translations/id.json new file mode 100644 index 0000000..b4e012b --- /dev/null +++ b/custom_components/gpslogger/translations/id.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Tidak terhubung ke Home Assistant Cloud.", + "single_instance_allowed": "Sudah dikonfigurasi. Hanya satu konfigurasi yang diizinkan.", + "webhook_not_internet_accessible": "Instans Home Assistant Anda harus dapat diakses dari internet untuk menerima pesan webhook." + }, + "create_entry": { + "default": "Untuk mengirim event ke Home Assistant, Anda harus menyiapkan fitur webhook di GPSLogger.\n\nIsi info berikut:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nBaca [dokumentasi]({docs_url}) tentang detail lebih lanjut." + }, + "step": { + "user": { + "description": "Yakin ingin menyiapkan GPSLogger Webhook?", + "title": "Siapkan GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/it.json b/custom_components/gpslogger/translations/it.json new file mode 100644 index 0000000..babd16b --- /dev/null +++ b/custom_components/gpslogger/translations/it.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Non connesso a Home Assistant Cloud.", + "single_instance_allowed": "Gi\u00e0 configurato. \u00c8 possibile una sola configurazione.", + "webhook_not_internet_accessible": "L'istanza di Home Assistant deve essere accessibile da Internet per ricevere messaggi webhook." + }, + "create_entry": { + "default": "Per inviare eventi a Home Assistant, dovrai configurare la funzione webhook in GPSLogger. \n\nInserisci le seguenti informazioni: \n\n - URL: `{webhook_url}`\n - Metodo: POST \n\n Consulta [la documentazione]({docs_url}) per ulteriori dettagli." + }, + "step": { + "user": { + "description": "Sei sicuro di voler configurare il webhook di GPSLogger?", + "title": "Configura il webhook di GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/ja.json b/custom_components/gpslogger/translations/ja.json new file mode 100644 index 0000000..6b05591 --- /dev/null +++ b/custom_components/gpslogger/translations/ja.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Home Assistant Cloud\u306b\u63a5\u7d9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002", + "single_instance_allowed": "\u3059\u3067\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u8a2d\u5b9a\u3067\u304d\u308b\u306e\u306f1\u3064\u3060\u3051\u3067\u3059\u3002", + "webhook_not_internet_accessible": "Webhook\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u53d7\u4fe1\u3059\u308b\u306b\u306f\u3001Home Assistant\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u3001\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002" + }, + "create_entry": { + "default": "Home Assistant\u306b\u30a4\u30d9\u30f3\u30c8\u3092\u9001\u4fe1\u3059\u308b\u306b\u306f\u3001GPSLogger\u3067webhook\u6a5f\u80fd\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n\n\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044:\n\n- URL: `{webhook_url}`\n- Method(\u65b9\u5f0f): POST\n\n\u8a73\u7d30\u306f[\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8]({docs_url}) \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002" + }, + "step": { + "user": { + "description": "GPSLogger Webhook\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f", + "title": "GPSLogger Webhook\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/ka.json b/custom_components/gpslogger/translations/ka.json new file mode 100644 index 0000000..75c4f0a --- /dev/null +++ b/custom_components/gpslogger/translations/ka.json @@ -0,0 +1,8 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u10e3\u10d9\u10d5\u10d4 \u10d3\u10d0\u10d9\u10dd\u10dc\u10e4\u10d8\u10d2\u10e3\u10e0\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8\u10d0. \u10e8\u10d4\u10e1\u10d0\u10eb\u10da\u10d4\u10d1\u10d4\u10da\u10d8\u10d0 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10d4\u10e0\u10d7\u10d8 \u10d9\u10dd\u10dc\u10e4\u10d8\u10d2\u10e3\u10e0\u10d0\u10ea\u10d8\u10d0.", + "webhook_not_internet_accessible": "\u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 Home Assistant \u10d4\u10d9\u10d6\u10d4\u10db\u10de\u10da\u10d0\u10e0\u10d8 \u10e1\u10d0\u10ed\u10d8\u10e0\u10dd\u10e0\u10d4\u10d1\u10e1 \u10d8\u10dc\u10e2\u10d4\u10e0\u10dc\u10d4\u10e2\u10d7\u10d0\u10dc \u10ec\u10d5\u10d3\u10dd\u10db\u10d0\u10e1 webhook \u10e8\u10d4\u10e2\u10e7\u10dd\u10d1\u10d8\u10dc\u10d4\u10d1\u10d4\u10d1\u10d8\u10e1 \u10db\u10d8\u10e1\u10d0\u10e6\u10d4\u10d1\u10d0\u10d3." + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/ko.json b/custom_components/gpslogger/translations/ko.json new file mode 100644 index 0000000..d2b5eeb --- /dev/null +++ b/custom_components/gpslogger/translations/ko.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Home Assistant \ud074\ub77c\uc6b0\ub4dc\uc5d0 \uc5f0\uacb0\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", + "single_instance_allowed": "\uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\ub098\uc758 \uc778\uc2a4\ud134\uc2a4\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "webhook_not_internet_accessible": "\uc6f9 \ud6c5 \uba54\uc2dc\uc9c0\ub97c \ubc1b\uc73c\ub824\uba74 \uc778\ud130\ub137\uc5d0\uc11c Home Assistant \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4." + }, + "create_entry": { + "default": "Home Assistant\ub85c \uc774\ubca4\ud2b8\ub97c \ubcf4\ub0b4\ub824\uba74 GPSLogger\uc5d0\uc11c \uc6f9\ud6c5 \uae30\ub2a5\uc744 \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.\n\n\ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 [\ubb38\uc11c]({docs_url})\ub97c \ucc38\uc870\ud558\uc138\uc694." + }, + "step": { + "user": { + "description": "GPSLogger \uc6f9 \ud6c5\uc744 \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "GPSLogger \uc6f9 \ud6c5 \uc124\uc815\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/lb.json b/custom_components/gpslogger/translations/lb.json new file mode 100644 index 0000000..25f073e --- /dev/null +++ b/custom_components/gpslogger/translations/lb.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Scho konfigur\u00e9iert. N\u00ebmmen eng eenzeg Konfiguratioun ass m\u00e9iglech.", + "webhook_not_internet_accessible": "Deng Home Assistant Instanz muss iwwert Internet accessibel si fir Webhook Noriichten z'empf\u00e4nken." + }, + "create_entry": { + "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, muss den Webhook Feature am GPSLogger ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nLiest [Dokumentatioun]({docs_url}) fir w\u00e9ider D\u00e9tailer." + }, + "step": { + "user": { + "description": "S\u00e9cher fir GPSLogger Webhook anzeriichten?", + "title": "GPSLogger Webhook ariichten" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/lt.json b/custom_components/gpslogger/translations/lt.json new file mode 100644 index 0000000..8a5b3b5 --- /dev/null +++ b/custom_components/gpslogger/translations/lt.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Neprisijungta prie \u201eHome Assistant Cloud\u201c.", + "single_instance_allowed": "Jau sukonfig\u016bruota. Galima tik viena konfig\u016bracija.", + "webhook_not_internet_accessible": "Norint gauti \u201eWebhook\u201c prane\u0161imus, j\u016bs\u0173 nam\u0173 asistento egzempliorius turi b\u016bti pasiekiamas i\u0161 interneto." + }, + "create_entry": { + "default": "Nor\u0117dami si\u0173sti \u012fvykius \u012f \u201eHome Assistant\u201c, tur\u0117site nustatyti \u201eWebhook\u201c funkcij\u0105 \u201eGPSLogger\u201c. \n\n U\u017epildykite \u0161i\u0105 informacij\u0105: \n\n \u2013 URL: ` {webhook_url} `\n - Metodas: POST \n\n Nor\u0117dami gauti daugiau informacijos, \u017er. [dokumentacij\u0105]( {docs_url} )." + }, + "step": { + "user": { + "description": "Ar tikrai norite nustatyti GPSLogger Webhook?", + "title": "Nustatykite GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/nb.json b/custom_components/gpslogger/translations/nb.json new file mode 100644 index 0000000..10a17e6 --- /dev/null +++ b/custom_components/gpslogger/translations/nb.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Ikke koblet til Home Assistant Cloud.", + "single_instance_allowed": "Allerede konfigurert. Bare \u00e9n enkelt konfigurasjon er mulig.", + "webhook_not_internet_accessible": "Home Assistant forekomsten din m\u00e5 v\u00e6re tilgjengelig fra internett for \u00e5 kunne motta webhook meldinger" + }, + "create_entry": { + "default": "For \u00e5 sende hendelser til Home Assistant, m\u00e5 du sette opp webhook-funksjonen i GPSLogger. \n\n Fyll inn f\u00f8lgende informasjon: \n\n - URL: ` {webhook_url} `\n - Metode: POST \n\n Se [dokumentasjonen]( {docs_url} ) for ytterligere detaljer." + }, + "step": { + "user": { + "description": "Er du sikker p\u00e5 at du vil sette opp GPSLogger Webhook?", + "title": "Sett opp GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/nl.json b/custom_components/gpslogger/translations/nl.json new file mode 100644 index 0000000..f2b5d31 --- /dev/null +++ b/custom_components/gpslogger/translations/nl.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Niet verbonden met Home Assistant Cloud.", + "single_instance_allowed": "Al geconfigureerd. Slechts \u00e9\u00e9n configuratie mogelijk.", + "webhook_not_internet_accessible": "Je Home Assistant-instantie moet toegankelijk zijn vanaf internet om webhook-berichten te ontvangen." + }, + "create_entry": { + "default": "Om evenementen naar Home Assistant te verzenden, moet u de webhook-functie instellen in GPSLogger. \n\n Vul de volgende info in: \n\n - URL: ` {webhook_url} ` \n - Methode: POST \n\n Zie [de documentatie] ( {docs_url} ) voor meer informatie." + }, + "step": { + "user": { + "description": "Weet je zeker dat je de GPSLogger Webhook wilt instellen?", + "title": "Configureer de GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/pl.json b/custom_components/gpslogger/translations/pl.json new file mode 100644 index 0000000..beb5447 --- /dev/null +++ b/custom_components/gpslogger/translations/pl.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Brak po\u0142\u0105czenia z chmur\u0105 Home Assistant.", + "single_instance_allowed": "Ju\u017c skonfigurowano. Mo\u017cliwa jest tylko jedna konfiguracja.", + "webhook_not_internet_accessible": "Tw\u00f3j Home Assistant musi by\u0107 dost\u0119pny z Internetu, aby odbiera\u0107 komunikaty webhook" + }, + "create_entry": { + "default": "Aby wysy\u0142a\u0107 lokalizacje do Home Assistanta, musisz skonfigurowa\u0107 webhook w aplikacji GPSLogger. \n\n Wprowad\u017a nast\u0119puj\u0105ce dane:\n\n - URL: `{webhook_url}` \n - Metoda: POST \n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." + }, + "step": { + "user": { + "description": "Czy chcesz rozpocz\u0105\u0107 konfiguracj\u0119?", + "title": "Konfiguracja GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/pt-BR.json b/custom_components/gpslogger/translations/pt-BR.json new file mode 100644 index 0000000..2c21d69 --- /dev/null +++ b/custom_components/gpslogger/translations/pt-BR.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "N\u00e3o conectado ao Home Assistant Cloud.", + "single_instance_allowed": "J\u00e1 configurado. Apenas uma configura\u00e7\u00e3o \u00e9 poss\u00edvel.", + "webhook_not_internet_accessible": "Sua inst\u00e2ncia do Home Assistant precisa estar acess\u00edvel pela Internet para receber mensagens de webhook." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, voc\u00ea precisar\u00e1 configurar o recurso webhook no GPSLogger. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}` \n - M\u00e9todo: POST \n\n Veja [a documenta\u00e7\u00e3o] ({docs_url}) para mais detalhes." + }, + "step": { + "user": { + "description": "Tem a certeza que deseja configurar o GPSLogger Webhook?", + "title": "Configurar o GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/pt.json b/custom_components/gpslogger/translations/pt.json new file mode 100644 index 0000000..c688068 --- /dev/null +++ b/custom_components/gpslogger/translations/pt.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "N\u00e3o ligado ao Home Assistant Cloud.", + "single_instance_allowed": "J\u00e1 configurado. Apenas uma \u00fanica configura\u00e7\u00e3o \u00e9 poss\u00edvel.", + "webhook_not_internet_accessible": "O seu Home Assistant necessita estar acess\u00edvel a partir da Internet para receber mensagens do tipo webhook." + }, + "create_entry": { + "default": "Para enviar eventos para o Home Assistant, \u00e9 necess\u00e1rio configurar um webhook no GPslogger. \n\n Preencha as seguintes informa\u00e7\u00f5es: \n\n - URL: `{webhook_url}`\n - M\u00e9todo: POST \n\n Veja [the documentation]({docs_url}) para obter mais detalhes." + }, + "step": { + "user": { + "description": "Tem certeza de que deseja configurar o GPSLogger Webhook?", + "title": "Configurar o Geofency Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/ro.json b/custom_components/gpslogger/translations/ro.json new file mode 100644 index 0000000..c3703d5 --- /dev/null +++ b/custom_components/gpslogger/translations/ro.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Neconectat la Home Assistant Cloud.", + "single_instance_allowed": "Deja configurat. Doar o singur\u0103 configurare este posibil\u0103.", + "webhook_not_internet_accessible": "Instan\u021ba ta Home Assistant trebuie sa fie accesibil\u0103 dinspre Internet pentru a primi mesaje webhook." + }, + "create_entry": { + "default": "Pentru a trimite evenimente c\u0103tre Home Assistant, va trebui s\u0103 configurezi func\u021bionalitatea webhook \u00een GPSLogger.\n\nCompleteaz\u0103 urm\u0103toarele informa\u021bii:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nConsult\u0103 [documenta\u021bia]({docs_url}) pentru detalii adi\u021bionale." + }, + "step": { + "user": { + "description": "Sigur dore\u0219ti s\u0103 configurezi un webhook GPSLogger?", + "title": "Configureaz\u0103 webhook GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/ru.json b/custom_components/gpslogger/translations/ru.json new file mode 100644 index 0000000..a7c9fc0 --- /dev/null +++ b/custom_components/gpslogger/translations/ru.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "\u041d\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a Home Assistant Cloud.", + "single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e.", + "webhook_not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f Webhook-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439." + }, + "create_entry": { + "default": "\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 Home Assistant \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Webhook \u0434\u043b\u044f GPSLogger.\n\n\u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439]({docs_url}) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." + }, + "step": { + "user": { + "description": "\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c GPSLogger?", + "title": "GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/sk.json b/custom_components/gpslogger/translations/sk.json new file mode 100644 index 0000000..f05e635 --- /dev/null +++ b/custom_components/gpslogger/translations/sk.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Nie je pripojen\u00e9 k Home Assistant Cloud.", + "single_instance_allowed": "U\u017e je nakonfigurovan\u00fd. Mo\u017en\u00e1 je len jedna konfigur\u00e1cia.", + "webhook_not_internet_accessible": "Va\u0161a in\u0161tancia Home Assistant mus\u00ed by\u0165 pr\u00edstupn\u00e1 z internetu, aby ste mohli prij\u00edma\u0165 spr\u00e1vy webhooku." + }, + "create_entry": { + "default": "Ak chcete odosiela\u0165 udalosti Home Assistant, budete musie\u0165 nastavi\u0165 funkciu webhooku v GPSLogger. \n\nVypl\u0148te nasleduj\u00face inform\u00e1cie: \n\n - URL: `{webhook_url}`\n - Met\u00f3da: POST \n\n\u010eal\u0161ie podrobnosti n\u00e1jdete v [dokument\u00e1cii]({docs_url})." + }, + "step": { + "user": { + "description": "Naozaj chcete nastavi\u0165 GPSLogger Webhook?", + "title": "Nastavte webhook GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/sl.json b/custom_components/gpslogger/translations/sl.json new file mode 100644 index 0000000..1df7b21 --- /dev/null +++ b/custom_components/gpslogger/translations/sl.json @@ -0,0 +1,16 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Ni povezan z Home Assistant Cloud." + }, + "create_entry": { + "default": "\u010ce \u017eelite dogodke poslati v Home Assistant, morate v GPSLoggerju nastaviti funkcijo webhook. \n\n Izpolnite naslednje podatke: \n\n - URL: ` {webhook_url} ` \n - Metoda: POST \n\n Za ve\u010d podrobnosti si oglejte [dokumentacijo] ( {docs_url} )." + }, + "step": { + "user": { + "description": "Ali ste prepri\u010dani, da \u017eelite nastaviti GPSloggerWebhook?", + "title": "Nastavite GPSlogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/sv.json b/custom_components/gpslogger/translations/sv.json new file mode 100644 index 0000000..20737c8 --- /dev/null +++ b/custom_components/gpslogger/translations/sv.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Ej ansluten till Home Assistant Cloud.", + "single_instance_allowed": "Redan konfigurerad. Endast en konfiguration m\u00f6jlig.", + "webhook_not_internet_accessible": "Din Home Assistant-instans m\u00e5ste vara tillg\u00e4nglig fr\u00e5n internet f\u00f6r att ta emot webhook-meddelanden." + }, + "create_entry": { + "default": "F\u00f6r att skicka h\u00e4ndelser till Home Assistant m\u00e5ste du konfigurera webhook funktionen i GPSLogger.\n\n Fyll i f\u00f6ljande information:\n \n- URL: `{webhook_url}`\n- Method: POST\n\nSe [dokumentation]({docs_url}) f\u00f6r mer information om hur du konfigurerar detta." + }, + "step": { + "user": { + "description": "\u00c4r du s\u00e4ker p\u00e5 att du vill konfigurera GPSLogger Webhook?", + "title": "Konfigurera GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/tr.json b/custom_components/gpslogger/translations/tr.json new file mode 100644 index 0000000..9a85983 --- /dev/null +++ b/custom_components/gpslogger/translations/tr.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "Home Assistant Cloud'a ba\u011fl\u0131 de\u011fil.", + "single_instance_allowed": "Zaten yap\u0131land\u0131r\u0131lm\u0131\u015f. Yaln\u0131zca tek bir konfig\u00fcrasyon m\u00fcmk\u00fcnd\u00fcr.", + "webhook_not_internet_accessible": "Webhook mesajlar\u0131n\u0131 alabilmek i\u00e7in Home Assistant \u00f6rne\u011finize internetten eri\u015filebilmelidir." + }, + "create_entry": { + "default": "Etkinlikleri Home Assistant'a g\u00f6ndermek i\u00e7in GPSLogger'da webhook \u00f6zelli\u011fini kurman\u0131z gerekir. \n\n A\u015fa\u011f\u0131daki bilgileri doldurun: \n\n - URL: ` {webhook_url} `\n - Y\u00f6ntem: POST \n\n Daha fazla ayr\u0131nt\u0131 i\u00e7in [belgelere]( {docs_url} ) bak\u0131n." + }, + "step": { + "user": { + "description": "GPSLogger Webhook'u kurmak istedi\u011finizden emin misiniz?", + "title": "GPSLogger Webhook'u kurun" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/uk.json b/custom_components/gpslogger/translations/uk.json new file mode 100644 index 0000000..56b66e0 --- /dev/null +++ b/custom_components/gpslogger/translations/uk.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "\u041d\u0435 \u043f\u0456\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0434\u043e Home Assistant Cloud.", + "single_instance_allowed": "\u0412\u0436\u0435 \u043d\u0430\u043b\u0430\u0448\u0442\u043e\u0432\u0430\u043d\u043e. \u041c\u043e\u0436\u043b\u0438\u0432\u0430 \u043b\u0438\u0448\u0435 \u043e\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044f.", + "webhook_not_internet_accessible": "\u0412\u0430\u0448 Home Assistant \u043f\u043e\u0432\u0438\u043d\u0435\u043d \u0431\u0443\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u0437 \u0406\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f Webhook-\u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u044c." + }, + "create_entry": { + "default": "\u0429\u043e\u0431 \u043d\u0430\u0434\u0441\u0438\u043b\u0430\u0442\u0438 \u043f\u043e\u0434\u0456\u0457 \u0434\u043e Home Assistant, \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0431\u0443\u0434\u0435 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0456\u044e webhook \u0443 GPSLogger. \n\n\u0417\u0430\u043f\u043e\u0432\u043d\u0456\u0442\u044c \u0442\u0430\u043a\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e: \n\n- URL: `{webhook_url}`\n- \u041c\u0435\u0442\u043e\u0434: POST \n\n\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u043d\u044c\u0442\u0435 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u044e]({docs_url}), \u0449\u043e\u0431 \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456 \u0432\u0456\u0434\u043e\u043c\u043e\u0441\u0442\u0456." + }, + "step": { + "user": { + "description": "\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0445\u043e\u0447\u0435\u0442\u0435 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 GPSLogger?", + "title": "GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/vi.json b/custom_components/gpslogger/translations/vi.json new file mode 100644 index 0000000..3d08608 --- /dev/null +++ b/custom_components/gpslogger/translations/vi.json @@ -0,0 +1,13 @@ +{ + "config": { + "create_entry": { + "default": "\u0110\u1ec3 g\u1eedi s\u1ef1 ki\u1ec7n \u0111\u1ebfn Home Assistant, b\u1ea1n s\u1ebd c\u1ea7n thi\u1ebft l\u1eadp t\u00ednh n\u0103ng webhook trong GPSLogger.\n\n\u0110i\u1ec1n c\u00e1c th\u00f4ng tin sau:\n\n- URL: `{webhook_url}`\n- Ph\u01b0\u01a1ng th\u1ee9c: POST\n\nXem [t\u00e0i li\u1ec7u]({docs_url}) \u0111\u1ec3 bi\u1ebft th\u00eam chi ti\u1ebft." + }, + "step": { + "user": { + "description": "B\u1ea1n c\u00f3 ch\u1eafc ch\u1eafn mu\u1ed1n thi\u1ebft l\u1eadp Webhook GPSLogger kh\u00f4ng?", + "title": "Thi\u1ebft l\u1eadp Webhook GPSLogger" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/zh-Hans.json b/custom_components/gpslogger/translations/zh-Hans.json new file mode 100644 index 0000000..bc2108e --- /dev/null +++ b/custom_components/gpslogger/translations/zh-Hans.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "\u672a\u8fde\u63a5\u81f3 Home Assistant Cloud\u3002", + "single_instance_allowed": "\u8be5\u96c6\u6210\u5df2\u7ecf\u914d\u7f6e\u8fc7\u4e86\uff0c\u4e14\u53ea\u80fd\u914d\u7f6e\u4e00\u6b21\u3002\u82e5\u8981\u91cd\u65b0\u914d\u7f6e\uff0c\u8bf7\u5148\u5220\u9664\u65e7\u96c6\u6210\u3002", + "webhook_not_internet_accessible": "\u60a8\u7684 Home Assistant \u5b9e\u4f8b\u9700\u8981\u53ef\u4ece\u4e92\u8054\u7f51\u8bbf\u95ee\u4ee5\u63a5\u6536 Webhook \u6d88\u606f\u3002" + }, + "create_entry": { + "default": "\u8981\u5411 Home Assistant \u53d1\u9001\u4e8b\u4ef6\uff0c\u60a8\u9700\u8981\u914d\u7f6e GPSLogger \u7684 Webhook \u529f\u80fd\u3002\n\n\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8bf7\u53c2\u9605[\u6587\u6863]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002" + }, + "step": { + "user": { + "description": "\u60a8\u786e\u5b9a\u8981\u8bbe\u7f6e GPSLogger Webhook \u5417\uff1f", + "title": "\u8bbe\u7f6e GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/custom_components/gpslogger/translations/zh-Hant.json b/custom_components/gpslogger/translations/zh-Hant.json new file mode 100644 index 0000000..7d77525 --- /dev/null +++ b/custom_components/gpslogger/translations/zh-Hant.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "cloud_not_connected": "\u672a\u9023\u7dda\u81f3 Home Assistant \u96f2\u670d\u52d9\u3002", + "single_instance_allowed": "\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210\u3001\u50c5\u80fd\u8a2d\u5b9a\u4e00\u7d44\u88dd\u7f6e\u3002", + "webhook_not_internet_accessible": "Home Assistant \u5be6\u9ad4\u5fc5\u9808\u8981\u80fd\u5f9e\u7db2\u969b\u7db2\u8def\u5b58\u53d6\u65b9\u80fd\u63a5\u6536 Webhook \u8a0a\u606f\u3002" + }, + "create_entry": { + "default": "\u6b32\u50b3\u9001\u4e8b\u4ef6\u81f3 Home Assistant\uff0c\u5c07\u9700\u65bc GPSLogger \u5167\u8a2d\u5b9a webhook \u529f\u80fd\u3002\n\n\u8acb\u586b\u5beb\u4e0b\u5217\u8cc7\u8a0a\uff1a\n\n- URL: `{webhook_url}`\n- Method: POST\n\n\u8acb\u53c3\u95b1 [\u6587\u4ef6]({docs_url})\u4ee5\u4e86\u89e3\u66f4\u8a73\u7d30\u8cc7\u6599\u3002" + }, + "step": { + "user": { + "description": "\u662f\u5426\u8981\u8a2d\u5b9a GPSLogger Webhook\uff1f", + "title": "\u8a2d\u5b9a GPSLogger Webhook" + } + } + } +} \ No newline at end of file diff --git a/info.md b/info.md new file mode 100644 index 0000000..983ff57 --- /dev/null +++ b/info.md @@ -0,0 +1,10 @@ +# GPSLogger GPSLogger + +This is a custom version of the Home Assistant built-in [GPSLogger](https://www.home-assistant.io/integrations/gpslogger/) integration. + +It extends the built-in integration in ways that make sense, but are no longer accepted practice. +Specifically, it allows additional attributes, especially `last_seen`, +which is crucial when combining entities from this Device Tracker integration with ones from other integrations, +e.g., via my [Composite Device Tracker](https://github.com/pnbruckner/ha-composite-tracker) integration. +Also, `last_seen` is important when dealing with packets received out of order from the corresponding Android app, +e.g., due to network delays.