[
  {
    "path": ".credo.exs",
    "content": "# This file contains the configuration for Credo and you are probably reading\n# this after creating it with `mix credo.gen.config`.\n#\n# If you find anything wrong or unclear in this file, please report an\n# issue on GitHub: https://github.com/rrrene/credo/issues\n#\n%{\n  #\n  # You can have as many configs as you like in the `configs:` field.\n  configs: [\n    %{\n      #\n      # Run any config using `mix credo -C <name>`. If no config name is given\n      # \"default\" is used.\n      #\n      name: \"default\",\n      #\n      # These are the files included in the analysis:\n      files: %{\n        #\n        # You can give explicit globs or simply directories.\n        # In the latter case `**/*.{ex,exs}` will be used.\n        #\n        included: [\n          \"lib/\",\n          \"src/\",\n          \"test/\",\n          \"web/\",\n          \"apps/*/lib/\",\n          \"apps/*/src/\",\n          \"apps/*/test/\",\n          \"apps/*/web/\"\n        ],\n        excluded: [~r\"/_build/\", ~r\"/deps/\", ~r\"/node_modules/\"]\n      },\n      #\n      # Load and configure plugins here:\n      #\n      plugins: [],\n      #\n      # If you create your own checks, you must specify the source files for\n      # them here, so they can be loaded by Credo before running the analysis.\n      #\n      requires: [],\n      #\n      # If you want to enforce a style guide and need a more traditional linting\n      # experience, you can change `strict` to `true` below:\n      #\n      strict: false,\n      #\n      # To modify the timeout for parsing files, change this value:\n      #\n      parse_timeout: 5000,\n      #\n      # If you want to use uncolored output by default, you can change `color`\n      # to `false` below:\n      #\n      color: true,\n      #\n      # You can customize the parameters of any check by adding a second element\n      # to the tuple.\n      #\n      # To disable a check put `false` as second element:\n      #\n      #     {Credo.Check.Design.DuplicatedCode, false}\n      #\n      checks: %{\n        enabled: [\n          #\n          ## Consistency Checks\n          #\n          {Credo.Check.Consistency.ExceptionNames, []},\n          {Credo.Check.Consistency.LineEndings, []},\n          {Credo.Check.Consistency.ParameterPatternMatching, []},\n          {Credo.Check.Consistency.SpaceAroundOperators, []},\n          {Credo.Check.Consistency.SpaceInParentheses, []},\n          {Credo.Check.Consistency.TabsOrSpaces, []},\n\n          #\n          ## Design Checks\n          #\n          # You can customize the priority of any check\n          # Priority values are: `low, normal, high, higher`\n          #\n          {Credo.Check.Design.AliasUsage,\n           [priority: :low, if_nested_deeper_than: 2, if_called_more_often_than: 0]},\n          {Credo.Check.Design.TagFIXME, []},\n          # You can also customize the exit_status of each check.\n          # If you don't want TODO comments to cause `mix credo` to fail, just\n          # set this value to 0 (zero).\n          #\n          {Credo.Check.Design.TagTODO, [exit_status: 2]},\n\n          #\n          ## Readability Checks\n          #\n          {Credo.Check.Readability.AliasOrder, []},\n          {Credo.Check.Readability.FunctionNames, []},\n          {Credo.Check.Readability.LargeNumbers, []},\n          {Credo.Check.Readability.MaxLineLength, [priority: :low, max_length: 120]},\n          {Credo.Check.Readability.ModuleAttributeNames, []},\n          {Credo.Check.Readability.ModuleDoc, []},\n          {Credo.Check.Readability.ModuleNames, []},\n          {Credo.Check.Readability.ParenthesesInCondition, []},\n          {Credo.Check.Readability.ParenthesesOnZeroArityDefs, []},\n          {Credo.Check.Readability.PipeIntoAnonymousFunctions, []},\n          {Credo.Check.Readability.PredicateFunctionNames, []},\n          {Credo.Check.Readability.PreferImplicitTry, []},\n          {Credo.Check.Readability.RedundantBlankLines, []},\n          {Credo.Check.Readability.Semicolons, []},\n          {Credo.Check.Readability.SpaceAfterCommas, []},\n          {Credo.Check.Readability.StringSigils, []},\n          {Credo.Check.Readability.TrailingBlankLine, []},\n          {Credo.Check.Readability.TrailingWhiteSpace, []},\n          {Credo.Check.Readability.UnnecessaryAliasExpansion, []},\n          {Credo.Check.Readability.VariableNames, []},\n          {Credo.Check.Readability.WithSingleClause, []},\n\n          #\n          ## Refactoring Opportunities\n          #\n          {Credo.Check.Refactor.Apply, []},\n          {Credo.Check.Refactor.CondStatements, []},\n          {Credo.Check.Refactor.CyclomaticComplexity, []},\n          {Credo.Check.Refactor.FilterCount, []},\n          {Credo.Check.Refactor.FilterFilter, []},\n          {Credo.Check.Refactor.FunctionArity, []},\n          {Credo.Check.Refactor.LongQuoteBlocks, []},\n          {Credo.Check.Refactor.MapJoin, []},\n          {Credo.Check.Refactor.MatchInCondition, []},\n          {Credo.Check.Refactor.NegatedConditionsInUnless, []},\n          {Credo.Check.Refactor.NegatedConditionsWithElse, []},\n          {Credo.Check.Refactor.Nesting, []},\n          {Credo.Check.Refactor.RedundantWithClauseResult, []},\n          {Credo.Check.Refactor.RejectReject, []},\n          {Credo.Check.Refactor.UnlessWithElse, []},\n          {Credo.Check.Refactor.WithClauses, []},\n\n          #\n          ## Warnings\n          #\n          {Credo.Check.Warning.ApplicationConfigInModuleAttribute, []},\n          {Credo.Check.Warning.BoolOperationOnSameValues, []},\n          {Credo.Check.Warning.Dbg, []},\n          {Credo.Check.Warning.ExpensiveEmptyEnumCheck, []},\n          {Credo.Check.Warning.IExPry, []},\n          {Credo.Check.Warning.IoInspect, []},\n          {Credo.Check.Warning.MissedMetadataKeyInLoggerConfig, []},\n          {Credo.Check.Warning.OperationOnSameValues, []},\n          {Credo.Check.Warning.OperationWithConstantResult, []},\n          {Credo.Check.Warning.RaiseInsideRescue, []},\n          {Credo.Check.Warning.SpecWithStruct, []},\n          {Credo.Check.Warning.UnsafeExec, []},\n          {Credo.Check.Warning.UnusedEnumOperation, []},\n          {Credo.Check.Warning.UnusedFileOperation, []},\n          {Credo.Check.Warning.UnusedKeywordOperation, []},\n          {Credo.Check.Warning.UnusedListOperation, []},\n          {Credo.Check.Warning.UnusedPathOperation, []},\n          {Credo.Check.Warning.UnusedRegexOperation, []},\n          {Credo.Check.Warning.UnusedStringOperation, []},\n          {Credo.Check.Warning.UnusedTupleOperation, []},\n          {Credo.Check.Warning.WrongTestFileExtension, []}\n        ],\n        disabled: [\n          #\n          # Checks scheduled for next check update (opt-in for now, just replace `false` with `[]`)\n\n          #\n          # Controversial and experimental checks (opt-in, just move the check to `:enabled`\n          #   and be sure to use `mix credo --strict` to see low priority checks)\n          #\n          {Credo.Check.Consistency.MultiAliasImportRequireUse, []},\n          {Credo.Check.Consistency.UnusedVariableNames, []},\n          {Credo.Check.Design.DuplicatedCode, []},\n          {Credo.Check.Design.SkipTestWithoutComment, []},\n          {Credo.Check.Readability.AliasAs, []},\n          {Credo.Check.Readability.BlockPipe, []},\n          {Credo.Check.Readability.ImplTrue, []},\n          {Credo.Check.Readability.MultiAlias, []},\n          {Credo.Check.Readability.NestedFunctionCalls, []},\n          {Credo.Check.Readability.OneArityFunctionInPipe, []},\n          {Credo.Check.Readability.OnePipePerLine, []},\n          {Credo.Check.Readability.SeparateAliasRequire, []},\n          {Credo.Check.Readability.SingleFunctionToBlockPipe, []},\n          {Credo.Check.Readability.SinglePipe, []},\n          {Credo.Check.Readability.Specs, []},\n          {Credo.Check.Readability.StrictModuleLayout, []},\n          {Credo.Check.Readability.WithCustomTaggedTuple, []},\n          {Credo.Check.Refactor.ABCSize, []},\n          {Credo.Check.Refactor.AppendSingleItem, []},\n          {Credo.Check.Refactor.DoubleBooleanNegation, []},\n          {Credo.Check.Refactor.FilterReject, []},\n          {Credo.Check.Refactor.IoPuts, []},\n          {Credo.Check.Refactor.MapMap, []},\n          {Credo.Check.Refactor.ModuleDependencies, []},\n          {Credo.Check.Refactor.NegatedIsNil, []},\n          {Credo.Check.Refactor.PassAsyncInTestCases, []},\n          {Credo.Check.Refactor.PipeChainStart, []},\n          {Credo.Check.Refactor.RejectFilter, []},\n          {Credo.Check.Refactor.VariableRebinding, []},\n          {Credo.Check.Warning.LazyLogging, []},\n          {Credo.Check.Warning.LeakyEnvironment, []},\n          {Credo.Check.Warning.MapGetUnsafePass, []},\n          {Credo.Check.Warning.MixEnv, []},\n          {Credo.Check.Warning.UnsafeToAtom, []}\n\n          # {Credo.Check.Refactor.MapInto, []},\n\n          #\n          # Custom checks can be created using `mix credo.gen.check`.\n          #\n        ]\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": ".dialyzer_ignore.exs",
    "content": "[]\n"
  },
  {
    "path": ".dockerignore",
    "content": "_build/\ndeps/\n.git/\n.gitignore\nDockerfile\nMakefile\nREADME*\ntest/\npriv/static/assets\n**/node_modules\nimport/\nteslamate.bck\n"
  },
  {
    "path": ".envrc",
    "content": "use flake . --override-input devenv-root \"file+file://\"<(printf %s \"$PWD\")\n"
  },
  {
    "path": ".formatter.exs",
    "content": "[\n  import_deps: [:ecto, :phoenix, :phoenix_live_view, :tesla],\n  inputs: [\"*.{heex,ex,exs}\", \"priv/*/seeds.exs\", \"{config,lib,test}/**/*.{heex,ex,exs}\"],\n  plugins: [Phoenix.LiveView.HTMLFormatter],\n  subdirectories: [\"priv/*/migrations\"]\n]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "name: Bug Report\ndescription: File a bug report\nlabels: []\nassignees: []\nbody:\n  - type: checkboxes\n    attributes:\n      label: Is there an existing issue for this?\n      description: |\n        Thank you for helping us make TeslaMate better, by reporting a bug you have found. This issue may already be reported.\n        Please search to see if an issue already exists for the bug you encountered:\n\n        - [Issues](https://github.com/teslamate-org/teslamate/issues?q=)\n        - [Discussions](https://github.com/teslamate-org/teslamate/discussions)\n\n      options:\n        - label: I have checked the existing issues and discussions, and I can confirm that there are no duplicates.\n          required: true\n\n  - type: markdown\n    attributes:\n      value: |\n        Thanks for taking the time to fill out this bug report! Please provide as much info as possible.\n\n  - type: textarea\n    id: current-behavior\n    attributes:\n      label: What happened?\n      description: A concise description of what you're experiencing.\n    validations:\n      required: true\n\n  - type: textarea\n    id: expected-behavior\n    attributes:\n      label: Expected Behavior\n      description: A concise description of what you expected to happen.\n    validations:\n      required: false\n\n  - type: dropdown\n    id: can_repro\n    attributes:\n      label: Can the issue reliably be reproduced?\n      options:\n        - \"Yes\"\n        - \"No\"\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Steps To Reproduce the issue\n      description: Explain how the maintainers can reproduce the issue.\n      placeholder: |\n        1. Go to '...'\n        2. Click on '....'\n        3. Scroll down to '....'\n        4. See error\n    validations:\n      required: false\n\n  - type: textarea\n    id: logs\n    attributes:\n      label: Relevant log output\n      description: |\n        Please copy and paste any relevant log output of the TeslaMate Docker container or application. This will be automatically formatted into code, so no need for backticks.\n\n        To retrieve the TeslaMate Docker container logs, run `docker compose logs teslamate`.\n      placeholder: |\n        2021-09-22 23:20:54.226 [info] Starting logger for 'Tesla'\n        2021-09-22 23:20:54.251 [info] MQTT connection has been established\n        2021-09-22 23:20:54.334 car_id=1 [info] Start / :asleep\n        2021-09-22 23:20:56.721 [info] GET /\n      render: shell\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Screenshots\n      description: If applicable, add screenshots to help explain the problem.\n      placeholder: Upload screenshot files here by dragging & dropping\n    validations:\n      required: false\n\n  - type: textarea\n    attributes:\n      label: Additional data\n      description: |\n        If applicable, add an export of the data for the given period.\n\n        For example, to export charge data after January 1, 2020:\n\n        ```bash\n        $ docker compose exec database psql teslamate teslamate -c \\\n           \"COPY (select * from charges where date > '2020-01-01') TO STDOUT WITH CSV HEADER\" > charges.csv\n\n        $ docker compose exec database psql teslamate teslamate -c \\\n           \"COPY (select * from charging_processes where start_date > '2020-01-01') TO STDOUT WITH CSV HEADER\" > charging_processes.csv\n        ```\n\n        To export drive data after January 1, 2020:\n\n        ```bash\n        $ docker compose exec database psql teslamate teslamate -c \\\n           \"COPY (select id, car_id, drive_id, date, elevation, speed, power, odometer, ideal_battery_range_km, est_battery_range_km, rated_battery_range_km, battery_level, usable_battery_level, battery_heater_no_power, battery_heater_on, battery_heater, inside_temp, outside_temp, fan_status, driver_temp_setting, passenger_temp_setting, is_climate_on, is_rear_defroster_on, is_front_defroster_on from positions where date > '2020-01-20') TO STDOUT WITH CSV HEADER\" > positions.csv\n\n        $ docker compose exec database psql teslamate teslamate -c \\\n           \"COPY (select * from drives where start_date > '2020-01-01') TO STDOUT WITH CSV HEADER\" > drives.csv\n        ```\n      placeholder: Upload exported data here by dragging & dropping\n    validations:\n      required: false\n\n  - type: dropdown\n    id: installation\n    attributes:\n      label: Type of installation\n      options:\n        - Docker (https://docs.teslamate.org/docs/installation/docker/)\n        - NixOS (https://docs.teslamate.org/docs/installation/nixos)\n        - Manual (no support)\n        - Unraid (no support, if not using docker compose)\n        - Other (no support)\n    validations:\n      required: true\n\n  - type: input\n    id: version\n    attributes:\n      label: Version\n      description: What version of TeslaMate are you running?\n      placeholder: v1.33.0\n    validations:\n      required: true\n\n  - type: input\n    id: postgresql_version\n    attributes:\n      label: PostgreSQL version\n      description: What version of PostgreSQL are you running? (see Database information dashboard -> PostgreSQL Version (upper right on desktop) or database -> image section in your `docker-compose.yml`)\n      placeholder: v17.3\n\n  - type: checkboxes\n    attributes:\n      label: Are you running latest major supported PostgreSQL version?\n      description: |\n        Please ensure you are running the latest major supported PostgreSQL version by comparing your installation with the [installation docs](https://docs.teslamate.org/docs/installation/docker/).\n\n        If not, please first do a backup and follow [Upgrading PostgreSQL to a new major version](https://docs.teslamate.org/docs/maintenance/upgrading_postgres)\n\n      options:\n        - label: I run the latest major supported PostgreSQL version\n    validations:\n      required: true\n\n  - type: dropdown\n    id: reverse_proxy\n    attributes:\n      label: Are you using a reverse Proxy for TeslaMate?\n      options:\n        - \"No\"\n        - \"Yes (specify in next field)\"\n    validations:\n      required: true\n\n  - type: textarea\n    id: reverse_proxy_details\n    attributes:\n      label: Details about your reverse Proxy if applicable\n      description: If you use a reverse Proxy, please provide details about your setup\n    validations:\n      required: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Community Support\n    url: https://github.com/teslamate-org/teslamate/discussions\n    about: Please ask and answer questions here.\n"
  },
  {
    "path": ".github/actions/build/action.yml",
    "content": "name: \"Build\"\ndescription: \"Build images\"\ninputs:\n  is_dockerhub_pushed:\n    description: \"Need docker hub login?\"\n    required: true\n    default: \"\"\n  docker_password:\n    description: \"Docker password\"\n    required: true\n  repository_owner:\n    description: \"Repository owner\"\n    required: true\n    default: \"teslamate-org\"\n  repository:\n    description: \"Repo owner and name (repo_owner/repo_name)\"\n    required: true\n    default: \"teslamate\"\n  github_token:\n    description: \"GitHub Token\"\n    required: true\n  labels:\n    description: \"Labels added on metadata\"\n    required: false\n    default: \"\"\n  version:\n    description: \"Branch deployed\"\n    required: false\n    default: \"\"\nruns:\n  using: \"composite\"\n  steps:\n    - name: normalize version name to a valid string\n      # convert backslashes to dashes, so for example dependabot/x/y/z-1.2.3 works\n      id: normalize_version\n      shell: bash\n      run: |\n        VERSION=\"${{ inputs.version }}\"\n        NORMALIZED_VERSION=\"${VERSION//\\//-}\"\n        echo \"normalized_version=${NORMALIZED_VERSION}\" >> $GITHUB_OUTPUT\n\n    - name: Docker meta\n      id: meta\n      uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6.0.0\n      with:\n        images: ${{ env.REGISTRY_IMAGE }}\n        labels: |\n          {{ inputs.labels }}\n    - name: Set up Docker Buildx\n      uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0\n    - name: Login to Docker Hub\n      if: inputs.is_dockerhub_pushed != ''\n      uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0\n      with:\n        username: teslamate\n        password: ${{ inputs.docker_password }}\n    - name: Login to GitHub Container Registry\n      uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0\n      with:\n        registry: ghcr.io\n        username: ${{ inputs.repository_owner }}\n        password: ${{ inputs.github_token }}\n    - name: Build and push by digest\n      id: build\n      uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0\n      with:\n        context: .\n        platforms: ${{ matrix.platform }}\n        labels: ${{ steps.meta.outputs.labels }}\n        tags: ${{ steps.docker_meta.outputs.tags }}\n        cache-from: |\n          type=registry,ref=ghcr.io/${{ inputs.repository }}:buildcache-${{ matrix.cache_id }}-${{ steps.normalize_version.outputs.normalized_version }}\n          type=registry,ref=ghcr.io/${{ inputs.repository }}:buildcache-${{ matrix.cache_id }}-main\n        cache-to: type=registry,ref=ghcr.io/${{ inputs.repository }}:buildcache-${{ matrix.cache_id }}-${{ steps.normalize_version.outputs.normalized_version }},mode=max\n        outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true\n    - name: Export digest\n      shell: bash\n      run: |\n        mkdir -p /tmp/digests\n        digest=\"${{ steps.build.outputs.digest }}\"\n        touch \"/tmp/digests/${digest#sha256:}\"\n        ls -l /tmp/digests/\n    - name: Upload digest\n      uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0\n      with:\n        name: single-digest-${{ matrix.cache_id }}\n        path: /tmp/digests/*\n        if-no-files-found: error\n        retention-days: 1\n"
  },
  {
    "path": ".github/actions/grafana/action.yml",
    "content": "name: \"Grafana\"\ndescription: \"Grafana images\"\ninputs:\n  tags:\n    description: \"Tags\"\n    required: false\n    default: \"\"\n  labels:\n    description: \"Labels\"\n    required: true\n  image:\n    description: \"Image target\"\n    required: true\n    default: \"teslamate/grafana\"\nruns:\n  using: \"composite\"\n  steps:\n    - name: Docker meta\n      id: docker_meta\n      uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6.0.0\n      with:\n        images: ${{ inputs.image }}\n        tags: ${{ inputs.tags }}\n        labels: ${{ inputs.labels }}\n    - name: Set up QEMU\n      uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0\n    - name: Set up Docker Buildx\n      uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0\n    - name: Build and push\n      uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0\n      with:\n        context: grafana\n        push: true\n        platforms: linux/amd64,linux/arm/v7,linux/arm64\n        tags: ${{ steps.docker_meta.outputs.tags }}\n        cache-from: type=gha\n        cache-to: type=gha,mode=max\n"
  },
  {
    "path": ".github/actions/merge/action.yml",
    "content": "name: \"Merge\"\ndescription: \"Merge images\"\ninputs:\n  tags:\n    description: \"Tags\"\n    required: false\n    default: \"\"\n  image:\n    description: \"Image target\"\n    required: true\n\nruns:\n  using: \"composite\"\n  steps:\n    - name: Merge digests and reupload\n      uses: actions/upload-artifact/merge@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0\n      with:\n        name: digests\n        pattern: single-digest-*\n\n    - name: Download merged digests\n      uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1\n      with:\n        name: digests\n        path: /tmp/digests\n\n    - name: Set up Docker Buildx\n      uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0\n\n    - name: Docker meta\n      id: meta\n      uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6.0.0\n      with:\n        images: ${{ inputs.image }}\n        tags: ${{ inputs.tags }}\n\n    - name: Create manifest list and push\n      working-directory: /tmp/digests\n      shell: bash\n      run: |\n        docker buildx imagetools create $(jq -cr '.tags | map(\"-t \" + .) | join(\" \")' <<< \"$DOCKER_METADATA_OUTPUT_JSON\") \\\n          $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)\n    - name: Inspect image\n      shell: bash\n      run: |\n        docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}\n"
  },
  {
    "path": ".github/actions/setup-elixir-and-cache-deps/action.yml",
    "content": "name: \"Setup Elixir and Cache Dependencies\"\ndescription: \"Setup Elixir, OTP and cache dependencies\"\ninputs:\n  elixir-version:\n    description: \"Elixir version\"\n    required: false\n    default: \"1.19.5\"\n  otp-version:\n    description: \"OTP version\"\n    required: false\n    default: \"26\"\n  cache-name-deps:\n    description: \"Cache name for dependencies\"\n    required: true\n  cache-name-compiled:\n    description: \"Cache name for compiled build\"\n    required: true\n  mix-env:\n    description: \"Mix environment\"\n    required: false\n    default: \"dev\"\n  ELIXIR_ASSERT_TIMEOUT:\n    description: \"Elixir assert timeout\"\n    required: false\n    default: \"1000\"\noutputs:\n  elixir-version:\n    description: \"The Elixir version used in the setup\"\n    value: ${{ steps.beam.outputs.elixir-version }}\n  otp-version:\n    description: \"The OTP version used in the setup\"\n    value: ${{ steps.beam.outputs.otp-version }}\nruns:\n  using: \"composite\"\n  steps:\n    - name: Setup Elixir and OTP\n      id: beam\n      uses: erlef/setup-beam@b9c58b0450cd832ccdb3c17cc156a47065d2114f # v1.18.1\n      with:\n        elixir-version: ${{ inputs.elixir-version }}\n        otp-version: ${{ inputs.otp-version }}\n\n    - name: Cache deps\n      id: cache-deps\n      uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3\n      with:\n        path: deps\n        key: ${{ runner.os }}-mix-${{ inputs.cache-name-deps }}-${{ hashFiles('**/mix.lock') }}\n        restore-keys: |\n          ${{ runner.os }}-mix-${{ inputs.cache-name-deps }}-\n\n    - name: Cache compiled build\n      id: cache-build\n      uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3\n      with:\n        path: |\n          _build\n          priv/cldr/locales\n        key: ${{ runner.os }}-mix-${{ inputs.cache-name-compiled }}-${{ hashFiles('**/mix.lock') }}\n        restore-keys: |\n          ${{ runner.os }}-mix-${{ inputs.cache-name-compiled }}-\n          ${{ runner.os }}-mix-\n\n    - name: Clean to rule out incremental build as a source of flakiness\n      if: github.run_attempt > 3\n      run: |\n        mix deps.clean --all\n        mix clean\n      shell: sh\n\n    - name: Install dependencies\n      run: mix deps.get\n      shell: sh\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: \"mix\"\n    directory: \"/\"\n    schedule:\n      interval: \"monthly\"\n\n  - package-ecosystem: \"npm\"\n    directory: \"/assets\"\n    schedule:\n      interval: \"monthly\"\n    ignore:\n      # ignore the path based dependencies to prevent \"Dependabot couldn't fetch all your path-based dependencies\"\n      - dependency-name: phoenix\n      - dependency-name: phoenix_html\n      - dependency-name: phoenix_live_view\n\n  - package-ecosystem: \"npm\"\n    directory: \"/website\"\n    schedule:\n      interval: \"monthly\"\n\n  - package-ecosystem: \"docker\"\n    directory: \"/\"\n    schedule:\n      interval: \"monthly\"\n\n  - package-ecosystem: \"docker\"\n    directory: \"/grafana\"\n    schedule:\n      interval: \"monthly\"\n\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"monthly\"\n"
  },
  {
    "path": ".github/workflows/buildx.yml",
    "content": "name: Publish Docker images\n\non:\n  workflow_dispatch:\n  workflow_call:\n  schedule:\n    - cron: \"0 3 * * *\"\n  push:\n    tags:\n      - \"v*\"\n    paths:\n      - \"**/*\"\n      - \"!.github/**\" # Important: Exclude PRs related to .github from auto-run\n      - \"!.github/workflows/**\" # Important: Exclude PRs related to .github/workflows from auto-run\n      - \"!.github/actions/**\" # Important: Exclude PRs related to .github/actions from auto-run\nenv:\n  REGISTRY_IMAGE: teslamate/teslamate\n\npermissions:\n  contents: read\n  packages: write\n\njobs:\n  check_paths:\n    uses: ./.github/workflows/check_paths.yml\n\n  teslamate_build:\n    needs: check_paths\n    if: needs.check_paths.outputs.githubfolder == 'false' || github.event_name == 'schedule'\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - platform: \"linux/amd64\"\n            runs_on: \"ubuntu-24.04\"\n            cache_id: amd64\n          - platform: \"linux/arm/v7\"\n            runs_on: \"ubuntu-24.04-arm\"\n            cache_id: arm\n          - platform: \"linux/arm64\"\n            runs_on: \"ubuntu-24.04-arm\"\n            cache_id: arm64\n\n    runs-on: ${{ matrix.runs_on }}\n    timeout-minutes: 10\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      - name: Buildx\n        uses: ./.github/actions/build\n        with:\n          is_dockerhub_pushed: \"1\"\n          docker_password: ${{ secrets.DOCKER_PASSWORD }}\n          repository_owner: ${{ github.repository_owner }}\n          repository: ${{ github.repository }}\n          github_token: ${{ secrets.GITHUB_TOKEN }}\n          version: ${{ github.head_ref || github.ref_name }}\n\n  teslamate_merge:\n    runs-on: ubuntu-24.04\n    needs:\n      - check_paths\n      - teslamate_build\n    if: needs.check_paths.outputs.githubfolder == 'false' || github.event_name == 'schedule'\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - name: Login to Docker Hub\n        uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0\n        with:\n          username: teslamate\n          password: ${{ secrets.DOCKER_PASSWORD }}\n\n      - uses: ./.github/actions/merge\n        with:\n          image: ${{ env.REGISTRY_IMAGE }}\n          tags: |\n            type=schedule,pattern=edge\n            type=semver,pattern={{version}}\n            type=semver,pattern={{major}}.{{minor}}\n            type=edge\n  grafana:\n    needs: check_paths\n    if: needs.check_paths.outputs.githubfolder == 'false' || github.event_name == 'schedule'\n    runs-on: ubuntu-24.04\n    timeout-minutes: 10\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - name: Login to Docker Hub\n        uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0\n        with:\n          username: teslamate\n          password: ${{ secrets.DOCKER_PASSWORD }}\n\n      - uses: ./.github/actions/grafana\n        with:\n          tags: |\n            type=edge\n            type=schedule,pattern=edge\n            type=semver,pattern={{version}}\n            type=semver,pattern={{major}}.{{minor}}\n"
  },
  {
    "path": ".github/workflows/check_if_pr_from_outside_repo.yml",
    "content": "name: Check if PR from outside repo\n\non:\n  workflow_call:\n    # Map the workflow outputs to job outputs\n    outputs:\n      is_pr_from_outside_repo:\n        description: \"Indicates if the PR is from an outside repository\"\n        value: ${{ jobs.check_if_pr_from_outside_repo.outputs.is_pr_from_outside_repo }}\n\npermissions:\n  contents: read\n\njobs:\n  check_if_pr_from_outside_repo:\n    name: Check if PR from outside repo\n    # as we currently only push ghcr images for PRs from our own repo\n    outputs:\n      is_pr_from_outside_repo: ${{ steps.check_if_pr_from_outside_repo.outputs.is_pr_from_outside_repo }}\n    runs-on: ubuntu-24.04\n    steps:\n      - name: check if PR from outside repo\n        id: check_if_pr_from_outside_repo\n        shell: bash\n        run: |\n          echo \"::group::Check if PR from outside repo\"\n          if [[ \"${{ github.event_name }}\" == \"pull_request\" && \"${{ github.event.pull_request.head.repo.full_name }}\" != \"${{ github.repository }}\" ]]; then\n            echo \"This PR is from outside the repo\"\n            echo \"is_pr_from_outside_repo=true\" >> $GITHUB_OUTPUT\n          else\n            echo \"This PR is from our own repo\"\n            echo \"is_pr_from_outside_repo=false\" >> $GITHUB_OUTPUT\n          fi\n          echo \"::endgroup::\"\n"
  },
  {
    "path": ".github/workflows/check_paths.yml",
    "content": "name: Check paths\n\non:\n  workflow_call:\n    # Map the workflow outputs to job outputs\n    outputs:\n      githubfolder:\n        description: \"changes to .github folder\"\n        value: ${{ jobs.check_paths.outputs.githubfolder }}\n\npermissions:\n  contents: read\n\njobs:\n  check_paths:\n    runs-on: ubuntu-24.04\n    outputs:\n      githubfolder: ${{ steps.filter.outputs.githubfolder }}\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - uses: dorny/paths-filter@9d7afb8d214ad99e78fbd4247752c4caed2b6e4c # v4.0.0\n        id: filter\n        with:\n          base: \"main\" # needed to set as a called workflow does not have direct access to repository.default_branch\n          filters: |\n            githubfolder:\n              - '.github/**'\n"
  },
  {
    "path": ".github/workflows/cleanup_caches.yml",
    "content": "name: Cleanup caches by a branch\n\non:\n  pull_request:\n    types:\n      - closed\n    paths:\n      - \"**/*\"\n      - \"!.github/**\" # Important: Exclude PRs related to .github from auto-run\n      - \"!.github/workflows/**\" # Important: Exclude PRs related to .github/workflows from auto-run\n      - \"!.github/actions/**\" # Important: Exclude PRs related to .github/actions from auto-run\n\npermissions:\n  contents: read\n  packages: read\n  actions: write\n\njobs:\n  check_paths:\n    uses: ./.github/workflows/check_paths.yml\n\n  cleanup:\n    name: Delete caches when PR is closed\n    needs: check_paths\n    if: needs.check_paths.outputs.githubfolder == 'false'\n    runs-on: ubuntu-24.04\n\n    steps:\n      - name: Cleanup\n        run: |\n          echo \"Fetching list of cache key\"\n          cacheKeysForPR=$(gh cache list --repo $REPO --ref $BRANCH --limit 100 | cut -f 1 )\n\n          ## Setting this to not fail the workflow while deleting cache keys.\n          set +e\n          echo \"Deleting caches...\"\n          for cacheKey in $cacheKeysForPR\n          do\n              gh cache delete $cacheKey --repo $REPO\n          done\n          echo \"Done\"\n        env:\n          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          REPO: ${{ github.repository }}\n          BRANCH: refs/pull/${{ github.event.pull_request.number }}/merge\n"
  },
  {
    "path": ".github/workflows/cleanup_largest_caches.yml",
    "content": "name: Cleanup largest 100 caches\n\non:\n  workflow_dispatch:\n\npermissions:\n  contents: read\n  packages: read\n  actions: write\n\njobs:\n  cleanup:\n    name: Delete largest 100 caches\n    runs-on: ubuntu-24.04\n\n    steps:\n      - name: Cleanup largest 100 caches\n        run: |\n          echo \"Fetching list of cache key\"\n          cacheKeysLargest=$(gh cache list --repo $REPO --limit 100 --sort size_in_bytes --order desc | cut -f 1 )\n\n          ## Setting this to not fail the workflow while deleting cache keys.\n          set +e\n          echo \"Deleting caches...\"\n          for cacheKey in $cacheKeysLargest\n          do\n              gh cache delete $cacheKey --repo $REPO\n          done\n          echo \"Done\"\n        env:\n          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          REPO: ${{ github.repository }}\n"
  },
  {
    "path": ".github/workflows/devops.yml",
    "content": "name: DevOps\n\non:\n  workflow_dispatch:\n  push:\n    branches: [\"main\"]\n    paths:\n      - \"**/*\"\n      - \"!.github/**\" # Important: Exclude PRs related to .github from auto-run\n      - \"!.github/workflows/**\" # Important: Exclude PRs related to .github/workflows from auto-run\n      - \"!.github/actions/**\" # Important: Exclude PRs related to .github/actions from auto-run\n  pull_request:\n    branches: [\"main\"]\n    paths:\n      - \"**/*\"\n      - \"!.github/**\" # Important: Exclude PRs related to .github from auto-run\n      - \"!.github/workflows/**\" # Important: Exclude PRs related to .github/workflows from auto-run\n      - \"!.github/actions/**\" # Important: Exclude PRs related to .github/actions from auto-run\n\n# Cancel any in-progress runs when a new commit is pushed\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\npermissions:\n  contents: read\n  packages: write\n\njobs:\n  check_paths:\n    uses: ./.github/workflows/check_paths.yml\n\n  spell_check:\n    needs: check_paths\n    if: needs.check_paths.outputs.githubfolder == 'false' || github.event_name == 'schedule'\n    uses: ./.github/workflows/spell_check.yml\n\n  ensure_linting:\n    needs:\n      - check_paths\n      - spell_check\n    if: needs.check_paths.outputs.githubfolder == 'false' || github.event_name == 'schedule'\n    uses: ./.github/workflows/ensure_linting.yml\n\n  elixir_dep_verification_and_static_analysis:\n    needs:\n      - check_paths\n      - ensure_linting\n    if: needs.check_paths.outputs.githubfolder == 'false' || github.event_name == 'schedule'\n    uses: ./.github/workflows/elixir_dep_verification_and_static_analysis.yml\n\n  elixir_test:\n    needs:\n      - check_paths\n      - ensure_linting\n    if: needs.check_paths.outputs.githubfolder == 'false' || github.event_name == 'schedule'\n    uses: ./.github/workflows/elixir_test.yml\n"
  },
  {
    "path": ".github/workflows/elixir_dep_verification_and_static_analysis.yml",
    "content": "name: Elixir Dependency Verification and Static Analysis\n\non:\n  workflow_call:\n\nenv:\n  CACHE_NAME_DEPS: cache-elixir-deps\n  CACHE_NAME_COMPILED_DEV: cache-compiled-dev-build\n  CACHE_NAME_COMPILED_TEST: cache-compiled-test-build\n  ELIXIR_ASSERT_TIMEOUT: 1000\n\npermissions:\n  contents: read\n\njobs:\n  verify_dependencies_and_static_analysis:\n    name: Verify dependencies, POT files, unused dependencies, static analysis\n    runs-on: ubuntu-24.04\n\n    permissions:\n      contents: read\n\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - name: Setup Elixir and Cache Dependencies\n        id: setup-elixir-and-cache-deps\n        uses: ./.github/actions/setup-elixir-and-cache-deps\n        with:\n          cache-name-deps: ${{ env.CACHE_NAME_DEPS }}\n          cache-name-compiled: ${{ env.CACHE_NAME_COMPILED_DEV }}\n          mix-env: dev\n\n      - name: Compile without warnings\n        run: mix compile --warnings-as-errors\n        shell: sh\n\n      - name: Verify that POT files are up to date\n        run: mix gettext.extract --check-up-to-date\n\n      - name: Check unused dependencies\n        run: mix deps.unlock --check-unused\n\n      - name: Restore PLT cache\n        id: plt_cache\n        uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3\n        with:\n          key: |\n            ${{ runner.os }}-${{ steps.setup-elixir-and-cache-deps.outputs.elixir-version }}-${{ steps.setup-elixir-and-cache-deps.outputs.otp-version }}-plt\n          restore-keys: |\n            ${{ runner.os }}-${{ steps.setup-elixir-and-cache-deps.outputs.elixir-version }}-${{ steps.setup-elixir-and-cache-deps.outputs.otp-version }}-plt\n          path: |\n            priv/plts\n\n      - name: Create Persistent Lookup Tables (PLTs) for Dialyzer\n        if: steps.plt_cache.outputs.cache-hit != 'true'\n        run: mix dialyzer --plt\n\n      - name: Save PLT cache\n        id: plt_cache_save\n        uses: actions/cache/save@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3\n        if: steps.plt_cache.outputs.cache-hit != 'true'\n        with:\n          key: |\n            ${{ runner.os }}-${{ steps.setup-elixir-and-cache-deps.outputs.elixir-version }}-${{ steps.setup-elixir-and-cache-deps.outputs.otp-version }}-plt\n          path: |\n            priv/plts\n\n      - name: Run dialyzer for static analysis\n        run: mix dialyzer --format github\n"
  },
  {
    "path": ".github/workflows/elixir_test.yml",
    "content": "name: Elixir Test and report coverage\n\non:\n  workflow_call:\n\nenv:\n  CACHE_NAME_DEPS: cache-elixir-deps\n  CACHE_NAME_COMPILED_TEST: cache-compiled-test-build\n  ELIXIR_ASSERT_TIMEOUT: 1000\n\npermissions:\n  contents: read\n\njobs:\n  test:\n    name: Test\n    runs-on: ubuntu-24.04\n\n    permissions:\n      contents: read\n\n    services:\n      db:\n        image: postgres:18-trixie\n        ports: [\"5432:5432\"]\n        env:\n          POSTGRES_PASSWORD: postgres\n        options: >-\n          --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5\n\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - name: Setup Elixir and Cache Dependencies\n        id: setup-elixir-and-cache-deps\n        uses: ./.github/actions/setup-elixir-and-cache-deps\n        with:\n          cache-name-deps: ${{ env.CACHE_NAME_DEPS }}\n          cache-name-compiled: ${{ env.CACHE_NAME_COMPILED_TEST }}\n          mix-env: test\n          ELIXIR_ASSERT_TIMEOUT: ${{ env.ELIXIR_ASSERT_TIMEOUT }}\n\n      - name: Compile without warnings\n        run: mix compile --warnings-as-errors\n        shell: sh\n\n      - name: Run tests\n        run: mix test --warnings-as-errors\n\n      - name: Check Coverage\n        if: github.ref == 'refs/heads/main'\n        run: mix coveralls.github\n        continue-on-error: true\n        env:\n          MIX_ENV: test\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/ensure_linting.yml",
    "content": "name: Ensure Linting\n\non:\n  workflow_call:\n\npermissions:\n  contents: read\n\njobs:\n  check_linting:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - name: Install Nix\n        uses: nixbuild/nix-quick-install-action@2c9db80fb984ceb1bcaa77cdda3fdf8cfba92035 # v34\n\n      - name: Nix binary cache\n        uses: nix-community/cache-nix-action@7df957e333c1e5da7721f60227dbba6d06080569 # v7.0.2\n        with:\n          # restore and save a cache using this key\n          primary-key: nix-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }}\n          # if there's no cache hit, restore a cache by this prefix\n          restore-prefixes-first-match: nix-${{ runner.os }}-\n          # collect garbage until Nix store size (in bytes) is at most this number\n          # before trying to save a new cache\n          # 1G = 1073741824\n          gc-max-store-size-linux: 1073741824\n          # do purge caches\n          purge: true\n          # purge all versions of the cache\n          purge-prefixes: nix-${{ runner.os }}-\n          # created more than this number of seconds ago\n          # relative to the start of the `Post Restore and save Nix store` phase\n          purge-created: 0\n          # except any version with the key that is the same as the `primary-key`\n          purge-primary-key: never\n\n      - name: Run treefmt in CI mode\n        run: nix develop --override-input devenv-root \"file+file://\"<(printf %s \"$PWD\") . --command treefmt --ci\n        # or use: https://github.com/cachix/git-hooks.nix?tab=readme-ov-file\n"
  },
  {
    "path": ".github/workflows/ghcr_build.yml",
    "content": "name: Build GHCR images\n\non:\n  push:\n    branches: [\"main\"]\n    paths:\n      - \"**/*\"\n      - \"!.github/**\" # Important: Exclude pushes related to .github from auto-run\n      - \"!.github/workflows/**\" # Important: Exclude pushes related to .github/workflows from auto-run\n      - \"!.github/actions/**\" # Important: Exclude pushes related to .github/actions from auto-run\n  pull_request:\n    branches: [\"main\"]\n    paths:\n      - \"**/*\"\n      - \"!.github/**\" # Important: Exclude PRs related to .github from auto-run\n      - \"!.github/workflows/**\" # Important: Exclude PRs related to .github/workflows from auto-run\n      - \"!.github/actions/**\" # Important: Exclude PRs related to .github/actions from auto-run\n\nenv:\n  REGISTRY_IMAGE: ghcr.io/${{ github.repository }}\n\npermissions:\n  contents: read\n  packages: write\n\njobs:\n  check_paths:\n    uses: ./.github/workflows/check_paths.yml\n\n  check_if_pr_from_outside_repo:\n    needs: check_paths\n    if: needs.check_paths.outputs.githubfolder == 'false'\n    uses: ./.github/workflows/check_if_pr_from_outside_repo.yml\n\n  teslamate_build:\n    name: Build images\n    needs:\n      - check_paths\n      - check_if_pr_from_outside_repo\n    if: needs.check_paths.outputs.githubfolder == 'false' && needs.check_if_pr_from_outside_repo.outputs.is_pr_from_outside_repo == 'false'\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - platform: \"linux/amd64\"\n            runs_on: \"ubuntu-24.04\"\n            cache_id: amd64\n          - platform: \"linux/arm/v7\"\n            runs_on: \"ubuntu-24.04-arm\"\n            cache_id: arm\n          - platform: \"linux/arm64\"\n            runs_on: \"ubuntu-24.04-arm\"\n            cache_id: arm64\n\n    runs-on: ${{ matrix.runs_on }}\n    timeout-minutes: 10\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - name: Buildx\n        uses: ./.github/actions/build\n        with:\n          docker_password: ${{ secrets.DOCKER_PASSWORD }}\n          repository_owner: ${{ github.repository_owner }}\n          repository: ${{ github.repository }}\n          github_token: ${{ secrets.GITHUB_TOKEN }}\n          version: ${{ github.head_ref || github.ref_name }}\n          labels: |\n            org.opencontainers.image.version=${{ github.ref || github.ref_name }}\n\n  teslamate_merge:\n    name: Merge GHCR images\n    needs:\n      - check_paths\n      - teslamate_build\n    if: needs.check_paths.outputs.githubfolder == 'false'\n    runs-on: ubuntu-24.04\n    timeout-minutes: 10\n    steps:\n      - name: Checkout\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0\n        with:\n          registry: ghcr.io\n          username: ${{ github.repository_owner }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n      - name: Merge\n        id: merge\n        uses: ./.github/actions/merge\n        with:\n          image: ${{ env.REGISTRY_IMAGE }}\n\n  grafana:\n    needs:\n      - check_paths\n      - check_if_pr_from_outside_repo\n    if: needs.check_paths.outputs.githubfolder == 'false' && needs.check_if_pr_from_outside_repo.outputs.is_pr_from_outside_repo == 'false'\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0\n        with:\n          registry: ghcr.io\n          username: ${{ github.repository_owner }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - uses: ./.github/actions/grafana\n        with:\n          image: ${{ env.REGISTRY_IMAGE }}/grafana\n          labels: |\n            org.opencontainers.image.version=${{ github.ref || github.ref_name }}\n"
  },
  {
    "path": ".github/workflows/ghcr_purge.yml",
    "content": "name: Purge PR images\n\non:\n  workflow_call:\n  pull_request:\n    types:\n      - closed\n    paths:\n      - \"**/*\"\n      - \"!.github/**\" # Important: Exclude PRs related to .github from auto-run\n      - \"!.github/workflows/**\" # Important: Exclude PRs related to .github/workflows from auto-run\n      - \"!.github/actions/**\" # Important: Exclude PRs related to .github/actions from auto-run\n\npermissions:\n  contents: read\n  packages: write\n\njobs:\n  check_paths:\n    uses: ./.github/workflows/check_paths.yml\n\n  check_if_pr_from_outside_repo:\n    needs: check_paths\n    if: needs.check_paths.outputs.githubfolder == 'false'\n    uses: ./.github/workflows/check_if_pr_from_outside_repo.yml\n\n  purge-pr-package:\n    name: Delete images from ghcr.io when PR is closed\n    needs:\n      - check_paths\n      - check_if_pr_from_outside_repo\n    if: needs.check_paths.outputs.githubfolder == 'false' && needs.check_if_pr_from_outside_repo.outputs.is_pr_from_outside_repo == 'false'\n    runs-on: ubuntu-24.04\n    concurrency:\n      group: \"purge-pr-images\"\n\n    steps:\n      - name: normalize version name to a valid string\n        # convert backslashes to dashes, so for example dependabot/x/y/z-1.2.3 works\n        id: normalize_version\n        shell: bash\n        run: |\n          VERSION=\"${{ github.head_ref }}\"\n          NORMALIZED_VERSION=\"${VERSION//\\//-}\"\n          echo \"normalized_version=${NORMALIZED_VERSION}\" >> $GITHUB_OUTPUT\n\n      - uses: dataaxiom/ghcr-cleanup-action@cd0cdb900b5dbf3a6f2cc869f0dbb0b8211f50c4 # v1.0.16\n        name: Delete images for teslamate and teslamate/grafana from ghcr.io\n        with:\n          packages: \"teslamate,teslamate/grafana\"\n          token: ${{ secrets.GITHUB_TOKEN }}\n          delete-tags: \"pr-${{ github.event.pull_request.number }}\"\n\n      - uses: dataaxiom/ghcr-cleanup-action@cd0cdb900b5dbf3a6f2cc869f0dbb0b8211f50c4 # v1.0.16\n        name: Delete build cache images for teslamate from ghcr.io\n        with:\n          packages: \"teslamate\"\n          token: ${{ secrets.GITHUB_TOKEN }}\n          delete-tags: \"buildcache-arm-${{ steps.normalize_version.outputs.normalized_version }},buildcache-arm64-${{ steps.normalize_version.outputs.normalized_version }},buildcache-amd64-${{ steps.normalize_version.outputs.normalized_version }}\"\n\n      - uses: dataaxiom/ghcr-cleanup-action@cd0cdb900b5dbf3a6f2cc869f0dbb0b8211f50c4 # v1.0.16\n        name: Delete untagged images from ghcr.io\n        with:\n          packages: \"teslamate,teslamate/grafana\"\n          token: ${{ secrets.GITHUB_TOKEN }}\n          delete-untagged: \"true\"\n          delete-ghost-images: \"true\"\n          older-than: \"1 day\"\n"
  },
  {
    "path": ".github/workflows/spell_check.yml",
    "content": "name: Spell check\n\non:\n  workflow_call:\n\npermissions:\n  contents: read\n\njobs:\n  spell_check:\n    name: Spell check\n    runs-on: ubuntu-24.04\n\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - name: Spell check\n        uses: crate-ci/typos@631208b7aac2daa8b707f55e7331f9112b0e062d # v1.44.0\n"
  },
  {
    "path": ".github/workflows/stale.yml",
    "content": "name: \"Close Stale Issues and Pull Requests\"\n\non:\n  schedule:\n    - cron: \"45 0 * * *\" # every day at 00:45 UTC\n\npermissions:\n  issues: write\n  pull-requests: write\n\njobs:\n  stale:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0\n        with:\n          stale-issue-message: >\n            This issue has been automatically marked as stale because\n            it has not had recent activity. It will be closed in 7 days if\n            no further activity occurs. Thank you for your contributions.\n          stale-pr-message: >\n            This pull request has been automatically marked as stale because\n            it has not had recent activity. It could be closed if no further\n            activity occurs. Thank you for your contributions.\n          days-before-stale: 30\n          days-before-close: 7\n          days-before-pr-close: -1\n          exempt-all-pr-milestones: true\n          exempt-issue-labels: \"area:grafana, area:tesla api, enhancement, kind:bug, kind:documentation, kind:idea, note:needs investigation, security, pinned\"\n          exempt-pr-labels: \"awaiting-approval, area:grafana, area:tesla api, enhancement, kind:bug, kind:documentation, kind:idea, note:needs investigation, security, pinned\"\n"
  },
  {
    "path": ".github/workflows/update-flake-lock.yml",
    "content": "---\nname: Update flake.lock\non:\n  workflow_dispatch:\n  schedule:\n    # runs weekly on Saturday at 00:00 UTC time\n    - cron: \"0 0 * * 6\"\n\npermissions:\n  contents: write\n  pull-requests: write\n\njobs:\n  lockfile:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - name: Install Nix\n        uses: nixbuild/nix-quick-install-action@2c9db80fb984ceb1bcaa77cdda3fdf8cfba92035 # v34\n\n      - name: Nix binary cache\n        uses: nix-community/cache-nix-action@7df957e333c1e5da7721f60227dbba6d06080569 # v7.0.2\n        with:\n          # restore and save a cache using this key\n          primary-key: nix-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }}\n          # if there's no cache hit, restore a cache by this prefix\n          restore-prefixes-first-match: nix-${{ runner.os }}-\n          # collect garbage until Nix store size (in bytes) is at most this number\n          # before trying to save a new cache\n          # 1G = 1073741824\n          gc-max-store-size-linux: 1073741824\n          # do purge caches\n          purge: true\n          # purge all versions of the cache\n          purge-prefixes: nix-${{ runner.os }}-\n          # created more than this number of seconds ago\n          # relative to the start of the `Post Restore and save Nix store` phase\n          purge-created: 0\n          # except any version with the key that is the same as the `primary-key`\n          purge-primary-key: never\n\n      - name: Update flake.lock\n        id: update\n        uses: DeterminateSystems/update-flake-lock@834c491b2ece4de0bbd00d85214bb5e83b4da5c6 #v28\n        with:\n          pr-title: \"build(deps): update flake.lock\"\n          pr-labels: |\n            dependencies\n            automated\n\n      - name: Print PR number\n        run: echo Pull request number is ${{ steps.update.outputs.pull-request-number }}.\n"
  },
  {
    "path": ".gitignore",
    "content": "# The directory Mix will write compiled artifacts to.\n/_build/\n\n# If you run \"mix test --cover\", coverage assets end up here.\n/cover/\n\n# The directory Mix downloads your dependencies sources to.\n/deps/\n\n# Where 3rd-party dependencies like ExDoc output generated docs.\n/doc/\n\n# Ignore .fetch files in case you like to edit your project deps locally.\n/.fetch\n\n# If the VM crashes, it generates a dump, let's ignore it too.\nerl_crash.dump\n\n# Also ignore archive artifacts (built via \"mix archive.build\").\n*.ez\n\n# Ignore package tarball (built via \"mix hex.build\").\ntesla_mate-*.tar\n\n# If NPM crashes, it generates a log, let's ignore it too.\nnpm-debug.log\n\n# The directory NPM downloads your dependencies sources to.\n/assets/node_modules/\n\n# Ignore assets that are produced by build tools.\n/priv/static/assets/\n\n# Ignore digested assets cache.\n/priv/static/cache_manifest.json\n\n# CDLR data repository\n/priv/cldr/\n\n# Files matching config/*.secret.exs pattern contain sensitive\n# data and you should not commit them into version control.\n#\n# Alternatively, you may comment the line below and commit the\n# secrets files as long as you replace their contents by environment\n# variables.\n/config/*.secret.exs\nconfig/*.env\n.env\n\n/import/\n.srtm_cache/\n\n# Make sure IDE files don't get committed to the repo\n.idea/\n.eclipse/\n.elixir_ls/\n/.project\n.vscode/\n\n# Mac files\n.DS_Store\n\n/priv/plts/*.plt\n/priv/plts/*.plt.hash\n\n# Nix files\n/.direnv\n/.devenv\n/tzdata/\n/result\n\n# Used during tests\n/tmp/\n"
  },
  {
    "path": ".markdownlint.yaml",
    "content": "---\ndefault: true\nMD013:\n  line_length: 500\nMD024:\n  siblings_only: true # heading duplication is allowed for non-sibling headings (common in changelogs)\nMD033:\n  allowed_elements: [\"details\", \"summary\", \"TabItem\", \"pre\"]\n"
  },
  {
    "path": ".node-version",
    "content": "20"
  },
  {
    "path": ".typos.toml",
    "content": "[default.extend-words]\nmosquitto = \"mosquitto\"\nHASS = \"HASS\"\nJuni = \"Juni\"\nbck = \"bck\"\nAutomations = \"Automations\"\nautomations = \"automations\"\nws = \"ws\"\nWS = \"WS\"\nro = \"ro\"\nhd = \"hd\"\ndur = \"dur\"\npn = \"pn\"\nDerivated = \"Derivated\"\nBre = \"Bre\"\nBRIN = \"BRIN\"\n\n[type.po]\nextend-glob = [\"*.po\"]\ncheck-file = false\n\n[files]\nextend-exclude = [\"*.json.example\"]\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\n## [unreleased]\n\n### New features\n\n### Improvements and bug fixes\n\n- feat(webview): Sort vehicles by display_priority (#5188 - @olsoybakk and @swiffer)\n- feat(webview): Make icons inherit text color for better contrast in dark mode (#5193 - @olsoybakk)\n\n#### Build, CI, internal\n\n- build(deps): bump ex_cldr from 2.46.0 to 2.47.1 to fix 100% CPU lock when accessing TeslaMate web (#5166)\n- ci: migrate runners for arm from buildjet to gha native (#5206 - @adriankumpf)\n- ci: limit DevOps workflow runs of type push to branch main to prevent duplicate runs on PR (#5211 - @swiffer)\n- build(deps): update flake.lock (#5186)\n- fix(nix): update mix dependency hash in nix builds (#5186 - @JakobLichterfeld)\n- build(deps): bump actions/stale from 10.1.1 to 10.2.0 (#5162)\n- build(deps): bump crate-ci/typos from 1.42.3 to 1.44.0 (#5163)\n- build(deps): bump finch from 0.20.0 to 0.21.0 (#5165)\n- build(deps): bump immutable from 5.1.4 to 5.1.5 in /assets (#5176)\n- build(deps): bump svgo from 3.3.2 to 3.3.3 in /website (#5177)\n- ci: bump actions to avoid warnings for node 20 (#5213 - @swiffer)\n- ci: ensure fully purging PR related tags for images hosted on GHCR on PR close (#5212 - @swiffer)\n- ci: build images for main branch and use buildcache of main as fallback for PR builds (#5212 - @swiffer)\n- ci: run Purge PR images workflow only if PR is from our own repo (#5217 - @swiffer)\n- ci: for check_paths ensure the job value is retrieved and set as workflow output correctly (#5219 - @swiffer)\n\n#### Dashboards\n\n- fix: use FLOOR/CEIL over ROUND for timestamps used in dashboard links to avoid timeranges becoming to narrow (#5187 - @swiffer)\n- fix: ensure Charges / Drives dashboards load correctly if no Geofence exists (#5199 - @swiffer)\n- fix: division by zero in SQL query for cost_mileage in Trips dashboard (#5198 - @DrMichael)\n\n#### Translations\n\n- i18n: updated Catalan default.po (#5180 - @pellix)\n\n#### Documentation\n\n- docs: drop private schema before restore (#5190 - @brianmay)\n\n## [3.0.0] - 2026-02-28\n\nLet's start with a quote: \"Why do programmers like dark mode? Because light attracts bugs.\". Yes, you read that right. TeslaMate Webview now has a dark mode.\n\nAs always, lots of improvements have been made. Memory usage has been reduced, while performance has been increased — it sounds too good to be true, but it's the reality.\nBattery heating is now also shown on the overview dashboard, and the drives dashboard now always shows the consumption.\nTo make your TeslaMate experience even better, we have also made more than 52 other improvements.\n\nEnjoy!\n\n### 📄 License Change Notice\n\nAs of PR #5131, TeslaMate has transitioned from the MIT License to the GNU Affero General Public License v3.0 (AGPLv3).\n\nWhat does this mean for you?\n\n- For Private Users: Nothing changes. You can continue to use, host, and modify TeslaMate for your personal use for free, just as before.\n- For the Community: This change ensures that TeslaMate remains open and free. It prevents companies from taking the community's hard work and turning it into a closed-source commercial service without giving back.\n- For Developers: If you modify or use TeslaMate, you must now share your source code modifications under the same license.\n\nWe believe this step is necessary to protect the project from exploitation and to ensure its long-term sustainability.\n\n### Known issues\n\n- We have received reports from users suffering with \"No Data\" errors when viewing dashboards in Grafana (#5157).\n  This issue is currently assumed to be instance specific and caused by changes in Grafana (v12.1.1 -> v12.4.0). If you are affected please try saving the TeslaMate datasource by clicking on \"Save & test\" in Grafana -> Connections -> Data sources -> TeslaMate.\n- Dashboards containing a Geofence filter fail to load if no Geofence is defined (#5191). While being a regression in Grafana v12.4.0 most likely it can be fixed by defining at least one Geofence. We will provide a workaround in TeslaMate v3.0.1 until it's fixed upstream.\n\n### New features\n\n- feat: add optional dark mode feature (#5065 - @wooter)\n- legal: relicense under AGPLv3 (#5131 - @JakobLichterfeld)\n- legal: add Trademark notice (#5131 - @JakobLichterfeld)\n- feat: use Bulma 1 for dark theme and revised it (#5112 - @swiffer)\n\n### Improvements and bug fixes\n\n- feat: use Logger instead of IO.puts in DB check (#5050 - @swiffer)\n- feat: Increase max_header_value_length to support oauth2-proxy (#5031 - @ultravail)\n- perf: Replace positions indexes from BTREE to BRIN to reduce memory usage (#5075 - @ilya-y-synth)\n- feat(grafana): disable update checks as version is handled via docker image (#5115 - @fatbasstard)\n- perf: use static asset compression via brotli and zstandard to enhance HTTP Compression (#5113 - @swiffer)\n- feat: use Grafana 12.4.0 (#4965 - @swiffer)\n- fix(vehicle): update state transition to handle offline scenario after a drive end with no network (#5152 - @jlestel)\n\n#### Build, CI, internal\n\n- build(deps): bump mdast-util-to-hast from 13.2.0 to 13.2.1 in /website (#5059)\n- build(deps): bump js-yaml from 3.14.1 to 3.14.2 in /website (#5043)\n- build(deps): bump crate-ci/typos from 1.39.0 to 1.40.0 (#5055)\n- build(deps): bump DeterminateSystems/update-flake-lock from 27 to 28 (#5056)\n- build(deps): bump express from 4.21.2 to 4.22.1 in /website (#5060)\n- build(deps): update flake.lock (#5027)\n- fix(website): Bump node-forge to 1.3.3 to resolve CVE-2025-12816, CVE-2025-66030 and CVE-2025-66031 (#5071 - @JakobLichterfeld)\n- chore(website): bump qs to fix CVE-2025-15284 (#5091 - @JakobLichterfeld)\n- build(deps): bump react and react-dom from 19.2.0 to 19.2.3 in /website (#5084)\n- build(deps): bump nix-community/cache-nix-action from 6.1.3 to 7.0.0 (#5082)\n- build(deps): bump actions/cache from 4.3.0 to 5.0.1 (#5077)\n- build(deps): bump crate-ci/typos from 1.40.0 to 1.41.0 (#5079)\n- build(deps): bump actions/stale from 10.1.0 to 10.1.1 (#5080)\n- build(deps): bump lodash from 4.17.21 to 4.17.23 in /website (#5109)\n- build(deps): bump lodash and @geoman-io/leaflet-geoman-free in /assets (#5126)\n- build(deps): bump react and react-dom from 19.2.3 to 19.2.4 in /website (#5124)\n- build(deps): bump crate-ci/typos from 1.41.0 to 1.42.3 (#5123)\n- build(deps): bump docker/login-action from 3.6.0 to 3.7.0 (#5119)\n- build(deps): bump nix-community/cache-nix-action from 7.0.0 to 7.0.2 (#5122)\n- build(deps): bump actions/cache from 5.0.1 to 5.0.3 (#5120)\n- build(deps): bump webpack from 5.102.0 to 5.105.0 in /website (#5135)\n- feat(nix): use nixos-25.11 (#5062 - @JakobLichterfeld)\n- chore(nix): update flake.lock with new dependency revisions (#5062 - @JakobLichterfeld)\n- build(nix): use elixir 1.19 to align with dockerfile (#5062 - @JakobLichterfeld)\n- chore: reorganize CLI definition to avoid elixir 1.19 warning (#5062 - @JakobLichterfeld)\n- build: update db_connection to version 2.9.0 (#5062 - @JakobLichterfeld)\n- build: use Elixir 1.19.5 OTP 26 (#5130 - @swiffer, @brianmay and @JakobLichterfeld)\n- build(deps): bump qs from 6.14.1 to 6.14.2 in /website (#5140)\n- build(deps): update & bump mix deps (#5139 - @swiffer)\n- build(deps): bump ex_cldr from 2.42.0 to 2.46.0 (#5053 - @JakobLichterfeld)\n- build(deps): bump floki & gettext, remove override on ranch, require elixir 1.19 (#5142 - @swiffer)\n- feat(grafana-home-dashboard): change cors proxy (#5143 - @swiffer)\n- build(deps): update flake.lock (#5141)\n- build(deps): relax requirement for elixir to allow 1.17+ and clarify what is supported (#5145 - @swiffer)\n- build(deps): update flake.lock (#5148)\n- build(deps): update flake.lock (#5154)\n- build(deps): bump ajv in /website (#5149)\n- chore(website): bump mimimatch to version 3.1.5 to solve CVE-2026-26996, CVE-2026-27903 and CVE-2026-27904 (#5155 - @JakobLichterfeld)\n- chore(website): bump serialize-javascript to version 7.0.3 to solve CWE-96 (#5156 - @JakobLichterfeld)\n\n#### Dashboards\n\n- feat(overview): show battery heating on overview dashboard as well (#5090 - @kaistian)\n- feat: optimize reduced_range query and always show consumption kwh in drives dashboard (#5089 - @swiffer)\n\n#### Translations\n\n#### Documentation\n\n- docs(traefik): update to v3.6 as 3.6.1 solves issues with docker 29.0 (#5034 - @JakobLichterfeld)\n- docs: fix the formatting of the `DATABASE_SOCKET_DIR` description (#5026 - @IngmarStein)\n- docs: fix external image rendering with Traefik SSL (#5074 - @swiffer)\n- docs(home_assistant): default tesla_active_route_distance_to_arrival sensor to kilometers (#5086 - @kenni)\n- docs: Remove hints to now deprecated Grafana VS Code Extension in contribution guide (#5110 - @swiffer)\n- docs: Add reference to TeslaMate Achievements (#5134 - @crstian19)\n\n## [2.2.0] - 2025-11-06\n\nAs always, there have been many improvements. We now support a proxy for the OpenStreetMap API. If you live in a geo-blocked location, this could simplify your setup. Your tokens are now more secure.\nWe use the latest dependencies and support PostgreSQL 18 (To update, back up your data and follow [the guide](https://docs.teslamate.org/docs/maintenance/upgrading_postgres) **Please note: Volume mounts have changed in PostgreSQL18, see point 4 of the guide.**).\nWe also avoid memory bloat on misconfigured Docker hosts. If your host has limited hardware, this will greatly improve your experience.\nThe dashboards have been improved in terms of performance, and all dashboards now function as expected when set to miles.\n\nEnjoy it.\n\n### New features\n\n- feat: support proxy for openstreet API (#4970 - @jaypark0006)\n\n### Improvements and bug fixes\n\n- sec: set tokens to private schema (#4968 -@brianmay)\n- build(deps): use elixir 1.18.4, node 22 & debian trixie (#4889 - @swiffer)\n- fix: allow using different PostgreSQL port than default when using socket_dir connection (#4979 - @jaypark0006)\n- perf: use anti join for short-circuit evaluation when getting non streamed drives (#4990 - @swiffer)\n- feat: Add ulimit cap to prevent memory bloat in some misconfigured versions of Docker/containerd Hosts (e.g. on Debian 13) (#5025 - @JakobLichterfeld)\n- feat: officially support PostgreSQL 18 (#4890 - @swiffer)\n\n#### Build, CI, internal\n\n- build(deps): update flake.lock (#4911)\n- build(deps): bump @docusaurus/core from 3.8.1 to 3.9.1, @docusaurus/preset-classic from 3.8.1 to 3.9.1, bump dependencies in /website (#4977 - @JakobLichterfeld)\n- build(deps): bump actions/checkout from 4.2.2 to 5.0.0 (#4933)\n- build(deps): bump actions/cache from 4.2.3 to 4.3.0 (#4972)\n- build(deps): bump nixbuild/nix-quick-install-action from 32 to 34 (#4974)\n- build(deps): bump docker/login-action from 3.4.0 to 3.6.0 (#4975)\n- build(deps): bump crate-ci/typos from 1.34.0 to 1.37.0 (#4976)\n- build(deps): bump finch from 0.19.0 to 0.20.0 (#4929)\n- build(deps): update flake.lock (#4991)\n- build(deps): update flake.lock (#4997)\n- build(deps): bump actions/stale from 9.1.0 to 10.1.0 (#5019)\n- build(deps): bump @docusaurus/core from 3.9.1 to 3.9.2, @docusaurus/preset-classic from 3.9.1 to 3.9.2 and dependencies in /website (#5020)\n\n#### Dashboards\n\n- fix: charging stats now correctly calculate cost when set to miles (#4983 - @DrMichael)\n- perf: Optimize Grafana query for trip view to leverage indexes more effectively (#4964 - @jaypark0006)\n- feat: add shared buffers size to db info dashboard (#4989 - @swiffer)\n- fix: cast to numeric instead of integer when converting from km to miles to avoid rounding issues in all dashboards (#4986 - @swiffer)\n- fix: correctly determine charging phases in charge detail dashboard (#4988 - @swiffer)\n\n#### Translations\n\n- i18n: add spanish car location translation (#4892 - @jpizquierdo)\n- i18n: add missing italian translations, correct the gender of some words and use more uniform translations (#4920 - @giovaorama)\n- i18n: add thai car location translation (#4956 - @tomzt)\n- i18n: update Traditional Chinese translations with missing translations and to avoid PRC terms and ensure consistency across UI strings (#4995 - @occultsound)\n\n#### Documentation\n\n- docs: for new installs, pin postgres container to debian trixie to avoid collation version mismatch (#4901 - @swiffer)\n- docs: Update FreeBSD and Debian instructions to use GRAFANA_API_TOKEN for the dashboard writes (#4942 - @uqs)\n- docs: rename Home Assistant object_id to default_entity_id to be compliant with latest HA (#4980 - @MrPaulAR)\n- docs: explain MQTT in Readme via link to Wikipedia (#4985 - @DanCard)\n- docs(dev): provide guidelines for checking dependency updates before merging (#4969 - @JakobLichterfeld)\n- docs: add domain prefix to Home Assistant default_entity_id (#5014 - @gym22)\n- docs: add star history (#5024 - @JakobLichterfeld)\n- docs: bump Traefik to v3.5 and enable http3 in advanced guide (#5023 - @swiffer)\n- docs: add docs for volume mount change with PostgreSQL 18 (#4890 - @swiffer)\n\n## [2.1.1] - 2025-08-16\n\nAs always, there have been many improvements. We now use the latest version of Grafana (12.1.1) and have enhanced the database migration process to include the new ascent and descent values, allowing successful migration even when entries are faulty. Previously, this prevented the migration from succeeding for some users. This highlights the importance of user feedback. Such cases never occurred in our testing.\n\nEnjoy it.\n\n### New features\n\n- feat(nix): add idiomatic maintenance scripts (#4849 - @JakobLichterfeld)\n\n### Improvements and bug fixes\n\n- feat(webview): show offline duration in extended view on mobile as well to improve UX (#4848 - @JakobLichterfeld)\n- feat: use Grafana 12.1.0 (#4855 - @swiffer)\n- feat(nix): use datasources.settings.datasources to allow merging Grafana sources from multiple modules (#4870 - @JakobLichterfeld)\n- fix(nix): correctly set default Grafana dashboard path (#4870 - @JakobLichterfeld)\n- feat(nix): allow disabling default Grafana dashboard with setDefaultDashboard option (#4870 - @JakobLichterfeld)\n- fix: set descent and ascent to 0 when out of bounds (> 32767 meters) to ensure migration succeeds (#4882 - @swiffer)\n- feat: use Grafana 12.1.1 (#4886 - @swiffer)\n- feat(webview): update wording to View car location on Google Maps for clarity (#4875 - @JakobLichterfeld)\n\n#### Build, CI, internal\n\n- style(issue-template): typo fix in Unraid (#4842 - @JakobLichterfeld)\n- build(deps): update flake.lock (#4858)\n- build(deps): bump DeterminateSystems/update-flake-lock from 25 to 27 (#4864)\n- build(deps): bump react and react-dom from 19.1.0 to 19.1.1 in /website (#4865 - @JakobLichterfeld)\n- build(deps): bump ecto_sql from 3.12.1 to 3.13.2 (#4863)\n- build(deps): update flake.lock (#4867)\n- build(deps): bump phoenix_ecto from 4.6.4 to 4.6.5 (#4862)\n- build(deps): update flake.lock (#4881)\n- build(deps): update flake.lock (#4888)\n\n#### Dashboards\n\n#### Translations\n\n- i18n: fix de translation for car location link (#4844 - @JakobLichterfeld)\n\n#### Documentation\n\n- docs: add reference to idiomatic nix backup and restore scripts (#4849 - @JakobLichterfeld)\n- docs: add reference to idiomatic nix maintenance scripts (#4849 - @JakobLichterfeld)\n\n## [2.1.0] - 2025-07-21\n\nAs always, there are many improvements. We have introduced new database fields to store the total ascent and descent of a drive, which can be used in the drives and efficiency dashboards. This is a valuable addition for users who wish to analyze their driving patterns and performance in hilly areas, and it enhances the efficiency metrics.\nThe database will be migrated automatically to include these new fields. Depending on your host and the size of your database, this process may take some time. Please be patient and wait for the process to finish (depending on your host, it takes a few seconds to about a minute on a Raspberry Pi 3B+ with a 1 GB database).\n\nWe now use the latest Grafana 12.0.1, and you can now open a Google Maps link for the car's current location by clicking on the location marker icon in the webview to quickly navigate to your car's location, without having to open the Tesla app.\nAdditionally, we have fixed some issues with the consumption for drives with a positive SOC difference, and we have aligned the usage of time-range filters to resolve consumption gross issues in some edge cases.\nThe charging stats are now even more consistent. We now detect consecutive charges and exclude them from the charge / discharge stats (PV surplus charging: we've got you covered).\n\nEnjoy it.\n\n### New features\n\n- feat(webview): add map marker icon to open Google Maps link with car's current location (#4838 - @JakobLichterfeld)\n- feat: add total ascent & descent to the drive table to use in the drives dashboards (#4798 - @swiffer)\n- feat(nix): add idiomatic backup and restore scripts (#4835 - @JakobLichterfeld)\n\n### Improvements and bug fixes\n\n- fix(nix): update cldr hash (#4723 - @brianmay)\n- feat: use Grafana 12.0.0 (#4721 - @swiffer)\n- feat: use Grafana 12.0.1 (#4756 - @swiffer)\n- feat: preserve the folders when restoring dashboards (#4715 - @IngmarStein)\n- feat: use Grafana 12.0.1+security-01 (#4799 - @swiffer)\n- feat: use Grafana 12.0.2 (#4805 - @swiffer)\n- feat(mqtt): always publish healthy status and disable retain to prevent stale healthy status via mqtt (#4817 - @allivshits)\n- feat: use the k8s-style API introduced in Grafana v12 if using manual dashboard setup (#4764- @IngmarStein)\n- feat(db-check): allow beta / rc PostgreSQL versions for testing (#4795 - @swiffer)\n- feat: enhance HTTP limits for managing fleets with over 10 vehicles (#4607 - @jlestel)\n\n#### Build, CI, internal\n\n- build(deps): bump tzdata from 1.1.2 to 1.1.3 (#4713)\n- build(deps-dev): bump mock from 0.3.8 to 0.3.9 (#4712)\n- build(deps-dev): bump credo from 1.7.11 to 1.7.12 (#4711)\n- build(deps): bump crate-ci/typos from 1.31.1 to 1.31.2 (#4710)\n- fix(nix): update mix dependency hash in nix builds ([08fe0ac](https://github.com/teslamate-org/teslamate/commit/08fe0ac934176484c84fd4329c8d64925b6b0b97) - @JakobLichterfeld)\n- feat(nix): use nixos-25.05 (#4716 - @JakobLichterfeld)\n- build(deps): update flake.lock (#4716)\n- fix(nix): skip duplicate cldr download to fix build on darwin and improve reproducibility (#4763 - @JakobLichterfeld)\n- build(deps): bump DeterminateSystems/update-flake-lock from 24 to 25 (#4774)\n- build(deps): bump crate-ci/typos from 1.31.2 to 1.32.0 (#4775)\n- build(deps): bump castore from 1.0.12 to 1.0.14 (#4778)\n- build(deps): update flake.lock (#4772)\n- build(deps): bump phoenix_ecto from 4.6.3 to 4.6.4 (#4779)\n- build(deps): bump @docusaurus/preset-classic from 3.7.0 to 3.8.0 in /website (#4776)\n- build(deps): bump @docusaurus/core from 3.7.0 to 3.8.0, @docusaurus/preset-classic from 3.8.0 to 3.8.1, bump dependencies in /website (#4777 - @JakobLichterfeld)\n- build(deps): bump nixbuild/nix-quick-install-action from 30 to 32 (#4813)\n- build(deps): bump brace-expansion from 1.1.11 to 1.1.12 in /website (#4821)\n- build(deps): bump plug_cowboy from 2.7.3 to 2.7.4 (#4816)\n- build(deps): bump crate-ci/typos from 1.33.1 to 1.34.0 (#4814)\n- build(deps): bump timex from 3.7.11 to 3.7.13 (#4815)\n- build(deps): update flake.lock (#4828 - @JakobLichterfeld)\n- build(nix): update mix dependency hash in nix builds (#4828 - @JakobLichterfeld)\n- chore(issue-template): enhance bug report template with additional fields and guidance (#4827 - @JakobLichterfeld)\n- build(deps): bump on-headers from 1.0.2 to 1.1.0 and compression from 1.0.2 to 1.1.0 in /website (#4831)\n- sec(deps): override webpack-dev-server to version 5.2.1 to fix CVE-2025-30360 (#4833 - @JakobLichterfeld)\n- ci(coverage): explicitly set mix-env to test ([322c2a2](https://github.com/teslamate-org/teslamate/commit/322c2a26e61ce68d5b44cb7f0f1a7c1820e0164d) and [e6931ab](https://github.com/teslamate-org/teslamate/commit/e6931aba6809c457cc7224aec934b8e419d2c116) - @JakobLichterfeld)\n- fix(mix): add \"coveralls.github\" to preferred_cli_env to avoid missing task error in CI runs ([1c76994](https://github.com/teslamate-org/teslamate/commit/1c76994b563a4e61514a1cf62c310532775add46) - @JakobLichterfeld)\n- build(deps): update flake.lock (#4834)\n- chore(issue-template): update bug report template to include Unraid as unsupported installation method (#4829 - @JakobLichterfeld)\n\n#### Dashboards\n\n- fix: new image on home dashboard as old got removed from Tesla mediaserver (#4702 - @JakobLichterfeld, @swiffer)\n- feat: update image on home dashboard to juniper and back to dark (#4742 - @swiffer)\n- fix: consumption for drives with positive soc diff (#4746 - @swiffer)\n- fix: align usage of time-range filters to fix consumption gross issues in some edge cases (#4787 - @swiffer)\n- feat(dashboards-Charging-Stats): align query conditions and introduce a min duration filter applied to all panels to ensure consistent charging stats (#4791 - @swiffer)\n- feat(dashboards): reliably calculate charging costs per 100 km for shorter periods and align across trip, statistics and charging stats dashboards (#4791 - @swiffer)\n- feat(dashboards): detect consecutive charges and exclude from Charge / Discharge Stats (#4791 - @swiffer)\n- feat(dashboards): introduce slope-adjusted efficiency metric in drives dashboard (#4798 - @swiffer)\n\n#### Translations\n\n- i18n: create Catalan default.po (#4727 and #4728 - @pellix)\n- i18n: more descriptive italian localization (#4748 -@StarkITA)\n\n#### Documentation\n\n- docs: improvement to the Debian installation instructions (#4734 - @iustin)\n- docs: add note on accessory power functionality can prevent car sleep (#4737 - @darox)\n- docs: clarify pricing for Teslemetry (#4705 - @Bre77)\n- docs: add NixOS installation guide (#4768 - @JakobLichterfeld)\n- doc: add OpenSSF scorecard (#4819 - @JakobLichterfeld)\n- docs: streamline installation guides (#4829 - @JakobLichterfeld)\n- docs: add nix develop to run treefmt to support non nix direnv users (#4829 - @JakobLichterfeld)\n- docs: add Unraid installation and maintenance instructions (no support) (#4758, #4829 - @vypergts and @JakobLichterfeld)\n- docs: clarify the use of secure connection to access TeslaMate (#4829 - @JakobLichterfeld)\n- docs: reorder guides into advanced guides, categories FleetAPI documentation as config (#4829 - @JakobLichterfeld)\n- docs: clarify which installation methods are supported and which are not (#4829 - @JakobLichterfeld)\n- docs: mention dedicated version for MCU2 upgraded cars (#4829 - @JakobLichterfeld)\n\n## [2.0.0] - 2025-04-26\n\n**This is a breaking change release:** TeslaMate uses PostgreSQL as database, this is an external dependency and needs to be updated by yourself. We now require PostgreSQL 16.7 or 17.3 or higher as we are upgrading the bundled earthdistance extension to v1.2. TeslaMate will now fail to start if you are using an older version. Ensure to upgrade your database before upgrading TeslaMate. To upgrade PostgreSQL, you need to follow these instructions:\n\n- [Backup your data](https://docs.teslamate.org/docs/maintenance/backup_restore#backup)\n- [Upgrade PostgreSQL to postgres:17](https://docs.teslamate.org/docs/maintenance/upgrading_postgres) (Yes, you will have to erase your data, which is why you need your backup in the first place.)\n- [Upgrade TeslaMate to this version](https://docs.teslamate.org/docs/upgrading)\n- [Backup your data after the upgrade](https://docs.teslamate.org/docs/maintenance/backup_restore#backup)\n\n**Note for user which revoked permissions:** If the SUPERUSER privilege has been revoked after the initial (manual) installation, it must be temporarily granted for pending earthdistance migrations to succeed. The privilege can then be safely revoked.\n\nAs always, there are also many improvements. The webview now shows the TPMS values in the low pressure tooltip. We use the latest Grafana 11.6.1 and have improved the battery health dashboard and aligned the range calculation through the dashboards. Additionally time zone handling has been improved and the date formats are now based on the browser locale.\n\nEnjoy it.\n\n**Note for contributors:** The default branch was renamed to `main`. Please update your local repository accordingly (see GitHub hint when visiting [teslamate-org/teslamate](https://github.com/teslamate-org/teslamate) or [GitHub documentation](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch#updating-a-local-clone-after-a-branch-name-changes) for more information).\n\n### Breaking Changes\n\n- feat: check Postgres version on startup, require 16.7 / 17.3, update earthdistance extension (#4648 - @swiffer)\n\n### New features\n\n- feat: show tpms value to the low pressure tooltip in webview (#4654 - @NirKli)\n\n### Improvements and bug fixes\n\n- fix(nix): non-recursive provider for ../grafana/dashboards (#4680 - @swiffer)\n- feat: use Grafana 11.6.1 (#4662 - @swiffer)\n\n#### Build, CI, internal\n\n- build(deps): bump image-size from 1.2.0 to 1.2.1 in /website (#4622)\n- ci: switch to cache-nix-action as Magic Nix Cache is deprecated (#4626 - @JakobLichterfeld)\n- build(deps): update flake.lock (#4603)\n- build(deps): bump crate-ci/typos from 1.30.0 to 1.31.1 (#4611)\n- build(deps): bump docker/login-action from 3.3.0 to 3.4.0 (#4612)\n- build(deps): bump actions/cache from 4.2.2 to 4.2.3 (#4613)\n- build(deps): bump tesla from 1.13.2 to 1.14.1 (#4616)\n- ci(sec): remove pull_request_target workflow triggers to improve sec even further, the downside is that test images are now only created for repo's own PRs (#4637 - @JakobLichterfeld / Thanks to @Firebasky for responsibly disclosing the vulnerability)\n- ci: fix ghcr build ([..ddf85e6](https://github.com/teslamate-org/teslamate/commit/ba35f417014e6be742ee2b0713cfa7876ddf85e6) - @JakobLichterfeld)\n- ci: ensure ghcr images build correctly even if branch contains backslash (#4655 - @JakobLichterfeld)\n- ci: skip ghcr build for PRs from outside repo (#4660 and [462b568](https://github.com/teslamate-org/teslamate/commit/462b5680abbfbdfd26f028d88f7a62f4ae4183cd) - @JakobLichterfeld)\n- build(deps): bump estree-util-value-to-estree in /website (#4641)\n- build(deps): update flake.lock (#4653)\n- fix(nix): update mix dependency hash in nix builds ([3d08431](https://github.com/teslamate-org/teslamate/commit/3d08431ee3de0eaf3d3045aa0018c687627c4dac) - @JakobLichterfeld)\n- ci(dependabot): add ignore rules for path-based dependencies (#4666 - @JakobLichterfeld)\n- sec: upgrade esbuild to 0.25.2 and esbuild-sass-plugin to 3.3.1 to avoid GHSA-67mh-4wv8-2f99 (#4669 - @JakobLichterfeld)\n- build(deps): bump http-proxy-middleware from 2.0.7 to 2.0.9 in /website (#4670)\n- build(deps): bump phoenix_html from 4.2.0 to 4.2.1 (#4667)\n- build(deps): bump ex_cldr from 2.40.2 to 2.42.0 (#4615)\n- build(deps): bump react from 18.3.1 to 19.1.0 and docusaurus/core from 3.4.0 to 3.7.0 in /website (#4618 - @JakobLichterfeld)\n- build(deps): bump phoenix_ecto from 4.6.2 to 4.6.3 (#4333)\n- build(deps): update flake.lock (#4674)\n- fix(nix): update mix dependency hash in nix builds (#4695 - @JakobLichterfeld)\n- chore: rename branch to main (#4700 - @JakobLichterfeld and @adriankumpf)\n- build(deps-dev): bump phoenix_live_reload from 1.5.3 to 1.6.0 (#4699)\n- build(deps): bump tortoise311 from 0.12.0 to 0.12.1 (#4698)\n- build(deps): bump nix-community/cache-nix-action from 6.1.2 to 6.1.3 (#4696)\n- build(deps): bump floki from 0.36.3 to 0.37.1 (#4697)\n\n#### Dashboards\n\n- fix: improve calc for usable (now) in battery health dashboard (#4644 - @swiffer)\n- feat: make use of car filter, add timefilter in locations dashboard (#4647 - @swiffer)\n- fix: use same rated range calculation in updates dashboard as in battery health dashboard (#4682 - @swiffer)\n- fix: explicitly set height of home dashboard background image based on current layout & grafana css (#4681 -@swiffer)\n- fix: set $\\_\\_timezone explicitly in dashboards to ensure truncation is done with respect to the Grafana timezone (#4684 - @swiffer)\n- fix: issues when using browser locale for date formats (#4662 - @swiffer)\n- fix: widens Date Columns to fully show date strings formatted in US locale (#4662 - @swiffer)\n- feat: add duration time to charges details dashboard (#4677 - @jheredianet)\n\n#### Translations\n\n#### Documentation\n\n- chore(issue-template): add PostgreSQL version input and checkbox for latest version check in bug report template (#4643 - @JakobLichterfeld)\n- docs: allow to add energy added to the Home Assistant's Energy tab to measure how much energy each session uses (#4659 - @alexsapran)\n- docs: update changelog with breaking changes description (#4691 - @JakobLichterfeld)\n\n## [1.33.0] - 2025-03-28\n\nAs always, there are many improvements.\n\nWe now use Grafana 11.6.0 which was release the last days, improved the logging and state transitions, added a new dashboard for database information and improved other dashboards. We also added a new section to the documentation about the Entity Relationship Model (ERM) of TeslaMate. This is a great help for developers who want to understand the data model of TeslaMate and how to extend it.\n\nEnjoy it.\n\n### New features\n\n### Improvements and bug fixes\n\n- fix(nix): wait for mosquitto to start before starting teslamate (#4419 - @brianmay)\n- feat: use Grafana 11.4.0 (#4299 - @swiffer)\n- feat: improve logging messages (#4467 - @micves and @brianmay)\n- feat: optimize state transitions (#4473 - @micves and @brianmay)\n  - don't try to sleep if power > 0\n  - cancel an ongoing suspended state/trying to sleep and go back to online\n  - add conditions to enter charging\n- feat: support accessing PostgreSQL on unix domain sockets (#4456 - @j-baker)\n- fix(nix): temporarily disable browser locale in date formats for nix deployment as well (#4480 - @swiffer)\n- feat: Grafana 11.5.0 (#4509 - @swiffer)\n- feat: Grafana 11.5.2 (#4551 - @swiffer)\n- fix(nix): update mix dependency hash in nix builds. (#4577 - @weiren2)\n- feat: Grafana 11.6.0 (#4570 - @swiffer)\n\n#### Build, CI, internal\n\n- build(deps): bump castore from 1.0.9 to 1.0.10 (#4414)\n- build(deps): bump @docusaurus/preset-classic from 3.5.2 to 3.6.3 in /website (#4412)\n- build(deps): bump path-to-regexp from 1.8.0 to 1.9.0 in /website (#4424)\n- build(deps): bump crate-ci/typos from 1.27.0 to 1.28.1 (#4411)\n- build(deps): bump tesla from 1.13.0 to 1.13.2 (#4416)\n- build(deps): bump postgrex from 0.19.1 to 0.19.3 (#4415)\n- build(nix): switch to nixos-24.11 (#4420 - @brianmay)\n- build(deps): update flake.lock (#4427)\n- fix: update mix deps hash to fix build error on recent NixOS 24.11 update (#4428)\n- build(deps): bump path-to-regexp and express in /website (#4433)\n- build(deps): update flake.lock (#4440)\n- build(deps): bump actions/cache from 4.1.2 to 4.2.0 (#4465)\n- build(deps): bump phoenix from 1.7.14 to 1.7.18 (#4462)\n- build(deps-dev): bump dialyxir from 1.4.4 to 1.4.5 (#4460)\n- build(deps): bump ex_cldr from 2.40.1 to 2.40.2 (#4461)\n- build(deps): bump crate-ci/typos from 1.28.1 to 1.29.0 (#4464)\n- ci: update actions/cache to v4.2.0 ([79107d5](https://github.com/teslamate-org/teslamate/commit/79107d53b7712934587bbe40c503e63d5dd9f122) - @JakobLichterfeld)\n- build(deps): bump DeterminateSystems/magic-nix-cache-action from 8 to 9 (#4515)\n- build(deps): bump actions/stale from 9.0.0 to 9.1.0 (#4516)\n- build(deps): bump crate-ci/typos from 1.29.0 to 1.29.5 (#4514)\n- build(deps-dev): bump excoveralls from 0.18.3 to 0.18.5 (#4524)\n- build(deps-dev): bump credo from 1.7.8 to 1.7.11 (#4523)\n- build(deps): bump @docusaurus/preset-classic from 3.6.3 to 3.7.0 in /website (#4518)\n- build(deps): bump serialize-javascript from 6.0.1 to 6.0.2 in /website (#4548)\n- build(deps): update flake.lock (#4455)\n- style(markdownlint): allow 'details', 'summary', and 'TabItem' elements ([d5b1a55](https://github.com/teslamate-org/teslamate/commit/d5b1a55007eefedd5d852ecd50d67b8c4d36faa5) - @JakobLichterfeld)\n- style(environment_variables): remove multiple whitespaces ([603ff82](https://github.com/teslamate-org/teslamate/commit/603ff824b052b4465fcce9fe77e5e40ad586c07a) - @JakobLichterfeld)\n- style(docs): fix line length fenced-code-style, no bare url links, multiple whitespaces, alt text, header style ([1972584](https://github.com/teslamate-org/teslamate/commit/1972584d8f9d11c2f640de046a8e9fd47b43c4fb) - @JakobLichterfeld)\n- build(deps): bump actions/cache from 4.2.0 to 4.2.2 (#4564)\n- build(deps): bump crate-ci/typos from 1.29.5 to 1.30.0 (#4563)\n- build(deps): bump castore from 1.0.11 to 1.0.12 (#4565)\n- build(deps): bump plug_cowboy from 2.7.2 to 2.7.3 (#4566)\n- build(deps): bump prismjs from 1.29.0 to 1.30.0 in /website (#4582)\n- build(deps): bump @babel/runtime from 7.26.0 to 7.26.10 in /website (#4589)\n- build(deps): bump @babel/helpers from 7.26.7 to 7.26.10 in /website (#4588)\n- build(deps): bump @babel/runtime-corejs3 in /website (#4587)\n- build(deps): update flake.lock (#4562)\n\n#### Dashboards\n\n- fix: for battery health dashboard erroring out if no charge data has been collected so far (#4448 - @swiffer)\n- fix: url for releases in home dashboard (#4452 -@FLX3009)\n- feat: add 0 as lower bound for gauge to ensure proper scaling (#4498 - @swiffer)\n- feat(dashboards): improve elevation scale in drive stats (#4546 - @swiffer)\n- feat: add Database Information Dashboard (#4578 - @jheredianet)\n\n#### Translations\n\n- feat: Translate remaining Spanish sentences (#4529 - @jheredianet)\n\n#### Documentation\n\n- doc: bump elixir based on availability (#4431 - @swiffer)\n- doc: align node req with what is used in CI (#4430 - @swiffer)\n- doc: added missing topic \"charging_state\" in mqtt doc (#4466 - @Beme99)\n- docs: Grafana 11.4 for manual install on FreeBSD (#4474 - @swiffer)\n- doc: Fixing typo for sensor psi calculation (#4470 - @Phazz)\n- doc: Simplify Home Assistant sensors, add device_class to allow changing measurement units (#4472 - @longzheng)\n- docs: add reindexing instructions for database maintenance to improve performance in case of index bloat due to frequent updates or deletions (#4558 and #4574 - @jheredianet)\n- docs: Update projects using TeslaMate (#4573 - @jheredianet)\n- docs: fix and rearrange screenshot links (alphabetical) (#4580 - @swiffer)\n- docs: enhance TeslaFi import documentation with updated Python script for bulk data export (#4575 - @TheLinuxGuy and @JakobLichterfeld)\n- docs: add Entity Relationship Model section to development documentation (#4586 - @DrMichael and @JakobLichterfeld)\n\n## [1.32.0] - 2024-11-23\n\nAs always, there are many improvements. The focus has been on quality of life improvements and standardization across all dashboards. Enjoy it.\n\n### New features\n\n### Improvements and bug fixes\n\n- feat: use Grafana 11.2.3 (#4338 - @swiffer)\n- feat: Update marketing name to recognize Model S LR+ (#4370 - @cwanja)\n- fix(nix): bump hash for dependencies (#4371 - @brianmay)\n\n#### Build, CI, internal\n\n- ci: remove unknown flag --ref for gh cache delete in cleanup_caches workflow ([3a515df](https://github.com/teslamate-org/teslamate/commit/3a515df5aa400139acf8ef638e5ae37339c553cf) - @JakobLichterfeld)\n- build(deps): bump actions/checkout from 4.2.1 to 4.2.2 (#4340)\n- build(deps): bump actions/cache from 4.0.2 to 4.1.2 (#4341)\n- build(deps): bump cachix/install-nix-action from 27 to 30 (#4342)\n- build(deps): bump tesla from 1.12.1 to 1.13.0 (#4335)\n- build(deps): bump floki from 0.36.2 to 0.36.3 (#4336)\n- feat: add CONTRIBUTING file to exclusion lists for treefmt (#4359 - @JakobLichterfeld)\n- ci: create PR to update flake.lock every saturday (#4372 - @brianmay)\n- ci(fix): correct permissions for flake.lock updates ([c673ef3](https://github.com/teslamate-org/teslamate/commit/c673ef363ba73ad076680d71ef54bd549582d41f)- @JakobLichterfeld)\n- ci: update flake.lock workflow with appropriate labels for created pr's ([54c41c1](https://github.com/teslamate-org/teslamate/commit/54c41c1fe66664b62d817502d1b2bdb244b70dc2) - @JakobLichterfeld)\n- build(deps): bump cross-spawn from 7.0.3 to 7.0.6 in /website (#4391)\n- build(deps): bump crate-ci/typos from 1.26.0 to 1.27.0 (#4344)\n- build(deps): update flake.lock (#4381)\n\n#### Dashboards\n\n- fix: allow editing of dashboards - [changes will be overwritten on update](https://grafana.com/docs/grafana/latest/administration/provisioning/#making-changes-to-a-provisioned-dashboard) (#4338 - @swiffer)\n- fix: ensure max speed panels are converted according to length unit setting in drive stats dashboard (#4338 - @swiffer)\n- perf: speed up queries used to calculate max speed in drive stats dashboard (#4338 - @swiffer)\n- feat: add a welcome dashboard (#4338 - @swiffer)\n- fix: Charges Dashboard -> Range added renamed to Ø Charge rate (#4349 - @swiffer)\n- fix: Axis Labels for XY Chart in Battery Health and reduces Query count in Visited (#4364 - @swiffer)\n- feat: Dashboard refinements and standardization (#4367 - @swiffer)\n- feat: add Detailed Energy Use to drive-details (#4386 - @jameskitt616)\n\n#### Translations\n\n#### Documentation\n\ndocs: add contributing guidelines link for GitHub (#4345 - @JakobLichterfeld)\ndocs: update Home Assistant integration documentation with configuration URL and model name hints (#4359 - @JakobLichterfeld)\ndocs: Remove availability from Home Assistant MQTT sensors, as it can be misleading and prevent sensors from receiving updated values (#4362 - @longzheng)\ndocs: Introducing TeslaMate Guru on Gurubase.io (#4390 - @kursataktas)\n\n## [1.31.1] - 2024-10-29\n\nThis release primarily prevents beam.smp from overloading the CPU on ARM hosts. It also includes a number of other bug fixes and performance improvements. Enjoy it.\nPlease also note: [v1.31.0 Release Notes](https://github.com/teslamate-org/teslamate/releases/tag/v1.31.0)\n\n### New features\n\n### Improvements and bug fixes\n\n- fix: use elixir-1.17.3-otp-26 to avoid beam.smp chewing CPU on arm (#4319 - @brianmay, @swiffer and @JakobLichterfeld)\n\n#### Build, CI, internal\n\n- ci(fix): update cleanup_caches.yml to use new cache management commands and fix permissions ([d6793ce](https://github.com/teslamate-org/teslamate/commit/d6793ce5717687b9e984067bf4c208415e15fdac), [b0b694f](https://github.com/teslamate-org/teslamate/commit/b0b694fc8c3c45036aafda45200f3b0d068a2f50), [16bb503](https://github.com/teslamate-org/teslamate/commit/16bb5032c7d81cb86e76cc19662e3332456291a0) - @JakobLichterfeld)\n- ci: Add workflow to manually cleanup largest 100 caches ([dad7e3d](https://github.com/teslamate-org/teslamate/commit/dad7e3dea0ae1d799398bf1b31a0d598eff784bf), [523419d](https://github.com/teslamate-org/teslamate/commit/523419d35a610c7b06bbf7e9c2edd105e7d089aa) - @JakobLichterfeld)\n\n#### Dashboards\n\n- perf: add ideal_battery_range_km as query condition (#4305 - @swiffer)\n- fix: re-add missing changes from pr 4124 (#4310 - @swiffer)\n- feat: add max speed & speed histogram to drive stats (#4253 - @js94x)\n- fix: remove convert_km from kwh calculations in timeline dashboard (#4318 - @swiffer)\n- fix: ensure dutch-tax dashboard is not repeating multiple times per car (row and table) (#4317 - @swiffer)\n\n#### Translations\n\n- Update default.po for thai (#4312 - @tomzt)\n- Spanish translation of missing items (#4320 -@ferminmg)\n\n#### Documentation\n\n- docs: fix ghcr image path in contributing guide (#4309 - @swiffer)\n\n## [1.31.0] - 2024-10-27\n\nAs always, lots of improvements. The focus has been on performance improvements, especially on slow HW like Raspberry Pi 3B+. We achieved 240x speed improvements in several dashboards :rocket: And we welcomed @swiffer to the TeslaMate-Org team :wave: And much, much more. Enjoy it.\n\n**Regarding PostgreSQL 17:** TeslaMate uses PostgreSQL as database, this is an external dependency and needs to be updated by yourself. Although TeslaMate currently runs fine with PostgreSQL 14+ we strongly recommend upgrading to the latest supported version. We recommend that you do this as follows:\n\n- [Backup your data](https://docs.teslamate.org/docs/maintenance/backup_restore#backup)\n- [Upgrade TeslaMate to this version](https://docs.teslamate.org/docs/upgrading)\n- [Backup your data after the upgrade](https://docs.teslamate.org/docs/maintenance/backup_restore#backup)\n- [Upgrade PostgreSQL to postgres:17](https://docs.teslamate.org/docs/maintenance/upgrading_postgres) (Yes, you will have to erase your data, which is why you need your backup in the first place.)\n\n**Additional info:** In some very rare cases with very old installations of TeslaMate (from 2019) we have observed performance issues due to missing indexes. These should normally be added with our automatic migrations. If you think your installation may be missing some indexes, see #4201 for the corrective SQL command.\n\n### New features\n\n### Improvements and bug fixes\n\n- fix: 401 on direct Fleet API calls (#4095 - @jlestel)\n- feat: add support for PostgreSQL 17 (#4231 - @swiffer)\n- fix: add nix module option to specify postgres package (#4227 - @brianmay)\n- perf: limit positions to set elevation for to last 10 days (#4228 - @swiffer)\n- feat: add treefmt-nix to nix flake (#4219 - @JakobLichterfeld)\n- feat: use Grafana 11.0.6-security-01 (#4279 - @swiffer)\n\n#### Build, CI, internal\n\n- ci: pin GitHub action dependencies to protect against supply chain attacks (#4076 - @JakobLichterfeld)\n- chore: correct comment for pinned Docker login-action to version 3.2.0 (#4120 - @JakobLichterfeld)\n- build(deps): bump erlef/setup-beam from 1.18.0 to 1.18.1 (#4116)\n- build(deps): bump docker/login-action from 3.2.0 to 3.3.0 (#4115)\n- chore: update PostgreSQL to version 16 in flake.nix (#4135- @JakobLichterfeld)\n- build(deps): bump webpack from 5.92.1 to 5.94.0 in /website (#4171)\n- build(deps): bump micromatch from 4.0.5 to 4.0.8 in /website (#4174)\n- chore: Update tzdata to version 1.1.2 and mimerl to version 1.3.0 (#4205 - @JakobLichterfeld)\n- build(deps): bump send and express in /website (#4203)\n- ci: enable dependabot for mix and npm (#4207 - @JakobLichterfeld)\n- build(deps): bump @docusaurus/preset-classic from 3.4.0 to 3.5.2 in /website (#4210)\n- build(deps): bump phoenix_ecto from 4.4.3 to 4.6.2 (#4213)\n- build(deps): bump jason from 1.4.1 to 1.4.4 (#4216)\n- build(deps): bump classnames from 2.3.2 to 2.5.1 in /website (#4211)\n- ci: add treefmt as code formatting multiplexer (#4219 - @JakobLichterfeld)\n- ci(refactor): use composite action to avoid duplication in elixir workflow (#4219 - @JakobLichterfeld)\n- ci: prevent workflow runs for certain conditions and allow scheduled runs (#4219 - @JakobLichterfeld)\n- ci(refactor): use reusable workflow to check paths (#4219 - @JakobLichterfeld)\n- ci(refactor): use reusable workflows for streamlined DevOps pipeline (#4219 - @JakobLichterfeld)\n- ci(refactor): allow ghcr_build parallel to elixir test (#4219 - @JakobLichterfeld)\n- ci: ensure proper linting via treefmt (#4219 - @JakobLichterfeld)\n- doc: update CI badge URL for devops workflow (#4219 - @JakobLichterfeld)\n- ci(fix): handle empty path filter output (#4219 - @JakobLichterfeld)\n- fix: avoid the need for impure for devenv (#4245 - @brianmay)\n- ci(fix): run ghcr build workflow only for specific conditions (#4219 - @JakobLichterfeld)\n- ci: remove branch restriction for check_paths workflow to increase sec (#4219 - @JakobLichterfeld)\n- build(deps): bump actions/checkout from 4.1.7 to 4.2.1 (#4262)\n- ci(fix): only run ghcr build in DevOps workflow on own repo ([022b173](https://github.com/teslamate-org/teslamate/commit/022b173430221d385479f4ec9d91d8ccffbfe7b9) - @JakobLichterfeld)\n- ci: pin ubuntu-24.04 as runner OS ([40dab3e](https://github.com/teslamate-org/teslamate/commit/40dab3e2a978b8a867f1159626d4c157ccab6c56) - @JakobLichterfeld)\n- ci: cleanup caches when pr is closed ([75cfc7c](https://github.com/teslamate-org/teslamate/commit/75cfc7cdd4b8f83f247211dc7fc5c5cd433bf746) - @JakobLichterfeld)\n- ci(fix): run ghcr build in DevOps workflow for forks ([688147e](https://github.com/teslamate-org/teslamate/commit/688147e2cf3fb5b55e702185a97a4a4ebb14d7ca) - @JakobLichterfeld)\n- ci(fix): correct syntax in ghcr_build workflow for workflow_call ([9e6a275](https://github.com/teslamate-org/teslamate/commit/9e6a2758d5ff21604976184ad69befc1c546e600) - @JakobLichterfeld)\n- ci(fix): run ghcr build as separate workflow to fix permission issues with forks ([0410593](https://github.com/teslamate-org/teslamate/commit/0410593850cde00e8f201a9b7d6009f0581ed43c) - @JakobLichterfeld)\n- build(deps-dev): bump credo from 1.7.1 to 1.7.8 (#4238)\n- build(deps): bump crate-ci/typos from 1.22.9 to 1.26.0 (#4261)\n- refactor: Cleanup nix code (#4265 - @scottbot95)\n- build(deps): bump elixir from 1.16.2-otp-26 to 1.17.2-otp-27 (#4296 - @JakobLichterfeld)\n- build(deps): bump http-proxy-middleware from 2.0.6 to 2.0.7 in /website (#4303)\n- feat: update to Phoenix HTML 4.1, bump dependencies (#4277 - sdwalker and @JakobLichterfeld)\n\n#### Dashboards\n\n- Improve Battery Health dashboard estimations on rated range (#4074 - @jheredianet)\n- Update charges.json: range added per hour (#4089 - @DrMichael)\n- small visual distinguish between AC & DC charging in charges dashboard and unification of the DC coloring in all dashboards (#4124 - @stauffenberg2020)\n- Improve drive stats (#4148 - @jheredianet)\n- Improve drives dashboard (#4146 - @jheredianet)\n- Odometer in charges (#4144 - @jheredianet)\n- Update charging-stats for handling suc cost mixed with AC charge on TWC (#4137 - @cyberden)\n- Fix the issue of failing to restore efficiency dashboard (#4153 - @ghostiee)\n- Improve rounding to month / weeks / days in Updates \"Since Previous Update\" column (#4164 - @swiffer)\n- feat: Improve cost filter on Charges dashboard to show charges with negative cost as well (#4179 - @jheredianet)\n- feat: display vehicle VIN as a fallback for vehicle name on grafana dashboards (#4198 - @arcastro)\n- feat: Add Moving Average / Percentiles to Charge Level dashboard & bucket data to support longer periods (#4200 - @swiffer)\n- increase max battery charge gauge threshold to 101 in case of LFP (#4191 - @neothematrix)\n- multiple cars, same name, add VIN next to name (#4230 - @swiffer)\n- json_build_object instead of concat in battery-health (#4229 - @swiffer)\n- perf: fix skipping streaming data in charging stats (#4252 - @swiffer)\n- perf: improvements drive stats (#4258 - @swiffer)\n- fix: for drives not showing if duration < 1 minute (#4284 - @swiffer)\n- feat: add max speed in drives dashboard (#4284 / #4267 - @js94x)\n- perf: exclude streaming data when getting battery level (#4286 - @swiffer)\n- perf: exclude streaming data in visited dashboard (#4287 - @swiffer)\n- fix: weighted average calculation for consumption in drives dashboard (#4289 - @swiffer)\n- perf: improvement in charge level (#4301 - @swiffer)\n- perf: improvement and deprecated syntax removal (#4304 - @swiffer)\n\n#### Translations\n\n- Adding missing Swedish translation (#4097 - @tobiasehlert)\n\n#### Documentation\n\n- doc: Add initial author and list of contributors to README.md (#4084 - @JakobLichterfeld)\n- doc: add steps to the guide regarding how to switch to Fleet API (#4103 - @yangiak)\n- doc: align TPMS Pressure naming in sensor config to match UI config for home assistant (#4104 - @helmo)\n- doc: Update screenshots and rearrange links (#4151 - @jheredianet)\n- doc: fix markdownlint warnings in fleet API documentation (#4173 - @JakobLichterfeld)\n- doc: clarify using fleet API has lots of drawbacks (#4173 - @JakobLichterfeld)\n- docs: fix Home Assistant MQTT sensor JSON templates warnings (#4257 - @longzheng)\n- docs: add recommended RAM size (#4278 - @JakobLichterfeld)\n- docs: add best practice section to contribution guide (#4288 - @swiffer)\n\n## [1.30.1] - 2024-07-10\n\nThis is a hotfix release to work around the map fit problem in the new Upstream Grafana. As soon as a new Grafana version is available, we will update again.\n\n### Improvements and bug fixes\n\n- downgrade grafana until maps issue in upstream grafana is resolved (#4071 - @swiffer)\n\n#### Build, CI, internal\n\n- ci: fix coverage report env variable (#4066 - @JakobLichterfeld)\n\n#### Dashboards\n\n- Configure Grafana to use browser language / date formats (#4064 - @swiffer)\n- Fix hard coded information (timezone and orgId) (#4056 - @jlestel)\n\n#### Translations\n\n- update zh_hans localized string (#4073 - @mrgaolei)\n- Update default.po for thai (#4072 - @tomzt)\n\n## [1.30.0] - 2024-07-07\n\nAs always with many improvements. Cleaner LFP battery handling, 100x speed improvement in dashboards and much, much more. Enjoy it.\n\n### New features\n\n- Track open/close states for individual doors (#3962 - @SaswatPadhi), new MQTT values see [documentation](https://docs.teslamate.org/docs/integrations/mqtt)\n- Allow Fleet API users to change client_id (#3984 - @jlestel)\n- Customize intervals between vehicle_data calls (#3940 - @jlestel)\n- feat: Create NixOS module (#3998 - @scottbot95)\n- feat: Add ability to enable and disable data collection for cars (#3993 - @mark3-dev)\n- publish center_display_state to mqtt (#3813 - @Atrox), new MQTT values see [documentation](https://docs.teslamate.org/docs/integrations/mqtt)\n- feat: add LFP Battery setting for car settings (#4007 -@cwanja)\n- Add icon to summary when Sentry Mode is triggered and recording (#4043 -@kolaCZek)\n\n### Improvements and bug fixes\n\n- Update vehicle.ex with marketing name for Model Y Long Range RWD (#3989 - @stefanlange)\n- feat: use Grafana 11.1.0 (#4019 - @swiffer)\n- Update vehicle.ex with marketing name for Model Y SR (#4042 - @kolaCZek)\n- feat: update breadcrumb links to use Phoenix path helpers (#4052 - @JakobLichterfeld)\n\n#### Build, CI, internal\n\n- build(deps): bump crate-ci/typos from 1.21.0 to 1.22.9 (#4021)\n- build(deps): bump express from 4.18.2 to 4.19.2 in /website (#3790)\n- chore: update @docusaurus/core and @docusaurus/preset-classic dependencies to v3.4.0 and react and react-dom to 18.3.1 (#4046 - @JakobLichterfeld)\n- build: specify node.js version for Netlify in base dir as latest lts major version (#4046 - @JakobLichterfeld)\n- style: fix single quoted string in car_live (#4049 - @JakobLichterfeld)\n\n#### Dashboards\n\n- Improve drive details (#4004 - @jheredianet)\n- Improve visualizations on Battery Health dashboard (#4005 - @jheredianet)\n- Update drives.json: show drives with duration=0 but distance>0 (#3867 - @DrMichael)\n- Improve performance of timeline dashboard (#4019 - @swiffer)\n- Fix detection of missing data (geofence condition) in timeline dashboard (#4019 - @swiffer)\n- Fix time filter for links to trip dashboard in timeline dashboard (#4019 - @swiffer)\n- Reduce number of queries executed in overview dashboard to increase performance (#4019 - @swiffer)\n- Ensure Index usage when getting temperatures in overview dashboard (#4019 - @swiffer)\n- re-enable time picker by default in drive-details, charge-details dashboards (#3985)\n- Improve \"Charges\" dashboard (#4031 - @jheredianet)\n- Improve \"Drives\" dashboard (#4033 - @jheredianet)\n- Update overview.json: Add Distance (#4034 - @DrMichael)\n- Update overview.json: fix Net (#4045 - @DrMichael)\n- update overview dashboard to fix units for energy consumption (#4048 - @JakobLichterfeld)\n- use lfp_battery setting in dashboards & speed up updates dashboard (#4051 - @swiffer)\n\n#### Translations\n\n- feat: update German translations missing messages (#4054 - @JakobLichterfeld)\n\n#### Documentation\n\n- doc: remove outdated, unsupported, unmaintained portainer doc (#3972 - @JakobLichterfeld)\n- doc: fix MMM-Teslamate and ha-addon-teslamate project links (#3973 - @olexs)\n- doc: update the Contributor's Guide with the latest requirements (#4017 - @JakobLichterfeld)\n- doc: Documentation for new endpoint changes (#3978 - @jlestel)\n- doc: Add Grafana VS Code extension documentation (#4025 - @JakobLichterfeld)\n- doc: fix markdown linter warnings in faq (#4046 - @JakobLichterfeld)\n- doc: fix typo in MQTT location JSON format (#4047 - @JakobLichterfeld)\n\n## [1.29.2] - 2024-06-18\n\nThis release improve TeslaMate behavior on Tesla API rate limits, which occur from time to time. We respect the retry-after header on 429 response code to not hammer the API unnecessarily in these cases.\n\n### New features\n\n- feat: Dynamic endpoints and token to use official Tesla API (self-hosted or from third party provider) (#3903 - @jlestel)\n\n### Improvements and bug fixes\n\n- fix: Update statistics.json: change back uid (#3907 -@DrMichael)\n- feat: Update TeslaFi importer to accept newer export formats (#3431 - @ithinuel)\n- feat: Upgrade PostgreSQL to v16 (#3884 -@enoch85)\n- feat: Respect Retry-After header on 429 response code (#3943 - @jlestel)\n- feat: use Grafana 11.0.0 (#3895 - @swiffer)\n\n#### Build, CI, internal\n\n- ci: Upgrade PostgreSQL to v16 in elixir workflow (#3916 - @JakobLichterfeld)\n- build(deps): bump docker/login-action from 3.1.0 to 3.2.0 (#3933)\n- build(deps): bump elixir from 1.16.1-otp-26 to 1.16.2-otp-26 (#3935 - @JakobLichterfeld)\n- build(deps): bump braces from 3.0.2 to 3.0.3 in /website #3967\n\n#### Dashboards\n\n- Remove A lot of empty space on the drive graph (#3927 - @jheredianet)\n- Add more ways to recognize Supercharger locations (#3863 -@woyteck1)\n- Projected Range fix (using usable_battery_level) (#3859 -@woyteck1)\n- Update and fix timeline dashboard (#3951 -@jheredianet)\n- Remove A lot of empty space on the drive graph (#3950 -@jheredianet)\n- Integrate LFP specific dashboards into regular dashboards (#3966 - @swiffer)\n- Export all Dashboards via Grafana 11.0.0 (#3971 - @swiffer)\n\n#### Translations\n\n- feat: Update default.po for Thai translation (#3906, #3945 - @tomzt)\n\n#### Documentation\n\n- doc: update backup path location to current directory to work around no write access to placeholder directory issue (#3908 - @JakobLichterfeld)\n- doc: Update MQTT examples of location/active_route (#3919 - @longzheng)\n- doc: Update HomeAssistant docs to use new MQTT values (#3923 - @longzheng)\n- doc: Add network flows that should be authorized (#3886 - @fl42)\n- doc: Update projects.md with new MMM (#3953 - @top-gun)\n\n## [1.29.1] - 2024-05-20\n\nsame as 1.29.0 but reverted: \"Dynamic endpoints and token to use official Tesla API (self-hosted or from third party provider) (#3866 - @jlestel)\" as it was breaking backwards compatibility\n\n## [1.29.0] - 2024-05-20\n\n### New features\n\n- Publish extra active_route fields to mqtt output (#3789 - @brianmay)\n- Dynamic endpoints and token to use official Tesla API (self-hosted or from third party provider) (#3866 - @jlestel)\n\n### Improvements and bug fixes\n\n- fix: errors from Timex.Timezone.local() during switchover to DST (#3848 - @dyxyl)\n\n#### Build, CI, internal\n\n- build(deps): bump dorny/paths-filter from 3.0.1 to 3.0.2 (#3799)\n- build(deps): bump docker/login-action from 3.0.0 to 3.1.0 (#3798)\n- build(deps): bump grafana/grafana from 10.4.0 to 10.4.1 in /grafana (#3800)\n- build(deps): bump grafana/grafana from 10.4.1 to 10.4.2 in /grafana (#3876)\n- ci: update typos false positive list (#3808 - @JakobLichterfeld)\n- build(deps): bump docker/login-action from 3.0.0 to 3.1.0 in custom action ([b9f1f8b](https://github.com/teslamate-org/teslamate/commit/b9f1f8b956c7fb531321a2d3d875efffd4be6ead) - @JakobLichterfeld)\n- ci: pin crate-ci/typos action to version v1.20.1 ([bd50177](https://github.com/teslamate-org/teslamate/commit/bd50177a454426501a9dd7fca000b44c62f10113) and [53d8e62](https://github.com/teslamate-org/teslamate/commit/53d8e625ae4483789b456458a8bb43af9f009361) - @JakobLichterfeld)\n- build(deps): bump crate-ci/typos from 1.20.1 to 1.21.0 (#3875)\n\n#### Dashboards\n\n- Battery Health: Fix a bug on efficiency estimations (#3795 - @jheredianet)\n- Add more info on charge details dashboard (#3821, #3827 -@jheredianet)\n- Battery Health dashboard: new stats panel for efficiency and improve query performance (#3806 -@jheredianet)\n- Add stats to Visited dashboard (#3824 - @jheredianet)\n- Update Thresholds colors for ºF temperature in Charges dashboard (#3834 - @jheredianet)\n- Velocity/Speed histogram in drive details dashboard (#3836 - @jheredianet)\n- Change car id selector by row on Charge Details dashboard (#3844- @jheredianet)\n- Fix missing units when miles is used (#3850 - @sdwalker)\n- Statistics: Add max value for efficiency thresholds (#3852 - @sdwalker)\n- Add average cost per kWh for AC and DC as separate values (#3841 -@woyteck1)\n- Update statistics.json: timezone issues addressed (#3862 - @DrMichael)\n- Statistics: fix temperature colors and column layout for Fahrenheit (#3854 - @sdwalker)\n\n#### Translations\n\n- Update zh_Hans default.po typo (#3804 - @liopoos)\n\n#### Documentation\n\n- doc: remove update steps in installation instructions and link to maintenance section ([dbf23fa](https://github.com/teslamate-org/teslamate/commit/dbf23faa31d84f222c99dba9f5de52c69dd43afb) and #3794 - @JakobLichterfeld and @brianmay)\n- doc: add instructions how to update pot files to development guide ([3ab8ee8](https://github.com/teslamate-org/teslamate/commit/3ab8ee8535da32ba0c11307aaacc65379ddcc0b2) - @JakobLichterfeld)\n- doc: update links to token apps in FAQ (#3833 - @JakobLichterfeld)\n- doc: add testing with ci build docker images to contributing guide (#3856- @JakobLichterfeld)\n- doc: adding filename specification for TeslaFi import file (#3872 - @spinecho31)\n\n## [1.28.5] - 2024-03-25\n\n### New features\n\n- feat: Add URL_PATH environment variable for reverse proxy deployments (#3771 -@b1c1l1)\n\n### Improvements and bug fixes\n\n- fix: permissions denied error when specifying user (#3772 -@tobiasehlert)\n\n#### Build, CI, internal\n\n- Update to latest devenv in nix flake (#3760 - @brianmay)\n- build(deps): bump webpack-dev-middleware from 5.3.3 to 5.3.4 in /website (#3766)\n\n#### Dashboards\n\n- Improve estimations on Battery Health dashboard (#3756 - @jheredianet)\n- Update overview.json: add time range to states link (#3757 - @DrMichael)\n- Update overview.json: add time range to charges links (#3758 - @DrMichael)\n\n#### Translations\n\n#### Documentation\n\n- doc: version tag in docker-compose.yml is obsolete since docker 25.05 (#3761 - @JakobLichterfeld)\n\n## [1.28.4] - 2024-03-19\n\n### New features\n\n- Add navigation active route drive state data (#3657 - @longzheng)\n- Add location topic (lat and long in one json blob) (#3729 - @brianmay)\n\n### Improvements and bug fixes\n\n- Fix aggressive switch to offline when stream gets offline message (#3672 - @micves)\n- feat: Grafana 10.4.0 & Angular Deprecation (#3726 - @swiffer and @JakobLichterfeld)\n- test: Make tests non-async (#3738 - @brianmay)\n\n#### Build, CI, internal\n\n- ci: prevent workflow runs for certain conditions and allow scheduled runs ([f71cc51](https://github.com/teslamate-org/teslamate/commit/f71cc51271007da70e7dc57c00e292acdf20e8d6) and [596a10f](https://github.com/teslamate-org/teslamate/commit/596a10f1eeb5c81f1f79293684a06241cc68d465) - @JakobLichterfeld)\n- feat: Upgrade web development framework to Phoenix 1.7 (#3615 - @marvelm and @JakobLichterfeld)\n- ci: stale after 30 days ([07670fa](https://github.com/teslamate-org/teslamate/commit/07670fa014b4d79d6907e7198960ec13c5cdae71) -@JakobLichterfeld)\n- ci: run edge build every night ([206d731](https://github.com/teslamate-org/teslamate/commit/206d731935a5e8ebc350a7981df8c6d92480b88b) - @JakobLichterfeld)\n- ci: update upload-artifact action (#3689 - @JakobLichterfeld)\n- fix: upload and merge artifact naming conflict since action version v4 (#3689 - @JakobLichterfeld)\n- build: bump app base image to fix 'GLIBC_2.34' not found error (#3691- @JakobLichterfeld)\n- build: bump app dependencies for libssl and netcat to packages available in debian bookworm (#3691- @JakobLichterfeld)\n- build: use netcat-openbsd to support ipv6 again (#3732 - @JakobLichterfeld)\n- build: reduce the size of the Docker image by cleaning the APT cache (#3692- @JakobLichterfeld)\n- ci: bump dorny/paths-filter from 3.0.0 to 3.0.1 (#3712)\n- build: pin elixir image full version to elixir:1.16.1-otp-26 (#3733 - @brianmay and @JakobLichterfeld)\n- build: adding chmod to file copy in app stage (#3740 - @tobiasehlert)\n- ci: bump actions/delete-package-versions from 4 to 5 (#3713)\n- Replace tortoise library with tortoise311 (#3697 - @brianmay)\n- build(deps): bump follow-redirects from 1.15.4 to 1.15.6 in /website (#3743)\n- feat: experimental nix flake (#3485 - @brianmay)\n\n#### Dashboards\n\n- feat: Add stat panel for selected duration in drive details dashboard (#3667 - @oivindoh)\n- Change tracking line color on Maps to blue (#3670 - @jheredianet)\n- Select last three drives in trip dashboard now opens in new tab to work reliable ([ca9816b](https://github.com/teslamate-org/teslamate/commit/ca9816ba4905c653b5f4daad533bf2caf2fe1d9c) - @DrMichael)\n- Battery health dashboard: Added Distance (Logged - Mileage) stats (#3741 - @jheredianet)\n- Update timeline.json: column Action correct width with new grafana version (#3744 - @DrMichael)\n\n#### Translations\n\n- Add Thai Translation (#3566 - @tomzt)\n- Update default.po missing french translations (#3662 - @pquattro)\n- update zh_Hans text (#3664 - @mrgaolei)\n- Add missing German translation for new messages, fix mistakes (#3694 - @accolon)\n- feat: add missing translation for new messages for Korean (#3693 - @zipizigi)\n- add Traditional Chinese translation for new messages (#3699 and #3709 - @occultsound)\n- Adding missing Swedish translation for new messages (#3716 -@tobiasehlert)\n\n#### Documentation\n\n- Add details how to configuring the TZ environment variable (#3650 - @NirKli)\n- doc: add instructions, how to connect to database before editing cars (#3656 - @JakobLichterfeld)\n- Fix name in lovelace example to match sensor name (#3718 - @js94x)\n- doc: Hint for null value in Grafana if car has not been renamed yet (#3720 -@js94x)\n- doc: Updated links for TeslaMate projects ([bf50f79](https://github.com/teslamate-org/teslamate/commit/bf50f799941ade1810fadacc408392e274afa459) - @JakobLichterfeld)\n\n## [1.28.3] - 2024-02-02\n\n### New features\n\n- Support listening on unix domain socket (#3328 - @PhracturedBlue)\n- Added expected finish charging localtime to teslamate overview in web (#3646 - @NirKli)\n\n### Improvements and bug fixes\n\n- CI: Remove deprecated probot-no-response and update to stale workflow (#3525 - @JakobLichterfeld)\n- Fix an issue when car is could enter sleep mode while dog mode is enabled (#3538 - @NirKli)\n- Handle stream getting the message \"Vehicle is offline\" and change the state to offline in vehicle (#3508 - @micves)\n- fix: use product api endpoint to fetch vehicles (#3630 - @brianmay and @JakobLichterfeld)\n\n#### Dashboards\n\n- Update locations.json with car selector (@DrMichael)\n- Fix Odometer_mi charger dashboard (#3534 - @mechoriet)\n- Update charges.json: reenable cost per kWh re added (#3544 - @DrMichael)\n- Improve Battery health derived efficiency estimations and Fix error divided by zero (#3593 - @jheredianet)\n- Battery Health - Improve performance & adjust queries to handle empty or null data (#3627 - @jheredianet)\n- charging-stats: map - add charges count and move label (#3625 - @fmossott)\n\n#### Translations\n\n- fix: translation Update default.po for simplified Chinese (#3600 - @ycjcl868)\n- Improvements for Spanish translations (#3610 - @jheredianet)\n\n#### Documentation\n\n- Node-RED required modules should be saved under /data (#3623 - @ToniA)\n- Use recommended format for Home Assistant MQTT sensor configuration (#3344)\n- Update projects.md with TeslaBox (#3542 - @mluggy)\n- update tesla-youq project (#3547 - @brchri)\n- doc: Fix TPMS sensor names to match binary_sensor.yaml (#3613 - @kenni)\n- update docker-compose.yml for Docker Compose version v2.24.1 (#3626 - @realJustinLee)\n\n### Configure Timezone Setting for Accurate Local Time Display\n\nTo ensure time-related features display accurately in your local timezone, configure the TZ environment variable.\nDetailed instructions are available in our [configuration guide](https://docs.teslamate.org/docs/configuration/environment_variables/).\n\n## [1.28.2] - 2023-11-27\n\n### New features\n\n### Improvements and bug fixes\n\n- grafana: support DATABASE_SSL_MODE (#3498 - @simonsmh)\n- Support server_name_indication for ssl (#3497 - @simonsmh)\n- grafana: Fix Dashboard dropdown link display (#3501 - @oivindoh)\n- Ci: GHCR Purge success even if package doesn't exist (#3480 - @jlestel and #3504 - @JakobLichterfeld)\n\n#### Dashboards\n\n#### Translations\n\n#### Documentation\n\n## [1.28.1] - 2023-11-26\n\n### New features\n\n### Improvements and bug fixes\n\n- Fix display version in settings\n\n#### Dashboards\n\n#### Translations\n\n#### Documentation\n\n## [1.28.0] - 2023-11-26\n\nNote: First release as @teslamate-org organization.\n\n### New features\n\n- Added tire low pressure icon to teslamate web (#3424 - @NirKli)\n- Add charging_state to VehicleSummary (#3471 - @brianmay)\n\n### Improvements and bug fixes\n\n- UI: sync meta theme-color with header background color for iOS status bar (#2840 - @libotony)\n- Linting in dashboard links (#3443 - @jlestel)\n- Update Grafana to 10.1.2 (#3455 - @swiffer)\n- CI: Build PR images on GHCR, so every PR will have a dedicated dockerfile for testing purpose (#3445, #3480, #3481, #3491 -@jlestel)\n- Update to Node.js 20 (#3477 - @PhilThurston)\n- Add credo lint support for static code analysis (#3452 - @brianmay)\n\n#### Dashboards\n\n- Fix link to Charge Level dashboard (#3263 - @Sjorsa)\n- Add LFP variants of Grafana dashboards (#3311 - @eden881)\n- Average cost stat in stats dashboard (#3030 - @fmossott)\n- Odometer in Charges dashboard (#3463 - @DrMichael)\n- Use built-in Grafana visuals instead of plugins (#3439 - @oivindoh and @swiffer)\n- Ensure that dashboards can be modified after import (#3454 - @swiffer)\n- Migrate projected range to TimeSeries (#3454 - @swiffer)\n\n#### Translations\n\n- There is nothing new here.\n\n#### Documentation\n\n- Gaussmeter units no longer for sale, #3419 - @LelandSindt\n- Docker backup restore note about update command when using different TM_DB_USER (#3291 - @tsongalin)\n- Update FreeBSD installation instructions (#3277 - @uqs)\n- Updated Docker Compose instructions (#3320 - @Dulanic)\n- Update HA integration docs with TPMS sensors and examples (#2845 - @marspath)\n- Fix code style in FreeBSD section (#3461 and #3462 - @ivanovd)\n- Advise that docker-compose v1 is EOL and to upgrade to v2 (#3472 - @cwanja)\n- Fix tpms bar sensors name in template for psi (#3490 - @virtualm2000)\n\n## [1.27.4] - 2023-11-12\n\nNote: TeslaMate moved to the new @teslamate-org organization.\n\n### Improvements and Bug Fixes\n\n- Add endpoints query param to `vehicle_data` request to [reflect changes](https://developer.tesla.com/docs/fleet-api?shell#vehicle_data) to the API (#3398 - @swiffer)\n- Remove donation links\n- Fix warnings on Elixir 1.16\n- Upgrade Grafana to 9.5\n- Trim whitespace from geofence names\n- Support self-signed certificates via (`DATABASE_SSL_CA_CERT_FILE`)\n- Use preferred tile.openstreetmap.org URL (#3368)\n- Update dependencies\n\n#### Dashboards\n\n- Charges: Mark `end_date` as `dateTimeAsLocal` (#3033 - @DrMichae)\n- Add Battery Health dashboard (#3059 - @jheredianet)\n- Show all vehicles on drive stats dashboard (#3342 - @yoyostile)\n- Updates: Fix for div by zero error (#3289 - @Dulanic)\n- Show location name in charge details (#3294 - @DrMichael)\n- Fix broken links when orgId is not 1 (#3380 - @jlestel)\n- Update query to get car efficiency on Battery Health dashboard (#3245 - @jheredianet)\n\n#### Translations\n\n- Updated Spanish translation (#3244 - @jheredianet)\n\n#### Documentation\n\n- Update docs to use Docker Compose V2 (#3025 - @eden881)\n- Update FreeBSD instructions (#3394 - @ivanovd)\n- Add Tesla-YouQ project (#3347 - @brchri)\n\n## [1.27.3] - 2023-06-12\n\n### Improvements and Bug Fixes\n\n- Read the vehicle name from the `vehicle_data` response as Tesla has made [some changes](https://github.com/timdorr/tesla-api/issues/728) to the API\n- Add composite index to position and drop drive_id index (#3186 - @IlyaDiallo)\n- Bump Grafana to 8.5.26\n- Ship Docker image with OTP 26 (this should improve performance on ARM devices)\n- Optimize automatic Docker image builds\n\n#### Dashboards\n\n- Update drive-details.json missing dataSource for pressure units (#3225 - @OrangeBean)\n- Bump pr0ps-trackmap-panel to 2.1.4 (#3076 - @Obihoernchen)\n\n#### Translations\n\n- Fix Korean translation (#3126 - @nanishin)\n\n#### Documentation\n\n- Update docs to manually remove vehicle (#3075 - @cwanja)\n- Update Project: Tesla Home Assistant Integration (#3194 - @Megabytemb)\n- Updated menu route to Download TeslaFi Data (#3218 - @helmo)\n\n## [1.27.2] - 2023-01-13\n\n### Improvements and Bug Fixes\n\n- Bump pr0ps-trackmap-panel to 2.1.3 (fixes #2770)\n- Bump grafana to 8.5.15\n- Fix GPX format (#2925 - @martinh2011)\n- Change esbuild target to es2017\n- Update Elixir and frontend dependencies\n- Update GH action workflows\n\n#### Dashboards\n\n- Charging Stats: Update the filter for superchargers (#2832 - @sultantariq)\n\n#### Translations\n\n- Add Ukrainian translations (#3039 - @ZeusF1)\n- Update Korean translations (#2898 - @zipizigi)\n- Update Chinese (traditional) translations (#2852 - @occultsound)\n- Update Chinese translations (#2855 - @JhouXerox)\n- Update French translations (#2844 - @CrowMash)\n\n#### Documentation\n\n- Fix typo (#2843 - @CrowMash)\n- Improve FreeBSD installation documentation (#2885 - @victori)\n- Fix tesla_power unit from W to kW (#3024 - @enzo2)\n- Added \"Custom Grafana Dashboards\" to project list (#3056 - @CarlosCuezva)\n\n## [1.27.1] - 2022-07-22\n\n### Improvements and Bug Fixes\n\n- Add setting to select tire pressure units\n- Fix `Protocol 'inet_tcp': register/listen error: econnrefused` error (#2771 - @manuduarte)\n- Bump minimum supported Elixir version to 1.12\n- Improve handling of invalid API tokens\n\n#### Dashboards\n\n- Charging Stats: Include SuC geofences to calculate charging cost\n\n## [1.27.0] - 2022-07-15\n\n### 🔓 Encryption of API tokens\n\nTo ensure that the Tesla API tokens are stored securely, **an encryption key must be provided via the `ENCRYPTION_KEY` environment variable**.\n\nIf you use a `docker-compose.yml` file to run TeslaMate, add a line with the `ENCRYPTION_KEY` to the `environment` section or check out the updated installation guides on [docs.teslamate.org](https://docs.teslamate.org):\n\n```yaml\nservices:\n  teslamate:\n    image: teslamate/teslamate:latest\n    environment:\n      - ENCRYPTION_KEY=your_secret_encryption_key\n      # ...\n```\n\nIf no `ENCRYPTION_KEY` environment variable is provided when running the database migrations a **randomly generated key will be set for you** to encrypt the tokens. In that case, a warning with further instructions will be displayed.\n\n### Improvements and Bug Fixes\n\n- Add `charge_current_request` and `charge_current_request_max` MQTT topics\n- Add detection of refresh Model X (2022) (#2455 - @cwanja)\n- Restart streaming API process if token expired\n- Do not start erlang's EPMD service\n- Store vehicle marketing names in the database\n- Allow customizing the default geofence via the `DEFAULT_GEOFENCE` environment variable (#2564)\n- Bump Grafana to 8.5.6\n\n#### Dashboards\n\n- Add datasource to table and map panels (#2391- @andrewjw)\n- Charge Details: Ensure that battery heater is shown when active during charging (#2527 - @woyteck1)\n- Charging Stats, Charges: Add average cost per kWh to charging stats (#2693 - @yoyostile)\n- Charging Stats, Charging Details: Add Charging curve (#2093 - @ToniA, #2152 - @fmossott)\n- Charging Stats: Add panel with the cost of charges at SuC (#2448 - @carloscuezva)\n- Charging Stats: Fix for better \"Charge deltas\" when the charging process is interrupted and re-started (#2566, #2656 - @nicoladefranceschi)\n- Charging Stats: Set Y-Axis max of heatmap to 100 (#2461 - @DrMichael)\n- Charging Stats: Update Charging Stats panel styling (#2481 - @cwanja)\n- Drive Details: Add elevation summary (#2449 - @coreGreenberet)\n- Drive Details: Record the tire pressure which was made available by Tesla in the 2022.4 SW release (#2706 - @NirKli)\n- Drive Details: Set elevation units on axis\n- Drive Stats: Optimize query to estimate mileage calculation (#2464 - @coreGreenberet)\n- Locations: Let the gauge scale up to the maximum value (#2647 - @DrMichael)\n- States: Update States top row panels height (#2487 - @cwanja)\n- Timeline: Fix links (#2601 - @DrMichael)\n- Trip: Render Trip piechart legend (#2473 - @cwanja)\n- Migrate dashboards to the new timeseries panels\n- Change unit of boolean fields\n\n#### Translations\n\n- Update Chinese translation (#2479 - @AemonCao)\n- Add missing Swedish translation (#2731 - @tobiasehlert)\n\n#### Documentation\n\n- Add ProxyPreserveHost On to the Grafana entries in Apache2 config (#2471 - @DrMichael)\n- Node-RED: Fix typo (#2410 - @baylanger)\n- Update to projects page (TeslaMate-ABRP) (#2518 - @fetzu)\n- Update HomeAssistant Integration examples for HA 2022.6 (#2704 - @star114)\n- HomeAssistant Integration: enhance km to mi conversion / add timestamp class to charge time (#2735 - @dcod3d)\n- Add FAQ around Docker timestamp logs (#2655 - @cwanja)\n- Add HomeAssistant notification example (#2712 - @brombomb)\n\n## [1.26.1] - 2022-01-28\n\n### Improvements and Bug Fixes\n\n- Add link on the TeslaMate overview page to the notateslaapp.com release notes ([#2390](https://github.com/adriankumpf/teslamate/pull/2390) by [cwanja](https://github.com/cwanja))\n- Fix token refresh for Chinese accounts\n\n#### Dashboards\n\n- Charges: Show link if the charge cost is not set ([#2380](https://github.com/adriankumpf/teslamate/pull/2380) by [carloscuezva](https://github.com/carloscuezva))\n- Efficiency: Add min & max values to the Temperature-Efficiency gauge ([#2395](https://github.com/adriankumpf/teslamate/pull/2395) by [DrMichael](https://github.com/DrMichael))\n- Overview / Updates: Fix software version format\n\n#### Translations\n\n- Adding missing Swedish translation ([#2373](https://github.com/adriankumpf/teslamate/pull/2373) by [tobiasehlert](https://github.com/tobiasehlert))\n- Small correction for Spanish translation ([#2379](https://github.com/adriankumpf/teslamate/pull/2379) by [carloscuezva](https://github.com/carloscuezva))\n- Spanish translation refinements ([#2388](https://github.com/adriankumpf/teslamate/pull/2388) by [jmalcaide](https://github.com/jmalcaide))\n\n## [1.26.0] - 2022-01-25\n\n### Improvements and Bug Fixes\n\n- Remove support for logins with username/password\n- Show zoom controls when hovering over or tapping the map ([#2184](https://github.com/adriankumpf/teslamate/pull/2184) by [bogosj](https://github.com/bogosj))\n- Use new Chinese Tesla API endpoints\n- Fix MFA for Chinese accounts ([#2234](https://github.com/adriankumpf/teslamate/pull/2234) by [howard0su](https://github.com/howard0su))\n- Fix detection of refreshed Model S\n- Guard against duplicate vehicle API responses\n- Don't suspend logging while a car software update is downloaded\n- Don't warn if the update status completing the of a car software update is still reported as 'downloading'\n- Bump Docker app base image to Debian 11\n  - Raspberry Pi users unfortunately have to upgrade to Raspbian Bullseye or install the backports version `libseccomp2` (see [#2302](https://github.com/adriankumpf/teslamate/issues/2302))\n\n#### Dashboards\n\n##### Upgrade Grafana to version 8\n\n> ⚠️ Manually managed Grafana instances have to be upgraded to v8.3.4 or higher!\n\n- All table panels have been migrated to the new table component\n  - This brings a bunch of improvements including an improved experience on small screen sizes\n  - The date columns now use a local format depending on your browser language setting\n- The pie chart panels have been migrated to the new native pie charts component\n- The discrete panels have been replaced by the native state timeline panel\n\n##### Other\n\n- Drive Details: Display if the car is preconditioning ([#2281](https://github.com/adriankumpf/teslamate/pull/2281) by [carloscuezva](https://github.com/carloscuezva))\n- Timeline: Add filters for destination ([#2354](https://github.com/adriankumpf/teslamate/pull/2354) by [DrMichael](https://github.com/DrMichael))\n\n#### Translations\n\n- Update Chinese translation ([#2232](https://github.com/adriankumpf/teslamate/pull/2232) by [howard0su](https://github.com/howard0su))\n- Update Chinese translation ([#2236](https://github.com/adriankumpf/teslamate/pull/2236) by [summergeorge](https://github.com/summergeorge))\n- Update French translation ([#2216](https://github.com/adriankumpf/teslamate/pull/2216) by [tydoo](https://github.com/tydoo))\n- Update Spanish translation ([#2148](https://github.com/adriankumpf/teslamate/pull/2148) by [jmalcaide](https://github.com/jmalcaide))\n- Update Italian translation ([#2146](https://github.com/adriankumpf/teslamate/pull/2146) by [ludovi-com](https://github.com/ludovi-com))\n\n#### Documentation\n\n- Update FreeBSD docs ([#2226](https://github.com/adriankumpf/teslamate/pull/2226) by [rustikles](https://github.com/rustikles))\n- Update FAQ: Clarified how the consumption values are calculated and what triggers the recalculations ([#2345](https://github.com/adriankumpf/teslamate/pull/2345)) by [cwanja](https://github.com/cwanja)\n- Added [TeslaMate-ABRP](https://github.com/fetzu/teslamate-abrp) to list of projects ([#2314](https://github.com/adriankumpf/teslamate/pull/2314))\n- Fix typo ([#2217](https://github.com/adriankumpf/teslamate/pull/2217) by [Oddadin](https://github.com/Oddadin))\n- Clarify that the pull command needs to be ran from the directory where the docker YML file is located ([#2368](https://github.com/adriankumpf/teslamate/pull/2368) by [cwanja](https://github.com/cwanja))\n\n## [1.25.2] - 2022-01-12\n\n- Bump app base image to Debian 11 to fix `GLIBC_2.29' not found` error\n- Bump Grafana to 7.5.12\n\n## [1.25.1] - 2022-01-12\n\nDisable anonymous logins to Grafana by default (when using the `teslamate/grafana` Docker image)\n\n- The first time you visit Grafana, you will be asked to log in. Use the default user `admin` with the password `admin`. After successful login, you will be prompted to change the password.\n- To allow anonymous logins set the environment variable of the Grafana image `GF_AUTH_ANONYMOUS_ENABLED` to `true` (use only if your Grafana instance is not exposed to the internet!)\n\n> This change only affects users who followed the [basic Docker installation guide](https://docs.teslamate.org/docs/installation/docker) which, as mentioned in the guide, is intended for home network use only and not for exposure to the internet. Users who followed one of the [advanced installation guides](https://docs.teslamate.org/docs/guides/traefik) are not affected as their Grafana instances always had anonymous logins disabled.\n\n## [1.25.0] - 2021-11-12\n\n### Improvements and Bug Fixes\n\n- Add Apple mobile web app capable meta tag ([#2128](https://github.com/adriankumpf/teslamate/pull/2128))\n- Add NOT NULL constraint to the charging_processes.start_date column\n- Add workaround for an error that occurred when the OS does not return the current date and time\n- Display marketing names (again). This was necessary due to an API change.\n  - Add Mid-Range Model 3 ([#2057](https://github.com/adriankumpf/teslamate/pull/2057) by [RickyRomero](https://github.com/RickyRomero))\n- Show the token sign-up form by default\n- Sign out if the Tesla API repeatedly returns 401 responses\n- Use SSO access tokens instead of Owner API tokens (except for Chinese accounts)\n\n#### Dashboards\n\n- Timeline: bugfixes and improvements ([#2125](https://github.com/adriankumpf/teslamate/pull/2125), [#2092](https://github.com/adriankumpf/teslamate/pull/2092), [#2061](https://github.com/adriankumpf/teslamate/pull/2061) by [DrMichael](https://github.com/DrMichael))\n\n#### Translations\n\n- Update French translation ([#2091](https://github.com/adriankumpf/teslamate/pull/2091) by [ranaud80](https://github.com/ranaud80))\n\n#### Documentation\n\n- Add integration Guide for Node-RED, with examples ([#2098](https://github.com/adriankumpf/teslamate/pull/2098) by [pmboothby](https://github.com/pmboothby))\n- Update upgrade guide ([#2043](https://github.com/adriankumpf/teslamate/pull/2043) by [withanhdammit](https://github.com/withanhdammit))\n\n## [1.24.2] - 2021-09-29\n\n### Improvements and Bug Fixes\n\n- Discard stale data originating from the Tesla Streaming API\n- Broadcast offline state via MQTT when car goes offline while driving\n\n#### Dashboards\n\n- Updates and Timeline: Link to [notateslaapp.com](https://www.notateslaapp.com/software-updates/history/) for release notes\n\n## [1.24.1] - 2021-09-29\n\n- Update error message that is shown if reCAPTCHA is required\n- Update Erlang/OTP version to [prevent possible outages due to DST Root CA expiry on Sep 30th](https://elixirforum.com/t/psa-preventing-outages-due-to-dst-root-ca-expiry-on-sep-30th/42247)\n\n**⚠️ NOTE:** Tesla have tightened the captcha security once again and now require Google reCAPTCHA to generate API tokens. reCAPTCHA is implemented in a way that makes it impossible to bypass for applications like TeslaMate. There are third-party services that offer to fill these captchas (by having humans solve them manually), but they're slow and can be pricey if you're making a large a mount of requests.\n\nSo if you are having issues signing in to your Tesla account via TeslaMate, the only remaining **workaround** right now is to sign in using `existing API tokens` (there is a button on the TeslaMate sign-in form). There are multiple apps available to securely generate access tokens yourself, for example:\n\n- [Auth app for Tesla (iOS)](https://apps.apple.com/us/app/auth-app-for-tesla/id1552058613#?platform=iphone)\n- [Tesla Tokens (Android)](https://play.google.com/store/apps/details?id=net.leveugle.teslatokens)\n- [Tesla Auth (macOS, Linux)](https://github.com/adriankumpf/tesla_auth)\n\nUsers who are already signed in in do not have to worry about it. TeslaMate will continue to be able to access the Tesla API.\n\n## [1.24.0] - 2021-08-31\n\n### Improvements and Bug Fixes\n\n- Tesla have once again made changes to the login: TeslaMate can now handle a delayed captcha that first appears after submitting the login form …\n- Handle Tesla OwnerAPI errors returned by streaming API\n- Lay the groundwork for the ability to customize the displayed order of vehicles ([#1904](https://github.com/adriankumpf/teslamate/pull/1904) by [leewillis77](https://github.com/leewillis77))\n  - The order can currently be customized by manually updating the `display_priority` column in the `cars` database table\n\n#### Dashboards\n\n- Charging Stats: Use the full range of colors in the heatmap ([#1821](https://github.com/adriankumpf/teslamate/pull/1821) by [dyxyl](https://github.com/dyxyl))\n- Projected Range: Change right y-axis battery level range max from 200% to 100% ([#1840](https://github.com/adriankumpf/teslamate/pull/1840) by [toneus](https://github.com/toneus))\n- Timeline: Fix for missing drives and add links to the Action column ([1818](https://github.com/adriankumpf/teslamate/pull/1818) and [#1872](https://github.com/adriankumpf/teslamate/pull/1872) by [DrMichael](https://github.com/DrMichael))\n- Charge Level: Fix diagram glitch ([#1936](https://github.com/adriankumpf/teslamate/pull/1936) by [DrMichael](https://github.com/DrMichael))\n\n#### Translations\n\n- Add Japanese translation ([#1909](https://github.com/adriankumpf/teslamate/pull/1909) by [kuma](https://github.com/kuma))\n\n#### Documentation\n\n- Add a note about RAM needed after having issues, also a small clarification on where to place the .env file in the advanced guide ([#1857](https://github.com/adriankumpf/teslamate/pull/1857) by [billerby](https://github.com/billerby))\n- Add note with custom TM_DB_USER when backing up ([#1931](https://github.com/adriankumpf/teslamate/pull/1931) by [kyleawayan](https://github.com/kyleawayan))\n- Advanced installation with Traefik: Update Grafana rule to limit to TeslaMate host ([#1937](https://github.com/adriankumpf/teslamate/pull/1937) by [benoitm974](https://github.com/benoitm974))\n\n## [1.23.7] - 2021-07-16\n\n### Improvements and Bug Fixes\n\n- Since Tesla have once again made changes to the login with captcha, this version fixes the problems caused by it\n- Update permissions to the Grafana plugin directory ([#1814](https://github.com/adriankumpf/teslamate/pull/1814) by [letienne](https://github.com/letienne))\n\n#### Documentation\n\n- Fix heading of the Home Assistant binary_sensor config ([#1756](https://github.com/adriankumpf/teslamate/pull/1756) by [mrzeldaguy](https://github.com/mrzeldaguy))\n\n## [1.23.6] - 2021-07-08\n\n### Improvements and Bug Fixes\n\n- Disable sign-in button if captcha code is missing\n- Fix login for Chinese accounts\n\n## [1.23.5] - 2021-07-08\n\n### Improvements and Bug Fixes\n\n- Fix login with captcha\n\n#### Dashboards\n\n- Timeline: Make added kWh more accurate\n\n## [1.23.4] - 2021-06-18\n\n### Improvements and Bug Fixes\n\n#### Dashboards\n\n- Drive Details: Don't round down duration ([#1677](https://github.com/adriankumpf/teslamate/pull/1677) by [Dulanic](https://github.com/Dulanic))\n- Projected Range: Prevent division by zero ([#1678](https://github.com/adriankumpf/teslamate/pull/1678) by [Dulanic](https://github.com/Dulanic))\n- Updates / States / Stastistics: Use local browser time ([#1685](https://github.com/adriankumpf/teslamate/pull/1685) by [Ed-M72](https://github.com/Ed-M72))\n- Charge Level: Simplify database query ([#1693](https://github.com/adriankumpf/teslamate/pull/1693) by [Dulanic](https://github.com/Dulanic))\n- Timeline: Add new category `Missing` and some other adjustments ([#1708](https://github.com/adriankumpf/teslamate/pull/1708) by [DrMichael](https://github.com/DrMichael))\n- Timeline: Fix missing datasources ([#1730](https://github.com/adriankumpf/teslamate/pull/1730) by [nickbock](https://github.com/nickbock))\n- Bump Grafana to 7.5.8 (Docker image)\n\n#### Documentation\n\n- Fix Home Assistant Lovelace UI and sensors ([#1711](https://github.com/adriankumpf/teslamate/pull/1711) by [JakobLichterfeld](https://github.com/JakobLichterfeld))\n- Add FreeBSD guide ([#1646](https://github.com/adriankumpf/teslamate/pull/1646) and [#1712](https://github.com/adriankumpf/teslamate/pull/1712) by [tuxbox](https://github.com/tuxbox))\n\n## [1.23.3] - 2021-06-02\n\n### Bug Fixes\n\n- Fix API tokens form\n\n## [1.23.2] - 2021-06-02\n\n### Bug Fixes\n\n- Fix sign-in for Chinese accounts\n\n## [1.23.1] - 2021-06-02\n\n### Improvements and Bug Fixes\n\n- Tesla has removed the captcha again …\n- Fix error when changing the language to Chinese\n\n#### Translations\n\n- Update Swedish translations ([#1655](https://github.com/adriankumpf/teslamate/pull/1655) by [tobiasehlert](https://github.com/tobiasehlert))\n\n## [1.23.0] - 2021-06-01\n\n### Improvements and Bug Fixes\n\n- Support Tesla's new captcha verification\n- Improve naming of addresses (city aliases)\n- Add `power` to published MQTT topics ([#1504](https://github.com/adriankumpf/teslamate/pull/1504) by [mnadvornik](https://github.com/mnadvornik))\n- The Docker image now ships with Erlang/OTP 24 which comes with a JIT-compiler (enabled on most x86 64-bit platforms)\n- Only publish geofence via MQTT if it has changed\n- Fix calculation of gross consumption while charging\n- Fix service mode detection\n- Fix typo in code_challenge_method ([#1571](https://github.com/adriankumpf/teslamate/pull/1571) by [tuxbox](https://github.com/tuxbox))\n- Make `dashboards.sh` script portable e.g. to BSD ([#1645](https://github.com/adriankumpf/teslamate/pull/1645) by [tuxbox](https://github.com/tuxbox))\n\n#### Dashboards\n\n- Add a new Timeline dashboard ([#1621](https://github.com/adriankumpf/teslamate/pull/1621) by [DrMichael](https://github.com/DrMichael))\n- Statistics: Fix `pq: time zone \"\" not recognized` error ([#1470](https://github.com/adriankumpf/teslamate/pull/1470) and [#1559](https://github.com/adriankumpf/teslamate/pull/1559) by [Dulanic](https://github.com/Dulanic))\n\n#### Translations\n\n- Update Swedish translations ([#1461](https://github.com/adriankumpf/teslamate/pull/1461) by [tobiasehlert](https://github.com/tobiasehlert))\n- Update French translations ([#1473](https://github.com/adriankumpf/teslamate/pull/1473) by [ranaud80](https://github.com/ranaud80))\n- Update German translations\n\n#### Documentation\n\n- Update Mosquitto version used in docker-compose examples\n- Add device classes and binary sensors to documented Home Assistant config ([#1597](https://github.com/adriankumpf/teslamate/pull/1597) by [flacjacket](https://github.com/flacjacket) and [#1634](https://github.com/adriankumpf/teslamate/pull/1634) by [ffeingol](https://github.com/ffeingol))\n\n## [1.22.0] - 2021-03-17\n\n### Improvements and Bug Fixes\n\n- Add option to sign in with existing API tokens\n- Avoid false `plugged_in` events ([#1423](https://github.com/adriankumpf/teslamate/pull/1423) by [brianmay](https://github.com/brianmay))\n- Handle distinct OSM IDs gracefully when changing the address language\n- Set another user agent for auth requests.\n  - ⚠️ _This fixes timeouts when signing in for the time being. Most users who are affected reported using a cloud hosting service. Expect this to break anytime Tesla decides to block this type of traffic coming from these providers._\n- Update user agent used for API requests to GitHub and OpenStreetMap\n\n#### Dashboards\n\n- Add battery heater info to Overview / Charging Details and Charge Details dashboards ([#1428](https://github.com/adriankumpf/teslamate/pull/1428) by [ToniA](https://github.com/ToniA))\n- Statistics: Calculate efficiency from charged energy ([#1445](https://github.com/adriankumpf/teslamate/pull/1445) by [ToniA](https://github.com/ToniA))\n- Make Statistics dashboard look the same on both kilometers and miles ([#1439](https://github.com/adriankumpf/teslamate/pull/1439) by [ToniA](https://github.com/ToniA))\n- Updates: Rename column to \"Since Previous Update\"\n\n#### Translations\n\n- Update Spanish translation ([#1446](https://github.com/adriankumpf/teslamate/pull/1446) by [alceasan](https://github.com/alceasan))\n\n#### Documentation\n\n- Explaining the asleep mode with MCU1 and the non-streaming mode ([#1453](https://github.com/adriankumpf/teslamate/pull/1453) by [ToniA](https://github.com/ToniA))\n\n## [1.21.6] - 2021-03-10\n\n### Improvements and Bug Fixes\n\n- Change HTTP headers again to avoid auth requests timing out\n- Fix changing the address language\n- Add health check route ([#1422](https://github.com/adriankumpf/teslamate/pull/1422) by [brianmay](https://github.com/brianmay))\n\n#### Translations\n\n- Update Korean translation ([#1381](https://github.com/adriankumpf/teslamate/pull/1381) by [dongbum](https://github.com/dongbum))\n- Updated Danish translation ([#1404](https://github.com/adriankumpf/teslamate/pull/1404) by [larskochhansen](https://github.com/larskochhansen))\n\n#### Documentation\n\n- Add fixed pricing information to [TeslaMateApi](https://github.com/tobiasehlert/TeslaMateApi) project description ([#1399](https://github.com/adriankumpf/teslamate/pull/1399) by [tobiasehlert](https://github.com/tobiasehlert))\n\n## [1.21.5] - 2021-02-21\n\n### Improvements and Bug Fixes\n\n- Implement a workaround for login requests timing out\n- Handle failed token refresh requests gracefully\n\n#### Dashboards\n\n- Overview: Fix Gross Panel font size ([#1363](https://github.com/adriankumpf/teslamate/pull/1363) by [DrMichael](https://github.com/DrMichael))\n- Charging Stats: Set bucket size on charging heatmap ([#1355](https://github.com/adriankumpf/teslamate/pull/1355) by [leewillis77](https://github.com/leewillis77))\n- Downgrade Grafana to 7.3.7 because of an incompatibility with the Trackmap plugin\n\n## [1.21.4] - 2021-02-16\n\n### Enhancements and Bug Fixes\n\n- Point out more clearly when starting into import mode\n- Hide sign-out button in import mode\n- Don't purge debug log statements from production release\n- Handle non-existing range values after the car was offline\n\n#### Dashboards\n\n- Statistics: Show \"Starting at\" column and fix timezone issue ([#1254](https://github.com/adriankumpf/teslamate/pull/1254) by [DrMichael](https://github.com/DrMichael))\n- Charge Level: Fix usable battery level alternating between usable battery level and regular battery level\n- Bump Grafana to v7.4.1\n\n#### Documentation\n\n- Add [TeslaMateApi](https://github.com/tobiasehlert/TeslaMateApi) to the list of projects using TeslaMate ([#1350](https://github.com/adriankumpf/teslamate/pull/1350) by [tobiasehlert](https://github.com/tobiasehlert))\n- Update installation docks ([#1287](https://github.com/adriankumpf/teslamate/pull/1287) by [tobiasehlert](https://github.com/tobiasehlert))\n- Update HomeAssistant documentation ([#1321](https://github.com/adriankumpf/teslamate/pull/1321) by [jschollenberger](https://github.com/jschollenberger))\n\n## [1.21.3] - 2021-02-06\n\n- Add support for v3 API tokens in China\n- Detect if TeslaFi CSV files contain data for more than one car\n- Change log level for streaming timeouts to debug\n\n## [1.21.2] - 2021-01-31\n\n> **⚠️ NOTE**: Any previously stored API refresh tokens will no longer function, as Tesla has deprecated the existing authentication endpoint. Existing access tokens will continue to work **until they expire**. Eventually, a full login will be needed to obtain new refresh tokens.\n>\n> **To immediately obtain new tokens after upgrading**, go to the TeslaMate settings page, **sign out via the button** at the bottom of the page and then sign in again.\n\nAdditional:\n\n> **⚠️ NOTE**: This release changes TeslaMate's base Docker image to Debian. If you have any customizations on top of TeslaMate (like healthchecks), they could need updates to work on top of this new image.\n\n### Enhancements\n\n- Use the new Tesla authentication endpoint for refreshing access tokens\n- Drop support for the `/oauth/token` endpoint\n- Add a sign-out button at the bottom of the settings page\n\n#### Translations\n\n- Add Turkish Language Support ([#1194](https://github.com/adriankumpf/teslamate/pull/1194) by [neocorp](https://github.com/neocorp))\n\n#### Dashboards\n\n- Display average outside temperature in charges dashboard ([#1213](https://github.com/adriankumpf/teslamate/pull/1213) by [DrMichael](https://github.com/DrMichael))\n\n## [1.21.1] - 2021-01-10\n\n### Enhancements\n\n#### Translations\n\n- Add Finnish translation ([#1190](https://github.com/adriankumpf/teslamate/pull/1190) by [puppee](https://github.com/puppee))\n\n#### Documentation\n\n- Add some documentation about updating TeslaMate when installed with Docker ([#1170](https://github.com/adriankumpf/teslamate/pull/1170) by [fatbasstard](https://github.com/fatbasstard))\n- Update \"Import from tesla-apiscraper\" documentation: Give an example how to get the vehicle_id from TeslaMate ([#1174](https://github.com/adriankumpf/teslamate/pull/1174) by [Bdot42](https://github.com/Bdot42))\n- Add link to unofficial Home Assistant addon ([#1188](https://github.com/adriankumpf/teslamate/pull/1188) by [matt-FFFFFF](https://github.com/matt-FFFFFF))\n\n#### Other\n\n- Allow to use non-standard MQTT ports (via [MQTT_PORT](https://docs.teslamate.org/docs/configuration/environment_variables))\n- Refactoring: Use built-in Ecto enum type\n- Guard against unexpected MFA errors\n\n### Bug Fixes\n\n- Update drive duration query to avoid displaying different times for drives (Details vs Overview) ([#1191](https://github.com/adriankumpf/teslamate/pull/1191) by [fatbasstard](https://github.com/fatbasstard))\n- Fix font colors for light theme (Updates dashboard) ([#1169](https://github.com/adriankumpf/teslamate/pull/1169) by [fatbasstard](https://github.com/fatbasstard))\n- Fix typo (Statistics dashboard) ([#1185](https://github.com/adriankumpf/teslamate/pull/1185) by [rogiervandergeer](https://github.com/rogiervandergeer))\n\n## [1.21.0] - 2021-01-02\n\n### Enhancements\n\n#### Dashboards\n\n- Drive Details: Add button to download a drive as GPX file ([#993](https://github.com/adriankumpf/teslamate/pull/993) by [ayonix](https://github.com/ayonix))\n- New dashboard for reporting to Dutch tax ([#998](https://github.com/adriankumpf/teslamate/pull/998) and [#1051](https://github.com/adriankumpf/teslamate/pull/1051) by [roadrash2108](https://github.com/roadrash2108))\n- Locations: Add panel to see when an address was last visited\n- Charges/Drives: Add more filtering capabilities ([#1016](https://github.com/adriankumpf/teslamate/pull/1016) by [Kosta-Github](https://github.com/Kosta-Github))\n- Overview: Fix unit of measurement for charge energy added ([#1061](https://github.com/adriankumpf/teslamate/pull/1061) by [landler](https://github.com/landler))\n- Charge Level: Add green bars (20/80%) to match \"Charge Delta\" graph ([#1059](https://github.com/adriankumpf/teslamate/pull/1059) by [roadrash2108](https://github.com/roadrash2108))\n- Charging-Stats/Trip: Change colors of AC/DC ([#1058](https://github.com/adriankumpf/teslamate/pull/1058) by [roadrash2108](https://github.com/roadrash2108))\n- Statistics: Resolve issue with month groupings ([#1082](https://github.com/adriankumpf/teslamate/pull/1082) by [leewillis77](https://github.com/leewillis77))\n- Updates: Apply number of charges and average rated range to the correct update ([#1147](https://github.com/adriankumpf/teslamate/pull/1147) by [tlj](https://github.com/tlj))\n\n#### Other\n\n- Add support for Tesla’s new authentication process (two-factor authentication)\n- Optimize TeslaFi CSV file import: reduced memory usage and increased performance\n- Require [Elixir v1.11](https://docs.teslamate.org/docs/installation/debian#requirements)\n- Allow to connect to Postgres via IPv6 (via [DATABASE_IPV6](https://docs.teslamate.org/docs/configuration/environment_variables))\n- Allow to connect to MQTT broker via IPv6 (via [MQTT_IPV6](https://docs.teslamate.org/docs/configuration/environment_variables))\n- Improve detection of whether the vehicle is plugged in during cold weather (+ fix [#1154](https://github.com/adriankumpf/teslamate/pull/1154) by [virtualm2000](https://github.com/virtualm2000))\n- Use connection pooling for SRTM downloads\n- Optimize Docker layer caching to speed up image build times\n- Battery level tooltip: Prevent division by zero error if car is totally down to 0%\n- Display the actual error if the import directory is not accessible\n\n#### Translations\n\n- Add Italian translation ([#1095](https://github.com/adriankumpf/teslamate/pull/1095) and [#1096](https://github.com/adriankumpf/teslamate/pull/1096) by [HavanaMan](https://github.com/HavanaMan))\n\n#### Documentation\n\n- Fix version info on development guide & minor spelling fix ([#994](https://github.com/adriankumpf/teslamate/pull/994) by [techgaun](https://github.com/techgaun))\n- Update backup_restore.md ([#1027](https://github.com/adriankumpf/teslamate/pull/1027) by [pihomeserver](https://github.com/pihomeserver))\n- Improve garage door automation example ([#1039](https://github.com/adriankumpf/teslamate/pull/1039) by [andrewfoster](https://github.com/andrewfoster))\n- Update traefik guide to use a single public hostname instead of two ([#1101](https://github.com/adriankumpf/teslamate/pull/1101) by [pmboothby](https://github.com/pmboothby))\n- Projects using TeslaMate:\n  - [TeslaMateAgile](https://github.com/MattJeanes/TeslaMateAgile): mention Tibber support ([#1097](https://github.com/adriankumpf/teslamate/pull/1097) by [tobiasehlert](https://github.com/tobiasehlert))\n  - Add [TeslaMate_Telegram_Bot](https://github.com/JakobLichterfeld/TeslaMate_Telegram_Bot) ([#1122](https://github.com/adriankumpf/teslamate/pull/1122) by [JakobLichterfeld](https://github.com/JakobLichterfeld))\n- Update installation instructions for Apache ([#1124](https://github.com/adriankumpf/teslamate/pull/1124) by [juankymoral](https://github.com/juankymoral))\n\n## [1.20.1] - 2020-10-24\n\n### Enhancements\n\n#### Dashboards\n\n- Charge Level: Always show 0% and 100% when state of charge is shown in a diagram ([#980](https://github.com/adriankumpf/teslamate/pull/980) by [mbertheau](https://github.com/mbertheau))\n- Charging Stats: Titles/labels now match pie-charts ([#998](https://github.com/adriankumpf/teslamate/pull/998) by [roadrash2108](https://github.com/roadrash2108))\n- Drive Details: Increase width of odometer panel\n- Efficiency: Set a fixed max value and use LCD gauge\n- Overview: Fix overlapping timestamps in discrete map ([#995](https://github.com/adriankumpf/teslamate/pull/995) by [pmboothby](https://github.com/pmboothby))\n- Fix overlapping timestamps in trip and states dashboard\n- Statistics: Add links to other dashboards ([#973](https://github.com/adriankumpf/teslamate/pull/973) by [DrMichael](https://github.com/DrMichael))\n\n#### Translations\n\n- Update Norwegian translation ([#996](https://github.com/adriankumpf/teslamate/pull/996) and [#1007](https://github.com/adriankumpf/teslamate/pull/1007) by [spacecosmos](https://github.com/spacecosmos))\n- Update Swedish translation ([#1029](https://github.com/adriankumpf/teslamate/pull/1029) by [tobiasehlert](https://github.com/tobiasehlert))\n\n#### Other\n\n- Display update version in the homescreen update tooltip ([#976](https://github.com/adriankumpf/teslamate/pull/976) by [ayonix](https://github.com/ayonix))\n- Customize Grafana home screen logo ([#1004](https://github.com/adriankumpf/teslamate/pull/1004) by [gimmespam](https://github.com/gimmespam))\n- Bump Grafana to 7.2.1\n\n### Bug Fixes\n\n- Fix tooltips in car overview being hidden by .card ([#975](https://github.com/adriankumpf/teslamate/pull/975) by [ayonix](https://github.com/ayonix))\n- Make Statistics dashboard compatible with older versions of Postgres\n- Open Statistics dashboard with browser time zone when coming from the TeslaMate UI\n\n## [1.20.0] - 2020-10-04\n\n### Enhancements\n\n#### Dashboards\n\n- Update consumption unit to Watt-hour to match in-car unit ([#717](https://github.com/adriankumpf/teslamate/pull/717) by [mattw01](https://github.com/mattw01))\n- Update dashboards to use the new components from Grafana 7\n- Charges: Show very short charging sessions\n- Charges: Add filter for voltage ([#857](https://github.com/adriankumpf/teslamate/pull/857) by [Dulanic](https://github.com/Dulanic))\n- Charging Details: Show kWh even if still charging ([#744](https://github.com/adriankumpf/teslamate/pull/744) by [Dulanic](https://github.com/Dulanic))\n- Charging Stats: Visualize % of sum instead of max kWh in charging heat map ([#680](https://github.com/adriankumpf/teslamate/pull/680) by [Dulanic](https://github.com/Dulanic))\n- Charging Stats: Show cost per 100 km/mi (Charging Stats)\n- Drives: Update possible values for the \"cold\" column to be consistent ([#702](https://github.com/adriankumpf/teslamate/pull/702) by [Dulanic](https://github.com/Dulanic))\n- Drive Details: Show drive efficiency\n- Mileage: Optimize query to get odometer ([#804](https://github.com/adriankumpf/teslamate/pull/804) by [Dulanic](https://github.com/Dulanic))\n- Overview: Add 'total energy added' to chart ([#690](https://github.com/adriankumpf/teslamate/pull/690) by [Dulanic](https://github.com/Dulanic))\n- Overview: Hide stale temperatures\n- Overview: Show most recent driver temp setting while driving\n- Overview: Add efficiency ([#970](https://github.com/adriankumpf/teslamate/pull/970) by [DrMichael](https://github.com/DrMichael))\n- States: Display all states names ([#755](https://github.com/adriankumpf/teslamate/pull/755) by [DrMichael](https://github.com/DrMichael))\n- Updates: Add links to release notes ([#797](https://github.com/adriankumpf/teslamate/pull/797) and [#823](https://github.com/adriankumpf/teslamate/pull/823) by [pmboothby](https://github.com/pmboothby))\n- Updates: Show average range and number of chargers per software version to identify if an update had a bigger than expected impact on range ([#731](https://github.com/adriankumpf/teslamate/pull/731) and [#762](https://github.com/adriankumpf/teslamate/pull/762) by [Dulanic](https://github.com/Dulanic))\n- Updates: Fix up the version display when it only has a week value and no point release ([#925](https://github.com/adriankumpf/teslamate/pull/925) by [pyjamasam](https://github.com/pyjamasam))\n- Vampire Drain: Utilize charges as additional anchor points ([#769](https://github.com/adriankumpf/teslamate/pull/769) by [tacotran](https://github.com/tacotran))\n- Add new Statistics dashboard ([#965](https://github.com/adriankumpf/teslamate/pull/965) by [DrMichael](https://github.com/DrMichael))\n- Add the \"shared crosshair\" setting to some of the dashboards ([#932](https://github.com/adriankumpf/teslamate/pull/932) and [#962](https://github.com/adriankumpf/teslamate/pull/936) by [Kosta-Github](https://github.com/Kosta-Github))\n- \"Customize\" Grafana logo ([#890](https://github.com/adriankumpf/teslamate/pull/890) by [https://github.com/fatbasstard](https://github.com/fatbasstard))\n\n##### Note\n\n- The dashboards require **Grafana 7**. Make sure you are running the latest version of Grafana if you are not using the Docker installation.\n\n#### Translations\n\n- Update Chinese (Simplified) translation ([#747](https://github.com/adriankumpf/teslamate/pull/747) by [edward4hgl](https://github.com/edward4hgl))\n- Update French translation ([#693](https://github.com/adriankumpf/teslamate/pull/693) by [tomS3210](https://github.com/tomS3210))\n- Tweak Dutch translation ([#880](https://github.com/adriankumpf/teslamate/pull/880) and[#881](https://github.com/adriankumpf/teslamate/pull/881) by [https://github.com/fatbasstard](https://github.com/fatbasstard))\n\n#### Documentation\n\n- Update HomeAssistant documentation ([#705](https://github.com/adriankumpf/teslamate/pull/705) by [ngardiner](https://github.com/ngardiner))\n- TeslaFi Import: Clarify steps 3 and 4 about emptying the import folder ([#703](https://github.com/adriankumpf/teslamate/pull/703) by [ramonsmits](https://github.com/ramonsmits))\n- Update Upgrade documentation ([#790](https://github.com/adriankumpf/teslamate/pull/790) by [roadrash2108](https://github.com/roadrash2108))\n- Add a page that lists projects that use TeslaMate: [docs.teslamate.org/docs/projects](https://docs.teslamate.org/docs/projects)\n- An note about moving the backup file ([#813](https://github.com/adriankumpf/teslamate/pull/813) by [traviscollins](https://github.com/traviscollins))\n- Add `-T` flag to backup command ([#851](https://github.com/adriankumpf/teslamate/pull/851) by [acemtp](https://github.com/acemtp))\n\n#### Other\n\n- Optimize conversion helper functions\n- Allow to set a cost by the minute per geo-fence\n- Allow to set charge cost by minute\n- Allow negative charge costs\n- Periodically store vehicle data while charging\n- Use a more performant HTTP client\n- Try to keep using API tokens if initial refresh at startup fails\n- Tweak streaming timeouts and create a new connection after too many disconnects\n- Change default sleep requirements to not require the car to be locked\n- Use GitHub Actions to build docker images and publish them to DockerHub\n- For those who want to help **testing the latest development version**: the docker images with the `edge` tag (`teslamate/teslamate:edge` and `teslamate/grafana:edge`) are for you.\n- Allow negative cost_per_unit for geofences ([#968](https://github.com/adriankumpf/teslamate/pull/968) by [ayonix](https://github.com/ayonix))\n- Speed up parsing of CSV files (data import)\n\n### Bug Fixes\n\n- Vampire Drain: Fix duplicate values with multiple cars ([#726](https://github.com/adriankumpf/teslamate/pull/726) by [Dulanic](https://github.com/Dulanic))\n- Tooling: Ensure dashboards are restored into the same folder as they currently belong to ([#712](https://github.com/adriankumpf/teslamate/pull/712) by [sumnerboy12](https://github.com/sumnerboy12))\n- Battery Level & Range: fix wrongly displayed values for multiple cars ([#843](https://github.com/adriankumpf/teslamate/issues/843) by [lemmerk](https://github.com/lemmerk))\n- Fix handling of locations that cannot be geocoded\n- Show in progress charging sessions\n- Handle API errors during initialization\n\n## [1.19.4] - 2020-06-04\n\n- Bump Grafana to 6.7.4 which includes an [important security patch](https://grafana.com/blog/2020/06/03/grafana-6.7.4-and-7.0.2-released-with-important-security-fix)\n\n## [1.19.3] - 2020-05-03\n\n### Enhancements\n\n#### Translations\n\n- Improve Chinese (Traditional) translation accuracy ([#650](https://github.com/adriankumpf/teslamate/pull/650) by [occultsound](https://github.com/occultsound))\n- Improve Chinese (Simplified) translation accuracy ([#649](https://github.com/adriankumpf/teslamate/pull/649) by [edward4hgl](https://github.com/edward4hgl))\n- Improve Korean translation ([#663](https://github.com/adriankumpf/teslamate/pull/663) by [dongbum](https://github.com/dongbum))\n\n#### Dashboards\n\n- Overview: Update battery gauge thresholds ([#651](https://github.com/adriankumpf/teslamate/pull/651) by [wooter](https://github.com/wooter))\n- Drives: Add column header for reduced range ([#662](https://github.com/adriankumpf/teslamate/pull/662) by [Dulanic](https://github.com/Dulanic))\n- Charging Stats: Show map with frequently used chargers ([#666](https://github.com/adriankumpf/teslamate/pull/666) by [Dulanic](https://github.com/Dulanic))\n  - _Manual install: requires Grafana plugin **grafana-map-panel**_\n\n    ```bash\n    grafana-cli --pluginUrl https://github.com/panodata/grafana-map-panel/releases/download/0.9.0/grafana-map-panel-0.9.0.zip plugins install grafana-worldmap-panel-ng\n    ```\n\n#### Other\n\n- Add option `HTTP_BINDING_ADDRESS` to control the bound IP address ([#665](https://github.com/adriankumpf/teslamate/pull/665) by [dyxyl](https://github.com/dyxyl))\n- Docker image: Pre-install Grafana plugins\n- Drop unused indexes\n\n### Bug Fixes\n\n- Fix an issue that could cause a missed firmware update not to be logged retroactively\n- Fix an issue where the vehicle process could crash when logging was suspended manually\n- Improve error message for an invalid tokens table\n- Fix `min. distance per drive` on Efficiency dashboard to filter correctly in miles ([#672](https://github.com/adriankumpf/teslamate/pull/672) by [Dulanic](https://github.com/Dulanic))\n\n## [1.19.2] - 2020-04-26\n\n### Enhancements\n\n#### Translations\n\n- Add Chinese (Simplified) translation ([#625](https://github.com/adriankumpf/teslamate/pull/625) by [edward4hgl](https://github.com/edward4hgl))\n- Add Chinese (Traditional) translation ([#633](https://github.com/adriankumpf/teslamate/pull/633) by [occultsound](https://github.com/occultsound))\n- Fix typo in French translation ([#638](https://github.com/adriankumpf/teslamate/pull/638) by [tobiasehlert](https://github.com/tobiasehlert))\n- Add Dutch translation ([#647](https://github.com/adriankumpf/teslamate/pull/647) by [wooter](https://github.com/wooter))\n\n#### Dashboards\n\n- Updates: Show update duration and time since last update ([#632](https://github.com/adriankumpf/teslamate/pull/632) by [Dulanic](https://github.com/Dulanic))\n- Charging Stats: Show kWh at non-decimal level and MWh at the 3 decimal point level ([#642](https://github.com/adriankumpf/teslamate/pull/642) and [#646](https://github.com/adriankumpf/teslamate/pull/646) by [Dulanic](https://github.com/Dulanic))\n\n### Bug Fixes\n\n- Do not publish NULL or incorrect values to MQTT topics if TeslaMate is restarted while the car is asleep\n\n## [1.19.1] - 2020-04-20\n\n### Enhancements\n\n#### Translations\n\n- Add Korean translation ([#614](https://github.com/adriankumpf/teslamate/pull/614) by [dongbum](https://github.com/dongbum))\n\n### Bug Fixes\n\n- Fix an issue where the map tiles would disappear when editing a geofence\n- Fix a few things in the docs ([#611](https://github.com/adriankumpf/teslamate/pull/611) by [tobiasehlert](https://github.com/tobiasehlert))\n\n## [1.19.0] - 2020-04-19\n\n### Enhancements\n\n#### Streaming API\n\nAs the first and only Tesla logging app out there, TeslaMate now use the Tesla streaming API! This brings the following improvements:\n\n- **High precision drive data**. Rather than active polling, the streaming API allows for passive consumption of a high frequency data stream with the most important drive data (position, heading, speed, power, elevation etc.).\n- **Actual elevation above sea level**. Up until now TeslaMate used satellite terrain data to get the elevation. Driving through tunnels or across a bridges therefore resulted in inaccurate recordings. This is no longer the case!\n- **Bluetooth hints are no longer needed!** Using the streaming API does not prevent the vehicle from falling asleep, thus enabling continuous monitoring. This allows the car to fall asleep more quickly (no more idle timer) and we don't miss up to 21 minutes of driving because of halted polling.\n\n**Many thanks to everyone who participated in testing this release and contributed improvements!**\n\n#### Translations\n\n- Add Danish translation ([#584](https://github.com/adriankumpf/teslamate/pull/584) by [MartinNielsen](https://github.com/MartinNielsen))\n- Update Norwegian translation ([#544](https://github.com/adriankumpf/teslamate/pull/544) and [#591](https://github.com/adriankumpf/teslamate/pull/591) by [spacecosmos](https://github.com/spacecosmos))\n- Update Swedish translation ([#522](https://github.com/adriankumpf/teslamate/pull/522) by [tobiasehlert](https://github.com/tobiasehlert))\n- Update French translation ([#598](https://github.com/adriankumpf/teslamate/pull/598) by [tomS3210](https://github.com/tomS3210) and [MaxG88](https://github.com/MaxG88))\n- Updated Labels to Title Case ([#578](https://github.com/adriankumpf/teslamate/pull/578) by [jmiverson](https://github.com/jmiverson))\n\n#### Other enhancements\n\n- Send credentials with manifest request ([#555](https://github.com/adriankumpf/teslamate/pull/555) by [MaxG88](https://github.com/MaxG88))\n- Add option to change the language of the web interface\n- Reduce docker image size\n- Display an arrow instead of a generic marker to indicate in which direction the vehicle is heading\n- Show spinner before the map is initialized\n- Wait until the doors/trunk/frunk are closed before attempting to fall asleep\n- Inform if a new TeslaMate update is available\n- Add icons to navbar items\n- Add 'About' section to the settings page\n- Publish only those values via MQTT that have actually changed\n- Improve detection of available vehicle software updates\n\n#### New MQTT Topics\n\n- `teslamate/cars/$car_id/elevation`\n- `teslamate/cars/$car_id/trunk_open`\n- `teslamate/cars/$car_id/frunk_open`\n\n#### Documentation\n\nThe docs were revised (once again). You can find them at **[docs.teslamate.org](https://docs.teslamate.org)**.\n\n- Add portainer guide to the documentation ([#581](https://github.com/adriankumpf/teslamate/pull/581) by [DrMichael](https://github.com/DrMichael))\n- Improve Apache2 guide ([#570](https://github.com/adriankumpf/teslamate/pull/570) by [DrMichael](https://github.com/DrMichael))\n- Bump traefik to v2.2 ([#603](https://github.com/adriankumpf/teslamate/pull/603) by [oittaa](https://github.com/oittaoittaaa))\n\n### Bug Fixes\n\n- Display vampire drain range loss per hour in the correct units ([#543](https://github.com/adriankumpf/teslamate/pull/543) by [ograff](https://github.com/ograff)).\n- Trip dashboard: Add title to the drives table to allow sorting ([#592](https://github.com/adriankumpf/teslamate/pull/592) by [MaxG88](https://github.com/MaxG88))\n- Add `tini` as the init process for the TeslaMate Docker container to avoid zombie processes ([#606](https://github.com/adriankumpf/teslamate/pull/606) by [dbussink](https://github.com/dbussink))\n- Sort \"Drives\" table properly by drive date ([#595](https://github.com/adriankumpf/teslamate/pull/595) by [Dulanic](https://github.com/Dulanic))\n- Fix flashing modal on the geofence page\n- Publish an MQTT message when the health check succeeds again\n- Handle various invalid API responses that could previously cause problems\n- Fix an issue where ambiguous dates could cause the TeslaFi import to fail\n- Terminate an in progress drive when the car is put into service mode\n\n### Changed\n\n- Increase the minimum Elixir version to 1.10\n\n### Removed\n\n- Remove sleep mode requirements that are no longer needed\n- Remove option to disable sleep mode\n\n## [1.18.2] - 2020-03-28\n\n### Bug Fixes\n\n- Fix an issue that could cause charging sessions not to be properly recorded if the API reported incomplete charge data\n- Fix a problem that could cause the TeslaFi import to fail\n\n## [1.18.1] - 2020-03-23\n\n### Bug Fixes\n\n- Fix settings dropdown and Swedish translation ([#525](https://github.com/adriankumpf/teslamate/pull/525) by [tobiasehlert](https://github.com/tobiasehlert))\n\n## [1.18.0] - 2020-03-21\n\n### Enhancements\n\n- Add Swedish translation ([#485](https://github.com/adriankumpf/teslamate/pull/485) and [#522](https://github.com/adriankumpf/teslamate/pull/522) by [tobiasehlert](https://github.com/tobiasehlert))\n- Add Norwegian translation ([#500](https://github.com/adriankumpf/teslamate/pull/500) by [spacecosmos](https://github.com/spacecosmos))\n- Add Spanish translation ([#519](https://github.com/adriankumpf/teslamate/pull/519) by [alceasan](https://github.com/alceasan))\n- Overview: Add states panel ([#520](https://github.com/adriankumpf/teslamate/pull/520) by [DrMichael](https://github.com/DrMichael))\n- Immediately display the current car software version after restarting TeslaMate\n- Add mileage to the summary page\n- Add option to calculate charging costs retroactively\n- Allow to enter total cost or cost per KWh used\n- Indicate if any of the doors are open\n- Add support for session fees\n- Store more vehicle config attributes (`exterior_color`, `wheel_type`, `spoiler_type`)\n- Bump Grafana to 6.7.1\n\n#### New MQTT Topics\n\n- `teslamate/cars/$car_id/doors_open`\n- `teslamate/cars/$car_id/model`\n- `teslamate/cars/$car_id/trim_badging`\n- `teslamate/cars/$car_id/exterior_color`\n- `teslamate/cars/$car_id/wheel_type`\n- `teslamate/cars/$car_id/spoiler_type`\n\n### Bug Fixes\n\n- Drive Stats: Show stats in desired units ([#484](https://github.com/adriankumpf/teslamate/pull/484) by [pichalite](https://github.com/pichalite))\n- Drive Details: Fix odometer units ([#487](https://github.com/adriankumpf/teslamate/pull/487) by [pichalite](https://github.com/pichalite))\n- Update address formatting to avoid showing obscure names instead of towns/cities\n- Charge Details: Hide empty series\n- Suppress `Cldr.NoMatchingLocale` warnings\n- Trip: Prevent 'division by zero' error\n- Open dashboard links in a new tab to work around Grafana regression\n- Use the maximum kWh to calculate the charge cost\n\n## [1.17.1] - 2020-02-23\n\n### Bug Fixes\n\n- Fix an error that could prevent new users from logging in, among other things\n- Overview dashboard: Display odometer in desired units\n\n## [1.17.0] - 2020-02-23\n\n### Enhancements\n\n[olexs](https://github.com/olexs) has developed a toolkit to export data from the [tesla-apiscraper](https://github.com/lephisto/tesla-apiscraper) InfluxDB backend and convert it to a CSV format that can be imported using the [TeslaFi Import](https://teslamate.readthedocs.io/en/latest/import/teslafi.html). Check it out if you want to migrate data to TeslaMate: [**Import from tesla-apiscraper (BETA)**](https://teslamate.readthedocs.io/en/latest/import/tesla_apiscraper.html)\n\n- Simplify geofence editing: The radius can now be changed interactively.\n- Allow geofences to overlap: If multiple geofences cover a position, the geofence whose centre is closest is selected.\n- Increase charge cost scale / kWh ([#440](https://github.com/adriankumpf/teslamate/pull/440) by [baylanger](https://github.com/baylanger))\n- Charge cost view: Show zoom controls\n- TeslaFi Import: Preselect the timezone\n- Add configuration option [`DATABASE_SSL`](https://teslamate.readthedocs.io/en/latest/configuration/environment_variables.html)\n- Use 'rated' as default preferred range\n- Collapse 'Dashboards' dropdown on mobile\n\n#### Dashboards\n\n- Add **Trip dashboard**: This dashboard was built to visualize longer trips. It provides an overview of all drives and charges that were logged over a period of several hours or days.\n- _All:_ Link to the web interface and other dashboards\n- _Overview:_ Speed up database queries\n- _Charges:_ Add geofence filter\n- _Charge Details:_ Add cost overview ([#460](https://github.com/adriankumpf/teslamate/pull/460) by [Niek](https://github.com/Niek))\n- _Drive Details:_ Add usable battery level graph\n\n#### New MQTT Topics\n\n- `teslamate/cars/$car_id/geofence`: The name of the geofence at the current position\n\n#### Documentation\n\n- Add docs for tesla-apiscraper import ([#454](https://github.com/adriankumpf/teslamate/pull/454) by [olexs](https://github.com/olexs))\n- Update Backup & Restore docs ([#438](https://github.com/adriankumpf/teslamate/pull/438) by [AlwindB](https://github.com/AlwindB))\n- Revamp manual install docs\n\n### Bug Fixes\n\n- Fix an issue where some CSV files could not be imported\n\n## [1.16.0] - 2020-02-07\n\n### Enhancements\n\n- [Import from TeslaFi (BETA)](https://teslamate.readthedocs.io/en/latest/import/teslafi.html)\n- Calculate charge cost based on location and kWh\n- Automatically set charge cost to zero if free supercharging is enabled (configurable on the settings page)\n- Add French translation ([#397](https://github.com/adriankumpf/teslamate/pull/397) by [tomS3210](https://github.com/tomS3210))\n- Improve language detection\n- Show odometer on 'Drive Details' dashboard\n- Bump Grafana to 6.6.1\n- Bump Elixir to 1.10\n\n#### Documentation\n\n- New FAQ entry for adding API tokens directly into the database instead of using username/password ([#412](https://github.com/adriankumpf/teslamate/pull/412) by [wishbone1138](https://github.com/wishbone1138))\n- Improve standalone install documentation ([#416](https://github.com/adriankumpf/teslamate/pull/416) by [Niek](https://github.com/Niek))\n- Improve iOS Shortcuts guide ([#405](https://github.com/adriankumpf/teslamate/pull/405) by [DP19](https://github.com/DP19))\n\n### Bug Fixes\n\n- Re-add charge annotations to the 'Projected Range' dashboard ([#393](https://github.com/adriankumpf/teslamate/pull/393) by [ctraber](https://github.com/ctraber))\n- Correct typos in projected-range.json ([#395](https://github.com/adriankumpf/teslamate/pull/395) by [shagberg](https://github.com/shagberg))\n- Increase height of the pie charts panels\n- Address an issue where a drive would not be properly completed if the vehicle was suddenly reported as asleep after being offline for a while\n- Fix energy used in 'Drive Details'\n\n## [1.15.1] - 2020-01-25\n\n### Enhancements\n\n- Tweak polling intervals\n- Make the web interface feel snappier\n\n### Bug Fixes\n\n- Fix an issue where distance, energy used and duration were missing on the Drive Details dashboard if the length unit was set to miles\n\n## [1.15.0] - 2020-01-23\n\n### Enhancements\n\n- Add charge cost interface\n- Display usable SOC and show snowflake icon on summary page ([#338](https://github.com/adriankumpf/teslamate/pull/338) by [ctraber](https://github.com/ctraber))\n- Log missed software updates\n- Add tooltip with the estimated range at 100%\n- Remove software version commit hash\n- Format remaining charge time\n- Add option to use a custom namespace for MQTT topics\n- Periodically store vehicle data while online\n- Use the Accept-Language HTTP header get the locale (Supported languages: English, German)\n- Add setting to change the preferred language of OpenStreetMap results\n- Show spinner while fetching vehicle data\n- Add dropdown with dashboard links to the navigation bar\n\n#### New MQTT Topics\n\n- `teslamate/cars/$car_id/usable_battery_level`\n\n#### Dashboards\n\n- Projected Range: Use `usable_battery_level` to calculate the projected range and add more panels ([#338](https://github.com/adriankumpf/teslamate/pull/338), [#367](https://github.com/adriankumpf/teslamate/pull/367) by [ctraber](https://github.com/ctraber))\n- Add `tesla` tag ([#369](https://github.com/adriankumpf/teslamate/pull/369) by [TechForze](https://github.com/TechForze))\n- Vampire Drain: show SOC difference and ❄ (reduced range)\n- Charging Stats: Show share of AC/DC charging\n- Charging Stats: Show top charging stations by cost\n- Overview dashboard: Use the preferred range\n- Overview dashboard: Always show latest voltage and power while charging\n- Add Charge Level dashboard\n- Add Drive Stats dashboard\n- Revamp Drives/Drive Details and Charges/Charge Details dashboards\n\n#### Documentation\n\n- Add docs for an advanced Docker install with Apache2 ([#361](https://github.com/adriankumpf/teslamate/pull/361) by [DrMichael](https://github.com/DrMichael))\n- Add docs for backup and restore ([#361](https://github.com/adriankumpf/teslamate/pull/361) by [DrMichael](https://github.com/DrMichael))\n- Update the macrodroid docs ([#359](https://github.com/adriankumpf/teslamate/pull/359) by [markusdd](https://github.com/markusdd))\n- Add docs for manually fixing data\n- Add docs for updating Postgres\n\n### Bug Fixes\n\n- Fix tooltips in Safari (iOS)\n- Always publish the shift state via MQTT\n- Fix an issue where he charge location was not be displayed\n- Fix an issue that could cause the added charge kWh to be shown as 0\n\n**⚠️ Please note:** Due to internal changes, all addresses will be recalculated on first startup. Depending on the amount of data, this process may take up to 30 minutes or longer.\n\n## [1.14.3] - 2020-01-06\n\n### Enhancements\n\n- Locations dashboard: Visualize cities and states with the most stored addresses\n\n### Bug Fixes\n\n- Fix an issue where a broken rear window sensor could cause the windows to always be displayed as open\n- Address an issue where a charge wouldn't be properly logged if the Tesla API reported invalid charge data\n- Fix a bug that could cause the geo-fence form to become unresponsive\n\n## [1.14.2] - 2020-01-03\n\n### Bug Fixes\n\n- Fix an issue where invalid or revoked tokens could cause the application to crash after startup\n- Change default time range in the 'Updates' dashboard\n\n## [1.14.1] - 2019-12-24\n\n### Bug Fixes\n\n- Fix an issue where the database migrations would not succeed if there were charges without any data points\n\n## [1.14.0] - 2019-12-22\n\n### Enhancements\n\n#### Documentation\n\n[@gundalow](https://github.com/gundalow) has revamped the docs ([#292](https://github.com/adriankumpf/teslamate/pull/292), [#314](https://github.com/adriankumpf/teslamate/pull/314)). The new documentation is available here: [teslamate.readthedocs.io](https://teslamate.readthedocs.io)\n\n#### Automatic phase correction\n\nThe phase correction is now applied automatically.\n\nBackground: some vehicles incorrectly report 2 instead of 1 or 3 phases when charging. This led to an incorrect calculation of the 'kWh used'. Furthermore, the calculation did not work reliably in three-phase networks with e.g. 127/220V. Therefore it was necessary in the past to manually activate a phase correction for specific geo-fences. With this update the correction is now applied automatically.\n\n#### Other enhancements\n\n- Refactored API module\n- Increased polling frequency in asleep state\n- New OSM aliases\n- ... and other minor improvements\n\n### Bug Fixes\n\n- Efficiency Dashboard: convert km/h to mph in the temperature efficiency table\n- Fix an issue where the application could crash because the database pool was too small\n- Fix an issue where a drive/charge could be split into two parts due to API timeouts\n\n## [1.13.2] - 2019-12-07\n\n### Enhancements\n\n- Enable the time range control in the \"Charging Stats\" dashboard ([#278](https://github.com/adriankumpf/teslamate/pull/278) by [@nnoally](https://github.com/nnoally))\n- Various docs improvements ([#285](https://github.com/adriankumpf/teslamate/pull/285) by [@gundalow](https://github.com/gundalow))\n\n### Bug Fixes\n\n- Fix issue where on a brand new installation suspending logging would only work after a restart\n- Fix the elevation scale in the Drive Details\n\n## [1.13.1] - 2019-11-26\n\n### Enhancements\n\nAdd a database column that will allow tracking charge costs:\n\n- Merge 20191117042320_add_cost_field_to_charges.exs (Charge Cost field) ([#258](https://github.com/adriankumpf/teslamate/pull/258) by [@ngardiner](https://github.com/ngardiner))\n- Grafana Dashboard Integration for Charge Cost ([#273](https://github.com/adriankumpf/teslamate/pull/273) by [@ngardiner](https://github.com/ngardiner))\n\nNote: There is no charging cost interface either manual or automatic at this point but there will be in the future.\n\n### Bug Fixes\n\n- Downgrade the Grafana docker image to v6.3.7 because there are still issues with ARM-compatible images\n- Fix an issue where the selected car was not displayed when opening the drive or charging details\n\n## [1.13.0] - 2019-11-25\n\n### New Features\n\n- Display link \"Dashboards\" inside the navigation bar (it becomes visible after clicking an address in one of the Grafana dashboards. Alternatively the Grafana URL can be added manually on the settings page)\n- Enable or disable the sleep mode depending on the location. For example, the car can be allowed to sleep at home or work, but nowhere else.\n- Extend Charge Stats Dashboard with discharge stats, a charge delta graph and a charge heatmap ([#270](https://github.com/adriankumpf/teslamate/pull/270) by [@marcogabriel](https://github.com/marcogabriel))\n\n### Enhancements\n\n- Make sleep mode separately configurable for each car\n- Reduce default \"Time to try sleeping\" to 12 minutes for newer vehicles\n- The \"States\" dashboard now includes software updates\n- Automatically repair trips and charges with missing addresses (e.g. because OpenStreetMap was temporarily unavailable)\n- Update thresholds of the battery level gauge ([#256](https://github.com/adriankumpf/teslamate/pull/256) by [@marcogabriel](https://github.com/marcogabriel))\n\n### Bug Fixes\n\n- Fix issue where consumption values were displayed as 0\n- Fix issue where installing a software update when charging would produce an incomplete charge record\n\n## [1.12.2] - 2019-11-06\n\n### Bug Fixes\n\n- Fix an issue where the \"states\" graph would not show every drive/charge\n- Fix an issue where the application would not start if the vehicle was parked at a place with poor reception\n- Remove duplicate table row \"Remaining Time\"\n\n## [1.12.1] - 2019-11-03\n\n### Enhancements\n\n- Display remaining time while charging\n\n### New MQTT Topics\n\n- `teslamate/cars/$car_id/heading`\n\n### Bug Fixes\n\n- Consistent language for label of charging events ([#299](https://github.com/adriankumpf/teslamate/pull/229))\n- Cap charging efficiency to 100%\n\n## [1.12.0] - 2019-10-28\n\nWe finally have **documentation**! Many thanks to [@ngardiner](https://github.com/ngardiner), who gave the impulse and did most of the work and also to [@krezac](https://github.com/krezac), who contributed a guide to creating iOS Shortcuts for TeslaMate!\n\n### New Features\n\n#### Vehicle Efficiency\n\nPrevious versions of TeslaMate shipped with hard-coded efficiency values for the various Tesla models. These efficiency values are needed to calculate trip consumptions, because the Tesla API does not provide them directly.\n\nThe hard-coded values were _probably_ pretty accurate, but it was impossible to ensure the correctness of all of them. In addition, the new Model S and X \"Raven\" could not be reliably identified because the Tesla API returns wrong option codes for both.\n\nThis version eliminates the need to use these hard-coded values and instead calculates them based on the recorded charging data. It takes **at least two** charges to display the first estimate. Each subsequent charge will then continue to improve the accuracy of the estimate, which is applied retroactively to all data.\n\n#### Charge energy used\n\nIn addition to the kWh added to the battery during the charge TeslaMate now calculates the actual energy used by the charger, which in most cases is higher than the energy added to the battery.\n\nConsider this feature somewhat experimental. Theoretically, however, it should be pretty accurate as long as the vehicle has a stable internet connection while charging (other paid Tesla loggers use the same calculation method).\n\nCurrently, a firmware bug in some vehicles may cause the wrong number of phases to be reported when charging at some chargers. As a workaround, a phase correction can be activated per geo-fence.\n\n#### New MQTT Topics\n\n- `teslamate/cars/$car_id/update_available`\n- `teslamate/cars/$car_id/is_climate_on`\n- `teslamate/cars/$car_id/is_preconditioning`\n- `teslamate/cars/$car_id/is_user_present`\n\n### Enhancements\n\n- Show icon indicators for various states (sentry mode, vehicle locked, windows open, pre-conditioning etc.)\n- Various UI Tweaks\n- Grafana: show the precise duration of a trip in a tooltip\n- Serve gzipped assets\n- Disable origin check by default to simplify the installation of TeslaMate. (⚠️ For publicly exposed TeslaMate instances it is advisable to re-enable the check by adding the environment variable `CHECK_ORIGIN=true`.)\n\n### Bug Fixes\n\n- Set the correct end date for charges where the vehicle remains plugged in after completion\n- Fix an issue with vehicles that were removed from the Tesla Account\n- Correctly handle API responses which indicate that the vehicle is in service\n- Display effects of range gains (e.g. from supercharging pre-conditioning a cold battery) as NULL\n\n## [1.11.1] - 2019-10-13\n\n### Bug Fixes\n\n- Show all cars in the Overview dashboard\n\n## [1.11.0] - 2019-10-12\n\n### New Features\n\n- Add overview dashboard (by DBemis;\n  [#196](https://github.com/adriankumpf/teslamate/pull/196))\n- Make :check_origin option configurable via environment variable\n  `CHECK_ORIGIN`\n- Open GitHub release page when clicking the version tag in the navbar\n- Display the current software version\n\n### New MQTT topics\n\n- `teslamate/cars/$car_id/version`: Current software version\n\n### Enhancements\n\n- Tweak the mobile and desktop views\n- Add GIST index based on `ll_to_earth` to speed up geo-fence lookups\n- Improve accuracy of geo-fence lookups for some edge cases\n- Log option codes as well if the vehicle identification fails\n- Delete trips with less than 10m driven\n- Add/Update efficiency factors\n\n### Bug Fixes\n\n- Fix an issue where postgres' automatic analyze couldn't succeed\n- Fix an issue where the derived efficiency factors could not be calculated\n- Exit early if migrations fail\n- Downgrade Grafana to v6.3.5\n\n## [1.10.0] - 2019-10-05\n\n### Enhancements\n\n- Allow editing of geo-fence positions\n- Show warning icon if the health check fails for a vehicle\n- Use the best available SRTM data source which provides global elevation data\n  including 60N and above\n- Optimize the comparison of geo-fences by moving the lookup into the database\n- Use the exact position instead of the center of an address for the geo-fence\n  lookup\n- Generally improve error handling and error messages\n- Improve landscape mode on devices with a notch\n\n- Open the geo-fence editor by clicking on the start or destination address of\n  a trip\n\n  **Note:** For this feature to work Grafana needs to know the base URL of the\n  TeslaMate web interface. To automatically set the base URL open the web\n  interface once after upgrading to this version. Manually changing the base\n  URL is possible via the settings page.\n\n#### New MQTT topics\n\n- `teslamate/cars/$car_id/healthy`: Reports the health status of the logger\n- `teslamate/cars/$car_id/windows_open`\n- `teslamate/cars/$car_id/shift_state`\n- `teslamate/cars/$car_id/latitude`\n- `teslamate/cars/$car_id/longitude`\n- `teslamate/cars/$car_id/odometer`\n- `teslamate/cars/$car_id/charge_port_door_open`\n- `teslamate/cars/$car_id/charger_actual_current`\n- `teslamate/cars/$car_id/charger_phases`\n- `teslamate/cars/$car_id/charger_power`\n- `teslamate/cars/$car_id/charger_voltage`\n- `teslamate/cars/$car_id/time_to_full_charge`\n\n### Bug Fixes\n\n- Automatically restart parts of the application if Tesla decides yet again to\n  change the IDs of some vehicles\n- Request to sign in again if the access tokens become invalid e.g. because the\n  password of the Tesla Account has been changed\n- Protect against empty payloads during an update to prevent an update from\n  not being fully logged\n- Log the number of charging phases as returned by the API\n\n### ⚠️ Running Migrations\n\n_Users of the default `docker-compose.yml` can skip this part._\n\nTo run the migrations successfully, the database user has to have\nsuperuser rights (temporarily):\n\n- To add superuser rights: `ALTER USER teslamate WITH SUPERUSER;`\n- To remove superuser rights: `ALTER USER teslamate WITH NOSUPERUSER;`\n\n## [1.9.1] - 2019-09-24\n\n### Fixed\n\n- Set position when selecting a search entry\n- Fix deletion of geo-fences\n\n## [1.9.0] - 2019-09-24\n\n### Added\n\n- Show a map with the current vehicle position on the web interface\n- Add a satellite/hybrid layer to the geo-fence map\n- Use elevation data with 1 arc second (~30m) accuracy everywhere not just in\n  the US\n- Add support for MQTT SSL ([#140](https://github.com/adriankumpf/teslamate/pull/140))\n- Add \"Charged\" annotation to the degradation dashboard\n- Add preferred range setting: you can now choose between \"ideal\" and \"rated\"\n  range to use as the basis for efficiency and other metrics\n\n### Changed\n\n- Require a data source named \"TeslaMate\":\n\n  If you don't run the `teslamate/grafana` docker container the Grafana data\n  source has to have the name \"TeslaMate\". Prior to this change the default\n  data source was used.\n\n- Renamed the MQTT topic `teslamate/cars/$car_id/battery_range_km` to\n  `teslamate/cars/$car_id/rated_battery_range_km`.\n\n### Fixed\n\n- Prevent suspending when an update is in progress\n- Fix charge counter when using with multi vehicles\n  ([#175](https://github.com/adriankumpf/teslamate/pull/175))\n\n### Removed\n\n- Drop support for the deprecated env variables `TESLA_USERNAME` and\n  `TESLA_PASSWORD`\n\n## [1.8.0] - 2019-09-03\n\n### Added\n\n- Identify cars by VIN: This hopefully eliminates any upcoming problems when\n  Tesla decides yet again to change the IDs of their cars ...\n- Pick geo-fences from a map and show their radius\n\n### Fixed\n\n- Only add elevation to positions for which SRTM elevation data is available\n- [Security] Bump Grafana version\n\n## [1.7.0] - 2019-08-29\n\n### Added\n\n- Locally (!) query all locations for elevation data from the NASA Shuttle\n  Radar Topography Mission (SRTM)\n- Add elevation graph to the `Drive Details` dashboard\n- Display rated range on the web interface and on the `Drive Details` dashboard\n- Switch to the `vehicle_config` API endpoint to identify vehicles\n- Display the default and derived efficiency factor on the `Efficiency` dashboard\n  to detect inaccuracies and to **crowdsource** the correct factors:\n\n  **Note:** If there is no default efficiency factor or you think the default factor for\n  your vehicle might be wrong, please open an issue and attach a screenshot of\n  the table showing the efficiency factor(s) for your vehicle.\n\n- Display charger power on the web interface\n\n### Fixed\n\n- Fix calculation of `charge_energy_added` if a previously stopped charge\n  session is resumed\n\n## [1.6.2] - 2019-08-26\n\n### Fixed\n\n- Fix migration that could panic when upgrading from v1.4 to v1.6\n- Fix efficiency calculation\n\n## [1.6.1] - 2019-08-25\n\n### Added\n\n- Add separately configurable sleep requirements\n\n### Fixed\n\n- Improve identification of performance models\n- Fix Model X identification\n- Improve browser compatibility of the web interface\n- Disable basic auth in Grafana\n- Remove pre-calculated consumption columns and instead calculate consumption\n  values dynamically based on the given efficiency factor\n- Add various database constraints to keep data in a consistent state\n\n## [1.6.0] - 2019-08-18\n\n### Added / Changed\n\n#### Dashboards\n\n- Display car name instead of its id and replace dropdown with separate row for each car\n- Improve States dashboard:\n  - show state names instead of arbitrary numbers\n  - include drives and charge sessions\n- Vampire Drain: include offline state when calculating the standby value\n- Drive Details: add estimated range graph\n- Degradation: Increase resolution of projected 100% range\n\n#### Web UI\n\n- Add favicons\n- Fetch last known values from database after (re)starting TeslaMate\n- Show duration of current state\n- Show estimated range\n- Hide stale temperature data\n- Hide some metrics when they're not needed\n\n### Fixed\n\n- Interpret a significant offline period with SOC gains as a charge session\n- Timeout drive after being offline for too long\n- Dashboards: Dynamically calculate consumption values based on stored `car.efficiency`\n\n## [1.5.3] - 2019-08-14\n\n### Fixed\n\n- Add extra values to the \"Time to Try Sleeping\" dropdown\n- Rollback the \"Time to Try Sleeping\" setting to previous pre v1.5 value (21 min) to play it safe\n\n  **Note to Model 3 owners and everyone who likes to tweak things a bit**: most\n  cars seem to handle a value of 12 min just fine. Doing so reduces the\n  likelihood of potential data gaps. Just keep an eye on your car afterwards to\n  see if it still goes into sleep mode.\n\n- Enable filtering of charges by date\n- Fix charges query to include the very first charge\n\n## [1.5.2] - 2019-08-13\n\n### Fixed\n\n- Fix migration that could panic if upgrading from &lt;v1.4.3 to v1.5\n\n## [1.5.1] - 2019-08-13\n\n### Fixed\n\n- Remove `shift_state` condition which could prevent some cars from falling asleep\n\n## [1.5.0] - 2019-08-12\n\n### Added\n\n- Add geo-fence feature\n- Make units of length and temperature separately configurable\n- Make `time to try sleeping` and `idle time before trying to sleep` configurable\n- Show buttons `try to sleep` and `cancel sleep attempt` on status screen if possible\n- Add charging stats: charged in total, total number of charges, top charging stations\n\n### Changed\n\n- Reduce time to try sleeping from 21 to 12 minutes\n- Increase test coverage\n- Rename some dashboards / panels\n\n### Fixed\n\n- Add order by clause to degradation query\n- Read `LOCALE` at runtime\n\n## 1.4\n\n### 1. New custom grafana image: `teslamate/grafana`\n\nStarting with this release there is a customized Grafana docker image\n(`teslamate/grafana`) that auto provisions the datasource and dashboards which\nmakes upgrading a breeze! I strongly recommend to use it instead of manually\nre-importing dashboards.\n\nJust replace the `grafana` service in your `docker-compose.yml`:\n\n```YAML\n  # ...\n\n  grafana:\n    image: teslamate/grafana:latest\n    environment:\n      - DATABASE_USER=teslamate\n      - DATABASE_PASS=secret\n      - DATABASE_NAME=teslamate\n      - DATABASE_HOST=db\n    ports:\n      - 3000:3000\n    volumes:\n      - teslamate-grafana-data:/var/lib/grafana\n\n  # ...\n```\n\nAnd add a new volume at the bottom of the file:\n\n```YAML\nvolumes:\n    # ...\n    teslamate-grafana-data:\n    # ...\n```\n\nFind the full example in the updated README.\n\n### 2. Switch to imperial units\n\nThere is a new settings view in the web interface. To use imperial measurements\nin grafana and on the status screen just tick the checkbox it shows!\n\n### 3. Deprecation of TESLA_USERNAME and TESLA_PASSWORD\n\nWith this release API tokens are stored in the database. After starting\nTeslaMate v1.4 once, you can safely remove both environment variables.\n\nNew users need to sign in via the web interface.\n\n**Full Changelog:**\n\n## [1.4.3] - 2019-08-05\n\n### Added\n\n- Status screen: show additional charging related information\n- MQTT: add new topics\n\n  ```text\n  teslamate/cars/$car_id/plugged_in\n  teslamate/cars/$car_id/scheduled_charging_start_time\n  teslamate/cars/$car_id/charge_limit_soc\n  ```\n\n### Fixed\n\n- Fix an issue where charging processes were not completed and new charging\n  processes were created after waking up from sleep mode while still plugged in\n  to a charger.\n- Add migration to fix incomplete charging processes\n- Use local time in debug logs:\n\n  Add a `TZ` variable with your local timezone name to the environment of the\n  `teslamate` container. Otherwise timestamps use UTC.\n\n- Charging History: hide entries with 0kWh charge energy added\n- Charging History: include current `car-id` in links to `Charging` dashboard\n- Charging History: use slightly earlier start date in links to `Charging`\n  dashboard to always show the current position\n\n## [1.4.2] - 2019-08-01\n\n### Fixed\n\n- Persists tokens after auto refresh\n\n## [1.4.1] - 2019-07-31\n\n### Fixed\n\n- Convert to imperial measurements on status screen\n- Fix warnings\n\n## [1.4.0] - 2019-07-31\n\n### Dashboards\n\n#### Added\n\n- Introduce custom teslamate/grafana Docker image\n- Fetch unit variables from database\n\n#### Fixed\n\n- Fix syntax errors in consumption and charging dashboard\n- The consumption and charging dashboards can now be viewed without having to\n  select a drive / charging process first.\n\n#### Removed\n\n- The German dashboard translations have been removed. It was too time\n  consuming to keep everything up to date.\n\n### TeslaMate\n\n#### Added\n\n- Show version on web UI\n- Persist API tokens\n- Add sign in view\n- Add settings view\n\n#### Changed\n\n- Log :car_id\n\n#### Fixed\n\n- Fix generation of `secret_key_base`\n\n## [1.3.0] - 2019-07-29\n\n### Changed\n\n- Fix / inverse efficiency calculation: if distance traveled is less than the\n  ideal rated distance the efficiency will now be lower than 100% and vice-versa.\n\n  **Important: re-import the Grafana Dashboards (`en_efficiency` & `en_trips`) after restarting TeslaMate**\n\n## [1.2.0] - 2019-07-29\n\n### Added\n\n- Add psql conversion helper functions (**via database migration**)\n- Report imperial metrics\n\n  **Important: please re-import the Grafana Dashboards after restarting TeslaMate**\n\n### Fixed\n\n- Remove TZ environment variable from Dockerfile\n\n## [1.1.1] - 2019-07-27\n\n### Changed\n\n- Upgrade tesla_api\n- Upgrade Phoenix LiveView\n\n### Fixed\n\n- Fix a few english translations in the en dashboards\n- Remove `DATABASE_PORT` from docker-compose example\n- Remove port mapping from postgres in docker-compose example\n- Extend FAQ\n\n## [1.1.0] - 2019-07-27\n\n### Added\n\n- Support custom database port through `DATABASE_PORT` environment variable\n- Add entrypoint to handle db migration\n\n### Changed\n\n- Replace `node-sass` with `sass` to speed up compilation\n\n### Fixed\n\n- Update README.md to fix resume and suspend logging PUT requests.\n\n## [1.0.1] - 2019-07-26\n\n### Changed\n\n- Set unique :id to support multiple vehicles\n- Reduce default pool size to 5\n- Install python in the builder stage to build on ARM\n- Increase timeout used on assert_receive calls\n\n## [1.0.0] - 2019-07-25\n\n[unreleased]: https://github.com/teslamate-org/teslamate/compare/v3.0.0...HEAD\n[3.0.0]: https://github.com/teslamate-org/teslamate/compare/v2.2.0...v3.0.0\n[2.2.0]: https://github.com/teslamate-org/teslamate/compare/v2.1.1...v2.2.0\n[2.1.1]: https://github.com/teslamate-org/teslamate/compare/v2.1.0...v2.1.1\n[2.1.0]: https://github.com/teslamate-org/teslamate/compare/v2.0.0...v2.1.0\n[2.0.0]: https://github.com/teslamate-org/teslamate/compare/v1.33.0...v2.0.0\n[1.33.0]: https://github.com/teslamate-org/teslamate/compare/v1.32.0...v1.33.0\n[1.32.0]: https://github.com/teslamate-org/teslamate/compare/v1.31.1...v1.32.0\n[1.31.1]: https://github.com/teslamate-org/teslamate/compare/v1.31.0...v1.31.1\n[1.31.0]: https://github.com/teslamate-org/teslamate/compare/v1.30.1...v1.31.0\n[1.30.1]: https://github.com/teslamate-org/teslamate/compare/v1.30.0...v1.30.1\n[1.30.0]: https://github.com/teslamate-org/teslamate/compare/v1.29.2...v1.30.0\n[1.29.2]: https://github.com/teslamate-org/teslamate/compare/v1.29.1...v1.29.2\n[1.29.1]: https://github.com/teslamate-org/teslamate/compare/v1.29.0...v1.29.1\n[1.29.0]: https://github.com/teslamate-org/teslamate/compare/v1.28.5...v1.29.0\n[1.28.5]: https://github.com/teslamate-org/teslamate/compare/v1.28.4...v1.28.5\n[1.28.4]: https://github.com/teslamate-org/teslamate/compare/v1.28.3...v1.28.4\n[1.28.3]: https://github.com/teslamate-org/teslamate/compare/v1.28.2...v1.28.3\n[1.28.2]: https://github.com/teslamate-org/teslamate/compare/v1.28.1...v1.28.2\n[1.28.1]: https://github.com/teslamate-org/teslamate/compare/v1.28.0...v1.28.1\n[1.28.0]: https://github.com/teslamate-org/teslamate/compare/v1.27.4...v1.28.0\n[1.27.4]: https://github.com/adriankumpf/teslamate/compare/v1.27.3...v1.27.4\n[1.27.3]: https://github.com/adriankumpf/teslamate/compare/v1.27.2...v1.27.3\n[1.27.2]: https://github.com/adriankumpf/teslamate/compare/v1.27.1...v1.27.2\n[1.27.1]: https://github.com/adriankumpf/teslamate/compare/v1.27.0...v1.27.1\n[1.27.0]: https://github.com/adriankumpf/teslamate/compare/v1.26.1...v1.27.0\n[1.26.1]: https://github.com/adriankumpf/teslamate/compare/v1.26.0...v1.26.1\n[1.26.0]: https://github.com/adriankumpf/teslamate/compare/v1.25.2...v1.26.0\n[1.25.2]: https://github.com/adriankumpf/teslamate/compare/v1.25.1...v1.25.2\n[1.25.1]: https://github.com/adriankumpf/teslamate/compare/v1.25.0...v1.25.1\n[1.25.0]: https://github.com/adriankumpf/teslamate/compare/v1.24.2...v1.25.0\n[1.24.2]: https://github.com/adriankumpf/teslamate/compare/v1.24.1...v1.24.2\n[1.24.1]: https://github.com/adriankumpf/teslamate/compare/v1.24.0...v1.24.1\n[1.24.0]: https://github.com/adriankumpf/teslamate/compare/v1.23.7...v1.24.0\n[1.23.7]: https://github.com/adriankumpf/teslamate/compare/v1.23.6...v1.23.7\n[1.23.6]: https://github.com/adriankumpf/teslamate/compare/v1.23.5...v1.23.6\n[1.23.5]: https://github.com/adriankumpf/teslamate/compare/v1.23.4...v1.23.5\n[1.23.4]: https://github.com/adriankumpf/teslamate/compare/v1.23.3...v1.23.4\n[1.23.3]: https://github.com/adriankumpf/teslamate/compare/v1.23.2...v1.23.3\n[1.23.2]: https://github.com/adriankumpf/teslamate/compare/v1.23.1...v1.23.2\n[1.23.1]: https://github.com/adriankumpf/teslamate/compare/v1.23.0...v1.23.1\n[1.23.0]: https://github.com/adriankumpf/teslamate/compare/v1.22.0...v1.23.0\n[1.22.0]: https://github.com/adriankumpf/teslamate/compare/v1.21.6...v1.22.0\n[1.21.6]: https://github.com/adriankumpf/teslamate/compare/v1.21.5...v1.21.6\n[1.21.5]: https://github.com/adriankumpf/teslamate/compare/v1.21.4...v1.21.5\n[1.21.4]: https://github.com/adriankumpf/teslamate/compare/v1.21.3...v1.21.4\n[1.21.3]: https://github.com/adriankumpf/teslamate/compare/v1.21.2...v1.21.3\n[1.21.2]: https://github.com/adriankumpf/teslamate/compare/v1.21.1...v1.21.2\n[1.21.1]: https://github.com/adriankumpf/teslamate/compare/v1.21.0...v1.21.1\n[1.21.0]: https://github.com/adriankumpf/teslamate/compare/v1.20.1...v1.21.0\n[1.20.1]: https://github.com/adriankumpf/teslamate/compare/v1.20.0...v1.20.1\n[1.20.0]: https://github.com/adriankumpf/teslamate/compare/v1.19.4...v1.20.0\n[1.19.4]: https://github.com/adriankumpf/teslamate/compare/v1.19.3...v1.19.4\n[1.19.3]: https://github.com/adriankumpf/teslamate/compare/v1.19.2...v1.19.3\n[1.19.2]: https://github.com/adriankumpf/teslamate/compare/v1.19.1...v1.19.2\n[1.19.1]: https://github.com/adriankumpf/teslamate/compare/v1.19.0...v1.19.1\n[1.19.0]: https://github.com/adriankumpf/teslamate/compare/v1.18.2...v1.19.0\n[1.18.2]: https://github.com/adriankumpf/teslamate/compare/v1.18.1...v1.18.2\n[1.18.1]: https://github.com/adriankumpf/teslamate/compare/v1.18.0...v1.18.1\n[1.18.0]: https://github.com/adriankumpf/teslamate/compare/v1.17.1...v1.18.0\n[1.17.1]: https://github.com/adriankumpf/teslamate/compare/v1.17.0...v1.17.1\n[1.17.0]: https://github.com/adriankumpf/teslamate/compare/v1.16.0...v1.17.0\n[1.16.0]: https://github.com/adriankumpf/teslamate/compare/v1.15.1...v1.16.0\n[1.15.1]: https://github.com/adriankumpf/teslamate/compare/v1.15.0...v1.15.1\n[1.15.0]: https://github.com/adriankumpf/teslamate/compare/v1.14.3...v1.15.0\n[1.14.3]: https://github.com/adriankumpf/teslamate/compare/v1.14.2...v1.14.3\n[1.14.2]: https://github.com/adriankumpf/teslamate/compare/v1.14.1...v1.14.2\n[1.14.1]: https://github.com/adriankumpf/teslamate/compare/v1.14.0...v1.14.1\n[1.14.0]: https://github.com/adriankumpf/teslamate/compare/v1.13.2...v1.14.0\n[1.13.2]: https://github.com/adriankumpf/teslamate/compare/v1.13.1...v1.13.2\n[1.13.1]: https://github.com/adriankumpf/teslamate/compare/v1.13.0...v1.13.1\n[1.13.0]: https://github.com/adriankumpf/teslamate/compare/v1.12.2...v1.13.0\n[1.12.2]: https://github.com/adriankumpf/teslamate/compare/v1.12.1...v1.12.2\n[1.12.1]: https://github.com/adriankumpf/teslamate/compare/v1.12.0...v1.12.1\n[1.12.0]: https://github.com/adriankumpf/teslamate/compare/v1.11.1...v1.12.0\n[1.11.1]: https://github.com/adriankumpf/teslamate/compare/v1.11.0...v1.11.1\n[1.11.0]: https://github.com/adriankumpf/teslamate/compare/v1.10.0...v1.11.0\n[1.10.0]: https://github.com/adriankumpf/teslamate/compare/v1.9.1...v1.10.0\n[1.9.1]: https://github.com/adriankumpf/teslamate/compare/v1.9.0...v1.9.1\n[1.9.0]: https://github.com/adriankumpf/teslamate/compare/v1.8.0...v1.9.0\n[1.8.0]: https://github.com/adriankumpf/teslamate/compare/v1.7.0...v1.8.0\n[1.7.0]: https://github.com/adriankumpf/teslamate/compare/v1.6.2...v1.7.0\n[1.6.2]: https://github.com/adriankumpf/teslamate/compare/v1.6.1...v1.6.2\n[1.6.1]: https://github.com/adriankumpf/teslamate/compare/v1.6.0...v1.6.1\n[1.6.0]: https://github.com/adriankumpf/teslamate/compare/v1.5.3...v1.6.0\n[1.5.3]: https://github.com/adriankumpf/teslamate/compare/v1.5.2...v1.5.3\n[1.5.2]: https://github.com/adriankumpf/teslamate/compare/v1.5.1...v1.5.2\n[1.5.1]: https://github.com/adriankumpf/teslamate/compare/v1.5.0...v1.5.1\n[1.5.0]: https://github.com/adriankumpf/teslamate/compare/v1.4.3...v1.5.0\n[1.4.3]: https://github.com/adriankumpf/teslamate/compare/v1.4.2...v1.4.3\n[1.4.2]: https://github.com/adriankumpf/teslamate/compare/v1.4.1...v1.4.2\n[1.4.1]: https://github.com/adriankumpf/teslamate/compare/v1.4.0...v1.4.1\n[1.4.0]: https://github.com/adriankumpf/teslamate/compare/v1.3.0...v1.4.0\n[1.3.0]: https://github.com/adriankumpf/teslamate/compare/v1.2.0...v1.3.0\n[1.2.0]: https://github.com/adriankumpf/teslamate/compare/v1.1.1...v1.2.0\n[1.1.1]: https://github.com/adriankumpf/teslamate/compare/v1.1.0...v1.1.1\n[1.1.0]: https://github.com/adriankumpf/teslamate/compare/v1.0.1...v1.1.0\n[1.0.1]: https://github.com/adriankumpf/teslamate/compare/v1.0.0...v1.0.1\n[1.0.0]: https://github.com/adriankumpf/teslamate/compare/3d95859...v1.0.0\n"
  },
  {
    "path": "CONTRIBUTING",
    "content": "# Contributing Guidelines\n\nsee [Development and Contributing](https://docs.teslamate.org/docs/development/)\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM elixir:1.19.5-otp-26 AS builder\n\nSHELL [\"/bin/bash\", \"-o\", \"pipefail\", \"-c\"]\n\nRUN apt-get update \\\n    && apt-get install -y ca-certificates curl gnupg zstd brotli \\\n    && mkdir -p /etc/apt/keyrings \\\n    && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \\\n     | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \\\n    && NODE_MAJOR=22 \\\n    && echo \"deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main\" \\\n     | tee /etc/apt/sources.list.d/nodesource.list \\\n    && apt-get update \\\n    && apt-get install nodejs -y \\\n    && apt-get clean \\\n    && rm -rf /var/lib/apt/lists/*\n\nRUN mix local.rebar --force && \\\n    mix local.hex --force\n\nENV MIX_ENV=prod\nWORKDIR /opt/app\n\nCOPY mix.exs mix.lock ./\nRUN mix deps.get --only $MIX_ENV\n\nCOPY config/$MIX_ENV.exs config/$MIX_ENV.exs\nCOPY config/config.exs config/config.exs\nRUN mix deps.compile\n\nCOPY assets/package.json assets/package-lock.json ./assets/\nRUN npm ci --prefix ./assets --progress=false --no-audit --loglevel=error\n\nCOPY assets assets\nCOPY priv/static priv/static\nRUN mix assets.deploy\n\nCOPY lib lib\nCOPY priv/repo/migrations priv/repo/migrations\nCOPY priv/gettext priv/gettext\nCOPY grafana/dashboards grafana/dashboards\nCOPY VERSION VERSION\nRUN mix compile\n\nCOPY config/runtime.exs config/runtime.exs\nRUN SKIP_LOCALE_DOWNLOAD=true mix release --path /opt/built\n\n########################################################################\n\nFROM debian:trixie-slim AS app\n\nENV LANG=C.UTF-8 \\\n    SRTM_CACHE=/opt/app/.srtm_cache \\\n    HOME=/opt/app\n\nWORKDIR $HOME\n\nRUN apt-get update && apt-get install -y --no-install-recommends \\\n        libodbc2 \\\n        libsctp1 \\\n        libssl3t64 \\\n        libstdc++6 \\\n        netcat-openbsd \\\n        tini \\\n        tzdata \\\n    && apt-get clean \\\n    && rm -rf /var/lib/apt/lists/* \\\n    && groupadd --gid 10001 --system nonroot \\\n    && useradd  --uid 10000 --system --gid nonroot --home-dir /home/nonroot --shell /sbin/nologin nonroot \\\n    && chown -R nonroot:nonroot .\n\nUSER nonroot:nonroot\nCOPY --chown=nonroot:nonroot --chmod=555 entrypoint.sh /\nCOPY --from=builder --chown=nonroot:nonroot --chmod=555 /opt/built .\nRUN mkdir $SRTM_CACHE\n\nEXPOSE 4000\n\nENTRYPOINT [\"tini\", \"--\", \"/bin/dash\", \"/entrypoint.sh\"]\nCMD [\"bin/teslamate\", \"start\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n  A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate.  Many developers of free software are heartened and\nencouraged by the resulting cooperation.  However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n  The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community.  It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server.  Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n  An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals.  This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Remote Network Interaction; Use with the GNU General Public License.\n\n  Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software.  This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time.  Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published\n    by the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source.  For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code.  There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n<https://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "Makefile",
    "content": ".PHONY: help vsn grafana teslamate\n\nAPP_NAME ?= `grep 'app:' mix.exs | sed -e 's/\\[//g' -e 's/ //g' -e 's/app://' -e 's/[:,]//g'`\nAPP_VSN ?= `cat VERSION`\nBUILD ?= `git rev-parse --short HEAD`\n\nhelp: vsn\n\t@perl -nle'print $& if m{^[a-zA-Z_-]+:.*?## .*$$}' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = \":.*?## \"}; {printf \"\\033[36m%-30s\\033[0m %s\\n\", $$1, $$2}'\n\nvsn:\n\t@echo \"$(APP_NAME):$(APP_VSN)-$(BUILD)\"\n\nteslamate: vsn ## Build teslamate Docker image\n\t@docker build --pull \\\n\t\t\t-t $(APP_NAME):$(APP_VSN)-$(BUILD) \\\n\t\t\t-t $(APP_NAME) .\n\ngrafana: vsn ## Build  teslamate-grafana Docker image\n\t@cd grafana && docker build --pull -t teslamate-grafana .\n"
  },
  {
    "path": "README.md",
    "content": "# TeslaMate\n\n[![License](https://img.shields.io/badge/license-AGPL--3.0-green.svg)](https://github.com/teslamate-org/teslamate/blob/main/LICENSE)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/10859/badge)](https://www.bestpractices.dev/projects/10859)\n[![CI](https://github.com/teslamate-org/teslamate/actions/workflows/devops.yml/badge.svg)](https://github.com/teslamate-org/teslamate/actions/workflows/devops.yml)\n[![Publish Docker images](https://github.com/teslamate-org/teslamate/actions/workflows/buildx.yml/badge.svg)](https://github.com/teslamate-org/teslamate/actions/workflows/buildx.yml)\n[![Coverage](https://coveralls.io/repos/github/teslamate-org/teslamate/badge.svg?branch=main)](https://coveralls.io/github/teslamate-org/teslamate?branch=main)\n[![current version](https://img.shields.io/docker/v/teslamate/teslamate/latest)](https://hub.docker.com/r/teslamate/teslamate)\n[![docker image size](https://img.shields.io/docker/image-size/teslamate/teslamate/latest)](https://hub.docker.com/r/teslamate/teslamate)\n[![docker pulls](https://img.shields.io/docker/pulls/teslamate/teslamate?color=%23099cec)](https://hub.docker.com/r/teslamate/teslamate)\n\nA powerful, self-hosted data logger for your Tesla.\n\n- Written in **[Elixir](https://elixir-lang.org/)**\n- Data is stored in a **Postgres** database\n- Visualization and data analysis with **Grafana**\n- Vehicle data is published to a local **[MQTT](https://en.wikipedia.org/wiki/MQTT)** Broker\n\n## ⚠️ Security Warning\n\n[!CAUTION]\n**Use Official Versions Only**\n\nTo protect yourself from malicious forks, malware, and data theft, please ensure you only obtain TeslaMate from the official source:\n\n- Official Repository: [https://github.com/teslamate-org/teslamate](https://github.com/teslamate-org/teslamate)\n- Official Documentation: [https://docs.teslamate.org](https://docs.teslamate.org/)\n\nWe have received reports of deceptive websites and unofficial mobile apps (e.g. on the App Store) using the TeslaMate name to distribute modified or harmful versions. If you are using a version from another source, your Tesla account credentials and vehicle data may be at risk.\n\n## Documentation\n\nThe documentation is available at [https://docs.teslamate.org](https://docs.teslamate.org/)\n\n## Features\n\n### General\n\n- High precision drive data recording\n- No additional vampire drain: the car will fall asleep as soon as possible\n- Automatic address lookup\n- Easy integration into Home Assistant (via MQTT)\n- Easy integration into Node-Red & Telegram (via MQTT)\n- Geo-fencing feature to create custom locations\n- Supports multiple vehicles per Tesla Account\n- Charge cost tracking\n- Import from TeslaFi and tesla-apiscraper\n- Customizable theme mode (light, dark, or system default)\n\n### Dashboards\n\nSample screenshots of bundled dashboards can be seen by clicking the links below.\n\n- [Battery Health](https://docs.teslamate.org/docs/screenshots/#battery-health)\n- [Charge Level](https://docs.teslamate.org/docs/screenshots/#charge-level)\n- [Charges (Energy added / used)](https://docs.teslamate.org/docs/screenshots#charges)\n- [Charge Details](https://docs.teslamate.org/docs/screenshots#charge-details)\n- [Charging Stats](https://docs.teslamate.org/docs/screenshots#charging-stats)\n- [Database Information](https://docs.teslamate.org/docs/screenshots/#database-information)\n- [Drive Stats](https://docs.teslamate.org/docs/screenshots#drive-stats)\n- [Drives (Distance / Energy consumed (net))](https://docs.teslamate.org/docs/screenshots/#drives)\n- [Drive Details](https://docs.teslamate.org/docs/screenshots/#drive-details)\n- [Efficiency (Consumption (net / gross))](https://docs.teslamate.org/docs/screenshots#efficiency)\n- [Locations (addresses)](https://docs.teslamate.org/docs/screenshots/#location-addresses)\n- [Mileage](https://docs.teslamate.org/docs/screenshots/#mileage)\n- [Overview](https://docs.teslamate.org/docs/screenshots/#overview)\n- [Projected Range (battery degradation)](https://docs.teslamate.org/docs/screenshots#projected-range)\n- [States (see when your car was online or asleep)](https://docs.teslamate.org/docs/screenshots#states)\n- [Statistics](https://docs.teslamate.org/docs/screenshots/#statistics)\n- [Timeline](https://docs.teslamate.org/docs/screenshots/#timeline)\n- [Trip](https://docs.teslamate.org/docs/screenshots/#trip)\n- [Updates (History of installed updates)](https://docs.teslamate.org/docs/screenshots#updates)\n- [Vampire Drain](https://docs.teslamate.org/docs/screenshots#vampire-drain)\n- [Visited (Lifetime driving map)](https://docs.teslamate.org/docs/screenshots/#visited-lifetime-driving-map)\n\n## Screenshots\n\nSneak peak into TeslaMate interface and bundled dashboards. See [the docs](https://docs.teslamate.org/docs/screenshots) for additional screenshots.\n\n![Web Interface](/website/static/screenshots/web_interface.png)\n\n![Drive Details](/website/static/screenshots/drive.png)\n\n![Battery Health](/website/static/screenshots/battery-health.png)\n\n## License\n\nTeslaMate is licensed under the **GNU Affero General Public License v3.0 (AGPLv3)**.\n\nThis license is designed to ensure that TeslaMate remains free and open for everyone. By using, modifying, or building upon this project, you agree to the following:\n\n- Reciprocal Sharing (Copyleft): If you modify TeslaMate or incorporate it into another project, you must release the entire source code of your version under the same AGPLv3 license.\n- Universal Access to Source: This requirement applies regardless of how you provide the software to others—whether you distribute it as a downloadable application (e.g., in an App Store), as a pre-packaged image, or provide access to its functionality via a network service (SaaS).\n- No Closed-Source Derivatives: We do not permit the use of TeslaMate or its components in closed-source commercial products. If your software interacts with or relies on TeslaMate, it must be open-source. If you build upon this project, you are expected to contribute back to the community.\n\nFor the full legal terms, please refer to the [LICENSE](https://github.com/teslamate-org/teslamate/blob/main/LICENSE) file.\n\nKey Requirements:\n\n- Copyleft: If you modify TeslaMate and distribute it (e.g., as an app, binary, or package) or offer it as a service over a network (SaaS), you must make your modified source code available to all users under the same AGPLv3 license.\n- No \"Closed\" Forks: This license ensures that improvements made by commercial entities or third parties remain open to the entire community.\n- Attribution: You must keep all original copyright notices and license information intact.\n\n**Trademark Policy**: The use of the TeslaMate name and logo is governed by our [Trademark Policy](https://github.com/teslamate-org/teslamate/blob/main/TRADEMARK.md).\n\n**Contributions:** All contributors must sign our [Contributor License Agreement](https://github.com/teslamate-org/legal/blob/main/CLA.md). This is handled via cla-assistant.io automatically on first PR and does not take long. **Why do we need this?** It guarantees that TeslaMate will **always remain Free Software** (AGPL-3.0) and allows the [teslamate-org](https://github.com/teslamate-org) to legally defend the project against license violations.\n\n## Star History\n\n<!-- markdownlint-disable MD033 -->\n<a href=\"https://www.star-history.com/#teslamate-org/teslamate&type=date&legend=top-left\">\n <picture>\n   <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=teslamate-org/teslamate&type=date&theme=dark&legend=top-left\" />\n   <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=teslamate-org/teslamate&type=date&legend=top-left\" />\n   <img alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=teslamate-org/teslamate&type=date&legend=top-left\" />\n </picture>\n</a>\n<!-- markdownlint-enable MD033 -->\n\n## Credits\n\n- Initial Author: Adrian Kumpf\n- List of Contributors:\n- [![TeslaMate Contributors](https://contrib.rocks/image?repo=teslamate-org/teslamate)](https://github.com/teslamate-org/teslamate/graphs/contributors)\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\n## Reporting a Vulnerability\n\nFor reporting a security vulnerability, please contact `security AT teslamate DOT org`.\n"
  },
  {
    "path": "TRADEMARK.md",
    "content": "# TeslaMate Trademark Policy\n\nLast updated: February 2, 2026\n\n## 1. Purpose\n\nThis policy exists to protect the integrity of the **TeslaMate Software** and its community. It ensures that users can clearly distinguish between the official, open-source project and unofficial, commercial, or potentially deceptive third-party offerings.\n\nIt exists alongside the software’s [license](https://github.com/teslamate-org/teslamate/blob/main/LICENSE) (AGPLv3). The AGPLv3 covers the code; this policy covers the branding.\n\n## 2. Protected Marks\n\nThe trademark includes the name **TeslaMate** (hereinafter referred to as \"TeslaMate\" or \"brand\"), the software (hereinafter referred to as \"TeslaMate\") and related visual identity elements (hereinafter referred to as \"Logos\"). The name must always be written in CamelCase: TeslaMate (never \"Teslamate\", \"teslamate\", \"tesla mate\", \"Tesla-Mate\", or any other variation).\n\n## 3. Philosophy\n\nTeslaMate is open source and encourages self-hosting.\n\nWe want individuals, communities, and non-profits to freely use the TeslaMate name and logo for non-commercial purposes.\\\nAt the same time, we reserve the right to control commercial use of the brand.\n\n## 4. Permitted Use (No Permission Required)\n\nYou may use the name \"TeslaMate\" and Logos without prior written permission for:\n\n- Personal self-hosting — running TeslaMate for yourself, friends, or family.\n- Compatibility Notices: Describing your own tool’s technical compatibility with the Software (e.g., \"compatible with TeslaMate\").\n- Non-commercial Educational/Community Content: Using the name in blogs, tutorials, or forum discussions to talk about the project.\n- Open Source Plugins: Free, open-source (AGPL-compatible) plugins may use the name in their description to indicate technical interoperability.\n- Nominative references — talking about, writing about, or demonstrating TeslaMate truthfully.\n\n## 5. Prohibited Use (Strictly Forbidden)\n\nTo prevent exploitation of the **Software** and its reputation, the following are strictly prohibited without prior written consent from the teslamate-org maintainers:\n\n- Product Titles: You may not use \"TeslaMate\" as part of a product name, especially in combinations like \"[Product] for TeslaMate\", for any commercial or closed-source software, application, mobile application, or service.\n- Misleading Affiliation: You may not use a name or branding that suggests an official endorsement, partnership, or that your product is a \"Pro\" or \"Official\" version of the Software.\n- Using the TeslaMate name in a company name, brand, or product line.\n- Marketing commercial support, consulting, or training under the TeslaMate name.\n- Registering or using domains or social media handles containing \"TeslaMate\" that imply official status (e.g. teslamatecloud.com, @teslamateapp).\n- Producing merchandise (shirts, stickers, etc.) with the TeslaMate name or Logos for sale.\n- Deceptive Use: Using the name or logo to distribute malware, track users without consent, any illegal activities, or sell a \"Pro\" version of the official software.\n\n## 6. Requirements for Third-Party Projects\n\nAny unofficial tool that interfaces with TeslaMate in any way (this includes via API or database) must include a prominent disclaimer in its README and/or About section:\n\n\"This project is an unofficial community tool and is not affiliated with, endorsed by, or supported by the official TeslaMate project.\"\n\n## 7. Enforcement\n\nWe reserve the right to file Trademark Infringement Complaints (e.g., App Store Takedowns or DMCA notices) against any individual or entity violating these rules.\n\n## 8. Changes\n\nThis policy may be updated periodically. Any changes will be documented in this file.\n"
  },
  {
    "path": "VERSION",
    "content": "3.0.1-dev"
  },
  {
    "path": "assets/css/app.scss",
    "content": "@charset \"utf-8\";\n\n// Override global Sass variables from the /utilities folder\n@use \"bulma/sass/utilities\" with (\n  $widescreen-enabled: false,\n  $fullhd-enabled: false,\n  $radius: 6px,\n  $radius-large: 6px\n);\n\n// Modal customization\n@use \"bulma/sass/components/modal\" with (\n  $modal-z: 1010,\n  $modal-content-width: 560px,\n  $modal-card-head-padding: 15px,\n  $modal-card-body-padding: 5px 15px 10px,\n  $modal-card-head-background-color: utilities.$white\n);\n\n// Table customization\n@use \"bulma/sass/elements/table\" with (\n  $table-background-color: transparent\n);\n\n// Notification customization\n@use \"bulma/sass/elements/notification\" with (\n  $notification-padding: 0.75rem 1.25rem 0.75rem 0.75rem\n);\n\n// Card customization\n@use \"bulma/sass/components/card\" with (\n  $card-radius: 6px\n);\n\n@use \"bulma/sass/utilities/mixins\" as mx;\n\n// Import the components you need\n@forward \"bulma/sass/base\";\n@forward \"bulma/sass/components/breadcrumb\";\n@forward \"bulma/sass/components/dropdown\";\n@forward \"bulma/sass/components/message\";\n@forward \"bulma/sass/components/navbar\";\n@forward \"bulma/sass/components/tabs\";\n@forward \"bulma/sass/elements/box\";\n@forward \"bulma/sass/elements/button\";\n@forward \"bulma/sass/elements/icon\";\n@forward \"bulma/sass/elements/tag\";\n@forward \"bulma/sass/elements/title\";\n@forward \"bulma/sass/form\";\n@forward \"bulma/sass/grid\";\n@forward \"bulma/sass/helpers\";\n@forward \"bulma/sass/layout/container\";\n@forward \"bulma/sass/layout/section\";\n\n// Import the themes so that all CSS variables have a value\n@forward \"bulma/sass/themes\";\n\n// Theme overrides\n@import \"./themes/light\";\n@import \"./themes/dark\";\n\n@import \"@creativebulma/bulma-tooltip/dist/bulma-tooltip.css\";\n@import \"@creativebulma/bulma-divider/dist/bulma-divider.css\";\n@import \"bulma-switch/dist/css/bulma-switch.min.css\";\n\n@import \"leaflet/dist/leaflet.css\";\n@import \"leaflet-control-geocoder/dist/Control.Geocoder.css\";\n@import \"@geoman-io/leaflet-geoman-free/dist/leaflet-geoman.css\";\n\n$mdi-font-path: \"@mdi/font/fonts\";\n@import \"@mdi/font/scss/materialdesignicons.scss\";\n\n@import \"./vendor/modal-fx\";\n\n// @import \"../../deps/phoenix_live_view/assets/css/live_view.css\";\n.phx-loading {\n  cursor: wait;\n\n  * {\n    pointer-events: none;\n  }\n}\n\na:hover {\n  text-decoration: underline;\n}\n\n.alert:empty {\n  display: none;\n}\n\nnav.navbar {\n  z-index: 401;\n\n  a.navbar-item,\n  a.navbar-link {\n    display: flex;\n    align-items: center;\n    text-decoration: none;\n  }\n}\n\n.car {\n  display: flex;\n  flex-direction: column;\n  margin-bottom: 25px;\n  overflow: visible;\n\n  .card-content {\n    padding: 0.8rem 0.4rem;\n  }\n\n  .content table td,\n  .content table th {\n    border: none;\n  }\n\n  .map {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    border-radius: 6px 6px 0 0;\n\n    .leaflet-control-attribution.leaflet-control {\n      display: none;\n    }\n  }\n\n  .card-content {\n    .icons {\n      span[data-tooltip] {\n        border-bottom: none;\n      }\n    }\n\n    .media {\n      padding: 0 0.25em;\n      justify-content: space-between;\n    }\n\n    .table {\n      &.is-narrow td {\n        padding: 0.125em 0.25em;\n      }\n\n      th:first-of-type {\n        width: 50%;\n      }\n    }\n\n    @include mx.until(300px) {\n      .duration-extended {\n        display: none;\n      }\n    }\n  }\n\n  @include mx.tablet {\n    flex-direction: row;\n\n    .card-image {\n      min-width: 300px;\n      width: 50%;\n\n      .map {\n        position: absolute !important;\n        top: 0;\n        bottom: 0;\n        height: 100% !important;\n        width: 100%;\n        border-radius: 6px 0 0 6px;\n      }\n    }\n\n    .card-content {\n      width: 100%;\n      max-width: 550px;\n      padding: 0.75rem 1.5rem;\n    }\n  }\n\n  button[phx-click=\"suspend_logging\"]:disabled {\n    pointer-events: none;\n  }\n}\n\n.navbar-brand a.navbar-item:hover {\n  background-color: transparent !important;\n}\n\n.field.is-horizontal {\n  &.center-vertically .field {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap;\n\n    .control:not(.addon) {\n      flex-grow: 1;\n    }\n  }\n\n  .field {\n    flex-wrap: wrap;\n\n    .help:not(:empty) {\n      width: 100%;\n    }\n  }\n\n  .field-label {\n    min-width: 165px;\n\n    .tooltip:before {\n      text-align: left !important;\n    }\n\n    .icon {\n      vertical-align: middle;\n    }\n\n    .mdi {\n      font-size: 1em;\n    }\n  }\n}\n\n.notification {\n  .mdi {\n    font-size: 1em;\n  }\n\n  strong {\n    color: currentColor !important;\n  }\n}\n\n.mdi {\n  font-size: 1.25em;\n}\n\n@media screen and (orientation: landscape) and (max-width: (utilities.$desktop - 1px)) {\n  body {\n    -webkit-text-size-adjust: none;\n  }\n\n  .navbar .navbar-brand,\n  .navbar .navbar-end,\n  main.section .container {\n    max-width: 95%;\n  }\n\n  .navbar .navbar-brand,\n  .navbar .navbar-end {\n    margin: 0 auto;\n  }\n}\n\n@include mx.mobile() {\n  .navbar-item.has-dropdown {\n    .navbar-dropdown {\n      display: none;\n    }\n\n    &.active {\n      .navbar-dropdown {\n        display: block;\n      }\n    }\n  }\n}\n\n@include mx.until(390px) {\n  main.section {\n    padding: 1.5rem 0.75rem;\n  }\n}\n\n.is-truncated {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.title-with-addon {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  &:not(:last-child) {\n    margin-bottom: 1.5rem;\n  }\n}\n\n.spinner {\n  display: inline-flex;\n  justify-content: center;\n  height: 1rem;\n  width: 1rem;\n\n  .is-loading {\n    position: relative;\n    pointer-events: none;\n    &:after {\n      @extend %loader;\n      @include mx.center(1em);\n      position: absolute !important;\n    }\n  }\n}\n\n.field.is-horizontal .field-label {\n  min-width: 200px;\n}\n\nmain.full-height {\n  min-height: calc(100vh - 102px);\n  min-height: calc((var(--vh, 1vh) * 100) - 102px);\n}\n\nbody {\n  display: flex;\n  flex-direction: column;\n  min-height: 100vh;\n}\n\nmain.section {\n  flex: 1;\n}\n\n.footer {\n  height: 50px;\n  opacity: 0.8;\n  margin-top: auto;\n\n  .button.is-text {\n    text-decoration: initial;\n  }\n}\n\n.about {\n  margin-top: 50px;\n\n  th,\n  td {\n    border: none;\n  }\n}\n\n.mfa {\n  .device .select select[disabled] {\n    background-color: initial;\n  }\n}\n"
  },
  {
    "path": "assets/css/themes/dark.scss",
    "content": "// Dark theme overrides via CSS variables for TeslaMate\n// Applied when [data-theme=\"dark\"] is set on the html element\n\n@use \"bulma/sass/utilities/css-variables\" as cv;\n@use \"bulma/sass/utilities/mixins\" as mx;\n\n@include cv.bulma-theme($name: \"dark\") {\n  --bulma-shadow: none;\n  --bulma-scheme-main-h: 214;\n  --bulma-scheme-main-s: 13%;\n  --bulma-scheme-main-l: 11%;\n  --bulma-body-background-color: rgb(17, 18, 23);\n  --bulma-text: rgb(204, 204, 220, 0.75);\n  --bulma-text-strong: rgb(204, 204, 220);\n  --bulma-dark-h: 214;\n  --bulma-dark-s: 13%;\n  --bulma-dark-l: 11%;\n  --bulma-link: rgb(110, 159, 255);\n  --bulma-link-text: rgb(110, 159, 255);\n  --bulma-link-text-active: rgb(110, 159, 255);\n  --bulma-hover-background-l-delta: 7.5%;\n\n  .box,\n  .card {\n    border: 1px solid rgba(204, 204, 220, 0.12);\n  }\n\n  .navbar {\n    --bulma-navbar-dropdown-item-background-l: 13.5%;\n    --bulma-navbar-dropdown-boxed-shadow: rgb(1, 4, 9) 0px 8px 24px;\n    --bulma-navbar-burger-color: rgba(204, 204, 220, 0.65);\n  }\n\n  .navbar.is-dark {\n    border-bottom: 1px solid rgba(204, 204, 220, 0.12);\n  }\n\n  .breadcrumb {\n    --bulma-breadcrumb-item-color: rgb(204, 204, 220);\n    --bulma-breadcrumb-item-active-color: rgba(204, 204, 220, 0.65);\n    --bulma-breadcrumb-item-hover-color: rgba(204, 204, 220, 0.65);\n  }\n\n  // Map tiles - monochrome style like Tesla's in-car maps\n  .dark-mode-tiles {\n    filter: grayscale(100%) invert(100%) brightness(0.95) contrast(1.1);\n  }\n}\n"
  },
  {
    "path": "assets/css/themes/light.scss",
    "content": "// Light theme overrides via CSS variables for TeslaMate\n// Applied when [data-theme=\"light\"] is set on the html element\n\n@use \"bulma/sass/utilities/css-variables\" as cv;\n@use \"bulma/sass/utilities/mixins\" as mx;\n\n@include cv.bulma-theme($name: \"light\") {\n  --bulma-shadow: none;\n  --bulma-scheme-main-h: 0;\n  --bulma-scheme-main-s: 0%;\n  --bulma-scheme-main-l: 100%;\n  --bulma-body-background-color: rgb(251, 251, 251);\n  --bulma-text: rgb(36, 41, 46, 0.75);\n  --bulma-text-strong: rgb(36, 41, 46);\n  --bulma-dark-h: 214;\n  --bulma-dark-s: 13%;\n  --bulma-dark-l: 11%;\n  --bulma-link: rgb(31, 98, 224);\n  --bulma-link-text: rgb(31, 98, 224);\n  --bulma-link-text-active: rgb(31, 98, 224);\n  --bulma-hover-background-l-delta: -7.5%;\n\n  .box,\n  .card {\n    border: 1px solid rgba(36, 41, 46, 0.12);\n  }\n\n  .navbar {\n    --bulma-navbar-dropdown-boxed-shadow: rgba(24, 26, 27, 0.18) 0px 13px 20px\n      1px;\n    --bulma-navbar-burger-color: rgba(204, 204, 220, 0.65);\n  }\n\n  .navbar.is-dark {\n    border-bottom: 1px solid rgba(204, 204, 220, 0.12);\n  }\n\n  .breadcrumb {\n    --bulma-breadcrumb-item-color: rgb(36, 41, 46);\n    --bulma-breadcrumb-item-active-color: rgba(36, 41, 46, 0.75);\n    --bulma-breadcrumb-item-hover-color: rgba(36, 41, 46, 0.75);\n  }\n}\n"
  },
  {
    "path": "assets/css/vendor/modal-fx.scss",
    "content": "// source: https://github.com/postare/bulma-modal-fx/blob/master/src/_scss/components/_modal-fx.scss\n\n$transition-duration: 0.3s;\n\n.modal {\n  display: flex;\n  visibility: hidden;\n\n  .modal-content {\n    max-width: 95%;\n  }\n\n  .modal-background {\n    transition: all $transition-duration;\n    opacity: 0;\n  }\n\n  &.is-active {\n    visibility: visible;\n    .modal-background {\n      opacity: 1;\n    }\n  }\n\n  &.modal-fx {\n    &-fadeInScale {\n      .modal-content {\n        transform: scale(0.7);\n        opacity: 0;\n        transition: all $transition-duration;\n      }\n\n      &.is-active {\n        .modal-content {\n          transform: scale(1);\n          opacity: 1;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "assets/js/app.js",
    "content": "import \"../css/app.scss\";\n\nimport \"phoenix_html\";\nimport { Socket } from \"phoenix\";\nimport { LiveSocket } from \"phoenix_live_view\";\n\nimport * as hooks from \"./hooks\";\n\nconst csrfToken = document\n  .querySelector(\"meta[name='csrf-token']\")\n  .getAttribute(\"content\");\n\nconst liveSocket = new LiveSocket(window.LIVE_PATH, Socket, {\n  hooks,\n  params: {\n    _csrf_token: csrfToken,\n    baseUrl: window.location.origin,\n    referrer: document.referrer,\n    tz: Intl && Intl.DateTimeFormat().resolvedOptions().timeZone,\n  },\n});\n\nliveSocket.connect();\n\n// liveSocket.enableDebug();\n// liveSocket.enableLatencySim(1000);\n// window.liveSocket = liveSocket;\n\nimport \"./main\";\n"
  },
  {
    "path": "assets/js/hooks.js",
    "content": "const LANG = navigator.languages\n  ? navigator.languages[0]\n  : navigator.language || navigator.userLanguage;\n\nfunction toLocalTime(dateStr, opts) {\n  const date = new Date(dateStr);\n\n  return date instanceof Date && !isNaN(date.valueOf())\n    ? date.toLocaleTimeString(LANG, opts)\n    : \"–\";\n}\n\nfunction toLocalDate(dateStr, opts) {\n  const date = new Date(dateStr);\n\n  return date instanceof Date && !isNaN(date.valueOf())\n    ? date.toLocaleDateString(LANG, opts)\n    : \"–\";\n}\n\nexport const Dropdown = {\n  mounted() {\n    const $el = this.el;\n\n    $el.querySelector(\"button\").addEventListener(\"click\", (e) => {\n      e.stopPropagation();\n      $el.classList.toggle(\"is-active\");\n    });\n\n    document.addEventListener(\"click\", () => {\n      $el.classList.remove(\"is-active\");\n    });\n  },\n};\n\nexport const LocalTime = {\n  mounted() {\n    this.el.innerText = toLocalTime(this.el.dataset.date);\n  },\n\n  updated() {\n    this.el.innerText = toLocalTime(this.el.dataset.date);\n  },\n};\n\nexport const LocalTimeRange = {\n  exec() {\n    const date = toLocalDate(this.el.dataset.startDate, {\n      year: \"numeric\",\n      month: \"short\",\n      day: \"numeric\",\n    });\n\n    const time = [this.el.dataset.startDate, this.el.dataset.endDate]\n      .map((date) =>\n        toLocalTime(date, {\n          hour: \"2-digit\",\n          minute: \"2-digit\",\n          hour12: false,\n        }),\n      )\n      .join(\" – \");\n\n    this.el.innerText = `${date}, ${time}`;\n  },\n\n  mounted() {\n    this.exec();\n  },\n  updated() {\n    this.exec();\n  },\n};\n\nexport const ConfirmGeoFenceDeletion = {\n  mounted() {\n    const { id, msg } = this.el.dataset;\n\n    this.el.addEventListener(\"click\", () => {\n      if (window.confirm(msg)) {\n        this.pushEvent(\"delete\", { id });\n      }\n    });\n  },\n};\n\nimport {\n  Map as M,\n  TileLayer,\n  LatLng,\n  Control,\n  Marker,\n  Icon,\n  Circle,\n  CircleMarker,\n} from \"leaflet\";\n\nimport markerIcon from \"leaflet/dist/images/marker-icon.png\";\nimport markerShadow from \"leaflet/dist/images/marker-shadow.png\";\n\nconst icon = new Icon({\n  iconUrl: markerIcon,\n  shadowUrl: markerShadow,\n  iconAnchor: [12, 40],\n  popupAnchor: [0, -25],\n});\n\nconst DirectionArrow = CircleMarker.extend({\n  initialize(latLng, heading, options) {\n    this._heading = heading;\n    CircleMarker.prototype.initialize.call(this, latLng, {\n      fillOpacity: 1,\n      radius: 5,\n      ...options,\n    });\n  },\n\n  setHeading(heading) {\n    this._heading = heading;\n    this.redraw();\n  },\n\n  _updatePath() {\n    const { x, y } = this._point;\n\n    if (this._heading === \"\")\n      return CircleMarker.prototype._updatePath.call(this);\n\n    this.getElement().setAttributeNS(\n      null,\n      \"transform\",\n      `translate(${x},${y}) rotate(${this._heading})`,\n    );\n\n    const path = this._empty() ? \"\" : `M0,${3} L-4,${5} L0,${-5} L4,${5} z}`;\n\n    this._renderer._setPath(this, path);\n  },\n});\n\nfunction createMap(opts) {\n  const map = new M(opts.elId != null ? `map_${opts.elId}` : \"map\", opts);\n\n  // Detect dark mode to use appropriate tiles\n  const isDarkMode =\n    document.documentElement.getAttribute(\"data-theme\") === \"dark\";\n\n  const osm = new TileLayer(\"https://tile.openstreetmap.org/{z}/{x}/{y}.png\", {\n    maxZoom: 19,\n    className: isDarkMode ? \"dark-mode-tiles\" : \"\",\n  });\n\n  if (opts.enableHybridLayer) {\n    const hybrid = new TileLayer(\n      \"http://{s}.google.com/vt/lyrs=s,h&x={x}&y={y}&z={z}\",\n      { maxZoom: 20, subdomains: [\"mt0\", \"mt1\", \"mt2\", \"mt3\"] },\n    );\n\n    new Control.Layers({ OSM: osm, Hybrid: hybrid }).addTo(map);\n  }\n\n  map.addLayer(osm);\n\n  return map;\n}\n\nexport const SimpleMap = {\n  mounted() {\n    const $position = document.querySelector(`#position_${this.el.dataset.id}`);\n\n    const map = createMap({\n      elId: this.el.dataset.id,\n      zoomControl: !!this.el.dataset.zoom,\n      boxZoom: false,\n      doubleClickZoom: false,\n      keyboard: false,\n      scrollWheelZoom: false,\n      tap: false,\n      dragging: false,\n      touchZoom: false,\n    });\n\n    const isArrow = this.el.dataset.marker === \"arrow\";\n    const [lat, lng, heading] = $position.value.split(\",\");\n\n    const marker = isArrow\n      ? new DirectionArrow([lat, lng], heading)\n      : new Marker([lat, lng], { icon });\n\n    map.setView([lat, lng], 17);\n    marker.addTo(map);\n\n    map.removeControl(map.zoomControl);\n\n    map.on(\"mouseover\", function (e) {\n      map.addControl(map.zoomControl);\n    });\n    map.on(\"mouseout\", function (e) {\n      map.removeControl(map.zoomControl);\n    });\n\n    if (isArrow) {\n      const setView = () => {\n        const [lat, lng, heading] = $position.value.split(\",\");\n        marker.setHeading(heading);\n        marker.setLatLng([lat, lng]);\n        map.setView([lat, lng], map.getZoom());\n      };\n\n      $position.addEventListener(\"change\", setView);\n    }\n  },\n};\n\nexport const TriggerChange = {\n  updated() {\n    this.el.dispatchEvent(new CustomEvent(\"change\"));\n  },\n};\n\nimport(\"leaflet-control-geocoder\");\nimport(\"@geoman-io/leaflet-geoman-free\");\n\nexport const Map = {\n  mounted() {\n    const geoFence = (name) =>\n      document.querySelector(`input[name='geo_fence[${name}]']`);\n\n    const $radius = geoFence(\"radius\");\n    const $latitude = geoFence(\"latitude\");\n    const $longitude = geoFence(\"longitude\");\n\n    const location = new LatLng($latitude.value, $longitude.value);\n\n    const controlOpts = {\n      position: \"topleft\",\n      cutPolygon: false,\n      drawCircle: false,\n      drawCircleMarker: false,\n      drawMarker: false,\n      drawPolygon: false,\n      drawPolyline: false,\n      drawRectangle: false,\n      removalMode: false,\n    };\n\n    const editOpts = {\n      allowSelfIntersection: false,\n      preventMarkerRemoval: true,\n    };\n\n    const map = createMap({ enableHybridLayer: true });\n    map.setView(location, 17, { animate: false });\n    map.pm.setLang(LANG);\n    map.pm.addControls(controlOpts);\n    map.pm.enableGlobalEditMode(editOpts);\n\n    const circle = new Circle(location, { radius: $radius.value })\n      .addTo(map)\n      .on(\"pm:edit\", (e) => {\n        const { lat, lng } = e.target.getLatLng();\n        const radius = Math.round(e.target.getRadius());\n\n        $radius.value = radius;\n        $latitude.value = lat;\n        $longitude.value = lng;\n\n        const mBox = map.getBounds();\n        const cBox = circle.getBounds();\n        const bounds = mBox.contains(cBox) ? mBox : cBox;\n        map.fitBounds(bounds);\n      });\n\n    new Control.geocoder({ defaultMarkGeocode: false })\n      .on(\"markgeocode\", (e) => {\n        const { bbox, center } = e.geocode;\n\n        const poly = L.polygon([\n          bbox.getSouthEast(),\n          bbox.getNorthEast(),\n          bbox.getNorthWest(),\n          bbox.getSouthWest(),\n        ]);\n\n        circle.setLatLng(center);\n\n        const lBox = poly.getBounds();\n        const cBox = circle.getBounds();\n        const bounds = cBox.contains(lBox) ? cBox : lBox;\n\n        map.fitBounds(bounds);\n        map.pm.enableGlobalEditMode();\n\n        const { lat, lng } = center;\n        $latitude.value = lat;\n        $longitude.value = lng;\n      })\n      .addTo(map);\n\n    map.fitBounds(circle.getBounds(), { animate: false });\n  },\n};\n\nexport const Modal = {\n  _freeze() {\n    document.documentElement.classList.add(\"is-clipped\");\n  },\n\n  _unfreeze() {\n    document.documentElement.classList.remove(\"is-clipped\");\n  },\n\n  mounted() {\n    // assumption: 'is-active' is always added after the initial mount\n  },\n\n  updated() {\n    this.el.classList.contains(\"is-active\") ? this._freeze() : this._unfreeze();\n  },\n\n  destroyed() {\n    this._unfreeze();\n  },\n};\n\nexport const NumericInput = {\n  mounted() {\n    this.el.onkeypress = (evt) => {\n      const charCode = evt.which ? evt.which : evt.keyCode;\n      return !(charCode > 31 && (charCode < 48 || charCode > 57));\n    };\n  },\n};\n\nexport const ThemeSelector = {\n  mounted() {\n    const select = this.el.querySelector(\"select\");\n    if (select) {\n      select.addEventListener(\"change\", (e) => {\n        const themeMode = e.target.value;\n        document.documentElement.setAttribute(\"data-theme-mode\", themeMode);\n\n        // Apply theme immediately\n        let actualTheme = themeMode;\n        if (themeMode === \"system\") {\n          actualTheme = window.matchMedia(\"(prefers-color-scheme: dark)\")\n            .matches\n            ? \"dark\"\n            : \"light\";\n        }\n        document.documentElement.setAttribute(\"data-theme\", actualTheme);\n      });\n    }\n  },\n};\n"
  },
  {
    "path": "assets/js/main.js",
    "content": "document.querySelector(\".navbar-burger\").addEventListener(\"click\", function () {\n  const $target = document.getElementById(this.dataset.target);\n  $target.classList.toggle(\"is-active\");\n  this.classList.toggle(\"is-active\");\n});\n\nfor (const navDropdown of document.querySelectorAll(\n  \".navbar-item.has-dropdown\",\n)) {\n  navDropdown.addEventListener(\"click\", function () {\n    if (document.querySelector(\".navbar-menu.is-active\")) {\n      this.classList.toggle(\"active\");\n    }\n  });\n}\n\n// Open Statistics dashboard with the browser time zone\nconst statistics = document.querySelector(\"a[data-uid='1EZnXszMk']\");\nconst tz = Intl && Intl.DateTimeFormat().resolvedOptions().timeZone;\n\nif (statistics && tz)\n  statistics.href = `${statistics.href}?var-timezone=${decodeURIComponent(tz)}`;\n\n// Fix sticky hover on iOS\ndocument.addEventListener(\"click\", () => 0);\n\n// Address dynamic viewport units on mobile\nfunction setCustomVh() {\n  let vh = window.innerHeight * 0.01;\n  document.documentElement.style.setProperty(\"--vh\", `${vh}px`);\n}\n\nwindow.addEventListener(\"resize\", setCustomVh);\nsetCustomVh();\n\n// Theme handling\nfunction applyTheme() {\n  const themeMode = document.documentElement.getAttribute(\"data-theme-mode\");\n  let actualTheme = themeMode;\n\n  // If theme mode is \"system\", check system preference\n  if (themeMode === \"system\") {\n    actualTheme = window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n      ? \"dark\"\n      : \"light\";\n  }\n\n  // Apply the theme\n  document.documentElement.setAttribute(\"data-theme\", actualTheme);\n\n  // Trigger a custom event for components that need to react to theme changes\n  window.dispatchEvent(\n    new CustomEvent(\"themechange\", { detail: { theme: actualTheme } }),\n  );\n}\n\n// Apply theme on load\napplyTheme();\n\n// Listen for system theme changes when in system mode\nif (window.matchMedia) {\n  window\n    .matchMedia(\"(prefers-color-scheme: dark)\")\n    .addEventListener(\"change\", () => {\n      const themeMode =\n        document.documentElement.getAttribute(\"data-theme-mode\");\n      if (themeMode === \"system\") {\n        applyTheme();\n      }\n    });\n}\n"
  },
  {
    "path": "assets/js/socket.js",
    "content": "// NOTE: The contents of this file will only be executed if\n// you uncomment its entry in \"assets/js/app.js\".\n\n// To use Phoenix channels, the first step is to import Socket,\n// and connect at the socket path in \"lib/web/endpoint.ex\".\n//\n// Pass the token on params as below. Or remove it\n// from the params if you are not using authentication.\nimport { Socket } from \"phoenix\";\n\nlet socket = new Socket(\"/socket\", { params: { token: window.userToken } });\n\n// When you connect, you'll often need to authenticate the client.\n// For example, imagine you have an authentication plug, `MyAuth`,\n// which authenticates the session and assigns a `:current_user`.\n// If the current user exists you can assign the user's token in\n// the connection for use in the layout.\n//\n// In your \"lib/web/router.ex\":\n//\n//     pipeline :browser do\n//       ...\n//       plug MyAuth\n//       plug :put_user_token\n//     end\n//\n//     defp put_user_token(conn, _) do\n//       if current_user = conn.assigns[:current_user] do\n//         token = Phoenix.Token.sign(conn, \"user socket\", current_user.id)\n//         assign(conn, :user_token, token)\n//       else\n//         conn\n//       end\n//     end\n//\n// Now you need to pass this token to JavaScript. You can do so\n// inside a script tag in \"lib/web/templates/layout/app.html.eex\":\n//\n//     <script>window.userToken = \"<%= assigns[:user_token] %>\";</script>\n//\n// You will need to verify the user token in the \"connect/3\" function\n// in \"lib/web/channels/user_socket.ex\":\n//\n//     def connect(%{\"token\" => token}, socket, _connect_info) do\n//       # max_age: 1209600 is equivalent to two weeks in seconds\n//       case Phoenix.Token.verify(socket, \"user socket\", token, max_age: 1209600) do\n//         {:ok, user_id} ->\n//           {:ok, assign(socket, :user, user_id)}\n//         {:error, reason} ->\n//           :error\n//       end\n//     end\n//\n// Finally, connect to the socket:\nsocket.connect();\n\n// Now that you are connected, you can join channels with a topic:\nlet channel = socket.channel(\"topic:subtopic\", {});\nchannel\n  .join()\n  .receive(\"ok\", (resp) => {\n    console.log(\"Joined successfully\", resp);\n  })\n  .receive(\"error\", (resp) => {\n    console.log(\"Unable to join\", resp);\n  });\n\nexport default socket;\n"
  },
  {
    "path": "assets/package.json",
    "content": "{\n  \"repository\": {},\n  \"description\": \"...\",\n  \"license\": \"AGPL-3.0-or-later\",\n  \"scripts\": {\n    \"deploy\": \"node scripts/build.js\"\n  },\n  \"dependencies\": {\n    \"@creativebulma/bulma-divider\": \"^1.1.0\",\n    \"@creativebulma/bulma-tooltip\": \"^1.2.0\",\n    \"@geoman-io/leaflet-geoman-free\": \"^2.19.2\",\n    \"@mdi/font\": \"^7.4.47\",\n    \"bulma-switch\": \"^2.0.4\",\n    \"leaflet\": \"^1.9.4\",\n    \"leaflet-control-geocoder\": \"^3.3.1\",\n    \"phoenix\": \"file:../deps/phoenix\",\n    \"phoenix_html\": \"file:../deps/phoenix_html\",\n    \"phoenix_live_view\": \"file:../deps/phoenix_live_view\"\n  },\n  \"devDependencies\": {\n    \"bulma\": \"^1.0.4\",\n    \"esbuild\": \"^0.27.3\",\n    \"esbuild-sass-plugin\": \"^3.6.0\",\n    \"sass\": \"^1.97.3\"\n  },\n  \"name\": \"assets\"\n}\n"
  },
  {
    "path": "assets/scripts/build.js",
    "content": "const fs = require(\"fs\");\nconst path = require(\"path\");\nconst { sassPlugin } = require(\"esbuild-sass-plugin\");\nconst esbuild = require(\"esbuild\");\n\nconst ENTRY_FILE = \"app.js\";\nconst OUTPUT_DIR = path.resolve(__dirname, \"../../priv/static/assets\");\nconst OUTPUT_FILE = \"app.js\";\nconst MODE = process.env[\"NODE_ENV\"] || \"production\";\nconst TARGET = \"es2017\";\n\nconst isDevMode = MODE === \"development\";\n\nconst buildLogger = {\n  name: \"build-logger\",\n  setup(build) {\n    let count = 0;\n    build.onEnd(({ errors, warnings }) => {\n      if (errors.length > 0) console.error(\"[-] Esbuild failed:\", errors);\n      else if (warnings.length > 0)\n        console.warn(\"[-] Esbuild finished with warnings:\", warnings);\n      else console.log(`[+] Esbuild succeeded`);\n    });\n  },\n};\n\nconst build_opts = {\n  entryPoints: [path.join(__dirname, \"..\", \"js\", ENTRY_FILE)],\n  outfile: `${OUTPUT_DIR}/${OUTPUT_FILE}`,\n  minify: !isDevMode,\n  bundle: true,\n  target: TARGET,\n  logLevel: \"silent\",\n  loader: {\n    \".png\": \"dataurl\",\n    \".ttf\": \"file\",\n    \".otf\": \"file\",\n    \".svg\": \"file\",\n    \".eot\": \"file\",\n    \".woff\": \"file\",\n    \".woff2\": \"file\",\n  },\n  plugins: [sassPlugin(), buildLogger],\n  define: {\n    \"process.env.NODE_ENV\": isDevMode ? '\"development\"' : '\"production\"',\n    global: \"window\",\n  },\n  sourcemap: isDevMode,\n};\n\nasync function build() {\n  try {\n    console.log(`[+] Starting static assets build with esbuild (${MODE})...`);\n    ctx = await esbuild.context(build_opts);\n\n    if (isDevMode) {\n      ctx.watch();\n      process.stdin.pipe(process.stdout);\n      process.stdin.on(\"end\", () => ctx.dispose());\n    } else {\n      ctx.rebuild();\n      ctx.dispose();\n    }\n  } catch (e) {\n    console.error(\"[-] Error building:\", e.message);\n    process.exit(1);\n  }\n}\n\nif (!fs.existsSync(OUTPUT_DIR)) fs.mkdirSync(OUTPUT_DIR);\n\nbuild();\n"
  },
  {
    "path": "config/config.exs",
    "content": "import Config\n\nconfig :teslamate,\n  ecto_repos: [TeslaMate.Repo]\n\nconfig :teslamate, TeslaMateWeb.Endpoint,\n  url: [host: \"localhost\"],\n  secret_key_base: \"Kz7vmP1gPYv/sogke6P3RP9uipMjOLhneQdbokZVx5gpLsNaN44TD20vtOWkMFIT\",\n  render_errors: [view: TeslaMateWeb.ErrorView, accepts: ~w(html json), layout: false],\n  pubsub_server: TeslaMate.PubSub,\n  live_view: [signing_salt: \"6nSVV0NtBtBfA9Mjh+7XaZANjp9T73XH\"]\n\nconfig :teslamate,\n  cloak_repo: TeslaMate.Repo,\n  cloak_schemas: [\n    TeslaMate.Auth.Tokens\n  ]\n\nconfig :logger, :console,\n  format: \"$time $metadata[$level] $message\\n\",\n  metadata: [:car_id]\n\nconfig :phoenix,\n  json_library: Jason,\n  static_compressors: [\n    PhoenixBakery.Gzip,\n    PhoenixBakery.Brotli,\n    PhoenixBakery.Zstd\n  ]\n\nconfig :gettext, :default_locale, \"en\"\n\nconfig :elixir, :time_zone_database, Tzdata.TimeZoneDatabase\n\nimport_config \"#{config_env()}.exs\"\n"
  },
  {
    "path": "config/dev.exs",
    "content": "import Config\n\nconfig :teslamate, TeslaMateWeb.Endpoint,\n  debug_errors: true,\n  code_reloader: true,\n  check_origin: false,\n  watchers: [\n    node: [\n      \"scripts/build.js\",\n      cd: Path.expand(\"../assets\", __DIR__),\n      env: %{\"NODE_ENV\" => \"development\"}\n    ]\n  ],\n  live_reload: [\n    patterns: [\n      ~r\"priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$\",\n      ~r\"priv/gettext/.*(po)$\",\n      ~r\"lib/teslamate_web/(live|views)/.*(ex)$\",\n      ~r\"lib/teslamate_web/templates/.*(eex)$\",\n      ~r\"grafana/dashboards/.*(json)$\"\n    ]\n  ]\n\nconfig :logger, :console, format: \"$metadata[$level] $message\\n\"\n\nconfig :phoenix, :stacktrace_depth, 20\nconfig :phoenix, :plug_init_mode, :runtime\n\nconfig :teslamate, TeslaMate.Repo, show_sensitive_data_on_connection_error: true\nconfig :teslamate, disable_token_refresh: true\n"
  },
  {
    "path": "config/prod.exs",
    "content": "import Config\n\nconfig :teslamate, TeslaMateWeb.Endpoint,\n  cache_static_manifest: \"priv/static/cache_manifest.json\",\n  root: \".\",\n  server: true,\n  version: Application.spec(:teslamate, :vsn)\n\nconfig :logger,\n  level: :info\n\nconfig :logger, :console,\n  format: \"$date $time $metadata[$level] $message\\n\",\n  metadata: [:car_id]\n"
  },
  {
    "path": "config/runtime.exs",
    "content": "import Config\n\ndefmodule Util do\n  def random_string(length) do\n    :crypto.strong_rand_bytes(length) |> Base.encode64() |> binary_part(0, length)\n  end\n\n  def to_integer(nil), do: nil\n  def to_integer(str), do: String.to_integer(str)\n\n  def validate_namespace!(nil), do: nil\n  def validate_namespace!(\"\"), do: nil\n\n  def validate_namespace!(ns) when is_binary(ns) do\n    case String.contains?(ns, \"/\") do\n      true -> raise \"MQTT_NAMESPACE must not contain '/'\"\n      false -> ns\n    end\n  end\n\n  def parse_check_origin!(\"true\"), do: true\n  def parse_check_origin!(\"false\"), do: false\n  def parse_check_origin!(hosts) when is_binary(hosts), do: String.split(hosts, \",\")\n  def parse_check_origin!(hosts), do: raise(\"Invalid check_origin option: #{inspect(hosts)}\")\n\n  def validate_import_dir(nil), do: nil\n\n  def validate_import_dir(path) do\n    path = Path.absname(path)\n\n    case File.ls(path) do\n      {:ok, [_ | _] = files} ->\n        if Enum.any?(files, &TeslaMate.Import.valid_file_name?/1) do\n          IO.puts(\"[info] Found #{length(files)} file(s) at '#{path}'. Starting in import mode!\")\n          path\n        else\n          nil\n        end\n\n      {:ok, []} ->\n        nil\n\n      {:error, :enoent} ->\n        nil\n\n      {:error, reason} ->\n        IO.puts(\"[warn] Cannot access directory '#{path}': #{inspect(reason)}\")\n        nil\n    end\n  end\n\n  def choose_http_binding_address() do\n    port = Util.get_env(\"PORT\", prod: \"4000\", dev: \"4000\", test: \"4002\")\n    defaults = [transport_options: [socket_opts: [:inet6]], port: port]\n\n    case System.get_env(\"HTTP_BINDING_ADDRESS\", \"\") do\n      \"\" ->\n        defaults\n\n      address ->\n        case :inet.parse_address(to_charlist(address)) do\n          {:ok, ip} ->\n            [ip: ip, port: port]\n\n          {:error, reason} ->\n            case String.at(address, 0) do\n              \"/\" ->\n                [\n                  ip: {:local, address},\n                  port: 0,\n                  transport_options: [\n                    post_listen_callback: fn _ ->\n                      File.chmod!(\n                        address,\n                        System.get_env(\"SOCKET_PERM\", \"755\") |> String.to_integer(8)\n                      )\n                    end\n                  ]\n                ]\n\n              _ ->\n                IO.puts(\"Cannot parse HTTP_BINDING_ADDRESS '#{address}': #{inspect(reason)}\")\n                defaults\n            end\n        end\n    end\n  end\n\n  def fetch_env!(varname, defaults \\\\ []) do\n    case config_env() do\n      :prod -> System.fetch_env!(varname)\n      env -> System.get_env(varname, defaults[env] || defaults[:all])\n    end\n  end\n\n  def get_env(varname, defaults \\\\ []) do\n    System.get_env(varname, defaults[config_env()])\n  end\nend\n\nconfig :teslamate,\n  default_geofence: System.get_env(\"DEFAULT_GEOFENCE\")\n\ncase System.get_env(\"DATABASE_SOCKET_DIR\") do\n  nil ->\n    config :teslamate, TeslaMate.Repo,\n      username: Util.fetch_env!(\"DATABASE_USER\", all: \"postgres\"),\n      password: Util.fetch_env!(\"DATABASE_PASS\", all: \"postgres\"),\n      hostname: Util.fetch_env!(\"DATABASE_HOST\", all: \"localhost\"),\n      port: System.get_env(\"DATABASE_PORT\", \"5432\")\n\n  socket_dir ->\n    config :teslamate, TeslaMate.Repo,\n      socket_dir: socket_dir,\n      port: System.get_env(\"DATABASE_PORT\", \"5432\")\nend\n\nconfig :teslamate, TeslaMate.Repo,\n  pool_size: System.get_env(\"DATABASE_POOL_SIZE\", \"10\") |> String.to_integer(),\n  timeout: System.get_env(\"DATABASE_TIMEOUT\", \"60000\") |> String.to_integer(),\n  database: Util.fetch_env!(\"DATABASE_NAME\", dev: \"teslamate_dev\", test: \"teslamate_test\")\n\ncase System.get_env(\"DATABASE_SSL\") do\n  \"true\" ->\n    ca_cert_file =\n      System.get_env(\"DATABASE_SSL_CA_CERT_FILE\") || raise \"DATABASE_SSL_CA_CERT_FILE must be set\"\n\n    config :teslamate, TeslaMate.Repo,\n      ssl: true,\n      ssl_opts: [\n        verify: :verify_peer,\n        cacertfile: ca_cert_file\n      ]\n\n  \"noverify\" ->\n    config :teslamate, TeslaMate.Repo,\n      ssl: true,\n      ssl_opts: [\n        server_name_indication:\n          to_charlist(\n            System.get_env(\"DATABASE_SSL_SNI\") ||\n              Util.fetch_env!(\"DATABASE_HOST\", all: \"localhost\")\n          ),\n        verify: :verify_none\n      ]\n\n  _false ->\n    config :teslamate, TeslaMate.Repo, ssl: false\nend\n\nif System.get_env(\"DATABASE_IPV6\") == \"true\" do\n  config :teslamate, TeslaMate.Repo, socket_options: [:inet6]\nend\n\nconfig :teslamate, TeslaMateWeb.Endpoint,\n  http:\n    Util.choose_http_binding_address()\n    |> Keyword.merge(protocol_options: [max_header_value_length: 16384]),\n  url: [\n    host: System.get_env(\"VIRTUAL_HOST\", \"localhost\"),\n    path: System.get_env(\"URL_PATH\", \"/\"),\n    port: 80\n  ],\n  secret_key_base: System.get_env(\"SECRET_KEY_BASE\", Util.random_string(64)),\n  live_view: [signing_salt: System.get_env(\"SIGNING_SALT\", Util.random_string(8))],\n  check_origin: System.get_env(\"CHECK_ORIGIN\", \"false\") |> Util.parse_check_origin!()\n\nif System.get_env(\"DISABLE_MQTT\") != \"true\" or config_env() == :test do\n  config :teslamate, :mqtt,\n    host: Util.fetch_env!(\"MQTT_HOST\", all: \"localhost\"),\n    port: System.get_env(\"MQTT_PORT\") |> Util.to_integer(),\n    username: System.get_env(\"MQTT_USERNAME\"),\n    password: System.get_env(\"MQTT_PASSWORD\"),\n    tls: System.get_env(\"MQTT_TLS\") == \"true\",\n    accept_invalid_certs: System.get_env(\"MQTT_TLS_ACCEPT_INVALID_CERTS\") == \"true\",\n    namespace: System.get_env(\"MQTT_NAMESPACE\") |> Util.validate_namespace!(),\n    ipv6: System.get_env(\"MQTT_IPV6\") == \"true\"\nend\n\nif config_env() != :test do\n  config :teslamate,\n    import_directory: System.get_env(\"IMPORT_DIR\", \"import\") |> Util.validate_import_dir()\nend\n\nconfig :teslamate, :srtm_cache, System.get_env(\"SRTM_CACHE\", \".srtm_cache\")\n\nconfig :teslamate, TeslaMate.Vault, key: Util.get_env(\"ENCRYPTION_KEY\", test: \"secret\")\n\nconfig :tzdata, :data_dir, System.get_env(\"TZDATA_DIR\", \"/tmp\")\n"
  },
  {
    "path": "config/test.exs",
    "content": "import Config\n\nconfig :logger, level: :warning\n\n# We don't run a server during test. If one is required,\n# you can enable the server option below.\nconfig :teslamate, TeslaMateWeb.Endpoint, server: false\nconfig :teslamate, TeslaMate.Repo, pool: Ecto.Adapters.SQL.Sandbox\n\nconfig :phoenix, :plug_init_mode, :runtime\n"
  },
  {
    "path": "coveralls.json",
    "content": "{\n  \"coverage_options\": {\n    \"treat_no_relevant_lines_as_covered\": true,\n    \"output_dir\": \"cover/\",\n    \"minimum_coverage\": 0\n  },\n\n  \"terminal_options\": {\n    \"file_column_width\": 40\n  },\n\n  \"skip_files\": [\n    \"lib/tesla_api\",\n    \"lib/teslamate/release.ex\",\n    \"lib/teslamate/application.ex\",\n    \"lib/teslamate/custom_expressions.ex\",\n    \"lib/teslamate_web.ex\"\n  ]\n}\n"
  },
  {
    "path": "entrypoint.sh",
    "content": "#!/usr/bin/env dash\nset -e\n\n: \"${DATABASE_HOST:=\"127.0.0.1\"}\"\n: \"${DATABASE_PORT:=5432}\"\n: \"${ULIMIT_MAX_NOFILE:=65536}\"\n\n# prevent memory bloat in some misconfigured versions of Docker/containerd\n# where the nofiles limit is very large. 0 means don't set it.\nif test \"${ULIMIT_MAX_NOFILE}\" != 0 && test \"$(ulimit -n)\" -gt \"${ULIMIT_MAX_NOFILE}\"; then\n\tulimit -n \"${ULIMIT_MAX_NOFILE}\"\nfi\n\n# wait until Postgres is ready\nwhile ! nc -z \"${DATABASE_HOST}\" \"${DATABASE_PORT}\" 2>/dev/null; do\n\techo waiting for postgres at \"${DATABASE_HOST}\":\"${DATABASE_PORT}\"\n\tsleep 1s\ndone\n\n# apply migrations\nbin/teslamate eval \"TeslaMate.Release.migrate\"\n\nexec \"$@\"\n"
  },
  {
    "path": "flake.nix",
    "content": "{\n  description = \"TeslaMate Logger\";\n\n  inputs = {\n    nixpkgs.url = \"github:NixOS/nixpkgs/nixos-25.11\";\n    flake-parts.url = \"github:hercules-ci/flake-parts\";\n    flake-parts.inputs.nixpkgs-lib.follows = \"nixpkgs\";\n    devenv-root.url = \"file+file:///dev/null\";\n    devenv-root.flake = false;\n    devenv.url = \"github:cachix/devenv\";\n    treefmt-nix.url = \"github:numtide/treefmt-nix\";\n    treefmt-nix.inputs.nixpkgs.follows = \"nixpkgs\";\n  };\n\n  outputs = inputs@{ self, flake-parts, ... }:\n    flake-parts.lib.mkFlake { inherit inputs; } {\n      flake.nixosModules.default = import ./nix/module.nix { inherit self; };\n\n      systems = [\n        \"x86_64-linux\"\n        \"aarch64-linux\"\n        \"x86_64-darwin\"\n        \"aarch64-darwin\"\n      ];\n\n      # See ./nix/flake-modules/*.nix for the modules that are imported here.\n      imports = [\n        ./nix/flake-modules/checks.nix\n        ./nix/flake-modules/devenv.nix\n        ./nix/flake-modules/formatter.nix\n        ./nix/flake-modules/package.nix\n      ];\n    };\n}\n"
  },
  {
    "path": "grafana/Dockerfile",
    "content": "# Ensure selecting a tag that is available for arm/v7, arm64, and amd64\n# https://hub.docker.com/r/grafana/grafana/tags\nFROM grafana/grafana:12.4.0\n\nENV GF_ANALYTICS_REPORTING_ENABLED=false \\\n    GF_ANALYTICS_CHECK_FOR_UPDATES=false \\\n    GF_ANALYTICS_CHECK_FOR_PLUGIN_UPDATES=false \\\n    GF_AUTH_ANONYMOUS_ENABLED=false \\\n    GF_AUTH_BASIC_ENABLED=false \\\n    GF_SECURITY_ADMIN_PASSWORD=admin \\\n    GF_SECURITY_ADMIN_USER=admin \\\n    GF_SECURITY_ALLOW_EMBEDDING=true \\\n    GF_SECURITY_DISABLE_GRAVATAR=true \\\n    GF_DATABASE_HIGH_AVAILABILITY=false \\\n    GF_USERS_ALLOW_SIGN_UP=false \\\n    GF_USERS_DEFAULT_LANGUAGE=detect \\\n    GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH=/dashboards_internal/home.json \\\n    GF_DATE_FORMATS_USE_BROWSER_LOCALE=true \\\n    GF_PLUGINS_PREINSTALL_DISABLED=true \\\n    GF_UNIFIED_ALERTING_ENABLED=false \\\n    GF_METRICS_ENABLED=false \\\n    GF_RECORDING_RULES_ENABLED=false \\\n    DATABASE_PORT=5432 \\\n    DATABASE_SSL_MODE=disable\n\nUSER grafana\n\nCOPY logo.svg /usr/share/grafana/public/img/grafana_icon.svg\n\nRUN LOGO_PATH=$(find /usr/share/grafana/public/build/static/img/ -type f -name 'grafana_icon.*.svg') && \\\n    cp /usr/share/grafana/public/img/grafana_icon.svg \"$LOGO_PATH\" || true\n\nCOPY favicon.png /usr/share/grafana/public/build/img/fav32.png\nCOPY apple-touch-icon.png /usr/share/grafana/public/build/img/apple-touch-icon.png\n\nCOPY datasource.yml /etc/grafana/provisioning/datasources/\nCOPY dashboards.yml /etc/grafana/provisioning/dashboards/\nCOPY dashboards/internal/*.json /dashboards_internal/\nCOPY dashboards/reports/*.json /dashboards_reports/\nCOPY dashboards/*.json /dashboards/\n\nEXPOSE 3000\n"
  },
  {
    "path": "grafana/dashboards/battery-health.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 1,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"**Usable (now)** is the estimated current battery capacity. It is average of the estimated capacity reported by the last 10 charging sessions to have a better estimation.\\n\\nIf you see just '1.0 kWh' here, it means that you need at least a long charge session.\\n\\n**Usable (new)** is the estimated Battery Capacity since you begun to use TeslaMate. That's why, the more data you have logged from your brand new car the better. For those who have not used TeslaMate since they got their new car, or for those who have bought it second hand,  it's possible to set the max range to 100% and the battery capacity of the car battery when it was new in order to get a better and accurate estimation.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"dark-red\",\n                \"value\": 1\n              },\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 2\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 13,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT  \\n  CASE WHEN $custom_kwh_new > 0 THEN $custom_kwh_new ELSE ('$aux'::json ->> 'MaxCapacity')::float END as \\\"Usable (new)\\\", \\n  ('$aux'::json ->> 'CurrentCapacity')::float as \\\"Usable (now)\\\",\\n  ('$aux'::json ->> 'CurrentCapacity')::float - CASE WHEN $custom_kwh_new > 0 THEN $custom_kwh_new ELSE ('$aux'::json ->> 'MaxCapacity')::float END as \\\"Difference\\\"\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Battery Capacity\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_km/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_mi/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/maxrange_.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Max range (new)\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/currentrange_.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Max range (now)\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/range_lost.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range lost\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 0\n      },\n      \"id\": 14,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT  \\n  CASE WHEN $custom_max_range > 0 THEN $custom_max_range ELSE ('$aux'::json ->> 'MaxRange')::float END as \\\"maxrange_$length_unit\\\",\\n  ('$aux'::json ->> 'CurrentRange')::float  as \\\"currentrange_$length_unit\\\",\\n  CASE WHEN $custom_max_range > 0 THEN $custom_max_range ELSE ('$aux'::json ->> 'MaxRange')::float END - ('$aux'::json ->> 'CurrentRange')::float as \\\"range_lost_$length_unit\\\"\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ranges [$preferred_range]\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"\\\"Logged\\\" is the distance traveled that is saved on TeslaMate database.\\n\\n\\\"Mileage\\\" is the distance the car has traveled since using TeslaMate.\\n\\nSo, if there is a difference between both values, it is the distance that for some reason a drive hasn't been fully recorded, for example due to a bug or an unexpected restart and that TeslaMate has not been able to record, either due to lack of connection, areas without signal, or that it has been out of service.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 0\n      },\n      \"id\": 37,\n      \"links\": [\n        {\n          \"targetBlank\": true,\n          \"title\": \"Drive Stats\",\n          \"url\": \"/d/_7WkNSyWk/drive-stats\"\n        }\n      ],\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select ROUND(convert_km(sum(distance)::numeric, '$length_unit'),0)|| ' $length_unit' as \\\"Logged\\\"\\r\\nfrom drives \\r\\nwhere car_id = $car_id;\\r\\n\",\n          \"refId\": \"Logged\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT ROUND(convert_km((max(end_km) - min(start_km))::numeric, '$length_unit'),0)|| ' $length_unit' as \\\"Mileage\\\"\\nFROM drives WHERE car_id = $car_id;\",\n          \"refId\": \"Mileage\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT ROUND(convert_km(max(end_km)::numeric, '$length_unit'),0) || ' $length_unit' as \\\"Odometer\\\"\\nFROM drives WHERE car_id =  $car_id;\",\n          \"refId\": \"Odometer\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT (\\r\\n (SELECT ROUND(convert_km((max(end_km) - min(start_km))::numeric, '$length_unit'),0) FROM drives WHERE car_id = $car_id) - \\r\\n (SELECT ROUND(convert_km(sum(distance)::numeric, '$length_unit'),0) from drives where car_id = $car_id) || ' $length_unit'\\r\\n)\\r\\nAS \\\"Data lost (not logged)\\\"\",\n          \"refId\": \"Data Lost\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Drive Stats\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"decimals\": 2,\n          \"mappings\": [],\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"AC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"semi-dark-green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"DC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"light-orange\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 0\n      },\n      \"id\": 34,\n      \"maxDataPoints\": 3,\n      \"options\": {\n        \"displayLabels\": [\n          \"name\",\n          \"percent\",\n          \"value\"\n        ],\n        \"legend\": {\n          \"displayMode\": \"list\",\n          \"placement\": \"right\",\n          \"showLegend\": false,\n          \"values\": [\n            \"value\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"sort\": \"desc\",\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n  SELECT\\n\\t\\tcp.id,\\n\\t\\tcp.charge_energy_added,\\n\\t\\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC'\\n\\t\\t\\t\\t ELSE 'AC'\\n\\t\\tEND AS current,\\n\\t\\tcp.charge_energy_used\\n\\tFROM charging_processes cp\\n  RIGHT JOIN charges ON cp.id = charges.charging_process_id\\n  WHERE\\n\\t  cp.car_id = $car_id\\n\\t  AND cp.charge_energy_added > 0.01\\n  GROUP BY 1,2\\n)\\nSELECT\\n\\tnow() AS time,\\n\\tSUM(GREATEST(charge_energy_added, charge_energy_used)) AS value,\\n\\tcurrent AS metric\\nFROM data\\nGROUP BY 3\\nORDER BY metric DESC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"AC/DC - Energy Used\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"This dashboard is meant to have a look of the Battery health based on the data logged in TeslaMate. So, the more data you have logged from your brand new car the better.\\n\\n**Degradation** is just an estimated value to have a reference, measured on **usable battery level** of every charging session with enough kWh added (in order to avoid dirty data from the sample), calculated according to the rated efficiency of the car.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"#EAB839\",\n                \"value\": 10\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 20\n              },\n              {\n                \"color\": \"dark-red\",\n                \"value\": 30\n              }\n            ]\n          },\n          \"unit\": \"%\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 6\n      },\n      \"id\": 17,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [],\n          \"fields\": \"/^greatest$/\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT GREATEST(0, 100.0 - (('$aux'::json ->> 'CurrentCapacity')::float * 100.0 / CASE WHEN $custom_kwh_new > 0 THEN $custom_kwh_new ELSE ('$aux'::json ->> 'MaxCapacity')::float END))\\n\\n\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Estimated Degradation\",\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 1,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"light-red\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"#EAB839\",\n                \"value\": 80\n              },\n              {\n                \"color\": \"light-green\",\n                \"value\": 90\n              }\n            ]\n          },\n          \"unit\": \"%\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 6\n      },\n      \"id\": 12,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"maxVizHeight\": 300,\n        \"minVizHeight\": 10,\n        \"minVizWidth\": 0,\n        \"namePlacement\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true,\n        \"sizing\": \"auto\",\n        \"valueMode\": \"color\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT  \\n  LEAST(100, (100 - GREATEST(0, 100.0 - (('$aux'::json ->> 'CurrentCapacity')::float * 100.0 / CASE WHEN $custom_kwh_new > 0 THEN $custom_kwh_new ELSE ('$aux'::json ->> 'MaxCapacity')::float END)))) as \\\"Battery Health (%)\\\"\\n  \\n\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Battery Health\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"\\\"# of Charging cycles\\\" is estimated by dividing the whole energy added to the battery by the battery capacity when new.\\n\\n\\\"Charging Efficiency\\\" is estimated on the difference between energy used from the charger and energy added to the battery.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"light-yellow\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Total Energy added\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Total Energy used\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Charging Efficiency\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percentunit\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 6\n      },\n      \"id\": 36,\n      \"links\": [\n        {\n          \"targetBlank\": true,\n          \"title\": \"Charging Stats\",\n          \"url\": \"/d/-pkIkhmRz/charging-stats\"\n        }\n      ],\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n\\tCOUNT(*) AS \\\"# of Charges\\\"\\r\\nFROM\\r\\n\\tcharging_processes\\r\\nWHERE\\r\\n\\tcar_id = $car_id AND charge_energy_added > 0.01\\r\\n\\t\",\n          \"refId\": \"# of Charges\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tfloor(sum(charge_energy_added) / CASE WHEN $custom_kwh_new > 0 THEN $custom_kwh_new ELSE ('$aux'::json ->> 'MaxCapacity')::float END) AS \\\"# of Charging cycles\\\"\\nFROM charging_processes WHERE car_id = $car_id AND charge_energy_added > 0.01\",\n          \"refId\": \"# of Charging cycles\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tsum(charge_energy_added) as \\\"Total Energy added\\\"\\nFROM\\n\\tcharging_processes\\nWHERE\\n\\tcar_id = $car_id AND charge_energy_added > 0.01\",\n          \"refId\": \"Total Energy added\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n\\tSUM(greatest(charge_energy_added, charge_energy_used)) AS \\\"Total Energy used\\\"\\r\\nFROM\\r\\n\\tcharging_processes\\r\\nWHERE\\r\\n\\tcar_id = $car_id AND charge_energy_added > 0.01\\r\\n\",\n          \"refId\": \"Total Energy used\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n\\tSUM(charge_energy_added) / SUM(greatest(charge_energy_added, charge_energy_used)) AS \\\"Charging Efficiency\\\"\\r\\nFROM\\r\\n\\tcharging_processes\\r\\nWHERE\\r\\n\\tcar_id = $car_id AND charge_energy_added > 0.01\\r\\n\",\n          \"refId\": \"Charging Efficiency\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charging Stats\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"transparent\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"%\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 4,\n        \"x\": 6,\n        \"y\": 9\n      },\n      \"id\": 25,\n      \"options\": {\n        \"displayMode\": \"lcd\",\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"maxVizHeight\": 300,\n        \"minVizHeight\": 10,\n        \"minVizWidth\": 0,\n        \"namePlacement\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true,\n        \"sizing\": \"auto\",\n        \"text\": {},\n        \"valueMode\": \"color\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT * FROM ((SELECT usable_battery_level, date\\r\\nFROM positions\\r\\nWHERE car_id = $car_id AND usable_battery_level IS NOT NULL\\r\\nORDER BY date DESC\\r\\nLIMIT 1)\\r\\nUNION\\r\\n(SELECT usable_battery_level, date\\r\\nFROM charges c\\r\\nJOIN charging_processes p ON p.id = c.charging_process_id\\r\\nWHERE p.car_id = $car_id AND usable_battery_level IS NOT NULL\\r\\nORDER BY date DESC\\r\\nLIMIT 1)) AS last_usable_battery_level LIMIT 1\",\n          \"refId\": \"SOC\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n  0 as lowest,\\r\\n  20 as lower,\\r\\n  CASE WHEN lfp_battery THEN 100 ELSE 81 END as upper\\r\\nfrom cars inner join car_settings on cars.settings_id = car_settings.id\\r\\nwhere cars.id = $car_id\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Current SOC\",\n      \"transformations\": [\n        {\n          \"id\": \"configFromData\",\n          \"options\": {\n            \"applyTo\": {\n              \"id\": \"byFrameRefID\",\n              \"options\": \"SOC\"\n            },\n            \"configRefId\": \"A\",\n            \"mappings\": [\n              {\n                \"fieldName\": \"lower\",\n                \"handlerArguments\": {\n                  \"threshold\": {\n                    \"color\": \"green\"\n                  }\n                },\n                \"handlerKey\": \"threshold1\"\n              },\n              {\n                \"fieldName\": \"upper\",\n                \"handlerArguments\": {\n                  \"threshold\": {\n                    \"color\": \"orange\"\n                  }\n                },\n                \"handlerKey\": \"threshold1\"\n              },\n              {\n                \"fieldName\": \"lowest\",\n                \"handlerKey\": \"threshold1\"\n              }\n            ]\n          }\n        }\n      ],\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"This is the Derived Rated Efficiency that TeslaMate calculates based on battery charges. \\nThis information can be seen in more detail on the \\\"Efficiency\\\" dashboard.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_km/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_mi/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 2,\n        \"x\": 10,\n        \"y\": 9\n      },\n      \"id\": 32,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT ('$aux'::json ->> 'RatedEfficiency')::float * 10 / convert_km(1, '$length_unit') AS efficiency_$length_unit\",\n          \"refId\": \"Logged\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Efficiency\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"dark-red\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"dark-green\",\n                \"value\": 7.84\n              },\n              {\n                \"color\": \"semi-dark-orange\",\n                \"value\": 31.36\n              },\n              {\n                \"color\": \"light-blue\",\n                \"value\": 35.28\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 4,\n        \"x\": 6,\n        \"y\": 11\n      },\n      \"id\": 27,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"maxVizHeight\": 300,\n        \"minVizHeight\": 10,\n        \"minVizWidth\": 0,\n        \"namePlacement\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/^kwh$/\",\n          \"values\": false\n        },\n        \"showUnfilled\": true,\n        \"sizing\": \"auto\",\n        \"text\": {},\n        \"valueMode\": \"color\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT * FROM ((SELECT usable_battery_level * ('$aux'::json ->> 'CurrentCapacity')::float / 100 as kWh, date, ('$aux'::json ->> 'CurrentCapacity')::float as Total\\nFROM positions\\nWHERE car_id = $car_id  AND usable_battery_level IS NOT NULL\\nORDER BY date DESC\\nLIMIT 1)\\nUNION\\n(SELECT battery_level * ('$aux'::json ->> 'CurrentCapacity')::float / 100 as kWh, date, ('$aux'::json ->> 'CurrentCapacity')::float as Total\\nFROM charges c\\nJOIN charging_processes p ON p.id = c.charging_process_id\\nWHERE p.car_id = $car_id  AND usable_battery_level IS NOT NULL\\nORDER BY date DESC\\nLIMIT 1)) AS last_usable_battery_level LIMIT 1\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Current Stored Energy\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-RdYlGr\",\n            \"seriesBy\": \"last\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"fillOpacity\": 50,\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineWidth\": 2,\n            \"pointShape\": \"circle\",\n            \"pointSize\": {\n              \"fixed\": 5\n            },\n            \"pointStrokeWidth\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"show\": \"points\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byFrameRefID\",\n              \"options\": \"Median\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.show\",\n                \"value\": \"lines\"\n              },\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Odometer\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Mileage\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"kWh\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Battery Capacity\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 13\n      },\n      \"id\": 28,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"mapping\": \"manual\",\n        \"series\": [\n          {\n            \"color\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"kWh\"\n              }\n            },\n            \"frame\": {\n              \"matcher\": {\n                \"id\": \"byIndex\",\n                \"options\": 0\n              }\n            },\n            \"x\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Odometer\"\n              }\n            },\n            \"y\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"kWh\"\n              }\n            }\n          },\n          {\n            \"frame\": {\n              \"matcher\": {\n                \"id\": \"byIndex\",\n                \"options\": 1\n              }\n            },\n            \"x\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Odometer\"\n              }\n            },\n            \"y\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"kWh\"\n              }\n            }\n          }\n        ],\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT convert_km(AVG(p.odometer)::numeric,'$length_unit') AS \\\"Odometer\\\", \\r\\n\\tAVG(c.rated_battery_range_km * ('$aux'::json ->> 'RatedEfficiency')::float / c.usable_battery_level) AS \\\"kWh\\\",\\r\\n\\t--MAX(cp.id) AS id,\\r\\n\\tto_char(timezone('$__timezone', timezone('UTC', cp.end_date)), 'YYYY-MM-dd') AS \\\"Date\\\"\\r\\n\\tFROM charging_processes cp\\r\\n\\t\\tJOIN (SELECT charging_process_id, MAX(date) as date\\tFROM charges WHERE usable_battery_level > 0 GROUP BY charging_process_id) AS last_charges\\tON cp.id = last_charges.charging_process_id\\r\\n\\t\\tINNER JOIN charges c\\r\\n\\t\\tON c.charging_process_id = cp.id AND c.date = last_charges.date\\r\\n\\t\\tINNER JOIN positions p ON p.id = cp.position_id\\r\\n\\tWHERE cp.car_id = $car_id\\r\\n\\t\\tAND cp.end_date IS NOT NULL\\r\\n\\t\\tAND cp.charge_energy_added >= ('$aux'::json ->> 'RatedEfficiency')::float\\r\\n\\tGROUP BY 3\",\n          \"refId\": \"Projected Range\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT \\n  ROUND(MIN(convert_km(p.odometer::numeric,'$length_unit')),0) AS \\\"Odometer\\\",\\n\\tROUND(PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY c.rated_battery_range_km * ('$aux'::json ->> 'RatedEfficiency')::float / c.usable_battery_level)::numeric,1) AS \\\"kWh\\\",\\n\\tto_char(timezone('$__timezone', timezone('UTC', cp.end_date)), 'YYYYMM') || CASE WHEN to_char(timezone('$__timezone', timezone('UTC', cp.end_date)), 'DD')::int <= 15 THEN '1' ELSE '2' END  AS Title\\n\\tFROM charging_processes cp\\n\\t\\tJOIN (SELECT charging_process_id, MAX(date) as date\\tFROM charges WHERE usable_battery_level > 0 GROUP BY charging_process_id) AS last_charges\\tON cp.id = last_charges.charging_process_id\\n\\t\\tINNER JOIN charges c\\n\\t\\tON c.charging_process_id = cp.id AND c.date = last_charges.date\\n\\t\\tINNER JOIN positions p ON p.id = cp.position_id\\n\\tWHERE cp.car_id = $car_id\\n\\t\\tAND cp.end_date IS NOT NULL\\n\\t\\tAND cp.charge_energy_added >= ('$aux'::json ->> 'RatedEfficiency')::float\\n\\tGROUP BY 3\",\n          \"refId\": \"Median\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Battery Capacity by Mileage\",\n      \"type\": \"xychart\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC\",\n        \"includeAll\": false,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT unit_of_length FROM settings LIMIT 1\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"SELECT unit_of_length FROM settings LIMIT 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT preferred_range FROM settings LIMIT 1\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"SELECT preferred_range FROM settings LIMIT 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT base_url FROM settings LIMIT 1\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"SELECT base_url FROM settings LIMIT 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"WITH Aux as (\\n    SELECT \\n        car_id,\\n        COALESCE(derived_efficiency, car_efficiency) AS efficiency\\n    FROM (\\n        SELECT\\n            ROUND((charge_energy_added / NULLIF(end_rated_range_km - start_rated_range_km, 0))::numeric, 3) * 100 AS derived_efficiency,\\n            COUNT(*) as count,\\n            cars.id as car_id,\\n            cars.efficiency * 100 AS car_efficiency\\n        FROM cars\\n            LEFT JOIN charging_processes ON\\n                cars.id = charging_processes.car_id \\n                AND duration_min > 10\\n                AND end_battery_level <= 95\\n                AND start_rated_range_km IS NOT NULL\\n                AND end_rated_range_km IS NOT NULL\\n                AND charge_energy_added > 0\\n        WHERE cars.id = $car_id\\n        GROUP BY 1, 3, 4\\n        ORDER BY 2 DESC\\n        LIMIT 1\\n    ) AS Efficiency\\n),\\n\\nCurrentCapacity AS (\\n    SELECT\\n        AVG(Capacity) AS Capacity\\n    FROM (\\n        SELECT \\n            c.rated_battery_range_km * aux.efficiency / c.usable_battery_level AS Capacity\\n        FROM charging_processes cp\\n            INNER JOIN charges c ON c.charging_process_id = cp.id \\n            INNER JOIN aux ON cp.car_id = aux.car_id\\n        WHERE\\n            cp.car_id = $car_id\\n            AND cp.end_date IS NOT NULL\\n            AND cp.charge_energy_added >= aux.efficiency\\n            AND c.usable_battery_level > 0\\n        ORDER BY cp.end_date DESC, c.date desc\\n        LIMIT 100\\n    ) AS lastCharges\\n),\\n\\nMaxCapacity AS (\\n    SELECT \\n        MAX(c.rated_battery_range_km * aux.efficiency / c.usable_battery_level) AS Capacity\\n    FROM charging_processes cp\\n        INNER JOIN (\\n            SELECT\\n                charging_process_id,\\n                MAX(date) as date FROM charges WHERE usable_battery_level > 0 GROUP BY charging_process_id\\n        ) AS gcharges ON\\n            cp.id = gcharges.charging_process_id\\n        INNER JOIN charges c ON\\n            c.charging_process_id = cp.id\\n            AND c.date = gcharges.date\\n        INNER JOIN aux ON cp.car_id = aux.car_id\\n    WHERE\\n        cp.car_id = $car_id\\n        AND cp.end_date IS NOT NULL\\n        AND cp.charge_energy_added >= aux.efficiency\\n),\\n\\nCurrentRange AS (\\n    SELECT\\n        (range * 100.0 / usable_battery_level) AS range\\n    FROM (\\n        (\\n            SELECT\\n                date,\\n                ${preferred_range}_battery_range_km AS range,\\n                usable_battery_level AS usable_battery_level\\n            FROM positions\\n            WHERE\\n                car_id = $car_id\\n                AND ideal_battery_range_km IS NOT NULL\\n                AND usable_battery_level > 0 \\n            ORDER BY date DESC\\n            LIMIT 1\\n        )\\n        UNION ALL\\n        (\\n            SELECT date,\\n                ${preferred_range}_battery_range_km AS range,\\n                usable_battery_level as usable_battery_level\\n            FROM charges c\\n                INNER JOIN charging_processes p ON p.id = c.charging_process_id\\n            WHERE\\n                p.car_id = $car_id\\n                AND usable_battery_level > 0\\n            ORDER BY date DESC\\n            LIMIT 1\\n        )\\n    ) AS data\\n    ORDER BY date DESC\\n    LIMIT 1\\n),\\n\\nMaxRange AS (\\n    SELECT\\n        floor(extract(epoch from date)/86400)*86400 AS time,\\n        CASE\\n            WHEN sum(usable_battery_level) = 0 THEN sum(${preferred_range}_battery_range_km) * 100\\n            ELSE sum(${preferred_range}_battery_range_km) / sum(usable_battery_level) * 100\\n        END AS range\\n    FROM (\\n        SELECT\\n            battery_level,\\n            usable_battery_level,\\n            date,\\n            ${preferred_range}_battery_range_km\\n        FROM charges c \\n            INNER JOIN charging_processes p ON p.id = c.charging_process_id \\n        WHERE\\n            p.car_id = $car_id\\n            AND usable_battery_level IS NOT NULL\\n    ) AS data\\n    GROUP BY 1\\n    ORDER BY 2 DESC\\n    LIMIT 1\\n),\\n\\nBase AS (\\n    SELECT NULL\\n)\\n\\nSELECT\\n    json_build_object(\\n        'MaxRange', convert_km(MaxRange.range,'$length_unit'),\\n        'CurrentRange', convert_km(CurrentRange.range,'$length_unit'),\\n        'MaxCapacity', MaxCapacity.Capacity,\\n        'CurrentCapacity', CASE WHEN CurrentCapacity.Capacity IS NULL THEN 1 ELSE CurrentCapacity.Capacity END,\\n        'RatedEfficiency', aux.efficiency\\n    ) #>> '{}'\\nFROM Base\\n    LEFT JOIN MaxRange ON true\\n    LEFT JOIN CurrentRange ON true\\n    LEFT JOIN Aux ON true\\n    LEFT JOIN MaxCapacity ON true\\n    LEFT JOIN CurrentCapacity ON true\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"aux\",\n        \"options\": [],\n        \"query\": \"WITH Aux as (\\n    SELECT \\n        car_id,\\n        COALESCE(derived_efficiency, car_efficiency) AS efficiency\\n    FROM (\\n        SELECT\\n            ROUND((charge_energy_added / NULLIF(end_rated_range_km - start_rated_range_km, 0))::numeric, 3) * 100 AS derived_efficiency,\\n            COUNT(*) as count,\\n            cars.id as car_id,\\n            cars.efficiency * 100 AS car_efficiency\\n        FROM cars\\n            LEFT JOIN charging_processes ON\\n                cars.id = charging_processes.car_id \\n                AND duration_min > 10\\n                AND end_battery_level <= 95\\n                AND start_rated_range_km IS NOT NULL\\n                AND end_rated_range_km IS NOT NULL\\n                AND charge_energy_added > 0\\n        WHERE cars.id = $car_id\\n        GROUP BY 1, 3, 4\\n        ORDER BY 2 DESC\\n        LIMIT 1\\n    ) AS Efficiency\\n),\\n\\nCurrentCapacity AS (\\n    SELECT\\n        AVG(Capacity) AS Capacity\\n    FROM (\\n        SELECT \\n            c.rated_battery_range_km * aux.efficiency / c.usable_battery_level AS Capacity\\n        FROM charging_processes cp\\n            INNER JOIN charges c ON c.charging_process_id = cp.id \\n            INNER JOIN aux ON cp.car_id = aux.car_id\\n        WHERE\\n            cp.car_id = $car_id\\n            AND cp.end_date IS NOT NULL\\n            AND cp.charge_energy_added >= aux.efficiency\\n            AND c.usable_battery_level > 0\\n        ORDER BY cp.end_date DESC, c.date desc\\n        LIMIT 100\\n    ) AS lastCharges\\n),\\n\\nMaxCapacity AS (\\n    SELECT \\n        MAX(c.rated_battery_range_km * aux.efficiency / c.usable_battery_level) AS Capacity\\n    FROM charging_processes cp\\n        INNER JOIN (\\n            SELECT\\n                charging_process_id,\\n                MAX(date) as date FROM charges WHERE usable_battery_level > 0 GROUP BY charging_process_id\\n        ) AS gcharges ON\\n            cp.id = gcharges.charging_process_id\\n        INNER JOIN charges c ON\\n            c.charging_process_id = cp.id\\n            AND c.date = gcharges.date\\n        INNER JOIN aux ON cp.car_id = aux.car_id\\n    WHERE\\n        cp.car_id = $car_id\\n        AND cp.end_date IS NOT NULL\\n        AND cp.charge_energy_added >= aux.efficiency\\n),\\n\\nCurrentRange AS (\\n    SELECT\\n        (range * 100.0 / usable_battery_level) AS range\\n    FROM (\\n        (\\n            SELECT\\n                date,\\n                ${preferred_range}_battery_range_km AS range,\\n                usable_battery_level AS usable_battery_level\\n            FROM positions\\n            WHERE\\n                car_id = $car_id\\n                AND ideal_battery_range_km IS NOT NULL\\n                AND usable_battery_level > 0 \\n            ORDER BY date DESC\\n            LIMIT 1\\n        )\\n        UNION ALL\\n        (\\n            SELECT date,\\n                ${preferred_range}_battery_range_km AS range,\\n                usable_battery_level as usable_battery_level\\n            FROM charges c\\n                INNER JOIN charging_processes p ON p.id = c.charging_process_id\\n            WHERE\\n                p.car_id = $car_id\\n                AND usable_battery_level > 0\\n            ORDER BY date DESC\\n            LIMIT 1\\n        )\\n    ) AS data\\n    ORDER BY date DESC\\n    LIMIT 1\\n),\\n\\nMaxRange AS (\\n    SELECT\\n        floor(extract(epoch from date)/86400)*86400 AS time,\\n        CASE\\n            WHEN sum(usable_battery_level) = 0 THEN sum(${preferred_range}_battery_range_km) * 100\\n            ELSE sum(${preferred_range}_battery_range_km) / sum(usable_battery_level) * 100\\n        END AS range\\n    FROM (\\n        SELECT\\n            battery_level,\\n            usable_battery_level,\\n            date,\\n            ${preferred_range}_battery_range_km\\n        FROM charges c \\n            INNER JOIN charging_processes p ON p.id = c.charging_process_id \\n        WHERE\\n            p.car_id = $car_id\\n            AND usable_battery_level IS NOT NULL\\n    ) AS data\\n    GROUP BY 1\\n    ORDER BY 2 DESC\\n    LIMIT 1\\n),\\n\\nBase AS (\\n    SELECT NULL\\n)\\n\\nSELECT\\n    json_build_object(\\n        'MaxRange', convert_km(MaxRange.range,'$length_unit'),\\n        'CurrentRange', convert_km(CurrentRange.range,'$length_unit'),\\n        'MaxCapacity', MaxCapacity.Capacity,\\n        'CurrentCapacity', CASE WHEN CurrentCapacity.Capacity IS NULL THEN 1 ELSE CurrentCapacity.Capacity END,\\n        'RatedEfficiency', aux.efficiency\\n    ) #>> '{}'\\nFROM Base\\n    LEFT JOIN MaxRange ON true\\n    LEFT JOIN CurrentRange ON true\\n    LEFT JOIN Aux ON true\\n    LEFT JOIN MaxCapacity ON true\\n    LEFT JOIN CurrentCapacity ON true\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"0\",\n          \"value\": \"0\"\n        },\n        \"description\": \"Set the capacity of your car battery when it was new, in case you started using TeslaMate after a while of having it. If not, leave it at 0, it will be calculated with the data that is logged in TeslaMate\",\n        \"label\": \"Custom Battery Capacity (kWh) when new\",\n        \"name\": \"custom_kwh_new\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"0\",\n            \"value\": \"0\"\n          }\n        ],\n        \"query\": \"0\",\n        \"type\": \"textbox\"\n      },\n      {\n        \"current\": {\n          \"text\": \"0\",\n          \"value\": \"0\"\n        },\n        \"description\": \"Set the max range to 100% of your car when it was new, in case you started using TeslaMate after a while of having it. If not, leave it at 0, the degradation will be calculated with the data that is logged in TeslaMate\",\n        \"label\": \"Custom Max Range when new\",\n        \"name\": \"custom_max_range\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"0\",\n            \"value\": \"0\"\n          }\n        ],\n        \"query\": \"0\",\n        \"type\": \"textbox\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": true\n  },\n  \"timezone\": \"browser\",\n  \"title\": \"Battery Health\",\n  \"uid\": \"jchmRiqUfXgTM\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/charge-level.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Charge Level\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"stepAfter\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"line\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"transparent\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tdate_bin('2 minutes'::interval, timezone('UTC', date), to_timestamp(${__from:date:seconds})) as time,\\n\\tavg(battery_level) AS \\\"Battery Level\\\",\\n\\tavg(usable_battery_level) AS \\\"Usable Battery Level\\\"\\nfrom positions\\n\\tWHERE $__timeFilter(date) AND car_id = $car_id and ideal_battery_range_km is not null\\n\\tgroup by time\\n\\tORDER BY time ASC\\n;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n  20 as lower,\\r\\n  CASE WHEN lfp_battery THEN 100 ELSE 80 END as upper\\r\\nfrom cars inner join car_settings on cars.settings_id = car_settings.id\\r\\nwhere cars.id = $car_id\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"-- To be able to calculate percentiles for unevenly sampled values we are bucketing & gapfilling values before running calculations\\r\\nwith positions_filtered as (\\r\\n    select\\r\\n        date,\\r\\n        battery_level\\r\\n    from\\r\\n        positions p\\r\\n    where\\r\\n        p.car_id = $car_id\\r\\n        -- p.ideal_battery_range_km condition is added to reduce overall amount of data and avoid data biases while driving (unevenly sampled data)\\r\\n        and p.ideal_battery_range_km is not null\\r\\n        and 1 = $include_average_percentiles\\r\\n),\\r\\ngen_date_series as (\\r\\n    select\\r\\n        -- series is used to bucket data and avoid gaps in series used to determine percentiles\\r\\n        generate_series(to_timestamp(${__from:date:seconds} - (86400 * $days_moving_average_percentiles / 2)), to_timestamp(${__to:date:seconds}), concat($bucket_width, ' seconds')::INTERVAL) as series_id\\r\\n),\\r\\ndate_series as (\\r\\n    select\\r\\n        timezone('UTC', series_id) as series_id,\\r\\n        -- before joining, get beginning of next series to be able to left join `positions_filtered`\\r\\n        timezone('UTC', lead(series_id) over (order by series_id asc)) as next_series_id\\r\\n    from\\r\\n        gen_date_series\\r\\n),\\r\\npositions_bucketed as (\\r\\n    select\\r\\n        series_id,\\r\\n        -- simple average can result in loss of accuracy, see https://www.timescale.com/blog/what-time-weighted-averages-are-and-why-you-should-care/ for details\\r\\n        avg(battery_level) as battery_level,\\r\\n        min(positions_filtered.date) as series_min_date\\r\\n    from\\r\\n        date_series\\r\\n    left join positions_filtered on\\r\\n        positions_filtered.date >= date_series.series_id\\r\\n        and positions_filtered.date < date_series.next_series_id\\r\\n    group by\\r\\n        series_id\\r\\n),\\r\\n-- PostgreSQL cannot IGNORE NULLS via Window Functions LAST_VALUE - therefore use natural behavior of COUNT & MAX, see https://www.reddit.com/r/SQL/comments/wb949v/comment/ii5mmmi/ for details\\r\\npositions_bucketed_gapfilling_locf_intermediate as (\\r\\n    select\\r\\n        series_id,\\r\\n        battery_level,\\r\\n        series_min_date,\\r\\n        count(battery_level) over (order by series_id) as i\\r\\n    from\\r\\n        positions_bucketed\\r\\n\\r\\n),\\r\\npositions_bucketed_gapfilled_locf as (\\r\\n    select\\r\\n        series_id,\\r\\n        series_min_date,\\r\\n        max(battery_level) over (partition by i) as battery_level_locf\\r\\n    from\\r\\n        positions_bucketed_gapfilling_locf_intermediate\\r\\n),\\r\\n-- PostgreSQL cannot use PERCENTILE_DISC as Window Function - therefore use ARRAY_AGG and UNNEST, see https://stackoverflow.com/a/72718604 for details\\r\\npositions_bucketed_gapfilled_locf_percentile_intermediate as (\\r\\n    select\\r\\n        series_id,\\r\\n        series_min_date,\\r\\n        min(series_min_date) over () as min_date,\\r\\n        array_agg(battery_level_locf) over w as arr,\\r\\n        avg(battery_level_locf) over w as battery_level_avg\\r\\n    from\\r\\n        positions_bucketed_gapfilled_locf\\r\\n    window w as (rows between (86400 / $bucket_width) * ($days_moving_average_percentiles / 2) preceding and (86400 / $bucket_width) * ($days_moving_average_percentiles / 2) following)\\r\\n)\\r\\n\\r\\nselect\\r\\n    series_id::timestamptz,\\r\\n    (select percentile_cont(0.075) within group (order by s) from unnest(arr) trick(s)) as \\\"$days_moving_average_percentiles Day Moving 7.5% Percentile (${bucket_width:text} buckets)\\\",\\r\\n    battery_level_avg as \\\"$days_moving_average_percentiles Day Moving Average (${bucket_width:text} buckets)\\\",\\r\\n    (select percentile_cont(0.5) within group (order by s) from unnest(arr) trick(s)) as \\\"$days_moving_average_percentiles Day Moving Median (${bucket_width:text} buckets)\\\",\\r\\n    (select percentile_cont(0.925) within group (order by s) from unnest(arr) trick(s)) as \\\"$days_moving_average_percentiles Day Moving 92.5% Percentile (${bucket_width:text} buckets)\\\"\\r\\nfrom\\r\\n    positions_bucketed_gapfilled_locf_percentile_intermediate where $__timeFilter(series_id) and series_min_date >= min_date\",\n          \"refId\": \"C\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charge Level\",\n      \"transformations\": [\n        {\n          \"id\": \"configFromData\",\n          \"options\": {\n            \"applyTo\": {\n              \"id\": \"byFrameRefID\",\n              \"options\": \"A\"\n            },\n            \"configRefId\": \"B\",\n            \"mappings\": [\n              {\n                \"fieldName\": \"lower\",\n                \"handlerArguments\": {\n                  \"threshold\": {\n                    \"color\": \"green\"\n                  }\n                },\n                \"handlerKey\": \"threshold1\"\n              },\n              {\n                \"fieldName\": \"upper\",\n                \"handlerArguments\": {\n                  \"threshold\": {\n                    \"color\": \"green\"\n                  }\n                },\n                \"handlerKey\": \"threshold1\"\n              }\n            ]\n          }\n        }\n      ],\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"7200\",\n          \"value\": \"7200\"\n        },\n        \"description\": \"Data used to calculate Moving Average / Percentiles is unevenly sampled in TeslaMate. To avoid biases towards more frequently sampled values, the data is bucketed. For buckets without sampled values, the last observed value is carried forward. Bucketing is not time-weighted but is a simple average. Increasing the bucket width results in a loss of accuracy.\",\n        \"includeAll\": false,\n        \"label\": \"Bucket Width\",\n        \"name\": \"bucket_width\",\n        \"options\": [],\n        \"query\": \"1h : 3600, 2h : 7200, 4h : 14400\",\n        \"type\": \"custom\",\n        \"valuesFormat\": \"csv\"\n      },\n      {\n        \"current\": {\n          \"text\": \"1\",\n          \"value\": \"1\"\n        },\n        \"includeAll\": false,\n        \"label\": \"Include Moving Average / Percentiles\",\n        \"name\": \"include_average_percentiles\",\n        \"options\": [],\n        \"query\": \"no : 0, yes : 1\",\n        \"type\": \"custom\",\n        \"valuesFormat\": \"csv\"\n      },\n      {\n        \"current\": {\n          \"text\": \"6\",\n          \"value\": \"6\"\n        },\n        \"description\": \"\",\n        \"includeAll\": false,\n        \"label\": \"Moving Average / Percentiles Width\",\n        \"name\": \"intervals_moving_average_percentiles\",\n        \"options\": [],\n        \"query\": \"1/6 of interval : 6, 1/12 of interval : 12\",\n        \"type\": \"custom\",\n        \"valuesFormat\": \"csv\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select ((${__to:date:seconds} - ${__from:date:seconds}) / 86400 / $intervals_moving_average_percentiles)\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"days_moving_average_percentiles\",\n        \"options\": [],\n        \"query\": \"select ((${__to:date:seconds} - ${__from:date:seconds}) / 86400 / $intervals_moving_average_percentiles)\",\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Charge Level\",\n  \"uid\": \"WopVO_mgz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/charges.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 16,\n      \"panels\": [],\n      \"title\": \"Summary of this period\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"text\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charge_energy_added\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Total Energy added:\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 10,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 6,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"names\": [\n                \"charge_energy_added\"\n              ]\n            }\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"text\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charge_energy_used\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Total Energy used:\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 1\n      },\n      \"id\": 20,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 6,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"names\": [\n                \"charge_energy_used\"\n              ]\n            }\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 2,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"text\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"cost\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Total Charging Cost:\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 1\n      },\n      \"id\": 14,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 6,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"names\": [\n                \"cost\"\n              ]\n            }\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"text\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"m\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"duration_min\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Duration:\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 1\n      },\n      \"id\": 15,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 6,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"names\": [\n                \"duration_min\"\n              ]\n            }\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"Browse your charges by Geofence, Location, Type, Cost and Duration in order to have an accurate Total of kWh added and their respective costs\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"filterable\": false,\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false,\n            \"minWidth\": 150\n          },\n          \"displayName\": \"\",\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_date\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Date\"\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": false,\n                    \"title\": \"View charge details\",\n                    \"url\": \"/d/BHhxFeZRz/charge-details?from=${__data.fields.start_date_ts.numeric}&to=${__data.fields.end_date_ts.numeric}&var-car_id=${__data.fields.car_id.numeric}&var-charging_process_id=${__data.fields.id.numeric}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 210\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"dateTimeAsLocal\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charge_energy_added\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Energy added\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 115\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_battery_level\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"% Start\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 70\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"end_battery_level\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"% End\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 65\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"duration_min\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Duration\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"m\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 80\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"outside_temp_avg_c\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Temp\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"celsius\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"#C0D8FF\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"#C8F2C2\",\n                      \"value\": 10\n                    },\n                    {\n                      \"color\": \"#FFA6B0\",\n                      \"value\": 20\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 70\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"cost\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Cost\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": false,\n                    \"title\": \"Set Cost\",\n                    \"url\": \"${base_url:raw}/charge-cost/${__data.fields.id.numeric}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"noValue\",\n                \"value\": \"-\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 70\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_ts/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"id\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"address\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Location\"\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Create or edit geo-fence\",\n                    \"url\": \"${base_url:raw}/geo-fences/${__data.fields.path}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 180\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_added_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range gained\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 120\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_added_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range gained\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 120\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charge_energy_added_per_hour\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Power\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatt\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"#96D98D\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"#56A64B\",\n                      \"value\": 20\n                    },\n                    {\n                      \"color\": \"#37872D\",\n                      \"value\": 55\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 90\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_added_per_hour_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Charge rate\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitykmh\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 120\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"outside_temp_avg_f\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Temp\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"fahrenheit\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 70\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"super-light-blue\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"super-light-green\",\n                      \"value\": 50\n                    },\n                    {\n                      \"color\": \"super-light-red\",\n                      \"value\": 68\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_added_per_hour_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Charge rate\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitymph\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 120\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"path\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charge_energy_used\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Energy used\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 105\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charging_efficiency\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Efficiency\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percentunit\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"mode\": \"basic\",\n                  \"type\": \"gauge\"\n                }\n              },\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"mode\": \"continuous-RdYlGr\"\n                }\n              },\n              {\n                \"id\": \"max\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 120\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"car_id\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"end_date\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"cost_per_kwh\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Cost / kWh\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"noValue\",\n                \"value\": \"-\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 100\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charge_type\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Type\"\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 40\n              },\n              {\n                \"id\": \"mappings\",\n                \"value\": [\n                  {\n                    \"options\": {\n                      \"AC\": {\n                        \"color\": \"green\",\n                        \"index\": 0\n                      },\n                      \"DC\": {\n                        \"color\": \"light-orange\",\n                        \"index\": 1\n                      }\n                    },\n                    \"type\": \"value\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"center\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"odometer_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Odometer\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 95\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"odometer_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Odometer\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 95\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 19,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 3\n      },\n      \"id\": 6,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": []\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n    SELECT\\n        floor(extract(epoch FROM start_date)) * 1000 AS start_date_ts,\\n        ceil(extract(epoch FROM end_date)) * 1000 AS end_date_ts,\\n        start_date,\\n        end_date,\\n        CONCAT_WS(', ', COALESCE(addresses.name, nullif(CONCAT_WS(' ', addresses.road, addresses.house_number), '')), addresses.city) AS address,\\n        g.name as geofence_name,\\n        g.id as geofence_id,\\n        p.latitude,\\n        p.longitude,\\n        cp.charge_energy_added,\\n        cp.charge_energy_used,\\n        duration_min,\\n        start_battery_level,\\n        end_battery_level,\\n        end_${preferred_range}_range_km - start_${preferred_range}_range_km as range_added,\\n        outside_temp_avg,\\n        cp.id,\\n        p.odometer - lag(p.odometer) OVER (ORDER BY start_date) AS distance,\\n        cars.efficiency,\\n        cp.car_id,\\n        cost,\\n        max(c.charger_voltage) as max_charger_voltage,\\n        CASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC' ELSE 'AC' END AS charge_type,\\n        p.odometer as odometer\\n    FROM\\n        charging_processes cp\\n\\tLEFT JOIN charges c ON cp.id = c.charging_process_id\\n    LEFT JOIN positions p ON p.id = cp.position_id\\n    LEFT JOIN cars ON cars.id = cp.car_id\\n    LEFT JOIN addresses ON addresses.id = cp.address_id\\n    LEFT JOIN geofences g ON g.id = geofence_id\\n    WHERE \\n        cp.car_id = $car_id AND\\n        $__timeFilter(start_date) AND\\n        (cp.charge_energy_added IS NULL OR cp.charge_energy_added > 0) AND\\n        ('${geofence:pipe}' = '-1' OR geofence_id in ($geofence))\\n    GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, p.odometer\\n    ORDER BY\\n        start_date\\n)\\nSELECT\\n    start_date_ts,\\n    end_date_ts,\\n    CASE WHEN geofence_id IS NULL THEN CONCAT('new?lat=', latitude, '&lng=', longitude)\\n         WHEN geofence_id IS NOT NULL THEN CONCAT(geofence_id, '/edit')\\n    END as path,\\n    car_id,\\n    id,\\n    -- Columns\\n    start_date,\\n    end_date,\\n    COALESCE(geofence_name, address) as address,    \\n    charge_type,\\n    duration_min,\\n    cost,\\n    cost / NULLIF(greatest(charge_energy_added, charge_energy_used), 0) as cost_per_kwh,\\n    charge_energy_added,\\n    greatest(charge_energy_used, charge_energy_added) as charge_energy_used,\\n    charge_energy_added / greatest(charge_energy_used, charge_energy_added) as charging_efficiency,\\n    convert_celsius(outside_temp_avg, '$temp_unit') AS outside_temp_avg_$temp_unit,\\n    charge_energy_added * 60 / NULLIF (duration_min, 0) AS charge_energy_added_per_hour,\\n    convert_km(range_added * 60 / NULLIF (duration_min, 0), '$length_unit') AS range_added_per_hour_$length_unit,\\n    convert_km(range_added, '$length_unit') AS range_added_$length_unit,\\n    start_battery_level,\\n    end_battery_level,\\n    convert_km(odometer::numeric, '$length_unit') AS odometer_$length_unit\\n FROM\\n    data\\nWHERE\\n    (distance >= 0 OR distance IS NULL)\\n    AND duration_min >= '$min_duration_min'\\n    AND \\n        CASE\\n            WHEN '$cost' !~ '^[0-9]+$' THEN TRUE \\n            ELSE cost >= COALESCE(NULLIF('$cost', '')::NUMERIC, 0) \\n        END\\n    AND charge_type = ANY(CASE WHEN array_to_string(ARRAY[$charge_type], ',') = 'DC' THEN ARRAY['DC'] WHEN array_to_string(ARRAY[$charge_type], ',') = 'AC' THEN ARRAY['AC'] ELSE ARRAY['DC', 'AC'] END)\\n    AND address ILIKE '%$location%'\\nORDER BY\\n  start_date DESC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charger type: $charge_type\",\n      \"type\": \"table\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 18,\n      \"panels\": [],\n      \"title\": \"General information (All charges)\",\n      \"type\": \"row\"\n    },\n    {\n      \"fieldConfig\": {\n        \"defaults\": {},\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 23\n      },\n      \"id\": 19,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"From here you can check if you have \\nincomplete data of **Charges** (charges without ending date)\\nIf so, you may follow the official \\nguide by <a href='https://docs.teslamate.org/docs/maintenance/manually_fixing_data' target='_blank'>Manually fixing data</a>\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"title\": \"\",\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"fixed\"\n          },\n          \"custom\": {\n            \"align\": \"center\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"id\": 17,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"enablePagination\": true,\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT id as \\\"Charging Process ID\\\", start_date, end_date, charge_energy_added, charge_energy_used, start_battery_level, end_battery_level, duration_min\\nFROM charging_processes \\nWHERE car_id = $car_id AND end_date is null\\nORDER BY start_date DESC\\n\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Incomplete Charges 🪫\",\n      \"type\": \"table\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"includeAll\": false,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_temperature from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"temp_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_temperature from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"allValue\": \"-1\",\n        \"allowCustomValue\": false,\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"-- The \\\"Include All option\\\" built into Grafana is not initializing correctly if no value is returned by the SQL query anymore\\r\\n-- Create the option via SQL as a temporary workaround until fixed (https://github.com/grafana/grafana/issues/119793)\\r\\n\\r\\nwith geofences_incl_all_option as (\\r\\n\\r\\n  select 'All' as __text, -1 as __value, '_all' as name\\r\\n\\r\\n  union all\\r\\n\\r\\n  SELECT name AS __text, id AS __value, name from geofences\\r\\n\\r\\n)\\r\\n\\r\\nSELECT __text, __value from geofences_incl_all_option order by name asc\",\n        \"includeAll\": false,\n        \"label\": \"Geofence\",\n        \"multi\": true,\n        \"name\": \"geofence\",\n        \"options\": [],\n        \"query\": \"-- The \\\"Include All option\\\" built into Grafana is not initializing correctly if no value is returned by the SQL query anymore\\r\\n-- Create the option via SQL as a temporary workaround until fixed (https://github.com/grafana/grafana/issues/119793)\\r\\n\\r\\nwith geofences_incl_all_option as (\\r\\n\\r\\n  select 'All' as __text, -1 as __value, '_all' as name\\r\\n\\r\\n  union all\\r\\n\\r\\n  SELECT name AS __text, id AS __value, name from geofences\\r\\n\\r\\n)\\r\\n\\r\\nSELECT __text, __value from geofences_incl_all_option order by name asc\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"\",\n          \"value\": \"\"\n        },\n        \"description\": \"Type a text contained in Location\",\n        \"label\": \"Location\",\n        \"name\": \"location\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"\",\n            \"value\": \"\"\n          }\n        ],\n        \"query\": \"\",\n        \"type\": \"textbox\"\n      },\n      {\n        \"current\": {},\n        \"includeAll\": true,\n        \"label\": \"Type\",\n        \"multi\": true,\n        \"name\": \"charge_type\",\n        \"options\": [],\n        \"query\": \"AC, DC\",\n        \"type\": \"custom\",\n        \"valuesFormat\": \"csv\"\n      },\n      {\n        \"current\": {\n          \"text\": \"\",\n          \"value\": \"\"\n        },\n        \"label\": \"Cost >=\",\n        \"name\": \"cost\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"\",\n            \"value\": \"\"\n          }\n        ],\n        \"query\": \"\",\n        \"type\": \"textbox\"\n      },\n      {\n        \"current\": {\n          \"text\": \"0\",\n          \"value\": \"0\"\n        },\n        \"label\": \"Duration (minutes) >=\",\n        \"name\": \"min_duration_min\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"0\",\n            \"value\": \"0\"\n          }\n        ],\n        \"query\": \"0\",\n        \"type\": \"textbox\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-3M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Charges\",\n  \"uid\": \"TSmNYvRRk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/charging-stats.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 1,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 12,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 8,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tcount(*)\\nFROM\\n\\tcharging_processes\\nWHERE\\n\\t$__timeFilter(end_date)\\n\\tAND duration_min >= $min_duration\\n\\tAND car_id = $car_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"# of Charges\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 3,\n        \"y\": 1\n      },\n      \"id\": 10,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tsum(charge_energy_added)\\nFROM\\n\\tcharging_processes\\nWHERE\\n\\t$__timeFilter(end_date)\\n\\tAND duration_min >= $min_duration\\n\\tAND car_id = $car_id;\\n\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Total Energy added\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 2,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 6,\n        \"y\": 1\n      },\n      \"id\": 14,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tCOALESCE(sum(cp.cost),0)\\nFROM\\n\\tcharging_processes cp\\nLEFT JOIN \\n\\taddresses addr ON addr.id = address_id\\nLEFT JOIN\\n  geofences geo ON geo.id = geofence_id\\nJOIN\\n  charges char ON char.charging_process_id = cp.id AND char.date = end_date\\t\\nWHERE\\n  $__timeFilter(end_date)\\n  AND (addr.name ILIKE '%supercharger%' OR geo.name ILIKE '%supercharger%' OR char.fast_charger_brand = 'Tesla')\\n\\tAND NULLIF(char.charger_phases, 0) IS NULL\\n\\tAND char.fast_charger_type != 'ACSingleWireCAN'\\n\\tAND cp.cost IS NOT NULL\\n\\tAND duration_min >= $min_duration\\n\\tAND cp.car_id = $car_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"SuC Charging Cost\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 2,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 9,\n        \"y\": 1\n      },\n      \"id\": 27,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tsum(cost)\\nFROM\\n\\tcharging_processes\\nWHERE\\n\\t$__timeFilter(end_date)\\n\\tAND duration_min >= $min_duration\\n\\tAND car_id = $car_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Total Charging Cost\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 2,\n          \"displayName\": \"\",\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#d8d9da\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 12,\n        \"y\": 1\n      },\n      \"id\": 26,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"-- Query shared between Charging Stats, Statistics & Trip Dashboards (with minor changes) - ensure to modify in all places when necessary\\n\\nwith drives_start_event as (\\n\\n    select\\n        'drive_start' as event, start_date as date, start_${preferred_range}_range_km as range, start_km as odometer, car_id\\n    from drives\\n    where car_id = $car_id and $__timeFilter(start_date) and 48 <= extract(hour FROM to_timestamp(${__to:date:seconds}) - to_timestamp(${__from:date:seconds}))\\n\\n),\\n\\ndrives_end_event as (\\n\\n    select\\n        'drive_end' as event, end_date as date, end_${preferred_range}_range_km as range, end_km as odometer, car_id\\n    from drives\\n    where car_id = $car_id and $__timeFilter(start_date) and 48 <= extract(hour FROM to_timestamp(${__to:date:seconds}) - to_timestamp(${__from:date:seconds}))\\n\\n),\\n\\ncharging_processes_start_event as (\\n\\n    select\\n        'charging_process_start' as event, start_date as date, start_${preferred_range}_range_km as range, p.odometer, cp.car_id\\n    from charging_processes cp\\n        inner join positions p on cp.position_id = p.id\\n    where cp.car_id = $car_id and $__timeFilter(end_date) and 48 <= extract(hour FROM to_timestamp(${__to:date:seconds}) - to_timestamp(${__from:date:seconds}))\\n\\n),\\n\\ncharging_processes_end_event as (\\n\\n    select\\n        'charging_process_end' as event, end_date as date, end_${preferred_range}_range_km as range, p.odometer, cp.car_id\\n    from charging_processes cp\\n        inner join positions p on cp.position_id = p.id\\n    where cp.car_id = $car_id and $__timeFilter(end_date) and 48 <= extract(hour FROM to_timestamp(${__to:date:seconds}) - to_timestamp(${__from:date:seconds}))\\n\\n),\\n\\npositions as (\\n\\n    select\\n        case\\n            when drive_id is not null and lead(drive_id) over w is not null then 'drive_start'\\n            else 'something'\\n        end as event,\\n        date, ${preferred_range}_battery_range_km as range, p.odometer, p.car_id\\n    from positions p\\n    where ideal_battery_range_km is not null and car_id = $car_id and 48 > extract(hour FROM to_timestamp(${__to:date:seconds}) - to_timestamp(${__from:date:seconds}))\\n    and (drive_id in (select id from drives where $__timeFilter(start_date)) or drive_id is null and $__timeFilter(date))\\n    window w as (order by date)\\n\\n),\\n\\ncombined as (\\n\\n    select * from drives_start_event\\n    union all\\n    select * from drives_end_event\\n    union all\\n    select * from charging_processes_start_event\\n    union all\\n    select * from charging_processes_end_event\\n    union all\\n    select * from positions\\n\\n),\\n\\nfinal as (\\n\\n    select\\n        car_id,\\n        lead(odometer) over w - odometer as distance,\\n        case when event != 'drive_start' then greatest(range - lead(range) over w, 0) else range - lead(range) over w end as range_loss\\n    from combined\\n    window w as (order by date asc)\\n\\n),\\n\\nderived as (\\n\\n  select\\n    convert_km(sum(distance)::numeric, '$length_unit') as distance,\\n    sum(range_loss) * c.efficiency as consumption\\n  from final\\n    inner join cars c on car_id = c.id\\n  group by c.efficiency\\n\\n),\\n\\ncharges as (\\n\\n  SELECT\\n    sum(cost) / sum(charge_energy_added) as cost_per_kwh\\n  FROM charging_processes\\n  where car_id = $car_id and $__timeFilter(end_date)\\n\\n)\\n\\nselect\\n  consumption / distance * 100 * cost_per_kwh as cost_mileage\\nfrom derived cross join charges\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ø Cost per 100 $length_unit\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 2,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#d8d9da\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 15,\n        \"y\": 1\n      },\n      \"id\": 31,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT \\n  sum(cost) / sum(greatest(charge_energy_added, charge_energy_used))\\nFROM charging_processes\\n  WHERE $__timeFilter(end_date) AND duration_min >= $min_duration AND car_id = $car_id\\n\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ø Cost per kWh\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 2,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#d8d9da\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 18,\n        \"y\": 1\n      },\n      \"id\": 32,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n  SELECT\\n\\t\\tcp.id,\\n    cp.cost,\\n    cp.charge_energy_added,\\n    cp.charge_energy_used,\\n\\t\\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC'\\n\\t\\t\\t\\t ELSE 'AC'\\n\\t\\tEND AS current\\n\\tFROM charging_processes cp\\n  RIGHT JOIN charges ON cp.id = charges.charging_process_id\\n  WHERE\\n\\t  cp.car_id = $car_id\\n    AND duration_min >= $min_duration\\n\\t  AND $__timeFilter(end_date)\\n  GROUP BY 1\\n)\\n\\nSELECT \\n  sum(cost) / sum(greatest(charge_energy_added, charge_energy_used))\\nFROM data\\n  WHERE current = 'DC'\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ø Cost per kWh DC\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 2,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#d8d9da\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 21,\n        \"y\": 1\n      },\n      \"id\": 33,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n  SELECT\\n\\t\\tcp.id,\\n    cp.cost,\\n    cp.charge_energy_added,\\n    cp.charge_energy_used,\\n\\t\\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC'\\n\\t\\t\\t\\t ELSE 'AC'\\n\\t\\tEND AS current\\n\\tFROM charging_processes cp\\n  RIGHT JOIN charges ON cp.id = charges.charging_process_id\\n  WHERE\\n\\t  cp.car_id = $car_id\\n    AND duration_min >= $min_duration\\n\\t  AND $__timeFilter(end_date)\\n  GROUP BY 1\\n)\\n\\nSELECT \\n  sum(cost) / sum(greatest(charge_energy_added, charge_energy_used))\\nFROM data\\n  WHERE current = 'AC'\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ø Cost per kWh AC\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            }\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"id\": 15,\n      \"options\": {\n        \"calculate\": true,\n        \"calculation\": {\n          \"yBuckets\": {\n            \"mode\": \"size\",\n            \"value\": \"10.00001\"\n          }\n        },\n        \"cellGap\": 2,\n        \"cellValues\": {},\n        \"color\": {\n          \"exponent\": 0.5,\n          \"fill\": \"#b4ff00\",\n          \"min\": 0,\n          \"mode\": \"opacity\",\n          \"reverse\": false,\n          \"scale\": \"exponential\",\n          \"scheme\": \"Oranges\",\n          \"steps\": 128\n        },\n        \"exemplars\": {\n          \"color\": \"rgba(255,0,255,0.7)\"\n        },\n        \"filterValues\": {\n          \"le\": 1e-9\n        },\n        \"legend\": {\n          \"show\": false\n        },\n        \"rowsFrame\": {\n          \"layout\": \"auto\"\n        },\n        \"showValue\": \"never\",\n        \"tooltip\": {\n          \"maxHeight\": 600,\n          \"mode\": \"single\",\n          \"showColorScale\": false,\n          \"yHistogram\": false\n        },\n        \"yAxis\": {\n          \"axisPlacement\": \"left\",\n          \"max\": \"100\",\n          \"reverse\": false,\n          \"unit\": \"short\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\t$__time(end_date),\\n\\tstart_battery_level,\\n\\tend_battery_level\\nFROM\\n\\tcharging_processes\\nWHERE\\n\\t$__timeFilter(end_date)\\n\\tAND duration_min >= $min_duration \\n\\tAND car_id = $car_id\\nORDER BY\\n\\tend_date;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"timeFrom\": \"6M\",\n      \"title\": \"Charge Heatmap\",\n      \"type\": \"heatmap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 35,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"line\"\n            }\n          },\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"transparent\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Start SOC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.lineWidth\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.fillBelowTo\",\n                \"value\": \"End SOC\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"End SOC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#73BF69\",\n                  \"mode\": \"fixed\"\n                }\n              },\n              {\n                \"id\": \"custom.fillBelowTo\",\n                \"value\": \"Start SOC\"\n              },\n              {\n                \"id\": \"custom.lineWidth\",\n                \"value\": 0\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 4\n      },\n      \"id\": 16,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH charges AS (\\n\\tSELECT\\n\\t\\tend_date,\\n\\t\\tstart_battery_level,\\n\\t\\tend_battery_level,\\n\\t\\tp.odometer,\\n\\t\\tCOALESCE(\\n\\t\\t\\tLAG(p.odometer) OVER (\\n\\t\\t\\t\\tORDER BY cp.end_date\\n\\t\\t\\t),\\n\\t\\t\\tp.odometer\\n\\t\\t) as odometer_prev\\n\\tFROM\\n\\t\\tcharging_processes cp\\n\\tJOIN positions p\\n\\tON p.id = cp.position_id\\n\\tWHERE\\n\\t\\t$__timeFilter(cp.end_date)\\n\\t\\tAND cp.duration_min >= $min_duration\\n\\t\\tAND cp.car_id = $car_id\\n)\\nSELECT\\n\\tMIN(end_date) as time,\\n\\tMIN(start_battery_level) as \\\"Start SOC\\\",\\n\\tMAX(end_battery_level) as \\\"End SOC\\\"\\nFROM charges\\nGROUP BY\\n\\tCASE WHEN odometer - odometer_prev < 2 THEN odometer_prev ELSE odometer END\\nORDER BY\\n\\ttime;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n  20 as lower,\\r\\n  CASE WHEN lfp_battery THEN 100 ELSE 80 END as upper\\r\\nfrom cars inner join car_settings on cars.settings_id = car_settings.id\\r\\nwhere cars.id = $car_id\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"timeFrom\": \"6M\",\n      \"title\": \"Charge Delta\",\n      \"transformations\": [\n        {\n          \"id\": \"configFromData\",\n          \"options\": {\n            \"applyTo\": {\n              \"id\": \"byFrameRefID\",\n              \"options\": \"A\"\n            },\n            \"configRefId\": \"B\",\n            \"mappings\": [\n              {\n                \"fieldName\": \"lower\",\n                \"handlerArguments\": {\n                  \"threshold\": {\n                    \"color\": \"green\"\n                  }\n                },\n                \"handlerKey\": \"threshold1\"\n              },\n              {\n                \"fieldName\": \"upper\",\n                \"handlerArguments\": {\n                  \"threshold\": {\n                    \"color\": \"green\"\n                  }\n                },\n                \"handlerKey\": \"threshold1\"\n              }\n            ]\n          }\n        }\n      ],\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"decimals\": 2,\n          \"mappings\": [],\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"AC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#73BF69\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"DC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"light-orange\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 10\n      },\n      \"id\": 18,\n      \"maxDataPoints\": 3,\n      \"options\": {\n        \"displayLabels\": [\n          \"name\"\n        ],\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\",\n            \"percent\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"sort\": \"desc\",\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n  SELECT\\n\\t\\tcp.id,\\n\\t\\tcp.charge_energy_added,\\n\\t\\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC'\\n\\t\\t\\t\\t ELSE 'AC'\\n\\t\\tEND AS current,\\n\\t\\tcp.charge_energy_used\\n\\tFROM charging_processes cp\\n  RIGHT JOIN charges ON cp.id = charges.charging_process_id\\n  WHERE\\n\\t  cp.car_id = $car_id\\n\\t  AND duration_min >= $min_duration\\n\\t  AND $__timeFilter(end_date)\\n  GROUP BY 1,2\\n)\\nSELECT\\n\\tnow() AS time,\\n\\tSUM(GREATEST(charge_energy_added, charge_energy_used)) AS value,\\n\\tcurrent AS metric\\nFROM data\\nGROUP BY 3\\nORDER BY metric DESC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"AC/DC - Energy Used\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-reds\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"pct\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"chg_total\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 14,\n        \"x\": 5,\n        \"y\": 10\n      },\n      \"id\": 24,\n      \"maxDataPoints\": 1,\n      \"options\": {\n        \"basemap\": {\n          \"config\": {},\n          \"name\": \"Layer 0\",\n          \"tooltip\": true,\n          \"type\": \"osm-standard\"\n        },\n        \"controls\": {\n          \"mouseWheelZoom\": true,\n          \"showAttribution\": true,\n          \"showDebug\": false,\n          \"showMeasure\": false,\n          \"showScale\": false,\n          \"showZoom\": true\n        },\n        \"layers\": [\n          {\n            \"config\": {\n              \"showLegend\": false,\n              \"style\": {\n                \"color\": {\n                  \"field\": \"pct\",\n                  \"fixed\": \"red\"\n                },\n                \"opacity\": 0.4,\n                \"rotation\": {\n                  \"fixed\": 0,\n                  \"max\": 360,\n                  \"min\": -360,\n                  \"mode\": \"mod\"\n                },\n                \"size\": {\n                  \"field\": \"chg_total\",\n                  \"fixed\": 5,\n                  \"max\": 30,\n                  \"min\": 5\n                },\n                \"symbol\": {\n                  \"fixed\": \"img/icons/marker/circle.svg\",\n                  \"mode\": \"fixed\"\n                },\n                \"symbolAlign\": {\n                  \"horizontal\": \"center\",\n                  \"vertical\": \"center\"\n                },\n                \"text\": {\n                  \"field\": \"chg_total\",\n                  \"fixed\": \"\",\n                  \"mode\": \"field\"\n                },\n                \"textConfig\": {\n                  \"fontSize\": 12,\n                  \"offsetX\": 15,\n                  \"offsetY\": 0,\n                  \"textAlign\": \"left\",\n                  \"textBaseline\": \"middle\"\n                }\n              }\n            },\n            \"location\": {\n              \"mode\": \"auto\"\n            },\n            \"name\": \"Charge location\",\n            \"tooltip\": true,\n            \"type\": \"markers\"\n          }\n        ],\n        \"tooltip\": {\n          \"mode\": \"details\"\n        },\n        \"view\": {\n          \"allLayers\": true,\n          \"id\": \"fit\",\n          \"lat\": 0,\n          \"lon\": 0,\n          \"noRepeat\": false,\n          \"zoom\": 15\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH charge_data AS (\\r\\nSELECT COALESCE(geofence.name, CONCAT_WS(', ', COALESCE(address.name, nullif(CONCAT_WS(' ', address.road, address.house_number), '')), address.city)) AS loc_nm\\r\\n, AVG(position.latitude) AS latitude\\r\\n, AVG(position.longitude) AS longitude\\r\\n, sum(charge.charge_energy_added) AS chg_total\\r\\n, count(*) as charges\\r\\nFROM charging_processes charge\\r\\nLEFT JOIN addresses address ON charge.address_id = address.id\\r\\nLEFT JOIN positions position ON charge.position_id = position.id\\r\\nLEFT JOIN geofences geofence ON charge.geofence_id = geofence.id\\r\\nWHERE $__timeFilter(charge.end_date)\\r\\nAND charge.duration_min >= $min_duration\\r\\nAND charge.car_id = $car_id\\r\\nGROUP BY COALESCE(geofence.name, CONCAT_WS(', ', COALESCE(address.name, nullif(CONCAT_WS(' ', address.road, address.house_number), '')), address.city))\\r\\n) \\r\\nSELECT loc_nm\\r\\n\\t,latitude\\r\\n\\t,longitude\\r\\n\\t,chg_total\\r\\n\\t,chg_total * 1.0 / (SELECT sum(chg_total) FROM charge_data) * 100   AS pct\\r\\n\\t,charges\\r\\nFROM charge_data\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charging heat map by kWh\",\n      \"type\": \"geomap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"unit\": \"dtdurations\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"AC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#73BF69\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"DC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"light-orange\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 13,\n        \"w\": 5,\n        \"x\": 19,\n        \"y\": 10\n      },\n      \"id\": 20,\n      \"maxDataPoints\": 3,\n      \"options\": {\n        \"displayLabels\": [\n          \"name\"\n        ],\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\",\n            \"percent\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"sort\": \"desc\",\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n  SELECT\\n\\t\\tcp.id,\\n\\t\\tcp.duration_min,\\n\\t\\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC'\\n\\t\\t\\t\\t ELSE 'AC'\\n\\t\\tEND AS current\\n\\tFROM charging_processes cp\\n  RIGHT JOIN charges ON cp.id = charges.charging_process_id\\n  WHERE\\n\\t  cp.car_id = $car_id\\n\\t  AND cp.duration_min >= $min_duration\\n\\t  AND $__timeFilter(end_date)\\n  GROUP BY 1,2\\n)\\nSELECT\\n\\tnow() AS time,\\n\\tsum(duration_min) * 60 AS value,\\n\\tcurrent AS metric\\nFROM data\\nGROUP BY 3\\nORDER BY metric DESC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"AC/DC - Duration\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-RdYlGr\",\n            \"seriesBy\": \"last\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"fillOpacity\": 50,\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"pointShape\": \"circle\",\n            \"pointSize\": {\n              \"fixed\": 3\n            },\n            \"pointStrokeWidth\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"show\": \"points\"\n          },\n          \"fieldMinMax\": false,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byFrameRefID\",\n              \"options\": \"A\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"title\": \"Show charge details\",\n                    \"url\": \"/d/BHhxFeZRz/charge-details?from=${__data.fields.start_date.numeric}&to=${__data.fields.end_date.numeric}&var-car_id=${car_id}&var-charging_process_id=${__data.fields.charging_process_id.numeric}\"\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byFrameRefID\",\n              \"options\": \"B\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.pointSize.fixed\",\n                \"value\": 15\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Power\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatt\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"SoC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 16,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 23\n      },\n      \"id\": 29,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"mapping\": \"manual\",\n        \"series\": [\n          {\n            \"color\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Power\"\n              }\n            },\n            \"frame\": {\n              \"matcher\": {\n                \"id\": \"byIndex\",\n                \"options\": 0\n              }\n            },\n            \"x\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"SoC\"\n              }\n            },\n            \"y\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Power\"\n              }\n            }\n          },\n          {\n            \"color\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Power\"\n              }\n            },\n            \"frame\": {\n              \"matcher\": {\n                \"id\": \"byIndex\",\n                \"options\": 1\n              }\n            },\n            \"x\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"SoC\"\n              }\n            },\n            \"y\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Power\"\n              }\n            }\n          }\n        ],\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n  c.battery_level as \\\"SoC\\\",\\r\\n  round(avg(c.charger_power), 0) as \\\"Power\\\",\\r\\n  c.charging_process_id as \\\"charging_process_id\\\",\\r\\n  p.start_date as \\\"start_date\\\",\\r\\n  p.end_date as \\\"end_date\\\",\\r\\n  COALESCE(g.name, a.name) || ' ' || to_char(timezone('$__timezone', timezone('UTC', c.date)), 'YYYY-MM-dd') as \\\"Charge\\\"\\r\\nFROM\\r\\n  charges c\\r\\nJOIN charging_processes p ON p.id = c.charging_process_id \\r\\nJOIN addresses a ON a.id = p.address_id\\r\\nLEFT JOIN geofences g ON g.id = p.geofence_id\\r\\nWHERE\\r\\n  $__timeFilter(date)\\r\\n AND p.car_id = $car_id\\r\\n AND charger_power > 0\\r\\n AND c.fast_charger_present\\r\\nGROUP BY c.battery_level, c.charging_process_id, a.name, g.name, p,start_date, p.end_date, to_char(timezone('$__timezone', timezone('UTC', c.date)), 'YYYY-MM-dd')\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  c.battery_level as \\\"SoC\\\",\\n  PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY charger_power) as \\\"Power\\\"\\nFROM\\n  charges c\\njoin\\n  charging_processes p ON p.id = c.charging_process_id \\nWHERE\\n  $__timeFilter(date)\\n AND p.car_id = $car_id\\n AND charger_power > 0\\n AND c.fast_charger_present\\nGROUP BY battery_level\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"DC Charging Curve\",\n      \"type\": \"xychart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"Only End Battery Level of last Charging Process considered for consecutive Charging Processes\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false,\n            \"minWidth\": 50\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"soc\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 50\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"SOC\"\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"n\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"# of Charges\"\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"mode\": \"gradient\",\n                  \"type\": \"gauge\",\n                  \"valueDisplayMode\": \"text\"\n                }\n              },\n              {\n                \"id\": \"max\"\n              },\n              {\n                \"id\": \"min\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"left\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 18,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 39\n      },\n      \"id\": 2,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": []\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"with data as (\\n\\n    select id, end_battery_level, end_date, 'Charging Process' as activity\\n    from charging_processes cp\\n    where car_id = $car_id and $__timeFilter(cp.end_date) and duration_min >= $min_duration\\n    \\n    union all\\n    \\n    select d.id, p.battery_level as end_battery_level, end_date, 'Drive' as activity\\n    from drives d\\n        inner join positions p on d.end_position_id = p.id\\n    where d.car_id = $car_id and $__timeFilter(d.end_date)\\n\\n),\\n\\nflag_consecutive_charges as (\\n\\n    select *, lead(activity) over (order by end_date) as next_activity from data\\n\\n)\\n\\nSELECT\\n    ROUND(end_battery_level / 5, 0) * 5 AS SOC,\\n    count(*) AS n\\nFROM\\n    flag_consecutive_charges\\nwhere\\n    activity = 'Charging Process' and (next_activity != 'Charging Process' or next_activity is null)\\nGROUP BY\\n    ROUND(end_battery_level / 5, 0) * 5\\nORDER BY\\n    SOC DESC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n  CASE WHEN lfp_battery THEN 100 ELSE 81 END as high,\\r\\n  CASE WHEN lfp_battery THEN 100 ELSE 91 END as highest\\r\\nfrom cars inner join car_settings on cars.settings_id = car_settings.id\\r\\nwhere cars.id = $car_id\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charge Stats\",\n      \"transformations\": [\n        {\n          \"id\": \"configFromData\",\n          \"options\": {\n            \"applyTo\": {\n              \"id\": \"byName\",\n              \"options\": \"soc\"\n            },\n            \"configRefId\": \"B\",\n            \"mappings\": [\n              {\n                \"fieldName\": \"high\",\n                \"handlerArguments\": {\n                  \"threshold\": {\n                    \"color\": \"yellow\"\n                  }\n                },\n                \"handlerKey\": \"threshold1\"\n              },\n              {\n                \"fieldName\": \"highest\",\n                \"handlerKey\": \"threshold1\"\n              }\n            ]\n          }\n        }\n      ],\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"Only Start Battery Level of first Charging Process considered for consecutive Charging Processes\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false,\n            \"minWidth\": 50\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"soc\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"SOC\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"red\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"#EAB839\",\n                      \"value\": 10\n                    },\n                    {\n                      \"color\": \"green\",\n                      \"value\": 20\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 50\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"n\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"# of Discharges\"\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"mode\": \"gradient\",\n                  \"type\": \"gauge\"\n                }\n              },\n              {\n                \"id\": \"min\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"left\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 18,\n        \"w\": 3,\n        \"x\": 3,\n        \"y\": 39\n      },\n      \"id\": 13,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": []\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"with data as (\\n\\n    select id, start_battery_level, end_date, 'Charging Process' as activity\\n    from charging_processes cp\\n    where car_id = $car_id and $__timeFilter(cp.end_date) and duration_min >= $min_duration\\n    \\n    union all\\n    \\n    select d.id, p.battery_level as start_battery_level, end_date, 'Drive' as activity\\n    from drives d\\n        inner join positions p on d.start_position_id = p.id\\n    where d.car_id = $car_id and $__timeFilter(d.end_date)\\n\\n),\\n\\nflag_consecutive_charges as (\\n\\n    select *, lag(activity) over (order by end_date) as previous_activity from data\\n\\n)\\n\\nSELECT\\n    ROUND(start_battery_level / 5, 0) * 5 AS SOC,\\n    count(*) AS n\\nFROM\\n    flag_consecutive_charges\\nwhere\\n    activity = 'Charging Process' and (previous_activity != 'Charging Process' or previous_activity is null)\\nGROUP BY\\n    ROUND(start_battery_level / 5, 0) * 5\\nORDER BY\\n    SOC DESC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Discharge Stats\",\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"location\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Location\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charge_energy_added\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Charged\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 120\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"left\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 18,\n        \"w\": 9,\n        \"x\": 6,\n        \"y\": 39\n      },\n      \"id\": 4,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tCOALESCE(geofence.name, CONCAT_WS(', ', COALESCE(address.name, nullif(CONCAT_WS(' ', address.road, address.house_number), '')), address.city)) AS location,\\n  sum(charge_energy_added) as charge_energy_added\\nFROM\\n\\tcharging_processes c\\nLEFT JOIN addresses address ON c.address_id = address.id\\nLEFT JOIN geofences geofence ON geofence_id = geofence.id\\nWHERE\\n\\t$__timeFilter(end_date)\\n\\tAND duration_min >= $min_duration\\n\\tAND car_id = $car_id\\nGROUP BY\\n\\t1\\nORDER BY\\n\\tSUM(charge_energy_added) DESC\\nLIMIT 17;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Top Charging Stations (Charged)\",\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"location\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Location\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"cost\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Cost\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 120\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"left\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 18,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 39\n      },\n      \"id\": 6,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tCOALESCE(geofence.name, CONCAT_WS(', ', COALESCE(address.name, CONCAT_WS(' ', address.road, address.house_number)), address.city)) AS location,\\n\\tsum(cost) as cost\\nFROM\\n\\tcharging_processes c\\n\\tLEFT JOIN addresses address ON c.address_id = address.id\\n\\tLEFT JOIN geofences geofence ON geofence_id = geofence.id\\nWHERE\\n  $__timeFilter(end_date) AND\\n\\tduration_min >= $min_duration AND\\n\\tcar_id = $car_id AND\\n\\tCOST IS NOT NULL\\nGROUP BY\\n\\t1\\nORDER BY\\n\\t2 DESC NULLS LAST\\nLIMIT 17;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Top Charging Stations (Cost)\",\n      \"type\": \"table\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"label\": \"Duration >=\",\n        \"name\": \"min_duration\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"0\",\n            \"value\": \"0\"\n          }\n        ],\n        \"query\": \"0\",\n        \"type\": \"textbox\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-10y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Charging Stats\",\n  \"uid\": \"-pkIkhmRz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/database-info.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 1,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 32,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  ROUND(convert_km(sum(distance)::numeric, '$length_unit'), 0) || ' $length_unit' as \\\"Logged\\\",\\n  ROUND(convert_km(max(end_km)::numeric, '$length_unit'), 0) || ' $length_unit' as \\\"Odometer\\\"\\nfrom drives where car_id = $car_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Mileage\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 4,\n        \"x\": 6,\n        \"y\": 0\n      },\n      \"id\": 36,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT COUNT(id) AS \\\"Charges\\\" FROM charging_processes WHERE car_id=$car_id \\n\",\n          \"refId\": \"Charges\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT COUNT(id) AS \\\"Drives\\\" FROM drives WHERE car_id=$car_id \",\n          \"refId\": \"Drives\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Stats\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 6,\n        \"x\": 10,\n        \"y\": 0\n      },\n      \"id\": 39,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT COUNT(id) as \\\"Nº Car Updates\\\"\\nFROM Updates \\nWHERE car_id = $car_id\\n\",\n          \"refId\": \"Car Updates\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select split_part(version, ' ', 1) as \\\"Current Car Firmware\\\" \\r\\nfrom updates \\r\\nwhere car_id = $car_id \\r\\norder by start_date desc \\r\\nlimit 1\",\n          \"refId\": \"Firmware\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Software\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"This means you have some **Drives** or **Charges** not closed.\\nIf so, you may follow the official guide: \\n<a href='https://docs.teslamate.org/docs/maintenance/manually_fixing_data' target='_blank'>Manually fixing data</a>\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 4,\n        \"x\": 16,\n        \"y\": 0\n      },\n      \"id\": 42,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT COUNT(id) as \\\"Charges not closed\\\"\\nFROM charging_processes \\nWHERE car_id = $car_id AND end_date is null\\n\",\n          \"refId\": \"Charges\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT COUNT(id) AS \\\"Drives not closed\\\"\\r\\nFROM drives \\r\\nWHERE car_id = $car_id AND end_date is null\",\n          \"refId\": \"Drives\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Incomplete Data\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 0\n      },\n      \"id\": 51,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [],\n          \"fields\": \"/^version$/\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT regexp_replace(version(), 'PostgreSQL ([^ ]+) .*', '\\\\1') AS version;\",\n          \"refId\": \"PostgreSQL Version\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"PostgreSQL Version\",\n      \"type\": \"stat\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"id\": 34,\n      \"panels\": [],\n      \"title\": \"Database Information\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"right\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false,\n            \"minWidth\": 80\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Table\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"auto\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 160\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 16,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 5\n      },\n      \"id\": 33,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT \\r\\n   relname AS \\\"Table\\\",\\r\\n   pg_relation_size(relid) as \\\"Data\\\",\\r\\n   pg_indexes_size(relid) as \\\"Indexes\\\",\\r\\n   pg_total_relation_size(relid) As \\\"Total\\\"\\r\\nFROM \\r\\n   pg_catalog.pg_statio_user_tables\\r\\nORDER BY \\r\\n   pg_total_relation_size(relid) DESC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false,\n            \"minWidth\": 160\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Row Count\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"right\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 100\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 16,\n        \"w\": 4,\n        \"x\": 6,\n        \"y\": 5\n      },\n      \"id\": 38,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT table_name AS \\\"Table Name\\\", \\r\\n       (xpath('/row/cnt/text()', xml_count))[1]::text::int AS \\\"Row Count\\\"\\r\\nFROM (\\r\\n    SELECT table_name, \\r\\n           query_to_xml(format('SELECT count(*) as cnt FROM %I.%I', table_schema, table_name), false, true, '') AS xml_count\\r\\n    FROM information_schema.tables\\r\\n    WHERE table_schema NOT IN ('pg_catalog', 'information_schema') and table_type = 'BASE TABLE'\\r\\n) AS t\\r\\nORDER BY 2 DESC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"These statistics can help you evaluate the efficiency of your indexes.\\n\\nIf your database experiences a lot of updates or deletions, like importing data from other sources or deleting a loaner car or some other similar situation, you might encounter index bloat, which can degrade performance. In such cases, reindexing could be beneficial.\\n\\nCheck <a href='https://docs.teslamate.org/docs/maintenance/manually_fixing_data#reindex-database' target='_blank'>Reindex Database</a>\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"right\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false,\n            \"minWidth\": 110\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Index Size\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"bytes\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 100\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Table\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"auto\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 160\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Index\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"auto\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 350\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Tuples Fetched\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 130\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 19,\n        \"w\": 14,\n        \"x\": 10,\n        \"y\": 5\n      },\n      \"id\": 41,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"enablePagination\": true,\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n    relname AS \\\"Table\\\",\\r\\n    indexrelname AS \\\"Index\\\",\\r\\n    idx_scan AS \\\"Index Scans\\\",\\r\\n    idx_tup_read AS \\\"Tuples Read\\\",\\r\\n    idx_tup_fetch AS \\\"Tuples Fetched\\\",\\r\\n    PG_RELATION_SIZE(indexrelid) as \\\"Index Size\\\"\\r\\nFROM\\r\\n    pg_stat_all_indexes\\r\\nWHERE\\r\\n    schemaname NOT LIKE 'pg_%' AND\\r\\n    indexrelname IS NOT NULL\\r\\nORDER BY 3 DESC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Indexes\",\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 35,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT \\n    SUM(pg_total_relation_size(relid)) As \\\"Size\\\"\\nFROM \\n    pg_catalog.pg_statio_user_tables;\",\n          \"refId\": \"Database Total Size\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Database Total Size\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"<b>Shared Buffers:</b> This metric shows the amount of memory PostgreSQL uses to store frequently accessed data, like tables and indexes, to make queries faster by avoiding slow disk reads.\\n\\n<b>Recommended value:</b> Use about 25% of your system's total RAM (e.g., 1GB for a system with 4GB RAM). Start with a modest value and adjust based on your app's needs. Setting it too high can waste memory.\\n\\n<b>To change in a Postgres Docker Compose file:</b> In your docker-compose.yml, add or update the command field under the Postgres service to include the shared_buffers setting. For example:\\n\\n<pre>\\nservices:\\n  database:\\n    image: postgres:18-trixie\\n    command: postgres -c shared_buffers=1GB\\n    ...\\n</pre>\\n\\nAfter updating the file, run <code>docker compose down</code> and <code>docker compose up -d</code> to restart the container and apply the change.\\n\\nFor more details: <a href='https://www.postgresql.org/docs/18/runtime-config-resource.html#GUC-SHARED-BUFFERS' target='_blank'>PostgreSQL: Documentation: 18: 19.4. Resource Consumption</a>\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 3,\n        \"y\": 21\n      },\n      \"id\": 52,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT cast(setting as numeric) * 8 * 1024 FROM pg_catalog.pg_settings WHERE name = 'shared_buffers';\",\n          \"refId\": \"Shared Buffers\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Shared Buffers\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 4,\n        \"x\": 6,\n        \"y\": 21\n      },\n      \"id\": 50,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"show timezone;\",\n          \"refId\": \"Timezone\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Timezone\",\n      \"type\": \"stat\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 24\n      },\n      \"id\": 44,\n      \"panels\": [],\n      \"title\": \"Statistics of SQL planning and execution\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"id\": 48,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"${pg_stat_statements_info_last_reset:raw}\",\n          \"refId\": \"Charges\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Time at which all statistics in the pg_stat_statements view were last reset\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 25\n      },\n      \"id\": 49,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"${pg_stat_statements_count:raw}\",\n          \"refId\": \"Charges\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Number of Statements tracked via pg_stat_statements\",\n      \"type\": \"stat\"\n    },\n    {\n      \"fieldConfig\": {\n        \"defaults\": {},\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 25\n      },\n      \"id\": 47,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"Check the [contribution docs](https://docs.teslamate.org/docs/development#enable-pg_stat_statements-to-collect-query-statistics) on how to enable tracking planning and execution statistics of all SQL statements executed by a server.\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"title\": \"About pg_stat_statements (track statistics of SQL planning and execution)\",\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\",\n              \"wrapText\": false\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"ms\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Calls\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"none\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 80\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Query\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.inspect\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Mean Exec Time\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 140\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Total Exec Time\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 140\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 14,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 28\n      },\n      \"id\": 45,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"enablePagination\": true,\n        \"showHeader\": true,\n        \"sortBy\": []\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"${pg_stat_statements_top_20_mean:raw}\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Top 20 Statements (by mean time spent executing the statement)\",\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\",\n              \"wrapText\": false\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"ms\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Calls\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"none\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 80\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Query\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.inspect\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Mean Exec Time\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 140\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Total Exec Time\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 140\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 14,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 28\n      },\n      \"id\": 46,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"enablePagination\": true,\n        \"showHeader\": true,\n        \"sortBy\": []\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"${pg_stat_statements_top_20_total:raw}\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Top 20 Statements (by total time spent executing the statement)\",\n      \"type\": \"table\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"includeAll\": false,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    CASE WHEN $pg_stat_statements_enabled = 1 THEN 'SELECT stats_reset FROM pg_stat_statements_info;' else 'SELECT NULL;' end\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"pg_stat_statements_info_last_reset\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    CASE WHEN $pg_stat_statements_enabled = 1 THEN 'SELECT stats_reset FROM pg_stat_statements_info;' else 'SELECT NULL;' end\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    CASE WHEN $pg_stat_statements_enabled = 1 THEN 'SELECT count(*) FROM pg_stat_statements;' else 'SELECT NULL;' end\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"pg_stat_statements_count\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    CASE WHEN $pg_stat_statements_enabled = 1 THEN 'SELECT count(*) FROM pg_stat_statements;' else 'SELECT NULL;' end\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    CASE WHEN $pg_stat_statements_enabled = 1 THEN 'select\\n  calls as \\\"Calls\\\",\\n  mean_exec_time as \\\"Mean Exec Time\\\",\\n  total_exec_time as \\\"Total Exec Time\\\",\\n  query as \\\"Query\\\"\\nfrom pg_stat_statements\\nORDER BY mean_exec_time desc\\nlimit 20;' else 'SELECT NULL;' end\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"pg_stat_statements_top_20_mean\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    CASE WHEN $pg_stat_statements_enabled = 1 THEN 'select\\n  calls as \\\"Calls\\\",\\n  mean_exec_time as \\\"Mean Exec Time\\\",\\n  total_exec_time as \\\"Total Exec Time\\\",\\n  query as \\\"Query\\\"\\nfrom pg_stat_statements\\nORDER BY mean_exec_time desc\\nlimit 20;' else 'SELECT NULL;' end\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    CASE WHEN $pg_stat_statements_enabled = 1 THEN 'select\\n  calls as \\\"Calls\\\",\\n  mean_exec_time as \\\"Mean Exec Time\\\",\\n  total_exec_time as \\\"Total Exec Time\\\",\\n  query as \\\"Query\\\"\\nfrom pg_stat_statements\\nORDER BY total_exec_time desc\\nlimit 20;' else 'SELECT NULL;' end\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"pg_stat_statements_top_20_total\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    CASE WHEN $pg_stat_statements_enabled = 1 THEN 'select\\n  calls as \\\"Calls\\\",\\n  mean_exec_time as \\\"Mean Exec Time\\\",\\n  total_exec_time as \\\"Total Exec Time\\\",\\n  query as \\\"Query\\\"\\nfrom pg_stat_statements\\nORDER BY total_exec_time desc\\nlimit 20;' else 'SELECT NULL;' end\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT EXISTS (\\nSELECT 1\\nFROM information_schema.tables\\nWHERE table_name = 'pg_stat_statements'\\n)::int AS table_existence\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"pg_stat_statements_enabled\",\n        \"options\": [],\n        \"query\": \"SELECT EXISTS (\\nSELECT 1\\nFROM information_schema.tables\\nWHERE table_name = 'pg_stat_statements'\\n)::int AS table_existence\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": true,\n    \"refresh_intervals\": []\n  },\n  \"timezone\": \"browser\",\n  \"title\": \"Database Information\",\n  \"uid\": \"jchmDbInfo\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/drive-stats.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-blue\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 20,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ]\n        },\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH since as (\\n\\tSELECT timezone('UTC', min(start_date)) as date FROM drives\\n\\tWHERE car_id = $car_id\\n\\tGROUP BY car_id\\n),\\n\\nactual AS (\\n\\tSELECT\\n\\t\\tdate_trunc('day', timezone('UTC', start_date), '$__timezone') AS date,\\n\\t\\tcount(*) AS number_of_drives\\n\\tFROM drives\\n\\tWHERE car_id = $car_id and $__timeFilter(start_date) and end_date is not null\\n\\tGROUP BY 1\\n),\\n\\nbase_line AS (\\n\\tSELECT date from generate_series(date_trunc('day', (select date from since), '$__timezone'), date_trunc('day', timestamp with time zone $__timeTo(), '$__timezone'), '1 day'::interval, '$__timezone') date\\n)\\n\\nSELECT\\n  base_line.date as time,\\n\\tCOALESCE(actual.number_of_drives, 0) as number_of_drives\\nFROM base_line\\nLEFT JOIN actual ON actual.date = base_line.date\\nWHERE date_trunc('day', timestamp with time zone $__timeFrom(), '$__timezone') <= base_line.date\\norder by base_line.date\\n\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"# of Drives\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 0\n      },\n      \"id\": 16,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ]\n        },\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH since as (\\n\\tSELECT timezone('UTC', min(start_date)) as date FROM drives\\n\\tWHERE car_id = $car_id\\n\\tGROUP BY car_id\\n),\\n\\nactual AS (\\n\\tSELECT\\n\\t\\tdate_trunc('day', timezone('UTC', start_date), '$__timezone') AS date,\\n\\t\\tsum(distance) AS distance\\n\\tFROM drives\\n\\tWHERE car_id = $car_id and $__timeFilter(start_date) and end_date is not null\\n\\tGROUP BY 1\\n),\\n\\nbase_line AS (\\n\\tSELECT date from generate_series(date_trunc('day', (select date from since), '$__timezone'), date_trunc('day', timestamp with time zone $__timeTo(), '$__timezone'), '1 day'::interval, '$__timezone') date)\\n\\nSELECT\\n  base_line.date as time,\\n\\tconvert_km(COALESCE(actual.distance, 0)::numeric, '$length_unit') as \\\"distance_$length_unit\\\"\\nFROM base_line\\nLEFT JOIN actual ON actual.date = base_line.date\\nWHERE date_trunc('day', timestamp with time zone $__timeFrom(), '$__timezone') <= base_line.date\\norder by base_line.date\\n\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Total Distance logged\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-yellow\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 0\n      },\n      \"id\": 22,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ]\n        },\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH since as (\\n\\tSELECT timezone('UTC', min(start_date)) as date FROM drives\\n\\tWHERE car_id = $car_id\\n\\tGROUP BY car_id\\n),\\n\\nactual AS (\\n\\tSELECT\\n\\t\\tdate_trunc('day', timezone('UTC', start_date), '$__timezone') AS date,\\n\\t\\tsum((start_${preferred_range}_range_km - end_${preferred_range}_range_km) * cars.efficiency) AS energy\\n\\tFROM drives\\n  INNER JOIN cars on drives.car_id = cars.id\\n\\tWHERE car_id = $car_id and $__timeFilter(start_date) and end_date is not null\\n\\tGROUP BY 1\\n),\\n\\nbase_line AS (\\n\\tSELECT date from generate_series(date_trunc('day', (select date from since), '$__timezone'), date_trunc('day', timestamp with time zone $__timeTo(), '$__timezone'), '1 day'::interval, '$__timezone') date)\\n\\nSELECT\\n  base_line.date as time,\\n\\tcoalesce(energy, 0) as energy\\nFROM base_line\\nLEFT JOIN actual ON actual.date = base_line.date\\nWHERE date_trunc('day', timestamp with time zone $__timeFrom(), '$__timezone') <= base_line.date\\norder by base_line.date\\n\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Total Energy consumed (net)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"id\": 26,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT convert_km((percentile_cont(0.5) WITHIN GROUP (ORDER BY distance))::numeric, '$length_unit') as \\\"distance_$length_unit\\\"\\nFROM drives\\nWHERE car_id = $car_id AND $__timeFilter(start_date) AND end_date IS NOT NULL;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Median distance of a drive\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"default\": false,\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 4\n      },\n      \"id\": 8,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 16,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Ø Distance driven per day\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"default\": false,\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 4\n      },\n      \"id\": 14,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 22,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Ø Energy consumed (net) per day\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_kmh\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitykmh\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_mih\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitymph\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 7\n      },\n      \"id\": 33,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT convert_km(max(speed_max), '$length_unit') AS speed_${length_unit}h\\nFROM drives\\nWHERE car_id = $car_id and $__timeFilter(start_date) and end_date is not null;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Max Speed\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_kmh\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitykmh\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_mih\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitymph\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 7\n      },\n      \"id\": 35,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT convert_km(max(speed_max), '$length_unit') AS speed_${length_unit}h\\nFROM drives\\nWHERE car_id = $car_id and $__timeFilter(start_date) and end_date is not null;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"timeFrom\": \"30d\",\n      \"title\": \"Max Speed\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_kmh\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitykmh\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_mih\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitymph\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 7\n      },\n      \"id\": 34,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT convert_km(max(speed_max), '$length_unit') AS speed_${length_unit}h\\nFROM drives\\nWHERE car_id = $car_id and $__timeFilter(start_date) and end_date is not null;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"timeFrom\": \"7d\",\n      \"title\": \"Max Speed\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-GrYlRd\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisGridShow\": false,\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"axisWidth\": -10,\n            \"fillOpacity\": 90,\n            \"gradientMode\": \"hue\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineWidth\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"fieldMinMax\": true,\n          \"mappings\": [],\n          \"noValue\": \"0\",\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Elapsed\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 10\n      },\n      \"id\": 36,\n      \"options\": {\n        \"barRadius\": 0.05,\n        \"barWidth\": 0.97,\n        \"colorByField\": \"Elapsed\",\n        \"fullHighlight\": false,\n        \"groupWidth\": 0.7,\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"orientation\": \"auto\",\n        \"showValue\": \"auto\",\n        \"stacking\": \"none\",\n        \"text\": {},\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        },\n        \"xField\": \"Speed\",\n        \"xTickLabelRotation\": 0,\n        \"xTickLabelSpacing\": 0\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH drivedata AS (\\r\\n    SELECT\\r\\n        ROUND(convert_km(p.speed::numeric, '$length_unit') / 10, 0) * 10 AS speed_section_${length_unit},\\r\\n        EXTRACT(EPOCH FROM (LEAD(p.\\\"date\\\") OVER (PARTITION BY p.drive_id ORDER BY p.\\\"date\\\") - p.\\\"date\\\")) AS seconds_elapsed\\r\\n    FROM positions p\\r\\n    WHERE p.car_id = $car_id AND $__timeFilter(p.date) AND p.ideal_battery_range_km IS NOT NULL\\r\\n)\\r\\n\\r\\nSELECT \\r\\n    speed_section_${length_unit} AS \\\"Speed\\\",\\r\\n    SUM(seconds_elapsed) * 100 / SUM(SUM(seconds_elapsed)) OVER () AS \\\"Elapsed\\\", \\r\\n    TO_CHAR((SUM(seconds_elapsed) || ' second')::interval, 'HH24:MI:SS') AS \\\"Time\\\"\\r\\nFROM drivedata\\r\\nWHERE speed_section_${length_unit} > 0\\r\\nGROUP BY speed_section_${length_unit}\\r\\nORDER BY speed_section_${length_unit};\\r\\n\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Speed Histogram ($speed_unit)\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"names\": [\n                \"Elapsed\",\n                \"Time\",\n                \"Speed\",\n                \"SpeedUnit\"\n              ]\n            }\n          }\n        }\n      ],\n      \"type\": \"barchart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"mileage_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"mileage_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 17\n      },\n      \"id\": 32,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH since as (\\r\\n\\tSELECT timezone('UTC', min(start_date)) as date FROM drives\\r\\n\\tWHERE car_id = $car_id\\r\\n\\tGROUP BY car_id\\r\\n)\\r\\n\\r\\nselect\\r\\n  convert_km(((max(end_km) - min(start_km)) / greatest(extract(days from (timestamp with time zone $__timeTo() - greatest(timestamp with time zone $__timeFrom(), (select date from since)))), 1) * (365/12))::numeric, '$length_unit') as \\\"mileage_$length_unit\\\"\\r\\nfrom drives\\r\\nwhere car_id = $car_id and $__timeFilter(start_date) and end_date is not null\\r\\ngroup by car_id\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Extrapolated monthly mileage\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"default\": false,\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"yearly_mileage_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"yearly_mileage_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 17\n      },\n      \"id\": 30,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 32,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Extrapolated annual mileage\",\n      \"transformations\": [\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"yearly_mileage_km\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"mileage_km\"\n                }\n              },\n              \"operator\": \"*\",\n              \"right\": {\n                \"fixed\": \"12\"\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            },\n            \"replaceFields\": false\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"yearly_mileage_mi\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"mileage_mi\"\n                }\n              },\n              \"operator\": \"*\",\n              \"right\": {\n                \"fixed\": \"12\"\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            },\n            \"replaceFields\": false\n          }\n        },\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"pattern\": \"yearly.*\"\n            }\n          }\n        }\n      ],\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"displayName\": \"$__cell_0\",\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-blue\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"light-red\",\n                \"value\": 50\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"id\": 24,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"maxVizHeight\": 300,\n        \"minVizHeight\": 16,\n        \"minVizWidth\": 8,\n        \"namePlacement\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showUnfilled\": true,\n        \"sizing\": \"auto\",\n        \"valueMode\": \"color\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT * FROM (\\nSELECT\\n\\tCOALESCE(g.name, COALESCE(a.name, nullif(CONCAT_WS(' ', a.road, a.house_number), ''))) as name,\\n\\tcount(*) AS visited\\nFROM drives t\\nINNER JOIN addresses a ON end_address_id = a.id\\nLEFT JOIN geofences g ON end_geofence_id = g.id\\nWHERE t.car_id = $car_id AND $__timeFilter(t.start_date) and $__timeFilter(t.end_date) \\nGROUP BY 1\\nORDER BY visited DESC) AS destinations\\nWHERE name NOT ILIKE ALL ${exclude_formatted_string:raw}\\nLIMIT 10;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Top 10 Destinations (in this period)\",\n      \"type\": \"bargauge\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": false,\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"includeAll\": false,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT CASE WHEN '$length_unit' = 'km' THEN 'km/h' WHEN '$length_unit' = 'mi' THEN 'mph' END\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"speed_unit\",\n        \"options\": [],\n        \"query\": \"SELECT CASE WHEN '$length_unit' = 'km' THEN 'km/h' WHEN '$length_unit' = 'mi' THEN 'mph' END\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"\",\n          \"value\": \"\"\n        },\n        \"description\": \"Comma separated list of locations to exclude. Ex: home, work\",\n        \"label\": \"Exclude locations\",\n        \"name\": \"exclude\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"\",\n            \"value\": \"\"\n          }\n        ],\n        \"query\": \"\",\n        \"type\": \"textbox\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"WITH splits AS (\\n    SELECT unnest(string_to_array('$exclude', ', ')) AS part\\n),\\nsplit_strings AS (\\n\\tSELECT part AS part\\n\\tFROM (VALUES (NULL)) AS v(dummy)\\n\\tLEFT JOIN splits ON TRUE\\n),\\nexclude_string AS (\\n\\tSELECT array_to_string(array_agg(case when part is null then '''''' else '''%' || part || '%''' end), ', ') AS formatted_string\\n\\tFROM split_strings\\n)\\nSELECT '(ARRAY[' || formatted_string || '])' FROM exclude_string\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"exclude_formatted_string\",\n        \"options\": [],\n        \"query\": \"WITH splits AS (\\n    SELECT unnest(string_to_array('$exclude', ', ')) AS part\\n),\\nsplit_strings AS (\\n\\tSELECT part AS part\\n\\tFROM (VALUES (NULL)) AS v(dummy)\\n\\tLEFT JOIN splits ON TRUE\\n),\\nexclude_string AS (\\n\\tSELECT array_to_string(array_agg(case when part is null then '''''' else '''%' || part || '%''' end), ', ') AS formatted_string\\n\\tFROM split_strings\\n)\\nSELECT '(ARRAY[' || formatted_string || '])' FROM exclude_string\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Drive Stats\",\n  \"uid\": \"_7WkNSyWk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/drives.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 3,\n      \"panels\": [],\n      \"title\": \"Summary of this period\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"text\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_kWh\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Total Energy consumed (net):\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 4,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 2,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"names\": [\n                \"consumption_kWh\"\n              ]\n            }\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"text\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"m\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"duration_min\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Total Duration:\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 1\n      },\n      \"id\": 5,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 2,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"names\": [\n                \"duration_min\"\n              ]\n            }\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"text\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Total Distance logged:\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Total Distance logged:\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 1\n      },\n      \"id\": 6,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 2,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"names\": [\n                \"distance_mi\",\n                \"distance_km\"\n              ]\n            }\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"default\": false,\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"text\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_kwh_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net):\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_kwh_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net):\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 1\n      },\n      \"id\": 7,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 2,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"pattern\": \"distance_km|distance_mi|consumption_kWh\"\n            }\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"distance_(mi|km)\",\n            \"renamePattern\": \"distance\"\n          }\n        },\n        {\n          \"id\": \"reduce\",\n          \"options\": {\n            \"includeTimeField\": false,\n            \"mode\": \"reduceFields\",\n            \"reducers\": [\n              \"sum\"\n            ]\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"binary\": {\n              \"left\": \"consumption_kWh\",\n              \"operator\": \"/\",\n              \"right\": \"distance\"\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            },\n            \"replaceFields\": true\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"consumption_kwh_$length_unit\",\n            \"binary\": {\n              \"left\": \"1000\",\n              \"operator\": \"*\",\n              \"right\": \"consumption_kWh / distance\"\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            },\n            \"replaceFields\": true\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"filterable\": false,\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false,\n            \"minWidth\": 150\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_date\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Date\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"dateTimeAsLocal\"\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": false,\n                    \"title\": \"View drive details\",\n                    \"url\": \"/d/zm7wN6Zgz/drive-details?from=${__data.fields.start_date_ts.numeric}&to=${__data.fields.end_date_ts.numeric}&var-car_id=${__data.fields.car_id.numeric}&var-drive_id=${__data.fields.drive_id.numeric}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 210\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_kwh_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 165\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_kwh_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 165\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Distance\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 90\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_kWh\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Energy consumed (net)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"super-light-green\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"green\",\n                      \"value\": 20\n                    },\n                    {\n                      \"color\": \"dark-green\",\n                      \"value\": 30\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 180\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_address\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Start\"\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Create or edit geo-fence\",\n                    \"url\": \"${base_url:raw}/geo-fences/${__data.fields.start_path}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"end_address\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Destination\"\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Create or edit geo-fence\",\n                    \"url\": \"${base_url:raw}/geo-fences/${__data.fields.end_path}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"outside_temp_c\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Temp\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"celsius\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 70\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"super-light-blue\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"super-light-green\",\n                      \"value\": 10\n                    },\n                    {\n                      \"color\": \"super-light-red\",\n                      \"value\": 20\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"duration_min\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Duration\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"m\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 90\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"efficiency\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Efficiency\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percentunit\"\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"mode\": \"lcd\",\n                  \"type\": \"gauge\"\n                }\n              },\n              {\n                \"id\": \"max\",\n                \"value\": 1.25\n              },\n              {\n                \"id\": \"min\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"mode\": \"thresholds\"\n                }\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 120\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"super-light-orange\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"light-orange\",\n                      \"value\": 0.65\n                    },\n                    {\n                      \"color\": \"green\",\n                      \"value\": 0.99\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"decimals\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_ts/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_avg_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Speed\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitykmh\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 90\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Distance\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 90\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"outside_temp_f\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Temp\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"fahrenheit\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 70\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"super-light-blue\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"super-light-green\",\n                      \"value\": 50\n                    },\n                    {\n                      \"color\": \"super-light-red\",\n                      \"value\": 68\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_avg_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Speed\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitymph\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 90\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_max_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"max Speed\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitymph\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 95\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_max_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"max Speed\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitykmh\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 95\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/(start|end)_path/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"duration_str\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"car_id\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"% Start\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 75\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"% End\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 65\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"has_reduced_range\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"❄\"\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"center\"\n              },\n              {\n                \"id\": \"mappings\",\n                \"value\": [\n                  {\n                    \"options\": {\n                      \"false\": {\n                        \"color\": \"transparent\",\n                        \"index\": 1,\n                        \"text\": \".\"\n                      },\n                      \"true\": {\n                        \"color\": \"dark-blue\",\n                        \"index\": 0,\n                        \"text\": \"❄\"\n                      }\n                    },\n                    \"type\": \"value\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 50\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"drive_id\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"power_max\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"max Power\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatt\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 90\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 19,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 3\n      },\n      \"id\": 2,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": []\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n  SELECT\\n    floor(extract(epoch FROM start_date)) * 1000 AS start_date_ts,\\n    ceil(extract(epoch FROM end_date)) * 1000 AS end_date_ts,\\n    car.id as car_id,\\n    CASE\\n      WHEN start_geofence.id IS NULL THEN CONCAT('new?lat=', start_position.latitude, '&lng=', start_position.longitude)\\n      WHEN start_geofence.id IS NOT NULL THEN CONCAT(start_geofence.id, '/edit')\\n    END as start_path,\\n    CASE\\n      WHEN end_geofence.id IS NULL THEN CONCAT('new?lat=', end_position.latitude, '&lng=', end_position.longitude)\\n      WHEN end_geofence.id IS NOT NULL THEN CONCAT(end_geofence.id, '/edit')\\n    END as end_path,\\n    TO_CHAR((duration_min * INTERVAL '1 minute'), 'HH24:MI') as duration_str,\\n    drives.id as drive_id,\\n    -- Columns\\n    start_date,\\n    COALESCE(start_geofence.name, CONCAT_WS(', ', COALESCE(start_address.name, nullif(CONCAT_WS(' ', start_address.road, start_address.house_number), '')), start_address.city)) AS start_address,\\n    COALESCE(end_geofence.name, CONCAT_WS(', ', COALESCE(end_address.name, nullif(CONCAT_WS(' ', end_address.road, end_address.house_number), '')), end_address.city)) AS end_address,\\n    duration_min,\\n    distance,\\n    start_position.battery_level as start_battery_level,\\n    end_position.battery_level as end_battery_level,\\n    start_${preferred_range}_range_km - end_${preferred_range}_range_km as range_diff,\\n    car.efficiency as car_efficiency,\\n    outside_temp_avg,\\n    distance / coalesce(NULLIF(duration_min, 0) * 60, extract(epoch from end_date - start_date)) * 3600 AS avg_speed,\\n    speed_max,\\n    power_max,\\n    ascent,\\n    descent\\n  FROM drives\\n  LEFT JOIN addresses start_address ON start_address_id = start_address.id\\n  LEFT JOIN addresses end_address ON end_address_id = end_address.id\\n  LEFT JOIN positions start_position ON start_position_id = start_position.id\\n  LEFT JOIN positions end_position ON end_position_id = end_position.id\\n  LEFT JOIN geofences start_geofence ON start_geofence_id = start_geofence.id\\n  LEFT JOIN geofences end_geofence ON end_geofence_id = end_geofence.id\\n  LEFT JOIN cars car ON car.id = drives.car_id\\n  WHERE $__timeFilter(start_date) AND drives.car_id = $car_id \\n    AND convert_km(distance::numeric, '$length_unit') >= $min_dist \\n    AND convert_km(distance::numeric, '$length_unit') / coalesce(NULLIF(duration_min, 0) * 60, extract(epoch from end_date - start_date)) * 3600 >= $min_speed \\n    AND ('${geofence:pipe}' = '-1' OR start_geofence.id in ($geofence) OR end_geofence.id in ($geofence)) \\n),\\n\\nreduced_range_info as (\\n\\n  select\\n    drive_id,\\n    case\\n        when sum(case when battery_level - usable_battery_level > 0 then 1 else 0 end)::numeric / count(*) > 0.25 then true\\n        else false\\n    end as reduced_range\\n  from positions p where $__timeFilter(date) AND car_id = $car_id and p.ideal_battery_range_km is not null group by p.drive_id  \\n\\n)\\n\\nSELECT\\n    start_date_ts,\\n    end_date_ts,\\n    car_id,\\n    start_path,\\n    end_path,\\n    duration_str,\\n    data.drive_id,\\n    -- Columns\\n    start_date,\\n    start_address,\\n    end_address,\\n    duration_min,\\n    convert_km(distance::numeric, '$length_unit') AS distance_$length_unit,\\n    start_battery_level as \\\"% Start\\\",\\n    end_battery_level as \\\"% End\\\",\\n    convert_celsius(outside_temp_avg, '$temp_unit') AS outside_temp_$temp_unit,\\n    convert_km(avg_speed::numeric, '$length_unit') AS speed_avg_$length_unit,\\n    convert_km(speed_max::numeric, '$length_unit') AS speed_max_$length_unit,\\n    power_max,\\n    reduced_range as has_reduced_range,\\n    CASE\\n      WHEN range_diff > 0 and 'by distance' = '$efficiency' THEN distance / range_diff\\n      WHEN 'slope-adjusted' = '$efficiency' THEN\\n        distance * car_efficiency -- Energy at 100% efficiency\\n        / nullif((\\n             (range_diff) * car_efficiency -- Actual Energy\\n             + 2100 * 0.85 * 9.81 * descent / 3600 / 1000 -- Potential energy recovered from descent\\n             - 2100 * 9.81 * ascent / 3600 / 1000 -- Potential energy for ascent\\n        ), 0)\\n      ELSE NULL\\n    END as efficiency,\\n    range_diff * car_efficiency as \\\"consumption_kWh\\\",\\n    range_diff * car_efficiency / convert_km(distance::numeric, '$length_unit') * 1000 as consumption_kWh_$length_unit\\nFROM data\\n  left join reduced_range_info on data.drive_id = reduced_range_info.drive_id\\nWHERE\\n    start_address ILIKE '%$location%' OR end_address ILIKE '%$location%'\\nORDER BY data.drive_id DESC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Drive\",\n      \"type\": \"table\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 10,\n      \"panels\": [],\n      \"title\": \"General information (All drives)\",\n      \"type\": \"row\"\n    },\n    {\n      \"fieldConfig\": {\n        \"defaults\": {},\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 23\n      },\n      \"id\": 8,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"From here you can check if you have \\nincomplete data of **Drives** (drives without ending date)\\nIf so, you may follow the official \\nguide by <a href='https://docs.teslamate.org/docs/maintenance/manually_fixing_data' target='_blank'>Manually fixing data</a>\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"title\": \"\",\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"fixed\"\n          },\n          \"custom\": {\n            \"align\": \"center\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"id\": 9,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"enablePagination\": true,\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT id AS \\\"Drive ID\\\", start_date, end_date, distance, duration_min \\nFROM drives \\nWHERE car_id = $car_id AND end_date is null\\nORDER BY start_date DESC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Incomplete Drives 🛣️\",\n      \"type\": \"table\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"includeAll\": false,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"allValue\": \"-1\",\n        \"allowCustomValue\": false,\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"-- The \\\"Include All option\\\" built into Grafana is not initializing correctly if no value is returned by the SQL query anymore\\r\\n-- Create the option via SQL as a temporary workaround until fixed (https://github.com/grafana/grafana/issues/119793)\\r\\n\\r\\nwith geofences_incl_all_option as (\\r\\n\\r\\n  select 'All' as __text, -1 as __value, '_all' as name\\r\\n\\r\\n  union all\\r\\n\\r\\n  SELECT name AS __text, id AS __value, name from geofences\\r\\n\\r\\n)\\r\\n\\r\\nSELECT __text, __value from geofences_incl_all_option order by name asc\",\n        \"description\": \"Start or Destination Geofence\",\n        \"includeAll\": false,\n        \"label\": \"Geofence\",\n        \"multi\": true,\n        \"name\": \"geofence\",\n        \"options\": [],\n        \"query\": \"-- The \\\"Include All option\\\" built into Grafana is not initializing correctly if no value is returned by the SQL query anymore\\r\\n-- Create the option via SQL as a temporary workaround until fixed (https://github.com/grafana/grafana/issues/119793)\\r\\n\\r\\nwith geofences_incl_all_option as (\\r\\n\\r\\n  select 'All' as __text, -1 as __value, '_all' as name\\r\\n\\r\\n  union all\\r\\n\\r\\n  SELECT name AS __text, id AS __value, name from geofences\\r\\n\\r\\n)\\r\\n\\r\\nSELECT __text, __value from geofences_incl_all_option order by name asc\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"\",\n          \"value\": \"\"\n        },\n        \"description\": \"Type a text contained in Start or Destination Location\",\n        \"label\": \"Location\",\n        \"name\": \"location\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"\",\n            \"value\": \"\"\n          }\n        ],\n        \"query\": \"\",\n        \"type\": \"textbox\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_temperature from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"temperature unit\",\n        \"name\": \"temp_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_temperature from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"length unit\",\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"0\",\n          \"value\": \"0\"\n        },\n        \"label\": \"Distance >=\",\n        \"name\": \"min_dist\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"0\",\n            \"value\": \"0\"\n          }\n        ],\n        \"query\": \"0\",\n        \"type\": \"textbox\"\n      },\n      {\n        \"current\": {\n          \"text\": \"0\",\n          \"value\": \"0\"\n        },\n        \"label\": \"Speed >=\",\n        \"name\": \"min_speed\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"0\",\n            \"value\": \"0\"\n          }\n        ],\n        \"query\": \"0\",\n        \"type\": \"textbox\"\n      },\n      {\n        \"allowCustomValue\": false,\n        \"current\": {\n          \"text\": \"slope-adjusted\",\n          \"value\": \"slope-adjusted\"\n        },\n        \"description\": \"Select how Efficiency ratings should be calculated.\\n\\n\\\"by distance\\\" is doing a simple comparison based on distance driven and range lost while driving.\\n\\n\\\"slope-adjusted\\\" takes ascent / descent of the drive into account and adjusts the energy consumed accordingly. regen breaking efficiency is set to 85% and the vehicle is assumed to have a weight of 2100 kg.\",\n        \"label\": \"Efficiency\",\n        \"name\": \"efficiency\",\n        \"options\": [],\n        \"query\": \"slope-adjusted,by distance\",\n        \"type\": \"custom\",\n        \"valuesFormat\": \"csv\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-3M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Drives\",\n  \"uid\": \"Y8upc6ZRk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/efficiency.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 10,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"(Range lost while driving * Efficiency) / Distance driven\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 4,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select \\n  sum((start_${preferred_range}_range_km - end_${preferred_range}_range_km) * cars.efficiency) / convert_km(sum(distance)::numeric, '$length_unit') * 1000 AS \\\"consumption_$length_unit\\\"\\nfrom drives \\ninner join cars on cars.id = car_id\\nwhere \\n  distance is not null and\\n  start_${preferred_range}_range_km - end_${preferred_range}_range_km >= 0.1 and\\n  car_id = $car_id\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ø Consumption (net)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"(Range lost between charges * Efficiency) / Distance driven between charges\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 1\n      },\n      \"id\": 8,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH d1 AS (\\n\\tSELECT\\n\\t\\tc.car_id,\\n\\t\\tlag(end_${preferred_range}_range_km) OVER (ORDER BY start_date) - start_${preferred_range}_range_km AS range_loss,\\n\\t\\tp.odometer - lag(p.odometer) OVER (ORDER BY start_date) AS distance\\n\\tFROM\\n\\t\\tcharging_processes c\\n\\tLEFT JOIN positions p ON p.id = c.position_id \\n\\tWHERE\\n\\t  end_date IS NOT NULL AND\\n\\t  c.car_id = $car_id\\n\\tORDER BY\\n\\t\\tstart_date\\n),\\nd2 AS (\\nSELECT\\n\\tcar_id,\\n\\tsum(range_loss) AS range_loss,\\n\\tsum(distance) AS distance\\nFROM\\n\\td1\\nWHERE\\n\\tdistance >= 0 AND range_loss >= 0\\nGROUP BY\\n\\tcar_id\\n)\\nSELECT\\nrange_loss * c.efficiency / convert_km(distance::numeric, '$length_unit') * 1000 AS \\\"consumption_$length_unit\\\"\\nFROM\\n\\td2\\n\\tLEFT JOIN cars c ON c.id = car_id\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ø Consumption (gross)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"Distance of all logged drives\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 1\n      },\n      \"id\": 6,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select convert_km(sum(distance)::numeric, '$length_unit') as \\\"distance_$length_unit\\\" \\nfrom drives \\nwhere car_id = $car_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Logged Distance\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"filterable\": false,\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"outside_temp_c\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Temperature\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"celsius\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 125\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"outside_temp_f\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Temperature\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"fahrenheit\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 125\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"efficiency\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Driving Efficiency\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percentunit\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"mode\": \"lcd\",\n                  \"type\": \"gauge\"\n                }\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"super-light-orange\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"light-orange\",\n                      \"value\": 0.65\n                    },\n                    {\n                      \"color\": \"light-green\",\n                      \"value\": 0.99\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"max\",\n                \"value\": 1.15\n              },\n              {\n                \"id\": \"min\",\n                \"value\": 0\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"total_distance_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Distance\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"total_distance_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Distance\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"avg_speed_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Speed\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitykmh\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"avg_speed_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Speed\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitymph\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 200\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 12,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"id\": 2,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": [\n          {\n            \"desc\": true,\n            \"displayName\": \"Temperature\"\n          }\n        ]\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH t AS (\\n\\tSELECT\\n\\t  CASE WHEN '$temp_unit' = 'C' THEN ROUND(cast(outside_temp_avg AS numeric) / 5, 0) * 5 \\n\\t\\t\\t   WHEN '$temp_unit' = 'F' THEN ROUND(cast(convert_celsius(outside_temp_avg, '$temp_unit') AS numeric) / 10, 0) * 10\\n\\t\\tEND AS outside_temp,\\n\\t\\tsum(start_ideal_range_km - end_ideal_range_km) AS total_ideal_range,\\n\\t\\tsum(start_rated_range_km - end_rated_range_km) AS total_rated_range,\\n\\t\\tsum(distance) AS total_distance,\\n\\t\\tsum(duration_min) as duration,\\n\\t\\tcar_id\\n\\tFROM\\n\\t\\tdrives\\n\\tWHERE\\n\\t\\tdistance IS NOT NULL\\n\\t\\tAND car_id = $car_id\\n\\t\\tAND convert_km(distance::numeric, '$length_unit') >= $min_distance \\n\\t\\tAND start_${preferred_range}_range_km - end_${preferred_range}_range_km > 0.1\\n\\tGROUP BY\\n\\t\\t1,\\n\\t\\tcar_id\\n)\\n\\nSELECT\\n\\toutside_temp as outside_temp_$temp_unit,\\n  total_distance / total_${preferred_range}_range AS efficiency,\\n\\ttotal_${preferred_range}_range / convert_km(total_distance::numeric, '$length_unit') * c.efficiency * 1000 AS consumption_$length_unit,\\n  convert_km(total_distance::numeric, '$length_unit') as total_distance_$length_unit,\\n\\t(convert_km(total_distance::numeric, '$length_unit') / duration) * 60 as avg_speed_$length_unit\\nFROM\\n\\tt\\nJOIN cars c ON t.car_id = c.id\\nWHERE outside_temp IS NOT NULL\\norder by 1 desc\\n\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Temperature – Driving Efficiency\",\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"efficiency_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"efficiency_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 4,\n        \"x\": 0,\n        \"y\": 16\n      },\n      \"id\": 14,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tefficiency / convert_km(1, '$length_unit') * 1000 as \\\"efficiency_$length_unit\\\"\\nFROM\\n\\tcars\\nWHERE\\n\\tid = $car_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Current $preferred_range efficiency\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"filterable\": false,\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"efficiency_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Efficiency\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"efficiency_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Efficiency\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 10,\n        \"x\": 4,\n        \"y\": 16\n      },\n      \"id\": 12,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  round((charge_energy_added / NULLIF(end_ideal_range_km - start_ideal_range_km, 0))::numeric / convert_km(1, '$length_unit'), 3) * 1000 as \\\"efficiency_$length_unit\\\",\\n  count(*) as count\\nFROM\\n  charging_processes\\nWHERE \\n  car_id = $car_id\\n  AND duration_min > 10\\n  AND end_battery_level <= 95\\n  AND start_ideal_range_km IS NOT NULL\\n  AND end_ideal_range_km IS NOT NULL\\n  AND charge_energy_added > 0\\nGROUP BY\\n  1\\nORDER BY\\n  2 DESC\\nLIMIT 3\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Derived ideal efficiencies\",\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"filterable\": false,\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"efficiency_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Efficiency\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"efficiency_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Efficiency\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 10,\n        \"x\": 14,\n        \"y\": 16\n      },\n      \"id\": 15,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  round((charge_energy_added / NULLIF(end_rated_range_km - start_rated_range_km, 0))::numeric / convert_km(1, '$length_unit'), 3) * 1000 as \\\"efficiency_$length_unit\\\",\\n\\tcount(*) as count\\nFROM\\n  charging_processes\\nWHERE \\n  car_id = $car_id\\n  AND duration_min > 10\\n  AND end_battery_level <= 95\\n  AND start_rated_range_km IS NOT NULL\\n  AND end_rated_range_km IS NOT NULL\\n  AND charge_energy_added > 0\\nGROUP BY\\n  1\\nORDER BY\\n  2 DESC\\nLIMIT 3\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Derived rated efficiencies\",\n      \"type\": \"table\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_temperature from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"temp_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_temperature from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"1\",\n          \"value\": \"1\"\n        },\n        \"includeAll\": false,\n        \"label\": \"min. distance per drive\",\n        \"name\": \"min_distance\",\n        \"options\": [],\n        \"query\": \"1, 5, 10, 25, 50\",\n        \"type\": \"custom\",\n        \"valuesFormat\": \"csv\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": true\n  },\n  \"timezone\": \"browser\",\n  \"title\": \"Efficiency\",\n  \"uid\": \"fu4SiQgWz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/internal/charge-details.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"axisSoftMax\": 100,\n            \"axisSoftMin\": 0,\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charger_voltage\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.fillOpacity\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Charging Voltage\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"volt\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"battery_level\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"SOC\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charger_power\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Power\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatt\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"battery_heater\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Battery heater\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"bool_on_off\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_km$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_mi$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"^range_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charger_actual_current\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Current\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"amp\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charger_pilot_current\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Current (pilot)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"amp\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_c$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"celsius\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_f$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"fahrenheit\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"^outside_temp_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Outdoor Temperature\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charger_phases\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Phases\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 20,\n        \"w\": 13,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"min\",\n            \"max\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  $__time(date),\\n  battery_level,\\n  charger_power,\\n  (case when battery_heater_on then 10 when battery_heater then 10 else 0 end) as battery_heater,\\n  convert_km(${preferred_range}_battery_range_km, '$length_unit') as range_$length_unit,\\n  charger_voltage,\\n  cast(nullif(${determine_phases:sqlstring}, '') as numeric) as charger_phases,\\n  charger_actual_current,\\n  charger_pilot_current,\\n  convert_celsius(outside_temp, '$temp_unit') outside_temp_$temp_unit\\nFROM\\n  charges c\\njoin\\n  charging_processes p ON p.id = c.charging_process_id \\nWHERE\\n  $__timeFilter(date)\\n AND p.car_id = $car_id\\nORDER BY\\n  date ASC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charge Details\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"green\",\n            \"mode\": \"fixed\"\n          },\n          \"decimals\": 2,\n          \"displayName\": \"Cost\",\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 2,\n        \"x\": 13,\n        \"y\": 0\n      },\n      \"id\": 6,\n      \"links\": [\n        {\n          \"title\": \"Set cost\",\n          \"url\": \"${base_url:raw}/charge-cost/${charging_process_id}\"\n        }\n      ],\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT cost from charging_processes where id = $charging_process_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Cost\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"clocks\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 15,\n        \"y\": 0\n      },\n      \"id\": 16,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"alias\": \"Elapsed Time\",\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"group\": [],\n          \"groupBy\": [\n            {\n              \"params\": [\n                \"$__interval\"\n              ],\n              \"type\": \"time\"\n            },\n            {\n              \"params\": [\n                \"null\"\n              ],\n              \"type\": \"fill\"\n            }\n          ],\n          \"metricColumn\": \"none\",\n          \"orderByTime\": \"ASC\",\n          \"policy\": \"default\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT EXTRACT(EPOCH FROM (end_date - start_date)) AS \\\"Duration\\\" FROM \\r\\n  (SELECT min(date) as start_date FROM charges where charging_process_id=$charging_process_id) s\\r\\n  CROSS JOIN \\r\\n  (SELECT max(date) as end_date FROM charges where charging_process_id=$charging_process_id) e\",\n          \"refId\": \"A\",\n          \"resultFormat\": \"time_series\",\n          \"select\": [\n            [\n              {\n                \"params\": [\n                  \"utc\"\n                ],\n                \"type\": \"field\"\n              },\n              {\n                \"params\": [],\n                \"type\": \"mean\"\n              }\n            ]\n          ],\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          },\n          \"tags\": [],\n          \"timeColumn\": \"time\",\n          \"where\": [\n            {\n              \"name\": \"$__timeFilter\",\n              \"params\": [],\n              \"type\": \"macro\"\n            }\n          ]\n        }\n      ],\n      \"title\": \"Duration\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 0\n      },\n      \"id\": 10,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  COALESCE(g.name, CONCAT_WS(', ', COALESCE(addresses.name, CONCAT_WS(' ', addresses.road, addresses.house_number)), addresses.city))\\nFROM\\n\\tcharging_processes c\\n\\tLEFT JOIN addresses ON addresses.id = c.address_id\\n\\tLEFT JOIN geofences g ON g.id = geofence_id\\nWHERE\\n\\tc.id = $charging_process_id\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"super-light-blue\",\n            \"mode\": \"palette-classic\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-yellow\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Efficiency\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"%\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 13,\n        \"y\": 4\n      },\n      \"id\": 8,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT  coalesce(cp_added, c_added) AS \\\"Added\\\"\\r\\nFROM (SELECT cp.charge_energy_added AS cp_added from charging_processes cp where id = $charging_process_id) cp\\r\\nCROSS JOIN (SELECT max(charge_energy_added) AS c_added FROM charges WHERE charging_process_id=$charging_process_id) c\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT  charge_energy_used AS \\\"Used\\\"\\r\\nFROM  charging_processes where id = $charging_process_id\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT  CASE WHEN charge_energy_used IS NULL THEN NULL ELSE LEAST(charge_energy_added / NULLIF(charge_energy_used, 0), 1.0) * 100 END AS \\\"Efficiency\\\"\\r\\nFROM  charging_processes where id = $charging_process_id\",\n          \"refId\": \"C\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charge Energy\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 12,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 4\n      },\n      \"id\": 4,\n      \"maxDataPoints\": 500,\n      \"options\": {\n        \"basemap\": {\n          \"config\": {},\n          \"name\": \"Layer 0\",\n          \"type\": \"osm-standard\"\n        },\n        \"controls\": {\n          \"mouseWheelZoom\": true,\n          \"showAttribution\": true,\n          \"showDebug\": false,\n          \"showMeasure\": false,\n          \"showScale\": false,\n          \"showZoom\": true\n        },\n        \"layers\": [\n          {\n            \"config\": {\n              \"showLegend\": false,\n              \"style\": {\n                \"color\": {\n                  \"fixed\": \"dark-blue\"\n                },\n                \"opacity\": 1,\n                \"rotation\": {\n                  \"fixed\": 0,\n                  \"max\": 360,\n                  \"min\": -360,\n                  \"mode\": \"mod\"\n                },\n                \"size\": {\n                  \"fixed\": 7,\n                  \"max\": 15,\n                  \"min\": 2\n                },\n                \"symbol\": {\n                  \"fixed\": \"img/icons/marker/circle.svg\",\n                  \"mode\": \"fixed\"\n                },\n                \"symbolAlign\": {\n                  \"horizontal\": \"center\",\n                  \"vertical\": \"center\"\n                },\n                \"textConfig\": {\n                  \"fontSize\": 12,\n                  \"offsetX\": 0,\n                  \"offsetY\": 0,\n                  \"textAlign\": \"center\",\n                  \"textBaseline\": \"middle\"\n                }\n              }\n            },\n            \"filterData\": {\n              \"id\": \"byRefId\",\n              \"options\": \"A\"\n            },\n            \"location\": {\n              \"latitude\": \"latitude\",\n              \"longitude\": \"longitude\",\n              \"mode\": \"auto\"\n            },\n            \"name\": \"Layer 1\",\n            \"tooltip\": true,\n            \"type\": \"markers\"\n          }\n        ],\n        \"tooltip\": {\n          \"mode\": \"details\"\n        },\n        \"view\": {\n          \"allLayers\": true,\n          \"id\": \"fit\",\n          \"lat\": 0,\n          \"lon\": 0,\n          \"noRepeat\": false,\n          \"zoom\": 15\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\t$__time(date),\\n\\tunnest(ARRAY[latitude, latitude]) AS latitude,\\n\\tunnest(ARRAY[longitude, longitude]) AS longitude\\nFROM\\n\\tcharging_processes c\\n\\tJOIN positions p ON c.position_id = p.id\\nWHERE\\n\\t$__timeFilter(date)\\n\\tAND c.car_id = $car_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"geomap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"super-light-blue\",\n            \"mode\": \"palette-classic\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-yellow\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"%\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 13,\n        \"y\": 8\n      },\n      \"id\": 12,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT start_battery_level AS \\\"Start\\\" FROM  charging_processes WHERE id=$charging_process_id\",\n          \"refId\": \"Start\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT end_battery_level - start_battery_level AS \\\"Added\\\" FROM  charging_processes WHERE id=$charging_process_id\",\n          \"refId\": \"Added\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT end_battery_level AS \\\"End\\\" FROM  charging_processes WHERE id=$charging_process_id\\r\\n\",\n          \"refId\": \"End\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Battery Level\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"orange\",\n            \"mode\": \"fixed\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"kwatt\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 13,\n        \"y\": 12\n      },\n      \"id\": 13,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT $__timeGroupAlias(date,$__interval),\\r\\navg(\\r\\n    case when charger_phases >= 1 then\\r\\n    cast(nullif(${determine_phases:sqlstring}, '') as numeric) * charger_actual_current * charger_voltage / 1000.0 else charger_power end) as \\\"Power\\\" \\r\\nFROM charges WHERE charging_process_id = $charging_process_id\\r\\nGROUP BY 1 ORDER BY 1\",\n          \"refId\": \"Current\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ø Power\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"orange\",\n            \"mode\": \"palette-classic-by-name\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_c/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"celsius\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_f/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"fahrenheit\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 13,\n        \"y\": 16\n      },\n      \"id\": 15,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT $__timeGroupAlias(date,$__interval),\\r\\nconvert_celsius(avg(outside_temp), '$temp_unit') as outside_temp_$temp_unit \\r\\nFROM charges WHERE charging_process_id = $charging_process_id\\r\\nGROUP BY 1 ORDER BY 1 \",\n          \"refId\": \"Current\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ø Outdoor Temperature\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"blue\",\n            \"mode\": \"palette-classic\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"orange\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_km/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_mi/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/start*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Start\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/added*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Added\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/end*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"End\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 16\n      },\n      \"id\": 14,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"vertical\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT convert_km(start_${preferred_range}_range_km, '$length_unit') AS start_$length_unit FROM charging_processes WHERE id=$charging_process_id \",\n          \"refId\": \"Initial Range\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT convert_km(end_${preferred_range}_range_km - start_${preferred_range}_range_km, '$length_unit') AS added_$length_unit FROM charging_processes WHERE id=$charging_process_id \",\n          \"refId\": \"Range Added\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT convert_km(end_${preferred_range}_range_km, '$length_unit') AS end_$length_unit FROM charging_processes WHERE id=$charging_process_id\",\n          \"refId\": \"End Range\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ranges ($preferred_range)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"fillOpacity\": 50,\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"pointShape\": \"circle\",\n            \"pointSize\": {\n              \"fixed\": 5\n            },\n            \"pointStrokeWidth\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"show\": \"points\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byFrameRefID\",\n              \"options\": \"B\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.show\",\n                \"value\": \"lines\"\n              },\n              {\n                \"id\": \"custom.lineStyle\",\n                \"value\": {\n                  \"fill\": \"solid\"\n                }\n              },\n              {\n                \"id\": \"custom.lineWidth\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"blue\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 19,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"id\": 11,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"mapping\": \"manual\",\n        \"series\": [\n          {\n            \"frame\": {\n              \"matcher\": {\n                \"id\": \"byIndex\",\n                \"options\": 0\n              }\n            },\n            \"x\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"SOC [%]\"\n              }\n            },\n            \"y\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Power [kW]\"\n              }\n            }\n          },\n          {\n            \"frame\": {\n              \"matcher\": {\n                \"id\": \"byIndex\",\n                \"options\": 1\n              }\n            },\n            \"x\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"SOC [%]\"\n              }\n            },\n            \"y\": {\n              \"matcher\": {\n                \"id\": \"byName\",\n                \"options\": \"Power [kW]\"\n              }\n            }\n          }\n        ],\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  battery_level as \\\"SOC [%]\\\",\\n  charger_power as \\\"Power [kW]\\\"\\nFROM\\n  charges c\\njoin\\n  charging_processes p ON p.id = c.charging_process_id \\nWHERE\\n  $__timeFilter(date)\\n AND p.car_id = $car_id\\n AND charger_power > 0\\nORDER BY\\n  date ASC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  battery_level as \\\"SOC [%]\\\",\\n  avg(charger_power) as \\\"Power [kW]\\\"\\nFROM\\n  charges c\\njoin\\n  charging_processes p ON p.id = c.charging_process_id \\nWHERE\\n  $__timeFilter(date)\\n AND p.car_id = $car_id\\n AND charger_power > 0\\nGROUP BY\\n  battery_level, fast_charger_present\\nORDER BY\\n  battery_level ASC  \",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charging curve\",\n      \"type\": \"xychart\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"text\": \"NULL\",\n          \"value\": \"NULL\"\n        },\n        \"hide\": 2,\n        \"name\": \"charging_process_id\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"NULL\",\n            \"value\": \"NULL\"\n          }\n        ],\n        \"query\": \"NULL\",\n        \"type\": \"textbox\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_temperature from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"temp_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_temperature from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"includeAll\": false,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"allowCustomValue\": false,\n        \"current\": {\n          \"text\": \"2\",\n          \"value\": \"2\"\n        },\n        \"definition\": \"with data as (\\n\\n    select\\n        avg(c.charger_power * 1000.0 / nullif(c.charger_actual_current * c.charger_voltage, 0)) p,\\n        avg(c.charger_phases) r,\\n        avg(c.charger_voltage) v,\\n        count(*) as n\\n    from charges c\\n    where c.charging_process_id = ${charging_process_id}\\n\\n)\\n\\nselect\\n    case\\n        when p is not null and p > 0 and n > 15 then case\\n            when r = round(p) then r\\n            when r = 3 and abs(p / sqrt(r) - 1) <= 0.1 then sqrt(r)\\n            when abs(round(p) - p) <= 0.3 then round(p)\\n            else null\\n        end\\n        else null\\n    end as phases\\nfrom data\",\n        \"description\": \"\",\n        \"hide\": 2,\n        \"name\": \"determine_phases\",\n        \"options\": [],\n        \"query\": \"with data as (\\n\\n    select\\n        avg(c.charger_power * 1000.0 / nullif(c.charger_actual_current * c.charger_voltage, 0)) p,\\n        avg(c.charger_phases) r,\\n        avg(c.charger_voltage) v,\\n        count(*) as n\\n    from charges c\\n    where c.charging_process_id = ${charging_process_id}\\n\\n)\\n\\nselect\\n    case\\n        when p is not null and p > 0 and n > 15 then case\\n            when r = round(p) then r\\n            when r = 3 and abs(p / sqrt(r) - 1) <= 0.1 then sqrt(r)\\n            when abs(round(p) - p) <= 0.3 then round(p)\\n            else null\\n        end\\n        else null\\n    end as phases\\nfrom data\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-12h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Charge Details\",\n  \"uid\": \"BHhxFeZRz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/internal/drive-details.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 1,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"icon\": \"\",\n      \"tags\": [],\n      \"title\": \"GpxExport\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}/drive/$drive_id/gpx\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": true,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 5,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_kmh$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitykmh\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_mih$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitymph\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_km$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_mi$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"speed_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Speed\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"power\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatt\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Power\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"battery_heater\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Battery Heater\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"bool_on_off\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"range_ideal_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range (ideal)\"\n              },\n              {\n                \"id\": \"min\",\n                \"value\": 0\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"range_rated_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range (rated)\"\n              },\n              {\n                \"id\": \"min\",\n                \"value\": 0\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"battery_level\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"SOC\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"usable_battery_level\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Usable SOC\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"range_estimated_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range (est.)\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              },\n              {\n                \"id\": \"min\",\n                \"value\": 0\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Power\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"semi-dark-orange\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Usable SOC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"semi-dark-green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"SOC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"light-green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Range (est.)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"light-purple\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Range (ideal)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"semi-dark-purple\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Battery Heater\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Speed\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"light-blue\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Range (rated)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"semi-dark-purple\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 12,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 39,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\t$__time(date),\\n\\tconvert_km(speed::numeric, '$length_unit') AS speed_${length_unit}h,\\n\\tpower,\\n\\tconvert_km(${preferred_range}_battery_range_km, '$length_unit') AS range_${preferred_range}_${length_unit},\\n\\tconvert_km(est_battery_range_km, '$length_unit') AS range_estimated_${length_unit},\\n\\tbattery_level,\\n\\tusable_battery_level,\\n\\tbattery_heater::integer\\nFROM\\n\\tpositions\\nWHERE\\n car_id = $car_id AND\\n $__timeFilter(date)\\nORDER BY\\n\\tdate ASC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Drive\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"red\",\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 12,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"maxDataPoints\": 50000,\n      \"options\": {\n        \"basemap\": {\n          \"config\": {},\n          \"name\": \"Layer 0\",\n          \"type\": \"osm-standard\"\n        },\n        \"controls\": {\n          \"mouseWheelZoom\": true,\n          \"showAttribution\": true,\n          \"showDebug\": false,\n          \"showMeasure\": false,\n          \"showScale\": false,\n          \"showZoom\": true\n        },\n        \"layers\": [\n          {\n            \"config\": {\n              \"arrow\": 0,\n              \"style\": {\n                \"color\": {\n                  \"fixed\": \"dark-blue\"\n                },\n                \"lineWidth\": 2,\n                \"opacity\": 1,\n                \"rotation\": {\n                  \"fixed\": 0,\n                  \"max\": 360,\n                  \"min\": -360,\n                  \"mode\": \"mod\"\n                },\n                \"size\": {\n                  \"fixed\": 3,\n                  \"max\": 15,\n                  \"min\": 2\n                },\n                \"symbol\": {\n                  \"field\": \"\",\n                  \"fixed\": \"\",\n                  \"mode\": \"fixed\"\n                },\n                \"symbolAlign\": {\n                  \"horizontal\": \"center\",\n                  \"vertical\": \"center\"\n                },\n                \"textConfig\": {\n                  \"fontSize\": 12,\n                  \"offsetX\": 0,\n                  \"offsetY\": 0,\n                  \"textAlign\": \"center\",\n                  \"textBaseline\": \"middle\"\n                }\n              }\n            },\n            \"location\": {\n              \"mode\": \"auto\"\n            },\n            \"name\": \"route\",\n            \"opacity\": 1,\n            \"tooltip\": true,\n            \"type\": \"route\"\n          }\n        ],\n        \"tooltip\": {\n          \"mode\": \"details\"\n        },\n        \"view\": {\n          \"allLayers\": true,\n          \"id\": \"fit\",\n          \"lat\": 0,\n          \"lon\": 0,\n          \"noRepeat\": false,\n          \"zoom\": 15\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  $__time(date),\\n  latitude,\\n  longitude\\nFROM positions\\nWHERE \\n  car_id = $car_id AND \\n  $__timeFilter(date)\\nORDER BY \\n  date ASC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"geomap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 5,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 1,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_m$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthm\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_ft$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"feet\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"elevation_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Elevation\"\n              },\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"super-light-blue\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 12,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 12\n      },\n      \"id\": 8,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\t$__time(date),\\n\\tROUND(convert_m(elevation, '$alternative_length_unit')) AS elevation_${alternative_length_unit}\\nFROM\\n\\tpositions\\nWHERE\\n car_id = $car_id AND\\n $__timeFilter(date)\\nORDER BY\\n\\tdate ASC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Elevation\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 5,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"is_climate_on\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"rgb(210, 203, 203)\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"fan_status\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#96D98D\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_c$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"celsius\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_f$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"fahrenheit\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"outside_temp_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#8AB8FF\",\n                  \"mode\": \"fixed\"\n                }\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Outside Temperature\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"inside_temp_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#F2CC0C\",\n                  \"mode\": \"fixed\"\n                }\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Inside Temperature\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"driver_temp_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Driver Temperature\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"passenger_temp_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Passenger Temperature\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"is_climate_on\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"bool_on_off\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Climate\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"fan_status\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Fan status\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 12\n      },\n      \"id\": 6,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\t$__time(date),\\n\\tconvert_celsius(outside_temp, '$temp_unit') AS outside_temp_$temp_unit,\\n\\tconvert_celsius(inside_temp, '$temp_unit') AS inside_temp_$temp_unit,\\n\\tconvert_celsius(driver_temp_setting, '$temp_unit') as driver_temp_$temp_unit,\\n\\tconvert_celsius(passenger_temp_setting, '$temp_unit') as passenger_temp_$temp_unit,\\n  is_climate_on::integer,\\n\\tfan_status\\nFROM\\n\\tpositions\\nWHERE\\n car_id = $car_id AND\\n $__timeFilter(date)\\nORDER BY\\n\\tdate ASC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Temperatures\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 5,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineStyle\": {\n              \"fill\": \"solid\"\n            },\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"tpms_pressure_front_left_bar\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"pressurebar\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Front Left\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"tpms_pressure_front_right_bar\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"pressurebar\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Front Right\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"tpms_pressure_rear_left_bar\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"pressurebar\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Rear Left\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"tpms_pressure_rear_right_bar\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"pressurebar\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Rear Right\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"tpms_pressure_front_left_psi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"pressurepsi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Front Left\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"tpms_pressure_front_right_psi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"pressurepsi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Front Right\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"tpms_pressure_rear_left_psi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"pressurepsi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Rear Left\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"tpms_pressure_rear_right_psi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"pressurepsi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Rear Right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 18\n      },\n      \"id\": 32,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"logmin\",\n            \"max\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n    $__time(date),\\r\\n    convert_tire_pressure(tpms_pressure_fl,'$pressure_unit') AS tpms_pressure_front_left_$pressure_unit,\\r\\n    convert_tire_pressure(tpms_pressure_fr,'$pressure_unit') AS tpms_pressure_front_right_$pressure_unit,\\r\\n    convert_tire_pressure(tpms_pressure_rl,'$pressure_unit') AS tpms_pressure_rear_left_$pressure_unit,\\r\\n    convert_tire_pressure(tpms_pressure_rr,'$pressure_unit') AS tpms_pressure_rear_right_$pressure_unit\\r\\nFROM\\r\\n    positions\\r\\nWHERE\\r\\n    car_id = $car_id AND\\r\\n    $__timeFilter(date) AND\\r\\n    tpms_pressure_fl is not null\\r\\nORDER BY\\r\\n    date ASC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Tire Pressure\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 24\n      },\n      \"id\": 36,\n      \"panels\": [],\n      \"title\": \"More Details\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 2,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"id\": 38,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT CONCAT_WS(' - ', round(convert_km(start_km::numeric, '$length_unit')), round(convert_km(end_km::numeric, '$length_unit'))) ||' $length_unit' as \\\"Odometer\\\"\\r\\nFROM drives d\\r\\nWHERE d.id = $drive_id\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Odometer (From - To)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 1,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"text\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"dtdurations\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 6,\n        \"y\": 25\n      },\n      \"id\": 14,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT ((DATE_PART('day', end_date - start_date) * 24 + \\n                DATE_PART('hour', end_date - start_date)) * 60 +\\n                DATE_PART('minute', end_date - start_date)) * 60 +\\n                DATE_PART('second', end_date - start_date) as sec_diff\\nFROM drives\\nWHERE drives.id = $drive_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Drive Duration\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"text\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"dtdurations\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 9,\n        \"y\": 25\n      },\n      \"id\": 34,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT ${__to:date:seconds} - ${__from:date:seconds}\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Selected Duration\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-GrYlRd\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisGridShow\": false,\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"axisWidth\": -10,\n            \"fillOpacity\": 90,\n            \"gradientMode\": \"hue\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineWidth\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"fieldMinMax\": true,\n          \"mappings\": [],\n          \"noValue\": \"0\",\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Elapsed\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 25\n      },\n      \"id\": 35,\n      \"options\": {\n        \"barRadius\": 0.05,\n        \"barWidth\": 0.97,\n        \"colorByField\": \"Elapsed\",\n        \"fullHighlight\": false,\n        \"groupWidth\": 0.7,\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"orientation\": \"auto\",\n        \"showValue\": \"auto\",\n        \"stacking\": \"none\",\n        \"text\": {},\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        },\n        \"xField\": \"Speed\",\n        \"xTickLabelRotation\": 0,\n        \"xTickLabelSpacing\": 0\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT \\r\\n    speed_section_$length_unit AS \\\"Speed\\\",\\r\\n    SUM(seconds_elapsed) * 100 / MAX(duration) as \\\"Elapsed\\\",\\r\\n    TO_CHAR((SUM(seconds_elapsed) || ' second')::interval, 'HH24:MI:SS') AS \\\"Time\\\"\\r\\nFROM (\\r\\n    SELECT\\r\\n        ROUND(convert_km(p.speed::numeric, '$length_unit') / 10,0) * 10 AS speed_section_$length_unit,\\r\\n        EXTRACT(EPOCH FROM (LEAD(p.\\\"date\\\") OVER (ORDER BY p.\\\"date\\\") - p.\\\"date\\\")) AS seconds_elapsed,\\r\\n        EXTRACT(EPOCH FROM (end_date - start_date)) AS duration\\r\\n    FROM drives d\\r\\n    INNER JOIN positions p ON p.drive_id = d.id\\r\\n    WHERE d.id = $drive_id\\r\\n) AS drivedata\\r\\nWHERE speed_section_$length_unit>0\\r\\nGROUP BY 1\\r\\nORDER BY 1\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Speed Histogram ($speed_unit)\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"names\": [\n                \"Elapsed\",\n                \"Time\",\n                \"Speed\",\n                \"SpeedUnit\"\n              ]\n            }\n          }\n        }\n      ],\n      \"type\": \"barchart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 2,\n          \"displayName\": \"Distance\",\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 28\n      },\n      \"id\": 10,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select convert_km(distance::numeric, '$length_unit') as \\\"$length_unit\\\" from drives where id = $drive_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Distance driven\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 28\n      },\n      \"id\": 20,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"vertical\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH height as (SELECT\\n\\televation-LAG(elevation,1) over ( order BY\\n\\tdate ASC ) as diff\\nFROM\\n\\tpositions\\nWHERE\\n car_id = $car_id AND\\n $__timeFilter(date)\\nORDER BY\\n\\tdate ASC\\n\\t)\\nSELECT  ROUND(convert_m(sum(diff), '$alternative_length_unit')::numeric,0) || ' $alternative_length_unit'  as \\\"UP\\\" from height where diff > 0\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH height as (SELECT\\n\\televation-LAG(elevation,1) over ( order BY\\n\\tdate ASC ) as diff\\nFROM\\n\\tpositions\\nWHERE\\n car_id = $car_id AND\\n $__timeFilter(date)\\nORDER BY\\n\\tdate ASC\\n\\t)\\nSELECT ROUND(convert_m(sum(diff), '$alternative_length_unit')::numeric,0) || ' $alternative_length_unit' as \\\"DOWN\\\" from height where diff < 0\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Elevation Summary\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 2,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"light-yellow\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 31\n      },\n      \"id\": 12,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\t(start_${preferred_range}_range_km - end_${preferred_range}_range_km) * car.efficiency\\nFROM\\n\\tdrives d\\nJOIN cars car ON car.id = car_id\\nWHERE\\n\\td.id = $drive_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Energy consumed (net)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"Shows how much energy has been recovered through regenerative braking.\\n\\n\\\"Energy recovered\\\" is already included in \\\"Energy consumed (net)\\\" and is determined by looking for periods with negative power within your drive. \\n\\nRequires Streaming API to be enabled and available for this drive.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 2,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"light-yellow\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 3,\n        \"y\": 31\n      },\n      \"id\": 40,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"with data as (\\nselect\\n\\tp.power,\\n\\textract (second from p.date - lag(p.date) over (order by p.date)) as seconds\\nfrom positions p\\n\\twhere drive_id = ${drive_id} and power < 0\\n)\\n\\nselect sum(power * (seconds / 3600)) * -1 from data where seconds is not null and seconds < 1.5\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Energy recovered\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"orange\",\n            \"mode\": \"fixed\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"yellow\",\n                \"value\": 200\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 250\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 6,\n        \"y\": 31\n      },\n      \"id\": 18,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select\\n\\t(start_${preferred_range}_range_km - end_${preferred_range}_range_km) * car.efficiency * 1000 /\\n\\t  convert_km(distance::numeric, '$length_unit') as \\\"$length_unit\\\"\\nfrom drives d\\nJOIN cars car ON car.id = car_id\\nwhere d.id = $drive_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Consumption (net)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"super-light-blue\",\n            \"mode\": \"fixed\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_mih/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitymph\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_kmh/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitykmh\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 9,\n        \"y\": 31\n      },\n      \"id\": 37,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": false\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tconvert_km(avg(speed)::numeric, '$length_unit') AS speed_${length_unit}h\\nFROM positions\\nWHERE car_id = $car_id AND $__timeFilter(date)\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ø Speed\",\n      \"type\": \"stat\"\n    }\n  ],\n  \"preload\": false,\n  \"schemaVersion\": 42,\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"text\": \"1514\",\n          \"value\": \"1514\"\n        },\n        \"hide\": 2,\n        \"name\": \"drive_id\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"1514\",\n            \"value\": \"1514\"\n          }\n        ],\n        \"query\": \"1514\",\n        \"type\": \"textbox\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_temperature from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"temp_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_temperature from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"includeAll\": false,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select case when unit_of_length = 'km' then 'm' when unit_of_length = 'mi' then 'ft' end  from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"alternative_length_unit\",\n        \"options\": [],\n        \"query\": \"select case when unit_of_length = 'km' then 'm' when unit_of_length = 'mi' then 'ft' end  from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_pressure from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"pressure_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_pressure from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT  CASE WHEN '$length_unit' = 'km' THEN 'km/h' WHEN '$length_unit' = 'mi' THEN 'mph' END\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"speed_unit\",\n        \"options\": [],\n        \"query\": \"SELECT  CASE WHEN '$length_unit' = 'km' THEN 'km/h' WHEN '$length_unit' = 'mi' THEN 'mph' END\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-12h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": []\n  },\n  \"timezone\": \"browser\",\n  \"title\": \"Drive Details\",\n  \"uid\": \"zm7wN6Zgz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/internal/home.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"fieldConfig\": {\n        \"defaults\": {},\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 20,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"options\": {\n        \"folderUID\": \"Nr4ofiDZk\",\n        \"includeVars\": false,\n        \"keepTime\": false,\n        \"maxItems\": 100,\n        \"query\": \"\",\n        \"showFolderNames\": false,\n        \"showHeadings\": false,\n        \"showRecentlyViewed\": false,\n        \"showSearch\": true,\n        \"showStarred\": false,\n        \"tags\": []\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"type\": \"dashlist\"\n    },\n    {\n      \"fieldConfig\": {\n        \"defaults\": {},\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 20,\n        \"w\": 16,\n        \"x\": 6,\n        \"y\": 0\n      },\n      \"id\": 1,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"<div style=\\\"background-size: cover; background-image: url(&quot;https://digitalassets.tesla.com/tesla-contents/image/upload/c_pad,dpr_1.0,f_auto,q_auto/c_pad/Group_67?pgw=1&quot;);width:100%;height:734px;background-position:center;\\\"></div>\",\n        \"mode\": \"html\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"title\": \"\",\n      \"type\": \"text\"\n    },\n    {\n      \"fieldConfig\": {\n        \"defaults\": {},\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 20,\n        \"w\": 2,\n        \"x\": 22,\n        \"y\": 0\n      },\n      \"id\": 3,\n      \"options\": {\n        \"feedUrl\": \"https://api.cors.lol/?url=https://github.com/teslamate-org/teslamate/tags.atom\",\n        \"showImage\": false\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"title\": \"Releases\",\n      \"type\": \"news\"\n    }\n  ],\n  \"preload\": false,\n  \"schemaVersion\": 42,\n  \"tags\": [],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-6h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"hidden\": true\n  },\n  \"timezone\": \"browser\",\n  \"title\": \"Home\",\n  \"uid\": \"be2m9kga7b8qoc\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/locations.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 12,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select count(*), count(distinct city) as city_count, count(distinct state) as state_count, count(distinct country) as country_count from addresses where id in (\\r\\n  select start_address_id from drives where car_id in ($car_id) and $__timeFilter(start_date)\\r\\n  union\\r\\n  select end_address_id from drives where car_id in ($car_id) and $__timeFilter(end_date)\\r\\n  union\\r\\n  select address_id from charging_processes where car_id in ($car_id) and ($__timeFilter(start_date) or $__timeFilter(end_date))\\r\\n);\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"# of Addresses\",\n      \"transformations\": [\n        {\n          \"id\": \"organize\",\n          \"options\": {\n            \"excludeByName\": {\n              \"city_count\": true,\n              \"country_count\": true,\n              \"state_count\": true\n            },\n            \"includeByName\": {},\n            \"indexByName\": {},\n            \"renameByName\": {}\n          }\n        }\n      ],\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 0\n      },\n      \"id\": 20,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 12,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"# of Cities\",\n      \"transformations\": [\n        {\n          \"id\": \"organize\",\n          \"options\": {\n            \"excludeByName\": {\n              \"count\": true,\n              \"country_count\": true,\n              \"state_count\": true\n            },\n            \"includeByName\": {},\n            \"indexByName\": {},\n            \"renameByName\": {}\n          }\n        }\n      ],\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 0\n      },\n      \"id\": 18,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 12,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"# of States\",\n      \"transformations\": [\n        {\n          \"id\": \"organize\",\n          \"options\": {\n            \"excludeByName\": {\n              \"city_count\": true,\n              \"count\": true,\n              \"country_count\": true\n            },\n            \"includeByName\": {},\n            \"indexByName\": {},\n            \"renameByName\": {}\n          }\n        }\n      ],\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 0\n      },\n      \"id\": 16,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 12,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"# of Countries\",\n      \"transformations\": [\n        {\n          \"id\": \"organize\",\n          \"options\": {\n            \"excludeByName\": {\n              \"city_count\": true,\n              \"count\": true,\n              \"state_count\": true\n            },\n            \"includeByName\": {},\n            \"indexByName\": {},\n            \"renameByName\": {}\n          }\n        }\n      ],\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"displayName\": \"$__cell_0\",\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"super-light-green\",\n                \"value\": 50\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 3\n      },\n      \"id\": 10,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"maxVizHeight\": 300,\n        \"minVizHeight\": 16,\n        \"minVizWidth\": 8,\n        \"namePlacement\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showUnfilled\": true,\n        \"sizing\": \"auto\",\n        \"valueMode\": \"color\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tcity,\\n\\tcount(*) as \\\"# of Addresses\\\"\\nFROM\\n\\taddresses\\nWHERE\\n\\tcity IS NOT NULL and\\n  id in (\\n\\t\\tselect start_address_id from drives where car_id in ($car_id) and $__timeFilter(start_date) \\n\\t\\tunion\\n\\t\\tselect end_address_id from drives where car_id in ($car_id) and $__timeFilter(end_date) \\n\\t\\tunion\\n\\t\\tselect address_id from charging_processes where car_id in ($car_id) and ($__timeFilter(start_date) or $__timeFilter(end_date))\\n\\t)\\nGROUP BY\\n\\t1\\nORDER BY\\n\\t2 DESC\\nLIMIT 10;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Cities\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"displayName\": \"$__cell_0\",\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-orange\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"super-light-orange\",\n                \"value\": 50\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 3\n      },\n      \"id\": 14,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"maxVizHeight\": 300,\n        \"minVizHeight\": 16,\n        \"minVizWidth\": 8,\n        \"namePlacement\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showUnfilled\": true,\n        \"sizing\": \"auto\",\n        \"valueMode\": \"color\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tstate,\\n\\tcount(*) as \\\"# of Addresses\\\"\\nFROM\\n\\taddresses\\nWHERE\\n\\tstate IS NOT NULL and\\n  id in (\\n\\t\\tselect start_address_id from drives where car_id in ($car_id) and $__timeFilter(start_date)\\n\\t\\tunion\\n\\t\\tselect end_address_id from drives where car_id in ($car_id) and $__timeFilter(end_date)\\n\\t\\tunion\\n\\t\\tselect address_id from charging_processes where car_id in ($car_id) and ($__timeFilter(start_date) or $__timeFilter(end_date))\\n\\t)\\nGROUP BY\\n\\t1\\nORDER BY\\n\\t2 DESC\\nLIMIT 10;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"States\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"filterable\": false,\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-blue\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"light-red\",\n                \"value\": 50\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Date\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"dateTimeAsLocal\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 210\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"City\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 11\n      },\n      \"id\": 22,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": [\n          {\n            \"desc\": true,\n            \"displayName\": \"Date\"\n          }\n        ]\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"with locations as (\\n\\n  select address_id, geofence_id, start_date as end_date from charging_processes where car_id in ($car_id) and ($__timeFilter(start_date) or $__timeFilter(end_date))\\n  union\\n  select end_address_id as address_id, end_geofence_id as geofence_id, end_date from drives where car_id in ($car_id) and $__timeFilter(end_date)\\n\\n)\\n\\nSELECT\\n  max(l.end_date) as \\\"Date\\\",\\n  COALESCE(g.name, array_to_string(((string_to_array(a.display_name, ', ', ''))[0:2]), ', ')) AS \\\"Address\\\",\\n\\tCOALESCE(city, neighbourhood) as \\\"City\\\"\\nFROM locations l\\nINNER JOIN addresses a ON l.address_id = a.id\\nLEFT JOIN geofences g ON l.geofence_id = g.id\\nWHERE\\n  (a.display_name ilike '%$address_filter%' or g.name ilike '%$address_filter%')\\nGROUP BY 2,3\\nLIMIT 100\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Last visited\",\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"decimals\": 2,\n          \"displayName\": \"\",\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"updated_at\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Updated at\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"time: YYYY-MM-DD HH:mm:ss\"\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"name\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Name\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"short\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"\",\n                    \"url\": \"${base_url:raw}/geo-fences/${__data.fields.path}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"neighbourhood\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Neighbourhood\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"short\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"city\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"City\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"short\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"state\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"State\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"short\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"country\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Country\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"short\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"path\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.align\"\n              },\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 18,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 2,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  CONCAT('new?lat=', latitude, '&lng=', longitude) as path,\\n\\tCOALESCE(name, CONCAT(road, ' ', house_number)) AS name,\\n\\tneighbourhood,\\n\\tcity,\\n\\tstate,\\n\\tcountry\\nFROM addresses\\nWHERE display_name ilike '%$address_filter%' and id in (\\n  select start_address_id from drives where car_id in ($car_id) and $__timeFilter(start_date)\\n  union\\n  select end_address_id from drives where car_id in ($car_id) and $__timeFilter(end_date)\\n  union\\n  select address_id from charging_processes where car_id in ($car_id) and ($__timeFilter(start_date) or $__timeFilter(end_date))\\n)\\nORDER BY inserted_at DESC\\nLIMIT 100;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Addresses\",\n      \"transformations\": [\n        {\n          \"id\": \"merge\",\n          \"options\": {\n            \"reducers\": []\n          }\n        }\n      ],\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"decimals\": 2,\n          \"displayName\": \"\",\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Time\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Time\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"time: YYYY-MM-DD HH:mm:ss\"\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"name\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Name\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"short\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"\",\n                    \"url\": \"${base_url:raw}/geo-fences/${__data.fields.id.numeric:raw}/edit\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"id\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.align\"\n              },\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 22\n      },\n      \"id\": 6,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT id, name \\nFROM geofences where id in (\\n  select start_geofence_id from drives where car_id in ($car_id) and $__timeFilter(start_date)\\n  union\\n  select end_geofence_id from drives where car_id in ($car_id) and $__timeFilter(end_date)\\n  union\\n  select geofence_id from charging_processes where car_id in ($car_id) and ($__timeFilter(start_date) or $__timeFilter(end_date))\\n)\\nORDER BY inserted_at DESC\\nLIMIT 100;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Geo-fences\",\n      \"transformations\": [\n        {\n          \"id\": \"merge\",\n          \"options\": {\n            \"reducers\": []\n          }\n        }\n      ],\n      \"type\": \"table\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 1,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"multi\": true,\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"\",\n          \"value\": \"\"\n        },\n        \"label\": \"Address\",\n        \"name\": \"address_filter\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"\",\n            \"value\": \"\"\n          }\n        ],\n        \"query\": \"\",\n        \"type\": \"textbox\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Locations\",\n  \"uid\": \"ZzhF-aRWz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/mileage.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"stepAfter\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_km$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_mi$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"mileage_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Mileage\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"min\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH o AS (SELECT\\n  start_date AS time,\\n  car_id,\\n  start_km  AS \\\"odometer\\\"\\nFROM drives\\nUNION ALL\\nSELECT\\n  end_date,\\n  car_id,\\n  end_km AS \\\"odometer\\\"\\nFROM drives)\\n\\nSELECT\\n  time, \\n  convert_km(odometer::numeric, '$length_unit') as mileage_$length_unit\\nFROM o\\nWHERE\\n\\tcar_id = $car_id AND\\n\\t$__timeFilter(time)\\norder by 1;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Mileage\",\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Mileage\",\n  \"uid\": \"NjtMTFggz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/overview.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"description\": \"A high level overview of your car\",\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 1,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 18,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"displayName\": \"\",\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"transparent\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 4,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"(SELECT battery_level, date\\nFROM positions\\nWHERE car_id = $car_id and ideal_battery_range_km is not null\\nORDER BY date DESC\\nLIMIT 1)\\nUNION\\nSELECT battery_level, date\\nFROM charges c\\nJOIN charging_processes p ON p.id = c.charging_process_id\\nWHERE $__timeFilter(date) AND p.car_id = $car_id\\nORDER BY date DESC\\nLIMIT 1\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n  0 as lowest,\\r\\n  10 as low,\\r\\n  20 as mid,\\r\\n  CASE WHEN lfp_battery THEN 101 ELSE 81 END as high,\\r\\n  CASE WHEN lfp_battery THEN 101 ELSE 91 END as highest\\r\\nfrom cars inner join car_settings on cars.settings_id = car_settings.id\\r\\nwhere cars.id = $car_id\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Battery Level\",\n      \"transformations\": [\n        {\n          \"id\": \"configFromData\",\n          \"options\": {\n            \"applyTo\": {\n              \"id\": \"byFrameRefID\",\n              \"options\": \"A\"\n            },\n            \"configRefId\": \"B\",\n            \"mappings\": [\n              {\n                \"fieldName\": \"lowest\",\n                \"handlerKey\": \"threshold1\"\n              },\n              {\n                \"fieldName\": \"low\",\n                \"handlerArguments\": {\n                  \"threshold\": {\n                    \"color\": \"yellow\"\n                  }\n                },\n                \"handlerKey\": \"threshold1\"\n              },\n              {\n                \"fieldName\": \"mid\",\n                \"handlerArguments\": {\n                  \"threshold\": {\n                    \"color\": \"green\"\n                  }\n                },\n                \"handlerKey\": \"threshold1\"\n              },\n              {\n                \"fieldName\": \"high\",\n                \"handlerArguments\": {\n                  \"threshold\": {\n                    \"color\": \"yellow\"\n                  }\n                },\n                \"handlerKey\": \"threshold1\"\n              },\n              {\n                \"fieldName\": \"highest\",\n                \"handlerArguments\": {\n                  \"threshold\": {\n                    \"color\": \"red\"\n                  }\n                },\n                \"handlerKey\": \"threshold1\"\n              }\n            ]\n          }\n        }\n      ],\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"max\": 260,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"volt\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 3,\n        \"y\": 1\n      },\n      \"id\": 10,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"firstNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH charging_process AS (\\n  SELECT id, end_date\\n  FROM charging_processes\\n  WHERE car_id = $car_id\\n  ORDER BY start_date DESC\\n  LIMIT 1\\n)\\nSELECT\\n  $__time(date),\\n  CASE WHEN charging_process.end_date IS NULL THEN charger_voltage\\n       ELSE 0\\n  END AS \\\"Charging Voltage [V]\\\"\\nFROM charges, charging_process\\nWHERE charging_process.id = charging_process_id\\nORDER BY date DESC\\nLIMIT 1;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charging Voltage\",\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"fieldMinMax\": false,\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"kwatt\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 6,\n        \"y\": 1\n      },\n      \"id\": 11,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"firstNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH charging_process AS (\\n  SELECT id, end_date\\n  FROM charging_processes\\n  WHERE car_id = $car_id\\n  ORDER BY start_date DESC\\n  LIMIT 1\\n)\\nSELECT\\n  $__time(date),\\n  CASE WHEN charging_process.end_date IS NULL THEN charger_power\\n       ELSE 0\\n  END AS \\\"Power [kW]\\\"\\nFROM charges, charging_process\\nWHERE charging_process.id = charging_process_id\\nORDER BY date DESC\\nLIMIT 1;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n  CASE WHEN lfp_battery THEN 170 ELSE 250 END as max_charging_kw\\r\\nfrom cars inner join car_settings on cars.settings_id = car_settings.id\\r\\nwhere cars.id = $car_id\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charging Power\",\n      \"transformations\": [\n        {\n          \"id\": \"configFromData\",\n          \"options\": {\n            \"configRefId\": \"B\",\n            \"mappings\": [\n              {\n                \"fieldName\": \"max_charging_kw\",\n                \"handlerKey\": \"max\"\n              }\n            ]\n          }\n        }\n      ],\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 15,\n        \"x\": 9,\n        \"y\": 1\n      },\n      \"id\": 13,\n      \"links\": [\n        {\n          \"targetBlank\": true,\n          \"title\": \"Charge Level\",\n          \"url\": \"/d/WopVO_mgz/charge-level?${__url_time_range}\"\n        }\n      ],\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT $__time(date), battery_level AS \\\"SOC\\\"\\nFROM (\\n\\tSELECT battery_level, date\\n\\tFROM positions\\n\\tWHERE car_id = $car_id AND ideal_battery_range_km IS NOT NULL AND $__timeFilter(date)\\n\\tUNION ALL\\n\\tSELECT battery_level, date\\n\\tFROM charges c \\n  JOIN charging_processes p ON p.id = c.charging_process_id\\n\\tWHERE $__timeFilter(date) AND p.car_id = $car_id) AS data\\nORDER BY date ASC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charge Level\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 5\n      },\n      \"id\": 14,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"first\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  sum((start_${preferred_range}_range_km - end_${preferred_range}_range_km) * car.efficiency * 1000) / \\n  convert_km(sum(distance)::numeric, '$length_unit') as \\\"consumption_$length_unit\\\"\\nFROM drives\\nJOIN cars car ON car.id = car_id\\nWHERE $__timeFilter(start_date) AND car_id = $car_id\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ø Consumption (net)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 3,\n        \"y\": 5\n      },\n      \"id\": 22,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH d AS (\\n\\tSELECT\\n\\t\\tc.car_id,\\n\\t\\tlag(end_${preferred_range}_range_km) OVER (ORDER BY start_date) - start_${preferred_range}_range_km AS range_loss,\\n\\t\\tp.odometer - lag(p.odometer) OVER (ORDER BY start_date) AS distance\\n\\tFROM charging_processes c\\n\\tLEFT JOIN positions p ON p.id = c.position_id \\n\\tWHERE\\n\\t  end_date IS NOT NULL AND\\n\\t  c.car_id = $car_id AND\\n\\t  $__timeFilter(start_date)\\n\\tORDER BY start_date\\n),\\n\\nrange_loss_between_charges AS (\\n  SELECT sum(range_loss) AS range_loss\\n  FROM d\\n  WHERE distance >= 0 AND range_loss >= 0\\n  GROUP BY car_id\\n),\\n\\ncharge_dates AS (\\n\\tSELECT\\n\\t\\tmin(start_date) as first_charge,\\n\\t\\tmax(end_date) as last_charge\\n\\tFROM\\n\\t\\tcharging_processes\\n\\tWHERE\\n\\t\\tend_date IS NOT NULL\\n\\t\\tAND car_id = $car_id\\n\\t\\tAND $__timeFilter(start_date)\\n),\\n\\nrange_loss_before_first_charge AS (\\n\\tSELECT\\n\\t\\tmax(${preferred_range}_battery_range_km) - min(${preferred_range}_battery_range_km) AS range_loss\\n\\tFROM positions, charge_dates\\n\\tWHERE\\n\\t\\tcar_id = $car_id\\n\\t\\tAND $__timeFilter(date)\\n\\t\\tAND ((select first_charge from charge_dates) is null OR date < (select first_charge from charge_dates))\\n),\\n\\nrange_loss_after_last_charge AS (\\n\\tSELECT\\n\\t\\tmax(${preferred_range}_battery_range_km) - min(${preferred_range}_battery_range_km) AS range_loss\\n\\tFROM positions, charge_dates\\n\\tWHERE\\n\\t\\tcar_id = $car_id\\n\\t\\tAND $__timeFilter(date)\\n\\t\\tAND date > (select last_charge from charge_dates)\\t\\n),\\n\\ntotal_range_loss AS (\\n  SELECT sum(range_loss) as range_loss\\n  FROM (\\n    SELECT range_loss FROM range_loss_between_charges\\n    UNION ALL\\n    SELECT range_loss FROM range_loss_before_first_charge\\n    UNION ALL\\n    SELECT range_loss FROM range_loss_after_last_charge\\n  ) r\\n),\\n\\ndistance AS (\\n  SELECT max(odometer) - min(odometer) as distance\\n  FROM positions\\n  WHERE car_id = $car_id AND $__timeFilter(date)\\n)\\n\\nSELECT \\n  NULLIF(range_loss, 0) * (c.efficiency * 1000) / convert_km(NULLIF(distance::numeric, 0), '$length_unit') as \\\"consumption_$length_unit\\\"\\nFROM total_range_loss, distance\\nLEFT JOIN cars c ON c.id = $car_id\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Ø Consumption (gross)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 6,\n        \"y\": 5\n      },\n      \"id\": 24,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n  convert_km(sum(distance)::numeric, '$length_unit') AS distance_$length_unit\\r\\nFROM drives\\r\\nWHERE $__timeFilter(start_date) AND car_id = $car_id\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Total Distance logged\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 0,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 8\n      },\n      \"id\": 25,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"first\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT $__time(date), range as \\\"range_$length_unit\\\"\\nFROM (\\n\\t(SELECT date, convert_km(${preferred_range}_battery_range_km, '$length_unit') AS range\\n\\tFROM positions\\n\\tWHERE car_id = $car_id AND ideal_battery_range_km IS NOT NULL\\n  ORDER BY date DESC\\n\\tLIMIT 1)\\n\\tUNION ALL\\n\\t(SELECT date, convert_km(${preferred_range}_battery_range_km, '$length_unit') AS range\\n\\tFROM charges c\\n\\tJOIN charging_processes p ON p.id = c.charging_process_id\\n\\tWHERE p.car_id = $car_id\\n\\tORDER BY date DESC\\n\\tLIMIT 1)\\n) AS data\\nORDER BY date DESC\\nLIMIT 1;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Range\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"version\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"string\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 3,\n        \"y\": 8\n      },\n      \"id\": 2,\n      \"links\": [\n        {\n          \"targetBlank\": true,\n          \"title\": \"Updates\",\n          \"url\": \"/d/IiC07mgWz/updates\"\n        }\n      ],\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"first\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"/^version$/\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select split_part(version, ' ', 1) as version \\nfrom updates \\nwhere car_id = $car_id \\norder by start_date desc \\nlimit 1\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Firmware\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"odometer_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"odometer_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 6,\n        \"y\": 8\n      },\n      \"id\": 6,\n      \"links\": [\n        {\n          \"targetBlank\": true,\n          \"title\": \"Mileage\",\n          \"url\": \"/d/NjtMTFggz/mileage\"\n        }\n      ],\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"first\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select $__time(date), convert_km(odometer::numeric, '$length_unit')  as \\\"odometer_$length_unit\\\"\\nfrom positions \\nwhere car_id = $car_id and ideal_battery_range_km is not null\\norder by date desc \\nlimit 1;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Odometer\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"stepAfter\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Charging Voltage [V]\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"min\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"max\",\n                \"value\": 250\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charger_power\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Power\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatt\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"battery_heater\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Battery heater\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"bool_on_off\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charger_actual_current\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Current\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"amp\"\n              },\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"hidden\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charge_energy_added\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Energy added\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 15,\n        \"x\": 9,\n        \"y\": 8\n      },\n      \"id\": 15,\n      \"links\": [\n        {\n          \"targetBlank\": true,\n          \"title\": \"Charging Stats\",\n          \"url\": \"/d/-pkIkhmRz/charging-stats?${__url_time_range}\"\n        }\n      ],\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  $__time(date),\\n  charger_power,\\n  (case when battery_heater_on then 1 when battery_heater then 1 else 0 end) as battery_heater,\\n  charger_actual_current,\\n  c.charge_energy_added\\nFROM\\n  charges c\\njoin\\n  charging_processes p ON p.id = c.charging_process_id \\nWHERE\\n  $__timeFilter(date) and\\n  p.car_id = $car_id\\nORDER BY\\n  date ASC\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  $__time(date),\\n  charger_voltage as \\\"Charging Voltage [V]\\\"\\nFROM\\n  charges c\\njoin\\n  charging_processes p ON p.id = c.charging_process_id \\nWHERE\\n  $__timeFilter(date) and\\n  p.car_id = $car_id\\nORDER BY\\n  date ASC\",\n          \"refId\": \"C\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charging Details\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"degree\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 11\n      },\n      \"id\": 16,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"firstNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\r\\n\\t$__time(date),\\r\\n\\tconvert_celsius(driver_temp_setting, '$temp_unit') as \\\"Driver Temperature [°$temp_unit]\\\",\\r\\n\\tconvert_celsius(inside_temp, '$temp_unit') AS \\\"Inside Temperature [°$temp_unit]\\\"\\r\\nFROM positions\\r\\nWHERE driver_temp_setting IS NOT NULL AND inside_temp IS NOT NULL AND car_id = $car_id AND date >= (TIMEZONE('UTC', NOW()) - INTERVAL '60m')\\r\\nORDER BY date DESC\\r\\nLIMIT 1;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Driver Temp\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"byVariable\": false,\n            \"include\": {\n              \"pattern\": \"time|Driver.*\"\n            }\n          }\n        }\n      ],\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"degree\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 3,\n        \"y\": 11\n      },\n      \"id\": 8,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"firstNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH last_position AS (\\n\\tSELECT date, convert_celsius(outside_temp, '$temp_unit') AS \\\"Outside Temperature [°$temp_unit]\\\"\\n\\tFROM positions\\n\\tWHERE car_id = $car_id AND outside_temp IS NOT NULL AND date >= (TIMEZONE('UTC', NOW()) - INTERVAL '60m')\\n\\tORDER BY date DESC\\n\\tLIMIT 1\\n),\\nlast_charge AS (\\n\\tSELECT date, convert_celsius(outside_temp, '$temp_unit') AS \\\"Outside Temperature [°$temp_unit]\\\"\\n\\tFROM charges\\n\\tJOIN charging_processes ON charges.charging_process_id = charging_processes.id\\n\\tWHERE car_id = $car_id AND outside_temp IS NOT NULL AND date >= (TIMEZONE('UTC', NOW()) - INTERVAL '60m')\\n\\tORDER BY date DESC\\n\\tLIMIT 1\\n)\\nSELECT * FROM last_position\\nUNION ALL\\nSELECT * FROM last_charge\\nORDER BY date DESC\\nLIMIT 1;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Outside Temp\",\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Dashboard --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"degree\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 6,\n        \"y\": 11\n      },\n      \"id\": 9,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"firstNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 16,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Inside Temp\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"pattern\": \"time|Inside.*\"\n            }\n          }\n        }\n      ],\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-GrYlRd\"\n          },\n          \"custom\": {\n            \"axisPlacement\": \"auto\",\n            \"fillOpacity\": 100,\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineWidth\": 0,\n            \"spanNulls\": false\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"0\": {\n                  \"color\": \"#6ED0E0\",\n                  \"index\": 0,\n                  \"text\": \"online\"\n                },\n                \"1\": {\n                  \"color\": \"#8F3BB8\",\n                  \"index\": 1,\n                  \"text\": \"driving\"\n                },\n                \"2\": {\n                  \"color\": \"#F2CC0C\",\n                  \"index\": 2,\n                  \"text\": \"charging\"\n                },\n                \"3\": {\n                  \"color\": \"#FFB357\",\n                  \"index\": 3,\n                  \"text\": \"offline\"\n                },\n                \"4\": {\n                  \"color\": \"#56A64B\",\n                  \"index\": 4,\n                  \"text\": \"asleep\"\n                },\n                \"5\": {\n                  \"color\": \"#6ED0E0\",\n                  \"index\": 5,\n                  \"text\": \"online\"\n                },\n                \"6\": {\n                  \"color\": \"#E02F44\",\n                  \"index\": 6,\n                  \"text\": \"updating\"\n                },\n                \"null\": {\n                  \"index\": 7,\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"value\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 15\n      },\n      \"id\": 20,\n      \"links\": [\n        {\n          \"targetBlank\": true,\n          \"title\": \"States\",\n          \"url\": \"/d/xo4BNRkZz/states?${__url_time_range}\"\n        }\n      ],\n      \"options\": {\n        \"alignValue\": \"center\",\n        \"legend\": {\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"mergeValues\": true,\n        \"rowHeight\": 0.9,\n        \"showValue\": \"auto\",\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH states AS (\\n  SELECT\\n    unnest(ARRAY [start_date + interval '1 second', end_date]) AS date,\\n    unnest(ARRAY [2, 0]) AS state\\n  FROM charging_processes\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n  UNION\\n  SELECT\\n    unnest(ARRAY [start_date + interval '1 second', end_date]) AS date,\\n    unnest(ARRAY [1, 0]) AS state\\n  FROM drives\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n  UNION\\n  SELECT\\n    start_date AS date,\\n    CASE\\n      WHEN state = 'offline' THEN 3\\n      WHEN state = 'asleep' THEN 4\\n      WHEN state = 'online' THEN 5\\n    END AS state\\n  FROM states\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n  UNION\\n  SELECT\\n    unnest(ARRAY [start_date + interval '1 second', end_date]) AS date,\\n    unnest(ARRAY [6, 0]) AS state\\n  FROM updates\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n)\\nSELECT date AS \\\"time\\\", state\\nFROM states\\nWHERE \\n  date IS NOT NULL AND\\n  ($__timeFrom() :: timestamp - interval '30 day') < date AND \\n  date < ($__timeTo() :: timestamp + interval '30 day') \\nORDER BY date ASC, state ASC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"States\",\n      \"type\": \"state-timeline\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"30s\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_temperature from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"temp_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_temperature from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-24h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Overview\",\n  \"uid\": \"kOuP_Fggz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/projected-range.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"enable\": false,\n        \"hide\": false,\n        \"iconColor\": \"rgba(255, 96, 96, 1)\",\n        \"limit\": 100,\n        \"name\": \"Charged\",\n        \"rawQuery\": \"SELECT\\n$__time(start_date),\\nend_date as timeend,\\nconcat('Charged: ',round(cast(charge_energy_added as numeric),2),' kWh') AS text\\nFROM charging_processes\\nWHERE\\n$__timeFilter(start_date)  AND duration_min > 5\\nORDER BY start_date DESC\",\n        \"showIn\": 0,\n        \"tags\": [],\n        \"type\": \"tags\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 1,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Projected Range\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 30,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"stepAfter\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 200,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/Mileage.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.fillOpacity\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.axisLabel\",\n                \"value\": \"Mileage\"\n              },\n              {\n                \"id\": \"min\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\t$__timeGroup(date, $interval) AS time,\\n\\tconvert_km((sum(${preferred_range}_battery_range_km) / nullif(sum(coalesce(usable_battery_level,battery_level)),0) * 100)::numeric, '$length_unit') AS \\\"Projected ${preferred_range} range [$length_unit]\\\"\\nFROM\\n\\t(\\n    select battery_level, usable_battery_level, date,\\n      rated_battery_range_km, ideal_battery_range_km, outside_temp\\n    from positions\\n    where\\n      car_id = $car_id and $__timeFilter(date) and ideal_battery_range_km is not null\\n    union all\\n    select battery_level, coalesce(usable_battery_level,battery_level) as usable_battery_level, date,\\n      rated_battery_range_km, ideal_battery_range_km, outside_temp\\n    from charges c\\n    join\\n      charging_processes p ON p.id = c.charging_process_id \\n    where\\n      $__timeFilter(date) and p.car_id = $car_id\\n    ) as data\\n\\nGROUP BY\\n\\t1\\nhaving convert_km((sum(${preferred_range}_battery_range_km) / nullif(sum(coalesce(usable_battery_level,battery_level)),0) * 100)::numeric, '$length_unit') is not null\\nORDER BY\\n\\t1,2  DESC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\t$__timeGroup(date, $interval) AS time,\\n\\tconvert_km(avg(odometer)::numeric, '$length_unit') AS \\\"Mileage [$length_unit]\\\"\\nFROM\\n\\tpositions\\nWHERE\\n\\t$__timeFilter(date) and\\n\\tcar_id = $car_id  and ideal_battery_range_km is not null\\nGROUP BY\\n\\t1\\nORDER BY\\n\\t1,2  DESC;\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Projected Range - Mileage\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Projected Range\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 30,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"stepAfter\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 200,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/Battery.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.fillOpacity\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"max\",\n                \"value\": 100\n              },\n              {\n                \"id\": \"custom.axisLabel\",\n                \"value\": \"Battery Level\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 6,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\t$__timeGroup(date, $interval) AS time,\\n\\tconvert_km((sum(${preferred_range}_battery_range_km) / sum(battery_level) * 100 ) - (sum(${preferred_range}_battery_range_km) / sum(battery_level) * 100 * (avg(battery_level)-avg(coalesce(usable_battery_level,battery_level)))/100 ), '$length_unit') AS \\\"Projected Range (using usable_battery_level) [$length_unit]\\\",\\n\\tconvert_km(max(${preferred_range}_battery_range_km) / max(battery_level) * 100, '$length_unit') AS \\\"Projected Range (using battery_level)[$length_unit]\\\"\\nFROM\\n\\t(\\n    select battery_level, usable_battery_level, date,\\n      rated_battery_range_km, ideal_battery_range_km, outside_temp\\n    from positions\\n    where\\n      car_id = $car_id and $__timeFilter(date) and ideal_battery_range_km is not null\\n    union all\\n    select battery_level, coalesce(usable_battery_level,battery_level) as usable_battery_level, date,\\n      rated_battery_range_km, ideal_battery_range_km, outside_temp\\n    from charges c\\n    join\\n      charging_processes p ON p.id = c.charging_process_id \\n    where\\n      $__timeFilter(date) and p.car_id = $car_id\\n    ) as data\\n\\nGROUP BY\\n\\t1\\nORDER BY\\n\\t1,2  DESC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select \\n\\t$__timeGroup(date, $interval) AS time,\\n  avg(battery_level) AS \\\"Battery Level [%]\\\", avg(coalesce(usable_battery_level, battery_level)) as \\\"Usable Battery Level [%]\\\"\\nfrom\\n    (SELECT\\n    battery_level, usable_battery_level\\n        , date\\n    FROM\\n    positions\\n    WHERE\\n    car_id = $car_id AND\\n    $__timeFilter(date) and ideal_battery_range_km is not null\\n    UNION ALL\\n    select\\n    battery_level, null as usable_battery_level\\n        , date\\n    from charges c\\njoin\\n  charging_processes p ON p.id = c.charging_process_id \\nWHERE\\n  $__timeFilter(date) and\\n  p.car_id = $car_id) as data\\n\\nGROUP BY\\n  1\\nORDER BY\\n    1 ASC\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Projected Range - Battery Level\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Projected Range\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 30,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"stepAfter\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 200,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/Temp.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.fillOpacity\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.axisLabel\",\n                \"value\": \"Temp\"\n              },\n              {\n                \"id\": \"min\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*using usable_battery_level.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#56A64B\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*using battery_level.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#C8F2C2\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 43\n      },\n      \"id\": 5,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"\\nSELECT\\n\\t$__timeGroup(date, $interval) AS time,\\n\\tconvert_km((sum(${preferred_range}_battery_range_km) / sum(battery_level) * 100 ) - (sum(${preferred_range}_battery_range_km) / sum(battery_level) * 100 * (avg(battery_level)-avg(coalesce(usable_battery_level,battery_level)))/100 ), '$length_unit') AS \\\"Projected Range (using usable_battery_level) [$length_unit]\\\",\\n\\tconvert_km(max(${preferred_range}_battery_range_km) / max(battery_level) * 100, '$length_unit') AS \\\"Projected Range (using battery_level)[$length_unit]\\\"\\nFROM\\n\\t(\\n    select battery_level, usable_battery_level, date,\\n      rated_battery_range_km, ideal_battery_range_km, outside_temp\\n    from positions\\n    where\\n      car_id = $car_id and $__timeFilter(date) and ideal_battery_range_km is not null\\n    union all\\n    select battery_level, coalesce(usable_battery_level,battery_level) as usable_battery_level, date,\\n      rated_battery_range_km, ideal_battery_range_km, outside_temp\\n    from charges c\\n    join\\n      charging_processes p ON p.id = c.charging_process_id \\n    where\\n      $__timeFilter(date) and p.car_id = $car_id\\n    ) as data\\n\\nGROUP BY\\n\\t1\\nORDER BY\\n\\t1,2  DESC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\t$__timeGroup(date, $interval) AS time,\\n\\tavg(convert_celsius(outside_temp, '$temp_unit')) as \\\"Outdoor Temperature [°$temp_unit]\\\"\\n\\nFROM\\n\\tpositions\\nWHERE\\n\\t$__timeFilter(date) and\\n\\tcar_id = $car_id and ideal_battery_range_km is not null\\nGROUP BY\\n\\t1\\nORDER BY\\n\\t1,2  DESC\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Projected Range - Outdoor Temp\",\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_temperature from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"temp_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_temperature from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"auto\": false,\n        \"auto_count\": 30,\n        \"auto_min\": \"10s\",\n        \"current\": {\n          \"text\": \"6h\",\n          \"value\": \"6h\"\n        },\n        \"hide\": 1,\n        \"label\": \"Time Resolution\",\n        \"name\": \"interval\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"5m\",\n            \"value\": \"5m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"15m\",\n            \"value\": \"15m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"30m\",\n            \"value\": \"30m\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"1h\",\n            \"value\": \"1h\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"3h\",\n            \"value\": \"3h\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"6h\",\n            \"value\": \"6h\"\n          }\n        ],\n        \"query\": \"5m,15m,30m,1h,3h,6h\",\n        \"refresh\": 2,\n        \"type\": \"interval\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-6M\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Projected Range\",\n  \"uid\": \"riqUfXgRz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/reports/dutch-tax.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"filterable\": false,\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"drive_id\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 75\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"none\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"ID\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_ts\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"dateTimeAsLocal\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 210\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_date_ts\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Start Time\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"start_(km|mi)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 120\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Start Odometer\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"end_(km|mi)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 120\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"End Odometer\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"end_date_ts\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"End Time\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"(start|end)_address\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"duration_min\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"m\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Duration\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 85\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 90\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Distance\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 90\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Distance\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_address\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Start Address\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"end_address\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"End Address\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 24,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 2,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": [\n          {\n            \"desc\": true,\n            \"displayName\": \"Start Time\"\n          }\n        ]\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n  SELECT\\n    drives.id as drive_id,\\n    floor(extract(epoch FROM start_date)) * 1000 AS start_date_ts,\\n    ceil(extract(epoch FROM end_date)) * 1000 AS end_date_ts,\\n    start_km,\\n    end_km,\\n    CONCAT_WS(', ', CONCAT_WS(' ', start_address.road, start_address.house_number), start_address.city) AS start_address,\\n    CONCAT_WS(', ', CONCAT_WS(' ', end_address.road, end_address.house_number), end_address.city) AS end_address,\\n    duration_min,\\n    distance\\n  FROM drives\\n  LEFT JOIN addresses start_address ON start_address_id = start_address.id\\n  LEFT JOIN addresses end_address ON end_address_id = end_address.id\\n  LEFT JOIN cars car ON car.id = drives.car_id\\n  WHERE $__timeFilter(start_date) AND drives.car_id = $car_id\\n  ORDER BY drive_id DESC\\n)\\nSELECT\\n    drive_id,\\n    start_date_ts,\\n    convert_km(start_km::numeric, '$length_unit') as start_$length_unit,\\n    start_address,\\n    end_date_ts,\\n    convert_km(end_km::numeric, '$length_unit') as end_$length_unit,\\n    end_address,\\n    duration_min,\\n    convert_km(distance::numeric, '$length_unit') AS distance_$length_unit\\nFROM data;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Drive\",\n      \"type\": \"table\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_temperature from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"temperature unit\",\n        \"name\": \"temp_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_temperature from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"length unit\",\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Drives - Dutch tax\",\n  \"uid\": \"lBIoQIggk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/states.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 16,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"Only distinguishes between online, offline and asleep.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"dateTimeAsLocal\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 2,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"/^time$/\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select $__time(start_date), state from states where car_id = $car_id order by start_date desc limit 1;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Last state change\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"Only distinguishes between online, offline and asleep.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 1\n      },\n      \"id\": 6,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"first\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"/^state$/\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select $__time(start_date), state from states where car_id = $car_id order by start_date desc limit 1;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Current State\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"description\": \"based on any data ever recorded.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"max\": 1,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 1\n      },\n      \"id\": 8,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select 1 - sum(duration_min) / (EXTRACT(EPOCH  FROM (max(end_date) - min(start_date))) / 60), 1 as time from drives where car_id = $car_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"parked (%)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-GrYlRd\"\n          },\n          \"custom\": {\n            \"axisPlacement\": \"auto\",\n            \"fillOpacity\": 100,\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineWidth\": 0,\n            \"spanNulls\": false\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"0\": {\n                  \"color\": \"#6ED0E0\",\n                  \"index\": 0,\n                  \"text\": \"online\"\n                },\n                \"1\": {\n                  \"color\": \"#8F3BB8\",\n                  \"index\": 1,\n                  \"text\": \"driving\"\n                },\n                \"2\": {\n                  \"color\": \"#F2CC0C\",\n                  \"index\": 2,\n                  \"text\": \"charging\"\n                },\n                \"3\": {\n                  \"color\": \"#FFB357\",\n                  \"index\": 3,\n                  \"text\": \"offline\"\n                },\n                \"4\": {\n                  \"color\": \"#56A64B\",\n                  \"index\": 4,\n                  \"text\": \"asleep\"\n                },\n                \"5\": {\n                  \"color\": \"#6ED0E0\",\n                  \"index\": 5,\n                  \"text\": \"online\"\n                },\n                \"6\": {\n                  \"color\": \"#E02F44\",\n                  \"index\": 6,\n                  \"text\": \"updating\"\n                },\n                \"null\": {\n                  \"index\": 7,\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"value\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"id\": 14,\n      \"options\": {\n        \"alignValue\": \"center\",\n        \"legend\": {\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"mergeValues\": true,\n        \"rowHeight\": 0.9,\n        \"showValue\": \"auto\",\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH states AS (\\n  SELECT\\n    unnest(ARRAY [start_date + interval '1 second', end_date]) AS date,\\n    unnest(ARRAY [2, 0]) AS state\\n  FROM charging_processes\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n  UNION\\n  SELECT\\n    unnest(ARRAY [start_date + interval '1 second', end_date]) AS date,\\n    unnest(ARRAY [1, 0]) AS state\\n  FROM drives\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n  UNION\\n  SELECT\\n    start_date AS date,\\n    CASE\\n      WHEN state = 'offline' THEN 3\\n      WHEN state = 'asleep' THEN 4\\n      WHEN state = 'online' THEN 5\\n    END AS state\\n  FROM states\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n  UNION\\n  SELECT\\n    unnest(ARRAY [start_date + interval '1 second', end_date]) AS date,\\n    unnest(ARRAY [6, 0]) AS state\\n  FROM updates\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n)\\nSELECT date AS \\\"time\\\", state\\nFROM states\\nWHERE \\n  date IS NOT NULL AND\\n  ($__timeFrom() :: timestamp - interval '30 day') < date AND \\n  date < ($__timeTo() :: timestamp + interval '30 day') \\nORDER BY date ASC, state ASC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"States\",\n      \"type\": \"state-timeline\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-2d\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"States\",\n  \"uid\": \"xo4BNRkZz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/statistics.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"filterable\": false,\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"noValue\": \"--\",\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"red\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Time driven\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"dtdurations\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 170\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Period\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Trip\",\n                    \"url\": \"/d/FkUpJpQZk/trip?from=${__data.fields.date_from}&to=${__data.fields.date_to}&var-car_id=$car_id\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 195\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Driving Efficiency\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percentunit\"\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"super-light-orange\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"light-orange\",\n                      \"value\": 0.65\n                    },\n                    {\n                      \"color\": \"light-green\",\n                      \"value\": 0.99\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"max\",\n                \"value\": 1.15\n              },\n              {\n                \"id\": \"min\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"mode\": \"lcd\",\n                  \"type\": \"gauge\"\n                }\n              },\n              {\n                \"id\": \"decimals\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Energy used\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Charging stats\",\n                    \"url\": \"/d/-pkIkhmRz/charging-stats?from=${__data.fields.date_from}&to=${__data.fields.date_to}&var-car_id=$car_id\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 120\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Ø Energy used / Charge\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 190\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Costs\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 75\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"# of Charges\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Charges\",\n                    \"url\": \"/d/TSmNYvRRk/charges?from=${__data.fields.date_from}&to=${__data.fields.date_to}&var-car_id=$car_id\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 110\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"# of Drives\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Drives\",\n                    \"url\": \"/d/Y8upc6ZRk/drives?from=${__data.fields.date_from}&to=${__data.fields.date_to}&var-car_id=$car_id\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 95\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/sum_distance_km/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Distance\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 100\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/avg_outside_temp_c/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"celsius\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Temp\"\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"super-light-blue\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"super-light-green\",\n                      \"value\": 10\n                    },\n                    {\n                      \"color\": \"super-light-red\",\n                      \"value\": 20\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 80\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/sum_distance_mi/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Distance\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 100\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/consumption_net_mi/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 170\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net)\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/consumption_gross_mi/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (gross)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 190\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/consumption_net_km/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 170\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/consumption_gross_km/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (gross)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 190\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/avg_outside_temp_f/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Temp\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"fahrenheit\"\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"super-light-blue\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"super-light-green\",\n                      \"value\": 50\n                    },\n                    {\n                      \"color\": \"super-light-red\",\n                      \"value\": 68\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 80\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"date_from\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"date_to\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Ø Cost / kWh\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"mappings\",\n                \"value\": [\n                  {\n                    \"options\": {\n                      \"NaN\": {\n                        \"index\": 0,\n                        \"text\": \"--\"\n                      }\n                    },\n                    \"type\": \"value\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 115\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Ø Cost / 100 km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 135\n              },\n              {\n                \"id\": \"mappings\",\n                \"value\": [\n                  {\n                    \"options\": {\n                      \"NaN\": {\n                        \"index\": 0,\n                        \"text\": \"--\"\n                      }\n                    },\n                    \"type\": \"value\"\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Consumption OH\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 140\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percentunit\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"mappings\",\n                \"value\": [\n                  {\n                    \"options\": {\n                      \"NaN\": {\n                        \"index\": 0,\n                        \"text\": \"--\"\n                      }\n                    },\n                    \"type\": \"value\"\n                  }\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 18,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 2,\n      \"maxPerRow\": 2,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"frameIndex\": 1,\n        \"showHeader\": true,\n        \"sortBy\": [\n          {\n            \"desc\": true,\n            \"displayName\": \"Starting at\"\n          }\n        ]\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\nSELECT\\n  duration_min > 1 AND\\n  distance > 1 AND\\n  ( \\n    start_position.usable_battery_level IS NULL OR\\n    (end_position.battery_level - end_position.usable_battery_level) = 0 \\n  ) AS is_sufficiently_precise,\\n  start_${preferred_range}_range_km - end_${preferred_range}_range_km AS range_diff,\\n  date_trunc('$period', timezone('UTC', start_date), '$__timezone') as date,\\n  drives.*\\nFROM drives\\n  LEFT JOIN positions start_position ON start_position_id = start_position.id\\n  LEFT JOIN positions end_position ON end_position_id = end_position.id)\\nSELECT\\n  EXTRACT(EPOCH FROM date)*1000 AS date_from,\\n  EXTRACT(EPOCH FROM date + interval '1 $period')*1000 AS date_to,\\n  CASE '$period'\\n    WHEN 'month' THEN to_char(timezone('$__timezone', date), 'YYYY Month')\\n    WHEN 'year' THEN to_char(timezone('$__timezone', date), 'YYYY')\\n    WHEN 'week' THEN 'week ' || to_char(timezone('$__timezone', date), 'WW') || ' starting ' || to_char(timezone('$__timezone', date), 'YYYY-MM-DD')\\n    ELSE to_char(timezone('$__timezone', date), 'YYYY-MM-DD')\\n  END AS display,\\n  date,\\n  sum(duration_min)*60 AS sum_duration_h, \\n  convert_km(max(end_km)::numeric - min(start_km)::numeric, '$length_unit') AS sum_distance_$length_unit,\\n  convert_celsius(avg(outside_temp_avg), '$temp_unit') AS avg_outside_temp_$temp_unit,\\n  count(*) AS cnt,\\n  case when sum(range_diff) > 0 then sum(distance)/sum(range_diff) else null end AS efficiency\\nFROM data WHERE\\n  car_id = $car_id AND\\n  $__timeFilter(start_date)\\nGROUP BY date\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n  SELECT\\n    charging_processes.*,\\n  \\tdate_trunc('$period', timezone('UTC', start_date), '$__timezone') as date\\n    FROM charging_processes)\\nSELECT\\n  EXTRACT(EPOCH FROM date)*1000 AS date_from,\\n  EXTRACT(EPOCH FROM date + interval '1 $period')*1000 AS date_to,\\n  CASE '$period'\\n    WHEN 'month' THEN to_char(timezone('$__timezone', date), 'YYYY Month')\\n    WHEN 'year' THEN to_char(timezone('$__timezone', date), 'YYYY')\\n    WHEN 'week' THEN 'week ' || to_char(timezone('$__timezone', date), 'WW') || ' starting ' || to_char(timezone('$__timezone', date), 'YYYY-MM-DD')\\n    ELSE to_char(timezone('$__timezone', date), 'YYYY-MM-DD')\\n  END AS display,\\n  date,\\n  sum(greatest(charge_energy_added,charge_energy_used)) AS sum_energy_used_kwh,\\n  sum(charge_energy_added) as sum_energy_added_kwh,\\n  sum(greatest(charge_energy_added,charge_energy_used)) / count(*) AS avg_energy_charged_kwh,\\n  sum(cost) AS cost_charges,\\n  count(*) AS cnt_charges\\nFROM data WHERE\\n  car_id = $car_id AND\\n  $__timeFilter(start_date) AND\\n  (charge_energy_added IS NULL OR charge_energy_added > 0.1)\\nGROUP BY date\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n  SELECT\\n    drives.*,\\n    date_trunc('$period', timezone('UTC', start_date), '$__timezone') as date\\n  FROM drives)\\nSELECT\\n  EXTRACT(EPOCH FROM date)*1000 AS date_from,\\n  EXTRACT(EPOCH FROM date + interval '1 $period')*1000 AS date_to,\\n  CASE '$period'\\n    WHEN 'month' THEN to_char(timezone('$__timezone', date), 'YYYY Month')\\n    WHEN 'year' THEN to_char(timezone('$__timezone', date), 'YYYY')\\n    WHEN 'week' THEN 'week ' || to_char(timezone('$__timezone', date), 'WW') || ' starting ' || to_char(timezone('$__timezone', date), 'YYYY-MM-DD')\\n    ELSE to_char(timezone('$__timezone', date), 'YYYY-MM-DD')\\n  END AS display,\\n  date,\\n  sum((start_${preferred_range}_range_km - end_${preferred_range}_range_km) * car.efficiency * 1000) / \\n  convert_km(sum(distance)::numeric, '$length_unit') as consumption_net_$length_unit\\nFROM data\\nJOIN cars car ON car.id = car_id\\nWHERE\\n  car_id = $car_id AND\\n  $__timeFilter(start_date)\\nGROUP BY date\",\n          \"refId\": \"C\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"-- Query shared between Charging Stats, Statistics & Trip Dashboards (with minor changes) - ensure to modify in all places when necessary\\n\\nwith drives_start_event as (\\n\\n    select\\n        'drive_start' as event, start_date as date, start_${preferred_range}_range_km as range, start_km as odometer, car_id\\n    from drives\\n    where car_id = $car_id and $__timeFilter(start_date) and 0 = $high_precision\\n\\n),\\n\\ndrives_end_event as (\\n\\n    select\\n        'drive_end' as event, end_date as date, end_${preferred_range}_range_km as range, end_km as odometer, car_id\\n    from drives\\n    where car_id = $car_id and $__timeFilter(start_date) and 0 = $high_precision\\n\\n),\\n\\ncharging_processes_start_event as (\\n\\n    select\\n        'charging_process_start' as event, start_date as date, start_${preferred_range}_range_km as range, p.odometer, cp.car_id\\n    from charging_processes cp\\n        inner join positions p on cp.position_id = p.id\\n    where cp.car_id = $car_id and $__timeFilter(start_date) and 0 = $high_precision\\n\\n),\\n\\ncharging_processes_end_event as (\\n\\n    select\\n        'charging_process_end' as event, end_date as date, end_${preferred_range}_range_km as range, p.odometer, cp.car_id\\n    from charging_processes cp\\n        inner join positions p on cp.position_id = p.id\\n    where cp.car_id = $car_id and $__timeFilter(start_date) and 0 = $high_precision\\n\\n),\\n\\npositions as (\\n\\n    select\\n        case\\n            when drive_id is not null and lead(drive_id) over w is not null then 'drive_start'\\n            else 'something'\\n        end as event,\\n        date, ${preferred_range}_battery_range_km as range, p.odometer, p.car_id\\n    from positions p\\n    where ideal_battery_range_km is not null and car_id = $car_id and 1 = $high_precision\\n    and (drive_id in (select id from drives where $__timeFilter(start_date)) or drive_id is null and $__timeFilter(date))\\n    window w as (order by date)\\n\\n),\\n\\ncombined as (\\n\\n    select * from drives_start_event\\n    union all\\n    select * from drives_end_event\\n    union all\\n    select * from charging_processes_start_event\\n    union all\\n    select * from charging_processes_end_event\\n    union all\\n    select * from positions\\n\\n),\\n\\nfinal as (\\n\\n    select\\n        car_id,\\n        date_trunc('$period', timezone('UTC', date), '$__timezone') as date,\\n        lead(odometer) over w - odometer as distance,\\n        case when event != 'drive_start' then greatest(range - lead(range) over w, 0) else range - lead(range) over w end as range_loss\\n    from combined\\n    window w as (order by date asc)\\n\\n)\\n\\nselect\\n    EXTRACT(EPOCH FROM date)*1000 AS date_from,\\n    EXTRACT(EPOCH FROM date + interval '1 $period')*1000 AS date_to,\\n    CASE '$period'\\n        WHEN 'month' THEN to_char(timezone('$__timezone', date), 'YYYY Month')\\n        WHEN 'year' THEN to_char(timezone('$__timezone', date), 'YYYY')\\n        WHEN 'week' THEN 'week ' || to_char(timezone('$__timezone', date), 'WW') || ' starting ' || to_char(timezone('$__timezone', date), 'YYYY-MM-DD')\\n        ELSE to_char(timezone('$__timezone', date), 'YYYY-MM-DD')\\n    END AS display,\\n    date,\\n    (sum(range_loss) * c.efficiency * 1000) / nullif(convert_km(sum(distance)::numeric, '$length_unit'), 0) as consumption_gross_$length_unit\\nfrom final\\n    inner join cars c on car_id = c.id\\ngroup by 1, 2, 3, 4, c.efficiency\",\n          \"refId\": \"D\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"per ${period}\",\n      \"transformations\": [\n        {\n          \"id\": \"merge\",\n          \"options\": {}\n        },\n        {\n          \"id\": \"seriesToColumns\",\n          \"options\": {\n            \"byField\": \"date\"\n          }\n        },\n        {\n          \"id\": \"sortBy\",\n          \"options\": {\n            \"fields\": {},\n            \"sort\": [\n              {\n                \"desc\": true,\n                \"field\": \"date\"\n              }\n            ]\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"avg_cost_kwh\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"cost_charges\"\n                }\n              },\n              \"operator\": \"/\",\n              \"right\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"sum_energy_used_kwh\"\n                }\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"avg_cost_added_kwh\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"cost_charges\"\n                }\n              },\n              \"operator\": \"/\",\n              \"right\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"sum_energy_added_kwh\"\n                }\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"cost_per_1000km\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"consumption_gross_km\"\n                }\n              },\n              \"operator\": \"*\",\n              \"right\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"avg_cost_added_kwh\"\n                }\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"cost_per_1000mi\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"consumption_gross_mi\"\n                }\n              },\n              \"operator\": \"*\",\n              \"right\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"avg_cost_added_kwh\"\n                }\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"avg_cost_km\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"cost_per_1000km\"\n                }\n              },\n              \"operator\": \"/\",\n              \"right\": {\n                \"fixed\": \"10\"\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"avg_cost_mi\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"cost_per_1000mi\"\n                }\n              },\n              \"operator\": \"/\",\n              \"right\": {\n                \"fixed\": \"10\"\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"overhead_pct_km_temp\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"consumption_net_km\"\n                }\n              },\n              \"operator\": \"/\",\n              \"right\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"consumption_gross_km\"\n                }\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"overhead_pct_km\",\n            \"binary\": {\n              \"left\": {\n                \"fixed\": \"1\"\n              },\n              \"operator\": \"-\",\n              \"right\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"overhead_pct_km_temp\"\n                }\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"overhead_pct_mi_temp\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"consumption_net_mi\"\n                }\n              },\n              \"operator\": \"/\",\n              \"right\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"consumption_gross_mi\"\n                }\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"overhead_pct_mi\",\n            \"binary\": {\n              \"left\": {\n                \"fixed\": \"1\"\n              },\n              \"operator\": \"-\",\n              \"right\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"overhead_pct_mi_temp\"\n                }\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"organize\",\n          \"options\": {\n            \"excludeByName\": {\n              \"avg_cost_added_kwh\": true,\n              \"cost_per_1000km\": true,\n              \"cost_per_1000mi\": true,\n              \"date\": true,\n              \"overhead_pct_km_temp\": true,\n              \"overhead_pct_mi_temp\": true,\n              \"sum_energy_added_kwh\": true\n            },\n            \"includeByName\": {},\n            \"indexByName\": {\n              \"avg_cost_km\": 12,\n              \"avg_cost_kwh\": 11,\n              \"avg_cost_mi\": 12,\n              \"avg_energy_charged_kwh\": 8,\n              \"avg_outside_temp_c\": 4,\n              \"avg_outside_temp_f\": 4,\n              \"cnt\": 5,\n              \"cnt_charges\": 10,\n              \"consumption_gross_km\": 14,\n              \"consumption_gross_mi\": 14,\n              \"consumption_net_km\": 13,\n              \"consumption_net_mi\": 13,\n              \"cost_charges\": 9,\n              \"date\": 1,\n              \"date_from\": 15,\n              \"date_to\": 16,\n              \"display\": 0,\n              \"efficiency\": 6,\n              \"overhead_pct_km\": 17,\n              \"overhead_pct_mi\": 17,\n              \"sum_distance_km\": 3,\n              \"sum_distance_mi\": 3,\n              \"sum_duration_h\": 2,\n              \"sum_energy_used_kwh\": 7\n            },\n            \"renameByName\": {\n              \"avg_cost_km\": \"Ø Cost / 100 km\",\n              \"avg_cost_kwh\": \"Ø Cost / kWh\",\n              \"avg_cost_mi\": \"Ø Cost / 100 mi\",\n              \"avg_energy_charged_kwh\": \"Ø Energy used / Charge\",\n              \"avg_outside_temp_c\": \"\",\n              \"avg_outside_temp_f\": \"\",\n              \"cnt\": \"# of Drives\",\n              \"cnt_charges\": \"# of Charges\",\n              \"consumption_gross_km\": \"\",\n              \"consumption_gross_mi\": \"\",\n              \"consumption_net_km\": \"\",\n              \"consumption_net_mi\": \"\",\n              \"cost_charges\": \"Costs\",\n              \"date\": \"\",\n              \"date_from\": \"\",\n              \"date_to\": \"\",\n              \"display\": \"Period\",\n              \"efficiency\": \"Driving Efficiency\",\n              \"overhead_pct_km\": \"Consumption OH\",\n              \"overhead_pct_mi\": \"Consumption OH\",\n              \"sum_distance_km\": \"\",\n              \"sum_distance_mi\": \"\",\n              \"sum_duration_h\": \"Time driven\",\n              \"sum_energy_used_kwh\": \"Energy used\"\n            }\n          }\n        }\n      ],\n      \"type\": \"table\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"length unit\",\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_temperature from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"temperature unit\",\n        \"name\": \"temp_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_temperature from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"month\",\n          \"value\": \"month\"\n        },\n        \"includeAll\": false,\n        \"label\": \"Period\",\n        \"name\": \"period\",\n        \"options\": [],\n        \"query\": \"day,week,month,year\",\n        \"type\": \"custom\",\n        \"valuesFormat\": \"csv\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"0\",\n          \"value\": \"0\"\n        },\n        \"description\": \"When enabled \\\"Ø Consumption (gross)\\\" will be calculated via Positions instead of Charging Processes and Drives.\\n\\nWhile being more accurate (especially for shorter periods) this will be slow on slow hardware!\",\n        \"includeAll\": false,\n        \"label\": \"High Precision\",\n        \"name\": \"high_precision\",\n        \"options\": [],\n        \"query\": \"no : 0, yes : 1\",\n        \"type\": \"custom\",\n        \"valuesFormat\": \"csv\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-10y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Statistics\",\n  \"uid\": \"1EZnXszMk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/timeline.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"asDropdown\": false,\n      \"icon\": \"dashboard\",\n      \"includeVars\": false,\n      \"keepTime\": false,\n      \"tags\": [],\n      \"targetBlank\": false,\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"includeVars\": false,\n      \"keepTime\": false,\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"targetBlank\": false,\n      \"title\": \"Dashboards\",\n      \"tooltip\": \"\",\n      \"type\": \"dashboards\",\n      \"url\": \"\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"filterable\": false,\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Start\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"dateTimeAsLocal\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 210\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"\",\n                    \"url\": \"/d/FkUpJpQZk/trip?from=${__data.fields.start_date_ts}&to=${__data.fields.end_date_ts}&var-car_id=$car_id\"\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"SoC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 65\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"SoC Diff\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 80\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_path\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"end_path\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Action\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 150\n              },\n              {\n                \"id\": \"custom.filterable\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"kWh\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 100\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Energy Diff\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Duration\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"m\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 100\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Start Address\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Create or edit geo-fence\",\n                    \"url\": \"${base_url:raw}/geo-fences/${__data.fields.start_path:raw}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.filterable\",\n                \"value\": true\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"End Address\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Create or edit geo-fence\",\n                    \"url\": \"${base_url:raw}/geo-fences/${__data.fields.end_path:raw}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.filterable\",\n                \"value\": true\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_date_ts\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"end_date_ts\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"odometer_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 100\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_km/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_mi/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_c/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"celsius\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_f/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"fahrenheit\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/odometer_.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Odometer\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 100\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/distance_.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Distance\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 100\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/range_diff_.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range Diff\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 100\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/outside_temp_avg_.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Temp\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 75\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/end_range_.*/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 100\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Action\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Slot details\",\n                    \"url\": \"${__data.fields.slotlink:raw}\"\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"slotlink\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 22,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 2,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": [\n          {\n            \"desc\": true,\n            \"displayName\": \"Start\"\n          }\n        ]\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"-- CTE is used in Parking Query\\r\\nwith drives_and_charging_processes as (\\r\\n\\r\\n    select 'Drive' as activity, d.start_date, d.end_date, d.start_position_id, d.end_position_id, d.end_address_id, d.end_geofence_id, d.start_${preferred_range}_range_km, d.end_${preferred_range}_range_km, d.car_id, d.outside_temp_avg from drives d\\r\\n    \\r\\n    union all\\r\\n    \\r\\n    select 'Charging Process' as activity, cp.start_date, cp.end_date, cp.position_id as start_position_id, cp.position_id as end_position_id, cp.address_id as end_address_id, cp.geofence_id as end_geofence_id, cp.start_${preferred_range}_range_km, cp.end_${preferred_range}_range_km, cp.car_id, cp.outside_temp_avg from charging_processes cp\\r\\n\\r\\n)\\r\\n\\r\\nSELECT\\r\\n  start_date AS \\\"Start\\\",\\r\\n  end_date AS \\\"End\\\",\\r\\n  FLOOR(EXTRACT(EPOCH FROM start_date))*1000 AS start_date_ts,\\r\\n  CEIL(EXTRACT(EPOCH FROM end_date))*1000 AS end_date_ts,\\r\\n  '🚗 Driving' AS \\\"Action\\\",\\r\\n  drives.duration_min AS \\\"Duration\\\",\\r\\n  CASE WHEN start_geofence_id IS NULL THEN CONCAT('new?lat=', TP1.latitude, '&lng=', TP1.longitude)\\r\\n       WHEN start_geofence_id IS NOT NULL THEN CONCAT(start_geofence_id, '/edit')\\r\\n  END AS start_path,\\r\\n  CASE WHEN end_geofence_id IS NULL THEN CONCAT('new?lat=', TP2.latitude, '&lng=', TP2.longitude)\\r\\n       WHEN start_geofence_id IS NOT NULL THEN CONCAT(end_geofence_id, '/edit')\\r\\n  END AS end_path,\\r\\n  COALESCE(start_geofence.name, CONCAT_WS(', ', COALESCE(start_address.name, nullif(CONCAT_WS(' ', start_address.road, start_address.house_number), '')), start_address.city)) AS \\\"Start Address\\\",\\r\\n  COALESCE(end_geofence.name, CONCAT_WS(', ', COALESCE(end_address.name, nullif(CONCAT_WS(' ', end_address.road, end_address.house_number), '')), end_address.city)) AS \\\"End Address\\\",\\r\\n  convert_km(end_km::NUMERIC, '$length_unit') AS odometer_$length_unit,\\r\\n  convert_km(distance::NUMERIC, '$length_unit') AS distance_$length_unit,\\r\\n  convert_km(end_${preferred_range}_range_km::NUMERIC, '$length_unit') AS end_range_$length_unit,\\r\\n  (end_${preferred_range}_range_km - start_${preferred_range}_range_km) * car.efficiency AS \\\"kWh\\\",\\r\\n  convert_km((end_${preferred_range}_range_km - start_${preferred_range}_range_km)::NUMERIC, '$length_unit') AS range_diff_$length_unit,\\r\\n  TP2.battery_level AS \\\"SoC\\\",\\r\\n  TP2.battery_level-TP1.battery_level AS \\\"SoC Diff\\\",\\r\\n  convert_celsius(outside_temp_avg, '$temp_unit') AS outside_temp_avg_$temp_unit,\\r\\n  CONCAT('d/zm7wN6Zgz/drive-details?from=', FLOOR(EXTRACT(EPOCH FROM start_date))*1000, '&to=', CEIL(EXTRACT(EPOCH FROM end_date))*1000, '&var-car_id=', drives.car_id, '&var-drive_id=', drives.id) AS slotlink\\r\\nFROM drives\\r\\n  INNER JOIN cars AS car ON drives.car_id = car.id\\r\\n  INNER JOIN positions AS TP1 on drives.start_position_id = TP1.id\\r\\n  INNER JOIN positions AS TP2 on drives.end_position_id = TP2.id\\r\\n  INNER JOIN addresses start_address ON start_address_id = start_address.id\\r\\n  INNER JOIN addresses end_address ON  end_address_id = end_address.id\\r\\n  LEFT JOIN geofences start_geofence ON start_geofence_id = start_geofence.id\\r\\n  LEFT JOIN geofences end_geofence ON end_geofence_id = end_geofence.id\\r\\nWHERE \\r\\n  $__timeFilter(drives.start_date)\\r\\n  AND drives.car_id = $car_id\\r\\n  AND '🚗 Driving' in ($action_filter)\\r\\n  AND\\r\\n    (COALESCE(start_geofence.name, CONCAT_WS(', ', COALESCE(start_address.name, nullif(CONCAT_WS(' ', start_address.road, start_address.house_number), '')), start_address.city))::TEXT ILIKE'%$text_filter%' or\\r\\n    COALESCE(end_geofence.name, CONCAT_WS(', ', COALESCE(end_address.name, nullif(CONCAT_WS(' ', end_address.road, end_address.house_number), '')), end_address.city))::TEXT ILIKE'%$text_filter%')\\r\\n\\r\\nUNION\\r\\nSELECT\\r\\n  start_date AS \\\"Start\\\",\\r\\n  end_date AS \\\"End\\\",\\r\\n  FLOOR(EXTRACT(EPOCH FROM start_date))*1000 AS start_date_ts,\\r\\n  CEIL(EXTRACT(EPOCH FROM end_date))*1000 AS end_date_ts,\\r\\n  '🔋 Charging' AS \\\"Action\\\",\\r\\n  charging_processes.duration_min AS \\\"Duration\\\",\\r\\n  CASE WHEN geofence_id IS NULL THEN CONCAT('new?lat=', address.latitude, '&lng=', address.longitude)\\r\\n       WHEN geofence_id IS NOT NULL THEN CONCAT(geofence_id, '/edit')\\r\\n  END AS start_path,\\r\\n  NULL AS end_path,\\r\\n  COALESCE(geofence.name, CONCAT_WS(', ', COALESCE(address.name, nullif(CONCAT_WS(' ', address.road, address.house_number), '')), address.city)) AS \\\"Start Address\\\",\\r\\n  '' AS \\\"End Address\\\",\\r\\n  convert_km(position.odometer::NUMERIC, '$length_unit') AS odometer_$length_unit,\\r\\n  NULL AS distance_$length_unit,\\r\\n  convert_km(end_${preferred_range}_range_km::NUMERIC, '$length_unit') AS end_range_$length_unit,\\r\\n  charging_processes.charge_energy_added AS \\\"kWh\\\",\\r\\n  convert_km((end_${preferred_range}_range_km - start_${preferred_range}_range_km)::NUMERIC, '$length_unit') AS range_diff_$length_unit, \\r\\n  end_battery_level AS \\\"SoC\\\",\\r\\n  end_battery_level - start_battery_level AS \\\"SoC Diff\\\",\\r\\n  convert_celsius(outside_temp_avg, '$temp_unit') AS outside_temp_avg_$temp_unit,\\r\\n  CONCAT('d/BHhxFeZRz/charge-details?from=', FLOOR(EXTRACT(EPOCH FROM start_date))*1000, '&to=', CEIL(EXTRACT(EPOCH FROM end_date))*1000, '&var-car_id=', charging_processes.car_id, '&var-charging_process_id=', charging_processes.id) AS slotlink\\r\\nFROM charging_processes\\r\\n  INNER JOIN positions AS position ON position_id = position.id\\r\\n  INNER JOIN addresses AS address ON address_id = address.id\\r\\n  LEFT JOIN geofences AS geofence ON geofence_id = geofence.id\\r\\nWHERE\\r\\n  $__timeFilter(charging_processes.start_date)\\r\\n  AND charging_processes.charge_energy_added > 0\\r\\n  AND charging_processes.car_id = $car_id\\r\\n  AND '🔋 Charging' in ($action_filter)\\r\\n  AND COALESCE(geofence.name, CONCAT_WS(', ', COALESCE(address.name, nullif(CONCAT_WS(' ', address.road, address.house_number), '')), address.city))::TEXT ILIKE'%$text_filter%'\\r\\nUNION\\r\\nSELECT\\r\\n  d.end_date AS \\\"Start\\\",\\r\\n  LEAD(d.start_date) over w AS \\\"End\\\",\\r\\n  CEIL(EXTRACT(EPOCH FROM d.end_date)) * 1000 AS start_date_ts,\\r\\n  FLOOR(EXTRACT(EPOCH FROM LEAD(d.start_date) over w))*1000 AS end_date_ts,\\r\\n  '🅿️ Parking' AS \\\"Action\\\",\\r\\n  EXTRACT(EPOCH FROM LEAD(d.start_date) over w - d.end_date)/60 AS \\\"Duration\\\",\\r\\n  CASE WHEN d.end_geofence_id IS NULL THEN CONCAT('new?lat=', end_position.latitude, '&lng=', end_position.longitude)\\r\\n       WHEN d.end_geofence_id IS NOT NULL THEN CONCAT(d.end_geofence_id, '/edit')\\r\\n  END AS start_path,\\r\\n  NULL AS end_path,\\r\\n  COALESCE(geofence.name, CONCAT_WS(', ', COALESCE(address.name, nullif(CONCAT_WS(' ', address.road, address.house_number), '')), address.city)) AS \\\"Start Address\\\",\\r\\n  '' AS \\\"End Address\\\",\\r\\n  convert_km(end_position.odometer::NUMERIC, '$length_unit') AS odometer_$length_unit,\\r\\n  NULL AS distance_$length_unit,\\r\\n  convert_km(LEAD(d.start_${preferred_range}_range_km) over w::NUMERIC, '$length_unit') AS end_range_$length_unit,\\r\\n  ((LEAD(d.start_${preferred_range}_range_km) over w + (LEAD(start_position.odometer) over w - end_position.odometer)) - d.end_${preferred_range}_range_km) * car.efficiency AS \\\"kWh\\\",\\r\\n  convert_km(((LEAD(d.start_${preferred_range}_range_km) over w + (LEAD(start_position.odometer) over w - end_position.odometer)) - d.end_${preferred_range}_range_km)::NUMERIC, '$length_unit') AS range_diff_$length_unit,\\r\\n  LEAD(start_position.battery_level) over w AS \\\"SoC\\\",\\r\\n  LEAD(start_position.battery_level) over w - end_position.battery_level AS \\\"SoC Diff\\\",\\r\\n  convert_celsius(outside_temp_avg, '$temp_unit') AS outside_temp_avg_$temp_unit,\\r\\n  CONCAT('d/FkUpJpQZk/trip?from=', CEIL(EXTRACT(EPOCH FROM d.end_date))*1000, '&to=', FLOOR(EXTRACT(EPOCH FROM LEAD(d.start_date) over w))*1000, '&var-car_id=', d.car_id) AS slotlink\\r\\nFROM drives_and_charging_processes AS d\\r\\n  INNER JOIN cars AS car ON d.car_id = car.id\\r\\n  INNER JOIN positions AS start_position on d.start_position_id = start_position.id\\r\\n  INNER JOIN positions AS end_position on d.end_position_id = end_position.id\\r\\n  INNER JOIN addresses AS address ON d.end_address_id = address.id\\r\\n  LEFT JOIN geofences AS geofence ON d.end_geofence_id = geofence.id\\r\\nWHERE\\r\\n  $__timeFilter(d.end_date)\\r\\n  AND d.car_id=$car_id\\r\\n  AND '🅿️ Parking' in ($action_filter)\\r\\n  AND COALESCE(geofence.name, CONCAT_WS(', ', COALESCE(address.name, nullif(CONCAT_WS(' ', address.road, address.house_number), '')), address.city))::TEXT ILIKE'%$text_filter%'\\r\\nWINDOW w as (ORDER BY d.start_date ASC)\\r\\n\\r\\nUNION\\r\\nSELECT\\r\\n\\tT1.end_date +(1 * interval '1 second') AS \\\"Start\\\", -- added 1 sec to get it after the corresponding Parking row\\r\\n\\tT2.start_date AS \\\"End\\\",\\r\\n\\tCEIL(EXTRACT(EPOCH FROM T1.end_date)) * 1000 - 1 AS start_date_ts,\\r\\n\\tFLOOR(EXTRACT(EPOCH FROM T2.start_date)) * 1000 - 1 AS end_date_ts,\\r\\n\\t'❓ Missing' AS \\\"Action\\\",\\r\\n\\t-- EXTRACT(EPOCH FROM T2.start_date - T1.end_date)/60 AS \\\"Duration\\\",\\r\\n\\tNULL AS \\\"Duration\\\",\\r\\n\\tCASE WHEN T1.end_geofence_id IS NULL THEN CONCAT('new?lat=', TP1.latitude, '&lng=', TP1.longitude)\\r\\n\\t\\tWHEN T1.end_geofence_id IS NOT NULL THEN CONCAT(T1.end_geofence_id, '/edit')\\r\\n\\tEND AS start_path,\\r\\n\\tCASE WHEN T2.start_geofence_id IS NULL THEN CONCAT('new?lat=', TP2.latitude, '&lng=', TP2.longitude)\\r\\n\\t\\tWHEN T2.start_geofence_id IS NOT NULL THEN CONCAT(T2.start_geofence_id, '/edit')\\r\\n\\tEND AS end_path,\\r\\n\\tCOALESCE(start_geofence.name, CONCAT_WS(', ', COALESCE(start_address.name, nullif(CONCAT_WS(' ', start_address.road, start_address.house_number), '')), start_address.city)) AS \\\"Start Address\\\",\\r\\n\\tCOALESCE(end_geofence.name, CONCAT_WS(', ', COALESCE(end_address.name, nullif(CONCAT_WS(' ', end_address.road, end_address.house_number), '')), end_address.city)) AS \\\"End Address\\\",\\r\\n\\tconvert_km(TP2.odometer::NUMERIC, '$length_unit') AS odometer_$length_unit,\\r\\n\\tconvert_km((TP2.odometer - TP1.odometer)::NUMERIC, '$length_unit') AS distance_$length_unit,\\r\\n  convert_km(T2.end_${preferred_range}_range_km::NUMERIC, '$length_unit') AS end_range_$length_unit,\\r\\n\\t((TP2.${preferred_range}_battery_range_km + (TP2.odometer - TP1.odometer)) - TP1.${preferred_range}_battery_range_km) * car.efficiency AS \\\"kWh\\\",\\r\\n\\tconvert_km(((TP2.${preferred_range}_battery_range_km + (TP2.odometer - TP1.odometer)) - TP1.${preferred_range}_battery_range_km)::NUMERIC, '$length_unit') AS range_diff_$length_unit,\\r\\n\\tNULL AS \\\"SoC\\\",\\r\\n\\tNULL AS \\\"SoC Diff\\\",\\r\\n\\tNULL AS outside_temp_avg_$temp_unit,\\r\\n\\tNULL AS slotlink\\r\\n\\t-- TP2.battery_level AS \\\"SoC\\\",\\r\\n\\t-- TP2.battery_level-TP1.battery_level AS \\\"SoC Diff\\\",\\r\\n\\t-- (T1.outside_temp_avg+T2.outside_temp_avg)/2 AS outside_temp_avg_$temp_unit\\r\\nFROM drives AS T1\\r\\n  INNER JOIN cars AS car ON T1.car_id = car.id\\r\\n\\tINNER JOIN (SELECT d.*, LAG(id) OVER (ORDER BY id ASC) AS previous_id FROM drives d WHERE d.car_id = $car_id) AS T2 ON T1.id = T2.previous_id\\r\\n\\tINNER JOIN positions AS TP1 ON T1.end_position_id = TP1.id\\r\\n\\tINNER JOIN positions AS TP2 ON T2.start_position_id = TP2.id\\r\\n\\tINNER JOIN addresses AS start_address ON T1.end_address_id = start_address.id\\r\\n\\tINNER JOIN addresses AS end_address ON T2.start_address_id = end_address.id\\r\\n\\tLEFT JOIN geofences AS start_geofence ON T1.end_geofence_id = start_geofence.id\\r\\n\\tLEFT JOIN geofences AS end_geofence ON T2.start_geofence_id = end_geofence.id\\r\\nWHERE\\r\\n\\t$__timeFilter(T1.end_date)\\r\\n\\tAND TP2.odometer - TP1.odometer > 0.5\\r\\n  AND T1.end_address_id <> T2.start_address_id AND ((COALESCE(T1.end_geofence_id, 0) <> COALESCE(T2.start_geofence_id, 0)) OR (T1.end_geofence_id IS NULL AND T2.start_geofence_id IS NULL))\\r\\n  AND '❓ Missing' in ($action_filter)\\r\\n\\tAND (\\r\\n\\t  (COALESCE(start_geofence.name, CONCAT_WS(', ', COALESCE(start_address.name, nullif(CONCAT_WS(' ', start_address.road, start_address.house_number), '')), start_address.city))::TEXT ILIKE'%$text_filter%') or\\r\\n\\t  (COALESCE(end_geofence.name, CONCAT_WS(', ', COALESCE(end_address.name, nullif(CONCAT_WS(' ', end_address.road, end_address.house_number), '')), end_address.city)))::TEXT ILIKE'%$text_filter%')\\r\\nUNION\\r\\nSELECT\\r\\n  start_date AS \\\"Start\\\",\\r\\n  end_date AS \\\"End\\\",\\r\\n  FLOOR(EXTRACT(EPOCH FROM start_date))*1000 AS start_date_ts, \\r\\n  CEIL(EXTRACT(EPOCH FROM end_date))*1000 AS end_date_ts, \\r\\n  '💾 Updating' AS \\\"Action\\\",\\r\\n\\tEXTRACT(EPOCH FROM end_date - start_date)/60  AS \\\"Duration\\\",\\r\\n  NULL AS start_path,\\r\\n  NULL AS end_path,\\r\\n  version AS \\\"Start Address\\\",\\r\\n  '' AS \\\"End Address\\\",\\r\\n  NULL AS odometer_$length_unit,\\r\\n  NULL AS distance_$length_unit,\\r\\n  NULL AS end_range_$length_unit,\\r\\n  NULL AS \\\"kWh\\\",\\r\\n  NULL AS range_diff_$length_unit,\\r\\n  NULL AS \\\"SoC\\\",\\r\\n  NULL AS \\\"SoC Diff\\\",\\r\\n  NULL AS outside_temp_avg_$temp_unit,\\r\\n  CONCAT('https://www.notateslaapp.com/software-updates/version/', split_part(version, ' ', 1), '/release-notes') AS slotlink\\r\\nFROM updates\\r\\nWHERE \\r\\n  $__timeFilter(start_date)\\r\\n  AND car_id = $car_id \\r\\n  AND '💾 Updating' in ($action_filter)\\r\\n  AND version::TEXT ILIKE'%$text_filter%'\\r\\n\\r\\nORDER BY \\\"Start\\\" DESC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Timeline\",\n      \"transformations\": [\n        {\n          \"id\": \"organize\",\n          \"options\": {\n            \"excludeByName\": {\n              \"End\": true,\n              \"start_date_ts\": false\n            },\n            \"indexByName\": {\n              \"Action\": 2,\n              \"Duration\": 7,\n              \"End\": 1,\n              \"End Address\": 4,\n              \"SoC\": 15,\n              \"SoC Diff\": 16,\n              \"Start\": 0,\n              \"Start Address\": 3,\n              \"distance_km\": 8,\n              \"distance_mi\": 9,\n              \"end_date_ts\": 22,\n              \"end_path\": 20,\n              \"end_range_km\": 10,\n              \"end_range_mi\": 11,\n              \"kWh\": 13,\n              \"odometer_km\": 5,\n              \"odometer_mi\": 6,\n              \"outside_temp_avg_c\": 17,\n              \"outside_temp_avg_f\": 18,\n              \"range_diff_km\": 12,\n              \"range_diff_mi\": 13,\n              \"start_date_ts\": 21,\n              \"start_path\": 19\n            },\n            \"renameByName\": {\n              \"action\": \"\",\n              \"end_address\": \"End\",\n              \"km_diff\": \"Km\",\n              \"kwh\": \"\",\n              \"minutediff\": \"Time\",\n              \"odometer\": \"\",\n              \"outside_temp_avg\": \"Temperature\",\n              \"rangediff\": \"Range Difference\",\n              \"soc\": \"\",\n              \"soc_diff\": \"SoC Difference\",\n              \"start_address\": \"Start\",\n              \"start_date\": \"Date\",\n              \"start_date_ts\": \"\"\n            }\n          }\n        }\n      ],\n      \"type\": \"table\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"includeAll\": true,\n        \"label\": \"Action\",\n        \"multi\": true,\n        \"name\": \"action_filter\",\n        \"options\": [],\n        \"query\": \"🚗 Driving,🔋 Charging,🅿️ Parking,❓ Missing,💾 Updating\",\n        \"type\": \"custom\",\n        \"valuesFormat\": \"csv\"\n      },\n      {\n        \"current\": {\n          \"text\": \"\",\n          \"value\": \"\"\n        },\n        \"label\": \"Address Filter\",\n        \"name\": \"text_filter\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"\",\n            \"value\": \"\"\n          }\n        ],\n        \"query\": \"\",\n        \"type\": \"textbox\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"length unit\",\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_temperature from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"temperature unit\",\n        \"name\": \"temp_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_temperature from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-7d\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Timeline\",\n  \"uid\": \"SUBgwtigz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/trip.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 1,\n  \"links\": [\n    {\n      \"icon\": \"doc\",\n      \"tags\": [],\n      \"targetBlank\": true,\n      \"title\": \"Select last three drives\",\n      \"type\": \"link\",\n      \"url\": \"/d/FkUpJpQZk/trip?from=$from\"\n    },\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 15,\n        \"w\": 13,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 6,\n      \"maxDataPoints\": 500,\n      \"options\": {\n        \"basemap\": {\n          \"config\": {},\n          \"name\": \"Layer 0\",\n          \"type\": \"osm-standard\"\n        },\n        \"controls\": {\n          \"mouseWheelZoom\": true,\n          \"showAttribution\": true,\n          \"showDebug\": false,\n          \"showMeasure\": false,\n          \"showScale\": false,\n          \"showZoom\": true\n        },\n        \"layers\": [\n          {\n            \"config\": {\n              \"arrow\": 0,\n              \"style\": {\n                \"color\": {\n                  \"fixed\": \"dark-blue\"\n                },\n                \"lineWidth\": 2,\n                \"opacity\": 1,\n                \"rotation\": {\n                  \"fixed\": 0,\n                  \"max\": 360,\n                  \"min\": -360,\n                  \"mode\": \"mod\"\n                },\n                \"size\": {\n                  \"fixed\": 3,\n                  \"max\": 15,\n                  \"min\": 2\n                },\n                \"symbol\": {\n                  \"fixed\": \"img/icons/marker/circle.svg\",\n                  \"mode\": \"fixed\"\n                },\n                \"symbolAlign\": {\n                  \"horizontal\": \"center\",\n                  \"vertical\": \"center\"\n                },\n                \"textConfig\": {\n                  \"fontSize\": 12,\n                  \"offsetX\": 0,\n                  \"offsetY\": 0,\n                  \"textAlign\": \"center\",\n                  \"textBaseline\": \"middle\"\n                }\n              }\n            },\n            \"name\": \"Layer 1\",\n            \"tooltip\": true,\n            \"type\": \"route\"\n          }\n        ],\n        \"tooltip\": {\n          \"mode\": \"details\"\n        },\n        \"view\": {\n          \"allLayers\": true,\n          \"id\": \"fit\",\n          \"lat\": 0,\n          \"lon\": 0,\n          \"noRepeat\": false,\n          \"zoom\": 15\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"with unioned_positions as (\\n\\n    -- fetch all positions based on start_date of drives so the map aligns with data shown in other panels\\n    select p.*\\n    from positions p\\n             inner join drives d on p.drive_id = d.id\\n    where p.car_id = $car_id and $__timeFilter(d.start_date)\\n\\n    union all\\n\\n    -- get all positions logged while not driving\\n    select *\\n    from positions p\\n    where p.car_id = $car_id and drive_id is null and $__timeFilter(date))\\n\\nSELECT $__timeGroup(date, '5s')                AS time,\\n       avg(latitude)                           AS latitude,\\n       avg(longitude)                          AS longitude\\nfrom unioned_positions\\nGROUP BY 1\\nORDER BY 1 ASC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"transparent\": true,\n      \"type\": \"geomap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"km\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Mileage\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"mi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Mileage\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 13,\n        \"y\": 1\n      },\n      \"id\": 10,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ]\n        },\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT convert_km((max(odometer) - min(odometer))::numeric, '$length_unit') as \\\"distance_$length_unit\\\"\\nFROM positions\\nWHERE car_id = $car_id AND ideal_battery_range_km IS NOT NULL\\nand (drive_id in (select id from drives where $__timeFilter(start_date)) or drive_id is null and $__timeFilter(date))\\nORDER BY 1\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"unit\": \"dtdurations\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charging (AC)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#73BF69\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charging (DC)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#FADE2A\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"driving\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"#5794F2\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 5,\n        \"x\": 19,\n        \"y\": 1\n      },\n      \"id\": 38,\n      \"maxDataPoints\": 3,\n      \"options\": {\n        \"displayLabels\": [\n          \"name\",\n          \"percent\"\n        ],\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"sort\": \"desc\",\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tnow() AS time,\\n\\tsum(extract(epoch FROM end_position.date - start_position.date)) as duration_sec,\\n\\t'driving' as metric\\nFROM\\n\\tdrives\\n\\tJOIN positions start_position ON start_position_id = start_position.id\\n\\tJOIN positions end_position ON end_position_id = end_position.id\\nWHERE\\n\\tdrives.car_id = $car_id\\n\\tAND $__timeFilter(start_date)\\n\\tAND end_date IS NOT NULL;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH charges_current AS (\\n  SELECT\\n\\t\\tcp.id,\\n  \\textract(epoch FROM LEAST(end_date, $__timeTo()) - GREATEST(start_date, $__timeFrom())) as duration_sec,\\n\\t\\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'charging (DC)'\\n\\t\\t\\t\\t ELSE 'charging (AC)'\\n\\t\\tEND AS current\\n\\tFROM charging_processes cp\\n  RIGHT JOIN charges ON cp.id = charges.charging_process_id\\n  WHERE\\n\\t  cp.car_id = $car_id\\n\\t  AND cp.charge_energy_added > 0\\n  \\tAND ($__timeFilter(start_date) OR $__timeFilter(end_date))\\n  GROUP BY 1,2\\n),\\n\\ncharges_total AS (\\n  SELECT\\n  \\tsum(duration_sec) AS duration_sec,\\n  \\tcurrent AS metric\\n  FROM charges_current\\n  GROUP BY 2\\n  ORDER BY metric\\n)\\n\\nSELECT\\n\\tnow() AS time,\\n\\tcoalesce(duration_sec, 0) as duration_sec,\\n  metric\\nFROM\\n\\tcharges_total;\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Time spent\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitykmh\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Speed excl. breaks\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitymph\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Speed excl. breaks\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 13,\n        \"y\": 3\n      },\n      \"id\": 26,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  convert_km(sum(end_position.odometer - start_position.odometer)::numeric, '$length_unit') / (sum(extract(epoch FROM end_position.date - start_position.date)) / 3600) as \\\"speed_$length_unit\\\"\\nFROM\\n\\tdrives\\n\\tJOIN positions start_position ON start_position_id = start_position.id\\n\\tJOIN positions end_position ON end_position_id = end_position.id\\nWHERE\\n\\tdrives.car_id = $car_id\\n\\tAND $__timeFilter(start_date)\\n\\tAND end_date IS NOT NULL;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitykmh\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Speed incl. DC charging\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"speed_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"velocitymph\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Speed incl. DC charging\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 13,\n        \"y\": 5\n      },\n      \"id\": 28,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH dc_charges AS (\\n  SELECT\\n\\t\\tcp.id,\\n    extract(epoch FROM cp.end_date - cp.start_date) as duration_sec,\\n\\t\\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'DC'\\n\\t\\t\\t\\t ELSE 'AC'\\n\\t\\tEND AS current\\n\\tFROM charging_processes cp\\n  RIGHT JOIN charges ON cp.id = charges.charging_process_id\\n  WHERE\\n\\t  cp.car_id = $car_id\\n\\t  AND cp.charge_energy_added > 0\\n    AND ($__timeFilter(start_date) OR $__timeFilter(end_date))\\n  GROUP BY 1,2\\n),\\n\\ndata AS (\\n  (\\n  SELECT\\n    sum(end_position.odometer - start_position.odometer) as distance, \\n    sum(extract(epoch FROM end_position.date - start_position.date)) as duration_sec\\n  FROM\\n    drives\\n    JOIN positions start_position ON start_position_id = start_position.id\\n    JOIN positions end_position ON end_position_id = end_position.id\\n  WHERE\\n    drives.car_id = $car_id\\n    AND $__timeFilter(start_date)\\n  ) UNION ALL (\\n  SELECT\\n    NULL as distance,\\n    sum(duration_sec)\\n  FROM\\n    dc_charges\\n  WHERE\\n   current = 'DC'\\n  )\\n)\\n\\nSELECT convert_km(sum(distance)::numeric, '$length_unit') / (sum(duration_sec) / 3600) as \\\"speed_$length_unit\\\"\\nfrom data\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net)\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net)\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 13,\n        \"y\": 7\n      },\n      \"id\": 30,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  sum((start_${preferred_range}_range_km - end_${preferred_range}_range_km) * car.efficiency * 1000) / \\n  convert_km(sum(distance)::numeric, '$length_unit') as \\\"consumption_$length_unit\\\"\\nFROM drives\\nJOIN cars car ON car.id = car_id\\nWHERE $__timeFilter(start_date) AND car_id = $car_id\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (gross)\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (gross)\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 3,\n        \"x\": 16,\n        \"y\": 7\n      },\n      \"id\": 32,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"-- Query shared between Charging Stats, Statistics & Trip Dashboards (with minor changes) - ensure to modify in all places when necessary\\n\\nwith drives_start_event as (\\n\\n    select\\n        'drive_start' as event, start_date as date, start_${preferred_range}_range_km as range, start_km as odometer, car_id\\n    from drives\\n    where car_id = $car_id and $__timeFilter(start_date) and 48 <= extract(hour FROM to_timestamp(${__to:date:seconds}) - to_timestamp(${__from:date:seconds}))\\n\\n),\\n\\ndrives_end_event as (\\n\\n    select\\n        'drive_end' as event, end_date as date, end_${preferred_range}_range_km as range, end_km as odometer, car_id\\n    from drives\\n    where car_id = $car_id and $__timeFilter(start_date) and 48 <= extract(hour FROM to_timestamp(${__to:date:seconds}) - to_timestamp(${__from:date:seconds}))\\n\\n),\\n\\ncharging_processes_start_event as (\\n\\n    select\\n        'charging_process_start' as event, start_date as date, start_${preferred_range}_range_km as range, p.odometer, cp.car_id\\n    from charging_processes cp\\n        inner join positions p on cp.position_id = p.id\\n    where cp.car_id = $car_id and $__timeFilter(start_date) and 48 <= extract(hour FROM to_timestamp(${__to:date:seconds}) - to_timestamp(${__from:date:seconds}))\\n\\n),\\n\\ncharging_processes_end_event as (\\n\\n    select\\n        'charging_process_end' as event, end_date as date, end_${preferred_range}_range_km as range, p.odometer, cp.car_id\\n    from charging_processes cp\\n        inner join positions p on cp.position_id = p.id\\n    where cp.car_id = $car_id and $__timeFilter(start_date) and 48 <= extract(hour FROM to_timestamp(${__to:date:seconds}) - to_timestamp(${__from:date:seconds}))\\n\\n),\\n\\npositions as (\\n\\n    select\\n        case\\n            when drive_id is not null and lead(drive_id) over w is not null then 'drive_start'\\n            else 'something'\\n        end as event,\\n        date, ${preferred_range}_battery_range_km as range, p.odometer, p.car_id\\n    from positions p\\n    where ideal_battery_range_km is not null and car_id = $car_id and 48 > extract(hour FROM to_timestamp(${__to:date:seconds}) - to_timestamp(${__from:date:seconds}))\\n    and (drive_id in (select id from drives where $__timeFilter(start_date)) or drive_id is null and $__timeFilter(date))\\n    window w as (order by date)\\n\\n),\\n\\ncombined as (\\n\\n    select * from drives_start_event\\n    union all\\n    select * from drives_end_event\\n    union all\\n    select * from charging_processes_start_event\\n    union all\\n    select * from charging_processes_end_event\\n    union all\\n    select * from positions\\n\\n),\\n\\nfinal as (\\n\\n    select\\n        car_id,\\n        lead(odometer) over w - odometer as distance,\\n        case when event != 'drive_start' then greatest(range - lead(range) over w, 0) else range - lead(range) over w end as range_loss\\n    from combined\\n    window w as (order by date asc)\\n\\n)\\n\\nselect\\n    'Total Energy consumed (gross)' as metric,\\n    sum(range_loss) * c.efficiency as value,\\n    (sum(range_loss) * c.efficiency * 1000) / nullif(convert_km(sum(distance)::numeric, '$length_unit'), 0) as consumption_$length_unit\\nfrom final\\n    inner join cars c on car_id = c.id\\ngroup by c.efficiency\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"transformations\": [\n        {\n          \"id\": \"organize\",\n          \"options\": {\n            \"excludeByName\": {\n              \"metric\": true,\n              \"value\": true\n            },\n            \"includeByName\": {},\n            \"indexByName\": {},\n            \"renameByName\": {}\n          }\n        }\n      ],\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 2,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 6,\n        \"x\": 13,\n        \"y\": 11\n      },\n      \"id\": 22,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select sum(cost) as \\\"Total Charging Cost\\\" from charging_processes where $__timeFilter(end_date) AND car_id = $car_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Mixed --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 2,\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 5,\n        \"x\": 19,\n        \"y\": 11\n      },\n      \"id\": 43,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"fieldOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ]\n        },\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH charges as (\\r\\n  SELECT\\r\\n    sum(cost) / nullif(sum(charge_energy_added), 0) as cost_per_kwh\\r\\n  FROM charging_processes\\r\\n  where car_id = $car_id and $__timeFilter(start_date)\\r\\n),\\r\\n\\r\\nmileage as (\\r\\n  SELECT convert_km((max(odometer) - min(odometer))::numeric, '$length_unit') as distance\\r\\n  FROM positions\\r\\n  WHERE car_id = $car_id and ideal_battery_range_km IS NOT NULL\\r\\n  and (drive_id in (select id from drives where $__timeFilter(start_date)) or drive_id is null and $__timeFilter(date))\\r\\n)\\r\\n\\r\\nselect\\r\\n  'Total Energy consumed (gross)' as metric, -- Hack required for Join Transformation\\r\\n  cost_per_kwh / nullif(distance, 0) * 100 as cost_mileage\\r\\nfrom mileage cross join charges\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        },\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 32,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"\",\n      \"transformations\": [\n        {\n          \"id\": \"joinByField\",\n          \"options\": {\n            \"byField\": \"metric\",\n            \"mode\": \"inner\"\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"Ø Cost per 100 $length_unit\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"cost_mileage\"\n                }\n              },\n              \"operator\": \"*\",\n              \"right\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"value\"\n                }\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            },\n            \"replaceFields\": true,\n            \"window\": {\n              \"reducer\": \"mean\",\n              \"windowAlignment\": \"trailing\",\n              \"windowSize\": 0.1,\n              \"windowSizeMode\": \"percentage\"\n            }\n          }\n        }\n      ],\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"datasource\",\n        \"uid\": \"-- Mixed --\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 2,\n          \"displayName\": \"${__cell_0}\",\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"light-yellow\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"semi-dark-yellow\",\n                \"value\": 10\n              },\n              {\n                \"color\": \"semi-dark-orange\",\n                \"value\": 100\n              }\n            ]\n          },\n          \"unit\": \"kwatth\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 11,\n        \"x\": 13,\n        \"y\": 13\n      },\n      \"id\": 40,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"maxVizHeight\": 300,\n        \"minVizHeight\": 10,\n        \"minVizWidth\": 0,\n        \"namePlacement\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showUnfilled\": false,\n        \"sizing\": \"auto\",\n        \"valueMode\": \"color\"\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"datasource\",\n            \"uid\": \"-- Dashboard --\"\n          },\n          \"panelId\": 32,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH charges_current AS (\\n  SELECT\\n\\t\\tcp.id,\\n\\t\\tcp.charge_energy_added as energy_added,\\n\\t\\tCASE WHEN NULLIF(mode() within group (order by charger_phases),0) is null THEN 'Total Energy added (DC)'\\n\\t\\t\\t\\t ELSE 'Total Energy added (AC)'\\n\\t\\tEND AS metric\\n\\tFROM charging_processes cp\\n  RIGHT JOIN charges ON cp.id = charges.charging_process_id\\n  WHERE\\n\\t  cp.car_id = $car_id\\n\\t  AND cp.charge_energy_added > 0\\n  \\tAND ($__timeFilter(start_date) OR $__timeFilter(end_date))\\n  GROUP BY 1,2\\n)\\n\\nSELECT metric, sum(energy_added) AS energy_added\\nFROM charges_current\\nGROUP BY 1\\nORDER BY 1 DESC;\",\n          \"refId\": \"B\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"transformations\": [\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"pattern\": \"^(?:(?!consumption).)*$\"\n            }\n          }\n        }\n      ],\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-GrYlRd\"\n          },\n          \"custom\": {\n            \"axisPlacement\": \"auto\",\n            \"fillOpacity\": 100,\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineWidth\": 0,\n            \"spanNulls\": false\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"0\": {\n                  \"color\": \"#6ED0E0\",\n                  \"index\": 0,\n                  \"text\": \"online\"\n                },\n                \"1\": {\n                  \"color\": \"#8F3BB8\",\n                  \"index\": 1,\n                  \"text\": \"driving\"\n                },\n                \"2\": {\n                  \"color\": \"#F2CC0C\",\n                  \"index\": 2,\n                  \"text\": \"charging\"\n                },\n                \"3\": {\n                  \"color\": \"#FFB357\",\n                  \"index\": 3,\n                  \"text\": \"offline\"\n                },\n                \"4\": {\n                  \"color\": \"#56A64B\",\n                  \"index\": 4,\n                  \"text\": \"asleep\"\n                },\n                \"5\": {\n                  \"color\": \"#6ED0E0\",\n                  \"index\": 5,\n                  \"text\": \"online\"\n                },\n                \"6\": {\n                  \"color\": \"#E02F44\",\n                  \"index\": 6,\n                  \"text\": \"updating\"\n                },\n                \"null\": {\n                  \"index\": 7,\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"value\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 16\n      },\n      \"id\": 20,\n      \"options\": {\n        \"alignValue\": \"center\",\n        \"legend\": {\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"mergeValues\": true,\n        \"rowHeight\": 1,\n        \"showValue\": \"never\",\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"maxHeight\": 600,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH states AS (\\n  SELECT\\n    unnest(ARRAY [start_date + interval '1 second', end_date]) AS date,\\n    unnest(ARRAY [2, 0]) AS state\\n  FROM charging_processes\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n  UNION\\n  SELECT\\n    unnest(ARRAY [start_date + interval '1 second', end_date]) AS date,\\n    unnest(ARRAY [1, 0]) AS state\\n  FROM drives\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n  UNION\\n  SELECT\\n    start_date AS date,\\n    CASE\\n      WHEN state = 'offline' THEN 3\\n      WHEN state = 'asleep' THEN 4\\n      WHEN state = 'online' THEN 5\\n    END AS state\\n  FROM states\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n  UNION\\n  SELECT\\n    unnest(ARRAY [start_date + interval '1 second', end_date]) AS date,\\n    unnest(ARRAY [6, 0]) AS state\\n  FROM updates\\n  WHERE\\n    car_id = $car_id AND \\n    ($__timeFrom() :: timestamp - interval '30 day') < start_date AND \\n    (end_date < ($__timeTo() :: timestamp + interval '30 day') OR end_date IS NULL)\\n)\\nSELECT date AS \\\"time\\\", state\\nFROM states\\nWHERE \\n  date IS NOT NULL AND\\n  ($__timeFrom() :: timestamp - interval '30 day') < date AND \\n  date < ($__timeTo() :: timestamp + interval '30 day') \\nORDER BY date ASC, state ASC;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"transparent\": true,\n      \"type\": \"state-timeline\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"decimals\": 2,\n          \"displayName\": \"\",\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_date\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Date\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"dateTimeAsLocal\"\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": false,\n                    \"title\": \"View drive details\",\n                    \"url\": \"/d/zm7wN6Zgz/drive-details?from=${__data.fields.start_date_ts.numeric}&to=${__data.fields.end_date_ts.numeric}&var-car_id=${__data.fields.car_id.numeric}&var-drive_id=${__data.fields.drive_id.numeric}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 210\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_kwh_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/km\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 165\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption_kwh_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Consumption (net)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"Wh/mi\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 165\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Distance\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 80\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_address\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Start\"\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Create or edit geo-fence\",\n                    \"url\": \"${base_url:raw}/geo-fences/${__data.fields.start_path}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"end_address\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Destination\"\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Create or edit geo-fence\",\n                    \"url\": \"${base_url:raw}/geo-fences/${__data.fields.end_path}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"duration_min\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Duration\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"m\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"title\": \"${__data.fields.duration_str}\",\n                    \"url\": \"\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 100\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_ts/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"distance_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Distance\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 80\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"% Start\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"auto\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 75\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"% End\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"auto\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 65\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"(start_path|end_path|duration_str|car_id|drive_id)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 18\n      },\n      \"id\": 2,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": [\n          {\n            \"desc\": true,\n            \"displayName\": \"Date\"\n          }\n        ]\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n  SELECT\\n    floor(extract(epoch FROM start_date)) * 1000 AS start_date_ts,\\n    ceil(extract(epoch FROM end_date)) * 1000 AS end_date_ts,\\n    car.id as car_id,\\n    CASE WHEN start_geofence.id IS NULL THEN CONCAT('new?lat=', start_position.latitude, '&lng=', start_position.longitude)\\n         WHEN start_geofence.id IS NOT NULL THEN CONCAT(start_geofence.id, '/edit')\\n    END as start_path,\\n    CASE WHEN end_geofence.id IS NULL THEN CONCAT('new?lat=', end_position.latitude, '&lng=', end_position.longitude)\\n         WHEN end_geofence.id IS NOT NULL THEN CONCAT(end_geofence.id, '/edit')\\n    END as end_path,\\n    TO_CHAR((duration_min * INTERVAL '1 minute'), 'HH24:MI') as duration_str,\\n    drives.id as drive_id,\\n    -- Columns\\n    start_date,\\n    COALESCE(start_geofence.name, CONCAT_WS(', ', COALESCE(start_address.name, nullif(CONCAT_WS(' ', start_address.road, start_address.house_number), '')), start_address.city)) AS start_address,\\n    COALESCE(end_geofence.name, CONCAT_WS(', ', COALESCE(end_address.name, nullif(CONCAT_WS(' ', end_address.road, end_address.house_number), '')), end_address.city)) AS end_address,\\n    duration_min,\\n    distance,\\n    start_position.usable_battery_level as start_usable_battery_level,\\n    start_position.battery_level as start_battery_level,\\n    end_position.usable_battery_level as end_usable_battery_level,\\n    end_position.battery_level as end_battery_level,\\n    start_position.battery_level != start_position.usable_battery_level OR end_position.battery_level != end_position.usable_battery_level  as reduced_range,\\n    duration_min > 1 AND distance > 1 AND ( \\n      start_position.usable_battery_level IS NULL OR end_position.usable_battery_level IS NULL\\tOR\\n      (end_position.battery_level - end_position.usable_battery_level) = 0 \\n    ) as is_sufficiently_precise,\\n    start_${preferred_range}_range_km - end_${preferred_range}_range_km as range_diff,\\n    car.efficiency as car_efficiency,\\n    outside_temp_avg,\\n    distance / NULLIF(duration_min, 0) * 60 AS avg_speed\\n  FROM drives\\n  LEFT JOIN addresses start_address ON start_address_id = start_address.id\\n  LEFT JOIN addresses end_address ON end_address_id = end_address.id\\n  LEFT JOIN positions start_position ON start_position_id = start_position.id\\n  LEFT JOIN positions end_position ON end_position_id = end_position.id\\n  LEFT JOIN geofences start_geofence ON start_geofence_id = start_geofence.id\\n  LEFT JOIN geofences end_geofence ON end_geofence_id = end_geofence.id\\n  LEFT JOIN cars car ON car.id = drives.car_id\\n  WHERE $__timeFilter(start_date) AND drives.car_id = $car_id\\n  ORDER BY start_date DESC\\n)\\nSELECT\\n    start_date_ts,\\n    end_date_ts,\\n    car_id,\\n    start_path,\\n    end_path,\\n    duration_str,\\n    drive_id,\\n    -- Columns\\n    start_date,\\n    start_address,\\n    end_address,\\n    duration_min,\\n    convert_km(distance::numeric, '$length_unit') AS distance_$length_unit,\\n    start_battery_level as \\\"% Start\\\",\\n    end_battery_level as \\\"% End\\\",\\n    CASE WHEN is_sufficiently_precise THEN range_diff * car_efficiency / convert_km(distance::numeric, '$length_unit') * 1000\\n    END AS consumption_kWh_$length_unit\\nFROM data;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Drives\",\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"decimals\": 2,\n          \"displayName\": \"\",\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_date\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Date\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"dateTimeAsLocal\"\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": false,\n                    \"title\": \"View charge details\",\n                    \"url\": \"/d/BHhxFeZRz/charge-details?from=${__data.fields.start_date_ts.numeric}&to=${__data.fields.end_date_ts.numeric}&var-car_id=${__data.fields.car_id.numeric}&var-charging_process_id=${__data.fields.id.numeric:raw}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 210\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charge_energy_added\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Energy added\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 115\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_battery_level\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"% Start\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 72\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"end_battery_level\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"% End\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 62\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"duration_min\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Duration\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"m\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 80\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"cost\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Cost\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"none\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": false,\n                    \"title\": \"Set Cost\",\n                    \"url\": \"${base_url:raw}/charge-cost/${__data.fields.id.numeric:raw}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 70\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_ts/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"id\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"address\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Location\"\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"Create or edit geo-fence\",\n                    \"url\": \"${base_url:raw}/geo-fences/${__data.fields.path}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 200\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_added_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range gained\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 120\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charge_energy_added_per_hour\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Power\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatt\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"#96D98D\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"#56A64B\",\n                      \"value\": 20\n                    },\n                    {\n                      \"color\": \"#37872D\",\n                      \"value\": 55\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 80\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_added_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range gained\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 120\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"path\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"charge_energy_used\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Energy used\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 105\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"car_id\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 29\n      },\n      \"id\": 36,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": [\n          {\n            \"desc\": true,\n            \"displayName\": \"Date\"\n          }\n        ]\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"WITH data AS (\\n    SELECT\\n        floor(extract(epoch FROM start_date)) * 1000 AS start_date_ts,\\n        ceil(extract(epoch FROM end_date)) * 1000 AS end_date_ts,\\n        start_date,\\n        end_date,\\n        CONCAT_WS(', ', COALESCE(addresses.name, CONCAT_WS(' ', addresses.road, addresses.house_number)), addresses.city) AS address,\\n        g.name as geofence_name,\\n        g.id as geofence_id,\\n        p.latitude,\\n        p.longitude,\\n        charge_energy_added,\\n        charge_energy_used,\\n        duration_min,\\n        start_battery_level,\\n        end_battery_level,\\n        end_${preferred_range}_range_km - start_${preferred_range}_range_km as range_added,\\n        outside_temp_avg,\\n        c.id,\\n        p.odometer - lag(p.odometer) OVER (ORDER BY start_date) AS distance,\\n        cars.efficiency,\\n        c.car_id,\\n        cost\\n    FROM\\n        charging_processes c\\n    LEFT JOIN positions p ON p.id = c.position_id\\n    LEFT JOIN cars ON cars.id = c.car_id\\n    LEFT JOIN addresses ON addresses.id = c.address_id\\n    LEFT JOIN geofences g ON g.id = geofence_id\\nWHERE \\n    (charge_energy_added IS NULL OR charge_energy_added > 0) AND\\n    c.car_id = $car_id AND\\n    $__timeFilter(start_date)\\nORDER BY\\n    start_date\\n)\\nSELECT\\n    start_date_ts,\\n    end_date_ts,\\n    CASE WHEN geofence_id IS NULL THEN CONCAT('new?lat=', latitude, '&lng=', longitude)\\n         WHEN geofence_id IS NOT NULL THEN CONCAT(geofence_id, '/edit')\\n    END as path,\\n    car_id,\\n    id,\\n    -- Columns\\n    start_date,\\n    COALESCE(geofence_name, address) as address,    \\n    duration_min,\\n    cost,\\n    charge_energy_added,\\n    charge_energy_used,\\n    charge_energy_added * 60 / NULLIF (duration_min, 0) AS charge_energy_added_per_hour,\\n    convert_km(range_added, '$length_unit') AS range_added_$length_unit,\\n    start_battery_level,\\n    end_battery_level\\nFROM\\n    data\\nWHERE\\n    (distance >= 0 OR distance IS NULL)\\nORDER BY\\n  start_date DESC;\\n    \",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Charges\",\n      \"transformations\": [\n        {\n          \"id\": \"merge\",\n          \"options\": {\n            \"reducers\": []\n          }\n        }\n      ],\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"battery_level\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"SOC\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_km$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_mi$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"range_ideal_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range (ideal)\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"range_rated_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range (rated)\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 37\n      },\n      \"id\": 42,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"min\",\n            \"max\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"(\\n  SELECT $__timeGroup(date, '5s'), avg(battery_level) as battery_level, convert_km(avg(${preferred_range}_battery_range_km), '$length_unit') as range_${preferred_range}_${length_unit}\\n  FROM positions\\n  WHERE date BETWEEN ($__timeFrom()::timestamp - interval '1 day') AND ($__timeTo()::timestamp + interval '1 day') AND car_id = $car_id\\n  GROUP BY 1\\n) UNION ALL (\\n  SELECT $__timeGroup(date, '5s'), avg(battery_level) as battery_level, convert_km(avg(${preferred_range}_battery_range_km), '$length_unit') as range_${preferred_range}_${length_unit}\\n  FROM charges c\\n  LEFT JOIN charging_processes p ON c.charging_process_id = p.id\\n  WHERE date BETWEEN ($__timeFrom()::timestamp - interval '1 day') AND ($__timeTo()::timestamp + interval '1 day') AND p.car_id = $car_id\\n  GROUP BY 1\\n)\\nORDER BY 1\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Battery Level & Range\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"showValues\": false,\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_m$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthm\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*_ft$\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthft\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"elevation_.*\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Elevation\"\n              },\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"semi-dark-blue\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 37\n      },\n      \"id\": 8,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"min\",\n            \"max\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"time_series\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\t$__timeGroup(date, '5s'),\\n\\tROUND(convert_m(avg(elevation), '$alternative_length_unit')) AS elevation_${alternative_length_unit}\\nFROM\\n\\tpositions\\nWHERE\\n car_id = $car_id AND\\n date BETWEEN ($__timeFrom()::timestamp - interval '1 day') AND ($__timeTo()::timestamp + interval '1 day')\\nGROUP BY\\n 1\\nORDER BY\\n 1 ASC\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Elevation\",\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_temperature from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"temperature unit\",\n        \"name\": \"temp_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_temperature from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"label\": \"length unit\",\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select case when unit_of_length = 'km' then 'm' when unit_of_length = 'mi' then 'ft' end  from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"alternative_length_unit\",\n        \"options\": [],\n        \"query\": \"select case when unit_of_length = 'km' then 'm' when unit_of_length = 'mi' then 'ft' end  from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"with last_drives as (select start_date from drives order by start_date desc limit 3)\\nselect extract(epoch from min(start_date)) * 1000 from last_drives;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"from\",\n        \"options\": [],\n        \"query\": \"with last_drives as (select start_date from drives order by start_date desc limit 3)\\nselect extract(epoch from min(start_date)) * 1000 from last_drives;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-24h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Trip\",\n  \"uid\": \"FkUpJpQZk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/updates.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 8,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"count\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT count(*)\\nFROM updates\\nWHERE $__timeFilter(start_date) AND car_id = $car_id\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Updates\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 1,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"#c7d0d9\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"dtdurations\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 16,\n        \"x\": 8,\n        \"y\": 1\n      },\n      \"id\": 6,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT percentile_disc(0.5) WITHIN GROUP (ORDER BY since_last_update) FROM (\\n\\tSELECT extract(EPOCH FROM start_date - lag(start_date) OVER (ORDER BY start_date)) AS since_last_update\\n\\tFROM updates\\n\\tWHERE $__timeFilter(start_date) AND car_id = $car_id\\n) d;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Median time between updates\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"filterable\": false,\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"time\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 210\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Date\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"dateTimeAsLocal\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"update_duration\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 120\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Duration\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"dtdurations\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"since_last_update\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 180\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Since Previous Update\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"version\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Installed Version\"\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"right\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": true,\n                    \"title\": \"${__data.fields[version]} release notes\",\n                    \"url\": \"https://www.notateslaapp.com/software-updates/version/${__data.fields[version]}/release-notes\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"string\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 150\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"chg_ct\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 120\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"# of Charges\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"avg_ideal_range_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 130\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Ideal range\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"avg_rated_range_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 130\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Rated range\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"avg_ideal_range_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 130\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Ideal range\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"avg_rated_range_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 130\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Rated range\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 28,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 4\n      },\n      \"id\": 2,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": [\n          {\n            \"desc\": true,\n            \"displayName\": \"Date\"\n          }\n        ]\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"with u as (\\r\\n  select *, coalesce(lag(start_date) over(order by start_date desc), now()) as next_start_date \\r\\n  from updates\\r\\n  where car_id = $car_id and $__timeFilter(start_date)\\r\\n),\\r\\nrng as (\\r\\n  SELECT\\r\\n\\t  date_trunc('hour', timezone('UTC', date), '$__timezone') AS date,\\r\\n\\t  (sum(${preferred_range}_battery_range_km)/ nullif(sum(usable_battery_level),0) * 100 ) AS \\\"battery_rng\\\",\\r\\n\\t  sum(case when action = 'Charge' then 1 else 0 end) as chg_ct\\r\\n  FROM (\\r\\n    select usable_battery_level, start_date as date, start_rated_range_km as rated_battery_range_km, start_ideal_range_km as ideal_battery_range_km, 'Drive' as action\\r\\n    from drives d\\r\\n    inner join positions p on d.start_position_id = p.id \\r\\n    where d.car_id = $car_id and $__timeFilter(start_date) and usable_battery_level > 0\\r\\n    union all\\r\\n    select end_battery_level as usable_battery_level, end_date, end_rated_range_km as rated_battery_range_km, end_ideal_range_km as ideal_battery_range_km, 'Charge' as action\\r\\n    from charging_processes p\\r\\n    where $__timeFilter(end_date) and p.car_id = $car_id\\r\\n  ) as data\\r\\n  GROUP BY 1\\r\\n)\\r\\n\\r\\nselect\\t\\r\\n  u.start_date as time,\\r\\n\\textract(EPOCH FROM u.end_date - u.start_date) AS update_duration,\\r\\n\\tage(date(u.start_date), date(lag(u.start_date) OVER (ORDER BY u.start_date))) AS since_last_update,\\r\\n\\tsplit_part(u.version, ' ', 1) as version,\\r\\n\\tsum(r.chg_ct) as chg_ct,\\r\\n\\tconvert_km(avg(r.battery_rng), '$length_unit')::numeric(6,2) AS avg_${preferred_range}_range_${length_unit}\\r\\nfrom u u\\r\\nleft join rng r\\r\\n\\tON r.date between u.start_date and u.next_start_date\\r\\ngroup by u.car_id,\\r\\n\\tu.start_date,\\r\\n\\tu.end_date,\\r\\n\\tnext_start_date,\\r\\n\\tsplit_part(u.version, ' ', 1)\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Updates\",\n      \"type\": \"table\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-10y\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ]\n  },\n  \"timezone\": \"browser\",\n  \"title\": \"Updates\",\n  \"uid\": \"IiC07mgWz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/vampire-drain.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"start_date\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Start\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"dateTimeAsLocal\"\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": false,\n                    \"title\": \"\",\n                    \"url\": \"/d/zm7wN6Zgz/drive-details?from=${__data.fields.start_date_ts.numeric}&to=${__data.fields.end_date_ts.numeric}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 210\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"end_date\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"End\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"dateTimeAsLocal\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 210\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_diff_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range loss\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 95\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"duration\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Period\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"s\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"rgb(133, 142, 133)\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"#56A64B\",\n                      \"value\": 43200\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 100\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_lost_per_hour_km\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Range loss / h\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthkm\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 135\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.*_ts/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom.viz\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"standby\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Standby\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percentunit\"\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"#FF7383\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"#FFB357\",\n                      \"value\": 0.3\n                    },\n                    {\n                      \"color\": \"#56A64B\",\n                      \"value\": 0.85\n                    }\n                  ]\n                }\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 0\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 75\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"consumption\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Energy drained\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 125\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"avg_power\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Power\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"watt\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 80\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_lost_per_hour_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Ø Range loss / h\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 135\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"range_diff_mi\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Range loss\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"lengthmi\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 95\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"soc_diff\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"SoC Diff\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              },\n              {\n                \"id\": \"custom.minWidth\",\n                \"value\": 80\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"has_reduced_range\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \" \"\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"center\"\n              },\n              {\n                \"id\": \"mappings\",\n                \"value\": [\n                  {\n                    \"options\": {\n                      \"0\": {\n                        \"color\": \"transparent\",\n                        \"index\": 1,\n                        \"text\": \" \"\n                      },\n                      \"1\": {\n                        \"color\": \"dark-blue\",\n                        \"index\": 0,\n                        \"text\": \"❄\"\n                      }\n                    },\n                    \"type\": \"value\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"title\": \"In cold weather, the estimated range loss cannot be estimated correctly and is therefore hidden.\",\n                    \"url\": \"\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 50\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 23,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 2,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"with merge as (\\n SELECT \\n    c.start_date AS start_date,\\n    c.end_date AS end_date,\\n    c.start_ideal_range_km AS start_ideal_range_km,\\n    c.end_ideal_range_km AS end_ideal_range_km,\\n    c.start_rated_range_km AS start_rated_range_km,\\n    c.end_rated_range_km AS end_rated_range_km,\\n    start_battery_level,\\n    end_battery_level,\\n    p.usable_battery_level AS start_usable_battery_level,\\n    NULL AS end_usable_battery_level,\\n    p.odometer AS start_km,\\n    p.odometer AS end_km\\n FROM charging_processes c\\n JOIN positions p ON c.position_id = p.id\\n WHERE c.car_id = $car_id AND $__timeFilter(start_date)\\n UNION\\n SELECT \\n    d.start_date AS start_date,\\n    d.end_date AS end_date,\\n    d.start_ideal_range_km AS start_ideal_range_km,\\n    d.end_ideal_range_km AS end_ideal_range_km,\\n    d.start_rated_range_km AS start_rated_range_km,\\n    d.end_rated_range_km AS end_rated_range_km,\\n    start_position.battery_level AS start_battery_level,\\n    end_position.battery_level AS end_battery_level,\\n    start_position.usable_battery_level AS start_usable_battery_level,\\n    end_position.usable_battery_level AS end_usable_battery_level,\\n    d.start_km AS start_km,\\n    d.end_km AS end_km\\n FROM drives d\\n JOIN positions start_position ON d.start_position_id = start_position.id\\n JOIN positions end_position ON d.end_position_id = end_position.id\\n WHERE d.car_id = $car_id AND $__timeFilter(start_date)\\n), \\nv as (\\n SELECT\\n    lag(t.end_date) OVER w AS start_date,\\n    t.start_date AS end_date,\\n    lag(t.end_${preferred_range}_range_km) OVER w AS start_range,\\n    t.start_${preferred_range}_range_km AS end_range,\\n    lag(t.end_km) OVER w AS start_km,\\n    t.start_km AS end_km,\\n    EXTRACT(EPOCH FROM age(t.start_date, lag(t.end_date) OVER w)) AS duration,\\n    lag(t.end_battery_level) OVER w AS start_battery_level,\\n    lag(t.end_usable_battery_level) OVER w AS start_usable_battery_level,\\n\\t\\tstart_battery_level AS end_battery_level,\\n\\t\\tstart_usable_battery_level AS end_usable_battery_level,\\n\\t\\tstart_battery_level > COALESCE(start_usable_battery_level, start_battery_level) AS has_reduced_range\\n  FROM merge t\\n  WINDOW w AS (ORDER BY t.start_date ASC)\\n  ORDER BY start_date DESC\\n)\\n\\nSELECT\\n  floor(extract(epoch FROM v.start_date)) * 1000 AS start_date_ts,\\n  ceil(extract(epoch FROM v.end_date)) * 1000 AS end_date_ts,\\n  -- Columns\\n  v.start_date,\\n  v.end_date,\\n  v.duration,\\n  (coalesce(s_asleep.sleep, 0) + coalesce(s_offline.sleep, 0)) / v.duration as standby,\\n\\t-greatest(v.start_battery_level - v.end_battery_level, 0) as soc_diff,\\n\\tCASE WHEN has_reduced_range THEN 1 ELSE 0 END as has_reduced_range,\\n\\tconvert_km(CASE WHEN has_reduced_range THEN NULL ELSE (v.start_range - v.end_range)::numeric END, '$length_unit') AS range_diff_$length_unit,\\n  CASE WHEN has_reduced_range THEN NULL ELSE (v.start_range - v.end_range) * c.efficiency END AS consumption,\\n  CASE WHEN has_reduced_range THEN NULL ELSE ((v.start_range - v.end_range) * c.efficiency) / (v.duration / 3600) * 1000 END as avg_power,\\n  convert_km(CASE WHEN has_reduced_range THEN NULL ELSE ((v.start_range - v.end_range) / (v.duration / 3600))::numeric END, '$length_unit') AS range_lost_per_hour_${length_unit}\\nFROM v,\\n  LATERAL (\\n    SELECT EXTRACT(EPOCH FROM sum(age(s.end_date, s.start_date))) as sleep\\n    FROM states s\\n    WHERE\\n      state = 'asleep' AND\\n      v.start_date <= s.start_date AND s.end_date <= v.end_date AND\\n      s.car_id = $car_id\\n  ) s_asleep,\\n  LATERAL (\\n    SELECT EXTRACT(EPOCH FROM sum(age(s.end_date, s.start_date))) as sleep\\n    FROM states s\\n    WHERE\\n      state = 'offline' AND\\n      v.start_date <= s.start_date AND s.end_date <= v.end_date AND\\n      s.car_id = $car_id\\n  ) s_offline\\nJOIN cars c ON c.id = $car_id\\nWHERE\\n  v.duration > ($duration * 60 * 60)\\n  AND v.start_range - v.end_range >= 0\\n  AND v.end_km - v.start_km < 1;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"Vampire Drain\",\n      \"transformations\": [\n        {\n          \"id\": \"merge\",\n          \"options\": {\n            \"reducers\": []\n          }\n        }\n      ],\n      \"type\": \"table\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"6\",\n          \"value\": \"6\"\n        },\n        \"includeAll\": false,\n        \"label\": \"min. Idle Time (h)\",\n        \"name\": \"duration\",\n        \"options\": [],\n        \"query\": \"0,1,3,6,12,18,24\",\n        \"type\": \"custom\",\n        \"valuesFormat\": \"csv\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select unit_of_length from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"select unit_of_length from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select preferred_range from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"preferred_range\",\n        \"options\": [],\n        \"query\": \"select preferred_range from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-90d\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Vampire Drain\",\n  \"uid\": \"zhHx2Fggk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards/visited.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"links\": [\n    {\n      \"icon\": \"dashboard\",\n      \"tags\": [],\n      \"title\": \"TeslaMate\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"${base_url:raw}\"\n    },\n    {\n      \"asDropdown\": true,\n      \"icon\": \"external link\",\n      \"tags\": [\n        \"tesla\"\n      ],\n      \"title\": \"Dashboards\",\n      \"type\": \"dashboards\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"panels\": [],\n      \"repeat\": \"car_id\",\n      \"title\": \"$car_id\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"dark-red\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 21,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 2,\n      \"maxDataPoints\": 10000000,\n      \"options\": {\n        \"basemap\": {\n          \"config\": {},\n          \"name\": \"Layer 0\",\n          \"type\": \"osm-standard\"\n        },\n        \"controls\": {\n          \"mouseWheelZoom\": true,\n          \"showAttribution\": true,\n          \"showDebug\": false,\n          \"showMeasure\": false,\n          \"showScale\": false,\n          \"showZoom\": true\n        },\n        \"layers\": [\n          {\n            \"config\": {\n              \"arrow\": 0,\n              \"style\": {\n                \"color\": {\n                  \"fixed\": \"dark-blue\"\n                },\n                \"lineWidth\": 2,\n                \"opacity\": 1,\n                \"rotation\": {\n                  \"fixed\": 0,\n                  \"max\": 360,\n                  \"min\": -360,\n                  \"mode\": \"mod\"\n                },\n                \"size\": {\n                  \"fixed\": 3,\n                  \"max\": 15,\n                  \"min\": 2\n                },\n                \"symbol\": {\n                  \"fixed\": \"img/icons/marker/circle.svg\",\n                  \"mode\": \"fixed\"\n                },\n                \"symbolAlign\": {\n                  \"horizontal\": \"center\",\n                  \"vertical\": \"center\"\n                },\n                \"textConfig\": {\n                  \"fontSize\": 12,\n                  \"offsetX\": 0,\n                  \"offsetY\": 0,\n                  \"textAlign\": \"center\",\n                  \"textBaseline\": \"middle\"\n                }\n              }\n            },\n            \"location\": {\n              \"latitude\": \"lat\",\n              \"longitude\": \"long\",\n              \"mode\": \"auto\"\n            },\n            \"name\": \"Layer 1\",\n            \"tooltip\": true,\n            \"type\": \"route\"\n          }\n        ],\n        \"tooltip\": {\n          \"mode\": \"none\"\n        },\n        \"view\": {\n          \"allLayers\": true,\n          \"id\": \"fit\",\n          \"lat\": 0,\n          \"lon\": 0,\n          \"noRepeat\": false,\n          \"zoom\": 15\n        }\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n  date_trunc('minute', timezone('UTC', date), '$__timezone') as time,\\n  avg(latitude) as latitude,\\n  avg(longitude) as longitude\\nFROM\\n  positions\\nWHERE\\n  car_id = $car_id AND $__timeFilter(date) and ideal_battery_range_km is not null\\nGROUP BY 1\\nORDER BY 1\",\n          \"refId\": \"Positions\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"geomap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"super-light-blue\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 5,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/.*/\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT ROUND(convert_km((max(end_km) - min(start_km))::numeric, '$length_unit'),0)|| ' $length_unit' as \\\"Mileage\\\"\\nFROM drives WHERE car_id = $car_id AND $__timeFilter(start_date)\",\n          \"refId\": \"distance traveled\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Total Energy added\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Total Energy used\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"kwatth\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Charging Efficiency\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"percent\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 14,\n        \"x\": 5,\n        \"y\": 22\n      },\n      \"id\": 6,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"vertical\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"SELECT\\n\\tsum(charge_energy_added) as \\\"Total Energy added\\\",\\n\\tSUM(greatest(charge_energy_added, charge_energy_used)) AS \\\"Total Energy used\\\",\\n\\tSUM(charge_energy_added) * 100 / SUM(greatest(charge_energy_added, charge_energy_used)) AS \\\"Charging Efficiency\\\"\\nFROM\\n\\tcharging_processes\\nWHERE\\n\\tcar_id = $car_id AND $__timeFilter(start_date) AND charge_energy_added > 0.01\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"grafana-postgresql-datasource\",\n        \"uid\": \"TeslaMate\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 2,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 5,\n        \"x\": 19,\n        \"y\": 22\n      },\n      \"id\": 7,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.4.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"grafana-postgresql-datasource\",\n            \"uid\": \"TeslaMate\"\n          },\n          \"editorMode\": \"code\",\n          \"format\": \"table\",\n          \"rawQuery\": true,\n          \"rawSql\": \"select sum(cost) as \\\"Total Charging Cost\\\" from charging_processes where $__timeFilter(start_date) AND car_id = $car_id;\",\n          \"refId\": \"A\",\n          \"sql\": {\n            \"columns\": [\n              {\n                \"parameters\": [],\n                \"type\": \"function\"\n              }\n            ],\n            \"groupBy\": [\n              {\n                \"property\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"groupBy\"\n              }\n            ],\n            \"limit\": 50\n          }\n        }\n      ],\n      \"title\": \"\",\n      \"type\": \"stat\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"\",\n  \"schemaVersion\": 42,\n  \"tags\": [\n    \"tesla\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Car\",\n        \"name\": \"car_id\",\n        \"options\": [],\n        \"query\": \"SELECT\\n    id as __value,\\n    CASE WHEN COUNT(id) OVER (PARTITION BY name) > 1 AND name IS NOT NULL THEN CONCAT(name, ' - ', RIGHT(vin, 6)) ELSE COALESCE(name, CONCAT('VIN ', vin)) end as __text \\nFROM cars\\nORDER BY display_priority ASC, name ASC, vin ASC;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"select base_url from settings limit 1;\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"base_url\",\n        \"options\": [],\n        \"query\": \"select base_url from settings limit 1;\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"grafana-postgresql-datasource\",\n          \"uid\": \"TeslaMate\"\n        },\n        \"definition\": \"SELECT unit_of_length FROM settings LIMIT 1\",\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"length_unit\",\n        \"options\": [],\n        \"query\": \"SELECT unit_of_length FROM settings LIMIT 1\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"regexApplyTo\": \"value\",\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-90d\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"Visited\",\n  \"uid\": \"RG_DxSmgk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "grafana/dashboards.sh",
    "content": "#!/usr/bin/env bash\n\n# The script requires an API token. See\n# https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/service-accounts/#add-a-token-to-a-service-account-in-grafana\n# how to create a token using the Grafana UI or API.\n# Set the Grafana API token with GRAFANA_API_TOKEN.\n#\n# DASHBOARD_DIRECTORY represents the path to the directory\n# where the JSON files corresponding to the dashboards exist.\n# The default location is relative to the execution of the\n# script.\n#\n# URL specifies the URL of the Grafana instance.\n# GRAFANA_ORG_NAMESPACE specifies the Grafana namespace to use for API calls (defaults to \"default\").\n\nset -o errexit\n\nreadonly URL=${URL:-\"http://localhost:3000\"}\nreadonly GRAFANA_API_TOKEN=${GRAFANA_API_TOKEN:-\"your_api_token_here\"}\nreadonly DASHBOARDS_DIRECTORY=${DASHBOARDS_DIRECTORY:-\"./grafana/dashboards\"}\nreadonly GRAFANA_ORG_NAMESPACE=${GRAFANA_ORG_NAMESPACE:-\"default\"}\nAPI_VERSION=\"v1beta1\"\n\nslugify() {\n\tlocal input_string=$1\n\tlocal slug\n\n\t# Convert to lowercase\n\tslug=$(echo \"$input_string\" | tr '[:upper:]' '[:lower:]')\n\n\t# Replace spaces and underscores with hyphens\n\tslug=${slug//[ _]/-}\n\n\t# Remove any character that is not alphanumeric or a hyphen\n\tslug=${slug//[^a-z0-9-]/}\n\n\t# Remove leading hyphens\n\tslug=${slug##-}\n\t# Remove trailing hyphens\n\tslug=${slug%%-}\n\n\techo \"$slug\"\n}\n\nmain() {\n\tlocal task=$1\n\n\techo \"\nURL:                    $URL\nGRAFANA_API_TOKEN:      $GRAFANA_API_TOKEN\nDASHBOARDS_DIRECTORY:   $DASHBOARDS_DIRECTORY\nGRAFANA_ORG_NAMESPACE:  $GRAFANA_ORG_NAMESPACE\n  \"\n\n\tcase $task in\n\tbackup) backup ;;\n\trestore) restore ;;\n\t*) exit 1 ;;\n\tesac\n\n}\n\nbackup() {\n\tlocal dashboard_info_json\n\tlocal dashboard_uid\n\tlocal dashboard_title\n\tlocal initial_folder_uid\n\tlocal grafana_path_array_str\n\tlocal -a grafana_path_array # Declare as array\n\tlocal dashboard_json\n\tlocal target_dir\n\tlocal filename\n\n\techo \"Starting dashboard backup process (scoped to 'TeslaMate' folder and its subfolders)...\"\n\tmkdir -p \"$DASHBOARDS_DIRECTORY\" # Ensure base directory exists\n\n\tlist_dashboards | while IFS= read -r dashboard_info_json; do\n\t\tdashboard_uid=\"$(echo \"$dashboard_info_json\" | jq -r '.uid')\"\n\t\tdashboard_title=\"$(echo \"$dashboard_info_json\" | jq -r '.title')\"\n\t\tinitial_folder_uid=\"$(echo \"$dashboard_info_json\" | jq -r '.folderUid // empty')\" # Ensure empty string if null\n\n\t\tif [[ -z $dashboard_title || $dashboard_title == \"null\" ]]; then\n\t\t\techo \"WARNING: Dashboard with UID $dashboard_uid has no title, skipping backup.\" >&2\n\t\t\tcontinue\n\t\tfi\n\t\tif [[ -z $dashboard_uid || $dashboard_uid == \"null\" ]]; then\n\t\t\techo \"WARNING: Found dashboard with no UID (Title: $dashboard_title), skipping backup.\" >&2\n\t\t\tcontinue\n\t\tfi\n\n\t\tif [[ -z $initial_folder_uid ]]; then\n\t\t\t# echo \"INFO: Dashboard '$dashboard_title' (UID: $dashboard_uid) is not in a folder, skipping.\"\n\t\t\tcontinue # Skip dashboards not in any folder\n\t\tfi\n\n\t\tgrafana_path_array_str=$(build_grafana_folder_path_array \"$initial_folder_uid\")\n\t\t# Convert space-separated string to bash array\n\t\tread -r -a grafana_path_array <<<\"$grafana_path_array_str\"\n\n\t\tif [[ ${#grafana_path_array[@]} -eq 0 || ${grafana_path_array[0]} != \"teslamate\" ]]; then\n\t\t\t# Folder path couldn't be determined, or it's not under \"TeslaMate\"\n\t\t\t# echo \"INFO: Dashboard '$dashboard_title' (UID: $dashboard_uid) is not under 'TeslaMate' folder (path: $grafana_path_array_str), skipping.\"\n\t\t\tcontinue\n\t\tfi\n\n\t\t# Construct local save path (remove \"TeslaMate\" from the path components)\n\t\tlocal -a local_save_path_parts=()\n\t\tif ((${#grafana_path_array[@]} > 1)); then\n\t\t\tlocal_save_path_parts=(\"${grafana_path_array[@]:1}\") # All elements except the first\n\t\tfi\n\n\t\ttarget_dir=\"$DASHBOARDS_DIRECTORY\"\n\t\tif ((${#local_save_path_parts[@]} > 0)); then\n\t\t\trelative_save_path=$(\n\t\t\t\tIFS=/\n\t\t\t\techo \"${local_save_path_parts[*]}\"\n\t\t\t)\n\t\t\t# Further sanitize relative_save_path if folder titles can have problematic chars for dir names\n\t\t\ttarget_dir=\"$DASHBOARDS_DIRECTORY/$relative_save_path\"\n\t\tfi\n\n\t\tmkdir -p \"$target_dir\"\n\t\tfilename=\"$(slugify \"$dashboard_title\").json\"\n\t\tif [[ -z ${filename%%.json} ]]; then\n\t\t\tfilename=\"dashboard.json\"\n\t\tfi\n\n\t\t#echo \"INFO: Backing up Grafana dashboard '$dashboard_title' (UID: $dashboard_uid) from Grafana path '$grafana_path_array_str' to local path '$target_dir/$filename'\"\n\t\tdashboard_json=$(get_dashboard \"$dashboard_uid\")\n\n\t\tif [[ -z $dashboard_json ]]; then\n\t\t\techo \"ERROR: Couldn't retrieve dashboard spec for '$dashboard_title' (UID: $dashboard_uid).\" >&2\n\t\t\tcontinue\n\t\tfi\n\n\t\techo \"$dashboard_json\" >\"$target_dir/$filename\"\n\t\techo \"BACKED UP: $target_dir/$filename (UID: $dashboard_uid)\"\n\tdone\n\techo \"Dashboard backup process completed.\"\n}\n\nrestore() {\n\tfind \"$DASHBOARDS_DIRECTORY\" -type f -name \\*.json -print0 |\n\t\twhile IFS= read -r -d '' dashboard_path; do\n\t\t\trelative_file_path=\"${dashboard_path#\"$DASHBOARDS_DIRECTORY\"/}\"\n\t\t\tlocal_subfolder_path=$(dirname \"$relative_file_path\")\n\n\t\t\tlocal -a target_grafana_folder_titles_array=()\n\t\t\ttarget_grafana_folder_titles_array+=(\"TeslaMate\") # Always start with TeslaMate\n\n\t\t\tif [[ $local_subfolder_path != \".\" && -n $local_subfolder_path ]]; then\n\t\t\t\tlocal old_ifs=$IFS\n\t\t\t\tIFS='/'\n\t\t\t\t# shellcheck disable=SC2206 # Word splitting is desired here\n\t\t\t\tlocal path_parts_for_restore=($local_subfolder_path)\n\t\t\t\tIFS=$old_ifs\n\t\t\t\ttarget_grafana_folder_titles_array+=(\"${path_parts_for_restore[@]}\")\n\t\t\tfi\n\n\t\t\tlocal leaf_folder_to_assign_dashboard_uid=\"\"\n\t\t\t#local current_grafana_parent_uid=\"\"\n\t\t\tlocal folder_creation_failed=false\n\n\t\t\t#echo \"INFO: Ensuring Grafana folder hierarchy for local path '$local_subfolder_path': ($(IFS=/ ; echo \"${target_grafana_folder_titles_array[*]}\"))\"\n\n\t\t\tfor title_part in \"${target_grafana_folder_titles_array[@]}\"; do\n\t\t\t\tif [[ -z $title_part ]]; then continue; fi\n\n\t\t\t\t# Capitalize the first letter of the title part (e.g. \"internal\" -> \"Internal\")\n\t\t\t\ttitle_part=$(tr '[:lower:]' '[:upper:]' <<<\"${title_part:0:1}\")${title_part:1}\n\n\t\t\t\t#echo \"INFO: Processing Grafana folder part: '$title_part'\"\n\t\t\t\tcurrent_folder_uid=$(get_folder_uid_by_title \"$title_part\")\n\n\t\t\t\tif [[ -z $current_folder_uid ]]; then\n\t\t\t\t\techo \"INFO: Grafana folder '$title_part' not found, attempting to create.\"\n\t\t\t\t\tcurrent_folder_uid=$(create_folder \"$title_part\") # This creates at root.\n\t\t\t\t\tif [[ -z $current_folder_uid ]]; then\n\t\t\t\t\t\techo \"ERROR: Failed to create Grafana folder '$title_part'. Skipping dashboard $(basename \"$dashboard_path\").\" >&2\n\t\t\t\t\t\tfolder_creation_failed=true\n\t\t\t\t\t\tbreak\n\t\t\t\t\telse\n\t\t\t\t\t\techo \"INFO: Successfully created Grafana folder '$title_part' with UID '$current_folder_uid'.\"\n\t\t\t\t\tfi\n\t\t\t\t\t#else\n\t\t\t\t\t#echo \"INFO: Found existing Grafana folder '$title_part' with UID '$current_folder_uid'.\"\n\t\t\t\tfi\n\t\t\t\tleaf_folder_to_assign_dashboard_uid=\"$current_folder_uid\"\n\t\t\t\t# current_grafana_parent_uid=\"$current_folder_uid\" # This would be for true nesting if helpers supported it\n\t\t\tdone\n\n\t\t\tif [[ $folder_creation_failed == true ]]; then\n\t\t\t\tcontinue\n\t\t\tfi\n\n\t\t\tif [[ -z $leaf_folder_to_assign_dashboard_uid ]]; then\n\t\t\t\techo \"ERROR: Could not determine a target Grafana folder UID for dashboard $(basename \"$dashboard_path\"). Skipping.\" >&2\n\t\t\t\tcontinue\n\t\t\tfi\n\n\t\t\tlocal folder_uid=\"$leaf_folder_to_assign_dashboard_uid\" # Use this for the payload\n\n\t\t\tdashboard_json_content=$(cat \"$dashboard_path\")\n\t\t\textracted_uid=\"$(echo \"$dashboard_json_content\" | jq -r '.uid // empty')\"\n\t\t\t# Detect file format and extract relevant fields\n\t\t\tif echo \"$dashboard_json_content\" | jq -e 'has(\"spec\")' >/dev/null; then\n\t\t\t\tspec_obj=\"$(echo \"$dashboard_json_content\" | jq '.spec')\"\n\t\t\t\textracted_uid=\"$(echo \"$dashboard_json_content\" | jq -r '.metadata.name // empty')\"\n\t\t\telse\n\t\t\t\tspec_obj=\"$dashboard_json_content\"\n\t\t\t\textracted_uid=\"$(echo \"$dashboard_json_content\" | jq -r '.uid // empty')\"\n\t\t\tfi\n\t\t\t# Extract dashboard_title from the JSON content for use in name_prefix\n\t\t\tlocal dashboard_title\n\t\t\tdashboard_title=\"$(echo \"$dashboard_json_content\" | jq -r '.title // empty')\"\n\n\t\t\tlocal name_prefix=\"\"\n\t\t\tif [[ -n $dashboard_title && $dashboard_title != \"null\" && $dashboard_title != \"empty\" ]]; then\n\t\t\t\tname_prefix=\"$(slugify \"$dashboard_title\")\"\n\t\t\t\tif [[ -z $name_prefix ]]; then\n\t\t\t\t\tname_prefix=\"dashboard-prefix\"\n\t\t\t\tfi\n\t\t\telse\n\t\t\t\tname_prefix=\"dashboard-prefix\"\n\t\t\tfi\n\n\t\t\thttp_method=\"\"\n\t\t\tapi_endpoint=\"\"\n\n\t\t\t# Try to get the dashboard with the extracted_uid (if present)\n\t\t\tschema_version=\"\"\n\t\t\tif [[ -n $extracted_uid ]]; then\n\t\t\t\texisting_dashboard_json=$(curl --silent --fail -H \"Authorization: Bearer $GRAFANA_API_TOKEN\" \\\n\t\t\t\t\t\"$URL/apis/dashboard.grafana.app/$API_VERSION/namespaces/$GRAFANA_ORG_NAMESPACE/dashboards/$extracted_uid\" || true)\n\t\t\t\tif [[ -n $existing_dashboard_json ]]; then\n\t\t\t\t\t# Dashboard exists, extract schemaVersion and increment\n\t\t\t\t\tschema_version=$(echo \"$existing_dashboard_json\" | jq -r '.spec.schemaVersion // empty')\n\t\t\t\t\tif [[ -n $schema_version && $schema_version =~ ^[0-9]+$ ]]; then\n\t\t\t\t\t\tschema_version=$((schema_version + 1))\n\t\t\t\t\t\t# Inject incremented schemaVersion into spec_obj\n\t\t\t\t\t\t#spec_obj=$(echo \"$spec_obj\" | jq --argjson v \"$schema_version\" '.schemaVersion = $v')\n\t\t\t\t\tfi\n\t\t\t\t\thttp_method=\"PUT\"\n\t\t\t\t\tapi_endpoint=\"$URL/apis/dashboard.grafana.app/$API_VERSION/namespaces/$GRAFANA_ORG_NAMESPACE/dashboards/$extracted_uid\"\n\t\t\t\telse\n\t\t\t\t\t# Dashboard does not exist, use POST to create\n\t\t\t\t\thttp_method=\"POST\"\n\t\t\t\t\tapi_endpoint=\"$URL/apis/dashboard.grafana.app/$API_VERSION/namespaces/$GRAFANA_ORG_NAMESPACE/dashboards\"\n\t\t\t\tfi\n\t\t\telse\n\t\t\t\thttp_method=\"POST\"\n\t\t\t\tapi_endpoint=\"$URL/apis/dashboard.grafana.app/$API_VERSION/namespaces/$GRAFANA_ORG_NAMESPACE/dashboards\"\n\t\t\tfi\n\n\t\t\tfinal_payload=$(jq -n --argjson spec_obj \"$spec_obj\" \\\n\t\t\t\t--arg name \"${extracted_uid:-null}\" \\\n\t\t\t\t--arg folder_uid \"${folder_uid:-null}\" \\\n\t\t\t\t--arg name_prefix \"$name_prefix\" \\\n\t\t\t\t'{\n                \"metadata\": (\n                    (if $name != \"null\" and $name != \"\" then {name: $name} else {generateName: ($name_prefix + \"-\")} end) +\n                    (if $folder_uid != \"null\" and $folder_uid != \"\" then {annotations: {\"grafana.app/folder\": $folder_uid, \"grafana.app/message\": \"restore\"}} else {annotations: {\"grafana.app/message\": \"restore\"}} end)\n                ),\n                \"spec\": $spec_obj\n            }')\n\n\t\t\tcurl \\\n\t\t\t\t--silent --fail --show-error --output /dev/null \\\n\t\t\t\t-H \"Authorization: Bearer $GRAFANA_API_TOKEN\" \\\n\t\t\t\t-X \"$http_method\" -H \"Content-Type: application/json\" \\\n\t\t\t\t-d \"$final_payload\" \\\n\t\t\t\t\"$api_endpoint\"\n\n\t\t\techo \"RESTORED $(basename \"$dashboard_path\") into Grafana folder '${target_grafana_folder_titles_array[-1]}' (UID: $leaf_folder_to_assign_dashboard_uid) (Conceptual path: $(\n\t\t\t\tIFS=/\n\t\t\t\techo \"${target_grafana_folder_titles_array[*]}\"\n\t\t\t))\"\n\t\tdone\n}\n\nget_dashboard() {\n\tlocal dashboard_uid=$1\n\n\tif [[ -z $dashboard_uid ]]; then\n\t\techo \"ERROR: A dashboard UID must be specified.\" >&2 # Log to stderr\n\t\texit 1\n\tfi\n\n\tcurl \\\n\t\t--silent --fail --show-error \\\n\t\t-H \"Authorization: Bearer $GRAFANA_API_TOKEN\" \\\n\t\t\"$URL/apis/dashboard.grafana.app/$API_VERSION/namespaces/$GRAFANA_ORG_NAMESPACE/dashboards/$dashboard_uid\" |\n\t\tjq\n}\n\nget_folder_uid_by_title() {\n\tlocal folder_title=$1\n\tlocal folder_uid\n\n\tfolder_uid=$(curl --silent --fail --show-error -H \"Authorization: Bearer $GRAFANA_API_TOKEN\" \\\n\t\t\"$URL/apis/folder.grafana.app/$API_VERSION/namespaces/$GRAFANA_ORG_NAMESPACE/folders\" |\n\t\tjq -r --arg title \"$folder_title\" '.items[]? | select(.spec.title == $title) | .metadata.name // empty')\n\n\techo \"$folder_uid\"\n}\n\nget_folder_path_details() {\n\tlocal folder_uid_to_lookup=$1\n\tlocal folder_details_json\n\n\tif [[ -z $folder_uid_to_lookup ]]; then\n\t\techo \"{}\" # Return empty JSON if no UID\n\t\treturn\n\tfi\n\n\tlocal jq_query\n\tjq_query='{title: (.spec.title // \"\"), parentUid: (.metadata.annotations.\"grafana.app/folder\" // \"\")}'\n\n\tfolder_details_json=$(curl --silent --fail --show-error \\\n\t\t-H \"Authorization: Bearer $GRAFANA_API_TOKEN\" \\\n\t\t\"$URL/apis/folder.grafana.app/$API_VERSION/namespaces/$GRAFANA_ORG_NAMESPACE/folders/$folder_uid_to_lookup\" |\n\t\tjq -c \"$jq_query\")\n\n\tif [[ -z $folder_details_json || $folder_details_json == \"null\" ]]; then\n\t\techo \"{}\" # Default to empty JSON on error or no data\n\telse\n\t\techo \"$folder_details_json\"\n\tfi\n}\n\nbuild_grafana_folder_path_array() {\n\tlocal current_folder_uid=$1\n\tlocal path_components=() # Array to store folder titles\n\tlocal folder_details_json\n\tlocal title\n\tlocal parent_uid\n\n\t# Max depth to prevent infinite loops in case of unexpected API responses or circular refs\n\tlocal max_depth=10\n\tlocal current_depth=0\n\n\twhile [[ -n $current_folder_uid && $current_folder_uid != \"null\" && $current_depth -lt $max_depth ]]; do\n\t\tfolder_details_json=$(get_folder_path_details \"$current_folder_uid\")\n\n\t\t# Extract title and parentUid using jq\n\t\tif ! title=$(echo \"$folder_details_json\" | jq -r '.title // empty'); then\n\t\t\techo \"ERROR: Failed to parse title from folder details: $folder_details_json\" >&2\n\t\t\tbreak\n\t\tfi\n\n\t\tif ! parent_uid=$(echo \"$folder_details_json\" | jq -r '.parentUid // empty'); then\n\t\t\techo \"ERROR: Failed to parse parentUid from folder details: $folder_details_json\" >&2\n\t\t\tbreak\n\t\tfi\n\n\t\tif [[ -z $title || $title == \"null\" ]]; then\n\t\t\techo \"WARNING: Encountered folder with no title (UID: $current_folder_uid). Path reconstruction may be incomplete.\" >&2\n\t\t\tbreak\n\t\tfi\n\n\t\tslug_title=$(slugify \"$title\")\n\t\tpath_components=(\"$slug_title\" \"${path_components[@]}\") # Prepend slugified title to build path in reverse (Child, Parent, Root)\n\n\t\tif [[ -z $parent_uid || $parent_uid == \"null\" ]]; then\n\t\t\tbreak\n\t\tfi\n\n\t\tcurrent_folder_uid=\"$parent_uid\"\n\t\t((current_depth++))\n\tdone\n\n\tif [[ $current_depth -ge $max_depth ]]; then\n\t\techo \"WARNING: Reached max folder depth during path reconstruction for initial folder UID '$1'. Path might be truncated.\" >&2\n\tfi\n\n\t# Echo space-separated list of titles. Caller will capture into an array.\n\t# This order is Parent/Child because we prepended.\n\techo \"${path_components[*]}\"\n}\n\ncreate_folder() {\n\tlocal folder_title=$1\n\tlocal new_folder_uid\n\n\tlocal json_payload\n\tjson_payload=$(jq -cn --arg title \"$folder_title\" '{spec: {title: $title}}')\n\n\tnew_folder_uid=$(curl --silent --fail --show-error -X POST \\\n\t\t-H \"Authorization: Bearer $GRAFANA_API_TOKEN\" \\\n\t\t-H \"Content-Type: application/json\" \\\n\t\t-d \"$json_payload\" \\\n\t\t\"$URL/apis/folder.grafana.app/$API_VERSION/namespaces/$GRAFANA_ORG_NAMESPACE/folders\" |\n\t\tjq -r '.metadata.name // empty')\n\n\techo \"$new_folder_uid\"\n}\n\nlist_dashboards() {\n\tcurl \\\n\t\t--silent --fail --show-error \\\n\t\t-H \"Authorization: Bearer $GRAFANA_API_TOKEN\" \\\n\t\t\"$URL/apis/dashboard.grafana.app/$API_VERSION/namespaces/$GRAFANA_ORG_NAMESPACE/dashboards\" |\n\t\tjq -c '.items[]? | {uid: .metadata.name, title: .spec.title, folderUid: (.metadata.annotations.\"grafana.app/folder\" // \"\")}'\n}\n\nmain \"$@\"\n"
  },
  {
    "path": "grafana/dashboards.yml",
    "content": "apiVersion: 1\n\nproviders:\n  - name: \"teslamate\"\n    orgId: 1\n    folder: TeslaMate\n    folderUid: Nr4ofiDZk\n    type: file\n    disableDeletion: false\n    allowUiUpdates: true\n    updateIntervalSeconds: 86400\n    options:\n      path: /dashboards\n  - name: \"teslamate_internal\"\n    orgId: 1\n    folder: Internal\n    folderUid: Nr5ofiDZk\n    type: file\n    disableDeletion: false\n    allowUiUpdates: true\n    updateIntervalSeconds: 86400\n    options:\n      path: /dashboards_internal\n  - name: \"teslamate_reports\"\n    orgId: 1\n    folder: Reports\n    folderUid: Nr6ofiDZk\n    type: file\n    disableDeletion: false\n    allowUiUpdates: true\n    updateIntervalSeconds: 86400\n    options:\n      path: /dashboards_reports\n"
  },
  {
    "path": "grafana/datasource.yml",
    "content": "apiVersion: 1\n\ndatasources:\n  - name: TeslaMate\n    type: postgres\n    url: $DATABASE_HOST:$DATABASE_PORT\n    user: $DATABASE_USER\n    access: proxy\n    basicAuth: false\n    withCredentials: false\n    isDefault: true\n    secureJsonData:\n      password: $DATABASE_PASS\n    jsonData:\n      postgresVersion: 1500\n      sslmode: $DATABASE_SSL_MODE\n      database: $DATABASE_NAME\n    version: 1\n    editable: true\n"
  },
  {
    "path": "lib/tesla_api/auth/refresh.ex",
    "content": "defmodule TeslaApi.Auth.Refresh do\n  import TeslaApi.Auth, only: [post: 2]\n\n  alias TeslaApi.{Auth, Error}\n\n  @web_client_id TeslaApi.Auth.web_client_id()\n\n  def refresh(%Auth{} = auth) do\n    issuer_url =\n      if System.get_env(\"TESLA_AUTH_HOST\", \"\") == \"\" do\n        Auth.issuer_url(auth)\n      else\n        System.get_env(\"TESLA_AUTH_HOST\", \"\") <> System.get_env(\"TESLA_AUTH_PATH\", \"\")\n      end\n\n    data = %{\n      grant_type: \"refresh_token\",\n      scope: \"openid email offline_access\",\n      client_id: System.get_env(\"TESLA_AUTH_CLIENT_ID\", @web_client_id),\n      refresh_token: auth.refresh_token\n    }\n\n    case post(\n           \"#{issuer_url}/token\" <> System.get_env(\"TOKEN\", \"\"),\n           data\n         ) do\n      {:ok, %Tesla.Env{status: 200, body: body}} ->\n        auth = %Auth{\n          token: body[\"access_token\"],\n          type: body[\"token_type\"],\n          expires_in: body[\"expires_in\"],\n          refresh_token: body[\"refresh_token\"],\n          created_at: body[\"created_at\"]\n        }\n\n        {:ok, auth}\n\n      error ->\n        Error.into(error, :token_refresh)\n    end\n  end\nend\n"
  },
  {
    "path": "lib/tesla_api/auth.ex",
    "content": "defmodule TeslaApi.Auth do\n  use Tesla\n\n  alias TeslaApi.Error\n\n  @web_client_id \"ownerapi\"\n  @redirect_uri \"https://auth.tesla.com/void/callback\"\n\n  def web_client_id, do: @web_client_id\n  def redirect_uri, do: @redirect_uri\n\n  @default_headers [\n    {\"user-agent\", \"TeslaMate/#{Mix.Project.config()[:version]}\"},\n    {\"Accept\", \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\"},\n    {\"Accept-Language\", \"en-US,de-DE;q=0.5\"}\n  ]\n\n  adapter Tesla.Adapter.Finch, name: TeslaMate.HTTP, receive_timeout: 60_000\n\n  plug TeslaApi.Middleware.FollowRedirects, except: [@redirect_uri]\n  plug Tesla.Middleware.BaseUrl, System.get_env(\"TESLA_AUTH_HOST\", \"https://auth.tesla.com\")\n  plug Tesla.Middleware.Headers, @default_headers\n  plug Tesla.Middleware.JSON\n  plug Tesla.Middleware.Logger, debug: true, log_level: &log_level/1\n\n  defstruct [:token, :type, :expires_in, :refresh_token, :created_at]\n\n  defdelegate refresh(auth), to: __MODULE__.Refresh\n\n  def issuer_url(%__MODULE__{token: access_token}) do\n    case derive_issuer_url_from_oat(access_token) do\n      {:ok, issuer_url} ->\n        issuer_url\n\n      :error ->\n        case decode_jwt_payload(access_token) do\n          {:ok, %{\"iss\" => issuer_url}} -> issuer_url\n          _ -> \"https://auth.tesla.com/oauth2/v3\"\n        end\n    end\n  end\n\n  def region(%__MODULE__{} = auth) do\n    tld =\n      auth\n      |> issuer_url()\n      |> URI.parse()\n      |> Map.fetch!(:host)\n      |> String.split(\".\")\n      |> List.last()\n\n    case tld do\n      \"cn\" -> :chinese\n      \"com\" -> :global\n      _other -> :other\n    end\n  end\n\n  defp derive_issuer_url_from_oat(\"qts-\" <> _),\n    do:\n      {:ok,\n       System.get_env(\"TESLA_AUTH_HOST\", \"https://auth.tesla.com\") <>\n         System.get_env(\"TESLA_AUTH_PATH\", \"/oauth2/v3\")}\n\n  defp derive_issuer_url_from_oat(\"eu-\" <> _),\n    do:\n      {:ok,\n       System.get_env(\"TESLA_AUTH_HOST\", \"https://auth.tesla.com\") <>\n         System.get_env(\"TESLA_AUTH_PATH\", \"/oauth2/v3\")}\n\n  defp derive_issuer_url_from_oat(\"cn-\" <> _),\n    do:\n      {:ok,\n       System.get_env(\"TESLA_AUTH_HOST\", \"https://auth.tesla.com\") <>\n         System.get_env(\"TESLA_AUTH_PATH\", \"/oauth2/v3\")}\n\n  defp derive_issuer_url_from_oat(_), do: :error\n\n  defp decode_jwt_payload(jwt) do\n    with [_algo, payload, _signature] <- String.split(jwt, \".\"),\n         {:ok, payload} <- Base.decode64(payload, padding: false),\n         {:ok, payload} <- Jason.decode(payload) do\n      {:ok, payload}\n    else\n      l when is_list(l) ->\n        Error.into({:error, :invalid_jwt}, :invalid_access_token)\n\n      {:error, reason} ->\n        Error.into({:error, reason}, :invalid_access_token)\n\n      _error ->\n        Error.into({:error, \"Invalid access token\"}, :invalid_access_token)\n    end\n  end\n\n  defp log_level(%Tesla.Env{} = env) when env.status >= 400, do: :error\n  defp log_level(%Tesla.Env{}), do: :info\nend\n"
  },
  {
    "path": "lib/tesla_api/error.ex",
    "content": "defmodule TeslaApi.Error do\n  defexception [:reason, :message, :env]\n\n  @impl true\n  def message(%__MODULE__{message: message}) when is_binary(message), do: message\n  def message(%__MODULE__{reason: e}) when is_exception(e), do: Exception.message(e)\n  def message(%__MODULE__{reason: reason}), do: inspect(reason)\n\n  def into(response, reason \\\\ :unknown)\n\n  def into({:ok, %Tesla.Env{} = env}, reason) do\n    message =\n      case env.body do\n        %{\"error\" => %{\"message\" => message}} when is_binary(message) ->\n          message\n\n        body when is_binary(body) ->\n          case Floki.parse_document(body) do\n            {:error, _} -> body\n            {:ok, _} -> nil\n          end\n\n        _ ->\n          nil\n      end\n\n    {:error, %__MODULE__{reason: reason, message: message, env: env}}\n  end\n\n  def into({:error, reason}, _reason) when is_atom(reason) do\n    {:error, %__MODULE__{reason: reason}}\n  end\n\n  def into({:error, error}, reason) do\n    {:error, %__MODULE__{reason: reason, message: error}}\n  end\nend\n"
  },
  {
    "path": "lib/tesla_api/middleware/follow_redirects.ex",
    "content": "defmodule TeslaApi.Middleware.FollowRedirects do\n  @moduledoc \"\"\"\n  Follow 3xx redirects\n\n  Source: https://github.com/teamon/tesla/blob/master/lib/tesla/middleware/follow_redirects.ex\n\n  ## Example\n\n  ```\n  defmodule MyClient do\n    use Tesla\n\n    plug Tesla.Middleware.FollowRedirects, max_redirects: 3, except: [\"http:/www.example.com\"]\n  end\n  ```\n\n  ## Options\n\n  - `:max_redirects` - limit number of redirects (default: `3`)\n  - `:except` - redirect locations which should not be followed (default: `[]`)\n\n  \"\"\"\n\n  @behaviour Tesla.Middleware\n\n  @max_redirects 3\n  @redirect_statuses [301, 302, 303, 307, 308]\n\n  @impl Tesla.Middleware\n  def call(env, next, opts \\\\ []) do\n    max = Keyword.get([], :max_redirects, @max_redirects)\n    except = opts[:except] || []\n\n    redirect(env, next, except, max)\n  end\n\n  defp redirect(env, next, _except, left) when left == 0 do\n    case Tesla.run(env, next) do\n      {:ok, %{status: status} = env} when status not in @redirect_statuses ->\n        {:ok, env}\n\n      {:ok, _env} ->\n        {:error, {__MODULE__, :too_many_redirects}}\n\n      error ->\n        error\n    end\n  end\n\n  defp redirect(env, next, except, left) do\n    case Tesla.run(env, next) do\n      {:ok, %{status: status} = res} when status in @redirect_statuses ->\n        case Tesla.get_header(res, \"location\") do\n          nil ->\n            {:ok, res}\n\n          location ->\n            if Enum.any?(except, &String.starts_with?(location, &1)) do\n              {:ok, res}\n            else\n              prev_uri = URI.parse(env.url)\n              next_uri = parse_location(location, res)\n\n              # Copy opts and query params from the response env,\n              # these are not modified in the adapters, but middlewares\n              # that come after might store state there\n              env = %{env | opts: res.opts}\n\n              env\n              |> filter_headers(prev_uri, next_uri)\n              |> new_request(status, URI.to_string(next_uri))\n              |> redirect(next, except, left - 1)\n            end\n        end\n\n      other ->\n        other\n    end\n  end\n\n  # The 303 (See Other) redirect was added in HTTP/1.1 to indicate that the originally\n  # requested resource is not available, however a related resource (or another redirect)\n  # available via GET is available at the specified location.\n  # https://tools.ietf.org/html/rfc7231#section-6.4.4\n  defp new_request(env, 303, location), do: %{env | url: location, method: :get, query: []}\n\n  # The 307 (Temporary Redirect) status code indicates that the target\n  # resource resides temporarily under a different URI and the user agent\n  # MUST NOT change the request method (...)\n  # https://tools.ietf.org/html/rfc7231#section-6.4.7\n  defp new_request(env, 307, location), do: %{env | url: location}\n\n  defp new_request(env, _, location), do: %{env | url: location, query: []}\n\n  defp parse_location(\"https://\" <> _rest = location, _env), do: URI.parse(location)\n  defp parse_location(\"http://\" <> _rest = location, _env), do: URI.parse(location)\n  defp parse_location(location, env), do: env.url |> URI.parse() |> URI.merge(location)\n\n  # See https://github.com/teamon/tesla/issues/362\n  # See https://github.com/teamon/tesla/issues/360\n  @filter_headers [\"authorization\", \"host\"]\n  defp filter_headers(env, prev, next) do\n    if next.host != prev.host || next.port != prev.port || next.scheme != prev.scheme do\n      %{env | headers: Enum.filter(env.headers, fn {k, _} -> k not in @filter_headers end)}\n    else\n      env\n    end\n  end\nend\n"
  },
  {
    "path": "lib/tesla_api/middleware/token_auth.ex",
    "content": "defmodule TeslaApi.Middleware.TokenAuth do\n  @behaviour Tesla.Middleware\n\n  @impl Tesla.Middleware\n  def call(%Tesla.Env{} = env, next, _opts) do\n    env =\n      case env.opts[:access_token] do\n        nil -> env\n        token -> Tesla.put_header(env, \"Authorization\", \"Bearer \" <> token)\n      end\n\n    Tesla.run(env, next)\n  end\nend\n"
  },
  {
    "path": "lib/tesla_api/stream/data.ex",
    "content": "defmodule TeslaApi.Stream.Data do\n  defstruct ~w(time speed odometer soc elevation est_heading est_lat est_lng power shift_state range\n               est_range heading)a\n\n  def into!(raw) do\n    data =\n      raw\n      |> Map.update(:time, nil, &to_dt/1)\n      |> Map.update(:elevation, nil, &to_i/1)\n      |> Map.update(:est_heading, nil, &to_i/1)\n      |> Map.update(:est_lat, nil, &to_f/1)\n      |> Map.update(:est_lng, nil, &to_f/1)\n      |> Map.update(:est_range, nil, &to_i/1)\n      |> Map.update(:heading, nil, &to_i/1)\n      |> Map.update(:odometer, nil, &to_f/1)\n      |> Map.update(:power, nil, &to_i/1)\n      |> Map.update(:range, nil, &to_i/1)\n      |> Map.update(:shift_state, nil, &to_s/1)\n      |> Map.update(:soc, nil, &to_i/1)\n      |> Map.update(:speed, nil, &to_i/1)\n\n    struct!(__MODULE__, data)\n  end\n\n  defp to_s(\"\"), do: nil\n  defp to_s(str), do: str\n\n  defp to_f(\"\"), do: nil\n  defp to_f(str), do: parse(Float, str)\n\n  defp to_i(\"\"), do: nil\n  defp to_i(str), do: parse(Integer, str)\n\n  defp parse(mod, str) when mod in [Integer, Float] do\n    case apply(mod, :parse, [str]) do\n      {f, \"\"} -> f\n      _ -> nil\n    end\n  end\n\n  defp to_dt(str) when is_binary(str) do\n    str\n    |> String.to_integer()\n    |> DateTime.from_unix!(:millisecond)\n  end\nend\n"
  },
  {
    "path": "lib/tesla_api/stream.ex",
    "content": "defmodule TeslaApi.Stream do\n  use WebSockex\n\n  require Logger\n  alias TeslaApi.Auth\n  alias __MODULE__.Data\n\n  defmodule State do\n    defstruct auth: nil,\n              vehicle_id: nil,\n              timer: nil,\n              receiver: &IO.inspect/1,\n              last_data: nil,\n              timeouts: 0,\n              disconnects: 0\n  end\n\n  @columns ~w(speed odometer soc elevation est_heading est_lat est_lng power shift_state range\n              est_range heading)a\n\n  @cacerts CAStore.file_path()\n           |> File.read!()\n           |> :public_key.pem_decode()\n           |> Enum.map(fn {_, cert, _} -> cert end)\n\n  def start_link(args) do\n    state = %State{\n      receiver: Keyword.get(args, :receiver, &Logger.debug(inspect(&1))),\n      vehicle_id: Keyword.fetch!(args, :vehicle_id),\n      auth: Keyword.fetch!(args, :auth)\n    }\n\n    endpoint_url =\n      case Auth.region(state.auth) do\n        :chinese ->\n          System.get_env(\"TESLA_WSS_HOST\", \"wss://streaming.vn.cloud.tesla.cn\") <>\n            \"/streaming/\" <>\n            System.get_env(\"TOKEN\", \"\")\n\n        _global ->\n          System.get_env(\"TESLA_WSS_HOST\", \"wss://streaming.vn.teslamotors.com\") <>\n            \"/streaming/\" <>\n            System.get_env(\"TOKEN\", \"\")\n      end\n\n    WebSockex.start_link(endpoint_url, __MODULE__, state,\n      socket_connect_timeout: :timer.seconds(15),\n      socket_recv_timeout: :timer.seconds(30),\n      name: :\"stream_#{state.vehicle_id}\",\n      cacerts: @cacerts,\n      insecure: System.get_env(\"TESLA_WSS_TLS_ACCEPT_INVALID_CERTS\", \"\") == \"true\",\n      async: true\n    )\n  end\n\n  def disconnect(pid) do\n    WebSockex.cast(pid, :disconnect)\n  end\n\n  @impl true\n  def handle_cast(:disconnect, %State{vehicle_id: vid} = state) do\n    send(self(), :exit)\n    {:reply, frame!(%{msg_type: \"data:unsubscribe\", tag: \"#{vid}\"}), state}\n  end\n\n  @impl true\n  def handle_connect(_conn, state) do\n    Logger.debug(\"Connection established\")\n    send(self(), :subscribe)\n    {:ok, state}\n  end\n\n  @impl true\n  def handle_info(:subscribe, %State{auth: %Auth{token: token}, vehicle_id: vid} = state) do\n    Logger.debug(\"Subscribing …\")\n\n    cancel_timer(state.timer)\n    ms = exp_backoff_ms(state.timeouts, min_seconds: 10, max_seconds: 30)\n    timer = Process.send_after(self(), :timeout, ms)\n\n    connect_message = %{\n      msg_type: \"data:subscribe_oauth\",\n      token: token,\n      value: Enum.join(@columns, \",\"),\n      tag: \"#{vid}\"\n    }\n\n    {:reply, frame!(connect_message), %State{state | timer: timer}}\n  end\n\n  def handle_info(:timeout, %State{timeouts: t, receiver: receiver} = state) do\n    Logger.debug(\"Stream.Timeout / #{inspect(t)}\")\n\n    if match?(%State{last_data: %Data{}}, state) and rem(t, 10) == 4 do\n      receiver.(:inactive)\n    end\n\n    {:close, %State{state | timeouts: t + 1}}\n  end\n\n  def handle_info({:ssl, _, _} = msg, state) do\n    Logger.warning(\"Received unexpected message: #{inspect(msg)}\")\n    {:ok, state}\n  end\n\n  def handle_info(:exit, _state) do\n    exit(:normal)\n  end\n\n  @impl true\n  def handle_frame({_type, msg}, %State{vehicle_id: vid} = state) do\n    tag = to_string(vid)\n\n    cancel_timer(state.timer)\n    timer = Process.send_after(self(), :timeout, :timer.seconds(30))\n    state = %State{state | timer: timer}\n\n    case Jason.decode(msg) do\n      {:ok, %{\"msg_type\" => \"control:hello\", \"connection_timeout\" => t}} ->\n        Logger.debug(\"control:hello – #{t}\")\n        {:ok, state}\n\n      {:ok, %{\"msg_type\" => \"data:update\", \"tag\" => ^tag, \"value\" => data}}\n      when is_binary(data) ->\n        data =\n          Enum.zip([:time | @columns], String.split(data, \",\"))\n          |> Enum.into(%{})\n          |> Data.into!()\n\n        state.receiver.(data)\n\n        {:ok, %State{state | last_data: data, timeouts: 0, disconnects: 0}}\n\n      {:ok, %{\"msg_type\" => \"data:error\", \"tag\" => ^tag, \"error_type\" => \"vehicle_disconnected\"}} ->\n        case state.disconnects do\n          d when d != 0 and rem(d, 10) == 0 ->\n            Logger.warning(\"Too many disconnects from streaming API\")\n\n            cancel_timer(state.timer)\n            state.receiver.(:too_many_disconnects)\n\n            {:ok, %State{state | disconnects: d + 1}}\n\n          d ->\n            ms =\n              case state do\n                %State{last_data: %Data{shift_state: s}} when s in ~w(P D N R) ->\n                  exp_backoff_ms(d, base: 1.3, max_seconds: 8)\n\n                %State{} ->\n                  exp_backoff_ms(d, min_seconds: 15, max_seconds: 30)\n              end\n\n            cancel_timer(state.timer)\n            timer = Process.send_after(self(), :subscribe, ms)\n\n            {:ok, %State{state | timer: timer, disconnects: d + 1}}\n        end\n\n      {:ok,\n       %{\"msg_type\" => \"data:error\", \"tag\" => ^tag, \"error_type\" => \"vehicle_error\", \"value\" => v}} ->\n        case v do\n          \"Vehicle is offline\" ->\n            Logger.info(\"Streaming API: Vehicle offline\")\n            state.receiver.(:vehicle_offline)\n\n          _ ->\n            Logger.error(\"Vehicle Error: #{v}\")\n        end\n\n        {:ok, state}\n\n      {:ok, %{\"msg_type\" => \"data:error\", \"tag\" => ^tag, \"error_type\" => \"client_error\"} = msg} ->\n        case msg do\n          %{\"value\" => \"owner_api error:\" <> _ = error} ->\n            Logger.warning(\"Streaming API Client Error: #{error}\")\n            {:close, state}\n\n          %{\"value\" => \"Can't validate token\" <> _} ->\n            Logger.warning(\"Streaming API: Tokens expired\")\n            state.receiver.(:tokens_expired)\n            {:ok, state}\n\n          _ ->\n            raise \"Client Error: #{inspect(msg)}\"\n        end\n\n      {:ok, %{\"msg_type\" => \"data:error\", \"tag\" => ^tag, \"error_type\" => type, \"value\" => v}} ->\n        Logger.error(\"Error #{inspect(type)}: #{v}\")\n        {:ok, state}\n\n      {:ok, msg} ->\n        Logger.warning(\"Unknown Message: #{inspect(msg, pretty: true)}\")\n        {:ok, state}\n\n      {:error, reason} ->\n        Logger.error(\"Invalid data frame: #{inspect(reason)}\")\n        {:ok, state}\n    end\n  end\n\n  @impl true\n  def handle_disconnect(%{reason: reason, attempt_number: n}, %State{} = state)\n      when is_number(n) do\n    cancel_timer(state.timer)\n\n    case reason do\n      {:local, :normal} ->\n        Logger.debug(\n          \"Connection was closed (a:#{n}|t:#{state.timeouts}|d:#{state.disconnects}). Reconnecting …\"\n        )\n\n        {:reconnect, state}\n\n      {:remote, :closed} ->\n        Logger.warning(\"WebSocket disconnected. Reconnecting …\")\n\n        n\n        |> exp_backoff_ms(max_seconds: 10)\n        |> Process.sleep()\n\n        {:reconnect, %{state | last_data: nil}}\n\n      %WebSockex.ConnError{} = e ->\n        Logger.warning(\"Disconnected! #{Exception.message(e)} | #{n}\")\n\n        n\n        |> exp_backoff_ms(min_seconds: 1)\n        |> Process.sleep()\n\n        {:reconnect, state}\n\n      %WebSockex.RequestError{} = e ->\n        Logger.warning(\"Disconnected! #{Exception.message(e)} | #{n}\")\n\n        n\n        |> exp_backoff_ms(min_seconds: 1)\n        |> Process.sleep()\n\n        {:reconnect, state}\n    end\n  end\n\n  @impl true\n  def terminate(:normal, _state), do: :ok\n\n  def terminate(reason, _state) do\n    # https://github.com/Azolo/websockex/issues/51\n    with {exception, stacktrace} <- reason, true <- is_exception(exception) do\n      Logger.error(fn -> Exception.format(:error, exception, stacktrace) end)\n    else\n      _ -> Logger.error(\"Terminating: #{inspect(reason)}\")\n    end\n\n    :ok\n  end\n\n  ## Private\n\n  defp frame!(data) when is_map(data), do: {:text, Jason.encode!(data)}\n\n  defp exp_backoff_ms(n, opts) when is_number(n) and 0 <= n do\n    base = Keyword.get(opts, :base, 2)\n    min = Keyword.get(opts, :min_seconds, 0)\n    max = Keyword.get(opts, :max_seconds, 30)\n\n    :math.pow(base, n) |> min(max) |> max(min) |> round() |> :timer.seconds()\n  end\n\n  defp cancel_timer(nil), do: :ok\n  defp cancel_timer(ref) when is_reference(ref), do: Process.cancel_timer(ref)\nend\n"
  },
  {
    "path": "lib/tesla_api/vehicle/state.ex",
    "content": "defmodule TeslaApi.Vehicle.State do\n  defmodule Charge do\n    defstruct [\n      :charge_miles_added_rated,\n      :charge_current_request,\n      :charger_power,\n      :managed_charging_start_time,\n      :charger_phases,\n      :charge_energy_added,\n      :charger_voltage,\n      :fast_charger_type,\n      :time_to_full_charge,\n      :ideal_battery_range,\n      :usable_battery_level,\n      :scheduled_charging_pending,\n      :charger_actual_current,\n      :est_battery_range,\n      :charge_limit_soc_min,\n      :charge_port_door_open,\n      :managed_charging_active,\n      :charge_limit_soc_max,\n      :fast_charger_present,\n      :fast_charger_brand,\n      :scheduled_charging_start_time,\n      :conn_charge_cable,\n      :timestamp,\n      :user_charge_enable_request,\n      :charge_port_cold_weather_mode,\n      :charge_to_max_range,\n      :max_range_charge_counter,\n      :charge_limit_soc_std,\n      :charge_port_latch,\n      :managed_charging_user_canceled,\n      :charger_pilot_current,\n      :trip_charging,\n      :battery_range,\n      :charging_state,\n      :charge_rate,\n      :not_enough_power_to_heat,\n      :charge_limit_soc,\n      :charge_enable_request,\n      :charge_current_request_max,\n      :battery_level,\n      :charge_miles_added_ideal,\n      :battery_heater_on\n    ]\n\n    def result(charge) when is_map(charge) do\n      %__MODULE__{\n        charge_miles_added_rated: charge[\"charge_miles_added_rated\"],\n        charge_current_request: charge[\"charge_current_request\"],\n        charger_power: charge[\"charger_power\"],\n        managed_charging_start_time: charge[\"managed_charging_start_time\"],\n        charger_phases: charge[\"charger_phases\"],\n        charge_energy_added: charge[\"charge_energy_added\"],\n        charger_voltage: charge[\"charger_voltage\"],\n        fast_charger_type: charge[\"fast_charger_type\"],\n        time_to_full_charge: charge[\"time_to_full_charge\"],\n        ideal_battery_range: charge[\"ideal_battery_range\"],\n        usable_battery_level: charge[\"usable_battery_level\"],\n        scheduled_charging_pending: charge[\"scheduled_charging_pending\"],\n        charger_actual_current: charge[\"charger_actual_current\"],\n        est_battery_range: charge[\"est_battery_range\"],\n        charge_limit_soc_min: charge[\"charge_limit_soc_min\"],\n        charge_port_door_open: charge[\"charge_port_door_open\"],\n        managed_charging_active: charge[\"managed_charging_active\"],\n        charge_limit_soc_max: charge[\"charge_limit_soc_max\"],\n        fast_charger_present: charge[\"fast_charger_present\"],\n        fast_charger_brand: charge[\"fast_charger_brand\"],\n        scheduled_charging_start_time: charge[\"scheduled_charging_start_time\"],\n        conn_charge_cable: charge[\"conn_charge_cable\"],\n        timestamp: charge[\"timestamp\"],\n        user_charge_enable_request: charge[\"user_charge_enable_request\"],\n        charge_port_cold_weather_mode: charge[\"charge_port_cold_weather_mode\"],\n        charge_to_max_range: charge[\"charge_to_max_range\"],\n        max_range_charge_counter: charge[\"max_range_charge_counter\"],\n        charge_limit_soc_std: charge[\"charge_limit_soc_std\"],\n        charge_port_latch: charge[\"charge_port_latch\"],\n        managed_charging_user_canceled: charge[\"managed_charging_user_canceled\"],\n        charger_pilot_current: charge[\"charger_pilot_current\"],\n        trip_charging: charge[\"trip_charging\"],\n        battery_range: charge[\"battery_range\"],\n        charging_state: charge[\"charging_state\"],\n        charge_rate: charge[\"charge_rate\"],\n        not_enough_power_to_heat: charge[\"not_enough_power_to_heat\"],\n        charge_limit_soc: charge[\"charge_limit_soc\"],\n        charge_enable_request: charge[\"charge_enable_request\"],\n        charge_current_request_max: charge[\"charge_current_request_max\"],\n        battery_level: charge[\"battery_level\"],\n        charge_miles_added_ideal: charge[\"charge_miles_added_ideal\"],\n        battery_heater_on: charge[\"battery_heater_on\"]\n      }\n    end\n  end\n\n  defmodule Climate do\n    defstruct [\n      :battery_heater,\n      :battery_heater_no_power,\n      :climate_keeper_mode,\n      :defrost_mode,\n      :driver_temp_setting,\n      :fan_status,\n      :inside_temp,\n      :is_auto_conditioning_on,\n      :is_climate_on,\n      :is_front_defroster_on,\n      :is_preconditioning,\n      :is_rear_defroster_on,\n      :left_temp_direction,\n      :max_avail_temp,\n      :min_avail_temp,\n      :outside_temp,\n      :passenger_temp_setting,\n      :remote_heater_control_enabled,\n      :right_temp_direction,\n      :seat_heater_left,\n      :seat_heater_rear_center,\n      :seat_heater_rear_left,\n      :seat_heater_rear_right,\n      :seat_heater_rear_left_back,\n      :seat_heater_rear_right_back,\n      :seat_heater_right,\n      :side_mirror_heaters,\n      :steering_wheel_heater,\n      :smart_preconditioning,\n      :timestamp,\n      :wiper_blade_heater\n    ]\n\n    def result(climate) when is_map(climate) do\n      %__MODULE__{\n        battery_heater: climate[\"battery_heater\"],\n        battery_heater_no_power: climate[\"battery_heater_no_power\"],\n        climate_keeper_mode: climate[\"climate_keeper_mode\"],\n        defrost_mode: climate[\"defrost_mode\"],\n        driver_temp_setting: climate[\"driver_temp_setting\"],\n        fan_status: climate[\"fan_status\"],\n        inside_temp: climate[\"inside_temp\"],\n        is_auto_conditioning_on: climate[\"is_auto_conditioning_on\"],\n        is_climate_on: climate[\"is_climate_on\"],\n        is_front_defroster_on: climate[\"is_front_defroster_on\"],\n        is_preconditioning: climate[\"is_preconditioning\"],\n        is_rear_defroster_on: climate[\"is_rear_defroster_on\"],\n        left_temp_direction: climate[\"left_temp_direction\"],\n        max_avail_temp: climate[\"max_avail_temp\"],\n        min_avail_temp: climate[\"min_avail_temp\"],\n        outside_temp: climate[\"outside_temp\"],\n        passenger_temp_setting: climate[\"passenger_temp_setting\"],\n        remote_heater_control_enabled: climate[\"remote_heater_control_enabled\"],\n        right_temp_direction: climate[\"right_temp_direction\"],\n        seat_heater_left: climate[\"seat_heater_left\"],\n        seat_heater_rear_center: climate[\"seat_heater_rear_center\"],\n        seat_heater_rear_left: climate[\"seat_heater_rear_left\"],\n        seat_heater_rear_right: climate[\"seat_heater_rear_right\"],\n        seat_heater_rear_left_back: climate[\"seat_heater_rear_left_back\"],\n        seat_heater_rear_right_back: climate[\"seat_heater_rear_right_back\"],\n        seat_heater_right: climate[\"seat_heater_right\"],\n        side_mirror_heaters: climate[\"side_mirror_heaters\"],\n        steering_wheel_heater: climate[\"steering_wheel_heater\"],\n        smart_preconditioning: climate[\"smart_preconditioning\"],\n        timestamp: climate[\"timestamp\"],\n        wiper_blade_heater: climate[\"wiper_blade_heater\"]\n      }\n    end\n  end\n\n  defmodule Drive do\n    defstruct [\n      :active_route_destination,\n      :active_route_energy_at_arrival,\n      :active_route_latitude,\n      :active_route_longitude,\n      :active_route_miles_to_arrival,\n      :active_route_minutes_to_arrival,\n      :active_route_traffic_minutes_delay,\n      :gps_as_of,\n      :heading,\n      :latitude,\n      :longitude,\n      :native_latitude,\n      :native_location_supported,\n      :native_longitude,\n      :native_type,\n      :power,\n      :shift_state,\n      :speed,\n      :timestamp\n    ]\n\n    def result(drive) when is_map(drive) do\n      %__MODULE__{\n        active_route_destination: drive[\"active_route_destination\"],\n        active_route_energy_at_arrival: drive[\"active_route_energy_at_arrival\"],\n        active_route_latitude: drive[\"active_route_latitude\"],\n        active_route_longitude: drive[\"active_route_longitude\"],\n        active_route_miles_to_arrival: drive[\"active_route_miles_to_arrival\"],\n        active_route_minutes_to_arrival: drive[\"active_route_minutes_to_arrival\"],\n        active_route_traffic_minutes_delay: drive[\"active_route_traffic_minutes_delay\"],\n        gps_as_of: drive[\"gps_as_of\"],\n        heading: drive[\"heading\"],\n        latitude: drive[\"latitude\"],\n        longitude: drive[\"longitude\"],\n        native_latitude: drive[\"native_latitude\"],\n        native_location_supported: drive[\"native_location_supported\"],\n        native_longitude: drive[\"native_longitude\"],\n        native_type: drive[\"native_type\"],\n        power: drive[\"power\"],\n        shift_state: drive[\"shift_state\"],\n        speed: drive[\"speed\"],\n        timestamp: drive[\"timestamp\"]\n      }\n    end\n  end\n\n  defmodule VehicleConfig do\n    defstruct [\n      :can_accept_navigation_requests,\n      :can_actuate_trunks,\n      :car_special_type,\n      :car_type,\n      :charge_port_type,\n      :eu_vehicle,\n      :exterior_color,\n      :has_air_suspension,\n      :has_ludicrous_mode,\n      :key_version,\n      :motorized_charge_port,\n      :perf_config,\n      :plg,\n      :rear_seat_heaters,\n      :rear_seat_type,\n      :rhd,\n      :roof_color,\n      :seat_type,\n      :spoiler_type,\n      :sun_roof_installed,\n      :third_row_seats,\n      :timestamp,\n      :trim_badging,\n      :use_range_badging,\n      :wheel_type\n    ]\n\n    def result(vehicle_config) when is_map(vehicle_config) do\n      %__MODULE__{\n        can_accept_navigation_requests: vehicle_config[\"can_accept_navigation_requests\"],\n        can_actuate_trunks: vehicle_config[\"can_actuate_trunks\"],\n        car_special_type: vehicle_config[\"car_special_type\"],\n        car_type: vehicle_config[\"car_type\"],\n        charge_port_type: vehicle_config[\"charge_port_type\"],\n        eu_vehicle: vehicle_config[\"eu_vehicle\"],\n        exterior_color: vehicle_config[\"exterior_color\"],\n        has_air_suspension: vehicle_config[\"has_air_suspension\"],\n        has_ludicrous_mode: vehicle_config[\"has_ludicrous_mode\"],\n        key_version: vehicle_config[\"key_version\"],\n        motorized_charge_port: vehicle_config[\"motorized_charge_port\"],\n        perf_config: vehicle_config[\"perf_config\"],\n        plg: vehicle_config[\"plg\"],\n        rear_seat_heaters: vehicle_config[\"rear_seat_heaters\"],\n        rear_seat_type: vehicle_config[\"rear_seat_type\"],\n        rhd: vehicle_config[\"rhd\"],\n        roof_color: vehicle_config[\"roof_color\"],\n        seat_type: vehicle_config[\"seat_type\"],\n        spoiler_type: vehicle_config[\"spoiler_type\"],\n        sun_roof_installed: vehicle_config[\"sun_roof_installed\"],\n        third_row_seats: vehicle_config[\"third_row_seats\"],\n        timestamp: vehicle_config[\"timestamp\"],\n        trim_badging: vehicle_config[\"trim_badging\"],\n        use_range_badging: vehicle_config[\"use_range_badging\"],\n        wheel_type: vehicle_config[\"wheel_type\"]\n      }\n    end\n  end\n\n  defmodule VehicleState do\n    defstruct [\n      :api_version,\n      :autopark_state_v3,\n      :autopark_style,\n      :calendar_supported,\n      :car_version,\n      :center_display_state,\n      :df,\n      :dr,\n      :ft,\n      :homelink_device_count,\n      :homelink_nearby,\n      :is_user_present,\n      :last_autopark_error,\n      :locked,\n      :notifications_supported,\n      :odometer,\n      :parsed_calendar_supported,\n      :pf,\n      :pr,\n      :remote_start,\n      :remote_start_enabled,\n      :remote_start_supported,\n      :rt,\n      :fd_window,\n      :fp_window,\n      :rd_window,\n      :rp_window,\n      :sentry_mode,\n      :sentry_mode_available,\n      :smart_summon_available,\n      :software_update,\n      :summon_standby_mode_enabled,\n      :sun_roof_percent_open,\n      :sun_roof_state,\n      :timestamp,\n      :valet_mode,\n      :valet_pin_needed,\n      :vehicle_name,\n      :tpms_pressure_fl,\n      :tpms_pressure_fr,\n      :tpms_pressure_rl,\n      :tpms_pressure_rr,\n      :tpms_soft_warning_fl,\n      :tpms_soft_warning_fr,\n      :tpms_soft_warning_rl,\n      :tpms_soft_warning_rr\n    ]\n\n    defmodule SoftwareUpdate do\n      defstruct [\n        :download_perc,\n        :expected_duration_sec,\n        :install_perc,\n        :scheduled_time_ms,\n        :status,\n        :version\n      ]\n    end\n\n    def result(vehicle_state) when is_map(vehicle_state) do\n      %__MODULE__{\n        api_version: vehicle_state[\"api_version\"],\n        autopark_state_v3: vehicle_state[\"autopark_state_v3\"],\n        autopark_style: vehicle_state[\"autopark_style\"],\n        calendar_supported: vehicle_state[\"calendar_supported\"],\n        car_version: vehicle_state[\"car_version\"],\n        center_display_state: vehicle_state[\"center_display_state\"],\n        df: vehicle_state[\"df\"],\n        dr: vehicle_state[\"dr\"],\n        ft: vehicle_state[\"ft\"],\n        homelink_device_count: vehicle_state[\"homelink_device_count\"],\n        homelink_nearby: vehicle_state[\"homelink_nearby\"],\n        is_user_present: vehicle_state[\"is_user_present\"],\n        last_autopark_error: vehicle_state[\"last_autopark_error\"],\n        locked: vehicle_state[\"locked\"],\n        notifications_supported: vehicle_state[\"notifications_supported\"],\n        odometer: vehicle_state[\"odometer\"],\n        parsed_calendar_supported: vehicle_state[\"parsed_calendar_supported\"],\n        pf: vehicle_state[\"pf\"],\n        pr: vehicle_state[\"pr\"],\n        remote_start: vehicle_state[\"remote_start\"],\n        remote_start_enabled: vehicle_state[\"remote_start_enabled\"],\n        remote_start_supported: vehicle_state[\"remote_start_supported\"],\n        rt: vehicle_state[\"rt\"],\n        software_update: %SoftwareUpdate{\n          download_perc: vehicle_state[\"software_update\"][\"download_perc\"],\n          expected_duration_sec: vehicle_state[\"software_update\"][\"expected_duration_sec\"],\n          install_perc: vehicle_state[\"software_update\"][\"install_perc\"],\n          scheduled_time_ms: vehicle_state[\"software_update\"][\"scheduled_time_ms\"],\n          status: vehicle_state[\"software_update\"][\"status\"],\n          version: vehicle_state[\"software_update\"][\"version\"]\n        },\n        summon_standby_mode_enabled: vehicle_state[\"summon_standby_mode_enabled\"],\n        sun_roof_percent_open: vehicle_state[\"sun_roof_percent_open\"],\n        sun_roof_state: vehicle_state[\"sun_roof_state\"],\n        timestamp: vehicle_state[\"timestamp\"],\n        valet_mode: vehicle_state[\"valet_mode\"],\n        fd_window: vehicle_state[\"fd_window\"],\n        fp_window: vehicle_state[\"fp_window\"],\n        rd_window: vehicle_state[\"rd_window\"],\n        rp_window: vehicle_state[\"rp_window\"],\n        sentry_mode: vehicle_state[\"sentry_mode\"],\n        sentry_mode_available: vehicle_state[\"sentry_mode_available\"],\n        smart_summon_available: vehicle_state[\"smart_summon_available\"],\n        valet_pin_needed: vehicle_state[\"valet_pin_needed\"],\n        vehicle_name: vehicle_state[\"vehicle_name\"],\n        tpms_pressure_fl: vehicle_state[\"tpms_pressure_fl\"],\n        tpms_pressure_fr: vehicle_state[\"tpms_pressure_fr\"],\n        tpms_pressure_rl: vehicle_state[\"tpms_pressure_rl\"],\n        tpms_pressure_rr: vehicle_state[\"tpms_pressure_rr\"],\n        tpms_soft_warning_fl: vehicle_state[\"tpms_soft_warning_fl\"],\n        tpms_soft_warning_fr: vehicle_state[\"tpms_soft_warning_fr\"],\n        tpms_soft_warning_rl: vehicle_state[\"tpms_soft_warning_rl\"],\n        tpms_soft_warning_rr: vehicle_state[\"tpms_soft_warning_rr\"]\n      }\n    end\n  end\nend\n"
  },
  {
    "path": "lib/tesla_api/vehicle.ex",
    "content": "defmodule TeslaApi.Vehicle do\n  alias __MODULE__.State.{Charge, Climate, Drive, VehicleConfig, VehicleState}\n  alias TeslaApi.{Auth, Error}\n\n  defstruct id: nil,\n            vehicle_id: nil,\n            vin: nil,\n            tokens: [],\n            state: \"unknown\",\n            option_codes: [],\n            in_service: false,\n            display_name: nil,\n            color: nil,\n            calendar_enabled: nil,\n            backseat_token: nil,\n            backseat_token_updated_at: nil,\n            api_version: nil,\n            charge_state: nil,\n            climate_state: nil,\n            drive_state: nil,\n            gui_settings: nil,\n            vehicle_config: nil,\n            vehicle_state: nil\n\n  def list(%Auth{} = auth) do\n    endpoint_url =\n      case Auth.region(auth) do\n        :chinese -> System.get_env(\"TESLA_API_HOST\", \"https://owner-api.vn.cloud.tesla.cn\")\n        _global -> System.get_env(\"TESLA_API_HOST\", \"https://owner-api.teslamotors.com\")\n      end\n\n    TeslaApi.get(endpoint_url <> \"/api/1/products\" <> System.get_env(\"TOKEN\", \"\"),\n      opts: [access_token: auth.token]\n    )\n    |> handle_response(transform: &list_result/1)\n  end\n\n  def get(%Auth{} = auth, id) do\n    endpoint_url =\n      case Auth.region(auth) do\n        :chinese -> System.get_env(\"TESLA_API_HOST\", \"https://owner-api.vn.cloud.tesla.cn\")\n        _global -> System.get_env(\"TESLA_API_HOST\", \"https://owner-api.teslamotors.com\")\n      end\n\n    TeslaApi.get(endpoint_url <> \"/api/1/vehicles/#{id}\" <> System.get_env(\"TOKEN\", \"\"),\n      opts: [access_token: auth.token]\n    )\n    |> handle_response(transform: &result/1)\n  end\n\n  def get_with_state(%Auth{} = auth, id) do\n    endpoint_url =\n      case Auth.region(auth) do\n        :chinese -> System.get_env(\"TESLA_API_HOST\", \"https://owner-api.vn.cloud.tesla.cn\")\n        _global -> System.get_env(\"TESLA_API_HOST\", \"https://owner-api.teslamotors.com\")\n      end\n\n    TeslaApi.get(\n      endpoint_url <> \"/api/1/vehicles/#{id}/vehicle_data\" <> System.get_env(\"TOKEN\", \"\"),\n      query: [\n        endpoints:\n          \"charge_state;climate_state;closures_state;drive_state;gui_settings;location_data;vehicle_config;vehicle_state;vehicle_data_combo\"\n      ],\n      opts: [access_token: auth.token]\n    )\n    |> handle_response(transform: &result/1)\n  end\n\n  def list_result(result) do\n    result\n    |> Enum.filter(fn x -> Map.has_key?(x, \"vehicle_id\") end)\n    |> Enum.map(&result/1)\n  end\n\n  def result(v) do\n    %__MODULE__{\n      id: v[\"id\"],\n      vehicle_id: v[\"vehicle_id\"],\n      vin: v[\"vin\"],\n      tokens: v[\"tokens\"],\n      state: v[\"state\"] || \"unknown\",\n      option_codes: String.split(v[\"option_codes\"] || \"\", \",\"),\n      in_service: v[\"in_service\"],\n      display_name: get_in(v, [\"vehicle_state\", \"vehicle_name\"]) || v[\"display_name\"],\n      color: v[\"color\"],\n      calendar_enabled: v[\"calendar_enabled\"],\n      backseat_token: v[\"backseat_token\"],\n      backseat_token_updated_at: v[\"backseat_token_updated_at\"],\n      api_version: v[\"api_version\"],\n      charge_state: if(v[\"charge_state\"], do: Charge.result(v[\"charge_state\"])),\n      climate_state: if(v[\"climate_state\"], do: Climate.result(v[\"climate_state\"])),\n      drive_state: if(v[\"drive_state\"], do: Drive.result(v[\"drive_state\"])),\n      vehicle_config: if(v[\"vehicle_config\"], do: VehicleConfig.result(v[\"vehicle_config\"])),\n      vehicle_state: if(v[\"vehicle_state\"], do: VehicleState.result(v[\"vehicle_state\"]))\n    }\n  end\n\n  defp handle_response({:ok, %Tesla.Env{} = env}, opts) do\n    case env do\n      %Tesla.Env{status: status, body: %{\"response\" => res}} when status in 200..299 ->\n        transform = Keyword.get(opts, :transform, & &1)\n        {:ok, transform.(res)}\n\n      %Tesla.Env{status: 401} = env ->\n        {:error, %Error{reason: :unauthorized, env: env}}\n\n      %Tesla.Env{status: 404, body: %{\"error\" => \"not_found\"}} = env ->\n        {:error, %Error{reason: :vehicle_not_found, env: env}}\n\n      %Tesla.Env{status: 405, body: %{\"error\" => \"vehicle is currently in service\"}} = env ->\n        {:error, %Error{reason: :vehicle_in_service, env: env}}\n\n      %Tesla.Env{status: 408, body: %{\"error\" => \"vehicle unavailable:\" <> _}} = env ->\n        {:error, %Error{reason: :vehicle_unavailable, env: env}}\n\n      %Tesla.Env{status: 429, headers: headers} ->\n        retry_after =\n          case Enum.find(headers, fn {key, _value} -> key == \"retry-after\" end) do\n            nil ->\n              \"300\"\n\n            {\"retry-after\", value} ->\n              value\n          end\n\n        {:error, %Error{reason: :too_many_request, message: String.to_integer(retry_after)}}\n\n      %Tesla.Env{status: 504} = env ->\n        {:error, %Error{reason: :timeout, env: env}}\n\n      %Tesla.Env{status: status, body: %{\"error\" => msg}} = env when status >= 500 ->\n        {:error, %Error{reason: :unknown, message: msg, env: env}}\n\n      %Tesla.Env{body: body} = env ->\n        {:error, %Error{reason: :unknown, message: inspect(body), env: env}}\n    end\n  end\n\n  defp handle_response({:error, reason}, _opts) when is_atom(reason) do\n    {:error, %Error{reason: reason}}\n  end\n\n  defp handle_response({:error, reason}, _opts) do\n    {:error, %Error{reason: :unknown, message: reason}}\n  end\nend\n"
  },
  {
    "path": "lib/tesla_api.ex",
    "content": "defmodule TeslaApi do\n  use Tesla\n\n  @version Mix.Project.config()[:version]\n\n  adapter Tesla.Adapter.Finch, name: TeslaMate.HTTP, receive_timeout: 35_000\n\n  plug Tesla.Middleware.BaseUrl, \"https://owner-api.teslamotors.com\"\n  plug Tesla.Middleware.Headers, [{\"user-agent\", \"TeslaMate/#{@version}\"}]\n  plug Tesla.Middleware.JSON\n  plug TeslaApi.Middleware.TokenAuth\n  plug Tesla.Middleware.Logger, debug: true, log_level: &log_level/1\n\n  defp log_level(%Tesla.Env{} = env) when env.status >= 500, do: :warning\n  defp log_level(%Tesla.Env{} = env) when env.status >= 400, do: :info\n  defp log_level(%Tesla.Env{}), do: :debug\nend\n"
  },
  {
    "path": "lib/teslamate/api.ex",
    "content": "defmodule TeslaMate.Api do\n  use GenServer\n\n  require Logger\n\n  alias TeslaMate.Auth.Tokens\n  alias TeslaMate.{Vehicles, Convert}\n  alias TeslaApi.Auth\n\n  alias Finch.Response\n\n  import Core.Dependency, only: [call: 3, call: 2]\n\n  defmodule State do\n    defstruct name: nil, deps: %{}, refresh_timer: nil\n  end\n\n  @timeout :timer.minutes(2)\n  @name __MODULE__\n\n  # API\n\n  def start_link(opts) do\n    opts = Keyword.put_new(opts, :name, @name)\n    name = Keyword.fetch!(opts, :name)\n    GenServer.start_link(__MODULE__, opts, name: name)\n  end\n\n  ## State\n\n  def list_vehicles(name \\\\ @name) do\n    with {:ok, auth} <- fetch_auth(name) do\n      TeslaApi.Vehicle.list(auth)\n      |> handle_result(auth, name)\n    end\n  end\n\n  def get_vehicle(name \\\\ @name, id) do\n    with {:ok, auth} <- fetch_auth(name) do\n      TeslaApi.Vehicle.get(auth, id)\n      |> handle_result(auth, name)\n    end\n  end\n\n  def get_vehicle_with_state(name \\\\ @name, id) do\n    with {:ok, auth} <- fetch_auth(name) do\n      TeslaApi.Vehicle.get_with_state(auth, id)\n      |> handle_result(auth, name)\n    end\n  end\n\n  def stream(name \\\\ @name, vid, receiver) do\n    with {:ok, %Auth{} = auth} <- fetch_auth(name) do\n      TeslaApi.Stream.start_link(auth: auth, vehicle_id: vid, receiver: receiver)\n    end\n  end\n\n  ## Internals\n\n  def signed_in?(name \\\\ @name) do\n    case fetch_auth(name) do\n      {:error, :not_signed_in} -> false\n      {:ok, _} -> true\n    end\n  end\n\n  def sign_in(name \\\\ @name, args)\n\n  def sign_in(name, %Tokens{} = tokens) do\n    case fetch_auth(name) do\n      {:error, :not_signed_in} -> GenServer.call(name, {:sign_in, [tokens]}, @timeout)\n      {:ok, %Auth{}} -> {:error, :already_signed_in}\n    end\n  end\n\n  def sign_in(name, {email, password}) do\n    case fetch_auth(name) do\n      {:error, :not_signed_in} -> GenServer.call(name, {:sign_in, [email, password]}, @timeout)\n      {:ok, %Auth{}} -> {:error, :already_signed_in}\n    end\n  end\n\n  def sign_out(name \\\\ @name) do\n    true = :ets.delete(name, :auth)\n    :ok\n  rescue\n    _ in ArgumentError -> {:error, :not_signed_in}\n  end\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    name = Keyword.fetch!(opts, :name)\n\n    deps = %{\n      auth: Keyword.get(opts, :auth, TeslaMate.Auth),\n      vehicles: Keyword.get(opts, :vehicles, Vehicles)\n    }\n\n    :ok =\n      :fuse.install(\n        fuse_name(name),\n        {{:standard, 5, :timer.minutes(10)}, {:reset, :timer.hours(9999)}}\n      )\n\n    ^name = :ets.new(name, [:named_table, :set, :public, read_concurrency: true])\n    state = %State{name: name, deps: deps}\n\n    state =\n      case call(deps.auth, :get_tokens) do\n        %Tokens{access: at, refresh: rt} when is_binary(at) and is_binary(rt) ->\n          restored_tokens = %Auth{token: at, refresh_token: rt, expires_in: 10 * 60}\n\n          {:ok, state} =\n            case refresh_tokens(restored_tokens) do\n              {:ok, refreshed_tokens} ->\n                :ok = call(deps.auth, :save, [refreshed_tokens])\n                true = insert_auth(name, refreshed_tokens)\n                schedule_refresh(refreshed_tokens, state)\n\n              {:error, reason} ->\n                Logger.warning(\"Token refresh failed: #{inspect(reason, pretty: true)}\")\n                true = insert_auth(name, restored_tokens)\n                schedule_refresh(restored_tokens, state)\n            end\n\n          state\n\n        %Tokens{access: :error, refresh: :error} ->\n          Logger.warning(\"Could not decrypt API tokens!\")\n          state\n\n        _ ->\n          state\n      end\n\n    {:ok, state}\n  end\n\n  @impl true\n  def handle_call({:sign_in, args}, _, %State{} = state) do\n    case args do\n      [args, callback] when is_function(callback) -> apply(callback, args)\n      [%Tokens{} = t] -> Auth.refresh(%Auth{token: t.access, refresh_token: t.refresh})\n    end\n    |> case do\n      {:ok, %Auth{} = auth} ->\n        true = insert_auth(state.name, auth)\n        :ok = call(state.deps.auth, :save, [auth])\n        :ok = call(state.deps.vehicles, :restart)\n        {:ok, state} = schedule_refresh(auth, state)\n        :ok = :fuse.reset(fuse_name(state.name))\n\n        {:reply, :ok, state}\n\n      {:ok, {:captcha, captcha, callback}} ->\n        wrapped_callback = fn captcha_code ->\n          GenServer.call(state.name, {:sign_in, [[captcha_code], callback]}, @timeout)\n        end\n\n        {:reply, {:ok, {:captcha, captcha, wrapped_callback}}, state}\n\n      {:ok, {:mfa, devices, callback}} ->\n        wrapped_callback = fn device_id, mfa_passcode ->\n          GenServer.call(state.name, {:sign_in, [[device_id, mfa_passcode], callback]}, @timeout)\n        end\n\n        {:reply, {:ok, {:mfa, devices, wrapped_callback}}, state}\n\n      {:error, %TeslaApi.Error{} = e} ->\n        {:reply, {:error, e}, state}\n    end\n  end\n\n  @impl true\n  def handle_info(:refresh_auth, %State{name: name} = state) do\n    case fetch_auth(name) do\n      {:ok, tokens} ->\n        Logger.info(\"Refreshing access token ...\")\n\n        case Auth.refresh(tokens) do\n          {:ok, refreshed_tokens} ->\n            true = insert_auth(name, refreshed_tokens)\n            :ok = call(state.deps.auth, :save, [refreshed_tokens])\n            {:ok, state} = schedule_refresh(refreshed_tokens, state)\n            :ok = :fuse.reset(fuse_name(name))\n            {:noreply, state}\n\n          {:error, reason} ->\n            Logger.warning(\"Token refresh failed: #{inspect(reason, pretty: true)}\")\n            Logger.warning(\"Retrying in 5 minutes...\")\n\n            if is_reference(state.refresh_timer), do: Process.cancel_timer(state.refresh_timer)\n            refresh_timer = Process.send_after(self(), :refresh_auth, :timer.minutes(5))\n\n            {:noreply, %State{state | refresh_timer: refresh_timer}}\n        end\n\n      {:error, reason} ->\n        Logger.warning(\"Cannot refresh access token: #{inspect(reason)}\")\n        {:noreply, state}\n    end\n  end\n\n  def handle_info(msg, state) do\n    Logger.info(\"#{__MODULE__} / unhandled message: #{inspect(msg, pretty: true)}\")\n    {:noreply, state}\n  end\n\n  ## Private\n\n  defp refresh_tokens(%Auth{} = tokens) do\n    case Application.get_env(:teslamate, :disable_token_refresh, false) do\n      true ->\n        Logger.info(\"Token refresh is disabled\")\n        {:ok, tokens}\n\n      false ->\n        with {:ok, %Auth{} = refresh_tokens} <- Auth.refresh(tokens) do\n          Logger.info(\"Refreshed api tokens\")\n          {:ok, refresh_tokens}\n        end\n    end\n  end\n\n  defp schedule_refresh(%Auth{} = auth, %State{} = state) do\n    ms =\n      auth.expires_in\n      |> Kernel.*(0.75)\n      |> round()\n      |> :timer.seconds()\n\n    duration =\n      ms\n      |> div(1000)\n      |> Convert.sec_to_str()\n      |> Enum.reject(&String.ends_with?(&1, \"s\"))\n      |> Enum.join(\" \")\n\n    Logger.info(\"Scheduling token refresh in #{duration}\")\n\n    if is_reference(state.refresh_timer), do: Process.cancel_timer(state.refresh_timer)\n    refresh_timer = Process.send_after(self(), :refresh_auth, ms)\n\n    {:ok, %State{state | refresh_timer: refresh_timer}}\n  end\n\n  defp insert_auth(name, %Auth{} = auth) do\n    :ets.insert(name, auth: auth)\n  end\n\n  defp fetch_auth(name) do\n    case :ets.lookup(name, :auth) do\n      [auth: %Auth{} = auth] -> {:ok, auth}\n      [] -> {:error, :not_signed_in}\n    end\n  rescue\n    _ in ArgumentError -> {:error, :not_signed_in}\n  end\n\n  defp handle_result(result, auth, name) do\n    case result do\n      {:error, %TeslaApi.Error{reason: :unauthorized}} ->\n        :ok = :fuse.melt(fuse_name(name))\n\n        case :fuse.ask(fuse_name(name), :sync) do\n          :blown ->\n            true = :ets.delete(name, :auth)\n            {:error, :not_signed_in}\n\n          :ok ->\n            send(name, :refresh_auth)\n            {:error, :unauthorized}\n        end\n\n      {:error, %TeslaApi.Error{reason: reason, env: %Response{status: status, body: body}}} ->\n        Logger.error(\"TeslaApi.Error / #{status} – #{inspect(body, pretty: true)}\")\n        {:error, reason}\n\n      {:error, %TeslaApi.Error{reason: :too_many_request, message: retry_after}} ->\n        Logger.warning(\"TeslaApi.Error / :too_many_request #{retry_after}\")\n        {:error, :too_many_request, retry_after}\n\n      {:error, %TeslaApi.Error{reason: reason, message: msg}} ->\n        if is_binary(msg) and msg != \"\", do: Logger.warning(\"TeslaApi.Error / #{msg}\")\n        {:error, reason}\n\n      {:ok, vehicles} when is_list(vehicles) ->\n        vehicles =\n          vehicles\n          |> Task.async_stream(&preload_vehicle(&1, auth), timeout: 32_500)\n          |> Enum.map(fn {:ok, vehicle} -> vehicle end)\n\n        {:ok, vehicles}\n\n      {:ok, %TeslaApi.Vehicle{} = vehicle} ->\n        {:ok, vehicle}\n    end\n  end\n\n  defp preload_vehicle(%TeslaApi.Vehicle{state: \"online\", id: id} = vehicle, auth) do\n    case TeslaApi.Vehicle.get_with_state(auth, id) do\n      {:ok, %TeslaApi.Vehicle{} = vehicle} ->\n        vehicle\n\n      {:error, reason} ->\n        Logger.warning(\"TeslaApi.Error / #{inspect(reason, pretty: true)}\")\n        vehicle\n    end\n  end\n\n  defp preload_vehicle(%TeslaApi.Vehicle{} = vehicle, _state), do: vehicle\n\n  defp fuse_name(name), do: :\"#{name}.unauthorized\"\nend\n"
  },
  {
    "path": "lib/teslamate/application.ex",
    "content": "defmodule TeslaMate.Application do\n  use Application\n\n  require Logger\n\n  def start(_type, _args) do\n    Logger.info(\"System Info: #{system_info()}\")\n    Logger.info(\"Version: #{Application.spec(:teslamate, :vsn) || \"???\"}\")\n\n    # Disable log entries\n    :ok = :telemetry.detach({Phoenix.Logger, [:phoenix, :socket_connected]})\n    :ok = :telemetry.detach({Phoenix.Logger, [:phoenix, :channel_joined]})\n\n    TeslaMate.DatabaseCheck.check_postgres_version()\n\n    Supervisor.start_link(children(), strategy: :one_for_one, name: TeslaMate.Supervisor)\n  end\n\n  defp children do\n    mqtt_config = Application.get_env(:teslamate, :mqtt)\n\n    case Application.get_env(:teslamate, :import_directory) do\n      nil ->\n        [\n          TeslaMate.Repo,\n          TeslaMate.Vault,\n          TeslaMate.HTTP,\n          TeslaMate.Api,\n          TeslaMate.Updater,\n          {Phoenix.PubSub, name: TeslaMate.PubSub},\n          TeslaMateWeb.Endpoint,\n          TeslaMate.Terrain,\n          TeslaMate.Vehicles,\n          if(mqtt_config != nil, do: {TeslaMate.Mqtt, mqtt_config}),\n          TeslaMate.Repair\n        ]\n        |> Enum.reject(&is_nil/1)\n\n      import_directory ->\n        [\n          TeslaMate.Repo,\n          TeslaMate.Vault,\n          TeslaMate.HTTP,\n          TeslaMate.Api,\n          TeslaMate.Updater,\n          {Phoenix.PubSub, name: TeslaMate.PubSub},\n          TeslaMateWeb.Endpoint,\n          {TeslaMate.Terrain, disabled: true},\n          {TeslaMate.Repair, limit: 250},\n          {TeslaMate.Import, directory: import_directory}\n        ]\n    end\n  end\n\n  defp system_info do\n    case otp_release() do\n      vsn when vsn <= 23 -> \"Erlang/OTP #{vsn}\"\n      vsn -> \"Erlang/OTP #{vsn} (#{emu_flavor()})\"\n    end\n  end\n\n  defp otp_release do\n    :erlang.system_info(:otp_release) |> to_string() |> String.to_integer()\n  rescue\n    _ -> nil\n  end\n\n  defp emu_flavor do\n    :erlang.system_info(:emu_flavor)\n  rescue\n    ArgumentError -> nil\n  end\n\n  # Tell Phoenix to update the endpoint configuration\n  # whenever the application is updated.\n  def config_change(changed, _new, removed) do\n    TeslaMateWeb.Endpoint.config_change(changed, removed)\n    :ok\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/auth/tokens.ex",
    "content": "defmodule TeslaMate.Auth.Tokens do\n  use Ecto.Schema\n\n  import Ecto.Changeset\n\n  alias TeslaMate.Vault.Encrypted\n\n  @schema_prefix :private\n\n  schema \"tokens\" do\n    field :refresh, Encrypted.Binary, redact: true\n    field :access, Encrypted.Binary, redact: true\n\n    timestamps()\n  end\n\n  @doc false\n  def changeset(tokens, attrs) do\n    tokens\n    |> cast(attrs, [:access, :refresh])\n    |> validate_required([:access, :refresh])\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/auth.ex",
    "content": "defmodule TeslaMate.Auth do\n  @moduledoc \"\"\"\n  The Auth context.\n  \"\"\"\n\n  import Ecto.Query, warn: false\n  require Logger\n\n  alias TeslaMate.Repo\n\n  ### Tokens\n\n  alias TeslaMate.Auth.Tokens\n\n  def change_tokens(attrs \\\\ %{}) do\n    %Tokens{} |> Tokens.changeset(attrs)\n  end\n\n  def can_decrypt_tokens? do\n    case get_tokens() do\n      %Tokens{} = tokens ->\n        is_binary(tokens.access) and is_binary(tokens.refresh)\n\n      nil ->\n        true\n    end\n  end\n\n  def get_tokens do\n    case Repo.all(Tokens) do\n      [%Tokens{} = tokens] ->\n        tokens\n\n      [_ | _] = tokens ->\n        raise \"\"\"\n        Found #{length(tokens)} token pairs!\n\n        Make sure that there is no more than ONE token pair in the table 'tokens'.\n        \"\"\"\n\n      [] ->\n        nil\n    end\n  end\n\n  def save(%{token: access, refresh_token: refresh}) do\n    attrs = %{access: access, refresh: refresh}\n\n    maybe_created_or_updated =\n      case get_tokens() do\n        nil -> create_tokens(attrs)\n        tokens -> update_tokens(tokens, attrs)\n      end\n\n    with {:ok, _tokens} <- maybe_created_or_updated do\n      :ok\n    end\n  end\n\n  defp create_tokens(attrs) do\n    %Tokens{}\n    |> Tokens.changeset(attrs)\n    |> Repo.insert()\n  end\n\n  defp update_tokens(%Tokens{} = tokens, attrs) do\n    tokens\n    |> Tokens.changeset(attrs)\n    |> Repo.update()\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/convert.ex",
    "content": "defmodule TeslaMate.Convert do\n  @km_factor 0.62137119223733\n  @km_factor_d Decimal.from_float(@km_factor)\n  @ft_factor 3.28084\n  @ft_factor_d Decimal.from_float(@ft_factor)\n\n  alias Decimal, as: D\n\n  def mph_to_kmh(nil), do: nil\n  def mph_to_kmh(mph = %D{}), do: mph |> D.div(@km_factor_d) |> D.round()\n  def mph_to_kmh(mph), do: round(mph / @km_factor)\n\n  def miles_to_km(nil, _precision), do: nil\n  def miles_to_km(mi = %D{}, p), do: mi |> D.div(@km_factor_d) |> D.round(p)\n  def miles_to_km(mi, 0), do: round(mi / @km_factor)\n  def miles_to_km(mi, precision), do: Float.round(mi / @km_factor, precision)\n\n  def km_to_miles(nil, _precision), do: nil\n  def km_to_miles(km = %D{}, p), do: km |> D.mult(@km_factor_d) |> D.round(p)\n  def km_to_miles(km, 0), do: round(km * @km_factor)\n  def km_to_miles(km, precision), do: Float.round(km * @km_factor, precision)\n\n  def m_to_ft(nil), do: nil\n  def m_to_ft(m = %D{}), do: D.mult(m, @ft_factor_d)\n  def m_to_ft(m), do: m * @ft_factor\n\n  def ft_to_m(nil), do: nil\n  def ft_to_m(ft = %D{}), do: D.div(ft, @ft_factor_d)\n  def ft_to_m(ft), do: ft / @ft_factor\n\n  def celsius_to_fahrenheit(nil, _precision), do: nil\n  def celsius_to_fahrenheit(c = %D{}, p), do: D.mult(c, 9) |> D.div(5) |> D.add(32) |> D.round(p)\n  def celsius_to_fahrenheit(c, 0), do: round(c * 9 / 5 + 32)\n  def celsius_to_fahrenheit(c, precision), do: Float.round(c * 9 / 5 + 32, precision)\n\n  @minute 60\n  @hour @minute * 60\n  @day @hour * 24\n  @week @day * 7\n  @divisor [@week, @day, @hour, @minute, 1]\n\n  def sec_to_str(sec) when is_number(sec) do\n    {_, [s, m, h, d, w]} =\n      Enum.reduce(@divisor, {sec, []}, fn divisor, {n, acc} ->\n        {rem(n, divisor), [div(n, divisor) | acc]}\n      end)\n\n    [\"#{w} wk\", \"#{d} d\", \"#{h} h\", \"#{m} min\", \"#{s} s\"]\n    |> Enum.reject(&String.starts_with?(&1, \"0\"))\n    |> Enum.take(2)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/custom_expressions.ex",
    "content": "defmodule TeslaMate.CustomExpressions do\n  import Ecto.Query, warn: false\n\n  defmacro c_if(condition, do: do_clause, else: else_clause) do\n    quote do\n      fragment(\n        \"CASE WHEN ? THEN ? ELSE ? END\",\n        unquote(condition),\n        unquote(do_clause),\n        unquote(else_clause)\n      )\n    end\n  end\n\n  defmacro duration_min(a, b) do\n    quote do\n      fragment(\n        \"(EXTRACT(EPOCH FROM (?::timestamp - ?::timestamp)) / 60)::integer\",\n        unquote(a),\n        unquote(b)\n      )\n    end\n  end\n\n  defmacro nullif(a, b) do\n    quote do\n      fragment(\"NULLIF(?, ?)\", unquote(a), unquote(b))\n    end\n  end\n\n  defmacro round(v, s) do\n    quote do\n      fragment(\"ROUND((?)::numeric, ?)::float8\", unquote(v), unquote(s))\n    end\n  end\n\n  defmacro within_geofence?(position, geofence, direction \\\\ :right)\n\n  defmacro within_geofence?(position, geofence, :right) do\n    quote do\n      fragment(\n        \"\"\"\n        earth_box(ll_to_earth(?::numeric, ?::numeric), ?) @> ll_to_earth(?::numeric, ?::numeric) AND\n        earth_distance(ll_to_earth(?::numeric, ?::numeric), ll_to_earth(?::numeric, ?::numeric)) < ?\n        \"\"\",\n        ^unquote(geofence).latitude,\n        ^unquote(geofence).longitude,\n        ^unquote(geofence).radius,\n        unquote(position).latitude,\n        unquote(position).longitude,\n        ^unquote(geofence).latitude,\n        ^unquote(geofence).longitude,\n        unquote(position).latitude,\n        unquote(position).longitude,\n        ^unquote(geofence).radius\n      )\n    end\n  end\n\n  defmacro within_geofence?(position, geofence, :left) do\n    quote do\n      fragment(\n        \"\"\"\n        earth_box(ll_to_earth(?::numeric, ?::numeric), ?) @> ll_to_earth(?::numeric, ?::numeric) AND\n        earth_distance(ll_to_earth(?::numeric, ?::numeric), ll_to_earth(?::numeric, ?::numeric)) < ?\n        \"\"\",\n        unquote(geofence).latitude,\n        unquote(geofence).longitude,\n        unquote(geofence).radius,\n        ^unquote(position).latitude,\n        ^unquote(position).longitude,\n        unquote(geofence).latitude,\n        unquote(geofence).longitude,\n        ^unquote(position).latitude,\n        ^unquote(position).longitude,\n        unquote(geofence).radius\n      )\n    end\n  end\n\n  defmacro distance(geofence, position) do\n    quote do\n      fragment(\n        \"earth_distance(ll_to_earth(?::numeric, ?::numeric), ll_to_earth(?::numeric, ?::numeric))\",\n        unquote(geofence).latitude,\n        unquote(geofence).longitude,\n        ^unquote(position).latitude,\n        ^unquote(position).longitude\n      )\n    end\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/database_check.ex",
    "content": "defmodule TeslaMate.DatabaseCheck do\n  require Logger\n\n  alias Ecto.Adapters.SQL\n  alias TeslaMate.Repo\n\n  defmodule Version do\n    defstruct [:version_string, :version_num, :major]\n  end\n\n  @version_requirements %{\n    1600 => %{min_version: \"16.7\", min_version_num: 160_007},\n    1700 => %{min_version: \"17.3\", min_version_num: 170_003},\n    1800 => %{min_version: \"18.0\", min_version_num: 180_000}\n  }\n\n  def check_postgres_version do\n    {:ok, _pid} = Repo.start_link()\n\n    version = get_postgres_version()\n    check_compatibility(version)\n\n    Repo.stop()\n  end\n\n  defp get_postgres_version do\n    {:ok, result} =\n      SQL.query(\n        Repo,\n        \"\"\"\n        SELECT regexp_replace(version(), 'PostgreSQL ([^ ]+) .*', '\\\\1') AS version,\n               current_setting('server_version_num')::integer AS version_num\n        \"\"\",\n        []\n      )\n\n    [version_string, version_num] = List.first(result.rows)\n\n    # https://www.postgresql.org/docs/current/libpq-status.html#LIBPQ-PQSERVERVERSION\n    major = div(version_num, 100)\n\n    %Version{\n      version_string: version_string,\n      version_num: version_num,\n      major: major\n    }\n  end\n\n  defp check_compatibility(%Version{\n         major: major,\n         version_string: version,\n         version_num: version_num\n       }) do\n    cond do\n      major > 1800 ->\n        Logger.warning(\n          \"PostgreSQL version #{version} is not officially tested or supported yet. Use at your own risk.\"\n        )\n\n      not Map.has_key?(@version_requirements, major) ->\n        supported_versions =\n          @version_requirements\n          |> Map.values()\n          |> Enum.map_join(\" and \", & &1.min_version)\n\n        raise \"PostgreSQL version #{version} is not supported. Only #{supported_versions} are supported.\"\n\n      version_num < @version_requirements[major].min_version_num ->\n        raise \"PostgreSQL version #{version} is not supported. Minimum required for #{div(major, 100)}.x is #{@version_requirements[major].min_version}.\"\n\n      true ->\n        Logger.info(\"PostgreSQL version #{version} is compatible (#{div(major, 100)}.x series).\")\n    end\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/dependency.ex",
    "content": "defmodule Core.Dependency do\n  def call(m, f, a \\\\ [])\n  def call({m, a}, fun, args), do: apply(m, fun, [a] ++ args)\n  def call(m, f, a), do: apply(m, f, a)\nend\n"
  },
  {
    "path": "lib/teslamate/http.ex",
    "content": "defmodule TeslaMate.HTTP do\n  require Logger\n\n  def pools do\n    nominatim_proxy =\n      case build_proxy_opts_from_env(\"NOMINATIM_PROXY\") do\n        {:ok, opts} -> opts\n        {:none, _} -> []\n        {:error, _} -> []\n      end\n\n    %{\n      System.get_env(\"TESLA_API_HOST\", \"https://owner-api.teslamotors.com\") => [\n        size: System.get_env(\"TESLA_API_POOL_SIZE\", \"10\") |> String.to_integer()\n      ],\n      \"https://nominatim.openstreetmap.org\" => [size: 3] ++ nominatim_proxy,\n      \"https://api.github.com\" => [size: 1],\n      :default => [size: System.get_env(\"HTTP_POOL_SIZE\", \"5\") |> String.to_integer()]\n    }\n  end\n\n  @pool_timeout System.get_env(\"HTTP_POOL_TIMEOUT\", \"10000\") |> String.to_integer()\n\n  @spec build_proxy_opts_from_env(binary) :: {:ok, keyword} | {:none, []} | {:error, []}\n  defp build_proxy_opts_from_env(var) do\n    url = System.get_env(var)\n    Logger.info(\"[proxy] read #{var}=#{inspect(url)}\")\n\n    case url do\n      nil ->\n        Logger.info(\"[proxy] #{var} unset -> fallback: no proxy\")\n        {:none, []}\n\n      _ ->\n        uri = URI.parse(url)\n\n        cond do\n          uri.scheme != \"http\" ->\n            Logger.warning(\n              \"[proxy] #{var}=#{inspect(url)} unsupported scheme=#{inspect(uri.scheme)} (only http). fallback: no proxy\"\n            )\n\n            {:error, []}\n\n          is_nil(uri.host) or uri.host == \"\" ->\n            Logger.warning(\n              \"[proxy] #{var}=#{inspect(url)} invalid URI: missing host. fallback: no proxy\"\n            )\n\n            {:error, []}\n\n          not is_integer(uri.port) ->\n            Logger.warning(\n              \"[proxy] #{var}=#{inspect(url)} invalid URI: missing/invalid port. fallback: no proxy\"\n            )\n\n            {:error, []}\n\n          true ->\n            opts = [conn_opts: [proxy: {:http, uri.host, uri.port, []}]]\n            Logger.info(\"[proxy] set http proxy host=#{uri.host} port=#{uri.port}\")\n            {:ok, opts}\n        end\n    end\n  end\n\n  def child_spec(_arg) do\n    Finch.child_spec(name: __MODULE__, pools: pools())\n  end\n\n  def get(url, opts \\\\ []) do\n    {headers, opts} =\n      opts\n      |> Keyword.put_new(:pool_timeout, @pool_timeout)\n      |> Keyword.pop(:headers, [])\n\n    Finch.build(:get, url, headers, nil)\n    |> Finch.request(__MODULE__, opts)\n  end\n\n  def post(url, body \\\\ nil, opts \\\\ []) do\n    {headers, opts} =\n      opts\n      |> Keyword.put_new(:pool_timeout, @pool_timeout)\n      |> Keyword.pop(:headers, [])\n\n    Finch.build(:post, url, headers, body)\n    |> Finch.request(__MODULE__, opts)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/import/csv.ex",
    "content": "defmodule TeslaMate.Import.CSV do\n  NimbleCSV.define(Parser, separator: \",\", escape: \"\\\"\", newlines: [\"\\r\\n\", \"\\n\"])\n\n  def parse(file_stream) do\n    file_stream\n    |> Parser.parse_stream(skip_headers: false)\n    |> Enum.take(2)\n    |> case do\n      [[_], _] ->\n        {:error, :unsupported_delimiter}\n\n      [] ->\n        {:error, :no_contents}\n\n      [_] ->\n        {:error, :no_contents}\n\n      [headers, _] ->\n        rows =\n          file_stream\n          |> Parser.parse_stream()\n          |> Stream.flat_map(fn\n            [\"\"] -> []\n            row -> [headers |> Enum.zip(row) |> Enum.into(%{})]\n          end)\n\n        {:ok, rows}\n    end\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/import/fake_api.ex",
    "content": "defmodule TeslaMate.Import.FakeApi do\n  use GenServer\n\n  require Logger\n\n  alias TeslaApi.Vehicle\n\n  defmodule State do\n    defstruct pid: nil,\n              from: nil,\n              events: [],\n              event_chunks: {%{}, _idx = nil, _max_idx = nil},\n              event_streams: [],\n              current_chunk: nil,\n              date_limit: nil\n  end\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: Keyword.fetch!(opts, :name))\n  end\n\n  def get_vehicle(name, _id) do\n    GenServer.call(name, :get_vehicle, :infinity)\n  end\n\n  def get_vehicle_with_state(name, _id) do\n    GenServer.call(name, :get_vehicle_with_state, :infinity)\n  end\n\n  def stream(_name, _vid, _receiver) do\n    {:ok, nil}\n  end\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    pid = Keyword.fetch!(opts, :pid)\n    event_streams = Keyword.fetch!(opts, :event_streams)\n    date_limit = Keyword.fetch!(opts, :date_limit)\n\n    date_limit_ts =\n      with %DateTime{} <- date_limit do\n        DateTime.to_unix(date_limit) * 1000\n      end\n\n    {:ok, %State{pid: pid, event_streams: event_streams, date_limit: date_limit_ts}}\n  end\n\n  @impl true\n  def handle_call(_action, from, %State{} = state) do\n    case pop(state) do\n      {:error, :chunk_not_yet_received, %State{} = state} ->\n        {:noreply, %{state | from: from}}\n\n      {:done, state} ->\n        processing_complete(state)\n        {:noreply, state}\n\n      {:event, %Vehicle{} = vehicle, state}\n      when vehicle.drive_state.timestamp >= state.date_limit ->\n        processing_complete(state)\n        {:noreply, state}\n\n      {:event, %Vehicle{} = vehicle, state} ->\n        {:reply, {:ok, vehicle}, state}\n    end\n  end\n\n  @impl true\n  def handle_info({:processed_events, max_idx}, %State{} = state) do\n    {:noreply, %State{state | event_chunks: set_max_chunk_idx(state.event_chunks, max_idx)}}\n  end\n\n  def handle_info({:events, events, idx}, %State{from: nil} = state) do\n    {:noreply, %State{state | event_chunks: insert_event_chunk(state.event_chunks, idx, events)}}\n  end\n\n  def handle_info({:events, events, idx}, %State{from: from} = state) do\n    state = %State{\n      state\n      | event_chunks: insert_event_chunk(state.event_chunks, idx, events),\n        from: nil\n    }\n\n    case pop(state) do\n      {:done, state} ->\n        processing_complete(state)\n        {:noreply, state}\n\n      {:event, %Vehicle{} = vehicle, state}\n      when vehicle.drive_state.timestamp >= state.date_limit ->\n        processing_complete(state)\n        {:noreply, state}\n\n      {:event, %Vehicle{} = vehicle, state} ->\n        GenServer.reply(from, {:ok, vehicle})\n        {:noreply, state}\n    end\n  end\n\n  def handle_info(:abort, %State{} = state) do\n    {:noreply, %State{state | events: [], event_chunks: {%{}, 0, 0}, event_streams: []}}\n  end\n\n  ## Private\n\n  defp pop(%State{events: [], event_chunks: {chunks, i, i}, event_streams: []} = state)\n       when is_number(i) and chunks == %{} do\n    {:done, state}\n  end\n\n  defp pop(%State{events: [], event_chunks: {_, i, i}, event_streams: [{c, s} | streams]} = state) do\n    if state.current_chunk != nil, do: send(state.pid, {:done, state.current_chunk})\n\n    state = %State{state | event_streams: streams, current_chunk: c}\n    parent = self()\n\n    spawn_link(fn ->\n      try do\n        s\n        |> Stream.chunk_every(500)\n        |> Stream.with_index()\n        |> Enum.reduce(-1, fn {event_chunk, idx}, _ ->\n          send(parent, {:events, event_chunk, idx})\n          idx\n        end)\n        |> case do\n          -1 -> send(parent, :no_events)\n          max_idx -> send(parent, {:processed_events, max_idx})\n        end\n      catch\n        :vehicle_changed -> send(parent, :abort)\n      end\n    end)\n\n    receive do\n      :abort ->\n        pop(%State{state | events: [], event_chunks: {%{}, 0, 0}, event_streams: []})\n\n      :no_events ->\n        Logger.warning(\"Processed empty chunk: #{inspect(c)}\")\n        pop(%State{state | events: [], event_chunks: {%{}, nil, nil}})\n\n      {:events, [event | events], 0} ->\n        {:event, event, %State{state | events: events, event_chunks: {%{}, 0, nil}}}\n    end\n  end\n\n  defp pop(%State{events: [], event_chunks: {event_chunks, idx, max_idx}} = state) do\n    case Map.pop(event_chunks, new_idx = idx + 1) do\n      {nil, _event_chunks} ->\n        {:error, :chunk_not_yet_received, state}\n\n      {events, event_chunks} ->\n        pop(%State{state | events: events, event_chunks: {event_chunks, new_idx, max_idx}})\n    end\n  end\n\n  defp pop(%State{events: [event | events]} = state) do\n    {:event, event, %State{state | events: events}}\n  end\n\n  defp insert_event_chunk({chunks, chunk_idx, chunk_max_idx}, idx, events) do\n    {Map.put(chunks, idx, events), chunk_idx, chunk_max_idx}\n  end\n\n  defp set_max_chunk_idx({chunks, chunk_idx, _}, chunk_max_idx) do\n    {chunks, chunk_idx, chunk_max_idx}\n  end\n\n  defp processing_complete(%State{} = state) do\n    send(state.pid, {:done, state.current_chunk})\n    send(state.pid, :done)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/import/line_parser.ex",
    "content": "defmodule TeslaMate.Import.LineParser do\n  use Timex\n\n  require Logger\n\n  alias TeslaApi.Vehicle.State.{Charge, Climate, Drive, VehicleConfig, VehicleState}\n  alias TeslaApi.Vehicle\n\n  @default_vehicle %{\n    \"display_name\" => \"\",\n    \"charge_state\" => %{},\n    \"climate_state\" => %{},\n    \"drive_state\" => %{},\n    \"vehicle_config\" => %{},\n    \"vehicle_state\" => %{}\n  }\n\n  def parse(line, tz) when is_map(line) do\n    line\n    |> Enum.reduce(@default_vehicle, &into_vehicle(&1, &2, tz))\n    |> Vehicle.result()\n  end\n\n  @charge_state %Charge{} |> Map.keys() |> Enum.map(&to_string/1)\n  @climate_state %Climate{} |> Map.keys() |> Enum.map(&to_string/1)\n  @drive_state %Drive{} |> Map.keys() |> Enum.map(&to_string/1)\n  @vehicle %Vehicle{} |> Map.keys() |> Enum.map(&to_string/1)\n  @vehicle_config %VehicleConfig{} |> Map.keys() |> Enum.map(&to_string/1)\n  @vehicle_state %VehicleState{} |> Map.keys() |> Enum.map(&to_string/1)\n\n  defp map_value(_, \"\"), do: nil\n  defp map_value(_, \"None\"), do: nil\n  defp map_value(_, \"none\"), do: nil\n\n  defp map_value(_, \"TRUE\"), do: true\n  defp map_value(_, \"True\"), do: true\n  defp map_value(_, \"true\"), do: true\n  defp map_value(_, \"FALSE\"), do: false\n  defp map_value(_, \"False\"), do: false\n  defp map_value(_, \"false\"), do: false\n\n  defp map_value(\"display_name\", name), do: name\n  defp map_value(\"vehicle_name\", name), do: name\n  defp map_value(\"state\", \"waking\"), do: \"online\"\n  defp map_value(\"state\", \"shutdown\"), do: \"online\"\n\n  defp map_value(\"scheduled_charging_start_time\", _val), do: nil\n\n  @boolean ~w(battery_heater_on is_climate_on is_front_defroster_on is_rear_defroster_on\n              fast_charger_present not_enough_power_to_heat)\n\n  defp map_value(key, val) when key in @boolean do\n    with v when v not in [nil, false, true] <- map_value(nil, val) do\n      nil\n    end\n  end\n\n  defp map_value(_key, val) do\n    case Integer.parse(val) do\n      {i, \"\"} -> i\n      {_, _} -> to_float(val)\n      :error -> val\n    end\n  end\n\n  defp to_float(val) do\n    case Float.parse(val) do\n      {f, \"\"} -> f\n      {_, _} -> val\n      :error -> val\n    end\n  end\n\n  defp into_vehicle({key, val}, acc, tz) do\n    case {key, val} do\n      {\"id\", _val} ->\n        Map.put(acc, \"id\", :rand.uniform(65536))\n\n      {\"vehicle_id\", \"\"} ->\n        Map.put(acc, \"vehicle_id\", System.get_env(\"TESLAFI_IMPORT_VEHICLE_ID\", \"1\"))\n\n      {\"Date\", val} ->\n        {:ok, datetime} =\n          with {:error, _reason} <- Timex.parse(val, \"{YYYY}-{M}-{D} {h24}:{m}:{s}\"),\n               {:error, _reason} <- Timex.parse(val, \"{M}/{D}/{YYYY} {h12}:{m}:{s} {AM}\"),\n               {:error, _reason} <- Timex.parse(val, \"{M}/{D}/{YYYY} {h24}:{m}\") do\n            {:error, {:invalid_date_format, val}}\n          end\n\n        ts =\n          case DateTime.from_naive(datetime, tz) do\n            {:ok, datetime} ->\n              DateTime.to_unix(datetime, :millisecond)\n\n            {kind, _first_dt, _second_dt} when kind in [:ambiguous, :gap] ->\n              # To keep things simple, return nil to ignore these ambiguous responses\n              nil\n\n            {:error, reason} ->\n              Logger.warning(\"\"\"\n              Could not convert date #{inspect(datetime)} w/ time zone #{inspect(tz)}:\n              #{inspect(reason)}\n              \"\"\")\n\n              nil\n          end\n\n        [\"vehicle_config\", \"vehicle_state\", \"drive_state\", \"climate_state\", \"charge_state\"]\n        |> Enum.reduce(acc, fn key, acc -> put_in(acc, [key, \"timestamp\"], ts) end)\n\n      {key, val} when key in @charge_state ->\n        put_in(acc, [\"charge_state\", key], map_value(key, val))\n\n      {key, val} when key in @climate_state ->\n        put_in(acc, [\"climate_state\", key], map_value(key, val))\n\n      {key, val} when key in @drive_state ->\n        put_in(acc, [\"drive_state\", key], map_value(key, val))\n\n      {key, val} when key in @vehicle_config ->\n        put_in(acc, [\"vehicle_config\", key], map_value(key, val))\n\n      {key, val} when key in @vehicle_state ->\n        put_in(acc, [\"vehicle_state\", key], map_value(key, val))\n\n      {key, val} when key in @vehicle ->\n        Map.put(acc, key, map_value(key, val))\n\n      {key, val} ->\n        Logger.debug(\"unhandled: #{inspect({key, val})}\")\n        acc\n    end\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/import.ex",
    "content": "defmodule TeslaMate.Import do\n  use GenStateMachine\n\n  require Logger\n\n  alias TeslaMate.Settings.CarSettings\n  alias TeslaMate.Vehicles.Vehicle\n  alias TeslaMate.{Vehicles, Repair, Log}\n  alias TeslaMate.Log.{Car, State}\n\n  alias __MODULE__.{Status, LineParser, FakeApi, CSV}\n\n  defstruct(\n    path: nil,\n    files: [],\n    timezone: :utc,\n    error: nil,\n    completed: MapSet.new(),\n    car: nil,\n    pids: %{},\n    deps: %{}\n  )\n\n  alias __MODULE__, as: Data\n\n  defmodule Status do\n    defstruct(state: :idle, message: nil, files: [])\n\n    def into(state, %Data{files: files, completed: completed}) do\n      files =\n        Enum.map(files, fn %{date: date} = file ->\n          complete = MapSet.member?(completed, date)\n          Map.put(file, :complete, complete)\n        end)\n\n      case state do\n        {:error, reason} -> %__MODULE__{state: :error, message: reason, files: files}\n        state when is_atom(state) -> %__MODULE__{state: state, files: files}\n      end\n    end\n  end\n\n  @name __MODULE__\n  @topic \"#{@name}/state\"\n\n  def start_link(opts) do\n    GenStateMachine.start_link(__MODULE__, opts, name: Keyword.get(opts, :name, @name))\n  end\n\n  def run(timezone), do: GenStateMachine.call(@name, {:run, timezone})\n  def running?, do: GenStateMachine.call(@name, :running?)\n  def enabled?, do: is_pid(Process.whereis(@name))\n  def valid_file_name?(fname), do: parse_fname(fname) != nil\n  def get_status, do: GenStateMachine.call(@name, :get_status)\n  def reload_directory, do: GenStateMachine.call(@name, :reload_directory)\n  def subscribe, do: Phoenix.PubSub.subscribe(TeslaMate.PubSub, @topic)\n\n  @impl true\n  def init(opts) do\n    Process.flag(:trap_exit, true)\n    path = Keyword.fetch!(opts, :directory)\n    {:ok, :idle, %Data{path: path}, {:next_event, :internal, :read_directory}}\n  end\n\n  ## Calls\n\n  @impl true\n  def handle_event({:call, from}, {:run, tz}, :idle, %Data{} = data) do\n    {:next_state, :running, %{data | timezone: tz},\n     [\n       {:reply, from, :ok},\n       {:next_event, :internal, :broadcast},\n       {:next_event, :internal, :import}\n     ]}\n  end\n\n  def handle_event({:call, from}, {:run, _tz}, _, _data) do\n    {:keep_state_and_data, {:reply, from, {:error, :not_allowed}}}\n  end\n\n  def handle_event({:call, from}, :running?, state, _data) do\n    {:keep_state_and_data, {:reply, from, state == :running}}\n  end\n\n  def handle_event({:call, from}, :get_status, state, data) do\n    {:keep_state_and_data, {:reply, from, Status.into(state, data)}}\n  end\n\n  def handle_event({:call, from}, :reload_directory, _state, _data) do\n    {:keep_state_and_data, [{:reply, from, :ok}, {:next_event, :internal, :read_directory}]}\n  end\n\n  ## Internal\n\n  def handle_event(:internal, :broadcast, state, data) do\n    :ok = Phoenix.PubSub.broadcast(TeslaMate.PubSub, @topic, Status.into(state, data))\n    :keep_state_and_data\n  end\n\n  def handle_event(:internal, :read_directory, :idle, %Data{path: path} = data) do\n    case File.ls(path) do\n      {:error, reason} ->\n        {:next_state, {:error, reason}, data, {:next_event, :internal, :broadcast}}\n\n      {:ok, files} ->\n        files =\n          files\n          |> Enum.map(fn n -> %{date: parse_fname(n), path: Path.join([path, n])} end)\n          |> Enum.reject(fn %{date: date} -> is_nil(date) end)\n          |> Enum.sort_by(fn %{date: date} -> date end)\n\n        {:keep_state, %Data{data | files: files}, {:next_event, :internal, :broadcast}}\n    end\n  end\n\n  def handle_event(:internal, :read_directory, _state, _data) do\n    :keep_state_and_data\n  end\n\n  def handle_event(:internal, :import, :running, %Data{files: files} = data) do\n    Logger.info(\"Importing #{length(files)} file(s) ...\")\n\n    case create_event_streams(data) do\n      {:error, reason} ->\n        {:next_state, {:error, reason}, data, {:next_event, :internal, :broadcast}}\n\n      {:ok, streams} ->\n        car = create_car(streams)\n        {:ok, streams} = create_event_streams(data, car)\n\n        :ok = Log.complete_current_state(car)\n\n        date_limit =\n          with %State{start_date: date} <- Log.get_earliest_state(car) do\n            date\n          end\n\n        api_name = :\"api_#{car.name}\"\n\n        {:ok, api} =\n          FakeApi.start_link(\n            name: api_name,\n            event_streams: streams,\n            date_limit: date_limit,\n            pid: self()\n          )\n\n        {:ok, veh} =\n          Vehicle.start_link(\n            name: :\"import_#{car.name}\",\n            car: car,\n            import?: true,\n            deps_api: {FakeApi, api_name}\n          )\n\n        {:keep_state, %Data{data | car: car, pids: %{veh: veh, api: api}},\n         {:next_event, :internal, :broadcast}}\n    end\n  end\n\n  ## Info\n\n  def handle_event(:info, {:done, chunk}, :running, %Data{completed: completed} = data) do\n    :ok = Repair.trigger_run()\n\n    {:keep_state, %Data{data | completed: MapSet.put(completed, chunk)},\n     {:next_event, :internal, :broadcast}}\n  end\n\n  def handle_event(:info, :done, :running, %Data{car: car, pids: %{api: api, veh: veh}} = data) do\n    Logger.info(\"Import complete!\")\n\n    true = Process.exit(veh, :kill)\n    true = Process.exit(api, :normal)\n\n    :ok = Log.complete_current_state(car)\n    :ok = Log.create_current_state(car)\n    :ok = Repair.trigger_run()\n\n    {:next_state, :complete, data, {:next_event, :internal, :broadcast}}\n  end\n\n  def handle_event(:info, {:EXIT, _from, :normal}, _state, _data), do: :keep_state_and_data\n  def handle_event(:info, {:EXIT, _from, :killed}, _state, _data), do: :keep_state_and_data\n\n  def handle_event(:info, {:EXIT, _from, reason}, _state, data) do\n    Logger.warning(\"Import failed: #{inspect(reason, pretty: true)}\")\n    {:next_state, {:error, reason}, data, {:next_event, :internal, :broadcast}}\n  end\n\n  ## Private\n\n  defp parse_fname(name) do\n    case name do\n      <<m::binary-size(2), y::binary-size(4), \".csv\"::bitstring>> ->\n        parse_date(y, m)\n\n      <<\"TeslaFi\"::bitstring, m::binary-size(2), y::binary-size(4), \".csv\"::bitstring>> ->\n        parse_date(y, m)\n\n      <<\"TeslaFi\"::bitstring, m::binary-size(1), y::binary-size(4), \".csv\"::bitstring>> ->\n        parse_date(y, m)\n\n      _ ->\n        nil\n    end\n  end\n\n  defp parse_date(year, month) do\n    with {year, \"\"} <- Integer.parse(year),\n         {month, \"\"} <- Integer.parse(month) do\n      [year, month]\n    else\n      _ -> nil\n    end\n  end\n\n  defp create_event_streams(%Data{files: files, timezone: tz}, car \\\\ nil) do\n    alias TeslaApi.Vehicle.State.Drive\n    alias TeslaApi.Vehicle, as: Veh\n\n    try do\n      event_streams =\n        files\n        |> Enum.sort_by(fn %{date: date} -> date end)\n        |> Enum.map(fn %{date: date, path: path} ->\n          path\n          |> File.stream!(read_ahead: 64 * 4096)\n          |> CSV.parse()\n          |> case do\n            {:error, :unsupported_delimiter} ->\n              raise \"Unsupported delimiter\"\n\n            {:error, :no_contents} ->\n              {date, Stream.map([], & &1)}\n\n            {:ok, rows} ->\n              stream =\n                rows\n                |> Task.async_stream(&LineParser.parse(&1, tz), timeout: :infinity, ordered: true)\n                |> Stream.map(fn {:ok, vehicle} -> vehicle end)\n                |> Stream.filter(fn\n                  %Veh{state: \"unknown\"} ->\n                    false\n\n                  %Veh{drive_state: %Drive{timestamp: nil}} ->\n                    false\n\n                  %Veh{vin: vin, vehicle_id: vid, id: eid} = v\n                  when car != nil and nil not in [vin, vid, eid] and\n                         vin != car.vin and vid != car.vid and eid != car.eid ->\n                    Logger.warning(\n                      \"'#{path}' contains data for more than one vehicle: #{car.name}\" <>\n                        \" -> #{v.display_name}!\"\n                    )\n\n                    throw(:vehicle_changed)\n\n                  %Veh{state: \"online\", drive_state: %Drive{} = d} ->\n                    d.latitude != nil and d.longitude != nil\n\n                  %Veh{} ->\n                    true\n                end)\n\n              {date, stream}\n          end\n        end)\n\n      {:ok, event_streams}\n    rescue\n      e in File.Error -> {:error, e.reason}\n      e -> {:error, e}\n    end\n  end\n\n  defp create_car([]), do: raise(\"vehicle data is incomplete\")\n\n  defp create_car([{_date, %Stream{} = stream} | rest]) do\n    alias TeslaApi.Vehicle, as: Veh\n\n    stream\n    |> Enum.find(fn %Veh{} = v -> v.vin != nil and v.vehicle_id != nil and v.id != nil end)\n    |> case do\n      nil ->\n        create_car(rest)\n\n      vehicle ->\n        car = Vehicles.create_or_update!(vehicle)\n\n        settings = %CarSettings{\n          suspend_min: 0,\n          suspend_after_idle_min: 99999,\n          use_streaming_api: false,\n          enabled: true\n        }\n\n        %Car{car | settings: settings}\n    end\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/locations/address.ex",
    "content": "defmodule TeslaMate.Locations.Address do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  schema \"addresses\" do\n    field :city, :string\n    field :county, :string\n    field :country, :string\n    field :display_name, :string\n    field :house_number, :string\n    field :latitude, :decimal, read_after_writes: true\n    field :longitude, :decimal, read_after_writes: true\n    field :name, :string\n    field :neighbourhood, :string\n    field :osm_id, :integer\n    field :osm_type, :string\n    field :postcode, :string\n    field :raw, :map\n    field :road, :string\n    field :state, :string\n    field :state_district, :string\n\n    timestamps()\n  end\n\n  @doc false\n  def changeset(address, attrs) do\n    address\n    |> cast(attrs, [\n      :display_name,\n      :osm_id,\n      :osm_type,\n      :latitude,\n      :longitude,\n      :name,\n      :house_number,\n      :road,\n      :neighbourhood,\n      :city,\n      :county,\n      :postcode,\n      :state,\n      :state_district,\n      :country,\n      :raw\n    ])\n    |> validate_required([\n      :display_name,\n      :osm_id,\n      :osm_type,\n      :latitude,\n      :longitude,\n      :raw\n    ])\n    |> unique_constraint(:osm_id, name: :addresses_osm_id_osm_type_index)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/locations/geo_fence.ex",
    "content": "defmodule TeslaMate.Locations.GeoFence do\n  use Ecto.Schema\n\n  import Ecto.Changeset\n\n  schema \"geofences\" do\n    field :name, :string\n    field :latitude, :decimal, read_after_writes: true\n    field :longitude, :decimal, read_after_writes: true\n    field :radius, :integer\n\n    field :billing_type, Ecto.Enum, values: [:per_kwh, :per_minute], read_after_writes: true\n    field :cost_per_unit, :decimal, read_after_writes: true\n    field :session_fee, :decimal, read_after_writes: true\n\n    timestamps()\n  end\n\n  @doc false\n  def changeset(geofence, attrs) do\n    geofence\n    |> cast(attrs, [\n      :name,\n      :radius,\n      :latitude,\n      :longitude,\n      :cost_per_unit,\n      :session_fee,\n      :billing_type\n    ])\n    |> validate_required([:name, :latitude, :longitude, :radius])\n    |> validate_number(:radius, greater_than: 0, less_than: 5000)\n    |> validate_number(:session_fee, greater_than_or_equal_to: 0)\n    |> update_change(:name, &String.trim/1)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/locations/geocoder.ex",
    "content": "defmodule TeslaMate.Locations.Geocoder do\n  use Tesla, only: [:get]\n\n  @version Mix.Project.config()[:version]\n\n  adapter Tesla.Adapter.Finch, name: TeslaMate.HTTP, receive_timeout: 30_000\n\n  plug Tesla.Middleware.BaseUrl, \"https://nominatim.openstreetmap.org\"\n  plug Tesla.Middleware.Headers, [{\"user-agent\", \"TeslaMate/#{@version}\"}]\n  plug Tesla.Middleware.JSON\n  plug Tesla.Middleware.Logger, debug: true, log_level: &log_level/1\n\n  alias TeslaMate.Locations.Address\n\n  def reverse_lookup(lat, lon, lang \\\\ \"en\") do\n    opts = [\n      format: :jsonv2,\n      addressdetails: 1,\n      extratags: 1,\n      namedetails: 1,\n      zoom: 19,\n      lat: lat,\n      lon: lon\n    ]\n\n    with {:ok, address_raw} <- query(\"/reverse\", lang, opts),\n         {:ok, address} <- into_address(address_raw) do\n      {:ok, address}\n    end\n  end\n\n  def details(addresses, lang) when is_list(addresses) do\n    osm_ids =\n      addresses\n      |> Enum.reject(fn %Address{} = a -> a.osm_id == nil or a.osm_type in [nil, \"unknown\"] end)\n      |> Enum.map(fn %Address{} = a ->\n        \"#{String.upcase(String.at(a.osm_type, 0))}#{a.osm_id}\"\n      end)\n      |> Enum.join(\",\")\n\n    params = [\n      osm_ids: osm_ids,\n      format: :jsonv2,\n      addressdetails: 1,\n      extratags: 1,\n      namedetails: 1,\n      zoom: 19\n    ]\n\n    with {:ok, raw_addresses} <- query(\"/lookup\", lang, params) do\n      addresses =\n        Enum.map(raw_addresses, fn attrs ->\n          case into_address(attrs) do\n            {:ok, address} -> address\n            {:error, reason} -> throw({:invalid_address, reason})\n          end\n        end)\n\n      {:ok, addresses}\n    end\n  catch\n    {:invalid_address, reason} ->\n      {:error, reason}\n  end\n\n  defp query(url, lang, params) do\n    case get(url, query: params, headers: [{\"Accept-Language\", lang}]) do\n      {:ok, %Tesla.Env{status: 200, body: body}} -> {:ok, body}\n      {:ok, %Tesla.Env{body: %{\"error\" => reason}}} -> {:error, reason}\n      {:ok, %Tesla.Env{} = env} -> {:error, reason: \"Unexpected response\", env: env}\n      {:error, reason} -> {:error, reason}\n    end\n  end\n\n  # Address Formatting\n  # Source: https://github.com/OpenCageData/address-formatting/blob/master/conf/components.yaml\n\n  @road_aliases [\n    \"road\",\n    \"footway\",\n    \"street\",\n    \"street_name\",\n    \"residential\",\n    \"path\",\n    \"pedestrian\",\n    \"road_reference\",\n    \"road_reference_intl\",\n    \"square\",\n    \"place\"\n  ]\n\n  @neighbourhood_aliases [\n    \"neighbourhood\",\n    \"suburb\",\n    \"city_district\",\n    \"district\",\n    \"quarter\",\n    \"borough\",\n    \"city_block\",\n    \"residential\",\n    \"commercial\",\n    \"houses\",\n    \"subdistrict\",\n    \"subdivision\",\n    \"ward\"\n  ]\n\n  @municipality_aliases [\n    \"municipality\",\n    \"local_administrative_area\",\n    \"subcounty\"\n  ]\n\n  @village_aliases [\n    \"village\",\n    \"municipality\",\n    \"hamlet\",\n    \"locality\",\n    \"croft\"\n  ]\n\n  @city_aliases [\n                  \"city\",\n                  \"town\",\n                  \"township\"\n                ] ++ @village_aliases ++ @municipality_aliases\n\n  @county_aliases [\n    \"county\",\n    \"county_code\",\n    \"department\"\n  ]\n\n  defp into_address(%{\"error\" => \"Unable to geocode\"} = raw) do\n    unknown_address = %{\n      display_name: \"Unknown\",\n      osm_type: \"unknown\",\n      osm_id: 0,\n      latitude: 0.0,\n      longitude: 0.0,\n      raw: raw\n    }\n\n    {:ok, unknown_address}\n  end\n\n  defp into_address(%{\"error\" => reason}) do\n    {:error, {:geocoding_failed, reason}}\n  end\n\n  defp into_address(raw) do\n    address = %{\n      display_name: Map.get(raw, \"display_name\"),\n      osm_id: Map.get(raw, \"osm_id\"),\n      osm_type: Map.get(raw, \"osm_type\"),\n      latitude: Map.get(raw, \"lat\"),\n      longitude: Map.get(raw, \"lon\"),\n      name:\n        Map.get(raw, \"name\") || get_in(raw, [\"namedetails\", \"name\"]) ||\n          get_in(raw, [\"namedetails\", \"alt_name\"]),\n      house_number: raw[\"address\"] |> get_first([\"house_number\", \"street_number\"]),\n      road: raw[\"address\"] |> get_first(@road_aliases),\n      neighbourhood: raw[\"address\"] |> get_first(@neighbourhood_aliases),\n      city: raw[\"address\"] |> get_first(@city_aliases),\n      county: raw[\"address\"] |> get_first(@county_aliases),\n      postcode: get_in(raw, [\"address\", \"postcode\"]),\n      state: raw[\"address\"] |> get_first([\"state\", \"province\", \"state_code\"]),\n      state_district: get_in(raw, [\"address\", \"state_district\"]),\n      country: raw[\"address\"] |> get_first([\"country\", \"country_name\"]),\n      raw: raw\n    }\n\n    {:ok, address}\n  end\n\n  defp get_first(nil, _aliases), do: nil\n  defp get_first(_address, []), do: nil\n\n  defp get_first(address, [key | aliases]) do\n    with nil <- Map.get(address, key), do: get_first(address, aliases)\n  end\n\n  defp log_level(%Tesla.Env{} = env) when env.status >= 400, do: :warning\n  defp log_level(%Tesla.Env{}), do: :info\nend\n"
  },
  {
    "path": "lib/teslamate/locations.ex",
    "content": "defmodule TeslaMate.Locations do\n  @moduledoc \"\"\"\n  The Locations context.\n  \"\"\"\n\n  require Logger\n\n  import Ecto.Query, warn: false\n  import TeslaMate.CustomExpressions\n\n  alias __MODULE__.{Address, Geocoder, GeoFence}\n  alias TeslaMate.Log.{Drive, ChargingProcess}\n  alias TeslaMate.Settings.GlobalSettings\n  alias TeslaMate.{Repo, Settings}\n\n  ## Address\n\n  def create_address(attrs \\\\ %{}) do\n    %Address{}\n    |> Address.changeset(attrs)\n    |> Repo.insert()\n  end\n\n  def update_address(%Address{} = address, attrs) do\n    address\n    |> Address.changeset(attrs)\n    |> Repo.update()\n  end\n\n  @geocoder (case Mix.env() do\n               :test -> GeocoderMock\n               _ -> Geocoder\n             end)\n\n  def find_address(%{latitude: lat, longitude: lng}) do\n    %GlobalSettings{language: lang} = Settings.get_global_settings!()\n\n    case @geocoder.reverse_lookup(lat, lng, lang) do\n      {:ok, %{osm_id: id, osm_type: type} = attrs} ->\n        case Repo.get_by(Address, osm_id: id, osm_type: type) do\n          %Address{} = address -> {:ok, address}\n          nil -> create_address(attrs)\n        end\n\n      {:error, reason} ->\n        {:error, reason}\n    end\n  end\n\n  def refresh_addresses(lang) do\n    Address\n    |> Repo.all()\n    |> Enum.chunk_every(50)\n    |> Enum.with_index()\n    |> Enum.each(fn {addresses, i} ->\n      if i > 0, do: Process.sleep(1500)\n\n      {:ok, attrs} = @geocoder.details(addresses, lang)\n\n      addresses\n      |> merge_addresses(attrs)\n      |> Enum.each(fn\n        {%Address{osm_type: \"unknown\"}, _attrs} ->\n          :ignore\n\n        {%Address{} = address, attrs} when is_map(attrs) ->\n          attrs =\n            Map.take(attrs, [\n              :city,\n              :country,\n              :county,\n              :display_name,\n              :neighbourhood,\n              :state,\n              :state_district\n            ])\n\n          {:ok, _} = update_address(address, attrs)\n\n        {%Address{osm_id: id, osm_type: type} = address, nil} ->\n          case Geocoder.reverse_lookup(address.latitude, address.longitude, lang) do\n            {:ok, %{osm_id: ^id, osm_type: ^type} = attrs} ->\n              attrs =\n                Map.take(attrs, [\n                  :city,\n                  :country,\n                  :county,\n                  :display_name,\n                  :neighbourhood,\n                  :state,\n                  :state_district\n                ])\n\n              {:ok, _} = update_address(address, attrs)\n\n            {:ok, attrs} ->\n              Logger.warning(\"\"\"\n              Address does not match! Skipping …\n\n                osm_id: #{id} -> #{attrs[:osm_id]}\n                osm_type: #{type} -> #{attrs[:osm_type]}\n\n              \"\"\")\n          end\n\n          Process.sleep(1500)\n      end)\n    end)\n  rescue\n    e in MatchError ->\n      Logger.error(Exception.format(:error, e, __STACKTRACE__))\n      {:error, with({:error, reason} <- e.term, do: reason)}\n  end\n\n  defp merge_addresses(addresses, attrs) do\n    addresses =\n      Enum.reduce(addresses, %{}, fn %Address{osm_id: id, osm_type: type} = address, acc ->\n        Map.put(acc, {type, id}, {address, nil})\n      end)\n\n    attrs\n    |> Enum.reduce(addresses, fn %{osm_id: id, osm_type: type} = attrs, acc ->\n      Map.update!(acc, {type, id}, fn {address, nil} -> {address, attrs} end)\n    end)\n    |> Map.values()\n  end\n\n  defp apply_geofence(%GeoFence{latitude: lat, longitude: lng, radius: r}, opts \\\\ []) do\n    except_id = Keyword.get(opts, :except) || -1\n    args = [lat, lng, r, except_id]\n\n    q = fn module, geofence_field, position_field ->\n      \"\"\"\n        UPDATE #{module.__schema__(:source)} m\n        SET #{geofence_field} = (\n          SELECT id\n          FROM geofences g\n          WHERE\n            earth_box(ll_to_earth(g.latitude, g.longitude), g.radius) @> ll_to_earth(p.latitude, p.longitude) AND\n            earth_distance(ll_to_earth(g.latitude, g.longitude), ll_to_earth(latitude, p.longitude)) < g.radius AND\n            g.id != $4\n          ORDER BY\n            earth_distance(ll_to_earth(g.latitude, g.longitude), ll_to_earth(latitude, p.longitude)) ASC\n          LIMIT 1\n        )\n        FROM positions p\n        WHERE\n          m.#{position_field} = p.id AND\n          earth_box(ll_to_earth($1::numeric, $2::numeric), $3) @> ll_to_earth(p.latitude, p.longitude) AND\n          earth_distance(ll_to_earth($1::numeric, $2::numeric), ll_to_earth(latitude, p.longitude)) < $3\n      \"\"\"\n    end\n\n    Drive |> q.(:start_geofence_id, :start_position_id) |> Repo.query!(args)\n    Drive |> q.(:end_geofence_id, :end_position_id) |> Repo.query!(args)\n    ChargingProcess |> q.(:geofence_id, :position_id) |> Repo.query!(args)\n\n    :ok\n  end\n\n  ## GeoFence\n\n  def list_geofences do\n    GeoFence\n    |> order_by([g], fragment(\"? COLLATE \\\"C\\\" ASC\", g.name))\n    |> Repo.all()\n  end\n\n  def get_geofence!(id) do\n    Repo.get!(GeoFence, id)\n  end\n\n  def find_geofence(%{latitude: _, longitude: _} = point) do\n    GeoFence\n    |> select([:id, :name])\n    |> where([geofence], within_geofence?(point, geofence, :left))\n    |> order_by([geofence], asc: distance(geofence, point))\n    |> limit(1)\n    |> Repo.one()\n  end\n\n  def create_geofence(attrs) do\n    Repo.transaction(fn ->\n      with {:ok, geofence} <- %GeoFence{} |> GeoFence.changeset(attrs) |> Repo.insert(),\n           :ok <- apply_geofence(geofence) do\n        geofence\n      else\n        {:error, reason} -> Repo.rollback(reason)\n      end\n    end)\n  end\n\n  def update_geofence(%GeoFence{id: id} = geofence, attrs) do\n    Repo.transaction(fn ->\n      with :ok <- apply_geofence(geofence, except: id),\n           {:ok, geofence} <- geofence |> GeoFence.changeset(attrs) |> Repo.update(),\n           :ok <- apply_geofence(geofence) do\n        geofence\n      else\n        {:error, reason} -> Repo.rollback(reason)\n      end\n    end)\n  end\n\n  def delete_geofence(%GeoFence{id: id} = geofence) do\n    Repo.transaction(fn ->\n      with :ok <- apply_geofence(geofence, except: id),\n           {:ok, geofence} <- Repo.delete(geofence) do\n        geofence\n      else\n        {:error, reason} -> Repo.rollback(reason)\n      end\n    end)\n  end\n\n  def change_geofence(%GeoFence{} = geofence, attrs \\\\ %{}) do\n    GeoFence.changeset(geofence, attrs)\n  end\n\n  alias TeslaMate.Log.ChargingProcess\n\n  def count_charging_processes_without_costs(%{latitude: _, longitude: _, radius: _} = geofence) do\n    Repo.one(\n      from c in ChargingProcess,\n        select: count(),\n        join: p in assoc(c, :position),\n        where: is_nil(c.cost) and within_geofence?(p, geofence, :right)\n    )\n  end\n\n  def calculate_charge_costs(%GeoFence{id: id}) do\n    query = \"\"\"\n    UPDATE charging_processes cp\n    SET cost = (\n      SELECT\n        CASE WHEN g.session_fee IS NULL AND g.cost_per_unit IS NULL THEN\n               NULL\n             WHEN g.billing_type = 'per_kwh' THEN\n               COALESCE(g.session_fee, 0) +\n               COALESCE(g.cost_per_unit * GREATEST(c.charge_energy_used, c.charge_energy_added), 0)\n             WHEN g.billing_type = 'per_minute' THEN\n               COALESCE(g.session_fee, 0) +\n               COALESCE(g.cost_per_unit * c.duration_min, 0)\n        END\n      FROM charging_processes c\n      JOIN geofences g ON g.id = c.geofence_id\n      WHERE cp.id = c.id\n    )\n    WHERE cp.geofence_id = $1 AND cp.cost IS NULL;\n    \"\"\"\n\n    with {:ok, %Postgrex.Result{num_rows: _}} <- Repo.query(query, [id]) do\n      :ok\n    end\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/log/car.ex",
    "content": "defmodule TeslaMate.Log.Car do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  alias TeslaMate.Log.{ChargingProcess, Position, Drive}\n  alias TeslaMate.Settings.CarSettings\n\n  schema \"cars\" do\n    field :name, :string\n    field :efficiency, :float\n    field :model, :string\n    field :trim_badging, :string\n    field :marketing_name, :string\n    field :exterior_color, :string\n    field :wheel_type, :string\n    field :spoiler_type, :string\n\n    field :eid, :integer\n    field :vid, :integer\n    # TODO: with v2.0 mark as non nullable\n    field :vin, :string\n    field :display_priority, :integer\n\n    belongs_to :settings, CarSettings\n\n    has_many :charging_processes, ChargingProcess\n    has_many :positions, Position\n    has_many :drives, Drive\n\n    timestamps()\n  end\n\n  @doc false\n  def changeset(car, attrs) do\n    car\n    |> cast(attrs, [\n      :eid,\n      :vid,\n      :vin,\n      :name,\n      :model,\n      :efficiency,\n      :trim_badging,\n      :marketing_name,\n      :exterior_color,\n      :wheel_type,\n      :spoiler_type,\n      :display_priority\n    ])\n    |> validate_required([:eid, :vid, :vin])\n    |> unique_constraint(:settings_id)\n    |> unique_constraint(:eid)\n    |> unique_constraint(:vin)\n    |> unique_constraint(:vid)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/log/charge.ex",
    "content": "defmodule TeslaMate.Log.Charge do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  alias TeslaMate.Log.ChargingProcess\n\n  schema \"charges\" do\n    field :date, :utc_datetime_usec\n    field :battery_heater, :boolean\n    field :battery_heater_on, :boolean\n    field :battery_heater_no_power, :boolean\n    field :battery_level, :integer\n    field :usable_battery_level, :integer\n    field :charge_energy_added, :decimal, read_after_writes: true\n    field :charger_actual_current, :integer\n    field :charger_phases, :integer, default: 1\n    field :charger_pilot_current, :integer\n    field :charger_power, :integer\n    field :charger_voltage, :integer\n    field :conn_charge_cable, :string\n    field :fast_charger_present, :boolean\n    field :fast_charger_brand, :string\n    field :fast_charger_type, :string\n    field :ideal_battery_range_km, :decimal, read_after_writes: true\n    field :rated_battery_range_km, :decimal, read_after_writes: true\n    field :not_enough_power_to_heat, :boolean\n    field :outside_temp, :decimal, read_after_writes: true\n\n    belongs_to :charging_process, ChargingProcess\n  end\n\n  @doc false\n  def changeset(charge, attrs) do\n    charge\n    |> cast(attrs, [\n      :date,\n      :battery_heater_no_power,\n      :battery_heater_on,\n      :battery_heater,\n      :battery_level,\n      :usable_battery_level,\n      :charge_energy_added,\n      :charger_actual_current,\n      :charger_phases,\n      :charger_pilot_current,\n      :charger_power,\n      :charger_voltage,\n      :conn_charge_cable,\n      :fast_charger_present,\n      :fast_charger_brand,\n      :fast_charger_type,\n      :ideal_battery_range_km,\n      :rated_battery_range_km,\n      :not_enough_power_to_heat,\n      :outside_temp\n    ])\n    |> validate_required([\n      :date,\n      :charging_process_id,\n      :charge_energy_added,\n      :charger_power,\n      :ideal_battery_range_km\n    ])\n    |> validate_number(:charger_phases, greater_than: 0)\n    |> foreign_key_constraint(:charging_process_id)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/log/charging_process.ex",
    "content": "defmodule TeslaMate.Log.ChargingProcess do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  alias TeslaMate.Locations.{Address, GeoFence}\n  alias TeslaMate.Log.{Charge, Car, Position}\n\n  schema \"charging_processes\" do\n    field :start_date, :utc_datetime_usec\n    field :end_date, :utc_datetime_usec\n    field :charge_energy_added, :decimal, read_after_writes: true\n    field :charge_energy_used, :decimal, read_after_writes: true\n    field :start_ideal_range_km, :decimal, read_after_writes: true\n    field :end_ideal_range_km, :decimal, read_after_writes: true\n    field :start_rated_range_km, :decimal, read_after_writes: true\n    field :end_rated_range_km, :decimal, read_after_writes: true\n    field :start_battery_level, :integer\n    field :end_battery_level, :integer\n    field :duration_min, :integer\n    field :outside_temp_avg, :decimal, read_after_writes: true\n    field :cost, :decimal, read_after_writes: true\n\n    belongs_to(:car, Car)\n    belongs_to(:position, Position)\n    belongs_to(:address, Address)\n    belongs_to(:geofence, GeoFence)\n\n    has_many :charges, Charge\n  end\n\n  @doc false\n  def changeset(charging_state, attrs) do\n    charging_state\n    |> cast(attrs, [\n      :geofence_id,\n      :address_id,\n      :start_date,\n      :end_date,\n      :charge_energy_added,\n      :charge_energy_used,\n      :start_ideal_range_km,\n      :end_ideal_range_km,\n      :start_rated_range_km,\n      :end_rated_range_km,\n      :start_battery_level,\n      :end_battery_level,\n      :duration_min,\n      :outside_temp_avg,\n      :cost\n    ])\n    |> validate_required([:car_id, :start_date])\n    |> validate_number(:charge_energy_added, greater_than_or_equal_to: 0)\n    |> validate_number(:charge_energy_used, greater_than_or_equal_to: 0)\n    |> foreign_key_constraint(:car_id)\n    |> foreign_key_constraint(:position_id)\n    |> foreign_key_constraint(:address_id)\n    |> foreign_key_constraint(:geofence_id)\n    |> cast_assoc(:position, with: &Position.changeset/2)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/log/drive.ex",
    "content": "defmodule TeslaMate.Log.Drive do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  alias TeslaMate.Locations.{Address, GeoFence}\n  alias TeslaMate.Log.{Position, Car}\n\n  schema \"drives\" do\n    field :start_date, :utc_datetime_usec\n    field :end_date, :utc_datetime_usec\n    field :outside_temp_avg, :decimal, read_after_writes: true\n    field :inside_temp_avg, :decimal, read_after_writes: true\n    field :speed_max, :integer\n    field :power_max, :integer\n    field :power_min, :integer\n    field :start_ideal_range_km, :decimal, read_after_writes: true\n    field :end_ideal_range_km, :decimal, read_after_writes: true\n    field :start_rated_range_km, :decimal, read_after_writes: true\n    field :end_rated_range_km, :decimal, read_after_writes: true\n    field :start_km, :float\n    field :end_km, :float\n    field :distance, :float\n    field :duration_min, :integer\n    field :ascent, :integer\n    field :descent, :integer\n\n    belongs_to :start_position, Position\n    belongs_to :end_position, Position\n\n    belongs_to :start_address, Address\n    belongs_to :end_address, Address\n\n    belongs_to :start_geofence, GeoFence\n    belongs_to :end_geofence, GeoFence\n\n    belongs_to :car, Car\n\n    has_many :positions, Position\n  end\n\n  @doc false\n  def changeset(drive, attrs) do\n    drive\n    |> cast(attrs, [\n      :start_date,\n      :end_date,\n      :start_address_id,\n      :end_address_id,\n      :start_position_id,\n      :end_position_id,\n      :start_geofence_id,\n      :end_geofence_id,\n      :outside_temp_avg,\n      :inside_temp_avg,\n      :speed_max,\n      :power_max,\n      :power_min,\n      :start_ideal_range_km,\n      :end_ideal_range_km,\n      :start_rated_range_km,\n      :end_rated_range_km,\n      :start_km,\n      :end_km,\n      :distance,\n      :duration_min,\n      :ascent,\n      :descent\n    ])\n    |> validate_required([:car_id, :start_date])\n    |> foreign_key_constraint(:car_id)\n    |> foreign_key_constraint(:start_address_id)\n    |> foreign_key_constraint(:end_address_id)\n    |> foreign_key_constraint(:start_geofence_id)\n    |> foreign_key_constraint(:end_geofence_id)\n    |> foreign_key_constraint(:start_position_id)\n    |> foreign_key_constraint(:end_position_id)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/log/position.ex",
    "content": "defmodule TeslaMate.Log.Position do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  alias TeslaMate.Log.{Car, Drive}\n\n  schema \"positions\" do\n    field :date, :utc_datetime_usec\n    field :latitude, :decimal, read_after_writes: true\n    field :longitude, :decimal, read_after_writes: true\n    field :elevation, :integer\n\n    field :speed, :integer\n    field :power, :integer\n    field :odometer, :float\n    field :ideal_battery_range_km, :decimal, read_after_writes: true\n    field :est_battery_range_km, :decimal, read_after_writes: true\n    field :rated_battery_range_km, :decimal, read_after_writes: true\n    field :battery_level, :integer\n    field :usable_battery_level, :integer\n    field :battery_heater, :boolean\n    field :battery_heater_on, :boolean\n    field :battery_heater_no_power, :boolean\n    field :outside_temp, :decimal, read_after_writes: true\n    field :inside_temp, :decimal, read_after_writes: true\n    field :fan_status, :integer\n    field :driver_temp_setting, :decimal, read_after_writes: true\n    field :passenger_temp_setting, :decimal, read_after_writes: true\n    field :is_climate_on, :boolean\n    field :is_rear_defroster_on, :boolean\n    field :is_front_defroster_on, :boolean\n    field :tpms_pressure_fl, :decimal\n    field :tpms_pressure_fr, :decimal\n    field :tpms_pressure_rl, :decimal\n    field :tpms_pressure_rr, :decimal\n\n    belongs_to(:car, Car)\n    belongs_to(:drive, Drive)\n  end\n\n  @doc false\n  def changeset(position, attrs) do\n    position\n    |> cast(attrs, [\n      :car_id,\n      :date,\n      :latitude,\n      :longitude,\n      :elevation,\n      :speed,\n      :power,\n      :odometer,\n      :ideal_battery_range_km,\n      :est_battery_range_km,\n      :rated_battery_range_km,\n      :battery_level,\n      :usable_battery_level,\n      :battery_heater_no_power,\n      :battery_heater_on,\n      :battery_heater,\n      :inside_temp,\n      :outside_temp,\n      :fan_status,\n      :driver_temp_setting,\n      :passenger_temp_setting,\n      :is_climate_on,\n      :is_rear_defroster_on,\n      :is_front_defroster_on,\n      :tpms_pressure_fl,\n      :tpms_pressure_fr,\n      :tpms_pressure_rl,\n      :tpms_pressure_rr\n    ])\n    |> validate_required([:car_id, :date, :latitude, :longitude])\n    |> foreign_key_constraint(:car_id)\n    |> foreign_key_constraint(:drive_id)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/log/state.ex",
    "content": "defmodule TeslaMate.Log.State do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  alias TeslaMate.Log.Car\n\n  schema \"states\" do\n    field :state, Ecto.Enum, values: [:online, :offline, :asleep]\n\n    field :start_date, :utc_datetime_usec\n    field :end_date, :utc_datetime_usec\n\n    belongs_to(:car, Car)\n  end\n\n  @doc false\n  def changeset(state, attrs) do\n    state\n    |> cast(attrs, [:state, :start_date, :end_date])\n    |> validate_required([:car_id, :state, :start_date])\n    |> foreign_key_constraint(:car_id)\n    |> unique_constraint(:end_date,\n      name: :states_car_id__end_date_IS_NULL_index,\n      message: \"the current state must first be completed\"\n    )\n    |> check_constraint(:end_date,\n      name: :positive_duration,\n      message: \"end date must be after start date\"\n    )\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/log/update.ex",
    "content": "defmodule TeslaMate.Log.Update do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  alias TeslaMate.Log.Car\n\n  schema \"updates\" do\n    field :start_date, :utc_datetime_usec\n    field :end_date, :utc_datetime_usec\n    field :version, :string\n\n    belongs_to :car, Car\n  end\n\n  @doc false\n  def changeset(update, attrs) do\n    update\n    |> cast(attrs, [:start_date, :end_date, :version])\n    |> validate_required([:car_id, :start_date])\n    |> foreign_key_constraint(:car_id)\n    |> check_constraint(:end_date,\n      name: :positive_duration,\n      message: \"end date must be after start date\"\n    )\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/log.ex",
    "content": "defmodule TeslaMate.Log do\n  @moduledoc \"\"\"\n  The Log context.\n  \"\"\"\n\n  require Logger\n\n  import TeslaMate.CustomExpressions\n  import Ecto.Query, warn: false\n\n  alias __MODULE__.{Car, Drive, Update, ChargingProcess, Charge, Position, State}\n  alias TeslaMate.{Repo, Locations, Settings}\n  alias TeslaMate.Locations.GeoFence\n  alias TeslaMate.Settings.{CarSettings, GlobalSettings}\n\n  ## Car\n\n  def list_cars do\n    Repo.all(Car)\n  end\n\n  def get_car!(id) do\n    Repo.get!(Car, id)\n  end\n\n  def get_car_by([{_key, nil}]), do: nil\n  def get_car_by([{_key, _val}] = opts), do: Repo.get_by(Car, opts)\n\n  def create_car(attrs) do\n    %Car{settings: %CarSettings{}}\n    |> Car.changeset(attrs)\n    |> Repo.insert()\n  end\n\n  def create_or_update_car(%Ecto.Changeset{} = changeset) do\n    with {:ok, car} <- Repo.insert_or_update(changeset) do\n      {:ok, Repo.preload(car, [:settings])}\n    end\n  end\n\n  def update_car(%Car{} = car, attrs, opts \\\\ []) do\n    with {:ok, car} <- car |> Car.changeset(attrs) |> Repo.update() do\n      preloads = Keyword.get(opts, :preload, [])\n      {:ok, Repo.preload(car, preloads, force: true)}\n    end\n  end\n\n  def recalculate_efficiencies(%GlobalSettings{} = settings) do\n    for car <- list_cars() do\n      {:ok, _car} = recalculate_efficiency(car, settings)\n    end\n\n    :ok\n  end\n\n  ## State\n\n  def start_state(%Car{} = car, state, opts \\\\ []) when not is_nil(state) do\n    now = Keyword.get(opts, :date) || DateTime.utc_now()\n\n    case get_current_state(car) do\n      %State{state: ^state} = s ->\n        {:ok, s}\n\n      %State{} = s ->\n        Repo.transaction(fn ->\n          with {:ok, _} <- s |> State.changeset(%{end_date: now}) |> Repo.update(),\n               {:ok, new_state} <- create_state(car, %{state: state, start_date: now}) do\n            new_state\n          else\n            {:error, reason} -> Repo.rollback(reason)\n          end\n        end)\n\n      nil ->\n        create_state(car, %{state: state, start_date: now})\n    end\n  end\n\n  def get_current_state(%Car{id: id}) do\n    State\n    |> where([s], ^id == s.car_id and is_nil(s.end_date))\n    |> Repo.one()\n  end\n\n  def create_current_state(%Car{id: id} = car) do\n    query =\n      from s in State,\n        where: s.car_id == ^id,\n        order_by: [desc: s.start_date],\n        limit: 1\n\n    with nil <- get_current_state(car),\n         %State{} = state <- Repo.one(query),\n         {:ok, _} <- state |> State.changeset(%{end_date: nil}) |> Repo.update() do\n      :ok\n    else\n      {:error, reason} -> {:error, reason}\n      _ -> :ok\n    end\n  end\n\n  def complete_current_state(%Car{id: id} = car) do\n    case get_current_state(car) do\n      %State{start_date: date} = state ->\n        query =\n          from s in State,\n            where: s.car_id == ^id and s.start_date > ^date,\n            order_by: [asc: s.start_date],\n            limit: 1\n\n        end_date =\n          case Repo.one(query) do\n            %State{start_date: d} -> d\n            nil -> DateTime.add(date, 1, :second)\n          end\n\n        with {:ok, _} <-\n               state\n               |> State.changeset(%{end_date: end_date})\n               |> Repo.update() do\n          :ok\n        end\n\n      nil ->\n        :ok\n    end\n  end\n\n  def get_earliest_state(%Car{id: id}) do\n    State\n    |> where(car_id: ^id)\n    |> order_by(asc: :start_date)\n    |> limit(1)\n    |> Repo.one()\n  end\n\n  defp create_state(%Car{id: id}, attrs) do\n    %State{car_id: id}\n    |> State.changeset(attrs)\n    |> Repo.insert()\n  end\n\n  ## Position\n\n  def insert_position(%Drive{id: id, car_id: car_id}, attrs) do\n    %Position{car_id: car_id, drive_id: id}\n    |> Position.changeset(attrs)\n    |> Repo.insert()\n  end\n\n  def insert_position(%Car{id: id}, attrs) do\n    %Position{car_id: id}\n    |> Position.changeset(attrs)\n    |> Repo.insert()\n  end\n\n  def get_latest_position do\n    Position\n    |> order_by(desc: :date)\n    |> limit(1)\n    |> Repo.one()\n  end\n\n  def get_latest_position(%Car{id: id}) do\n    Position\n    |> where(car_id: ^id)\n    |> order_by(desc: :date)\n    |> limit(1)\n    |> Repo.one()\n  end\n\n  def get_positions_without_elevation(min_id \\\\ 0, opts \\\\ []) do\n    limit = Keyword.get(opts, :limit, 100)\n\n    date_earliest =\n      cond do\n        min_id == 0 ->\n          DateTime.add(DateTime.utc_now(), -10, :day)\n\n        true ->\n          {:ok, default_date_earliest, _} = DateTime.from_iso8601(\"2003-07-01T00:00:00Z\")\n          default_date_earliest\n      end\n\n    naive_date_earliest = DateTime.to_naive(date_earliest)\n\n    non_streamed_drives =\n      Repo.all(\n        from(d in Drive,\n          as: :d,\n          where:\n            d.start_date > ^naive_date_earliest and\n              exists(\n                from(p in Position,\n                  where: p.drive_id == parent_as(:d).id and p.id > ^min_id\n                )\n              ) and\n              not exists(\n                from(p in Position,\n                  where:\n                    p.drive_id == parent_as(:d).id and p.id > ^min_id and\n                      not is_nil(p.odometer) and is_nil(p.ideal_battery_range_km)\n                )\n              ),\n          select: d.id\n        )\n      )\n\n    Position\n    |> where(\n      [p],\n      p.id > ^min_id and is_nil(p.elevation) and p.drive_id in ^non_streamed_drives and\n        p.date > ^naive_date_earliest\n    )\n    |> order_by(asc: :id)\n    |> limit(^limit)\n    |> Repo.all()\n    |> Enum.reverse()\n    |> case do\n      [%Position{id: next} | _] = positions ->\n        {Enum.reverse(positions), next}\n\n      [] ->\n        {[], nil}\n    end\n  end\n\n  def update_position(%Position{} = position, attrs) do\n    position\n    |> Position.changeset(attrs)\n    |> Repo.update()\n  end\n\n  ## Drive\n\n  def start_drive(%Car{id: id}) do\n    %Drive{car_id: id}\n    |> Drive.changeset(%{start_date: DateTime.utc_now()})\n    |> Repo.insert()\n  end\n\n  def close_drive(%Drive{id: id} = drive, opts \\\\ []) do\n    drive = Repo.preload(drive, [:car])\n\n    drive_data =\n      from p in Position,\n        select: %{\n          count: count() |> over(:w),\n          start_position_id: first_value(p.id) |> over(:w),\n          end_position_id: last_value(p.id) |> over(:w),\n          outside_temp_avg: avg(p.outside_temp) |> over(:w),\n          inside_temp_avg: avg(p.inside_temp) |> over(:w),\n          speed_max: max(p.speed) |> over(:w),\n          power_max: max(p.power) |> over(:w),\n          power_min: min(p.power) |> over(:w),\n          start_date: first_value(p.date) |> over(:w),\n          end_date: last_value(p.date) |> over(:w),\n          start_km: first_value(p.odometer) |> over(:w),\n          end_km: last_value(p.odometer) |> over(:w),\n          distance: (last_value(p.odometer) |> over(:w)) - (first_value(p.odometer) |> over(:w)),\n          duration_min:\n            fragment(\n              \"round(extract(epoch from (? - ?)) / 60)::integer\",\n              last_value(p.date) |> over(:w),\n              first_value(p.date) |> over(:w)\n            ),\n          start_ideal_range_km: -1,\n          end_ideal_range_km: -1,\n          start_rated_range_km: -1,\n          end_rated_range_km: -1,\n          ascent: 0,\n          descent: 0\n        },\n        windows: [\n          w: [\n            order_by:\n              fragment(\"? RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING\", p.date)\n          ]\n        ],\n        where: p.drive_id == ^id,\n        limit: 1\n\n    non_streamed_drive_data =\n      from p in Position,\n        select: %{\n          start_ideal_range_km: first_value(p.ideal_battery_range_km) |> over(:w),\n          end_ideal_range_km: last_value(p.ideal_battery_range_km) |> over(:w),\n          start_rated_range_km: first_value(p.rated_battery_range_km) |> over(:w),\n          end_rated_range_km: last_value(p.rated_battery_range_km) |> over(:w)\n        },\n        windows: [\n          w: [\n            order_by:\n              fragment(\"? RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING\", p.date)\n          ]\n        ],\n        where:\n          p.drive_id == ^id and\n            not is_nil(p.ideal_battery_range_km) and\n            not is_nil(p.odometer),\n        limit: 1\n\n    # If the sum of elevation gains exceeds the max value of a smallint (32767), set it to 0.\n    # If the sum of elevation losses exceeds the max value of a smallint (32767), set it to 0.\n    elevation_data =\n      from p1 in subquery(\n             from p in Position,\n               where: p.drive_id == ^id and not is_nil(p.elevation),\n               select: %{\n                 elevation_diff: p.elevation - (lag(p.elevation) |> over(order_by: [asc: p.date]))\n               }\n           ),\n           select: %{\n             elevation_gains:\n               fragment(\n                 \"COALESCE(NULLIF(LEAST(SUM(CASE WHEN ? > 0 THEN ? ELSE 0 END), 32768), 32768), 0)\",\n                 p1.elevation_diff,\n                 p1.elevation_diff\n               ),\n             elevation_losses:\n               fragment(\n                 \"COALESCE(NULLIF(LEAST(SUM(CASE WHEN ? < 0 THEN ABS(?) ELSE 0 END), 32768), 32768), 0)\",\n                 p1.elevation_diff,\n                 p1.elevation_diff\n               )\n           }\n\n    query =\n      from d0 in subquery(drive_data),\n        join: d1 in subquery(non_streamed_drive_data),\n        on: true,\n        join: e in subquery(elevation_data),\n        on: true,\n        select: %{\n          d0\n          | start_ideal_range_km: d1.start_ideal_range_km,\n            end_ideal_range_km: d1.end_ideal_range_km,\n            start_rated_range_km: d1.start_rated_range_km,\n            end_rated_range_km: d1.end_rated_range_km,\n            ascent: e.elevation_gains,\n            descent: e.elevation_losses\n        }\n\n    case Repo.one(query) do\n      %{count: count, distance: distance} = attrs when count >= 2 and distance >= 0.01 ->\n        lookup_address = Keyword.get(opts, :lookup_address, true)\n\n        start_pos = Repo.get!(Position, attrs.start_position_id)\n        end_pos = Repo.get!(Position, attrs.end_position_id)\n\n        attrs =\n          if lookup_address do\n            attrs\n            |> put_address(:start_address_id, start_pos)\n            |> put_address(:end_address_id, end_pos)\n          else\n            attrs\n          end\n\n        attrs =\n          attrs\n          |> put_geofence(:start_geofence_id, start_pos)\n          |> put_geofence(:end_geofence_id, end_pos)\n\n        drive\n        |> Drive.changeset(attrs)\n        |> Repo.update()\n\n      _ ->\n        drive\n        |> Drive.changeset(%{distance: 0, duration_min: 0})\n        |> Repo.delete()\n    end\n  end\n\n  defp put_address(attrs, key, position) do\n    case Locations.find_address(position) do\n      {:ok, %Locations.Address{id: id}} ->\n        Map.put(attrs, key, id)\n\n      {:error, reason} ->\n        Logger.warning(\"Address not found: #{inspect(reason)}\")\n        attrs\n    end\n  end\n\n  defp put_geofence(attrs, key, position) do\n    case Locations.find_geofence(position) do\n      %GeoFence{id: id} -> Map.put(attrs, key, id)\n      nil -> attrs\n    end\n  end\n\n  ## ChargingProcess\n\n  def get_charging_process!(id) do\n    ChargingProcess\n    |> where(id: ^id)\n    |> preload([:address, :geofence, :car, :position])\n    |> Repo.one!()\n  end\n\n  def update_charging_process(%ChargingProcess{} = charge, attrs) do\n    charge\n    |> ChargingProcess.changeset(attrs)\n    |> Repo.update()\n  end\n\n  def start_charging_process(%Car{id: id}, %{latitude: _, longitude: _} = attrs, opts \\\\ []) do\n    lookup_address = Keyword.get(opts, :lookup_address, true)\n    position = Map.put(attrs, :car_id, id)\n\n    address_id =\n      if lookup_address do\n        case Locations.find_address(position) do\n          {:ok, %Locations.Address{id: id}} ->\n            id\n\n          {:error, reason} ->\n            Logger.warning(\"Address not found: #{inspect(reason)}\")\n            nil\n        end\n      end\n\n    geofence_id =\n      with %GeoFence{id: id} <- Locations.find_geofence(position) do\n        id\n      end\n\n    with {:ok, cproc} <-\n           %ChargingProcess{car_id: id, address_id: address_id, geofence_id: geofence_id}\n           |> ChargingProcess.changeset(%{start_date: DateTime.utc_now(), position: position})\n           |> Repo.insert() do\n      {:ok, Repo.preload(cproc, [:address, :geofence])}\n    end\n  end\n\n  def insert_charge(%ChargingProcess{id: id}, attrs) do\n    %Charge{charging_process_id: id}\n    |> Charge.changeset(attrs)\n    |> Repo.insert()\n  end\n\n  def complete_charging_process(%ChargingProcess{} = charging_process) do\n    charging_process = Repo.preload(charging_process, [{:car, :settings}, :geofence])\n    settings = Settings.get_global_settings!()\n\n    type =\n      from(c in Charge,\n        select: %{\n          fast_charger_type: fragment(\"mode() WITHIN GROUP (ORDER BY ?)\", c.fast_charger_type)\n        },\n        where: c.charging_process_id == ^charging_process.id and c.charger_power > 0\n      )\n\n    stats =\n      from(c in Charge,\n        join: t in subquery(type),\n        on: true,\n        select: %{\n          start_date: first_value(c.date) |> over(:w),\n          end_date: last_value(c.date) |> over(:w),\n          start_ideal_range_km: first_value(c.ideal_battery_range_km) |> over(:w),\n          end_ideal_range_km: last_value(c.ideal_battery_range_km) |> over(:w),\n          start_rated_range_km: first_value(c.rated_battery_range_km) |> over(:w),\n          end_rated_range_km: last_value(c.rated_battery_range_km) |> over(:w),\n          start_battery_level: first_value(c.battery_level) |> over(:w),\n          end_battery_level: last_value(c.battery_level) |> over(:w),\n          outside_temp_avg: avg(c.outside_temp) |> over(:w),\n          charge_energy_added:\n            coalesce(\n              nullif(last_value(c.charge_energy_added) |> over(:w), 0),\n              max(c.charge_energy_added) |> over(:w)\n            ) -\n              (first_value(c.charge_energy_added) |> over(:w)),\n          duration_min:\n            duration_min(last_value(c.date) |> over(:w), first_value(c.date) |> over(:w)),\n          fast_charger_type: t.fast_charger_type\n        },\n        windows: [\n          w: [\n            order_by:\n              fragment(\"? RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING\", c.date)\n          ]\n        ],\n        where: [charging_process_id: ^charging_process.id],\n        limit: 1\n      )\n      |> Repo.one() || %{end_date: DateTime.utc_now(), charge_energy_added: nil}\n\n    charge_energy_used = calculate_energy_used(charging_process)\n\n    attrs =\n      stats\n      |> Map.put(:charge_energy_used, charge_energy_used)\n      |> Map.update(:charge_energy_added, nil, fn kwh ->\n        cond do\n          kwh == nil or Decimal.negative?(kwh) -> nil\n          true -> kwh\n        end\n      end)\n      |> put_cost(charging_process)\n\n    with {:ok, cproc} <- charging_process |> ChargingProcess.changeset(attrs) |> Repo.update(),\n         {:ok, _car} <- recalculate_efficiency(charging_process.car, settings) do\n      {:ok, cproc}\n    end\n  end\n\n  def update_energy_used(%ChargingProcess{} = charging_process) do\n    charging_process\n    |> ChargingProcess.changeset(%{charge_energy_used: calculate_energy_used(charging_process)})\n    |> Repo.update()\n  end\n\n  defp calculate_energy_used(%ChargingProcess{id: id} = charging_process) do\n    phases = determine_phases(charging_process)\n\n    query =\n      from c in Charge,\n        select: %{\n          energy_used:\n            c_if is_nil(c.charger_phases) do\n              c.charger_power\n            else\n              c.charger_actual_current * c.charger_voltage * type(^phases, :float) / 1000.0\n            end *\n              fragment(\n                \"EXTRACT(epoch FROM (?))\",\n                c.date - (lag(c.date) |> over(order_by: c.date))\n              ) / 3600\n        },\n        where: c.charging_process_id == ^id\n\n    Repo.one(\n      from e in subquery(query),\n        select: sum(e.energy_used) |> type(:decimal),\n        where: e.energy_used >= 0\n    )\n  end\n\n  defp determine_phases(%ChargingProcess{id: id, car_id: car_id}) do\n    from(c in Charge,\n      select: {\n        avg(c.charger_power * 1000.0 / nullif(c.charger_actual_current * c.charger_voltage, 0))\n        |> type(:float),\n        avg(c.charger_phases) |> type(:integer),\n        avg(c.charger_voltage) |> type(:float),\n        count()\n      },\n      group_by: c.charging_process_id,\n      where: c.charging_process_id == ^id\n    )\n    |> Repo.one()\n    |> case do\n      {p, r, v, n} when not is_nil(p) and p > 0 and n > 15 ->\n        cond do\n          r == round(p) ->\n            r\n\n          r == 3 and abs(p / :math.sqrt(r) - 1) <= 0.1 ->\n            Logger.info(\"Voltage correction: #{round(v)}V -> #{round(v / :math.sqrt(r))}V\",\n              car_id: car_id\n            )\n\n            :math.sqrt(r)\n\n          abs(round(p) - p) <= 0.3 ->\n            Logger.info(\"Phase correction: #{r} -> #{round(p)}\", car_id: car_id)\n            round(p)\n\n          true ->\n            nil\n        end\n\n      _ ->\n        nil\n    end\n  end\n\n  defp put_cost(stats, %ChargingProcess{} = charging_process) do\n    alias ChargingProcess, as: CP\n\n    cost =\n      case {stats, charging_process} do\n        {%{fast_charger_type: \"Tesla\" <> _},\n         %CP{car: %Car{settings: %CarSettings{free_supercharging: true}}}} ->\n          0.0\n\n        {%{charge_energy_used: kwh_used, charge_energy_added: kwh_added},\n         %CP{\n           geofence: %GeoFence{\n             billing_type: :per_kwh,\n             cost_per_unit: cost_per_kwh,\n             session_fee: session_fee\n           }\n         }} ->\n          if match?(%Decimal{}, kwh_used) or match?(%Decimal{}, kwh_added) do\n            cost =\n              with %Decimal{} <- cost_per_kwh do\n                [kwh_added, kwh_used]\n                |> Enum.reject(&is_nil/1)\n                |> Enum.max(Decimal)\n                |> Decimal.mult(cost_per_kwh)\n              end\n\n            if match?(%Decimal{}, cost) or match?(%Decimal{}, session_fee) do\n              Decimal.add(session_fee || 0, cost || 0)\n            end\n          end\n\n        {%{duration_min: minutes},\n         %CP{\n           geofence: %GeoFence{\n             billing_type: :per_minute,\n             cost_per_unit: cost_per_minute,\n             session_fee: session_fee\n           }\n         }}\n        when is_number(minutes) ->\n          cost = Decimal.mult(minutes, cost_per_minute)\n          Decimal.add(session_fee || 0, cost)\n\n        {_, _} ->\n          nil\n      end\n\n    Map.put(stats, :cost, cost)\n  end\n\n  defp recalculate_efficiency(car, settings, opts \\\\ [{5, 8}, {4, 5}, {3, 3}, {2, 2}])\n  defp recalculate_efficiency(car, _settings, []), do: {:ok, car}\n\n  defp recalculate_efficiency(%Car{id: id} = car, settings, [{precision, threshold} | opts]) do\n    {start_range, end_range} =\n      case settings do\n        %GlobalSettings{preferred_range: :ideal} ->\n          {:start_ideal_range_km, :end_ideal_range_km}\n\n        %GlobalSettings{preferred_range: :rated} ->\n          {:start_rated_range_km, :end_rated_range_km}\n      end\n\n    query =\n      from c in ChargingProcess,\n        select: {\n          round(\n            c.charge_energy_added / nullif(field(c, ^end_range) - field(c, ^start_range), 0),\n            ^precision\n          ),\n          count()\n        },\n        where:\n          c.car_id == ^id and c.duration_min > 10 and c.end_battery_level <= 95 and\n            not is_nil(field(c, ^end_range)) and not is_nil(field(c, ^start_range)) and\n            c.charge_energy_added > 0.0,\n        group_by: 1,\n        order_by: [desc: 2],\n        limit: 1\n\n    case Repo.one(query) do\n      {factor, n} when n >= threshold and not is_nil(factor) and factor > 0 ->\n        Logger.info(\"Derived efficiency factor: #{factor * 1000} Wh/km (#{n}x confirmed)\",\n          car_id: id\n        )\n\n        car\n        |> Car.changeset(%{efficiency: factor})\n        |> Repo.update()\n\n      _ ->\n        recalculate_efficiency(car, settings, opts)\n    end\n  end\n\n  ## Update\n\n  def start_update(%Car{id: id}, opts \\\\ []) do\n    start_date = Keyword.get(opts, :date) || DateTime.utc_now()\n\n    %Update{car_id: id}\n    |> Update.changeset(%{start_date: start_date})\n    |> Repo.insert()\n  end\n\n  def cancel_update(%Update{} = update) do\n    Repo.delete(update)\n  end\n\n  def finish_update(%Update{} = update, version, opts \\\\ []) do\n    end_date = Keyword.get(opts, :date) || DateTime.utc_now()\n\n    update\n    |> Update.changeset(%{end_date: end_date, version: version})\n    |> Repo.update()\n  end\n\n  def get_latest_update(%Car{id: id}) do\n    from(u in Update, where: [car_id: ^id], order_by: [desc: :start_date], limit: 1)\n    |> Repo.one()\n  end\n\n  def insert_missed_update(%Car{id: id}, version, opts \\\\ []) do\n    date = Keyword.get(opts, :date) || DateTime.utc_now()\n\n    %Update{car_id: id}\n    |> Update.changeset(%{start_date: date, end_date: date, version: version})\n    |> Repo.insert()\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/mqtt/handler.ex",
    "content": "defmodule TeslaMate.Mqtt.Handler do\n  use Tortoise311.Handler\n\n  require Logger\n\n  @impl true\n  def connection(:up, state) do\n    Logger.info(\"MQTT connection has been established\")\n    {:ok, state}\n  end\n\n  def connection(:down, state) do\n    Logger.warning(\"MQTT connection has been dropped\")\n    {:ok, state}\n  end\n\n  def connection(:terminating, state) do\n    Logger.warning(\"MQTT connection is terminating\")\n    {:ok, state}\n  end\n\n  @impl true\n  def terminate(reason, _state) do\n    Logger.warning(\"MQTT Client has been terminated with reason: #{inspect(reason)}\")\n    :ok\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/mqtt/publisher.ex",
    "content": "defmodule TeslaMate.Mqtt.Publisher do\n  use GenServer\n\n  require Logger\n\n  @name __MODULE__\n  @timeout :timer.seconds(10)\n\n  defstruct client_id: nil,\n            refs: %{}\n\n  alias __MODULE__, as: State\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: @name)\n  end\n\n  def publish(topic, msg \\\\ nil, opts \\\\ []) do\n    GenServer.call(@name, {:publish, topic, msg, opts}, @timeout)\n  end\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    {:ok, %State{client_id: Keyword.fetch!(opts, :client_id)}}\n  end\n\n  @impl true\n  def handle_call({:publish, topic, msg, opts}, from, %State{client_id: id, refs: refs} = state) do\n    opts = Keyword.put_new(opts, :timeout, round(@timeout * 0.95))\n\n    case Keyword.get(opts, :qos, 0) do\n      0 ->\n        :ok = Tortoise311.publish(id, topic, msg, opts)\n        {:reply, :ok, state}\n\n      _ ->\n        {:ok, ref} = Tortoise311.publish(id, topic, msg, opts)\n        {:noreply, %State{state | refs: Map.put(refs, ref, from)}}\n    end\n  end\n\n  @impl true\n  def handle_info({{Tortoise311, id}, ref, result}, %State{client_id: id, refs: refs} = state) do\n    {from, refs} = Map.pop(refs, ref)\n    GenServer.reply(from, result)\n    {:noreply, %State{state | refs: refs}}\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/mqtt/pubsub/vehicle_subscriber.ex",
    "content": "defmodule TeslaMate.Mqtt.PubSub.VehicleSubscriber do\n  use GenServer\n\n  require Logger\n  import Core.Dependency, only: [call: 3]\n\n  alias TeslaMate.Mqtt.Publisher\n  alias TeslaMate.Vehicles.Vehicle.Summary\n  alias TeslaMate.Vehicles\n\n  defstruct [:car_id, :last_values, :deps, :namespace]\n  alias __MODULE__, as: State\n\n  def child_spec(arg) do\n    %{\n      id: :\"#{__MODULE__}#{Keyword.fetch!(arg, :car_id)}\",\n      start: {__MODULE__, :start_link, [arg]}\n    }\n  end\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts)\n  end\n\n  @do_not_retain ~w(healthy)a\n\n  # Clears previously retained messages for topics that should not be retained\n  # This ensures backward compatibility by cleaning up stale retained messages\n  # from installations before PR #4817: https://github.com/teslamate-org/teslamate/pull/4817\n  defp clear_retained(car_id, namespace, publisher) do\n    Enum.each(@do_not_retain, fn key ->\n      topic =\n        [\"teslamate\", namespace, \"cars\", car_id, key]\n        |> Enum.reject(&is_nil(&1))\n        |> Enum.join(\"/\")\n\n      call(publisher, :publish, [topic, \"\", [retain: true, qos: 1]])\n    end)\n  end\n\n  @impl true\n  def init(opts) do\n    car_id = Keyword.fetch!(opts, :car_id)\n    namespace = Keyword.fetch!(opts, :namespace)\n\n    deps = %{\n      vehicles: Keyword.get(opts, :deps_vehicles, Vehicles),\n      publisher: Keyword.get(opts, :deps_publisher, Publisher)\n    }\n\n    :ok = call(deps.vehicles, :subscribe_to_summary, [car_id])\n    :ok = clear_retained(car_id, namespace, deps.publisher)\n\n    {:ok, %State{car_id: car_id, namespace: namespace, deps: deps}}\n  end\n\n  @publish_if_nil ~w(charge_energy_added charger_actual_current charger_phases\n                       charger_power charger_voltage scheduled_charging_start_time\n                       time_to_full_charge shift_state geofence trim_badging)a\n\n  @impl true\n  def handle_info(%Summary{} = summary, %State{} = state) do\n    values =\n      %{}\n      |> add_simple_values(summary)\n      |> add_car_latitude_longitude(summary)\n      |> add_geofence(summary)\n      |> add_active_route(summary)\n\n    publish_values(values, state)\n    {:noreply, %{state | last_values: values}}\n  end\n\n  defp publish_values(values, %State{last_values: values} = state) do\n    values\n    |> Map.take(@do_not_retain)\n    |> Enum.each(fn {key, value} ->\n      publish({key, value}, state)\n    end)\n  end\n\n  defp publish_values(values, state) do\n    values\n    |> Stream.reject(&match?({_key, :unknown}, &1))\n    |> Stream.filter(fn {key, value} ->\n      ((key in @publish_if_nil or value != nil) and\n         (state.last_values == nil or Map.get(state.last_values, key) != value)) or\n        key in @do_not_retain\n    end)\n    |> Task.async_stream(&publish(&1, state),\n      max_concurrency: 10,\n      on_timeout: :kill_task,\n      ordered: false\n    )\n    |> Enum.each(fn\n      {_, reason} when reason != :ok ->\n        Logger.warning(\"MQTT publishing failed: #{inspect(reason)}\")\n\n      _ok ->\n        nil\n    end)\n  end\n\n  @simple_values ~w(\n    display_name state since healthy latitude longitude heading battery_level charging_state usable_battery_level\n    ideal_battery_range_km est_battery_range_km rated_battery_range_km charge_energy_added\n    speed outside_temp inside_temp is_climate_on is_preconditioning locked sentry_mode\n    plugged_in scheduled_charging_start_time charge_limit_soc charger_power windows_open\n    doors_open driver_front_door_open driver_rear_door_open passenger_front_door_open passenger_rear_door_open\n    odometer shift_state charge_port_door_open time_to_full_charge charger_phases\n    charger_actual_current charger_voltage version update_available update_version is_user_present\n    model trim_badging exterior_color wheel_type spoiler_type trunk_open frunk_open elevation power\n    charge_current_request charge_current_request_max tpms_pressure_fl tpms_pressure_fr tpms_pressure_rl tpms_pressure_rr\n    tpms_soft_warning_fl tpms_soft_warning_fr tpms_soft_warning_rl tpms_soft_warning_rr climate_keeper_mode center_display_state\n  )a\n\n  defp add_simple_values(map, %Summary{} = summary) do\n    Map.merge(map, Map.take(summary, @simple_values))\n  end\n\n  defp add_car_latitude_longitude(map, %Summary{} = summary) do\n    lat_lng =\n      case {summary.latitude, summary.longitude} do\n        {nil, _} -> nil\n        {_, nil} -> nil\n        {%Decimal{} = lat, %Decimal{} = lon} -> {Decimal.to_float(lat), Decimal.to_float(lon)}\n        {lat, lon} -> {lat, lon}\n      end\n\n    case lat_lng do\n      nil ->\n        map\n\n      {lat, lon} ->\n        location =\n          %{\n            latitude: lat,\n            longitude: lon\n          }\n          |> Jason.encode!()\n\n        Map.put(map, :location, location)\n    end\n  end\n\n  defp add_geofence(map, %Summary{} = summary) do\n    case summary.geofence do\n      nil ->\n        Map.put(map, :geofence, Application.get_env(:teslamate, :default_geofence))\n\n      geofence ->\n        Map.put(map, :geofence, geofence.name)\n    end\n  end\n\n  defp add_active_route(map, %Summary{active_route_destination: nil}) do\n    error =\n      %{\n        error: \"No active route available\"\n      }\n      |> Jason.encode!()\n\n    Map.merge(\n      map,\n      %{\n        active_route_destination: \"nil\",\n        active_route_latitude: \"nil\",\n        active_route_longitude: \"nil\",\n        active_route: error\n      }\n    )\n  end\n\n  defp add_active_route(map, %Summary{} = summary) do\n    location =\n      %{\n        latitude: summary.active_route_latitude,\n        longitude: summary.active_route_longitude\n      }\n\n    active_route =\n      %{\n        destination: summary.active_route_destination,\n        energy_at_arrival: summary.active_route_energy_at_arrival,\n        miles_to_arrival: summary.active_route_miles_to_arrival,\n        minutes_to_arrival: summary.active_route_minutes_to_arrival,\n        traffic_minutes_delay: summary.active_route_traffic_minutes_delay,\n        location: location,\n        error: nil\n      }\n      |> Jason.encode!()\n\n    Map.merge(map, %{\n      active_route_destination: summary.active_route_destination,\n      active_route_latitude: summary.active_route_latitude,\n      active_route_longitude: summary.active_route_longitude,\n      active_route: active_route\n    })\n  end\n\n  defp publish({key, value}, %State{car_id: car_id, namespace: namespace, deps: deps}) do\n    topic =\n      [\"teslamate\", namespace, \"cars\", car_id, key]\n      |> Enum.reject(&is_nil(&1))\n      |> Enum.join(\"/\")\n\n    call(deps.publisher, :publish, [\n      topic,\n      to_str(value),\n      [retain: key not in @do_not_retain, qos: 1]\n    ])\n  end\n\n  defp to_str(%DateTime{} = datetime), do: DateTime.to_iso8601(datetime)\n  defp to_str(value), do: to_string(value)\nend\n"
  },
  {
    "path": "lib/teslamate/mqtt/pubsub.ex",
    "content": "defmodule TeslaMate.Mqtt.PubSub do\n  use Supervisor\n\n  alias __MODULE__.VehicleSubscriber\n  alias TeslaMate.Vehicles\n\n  # API\n\n  def start_link(opts) do\n    Supervisor.start_link(__MODULE__, opts, name: __MODULE__)\n  end\n\n  @impl true\n  def init(opts) do\n    children =\n      Vehicles.list()\n      |> Enum.map(&{VehicleSubscriber, Keyword.merge(opts, car_id: &1.car.id)})\n\n    Supervisor.init(children, strategy: :one_for_one)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/mqtt.ex",
    "content": "defmodule TeslaMate.Mqtt do\n  use Supervisor\n\n  alias __MODULE__.{Publisher, PubSub, Handler}\n\n  # API\n\n  def start_link(opts) do\n    Supervisor.start_link(__MODULE__, opts, name: __MODULE__)\n  end\n\n  @impl true\n  def init(opts) do\n    client_id = generate_client_id()\n\n    children = [\n      {Tortoise311.Connection, connection_config(opts) ++ [client_id: client_id]},\n      {Publisher, client_id: client_id},\n      {PubSub, namespace: opts[:namespace]}\n    ]\n\n    Supervisor.init(children, strategy: :one_for_one)\n  end\n\n  # Private\n\n  alias Tortoise311.Transport\n\n  defp connection_config(opts) do\n    socket_opts =\n      if opts[:ipv6],\n        do: [:inet6],\n        else: []\n\n    server =\n      if opts[:tls] do\n        verify =\n          if opts[:accept_invalid_certs],\n            do: :verify_none,\n            else: :verify_peer\n\n        {Transport.SSL,\n         host: opts[:host],\n         port: opts[:port] || 8883,\n         cacertfile: CAStore.file_path(),\n         verify: verify,\n         opts: socket_opts}\n      else\n        {Transport.Tcp, host: opts[:host], port: opts[:port] || 1883, opts: socket_opts}\n      end\n\n    [\n      user_name: opts[:username],\n      password: opts[:password],\n      server: server,\n      handler: {Handler, []},\n      subscriptions: []\n    ]\n  end\n\n  defp generate_client_id do\n    \"TESLAMATE_\" <> (:rand.uniform() |> to_string() |> Base.encode16() |> String.slice(0..10))\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/release.ex",
    "content": "defmodule TeslaMate.Release do\n  @app :teslamate\n\n  import Ecto.Query\n  alias TeslaMate.Repo\n\n  def migrate do\n    for repo <- repos() do\n      {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true))\n    end\n  end\n\n  def rollback(repo, version) do\n    for r <- repos(), r == repo do\n      {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version))\n    end\n  end\n\n  def seconds_since_last_migration do\n    Repo.one(\n      from m in \"schema_migrations\",\n        select: fragment(\"EXTRACT(EPOCH FROM age(NOW(), ?::timestamp))::BIGINT\", m.inserted_at),\n        order_by: [desc: m.inserted_at],\n        limit: 1\n    )\n  end\n\n  defp repos do\n    Application.ensure_all_started(:ssl)\n    Application.load(@app)\n    Application.fetch_env!(@app, :ecto_repos)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/repair.ex",
    "content": "defmodule TeslaMate.Repair do\n  use GenServer\n\n  require Logger\n  import Ecto.Query\n\n  alias TeslaMate.Log.{Drive, Position, ChargingProcess}\n  alias TeslaMate.Locations.Address\n  alias TeslaMate.{Repo, Locations}\n\n  defmodule State do\n    defstruct [:limit]\n  end\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: __MODULE__)\n  end\n\n  def trigger_run do\n    GenServer.cast(__MODULE__, :repair)\n  end\n\n  @impl true\n  def init(opts) do\n    {:ok, _ref} =\n      opts\n      |> Keyword.get_lazy(:interval, fn -> :timer.hours(1) end)\n      |> :timer.send_interval(self(), :repair)\n\n    :ok = trigger_run()\n\n    {:ok, %State{limit: Keyword.get(opts, :limit, 5000)}}\n  end\n\n  ## Repair\n\n  @impl true\n  def handle_cast(:repair, %State{limit: limit} = state) do\n    from(d in Drive,\n      join: sp in assoc(d, :start_position),\n      join: ep in assoc(d, :end_position),\n      select: [\n        :id,\n        :car_id,\n        :start_date,\n        {:start_position, [:id, :latitude, :longitude]},\n        {:end_position, [:id, :latitude, :longitude]}\n      ],\n      where:\n        (is_nil(d.start_address_id) or is_nil(d.end_address_id)) and\n          (not is_nil(d.start_position_id) and not is_nil(d.end_position_id)),\n      order_by: [desc: :id],\n      preload: [start_position: sp, end_position: ep],\n      limit: ^limit\n    )\n    |> Repo.all()\n    |> repair()\n\n    from(c in ChargingProcess,\n      join: p in assoc(c, :position),\n      select: [:id, :car_id, :start_date, {:position, [:id, :latitude, :longitude]}],\n      where: is_nil(c.address_id) and not is_nil(c.position_id),\n      order_by: [desc: :id],\n      preload: [position: p],\n      limit: ^limit\n    )\n    |> Repo.all()\n    |> repair()\n\n    {:noreply, state}\n  end\n\n  @impl true\n  def handle_info(:repair, state) do\n    :ok = trigger_run()\n    {:noreply, state}\n  end\n\n  def handle_info(msg, state) do\n    Logger.warning(\"Unexpected message: #{inspect(msg, pretty: true)}\")\n    {:noreply, state}\n  end\n\n  # Private\n\n  defp repair([]), do: :ok\n\n  defp repair([entity | rest]) do\n    case entity do\n      %Drive{} = drive ->\n        Logger.info(\"Repairing drive ##{drive.id} ...\")\n\n        drive\n        |> Drive.changeset(%{\n          start_address_id: get_address_id(drive.start_position),\n          end_address_id: get_address_id(drive.end_position)\n        })\n        |> Repo.update()\n\n      %ChargingProcess{} = charge ->\n        Logger.info(\"Repairing charging process ##{charge.id} ...\")\n\n        charge\n        |> ChargingProcess.changeset(%{address_id: get_address_id(charge.position)})\n        |> Repo.update()\n    end\n    |> case do\n      {:error, reason} -> Logger.warning(\"Failure: #{inspect(reason, pretty: true)}\")\n      {:ok, _entity} -> Logger.info(\"OK\")\n    end\n\n    repair(rest)\n  end\n\n  defp get_address_id(nil), do: nil\n\n  defp get_address_id(%Position{} = position) do\n    case :fuse.ask(:addr_fuse, :sync) do\n      :ok ->\n        Process.sleep(1500)\n\n        case Locations.find_address(position) do\n          {:error, {:geocoding_failed, reason}} ->\n            Logger.warning(\"Geocoding failed: #{reason}\")\n            nil\n\n          {:error, reason} ->\n            :fuse.melt(:addr_fuse)\n            Logger.warning(\"Address not found: #{inspect(reason)}\")\n            nil\n\n          {:ok, %Address{display_name: _name, id: id}} ->\n            id\n        end\n\n      :blown ->\n        nil\n\n      {:error, :not_found} ->\n        Logger.debug(\"Installing circuit-breaker :addr_fuse ...\")\n\n        :fuse.install(\n          :addr_fuse,\n          {{:standard, 5, :timer.minutes(3)}, {:reset, :timer.minutes(15)}}\n        )\n\n        get_address_id(position)\n    end\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/repo.ex",
    "content": "defmodule TeslaMate.Repo do\n  use Ecto.Repo,\n    otp_app: :teslamate,\n    adapter: Ecto.Adapters.Postgres\nend\n"
  },
  {
    "path": "lib/teslamate/settings/car_settings.ex",
    "content": "defmodule TeslaMate.Settings.CarSettings do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  alias TeslaMate.Log.Car\n\n  schema \"car_settings\" do\n    field :suspend_min, :integer, default: 21\n    field :suspend_after_idle_min, :integer, default: 15\n    field :req_not_unlocked, :boolean, default: false\n    field :free_supercharging, :boolean, default: false\n    field :use_streaming_api, :boolean, default: true\n    field :enabled, :boolean, default: true\n    field :lfp_battery, :boolean, default: false\n\n    has_one :car, Car, foreign_key: :settings_id\n  end\n\n  @all_fields [\n    :suspend_min,\n    :suspend_after_idle_min,\n    :req_not_unlocked,\n    :free_supercharging,\n    :use_streaming_api,\n    :enabled,\n    :lfp_battery\n  ]\n\n  @doc false\n  def changeset(units, attrs) do\n    units\n    |> cast(attrs, @all_fields)\n    |> validate_required(@all_fields)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/settings/global_settings.ex",
    "content": "defmodule TeslaMate.Settings.GlobalSettings do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  schema \"settings\" do\n    field :unit_of_length, Ecto.Enum, values: [:km, :mi]\n    field :unit_of_temperature, Ecto.Enum, values: [:C, :F]\n    field :unit_of_pressure, Ecto.Enum, values: [:bar, :psi]\n\n    field :preferred_range, Ecto.Enum, values: [:ideal, :rated]\n\n    field :base_url, :string\n    field :grafana_url, :string\n\n    field :language, :string\n    field :theme_mode, Ecto.Enum, values: [:light, :system, :dark], default: :system\n\n    timestamps()\n  end\n\n  @supported_languages %{\n    \"Albanian\" => \"sq\",\n    \"Arabic\" => \"ar\",\n    \"Armenian\" => \"hy\",\n    \"Azerbaijani\" => \"az\",\n    \"Belarusian\" => \"be\",\n    \"Bosnian\" => \"bs\",\n    \"Breton\" => \"br\",\n    \"Bulgarian\" => \"bg\",\n    \"Catalan\" => \"ca\",\n    \"Chinese\" => \"zh\",\n    \"Croatian\" => \"hr\",\n    \"Czech\" => \"cs\",\n    \"Danish\" => \"da\",\n    \"Dutch\" => \"nl\",\n    \"English\" => \"en\",\n    \"Estonian\" => \"et\",\n    \"Finnish\" => \"fi\",\n    \"French\" => \"fr\",\n    \"Georgian\" => \"ka\",\n    \"German\" => \"de\",\n    \"Greek\" => \"el\",\n    \"Hebrew\" => \"he\",\n    \"Hungarian\" => \"hu\",\n    \"Icelandic\" => \"is\",\n    \"Irish\" => \"ga\",\n    \"Italian\" => \"it\",\n    \"Japanese (Kana)\" => \"ja_kana\",\n    \"Japanese (Latin)\" => \"ja-Latn\",\n    \"Japanese\" => \"ja\",\n    \"Kannada\" => \"kn\",\n    \"Kazakh\" => \"kk\",\n    \"Korean (Latin)\" => \"ko-Latn\",\n    \"Korean\" => \"ko\",\n    \"Latin\" => \"la\",\n    \"Latvian\" => \"lv\",\n    \"Lithuanian\" => \"lt\",\n    \"Luxembourgish\" => \"lb\",\n    \"Macedonian\" => \"mk\",\n    \"Maltese\" => \"mt\",\n    \"Norwegian\" => \"no\",\n    \"Polish\" => \"pl\",\n    \"Portuguese\" => \"pt\",\n    \"Romania\" => \"ro\",\n    \"Romansh\" => \"rm\",\n    \"Russian\" => \"ru\",\n    \"Scottish Gaelic\" => \"gd\",\n    \"Serbian (Cyrillic)\" => \"sr\",\n    \"Serbian (Latin)\" => \"sr-Latn\",\n    \"Slovak\" => \"sk\",\n    \"Slovene\" => \"sl\",\n    \"Spanish\" => \"es\",\n    \"Swedish\" => \"sv\",\n    \"Thai\" => \"th\",\n    \"Turkish\" => \"tr\",\n    \"Ukrainian\" => \"uk\",\n    \"Welsh\" => \"cy\",\n    \"Western Frisian\" => \"fy\"\n  }\n\n  def supported_languages do\n    Enum.sort(@supported_languages)\n  end\n\n  @doc false\n  def changeset(units, attrs) do\n    units\n    |> cast(attrs, [\n      :unit_of_length,\n      :unit_of_temperature,\n      :unit_of_pressure,\n      :preferred_range,\n      :base_url,\n      :grafana_url,\n      :language,\n      :theme_mode\n    ])\n    |> validate_required([\n      :unit_of_length,\n      :unit_of_temperature,\n      :unit_of_pressure,\n      :preferred_range,\n      :language,\n      :theme_mode\n    ])\n    |> update_change(:base_url, &trim_url/1)\n    |> update_change(:grafana_url, &trim_url/1)\n    |> validate_url(:base_url)\n    |> validate_url(:grafana_url)\n    |> validate_inclusion(:language, Map.values(@supported_languages),\n      message: \"is not supported\"\n    )\n  end\n\n  defp trim_url(url) do\n    with str when is_binary(str) <- url,\n         \"\" <- str |> String.trim() |> String.trim_trailing(\"/\") do\n      nil\n    end\n  end\n\n  def validate_url(changeset, field) do\n    validate_change(changeset, field, fn _, value ->\n      case URI.parse(value) do\n        %URI{scheme: nil} -> [{field, \"is missing a scheme (e.g. https)\"}]\n        %URI{scheme: scheme} when scheme not in [\"http\", \"https\"] -> [{field, \"invalid scheme\"}]\n        %URI{host: nil} -> [{field, \"is missing a host\"}]\n        _valid_uri -> []\n      end\n    end)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/settings.ex",
    "content": "defmodule TeslaMate.Settings do\n  @moduledoc \"\"\"\n  The Settings context.\n  \"\"\"\n\n  import Ecto.Query, warn: false\n  alias TeslaMate.Repo\n\n  alias __MODULE__.{GlobalSettings, CarSettings}\n  alias TeslaMate.{Log, Locations, Vehicles}\n  alias TeslaMate.Log.Car\n  import Core.Dependency, only: [call: 2]\n\n  def get_global_settings! do\n    case Repo.all(GlobalSettings) do\n      [settings] -> settings\n      _ -> raise \"settings table is corrupted\"\n    end\n  end\n\n  def get_car_settings do\n    from(s in CarSettings, order_by: s.id, preload: [:car])\n    |> Repo.all()\n  end\n\n  def get_car_settings!(%Car{settings_id: id}) do\n    CarSettings\n    |> Repo.get!(id)\n    |> Repo.preload(:car)\n  end\n\n  def update_global_settings(%GlobalSettings{} = pre, attrs) do\n    Repo.transaction(\n      fn ->\n        with {:ok, post} <- pre |> GlobalSettings.changeset(attrs) |> Repo.update(),\n             :ok <- on_range_change(pre, post),\n             :ok <- on_language_change(pre, post) do\n          post\n        else\n          {:error, reason} -> Repo.rollback(reason)\n        end\n      end,\n      timeout: 60_000\n    )\n  end\n\n  def update_car_settings(%CarSettings{car: %Car{}} = pre, attrs) do\n    Repo.transaction(fn ->\n      with {:ok, post} <- pre |> CarSettings.changeset(attrs) |> Repo.update(),\n           :ok <- on_enabled_change(pre, post),\n           :ok <- broadcast(pre.car, post) do\n        post\n      else\n        {:error, reason} -> Repo.rollback(reason)\n      end\n    end)\n  end\n\n  def change_global_settings(%GlobalSettings{} = settings, attrs \\\\ %{}) do\n    GlobalSettings.changeset(settings, attrs)\n  end\n\n  def change_car_settings(%CarSettings{} = car_settings, attrs \\\\ %{}) do\n    CarSettings.changeset(car_settings, attrs)\n  end\n\n  def topic(%Car{id: id}), do: inspect(CarSettings) <> to_string(id)\n\n  def subscribe_to_changes(car) do\n    Phoenix.PubSub.subscribe(TeslaMate.PubSub, topic(car))\n  end\n\n  defp on_range_change(%GlobalSettings{preferred_range: pf}, %GlobalSettings{preferred_range: pf}) do\n    :ok\n  end\n\n  defp on_range_change(%GlobalSettings{}, %GlobalSettings{} = new) do\n    Log.recalculate_efficiencies(new)\n  end\n\n  defp on_language_change(%GlobalSettings{language: l}, %GlobalSettings{language: l}) do\n    :ok\n  end\n\n  defp on_language_change(%GlobalSettings{}, %GlobalSettings{language: lang}) do\n    Locations.refresh_addresses(lang)\n  end\n\n  def on_enabled_change(%CarSettings{enabled: preEnabled}, %CarSettings{enabled: postEnabled}) do\n    if preEnabled != postEnabled do\n      call(Vehicles, :restart)\n    end\n\n    :ok\n  end\n\n  defp broadcast(car, settings) do\n    Phoenix.PubSub.broadcast(TeslaMate.PubSub, topic(car), settings)\n  rescue\n    _ -> :ok\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/terrain.ex",
    "content": "defmodule TeslaMate.Terrain do\n  use GenStateMachine\n\n  require Logger\n  import Core.Dependency, only: [call: 3]\n  alias TeslaMate.Log.Position\n  alias TeslaMate.Log\n\n  defstruct [:timeout, :deps, :name]\n  alias __MODULE__, as: Data\n\n  @name __MODULE__\n\n  # API\n\n  def start_link(opts) do\n    GenStateMachine.start_link(__MODULE__, opts, name: Keyword.get(opts, :name, @name))\n  end\n\n  def get_elevation(name \\\\ @name, coordinates) do\n    GenStateMachine.call(name, {:get_elevation, coordinates}, 2000)\n  end\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    data = %Data{\n      timeout: Keyword.get(opts, :timeout, 100),\n      name: Keyword.get(opts, :name, @name),\n      deps: %{\n        srtm: Keyword.get(opts, :deps_srtm, SRTM),\n        log: Keyword.get(opts, :deps_log, Log)\n      }\n    }\n\n    case Keyword.get(opts, :disabled, false) do\n      false ->\n        {:ok, :ready, data, {:next_event, :internal, {:fetch_positions, 0}}}\n\n      true ->\n        {:ok, :disabled, data}\n    end\n  end\n\n  ## Call\n\n  @impl true\n  def handle_event({:call, from}, {:get_elevation, {lat, lng}}, :ready, %Data{} = data) do\n    task = Task.async(fn -> do_get_elevation({lat, lng}, data) end)\n\n    case Task.yield(task, data.timeout) do\n      {:ok, {:ok, elevation}} ->\n        {:keep_state_and_data, {:reply, from, elevation}}\n\n      {:ok, {:error, :unavailable}} ->\n        {:keep_state_and_data, {:reply, from, nil}}\n\n      {:ok, {:error, reason}} ->\n        log_warning(reason)\n        {:keep_state_and_data, {:reply, from, nil}}\n\n      nil ->\n        Logger.info(\"Querying location for elevation takes longer than #{data.timeout}ms ...\")\n        {:next_state, {:waiting, task.ref}, data, {:reply, from, nil}}\n    end\n  end\n\n  def handle_event({:call, from}, {:get_elevation, _coords}, _state, _data) do\n    {:keep_state_and_data, {:reply, from, nil}}\n  end\n\n  ## Internal\n\n  def handle_event(event, {:fetch_positions, min_id}, :ready, %Data{} = data)\n      when event in [:internal, :state_timeout] do\n    case call(data.deps.log, :get_positions_without_elevation, [min_id, [limit: 1000]]) do\n      {[], nil} ->\n        {:keep_state_and_data, schedule_fetch()}\n\n      {positions, next} ->\n        Logger.info(\"Adding elevation to #{length(positions)} positions ...\")\n\n        :ok = GenStateMachine.cast(self(), :process)\n\n        {:next_state, {:update, positions, next, nil}, data}\n    end\n  end\n\n  ## Cast\n\n  def handle_event(:cast, :process, {:update, [], next, nil}, data) do\n    {:next_state, :ready, data, {:next_event, :internal, {:fetch_positions, next}}}\n  end\n\n  def handle_event(:cast, :process, {:update, [%Position{} = p | rest], next, nil}, data) do\n    task =\n      Task.async(fn ->\n        do_get_elevation(\n          {\n            Decimal.to_float(p.latitude),\n            Decimal.to_float(p.longitude)\n          },\n          data\n        )\n      end)\n\n    case Task.yield(task, data.timeout) do\n      {:ok, {:ok, elevation}} ->\n        {:ok, _pos} = call(data.deps.log, :update_position, [p, %{elevation: elevation}])\n        :ok = GenStateMachine.cast(self(), :process)\n        {:next_state, {:update, rest, next, nil}, data}\n\n      {:ok, {:error, :unavailable}} ->\n        :ok = GenStateMachine.cast(self(), :process)\n        {:next_state, {:update, rest, next, nil}, data}\n\n      {:ok, {:error, reason}} ->\n        log_warning(reason)\n        :ok = GenStateMachine.cast(self(), :process)\n        {:next_state, {:update, rest, next, nil}, data}\n\n      nil ->\n        Logger.info(\"Querying location for elevation takes longer than #{data.timeout}ms ...\")\n        {:next_state, {:update, [p | rest], next, task.ref}, data}\n    end\n  end\n\n  ## Info\n\n  def handle_event(:info, {ref, result}, {:waiting, ref}, data) do\n    case result do\n      {:ok, elevation} ->\n        Logger.debug(\"Received delayed SRTM message: #{elevation}m\")\n        {:next_state, :ready, data, schedule_fetch()}\n\n      {:error, reason} ->\n        log_warning(reason)\n        {:next_state, :ready, data, schedule_fetch()}\n    end\n  end\n\n  def handle_event(:info, {ref, result}, {:update, [%Position{} = p | rest], next, ref}, data) do\n    case result do\n      {:ok, elevation} ->\n        Logger.debug(\"Received delayed SRTM message: #{elevation}m\")\n        {:ok, _pos} = call(data.deps.log, :update_position, [p, %{elevation: elevation}])\n        :ok = GenStateMachine.cast(self(), :process)\n        {:next_state, {:update, rest, next, nil}, data}\n\n      {:error, reason} ->\n        log_warning(reason)\n        :ok = GenStateMachine.cast(self(), :process)\n        {:next_state, {:update, rest, next, nil}, data}\n    end\n  end\n\n  def handle_event(:info, {:DOWN, _ref, :process, _pid, :normal}, _state, _data) do\n    :keep_state_and_data\n  end\n\n  def handle_event(:info, :garbage_collect, _state, _data) do\n    :erlang.garbage_collect(self())\n    :keep_state_and_data\n  end\n\n  # Private\n\n  defp do_get_elevation({lat, lng}, %Data{deps: %{srtm: srtm}, name: name} = data) do\n    case :fuse.ask(name, :sync) do\n      :ok ->\n        with {:error, reason} <-\n               call(srtm, :get_elevation, [lat, lng, [disk_cache_path: cache_path()]]) do\n          :fuse.melt(name)\n          {:error, reason}\n        end\n\n      :blown ->\n        {:error, :unavailable}\n\n      {:error, :not_found} ->\n        Logger.debug(\"Installing circuit-breaker #{inspect(name)} ...\")\n        :fuse.install(name, {{:standard, 2, :timer.minutes(3)}, {:reset, :timer.minutes(15)}})\n        do_get_elevation({lat, lng}, data)\n    end\n  end\n\n  defp schedule_fetch do\n    {:state_timeout, :timer.hours(6), {:fetch_positions, 0}}\n  end\n\n  defp log_warning(reason) do\n    Logger.warning(\"Elevation query failed: #{inspect(reason)}\")\n  end\n\n  defp cache_path do\n    Application.fetch_env!(:teslamate, :srtm_cache)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/updater.ex",
    "content": "defmodule TeslaMate.Updater do\n  use GenServer\n  use Tesla, only: [:get]\n\n  require Logger\n\n  @version Mix.Project.config()[:version]\n  @name __MODULE__\n\n  adapter Tesla.Adapter.Finch, name: TeslaMate.HTTP, receive_timeout: 30_000\n\n  plug Tesla.Middleware.BaseUrl, \"https://api.github.com\"\n  plug Tesla.Middleware.Headers, [{\"user-agent\", \"TeslaMate/#{@version}\"}]\n  plug Tesla.Middleware.JSON\n  plug Tesla.Middleware.Logger, debug: true, log_level: &log_level/1\n\n  defmodule State, do: defstruct([:update, :version])\n  defmodule Release, do: defstruct([:version, :prerelease])\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: Keyword.get(opts, :name, @name))\n  end\n\n  def get_update(name \\\\ @name) do\n    GenServer.call(name, :get_update, 50)\n  catch\n    :exit, {:timeout, _} -> nil\n    :exit, {:noproc, _} -> nil\n  end\n\n  @impl GenServer\n  def init(opts) do\n    check_after = opts[:check_after] || :timer.minutes(5)\n    interval = opts[:interval] || :timer.hours(72)\n    version = opts[:version] || @version\n\n    {:ok, _} = :timer.send_interval(interval, :check_for_updates)\n\n    case check_after do\n      0 ->\n        {:ok, %State{version: version}, {:continue, :check_for_updates}}\n\n      t when is_number(t) and 0 < t ->\n        Process.send_after(self(), :check_for_updates, t)\n        {:ok, %State{version: version}}\n    end\n  end\n\n  @impl GenServer\n  def handle_continue(:check_for_updates, %State{version: current_vsv} = state) do\n    Logger.debug(\"Checking for updates …\")\n\n    case fetch_release() do\n      {:ok, %Release{version: version, prerelease: false}} ->\n        case Version.compare(current_vsv, version) do\n          :lt ->\n            Logger.info(\"Update available: #{current_vsv} -> #{version}\")\n            {:noreply, %State{state | update: version}}\n\n          _ ->\n            Logger.debug(\"No update available\")\n            {:noreply, state}\n        end\n\n      {:ok, %Release{version: version, prerelease: true}} ->\n        Logger.debug(\"Prerelease available: #{version}\")\n        {:noreply, state}\n\n      {:error, reason} ->\n        Logger.warning(\"Update check failed: #{inspect(reason, pretty: true)}\")\n        {:noreply, state}\n    end\n  end\n\n  @impl GenServer\n  def handle_info(:check_for_updates, state) do\n    {:noreply, state, {:continue, :check_for_updates}}\n  end\n\n  @impl GenServer\n  def handle_call(:get_update, _from, %State{update: update} = state) do\n    {:reply, update, state}\n  end\n\n  ## Private\n\n  defp fetch_release do\n    case get(\"/repos/teslamate-org/teslamate/releases/latest\") do\n      {:ok, %Tesla.Env{status: 200, body: body}} ->\n        parse_release(body)\n\n      {:ok, %Tesla.Env{} = env} ->\n        {:error, reason: \"Unexpected response\", env: env}\n\n      {:error, reason} ->\n        {:error, reason}\n    end\n  end\n\n  defp parse_release(release) do\n    case release do\n      %{\"tag_name\" => \"v\" <> tag, \"prerelease\" => prerelease?, \"draft\" => draft?} ->\n        case Version.parse(tag) do\n          {:ok, version} ->\n            {:ok, %Release{version: to_string(version), prerelease: prerelease? or draft?}}\n\n          :error ->\n            {:error, :invalid_release_tag}\n        end\n\n      %{} ->\n        {:error, :invalid_response}\n    end\n  end\n\n  defp log_level(%Tesla.Env{} = env) when env.status >= 400, do: :warning\n  defp log_level(%Tesla.Env{}), do: :debug\nend\n"
  },
  {
    "path": "lib/teslamate/vault.ex",
    "content": "defmodule TeslaMate.Vault do\n  use Cloak.Vault,\n    otp_app: :teslamate\n\n  defmodule Encrypted.Binary do\n    use Cloak.Ecto.Binary, vault: TeslaMate.Vault\n  end\n\n  require Logger\n\n  # With AES.GCM, 12-byte IV length is necessary for interoperability reasons.\n  # See https://github.com/danielberkompas/cloak/issues/93\n  @iv_length 12\n\n  @doc \"\"\"\n  The default cipher used to encrypt values is AES-265 in GCM mode.\n\n  A random IV is generated for every encryption, and prepends the key tag, IV,\n  and ciphertag to the beginning of the ciphertext:\n\n  +----------------------------------------------------------+----------------------+\n  |                          HEADER                          |         BODY         |\n  +-------------------+---------------+----------------------+----------------------+\n  | Key Tag (n bytes) | IV (12 bytes) | Ciphertag (16 bytes) | Ciphertext (n bytes) |\n  +-------------------+---------------+----------------------+----------------------+\n            |_________________________________\n                                              |\n  +---------------+-----------------+-------------------+\n  | Type (1 byte) | Length (1 byte) | Key Tag (n bytes) |\n  +---------------+-----------------+-------------------+\n\n  The `Key Tag` component of the header consists of a `Type`, `Length`, and\n  `Value` triplet for easy decoding.\n\n  For more information see `Cloak.Ciphers.AES.GCM`.\n  \"\"\"\n  def default_cipher(key) do\n    {Cloak.Ciphers.AES.GCM, tag: \"AES.GCM.V1\", key: key, iv_length: @iv_length}\n  end\n\n  def encryption_key_provided? do\n    case get_encryption_key_from_config() do\n      {:ok, _key} -> true\n      :error -> false\n    end\n  end\n\n  @impl GenServer\n  def init(config) do\n    encryption_key =\n      with :error <- get_encryption_key_from_config(),\n           :error <- get_encryption_key_from(System.tmp_dir()),\n           :error <- get_encryption_key_from(import_dir()) do\n        key_length = 48 + :rand.uniform(16)\n        random_key = generate_random_key(key_length)\n\n        Logger.warning(\"\"\"\n        \\n------------------------------------------------------------------------------\n        No ENCRYPTION_KEY was found to encrypt and securely store your API tokens.\n\n        Therefore, the following randomly generated key will be used instead for this\n        session:\n\n\n        #{pad(random_key, 80)}\n\n\n        Create an environment variable named \"ENCRYPTION_KEY\" with the value set to\n        the key above (or choose your own) and pass it to the application from now on.\n\n        OTHERWISE, A LOGIN WITH YOUR API TOKENS WILL BE REQUIRED AFTER EVERY RESTART!\n        ------------------------------------------------------------------------------\n        \"\"\")\n\n        random_key\n      else\n        {:ok, key} -> key\n      end\n\n    config =\n      Keyword.put(config, :ciphers,\n        default: default_cipher(:crypto.hash(:sha256, encryption_key))\n      )\n\n    {:ok, config}\n  end\n\n  defp pad(string, width) do\n    case String.length(string) do\n      len when len < width ->\n        string\n        |> String.pad_leading(div(width - len, 2) + len)\n        |> String.pad_trailing(width)\n\n      _ ->\n        string\n    end\n  end\n\n  defp get_encryption_key_from_config do\n    Application.get_env(:teslamate, TeslaMate.Vault)\n    |> Access.fetch!(:key)\n    |> case do\n      key when is_binary(key) and byte_size(key) > 0 -> {:ok, key}\n      _ -> :error\n    end\n  end\n\n  # the database migration writes the generated key into a tmp dir and a local\n  # 'import' dir if possible. The latter is likely a persistent volume for a\n  # lot of users of the Docker image.\n  # see priv/migrations/20220123131732_encrypt_api_tokens.exs\n  defp get_encryption_key_from(dir) do\n    with dir when is_binary(dir) <- dir,\n         path = Path.join(dir, \"tm_encryption.key\"),\n         {:ok, encryption_key} <- File.read(path) do\n      Logger.info(\"\"\"\n      Restored encryption key from #{path}:\n\n      #{encryption_key}\n      \"\"\")\n\n      {:ok, encryption_key}\n    else\n      _ -> :error\n    end\n  end\n\n  defp import_dir do\n    path =\n      System.get_env(\"IMPORT_DIR\", \"import\")\n      |> Path.absname()\n\n    if File.exists?(path), do: path\n  end\n\n  defp generate_random_key(length) when length > 31 do\n    :crypto.strong_rand_bytes(length) |> Base.encode64(padding: false) |> binary_part(0, length)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/vehicles/vehicle/summary.ex",
    "content": "defmodule TeslaMate.Vehicles.Vehicle.Summary do\n  import TeslaMate.Convert, only: [miles_to_km: 2, mph_to_kmh: 1]\n\n  alias TeslaApi.Vehicle.State.{Drive, Charge, VehicleState}\n  alias TeslaApi.Vehicle\n  alias TeslaMate.Log.Car\n\n  defstruct ~w(\n    car display_name state since healthy latitude longitude heading battery_level charging_state usable_battery_level\n    ideal_battery_range_km est_battery_range_km rated_battery_range_km charge_energy_added\n    speed outside_temp inside_temp is_climate_on is_preconditioning locked sentry_mode\n    plugged_in scheduled_charging_start_time charge_limit_soc charger_power windows_open\n    doors_open driver_front_door_open driver_rear_door_open passenger_front_door_open passenger_rear_door_open\n    odometer shift_state charge_port_door_open time_to_full_charge charger_phases\n    charger_actual_current charger_voltage version update_available update_version is_user_present geofence\n    model trim_badging exterior_color wheel_type spoiler_type trunk_open frunk_open elevation power\n    charge_current_request charge_current_request_max tpms_pressure_fl tpms_pressure_fr tpms_pressure_rl tpms_pressure_rr\n    tpms_soft_warning_fl tpms_soft_warning_fr tpms_soft_warning_rl tpms_soft_warning_rr climate_keeper_mode\n    active_route_destination active_route_latitude active_route_longitude active_route_energy_at_arrival\n    active_route_miles_to_arrival active_route_minutes_to_arrival active_route_traffic_minutes_delay\n    center_display_state\n  )a\n\n  def into(nil, %{state: :start, healthy?: healthy?, car: car}) do\n    %__MODULE__{\n      state: :unavailable,\n      healthy: healthy?,\n      trim_badging: get_car_attr(car, :trim_badging),\n      exterior_color: get_car_attr(car, :exterior_color),\n      spoiler_type: get_car_attr(car, :spoiler_type),\n      wheel_type: get_car_attr(car, :wheel_type),\n      model: get_car_attr(car, :model),\n      car: car\n    }\n  end\n\n  def into(vehicle, attrs) do\n    %{\n      state: state,\n      since: since,\n      healthy?: healthy?,\n      car: car,\n      elevation: elevation,\n      geofence: gf\n    } = attrs\n\n    %__MODULE__{\n      format_vehicle(vehicle)\n      | state: format_state(state),\n        since: since,\n        healthy: healthy?,\n        elevation: elevation,\n        geofence: gf,\n        trim_badging: get_car_attr(car, :trim_badging),\n        exterior_color: get_car_attr(car, :exterior_color),\n        spoiler_type: get_car_attr(car, :spoiler_type),\n        wheel_type: get_car_attr(car, :wheel_type),\n        model: get_car_attr(car, :model),\n        car: car\n    }\n  end\n\n  defp format_state({:driving, {:offline, _}, _id}), do: :offline\n  defp format_state({:driving, _state, _id}), do: :driving\n  defp format_state({state, _, _}) when is_atom(state), do: state\n  defp format_state({state, _}) when is_atom(state), do: state\n  defp format_state(state) when is_atom(state), do: state\n\n  defp get_car_attr(%Car{exterior_color: v}, :exterior_color), do: v\n  defp get_car_attr(%Car{spoiler_type: v}, :spoiler_type), do: v\n  defp get_car_attr(%Car{trim_badging: v}, :trim_badging), do: v\n  defp get_car_attr(%Car{wheel_type: v}, :wheel_type), do: v\n  defp get_car_attr(%Car{model: v}, :model), do: v\n  defp get_car_attr(nil, _key), do: nil\n\n  defp format_vehicle(%Vehicle{} = vehicle) do\n    %__MODULE__{\n      # General\n      display_name: vehicle.display_name,\n\n      # Drive State\n      active_route_destination: get_in_struct(vehicle, [:drive_state, :active_route_destination]),\n      active_route_latitude: get_in_struct(vehicle, [:drive_state, :active_route_latitude]),\n      active_route_longitude: get_in_struct(vehicle, [:drive_state, :active_route_longitude]),\n      active_route_energy_at_arrival:\n        get_in_struct(vehicle, [:drive_state, :active_route_energy_at_arrival]),\n      active_route_miles_to_arrival:\n        get_in_struct(vehicle, [:drive_state, :active_route_miles_to_arrival]),\n      active_route_minutes_to_arrival:\n        get_in_struct(vehicle, [:drive_state, :active_route_minutes_to_arrival]),\n      active_route_traffic_minutes_delay:\n        get_in_struct(vehicle, [:drive_state, :active_route_traffic_minutes_delay]),\n      latitude: get_in_struct(vehicle, [:drive_state, :latitude]),\n      longitude: get_in_struct(vehicle, [:drive_state, :longitude]),\n      power: get_in_struct(vehicle, [:drive_state, :power]),\n      speed: speed(vehicle),\n      shift_state: get_in_struct(vehicle, [:drive_state, :shift_state]),\n      heading: get_in_struct(vehicle, [:drive_state, :heading]),\n\n      # Charge State\n      battery_level: charge(vehicle, :battery_level),\n      charging_state: charge(vehicle, :charging_state),\n      charge_current_request: charge(vehicle, :charge_current_request),\n      charge_current_request_max: charge(vehicle, :charge_current_request_max),\n      charge_energy_added: charge(vehicle, :charge_energy_added),\n      charge_limit_soc: charge(vehicle, :charge_limit_soc),\n      charge_port_door_open: charge(vehicle, :charge_port_door_open),\n      charger_actual_current: charge(vehicle, :charger_actual_current),\n      charger_phases: charge(vehicle, :charger_phases),\n      charger_power: charge(vehicle, :charger_power),\n      charger_voltage: charge(vehicle, :charger_voltage),\n      est_battery_range_km: charge(vehicle, :est_battery_range) |> miles_to_km(2),\n      ideal_battery_range_km: charge(vehicle, :ideal_battery_range) |> miles_to_km(2),\n      plugged_in: plugged_in(vehicle),\n      rated_battery_range_km: charge(vehicle, :battery_range) |> miles_to_km(2),\n      scheduled_charging_start_time:\n        charge(vehicle, :scheduled_charging_start_time) |> to_datetime(),\n      time_to_full_charge: charge(vehicle, :time_to_full_charge),\n      usable_battery_level: charge(vehicle, :usable_battery_level),\n\n      # Climate State\n      is_climate_on: get_in_struct(vehicle, [:climate_state, :is_climate_on]),\n      is_preconditioning: get_in_struct(vehicle, [:climate_state, :is_preconditioning]),\n      climate_keeper_mode: get_in_struct(vehicle, [:climate_state, :climate_keeper_mode]),\n      outside_temp: get_in_struct(vehicle, [:climate_state, :outside_temp]),\n      inside_temp: get_in_struct(vehicle, [:climate_state, :inside_temp]),\n\n      # Vehicle State\n      odometer: get_in_struct(vehicle, [:vehicle_state, :odometer]) |> miles_to_km(2),\n      locked: get_in_struct(vehicle, [:vehicle_state, :locked]),\n      sentry_mode: get_in_struct(vehicle, [:vehicle_state, :sentry_mode]),\n      windows_open: window_open(vehicle),\n      doors_open: doors_open(vehicle),\n      driver_front_door_open: driver_front_door_open(vehicle),\n      driver_rear_door_open: driver_rear_door_open(vehicle),\n      passenger_front_door_open: passenger_front_door_open(vehicle),\n      passenger_rear_door_open: passenger_rear_door_open(vehicle),\n      trunk_open: trunk_open(vehicle),\n      frunk_open: frunk_open(vehicle),\n      is_user_present: get_in_struct(vehicle, [:vehicle_state, :is_user_present]),\n      version: version(vehicle),\n      update_available: update_available(vehicle),\n      update_version: update_version(vehicle),\n      tpms_pressure_fl: get_in_struct(vehicle, [:vehicle_state, :tpms_pressure_fl]),\n      tpms_pressure_fr: get_in_struct(vehicle, [:vehicle_state, :tpms_pressure_fr]),\n      tpms_pressure_rl: get_in_struct(vehicle, [:vehicle_state, :tpms_pressure_rl]),\n      tpms_pressure_rr: get_in_struct(vehicle, [:vehicle_state, :tpms_pressure_rr]),\n      tpms_soft_warning_fl: get_in_struct(vehicle, [:vehicle_state, :tpms_soft_warning_fl]),\n      tpms_soft_warning_fr: get_in_struct(vehicle, [:vehicle_state, :tpms_soft_warning_fr]),\n      tpms_soft_warning_rl: get_in_struct(vehicle, [:vehicle_state, :tpms_soft_warning_rl]),\n      tpms_soft_warning_rr: get_in_struct(vehicle, [:vehicle_state, :tpms_soft_warning_rr]),\n      center_display_state: get_in_struct(vehicle, [:vehicle_state, :center_display_state])\n    }\n  end\n\n  defp charge(vehicle, key), do: get_in_struct(vehicle, [:charge_state, key])\n\n  defp speed(%Vehicle{drive_state: %Drive{speed: s}}) when not is_nil(s), do: mph_to_kmh(s)\n  defp speed(_vehicle), do: nil\n\n  defp plugged_in(%Vehicle{charge_state: nil}), do: nil\n  defp plugged_in(%Vehicle{charge_state: %Charge{charge_port_door_open: :unknown}}), do: :unknown\n\n  defp plugged_in(%Vehicle{charge_state: %Charge{} = c}) do\n    c.charging_state != \"Disconnected\"\n  end\n\n  defp plugged_in(_vehicle), do: nil\n\n  defp window_open(%Vehicle{vehicle_state: vehicle_state}) do\n    case vehicle_state do\n      %VehicleState{fd_window: fd, fp_window: fp, rd_window: rd, rp_window: rp}\n      when is_number(fd) and is_number(fp) and is_number(rd) and is_number(rp) ->\n        fd > 0 or fp > 0 or rd > 0 or rp > 0\n\n      _ ->\n        nil\n    end\n  end\n\n  defp doors_open(%Vehicle{vehicle_state: vehicle_state}) do\n    case vehicle_state do\n      %VehicleState{df: df, pf: pf, dr: dr, pr: pr}\n      when is_number(df) and is_number(pf) and is_number(dr) and is_number(pr) ->\n        df > 0 or pf > 0 or dr > 0 or pr > 0\n\n      _ ->\n        nil\n    end\n  end\n\n  defp driver_front_door_open(%Vehicle{vehicle_state: %VehicleState{df: df}}) when is_number(df),\n    do: df > 0\n\n  defp driver_front_door_open(_vehicle), do: nil\n\n  defp driver_rear_door_open(%Vehicle{vehicle_state: %VehicleState{dr: dr}}) when is_number(dr),\n    do: dr > 0\n\n  defp driver_rear_door_open(_vehicle), do: nil\n\n  defp passenger_front_door_open(%Vehicle{vehicle_state: %VehicleState{pf: pf}})\n       when is_number(pf),\n       do: pf > 0\n\n  defp passenger_front_door_open(_vehicle), do: nil\n\n  defp passenger_rear_door_open(%Vehicle{vehicle_state: %VehicleState{pr: pr}})\n       when is_number(pr),\n       do: pr > 0\n\n  defp passenger_rear_door_open(_vehicle), do: nil\n\n  defp trunk_open(%Vehicle{vehicle_state: %VehicleState{rt: rt}}) when is_number(rt), do: rt > 0\n  defp trunk_open(_vehicle), do: nil\n\n  defp frunk_open(%Vehicle{vehicle_state: %VehicleState{ft: ft}}) when is_number(ft), do: ft > 0\n  defp frunk_open(_vehicle), do: nil\n\n  defp version(vehicle) do\n    with %Vehicle{vehicle_state: %VehicleState{car_version: v}} when is_binary(v) <- vehicle,\n         [version | _] <- String.split(v, \" \") do\n      version\n    else\n      _ -> nil\n    end\n  end\n\n  defp update_available(vehicle) do\n    case get_in_struct(vehicle, [:vehicle_state, :software_update, :status]) do\n      status when status in [\"available\", \"downloading\", \"downloading_wifi_wait\"] -> true\n      status when is_binary(status) -> false\n      nil -> nil\n    end\n  end\n\n  defp update_version(vehicle) do\n    case get_in_struct(vehicle, [:vehicle_state, :software_update, :version]) do\n      version when is_binary(version) -> List.first(String.split(version, \" \"))\n      nil -> nil\n    end\n  end\n\n  defp to_datetime(val) when val in [nil, :unknown], do: val\n  defp to_datetime(ts), do: DateTime.from_unix!(ts)\n\n  defp get_in_struct(struct, keys) do\n    Enum.reduce(keys, struct, fn key, acc -> if acc, do: Map.get(acc, key) end)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/vehicles/vehicle.ex",
    "content": "defmodule TeslaMate.Vehicles.Vehicle do\n  use GenStateMachine\n\n  require Logger\n\n  alias __MODULE__.Summary\n  alias TeslaMate.{Vehicles, Api, Log, Locations, Settings, Convert, Repo, Terrain}\n  alias TeslaMate.Settings.CarSettings\n  alias TeslaMate.Locations.GeoFence\n  alias TeslaMate.Log.Car\n\n  alias TeslaApi.Vehicle.State.{Climate, VehicleState, Drive, Charge, VehicleConfig}\n  alias TeslaApi.{Stream, Vehicle}\n\n  import Core.Dependency, only: [call: 3, call: 2]\n\n  defmodule Data do\n    defstruct car: nil,\n              last_used: nil,\n              last_response: nil,\n              last_state_change: nil,\n              elevation: nil,\n              geofence: nil,\n              deps: %{},\n              task: nil,\n              import?: false,\n              stream_pid: nil\n  end\n\n  @asleep_interval 30\n\n  @drive_timeout_min 15\n\n  # Static\n  def interval(env_var, default) do\n    System.get_env(env_var)\n    |> case do\n      nil -> default\n      interval -> String.to_integer(interval) |> max(default)\n    end\n  end\n\n  def asleep_interval, do: interval(\"POLLING_ASLEEP_INTERVAL\", @asleep_interval)\n  def driving_interval, do: interval(\"POLLING_DRIVING_INTERVAL\", 2.5)\n  def default_interval, do: interval(\"POLLING_DEFAULT_INTERVAL\", 15)\n  def online_interval, do: interval(\"POLLING_ONLINE_INTERVAL\", 60)\n  def charging_interval, do: interval(\"POLLING_CHARGING_INTERVAL\", 5)\n  def minimum_interval, do: interval(\"POLLING_MINIMUM_INTERVAL\", 0)\n\n  def identify(%Vehicle{display_name: name, vehicle_config: config}) do\n    case config do\n      %VehicleConfig{\n        car_type: type,\n        trim_badging: trim_badging,\n        exterior_color: exterior_color,\n        wheel_type: wheel_type,\n        spoiler_type: spoiler_type\n      } ->\n        trim_badging =\n          with str when is_binary(str) <- trim_badging do\n            String.upcase(str)\n          end\n\n        model =\n          with str when is_binary(str) <- type do\n            case String.downcase(str) do\n              \"models\" <> _ -> \"S\"\n              \"models2\" <> _ -> \"S\"\n              \"model3\" <> _ -> \"3\"\n              \"modelx\" <> _ -> \"X\"\n              \"modely\" <> _ -> \"Y\"\n              \"lychee\" -> \"S\"\n              \"tamarind\" -> \"X\"\n              _ -> nil\n            end\n          end\n\n        marketing_name =\n          case {model, trim_badging, type} do\n            {\"S\", \"100D\", \"lychee\"} -> \"LR\"\n            {\"S\", \"P100D\", \"lychee\"} -> \"Plaid\"\n            {\"S\", \"100D\", \"models2\"} -> \"LR+\"\n            {\"3\", \"P74D\", _} -> \"LR AWD Performance\"\n            {\"3\", \"74D\", _} -> \"LR AWD\"\n            {\"3\", \"74\", _} -> \"LR\"\n            {\"3\", \"62\", _} -> \"MR\"\n            {\"3\", \"50\", _} -> \"SR+\"\n            {\"X\", \"100D\", \"tamarind\"} -> \"LR\"\n            {\"X\", \"P100D\", \"tamarind\"} -> \"Plaid\"\n            {\"Y\", \"P74D\", _} -> \"LR AWD Performance\"\n            {\"Y\", \"74D\", _} -> \"LR AWD\"\n            {\"Y\", \"74\", _} -> \"LR\"\n            {\"Y\", \"50\", _} -> \"SR\"\n            {_model, _trim, _type} -> nil\n          end\n\n        {:ok,\n         %{\n           model: model,\n           name: name,\n           trim_badging: trim_badging,\n           marketing_name: marketing_name,\n           exterior_color: exterior_color,\n           spoiler_type: spoiler_type,\n           wheel_type: wheel_type\n         }}\n\n      nil ->\n        {:error, :vehicle_config_not_available}\n    end\n  end\n\n  # API\n\n  def child_spec(arg) do\n    %{\n      id: :\"#{__MODULE__}_#{Keyword.fetch!(arg, :car).id}\",\n      start: {__MODULE__, :start_link, [arg]}\n    }\n  end\n\n  def start_link(opts) do\n    GenStateMachine.start_link(__MODULE__, opts,\n      name: Keyword.get_lazy(opts, :name, fn -> :\"#{Keyword.fetch!(opts, :car).id}\" end)\n    )\n  end\n\n  def subscribe_to_summary(car_id) do\n    Phoenix.PubSub.subscribe(TeslaMate.PubSub, summary_topic(car_id))\n  end\n\n  def subscribe_to_fetch(car_id) do\n    Phoenix.PubSub.subscribe(TeslaMate.PubSub, fetch_topic(car_id))\n  end\n\n  def healthy?(car_id) do\n    with :ok <- :fuse.ask(fuse_name(:api_error, car_id), :sync),\n         :ok <- :fuse.ask(fuse_name(:vehicle_not_found, car_id), :sync) do\n      true\n    else\n      :blown -> false\n    end\n  end\n\n  def summary(pid) when is_pid(pid), do: GenStateMachine.call(pid, :summary)\n  def summary(car_id), do: GenStateMachine.call(:\"#{car_id}\", :summary)\n\n  def busy?(car_id), do: GenStateMachine.call(:\"#{car_id}\", :busy?)\n\n  def suspend_logging(car_id) do\n    GenStateMachine.call(:\"#{car_id}\", :suspend_logging)\n  end\n\n  def resume_logging(car_id) do\n    GenStateMachine.call(:\"#{car_id}\", :resume_logging)\n  end\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    %Car{settings: %CarSettings{}} = car = Keyword.fetch!(opts, :car)\n\n    deps = %{\n      log: Keyword.get(opts, :deps_log, Log),\n      api: Keyword.get(opts, :deps_api, Api),\n      settings: Keyword.get(opts, :deps_settings, Settings),\n      locations: Keyword.get(opts, :deps_locations, Locations),\n      vehicles: Keyword.get(opts, :deps_vehicles, Vehicles),\n      pubsub: Keyword.get(opts, :deps_pubsub, Phoenix.PubSub)\n    }\n\n    last_state_change =\n      with %Log.State{start_date: date} <- call(deps.log, :get_current_state, [car]) do\n        date\n      end\n\n    data = %Data{\n      car: car,\n      last_used: DateTime.utc_now(),\n      last_state_change: last_state_change,\n      deps: deps,\n      import?: Keyword.get(opts, :import?, false)\n    }\n\n    fuses = [\n      {:vehicle_not_found, {{:standard, 8, :timer.minutes(20)}, {:reset, :timer.minutes(10)}}},\n      {:api_error, {{:standard, 3, :timer.minutes(10)}, {:reset, :timer.minutes(5)}}}\n    ]\n\n    for {key, opts} <- fuses do\n      name = fuse_name(key, data.car.id)\n      :ok = :fuse.install(name, opts)\n      :ok = :fuse.circuit_enable(name)\n    end\n\n    :ok = call(deps.settings, :subscribe_to_changes, [car])\n\n    {:ok, :start, data, {:next_event, :internal, :fetch}}\n  end\n\n  ## Calls\n\n  ### Summary\n\n  def handle_event({:call, from}, :summary, state, %Data{last_response: vehicle} = data) do\n    summary =\n      Summary.into(vehicle, %{\n        state: state,\n        since: data.last_state_change,\n        healthy?: healthy?(data.car.id),\n        elevation: data.elevation,\n        geofence: data.geofence,\n        car: data.car\n      })\n\n    {:keep_state_and_data, {:reply, from, summary}}\n  end\n\n  ### Busy?\n\n  def handle_event({:call, from}, :busy?, _state, %Data{task: task}) do\n    {:keep_state_and_data, {:reply, from, task != nil}}\n  end\n\n  ### resume_logging\n\n  def handle_event({:call, from}, :resume_logging, {:suspended, prev_state}, %Data{} = data) do\n    Logger.info(\"Resuming logging\", car_id: data.car.id)\n\n    {:next_state, prev_state,\n     %{data | last_state_change: DateTime.utc_now(), last_used: DateTime.utc_now()},\n     [{:reply, from, :ok}, broadcast_summary(), schedule_fetch(1, data)]}\n  end\n\n  def handle_event({:call, from}, :resume_logging, {state, _interval}, data)\n      when state in [:asleep, :offline] do\n    Logger.info(\"Expecting imminent wakeup. Increasing polling frequency ...\",\n      car_id: data.car.id\n    )\n\n    {:next_state, {state, 1}, data, [{:reply, from, :ok}, {:next_event, :internal, :fetch}]}\n  end\n\n  def handle_event({:call, from}, :resume_logging, _state, %Data{} = data) do\n    {:keep_state, %{data | last_used: DateTime.utc_now()}, {:reply, from, :ok}}\n  end\n\n  ### suspend_logging\n\n  def handle_event({:call, from}, :suspend_logging, {:offline, _}, _data) do\n    {:keep_state_and_data, {:reply, from, :ok}}\n  end\n\n  def handle_event({:call, from}, :suspend_logging, {:asleep, _}, _data) do\n    {:keep_state_and_data, {:reply, from, :ok}}\n  end\n\n  def handle_event({:call, from}, :suspend_logging, {:suspended, _}, _data) do\n    {:keep_state_and_data, {:reply, from, :ok}}\n  end\n\n  def handle_event({:call, from}, :suspend_logging, {:driving, _, _}, _data) do\n    {:keep_state_and_data, {:reply, from, {:error, :vehicle_not_parked}}}\n  end\n\n  def handle_event({:call, from}, :suspend_logging, {:updating, _}, _data) do\n    {:keep_state_and_data, {:reply, from, {:error, :update_in_progress}}}\n  end\n\n  def handle_event({:call, from}, :suspend_logging, {:charging, _}, _data) do\n    {:keep_state_and_data, {:reply, from, {:error, :charging_in_progress}}}\n  end\n\n  def handle_event({:call, from}, :suspend_logging, _online, %Data{car: car} = data) do\n    with {:ok, vehicle} <- fetch_strict(car.eid, data.deps),\n         :ok <- can_fall_asleep(vehicle, data) do\n      Logger.info(\"Suspending logging [Triggered manually]\", car_id: car.id)\n\n      {:ok, _pos} = call(data.deps.log, :insert_position, [car, create_position(vehicle, data)])\n\n      suspend_min =\n        case {data.car.settings, streaming?(data)} do\n          {%CarSettings{use_streaming_api: true}, true} -> 30\n          {%CarSettings{suspend_min: s}, _} -> s\n        end\n\n      {:next_state, {:suspended, :online},\n       %Data{data | last_state_change: DateTime.utc_now(), last_response: vehicle, task: nil},\n       [\n         {:reply, from, :ok},\n         broadcast_fetch(false),\n         broadcast_summary(),\n         schedule_fetch(suspend_min, :minutes, data)\n       ]}\n    else\n      {:error, reason} ->\n        {:keep_state_and_data, {:reply, from, {:error, reason}}}\n    end\n  end\n\n  ## Info\n\n  def handle_event(:info, {ref, fetch_result}, state, %Data{task: %Task{ref: ref}} = data)\n      when is_reference(ref) do\n    data = %Data{data | task: nil}\n\n    case fetch_result do\n      {:ok, %Vehicle{state: \"online\"} = vehicle} ->\n        case {vehicle, data} do\n          {%Vehicle{drive_state: %Drive{timestamp: now}},\n           %Data{last_response: %Vehicle{drive_state: %Drive{timestamp: last}}}}\n          when is_number(now) and is_number(last) and now < last ->\n            drive_states = [now: vehicle.drive_state, last: data.last_response.drive_state]\n\n            Logger.warning(\n              \"Discarded stale fetch result: #{inspect(drive_states, pretty: true)}\",\n              car_id: data.car.id\n            )\n\n            {:keep_state, data, [broadcast_fetch(false), schedule_fetch(0, data)]}\n\n          # Handle fetch of vehicle_data\n          {%Vehicle{\n             drive_state: %Drive{},\n             charge_state: %Charge{},\n             climate_state: %Climate{},\n             vehicle_state: %VehicleState{},\n             vehicle_config: %VehicleConfig{}\n           }, %Data{}} ->\n            {:keep_state, %Data{data | last_response: vehicle},\n             [broadcast_fetch(false), {:next_event, :internal, {:update, {:online, vehicle}}}]}\n\n          # Handle fetch of vehicle/id (non-vehicle_data)\n          {%Vehicle{}, %Data{}} ->\n            Logger.warning(\"Discarded incomplete fetch result\", car_id: data.car.id)\n            {:keep_state, data, [broadcast_fetch(false), schedule_fetch(data)]}\n        end\n\n      {:ok, %Vehicle{state: state} = vehicle} when state in [\"offline\", \"asleep\"] ->\n        data =\n          with %Data{last_response: nil} <- data do\n            {last_response, geofence} = restore_last_known_values(vehicle, data)\n            %Data{data | last_response: last_response, geofence: geofence}\n          end\n\n        {:keep_state, data,\n         [\n           broadcast_fetch(false),\n           {:next_event, :internal, {:update, {String.to_existing_atom(state), vehicle}}}\n         ]}\n\n      {:ok, %Vehicle{state: state} = vehicle} ->\n        Logger.warning(\n          \"Error / unknown vehicle state #{inspect(state)}\\n\\n#{inspect(vehicle, pretty: true)}\",\n          car_id: data.car.id\n        )\n\n        {:keep_state, data, [broadcast_fetch(false), schedule_fetch(data)]}\n\n      {:error, :closed} ->\n        Logger.warning(\"Error / connection closed\", car_id: data.car.id)\n        {:keep_state, data, [broadcast_fetch(false), schedule_fetch(5, data)]}\n\n      {:error, :vehicle_in_service} ->\n        Logger.info(\"Vehicle is currently in service\", car_id: data.car.id)\n\n        case state do\n          {:driving, _, %Log.Drive{} = drive} ->\n            {:ok, %Log.Drive{distance: km, duration_min: min}} =\n              call(data.deps.log, :close_drive, [drive])\n\n            :ok = disconnect_stream(data)\n\n            Logger.info(\"Driving / Aborted / #{km && round(km)} km – #{min} min\",\n              car_id: data.car.id\n            )\n\n            {:next_state, :start, %Data{data | last_used: DateTime.utc_now()},\n             [\n               broadcast_fetch(false),\n               broadcast_summary(),\n               schedule_fetch(online_interval(), data)\n             ]}\n\n          _ ->\n            {:keep_state, data, [broadcast_fetch(false), schedule_fetch(online_interval(), data)]}\n        end\n\n      {:error, :not_signed_in} ->\n        Logger.error(\"Error / not_signed_in\", car_id: data.car.id)\n\n        :ok = fuse_name(:api_error, data.car.id) |> :fuse.circuit_disable()\n\n        # Stop polling\n        {:next_state, :start, data, [broadcast_fetch(false), broadcast_summary()]}\n\n      {:error, :vehicle_not_found} ->\n        Logger.error(\"Error / :vehicle_not_found\", car_id: data.car.id)\n\n        fuse_name = fuse_name(:vehicle_not_found, data.car.id)\n        :ok = :fuse.melt(fuse_name(:api_error, data.car.id))\n        :ok = :fuse.melt(fuse_name)\n\n        with :blown <- :fuse.ask(fuse_name, :sync) do\n          true = call(data.deps.vehicles, :kill)\n        end\n\n        {:keep_state, data,\n         [broadcast_fetch(false), broadcast_summary(), schedule_fetch(30, data)]}\n\n      {:error, :too_many_request, retry_after} ->\n        Logger.error(\"Too many request / Retry after #{retry_after} seconds\", car_id: data.car.id)\n\n        {:keep_state, data,\n         [broadcast_fetch(false), broadcast_summary(), schedule_fetch(retry_after, data)]}\n\n      {:error, reason} ->\n        Logger.error(\"Error / #{inspect(reason)}\", car_id: data.car.id)\n\n        unless reason in [:timeout, :unauthorized] do\n          :ok = fuse_name(:api_error, data.car.id) |> :fuse.melt()\n        end\n\n        interval =\n          case state do\n            {:driving, _, _} -> 10\n            {:charging, _} -> 15\n            :online -> 20\n            _ -> 30\n          end\n\n        {:keep_state, data,\n         [broadcast_fetch(false), broadcast_summary(), schedule_fetch(interval, data)]}\n    end\n  end\n\n  ### Streaming API\n\n  #### Online\n\n  def handle_event(:info, {:stream, %Stream.Data{} = stream_data}, :online, data) do\n    stale_stream_data? = stale?(stream_data, data.last_response)\n\n    case stream_data do\n      %Stream.Data{} when stale_stream_data? ->\n        Logger.warning(\"Online / Received stale stream data: #{inspect(stream_data)}\",\n          car_id: data.car.id\n        )\n\n        :keep_state_and_data\n\n      %Stream.Data{shift_state: shift_state} when shift_state in ~w(D N R) ->\n        Logger.info(\"Online / Start of drive initiated by: #{inspect(stream_data)}\")\n\n        %{elevation: elevation} = position = create_position(stream_data, data)\n        {drive, data} = start_drive(position, data)\n\n        vehicle = merge(data.last_response, stream_data, time: true)\n\n        {:next_state, {:driving, :available, drive},\n         %Data{data | last_response: vehicle, elevation: elevation},\n         [broadcast_summary(), schedule_fetch(0, data)]}\n\n      %Stream.Data{shift_state: nil, power: power} when is_number(power) and power < 0 ->\n        vehicle = merge(data.last_response, stream_data, time: true)\n\n        # Only detect as charging if we are not doing something else while plugged in.\n        # In case we are doing both charging and other thing a normal fetch will discover it later\n        case {vehicle} do\n          {%Vehicle{climate_state: %Climate{is_preconditioning: true}}} ->\n            :keep_state_and_data\n\n          {%Vehicle{climate_state: %Climate{climate_keeper_mode: \"dog\"}}} ->\n            :keep_state_and_data\n\n          {%Vehicle{}} ->\n            Logger.info(\"Online / Charging detected: #{power} kW\", car_id: data.car.id)\n            {:keep_state_and_data, schedule_fetch(0, data)}\n        end\n\n      %Stream.Data{} ->\n        Logger.debug(inspect(stream_data), car_id: data.car.id)\n        :keep_state_and_data\n    end\n  end\n\n  #### Driving\n\n  def handle_event(\n        :info,\n        {:stream, %Stream.Data{} = stream_data},\n        {:driving, status, drv},\n        %Data{} = data\n      ) do\n    case {status, stream_data} do\n      {:available, %Stream.Data{shift_state: shift_state}} when shift_state in ~w(D N R) ->\n        {:ok, %{elevation: elevation}} =\n          call(data.deps.log, :insert_position, [drv, create_position(stream_data, data)])\n\n        vehicle = merge(data.last_response, stream_data)\n        now = DateTime.utc_now()\n\n        {:keep_state, %{data | last_used: now, last_response: vehicle, elevation: elevation},\n         broadcast_summary()}\n\n      {_status, %Stream.Data{}} ->\n        {:keep_state_and_data, schedule_fetch(0, data)}\n    end\n  end\n\n  #### Suspended\n\n  def handle_event(\n        :info,\n        {:stream, %Stream.Data{} = stream_data},\n        {:suspended, prev_state},\n        %Data{} = data\n      ) do\n    stale_stream_data? = stale?(stream_data, data.last_response)\n\n    case stream_data do\n      %Stream.Data{} when stale_stream_data? ->\n        Logger.warning(\"Suspended / Received stale stream data: #{inspect(stream_data)}\",\n          car_id: data.car.id\n        )\n\n        :keep_state_and_data\n\n      %Stream.Data{shift_state: shift_state} when shift_state in ~w(D N R) ->\n        Logger.info(\"Suspended / Start of drive initiated by: #{inspect(stream_data)}\")\n\n        %{elevation: elevation} = position = create_position(stream_data, data)\n        {drive, data} = start_drive(position, data)\n\n        vehicle = merge(data.last_response, stream_data, time: true)\n\n        {:next_state, {:driving, :available, drive},\n         %Data{data | last_response: vehicle, elevation: elevation},\n         [broadcast_summary(), schedule_fetch(0, data)]}\n\n      %Stream.Data{shift_state: s, power: power}\n      when s in [nil, \"P\"] and is_number(power) and power < 0 ->\n        Logger.info(\"Suspended / Charging detected: #{power} kW\", car_id: data.car.id)\n\n        {:next_state, prev_state, %{data | last_used: DateTime.utc_now()},\n         schedule_fetch(0, data)}\n\n      %Stream.Data{shift_state: s, power: power}\n      when s in [nil, \"P\"] and is_number(power) and power > 0 ->\n        Logger.info(\"Suspended / Usage detected: #{power} kW\", car_id: data.car.id)\n\n        # update power to be used in can_fall_asleep / try_to_suspend\n        vehicle = merge(data.last_response, stream_data, time: true)\n\n        {:next_state, prev_state,\n         %Data{data | last_response: vehicle, last_used: DateTime.utc_now()},\n         schedule_fetch(0, data)}\n\n      %Stream.Data{} ->\n        Logger.debug(inspect(stream_data), car_id: data.car.id)\n        :keep_state_and_data\n    end\n  end\n\n  def handle_event(:info, {:stream, :inactive}, {:suspended, _prev_state}, data) do\n    Logger.info(\"Stream :inactive in suspended, fetching vehicle state ...\", car_id: data.car.id)\n    {:keep_state_and_data, {:next_event, :internal, :fetch_state}}\n  end\n\n  def handle_event(:info, {_ref, {state, %Vehicle{}} = event}, {:suspended, _}, data)\n      when state in [:asleep, :offline] do\n    {:next_state, :start, data, {:next_event, :internal, {:update, event}}}\n  end\n\n  def handle_event(:info, {_ref, {:online, %Vehicle{}}}, {:suspended, _}, _data) do\n    :keep_state_and_data\n  end\n\n  #### Rest\n\n  def handle_event(:info, {:stream, msg}, _state, %Data{} = data)\n      when msg in [:too_many_disconnects, :tokens_expired] do\n    Logger.info(\"Creating new connection … \", car_id: data.car.id)\n\n    ref = Process.monitor(data.stream_pid)\n    :ok = disconnect_stream(data)\n\n    receive do\n      {:DOWN, ^ref, :process, _object, _reason} -> :ok\n    after\n      1000 -> :continue\n    end\n\n    {:ok, pid} = connect_stream(data)\n\n    {:keep_state, %{data | stream_pid: pid}}\n  end\n\n  def handle_event(:info, {:stream, msg}, _state, data)\n      when msg in [:vehicle_offline] do\n    Logger.warning(\"Stream reports vehicle as offline, fetching vehicle state ...\",\n      car_id: data.car.id\n    )\n\n    # fetch data right away and let the result decide the real state\n    {:keep_state_and_data, schedule_fetch(0, data)}\n  end\n\n  def handle_event(:info, {:stream, stream_data}, _state, data) do\n    Logger.info(\"Received stream data: #{inspect(stream_data)}\", car_id: data.car.id)\n    :keep_state_and_data\n  end\n\n  ###\n\n  def handle_event(:info, {ref, result}, _state, data) when is_reference(ref) do\n    unless match?({:ok, %Vehicle{}}, result) do\n      Logger.info(\"Unhandled fetch result: #{inspect(result, pretty: true)}\", car_id: data.car.id)\n    end\n\n    :keep_state_and_data\n  end\n\n  def handle_event(:info, {:DOWN, r, :process, _, :normal}, _, %Data{task: %Task{ref: r}} = data) do\n    Logger.warning(\"Cleared data.task!\", car_id: data.car.id)\n    {:keep_state, %Data{data | task: nil}}\n  end\n\n  def handle_event(:info, {:DOWN, _ref, :process, _pid, :normal}, _state, _data) do\n    :keep_state_and_data\n  end\n\n  def handle_event(:info, %CarSettings{} = settings, state, %Data{} = data) do\n    Logger.debug(\"Received settings: #{inspect(settings, pretty: true)}\", car_id: data.car.id)\n\n    state =\n      case state do\n        s when is_tuple(s) -> elem(s, 0)\n        s when is_atom(s) -> s\n      end\n\n    stream_pid =\n      case {settings, state, data} do\n        {%CarSettings{use_streaming_api: false}, _state, %Data{stream_pid: pid}}\n        when is_pid(pid) ->\n          :ok = disconnect_stream(data)\n          nil\n\n        {%CarSettings{use_streaming_api: true}, _state, %Data{stream_pid: pid}}\n        when is_pid(pid) ->\n          pid\n\n        {%CarSettings{use_streaming_api: true}, state, %Data{stream_pid: nil}}\n        when state in [:online, :driving, :suspended] ->\n          {:ok, pid} = connect_stream(data)\n          pid\n\n        {%CarSettings{}, _state, %Data{}} ->\n          nil\n      end\n\n    {:keep_state, %{data | car: Map.put(data.car, :settings, settings), stream_pid: stream_pid}}\n  end\n\n  def handle_event(:info, message, _state, data) do\n    Logger.info(\"Unhandled message: #{inspect(message, pretty: true)}\", car_id: data.car.id)\n    :keep_state_and_data\n  end\n\n  ## Internal Events\n\n  ### Fetch\n\n  @impl true\n  def handle_event(event, :fetch, state, %Data{task: nil} = data)\n      when event in [:state_timeout, :internal] do\n    task =\n      Task.async(fn ->\n        fetch(data, expected_state: state)\n      end)\n\n    {:keep_state, %Data{data | task: task}, broadcast_fetch(true)}\n  end\n\n  def handle_event(event, :fetch, _state, %Data{task: %Task{}} = data)\n      when event in [:state_timeout, :internal] do\n    Logger.info(\"Fetch already in progress ...\", car_id: data.car.id)\n    :keep_state_and_data\n  end\n\n  def handle_event(:internal, :fetch_state, _state, %Data{car: car} = data) do\n    Task.async(fn ->\n      with {:ok, %Vehicle{state: state} = vehicle} when is_binary(state) <-\n             call(data.deps.api, :get_vehicle, [car.eid]) do\n        {String.to_existing_atom(state), vehicle}\n      end\n    end)\n\n    :keep_state_and_data\n  end\n\n  ### Broadcast Summary\n\n  def handle_event(:internal, :broadcast_summary, state, %Data{last_response: vehicle} = data) do\n    payload =\n      Summary.into(vehicle, %{\n        state: state,\n        since: data.last_state_change,\n        healthy?: healthy?(data.car.id),\n        elevation: data.elevation,\n        geofence: data.geofence,\n        car: data.car\n      })\n\n    :ok =\n      call(data.deps.pubsub, :broadcast, [TeslaMate.PubSub, summary_topic(data.car.id), payload])\n\n    :keep_state_and_data\n  end\n\n  ### Broadcast Fetch\n\n  def handle_event(:internal, {:broadcast_fetch, status}, _state, data) do\n    :ok =\n      call(data.deps.pubsub, :broadcast, [\n        TeslaMate.PubSub,\n        fetch_topic(data.car.id),\n        {:status, status}\n      ])\n\n    :keep_state_and_data\n  end\n\n  ### Store Position\n\n  def handle_event({:timeout, :store_position}, :store_position, state, data)\n      when state == :online or (is_tuple(state) and elem(state, 0) == :charging) do\n    Logger.debug(\"Storing position ...\", car_id: data.car.id)\n\n    {:ok, _pos} =\n      call(data.deps.log, :insert_position, [data.car, create_position(data.last_response, data)])\n\n    {:keep_state_and_data, schedule_position_storing()}\n  end\n\n  def handle_event({:timeout, :store_position}, :store_position, _state, _data) do\n    :keep_state_and_data\n  end\n\n  ### Update\n\n  #### :start\n\n  def handle_event(:internal, {:update, {:asleep, vehicle}}, :start, %Data{} = data) do\n    Logger.info(\"Start / :asleep\", car_id: data.car.id)\n\n    {:ok, %Log.State{start_date: last_state_change}} =\n      call(data.deps.log, :start_state, [data.car, :asleep, date_opts(vehicle)])\n\n    :ok = disconnect_stream(data)\n\n    {:next_state, {:asleep, asleep_interval()},\n     %{data | last_state_change: last_state_change, stream_pid: nil},\n     [broadcast_summary(), schedule_fetch(data)]}\n  end\n\n  def handle_event(:internal, {:update, {:offline, vehicle}}, :start, %Data{} = data) do\n    Logger.info(\"Start / :offline\", car_id: data.car.id)\n\n    {:ok, %Log.State{start_date: last_state_change}} =\n      call(data.deps.log, :start_state, [data.car, :offline, date_opts(vehicle)])\n\n    :ok = disconnect_stream(data)\n\n    {:next_state, {:offline, asleep_interval()},\n     %{data | last_state_change: last_state_change, stream_pid: nil},\n     [broadcast_summary(), schedule_fetch(data)]}\n  end\n\n  def handle_event(:internal, {:update, {:online, vehicle}} = evt, :start, %Data{} = data) do\n    Logger.info(\"Start / :online\", car_id: data.car.id)\n\n    {:ok, attrs} = identify(vehicle)\n\n    opts =\n      case data do\n        %Data{import?: true} -> [preload: []]\n        %Data{} -> [preload: [:settings]]\n      end\n\n    {:ok, {car, last_state_change, geofence}} =\n      Repo.transaction(fn ->\n        {:ok, car} = call(data.deps.log, :update_car, [data.car, attrs, opts])\n\n        synchronize_updates(vehicle, data)\n\n        {:ok, %Log.State{start_date: last_state_change}} =\n          call(data.deps.log, :start_state, [car, :online, date_opts(vehicle)])\n\n        {:ok, pos} = call(data.deps.log, :insert_position, [car, create_position(vehicle, data)])\n        geofence = call(data.deps.locations, :find_geofence, [pos])\n\n        {car, last_state_change, geofence}\n      end)\n\n    stream_pid =\n      case data do\n        %Data{stream_pid: nil, car: %Car{settings: %CarSettings{use_streaming_api: true}}} ->\n          {:ok, pid} = connect_stream(data)\n          pid\n\n        %Data{stream_pid: pid} when is_pid(pid) ->\n          pid\n\n        %Data{} ->\n          nil\n      end\n\n    {:next_state, :online,\n     %{\n       data\n       | car: car,\n         last_state_change: last_state_change,\n         geofence: geofence,\n         stream_pid: stream_pid\n     }, [broadcast_summary(), {:next_event, :internal, evt}, schedule_position_storing()]}\n  end\n\n  #### :online\n\n  def handle_event(:internal, {:update, {event, _vehicle}}, :online, data)\n      when event in [:offline, :asleep] do\n    {:next_state, :start, data, schedule_fetch(data)}\n  end\n\n  def handle_event(:internal, {:update, {:online, vehicle}}, state, %Data{} = data)\n      when state == :online or (is_tuple(state) and elem(state, 0) == :suspended) do\n    alias TeslaApi.Vehicle, as: V\n\n    if match?({:suspended, _}, state) do\n      duration_str =\n        DateTime.utc_now()\n        |> diff_seconds(data.last_used)\n        |> Convert.sec_to_str()\n        |> Enum.reject(&String.ends_with?(&1, \"s\"))\n        |> Enum.join(\" \")\n\n      Logger.info(\"Vehicle is still online. Falling asleep for: #{duration_str}\",\n        car_id: data.car.id\n      )\n    end\n\n    case vehicle do\n      %V{vehicle_state: %VehicleState{timestamp: ts, software_update: %{status: \"installing\"}}} ->\n        Logger.info(\"Update / Start\", car_id: data.car.id)\n\n        {:ok, update} =\n          call(data.deps.log, :start_update, [data.car, [date: parse_timestamp(ts)]])\n\n        :ok = disconnect_stream(data)\n\n        {:next_state, {:updating, update},\n         %{\n           data\n           | last_state_change: DateTime.utc_now(),\n             last_used: DateTime.utc_now(),\n             stream_pid: nil\n         }, [broadcast_summary(), schedule_fetch(15, data)]}\n\n      %V{drive_state: %Drive{shift_state: shift_state}} when shift_state in ~w(D N R) ->\n        Logger.info(\"Start of drive initiated by: #{inspect(vehicle.drive_state)}\")\n\n        {drive, data} = start_drive(create_position(vehicle, data), data)\n\n        {:next_state, {:driving, :available, drive}, data,\n         [\n           broadcast_summary(),\n           schedule_fetch(driving_interval(), data)\n         ]}\n\n      %V{charge_state: %Charge{charging_state: charging_state, battery_level: lvl}}\n      when charging_state in [\"Starting\", \"Charging\"] ->\n        position = create_position(vehicle, data)\n\n        {:ok, cproc} =\n          Repo.transaction(fn ->\n            {:ok, cproc} =\n              call(data.deps.log, :start_charging_process, [\n                data.car,\n                position,\n                [lookup_address: !data.import?]\n              ])\n\n            :ok = insert_charge(cproc, vehicle, data)\n\n            cproc\n          end)\n\n        [\"Charging\", \"SOC: #{lvl}%\", with(%GeoFence{name: name} <- cproc.geofence, do: name)]\n        |> Enum.reject(&is_nil/1)\n        |> Enum.join(\" / \")\n        |> Logger.info(car_id: data.car.id)\n\n        :ok = disconnect_stream(data)\n\n        {:next_state, {:charging, cproc},\n         %Data{\n           data\n           | last_state_change: DateTime.utc_now(),\n             last_used: DateTime.utc_now(),\n             stream_pid: nil\n         }, [broadcast_summary(), schedule_fetch(5, data), schedule_position_storing()]}\n\n      _ ->\n        try_to_suspend(vehicle, state, data)\n    end\n  end\n\n  #### :suspended\n\n  def handle_event(:internal, {:update, {state, _}} = event, {:suspended, _}, data)\n      when state in [:asleep, :offline] do\n    {:next_state, :start, data, {:next_event, :internal, event}}\n  end\n\n  #### :charging\n\n  def handle_event(:internal, {:update, {:offline, _vehicle}}, {:charging, _}, data) do\n    Logger.warning(\"Vehicle went offline while charging\", car_id: data.car.id)\n\n    {:keep_state_and_data, schedule_fetch(data)}\n  end\n\n  def handle_event(:internal, {:update, {:asleep, _vehicle}} = event, {:charging, cproc}, data) do\n    Logger.warning(\"Vehicle went asleep while charging (?)\", car_id: data.car.id)\n\n    {:ok, _} = call(data.deps.log, :complete_charging_process, [cproc])\n    Logger.info(\"Charging / Aborted\", car_id: data.car.id)\n\n    {:next_state, :start, data, {:next_event, :internal, event}}\n  end\n\n  def handle_event(:internal, {:update, {:online, vehicle}}, {:charging, cproc}, %Data{} = data) do\n    data = %{data | last_used: DateTime.utc_now()}\n\n    case vehicle do\n      %Vehicle{charge_state: %Charge{charging_state: charging_state}}\n      when charging_state in [\"Starting\", \"Charging\"] ->\n        :ok = insert_charge(cproc, vehicle, data)\n\n        interval =\n          vehicle.charge_state\n          |> Map.get(:charger_power)\n          |> determince_interval()\n\n        {:next_state, {:charging, cproc}, data,\n         [broadcast_summary(), schedule_fetch(interval, data)]}\n\n      %Vehicle{charge_state: %Charge{charging_state: state}} ->\n        Repo.transaction(fn ->\n          {:ok, _} =\n            call(data.deps.log, :insert_position, [data.car, create_position(vehicle, data)])\n\n          :ok = insert_charge(cproc, vehicle, data)\n\n          {:ok, %Log.ChargingProcess{duration_min: duration, charge_energy_added: added}} =\n            call(data.deps.log, :complete_charging_process, [cproc])\n\n          Logger.info(\"Charging / #{state} / #{added} kWh – #{duration} min\", car_id: data.car.id)\n        end)\n\n        {:next_state, :start, data, {:next_event, :internal, {:update, {:online, vehicle}}}}\n    end\n  end\n\n  #### :driving\n\n  #### msg: :offline\n\n  def handle_event(\n        :internal,\n        {:update, {:offline, _}},\n        {:driving, :available, drive},\n        %Data{} = data\n      ) do\n    Logger.warning(\"Vehicle went offline while driving\", car_id: data.car.id)\n\n    {:next_state, {:driving, {:unavailable, 0}, drive}, %{data | last_used: DateTime.utc_now()},\n     schedule_fetch(5, data)}\n  end\n\n  def handle_event(\n        :internal,\n        {:update, {:offline, _}},\n        {:driving, {:unavailable, n}, drv},\n        %Data{} = data\n      )\n      when n < 15 do\n    {:next_state, {:driving, {:unavailable, n + 1}, drv}, %{data | last_used: DateTime.utc_now()},\n     schedule_fetch(5, data)}\n  end\n\n  def handle_event(\n        :internal,\n        {:update, {:offline, _}},\n        {:driving, {:unavailable, _n}, drv},\n        %Data{} = data\n      ) do\n    {:next_state, {:driving, {:offline, data.last_response}, drv},\n     %{data | last_used: DateTime.utc_now()}, [broadcast_summary(), schedule_fetch(30, data)]}\n  end\n\n  def handle_event(\n        :internal,\n        {:update, {:offline, _}},\n        {:driving, {:offline, _last}, nil},\n        %Data{} = data\n      ) do\n    {:next_state, :start, %Data{data | last_used: DateTime.utc_now()}, schedule_fetch(data)}\n  end\n\n  def handle_event(\n        :internal,\n        {:update, {:offline, _}},\n        {:driving, {:offline, last}, drive},\n        %Data{} = data\n      ) do\n    offline_since = parse_timestamp(last.drive_state.timestamp)\n\n    case diff_seconds(DateTime.utc_now(), offline_since) / 60 do\n      min when min >= @drive_timeout_min ->\n        timeout_drive(drive, data)\n\n        {:next_state, {:driving, {:offline, last}, nil}, %{data | last_used: DateTime.utc_now()},\n         [broadcast_summary(), schedule_fetch(30, data)]}\n\n      _min ->\n        {:keep_state, %{data | last_used: DateTime.utc_now()}, schedule_fetch(30, data)}\n    end\n  end\n\n  def handle_event(\n        :internal,\n        {:update, {:online, now}},\n        {:driving, {:offline, last}, drv},\n        %Data{} = data\n      ) do\n    offline_start = parse_timestamp(last.drive_state.timestamp)\n    offline_end = parse_timestamp(now.drive_state.timestamp)\n\n    offline_min = DateTime.diff(offline_end, offline_start, :second) / 60\n\n    has_gained_range? =\n      nil not in [now.charge_state.ideal_battery_range, last.charge_state.ideal_battery_range] and\n        now.charge_state.ideal_battery_range - last.charge_state.ideal_battery_range > 5\n\n    Logger.info(\"Vehicle came back online after #{round(offline_min)} min\", car_id: data.car.id)\n\n    cond do\n      has_gained_range? and offline_min >= 5 ->\n        unless is_nil(drv), do: timeout_drive(drv, data)\n\n        {:ok, %Log.ChargingProcess{charge_energy_added: added}} =\n          Repo.transaction(fn ->\n            {:ok, cproc} =\n              call(data.deps.log, :start_charging_process, [\n                data.car,\n                create_position(last, data),\n                [lookup_address: !data.import?]\n              ])\n\n            :ok = insert_charge(cproc, put_charge_defaults(last), data)\n            :ok = insert_charge(cproc, put_charge_defaults(now), data)\n            {:ok, cproc} = call(data.deps.log, :complete_charging_process, [cproc])\n\n            cproc\n          end)\n\n        Logger.info(\"Vehicle was charged while being offline: #{added} kWh\", car_id: data.car.id)\n\n        {:next_state, :start, %{data | last_used: DateTime.utc_now()},\n         {:next_event, :internal, {:update, {:online, now}}}}\n\n      not has_gained_range? and offline_min >= @drive_timeout_min ->\n        unless is_nil(drv), do: timeout_drive(drv, data)\n\n        {:next_state, :start, %{data | last_used: DateTime.utc_now()},\n         {:next_event, :internal, {:update, {:online, now}}}}\n\n      not is_nil(drv) ->\n        {:next_state, {:driving, :available, drv}, %{data | last_used: DateTime.utc_now()},\n         {:next_event, :internal, {:update, {:online, now}}}}\n    end\n  end\n\n  #### msg: asleep\n\n  def handle_event(:internal, {:update, {:asleep, _vehicle}}, {:driving, _, drv}, data) do\n    unless is_nil(drv), do: timeout_drive(drv, data)\n    {:next_state, :start, data, schedule_fetch(data)}\n  end\n\n  #### msg: :online\n\n  def handle_event(\n        :internal,\n        {:update, {:online, _} = e},\n        {:driving, {:unavailable, _}, drv},\n        %Data{} = data\n      ) do\n    Logger.info(\"Vehicle is back online\", car_id: data.car.id)\n\n    {:next_state, {:driving, :available, drv}, %{data | last_used: DateTime.utc_now()},\n     {:next_event, :internal, {:update, e}}}\n  end\n\n  def handle_event(\n        :internal,\n        {:update, {:online, vehicle}},\n        {:driving, :available, drv},\n        %Data{} = data\n      ) do\n    interval = if streaming?(data), do: default_interval(), else: driving_interval()\n\n    case vehicle do\n      %Vehicle{drive_state: %Drive{shift_state: shift_state}} when shift_state in ~w(D N R) ->\n        geofence =\n          Repo.checkout(fn ->\n            {:ok, pos} =\n              call(data.deps.log, :insert_position, [drv, create_position(vehicle, data)])\n\n            call(data.deps.locations, :find_geofence, [pos])\n          end)\n\n        {:keep_state, %{data | last_used: DateTime.utc_now(), geofence: geofence},\n         [broadcast_summary(), schedule_fetch(interval, data)]}\n\n      %Vehicle{drive_state: %Drive{shift_state: shift_state}} when shift_state in [nil, \"P\"] ->\n        {:ok, {%Log.Drive{distance: km, duration_min: min}, geofence}} =\n          Repo.transaction(fn ->\n            {:ok, pos} =\n              call(data.deps.log, :insert_position, [drv, create_position(vehicle, data)])\n\n            geofence = call(data.deps.locations, :find_geofence, [pos])\n\n            {:ok, drive} =\n              call(data.deps.log, :close_drive, [drv, [lookup_address: !data.import?]])\n\n            {drive, geofence}\n          end)\n\n        Logger.info(\"End of drive initiated by: #{inspect(vehicle.drive_state)}\")\n        Logger.info(\"Driving / Ended / #{km && round(km)} km – #{min} min\", car_id: data.car.id)\n\n        {:next_state, :start, %{data | last_used: DateTime.utc_now(), geofence: geofence},\n         {:next_event, :internal, {:update, {:online, vehicle}}}}\n\n      %Vehicle{drive_state: nil} ->\n        Logger.warning(\"drive_state is nil!\", car_id: data.car.id)\n        {:keep_state_and_data, schedule_fetch(interval, data)}\n    end\n  end\n\n  #### :updating\n\n  def handle_event(:internal, {:update, {:offline, _}}, {:updating, _update_id}, %Data{} = data) do\n    Logger.warning(\"Vehicle went offline while updating\", car_id: data.car.id)\n    {:keep_state, %{data | last_used: DateTime.utc_now()}, schedule_fetch(data)}\n  end\n\n  def handle_event(:internal, {:update, {:online, vehicle}}, {:updating, update}, data) do\n    alias VehicleState.SoftwareUpdate, as: SW\n\n    case vehicle.vehicle_state do\n      nil ->\n        Logger.warning(\"Update / empty vehicle_state\", car_id: data.car.id)\n        {:keep_state, %{data | last_used: DateTime.utc_now()}, schedule_fetch(5, data)}\n\n      %VehicleState{software_update: nil} ->\n        Logger.warning(\"Update / empty payload:\\n\\n#{inspect(vehicle, pretty: true)}\",\n          car_id: data.car.id\n        )\n\n        {:keep_state, %{data | last_used: DateTime.utc_now()}, schedule_fetch(5, data)}\n\n      %VehicleState{software_update: %SW{status: \"installing\"}} ->\n        {:keep_state, %{data | last_used: DateTime.utc_now()},\n         schedule_fetch(default_interval(), data)}\n\n      %VehicleState{software_update: %SW{status: \"available\"} = update} ->\n        {:ok, %Log.Update{}} = call(data.deps.log, :cancel_update, [update])\n\n        Logger.warning(\"Update canceled:\\n\\n#{inspect(update, pretty: true)}\",\n          car_id: data.car.id\n        )\n\n        {:next_state, :start, %{data | last_used: DateTime.utc_now()},\n         {:next_event, :internal, {:update, {:online, vehicle}}}}\n\n      %VehicleState{timestamp: ts, car_version: vsn, software_update: %SW{} = software_update} ->\n        if software_update.status != \"\" and\n             not (software_update.status == \"downloading\" and software_update.install_perc == 100) do\n          Logger.error(\n            \"\"\"\n            Unexpected update status: #{software_update.status}\n\n            #{inspect(software_update, pretty: true)}\n            \"\"\",\n            car_id: data.car.id\n          )\n        end\n\n        {:ok, %Log.Update{}} =\n          call(data.deps.log, :finish_update, [update, vsn, [date: parse_timestamp(ts)]])\n\n        Logger.info(\"Update / Installed #{vsn}\", car_id: data.car.id)\n\n        {:next_state, :start, %{data | last_used: DateTime.utc_now()},\n         {:next_event, :internal, {:update, {:online, vehicle}}}}\n    end\n  end\n\n  #### :asleep / :offline\n\n  def handle_event(:internal, {:update, {state, _}}, {state, @asleep_interval}, data)\n      when state in [:asleep, :offline] do\n    {:keep_state_and_data, [schedule_fetch(asleep_interval(), data), broadcast_summary()]}\n  end\n\n  def handle_event(:internal, {:update, {state, _}}, {state, interval}, data)\n      when state in [:asleep, :offline] do\n    {:next_state, {state, min(interval * 2, asleep_interval())}, data,\n     schedule_fetch(interval, data)}\n  end\n\n  def handle_event(:internal, {:update, {:offline, _}}, {:asleep, _interval}, data) do\n    {:next_state, :start, data, schedule_fetch(data)}\n  end\n\n  def handle_event(:internal, {:update, {:asleep, _}}, {:offline, _interval}, data) do\n    {:next_state, :start, data, schedule_fetch(data)}\n  end\n\n  def handle_event(:internal, {:update, {:online, _}} = event, {state, _interval}, %Data{} = data)\n      when state in [:asleep, :offline] do\n    {:next_state, :start, %{data | last_used: DateTime.utc_now()},\n     {:next_event, :internal, event}}\n  end\n\n  # Private\n\n  defp restore_last_known_values(%Vehicle{} = vehicle, data) do\n    with %{drive_state: nil, charge_state: nil, climate_state: nil} <- vehicle,\n         %Log.Position{} = position <- call(data.deps.log, :get_latest_position, [data.car]) do\n      drive = %Drive{\n        latitude: position.latitude,\n        longitude: position.longitude,\n        shift_state: :unknown\n      }\n\n      to_miles = fn km ->\n        with km when not is_nil(km) <- km do\n          km |> Convert.km_to_miles(2) |> Decimal.to_float()\n        end\n      end\n\n      charge = %Charge{\n        ideal_battery_range: to_miles.(position.ideal_battery_range_km),\n        est_battery_range: to_miles.(position.est_battery_range_km),\n        battery_range: to_miles.(position.rated_battery_range_km),\n        battery_level: position.battery_level,\n        usable_battery_level: position.usable_battery_level,\n        charge_energy_added: :unknown,\n        charger_actual_current: :unknown,\n        charger_phases: :unknown,\n        charger_power: :unknown,\n        charger_voltage: :unknown,\n        charge_port_door_open: :unknown,\n        scheduled_charging_start_time: :unknown,\n        time_to_full_charge: :unknown\n      }\n\n      climate = %Climate{\n        outside_temp: position.outside_temp,\n        inside_temp: position.inside_temp\n      }\n\n      vehicle_state = %VehicleState{\n        odometer: position.odometer |> Convert.km_to_miles(6),\n        car_version:\n          case call(data.deps.log, :get_latest_update, [data.car]) do\n            %Log.Update{version: version} -> version\n            _ -> nil\n          end\n      }\n\n      vehicle = %{\n        vehicle\n        | drive_state: drive,\n          charge_state: charge,\n          climate_state: climate,\n          vehicle_state: vehicle_state\n      }\n\n      geofence = call(data.deps.locations, :find_geofence, [position])\n\n      {vehicle, geofence}\n    else\n      _ -> {vehicle, nil}\n    end\n  end\n\n  defp fetch(%Data{car: car, deps: deps}, expected_state: expected_state) do\n    reachable? =\n      case expected_state do\n        :online -> true\n        {:driving, _, _} -> true\n        {:updating, _} -> true\n        {:charging, _} -> true\n        :start -> false\n        {:offline, _} -> false\n        {:asleep, _} -> false\n        {:suspended, _} -> false\n      end\n\n    if reachable? do\n      fetch_with_reachable_assumption(car.eid, deps)\n    else\n      fetch_with_unreachable_assumption(car.eid, deps)\n    end\n  end\n\n  defp fetch_with_reachable_assumption(id, deps) do\n    with {:error, :vehicle_unavailable} <- call(deps.api, :get_vehicle_with_state, [id]) do\n      call(deps.api, :get_vehicle, [id])\n    end\n  end\n\n  defp fetch_with_unreachable_assumption(id, deps) do\n    with {:ok, %Vehicle{state: \"online\"}} <- call(deps.api, :get_vehicle, [id]) do\n      call(deps.api, :get_vehicle_with_state, [id])\n    end\n  end\n\n  defp fetch_strict(id, deps) do\n    alias Vehicle, as: V\n\n    case call(deps.api, :get_vehicle_with_state, [id]) do\n      {:ok, %V{drive_state: %Drive{}, charge_state: %Charge{}, climate_state: %Climate{}} = v} ->\n        {:ok, v}\n\n      {:ok, %V{}} ->\n        {:error, :gateway_error}\n\n      {:error, reason} ->\n        {:error, reason}\n    end\n  end\n\n  @terrain (case Mix.env() do\n              :test -> TerrainMock\n              _ -> Terrain\n            end)\n\n  defp create_position(%Vehicle{} = vehicle, %Data{car: car}) do\n    position = %{\n      date: parse_timestamp(vehicle.drive_state.timestamp),\n      latitude: vehicle.drive_state.latitude,\n      longitude: vehicle.drive_state.longitude,\n      speed: Convert.mph_to_kmh(vehicle.drive_state.speed),\n      power: vehicle.drive_state.power,\n      battery_level: vehicle.charge_state.battery_level,\n      usable_battery_level: vehicle.charge_state.usable_battery_level,\n      outside_temp: vehicle.climate_state.outside_temp,\n      inside_temp: vehicle.climate_state.inside_temp,\n      odometer: Convert.miles_to_km(vehicle.vehicle_state.odometer, 6),\n      ideal_battery_range_km: Convert.miles_to_km(vehicle.charge_state.ideal_battery_range, 2),\n      est_battery_range_km: Convert.miles_to_km(vehicle.charge_state.est_battery_range, 2),\n      rated_battery_range_km: Convert.miles_to_km(vehicle.charge_state.battery_range, 2),\n      fan_status: vehicle.climate_state.fan_status,\n      is_climate_on: vehicle.climate_state.is_climate_on,\n      driver_temp_setting: vehicle.climate_state.driver_temp_setting,\n      passenger_temp_setting: vehicle.climate_state.passenger_temp_setting,\n      is_rear_defroster_on: vehicle.climate_state.is_rear_defroster_on,\n      is_front_defroster_on: vehicle.climate_state.is_front_defroster_on,\n      battery_heater_on: vehicle.charge_state.battery_heater_on,\n      battery_heater: vehicle.climate_state.battery_heater,\n      battery_heater_no_power: vehicle.climate_state.battery_heater_no_power,\n      tpms_pressure_fl: vehicle.vehicle_state.tpms_pressure_fl,\n      tpms_pressure_fr: vehicle.vehicle_state.tpms_pressure_fr,\n      tpms_pressure_rl: vehicle.vehicle_state.tpms_pressure_rl,\n      tpms_pressure_rr: vehicle.vehicle_state.tpms_pressure_rr\n    }\n\n    elevation =\n      case car do\n        %Car{settings: %CarSettings{use_streaming_api: true}} -> nil\n        %Car{} -> @terrain.get_elevation({position.latitude, position.longitude})\n      end\n\n    Map.put(position, :elevation, elevation)\n  end\n\n  defp create_position(%Stream.Data{} = stream_data, %Data{}) do\n    %{\n      date: stream_data.time,\n      latitude: stream_data.est_lat,\n      longitude: stream_data.est_lng,\n      power: stream_data.power,\n      speed: Convert.mph_to_kmh(stream_data.speed),\n      battery_level: stream_data.soc,\n      elevation: stream_data.elevation,\n      odometer: Convert.miles_to_km(stream_data.odometer, 6)\n    }\n  end\n\n  defp insert_charge(charging_process, %Vehicle{} = vehicle, data) do\n    attrs = %{\n      date: parse_timestamp(vehicle.charge_state.timestamp),\n      battery_heater_on: vehicle.charge_state.battery_heater_on,\n      battery_heater: vehicle.climate_state.battery_heater,\n      battery_heater_no_power: vehicle.climate_state.battery_heater_no_power,\n      battery_level: vehicle.charge_state.battery_level,\n      usable_battery_level: vehicle.charge_state.usable_battery_level,\n      charge_energy_added: vehicle.charge_state.charge_energy_added,\n      charger_actual_current: vehicle.charge_state.charger_actual_current,\n      charger_phases: vehicle.charge_state.charger_phases,\n      charger_pilot_current: vehicle.charge_state.charger_pilot_current,\n      charger_power: vehicle.charge_state.charger_power || 0,\n      charger_voltage: vehicle.charge_state.charger_voltage,\n      conn_charge_cable: vehicle.charge_state.conn_charge_cable,\n      fast_charger_present: vehicle.charge_state.fast_charger_present,\n      fast_charger_brand: vehicle.charge_state.fast_charger_brand,\n      fast_charger_type: vehicle.charge_state.fast_charger_type,\n      ideal_battery_range_km: Convert.miles_to_km(vehicle.charge_state.ideal_battery_range, 2),\n      rated_battery_range_km: Convert.miles_to_km(vehicle.charge_state.battery_range, 2),\n      not_enough_power_to_heat: vehicle.charge_state.not_enough_power_to_heat,\n      outside_temp: vehicle.climate_state.outside_temp\n    }\n\n    case call(data.deps.log, :insert_charge, [charging_process, attrs]) do\n      {:error, %Ecto.Changeset{} = changeset} ->\n        errors =\n          Ecto.Changeset.traverse_errors(changeset, fn {message, opts} ->\n            Enum.reduce(opts, message, fn {key, value}, acc ->\n              String.replace(acc, \"%{#{key}}\", to_string(value))\n            end)\n          end)\n\n        Logger.warning(\"Invalid charge data: #{inspect(errors, pretty: true)}\",\n          car_id: data.car.id\n        )\n\n      {:ok, _charge} ->\n        :ok\n    end\n  end\n\n  defp try_to_suspend(vehicle, current_state, %Data{car: car} = data) do\n    {suspend_after_idle_min, suspend_min, i} =\n      case {car.settings, streaming?(data)} do\n        {%CarSettings{use_streaming_api: true}, true} -> {3, 30, 2}\n        {%CarSettings{suspend_after_idle_min: i, suspend_min: s}, _} -> {i, s, 1}\n      end\n\n    suspend? = diff_seconds(DateTime.utc_now(), data.last_used) / 60 >= suspend_after_idle_min\n\n    case can_fall_asleep(vehicle, data) do\n      {:error, :sentry_mode} ->\n        {:keep_state, %Data{data | last_used: DateTime.utc_now()},\n         [broadcast_summary(), schedule_fetch(30 * i, data)]}\n\n      {:error, :preconditioning} ->\n        if suspend?, do: Logger.warning(\"Preconditioning ...\", car_id: car.id)\n\n        {:keep_state, %Data{data | last_used: DateTime.utc_now()},\n         [broadcast_summary(), schedule_fetch(30 * i, data)]}\n\n      {:error, :dogmode} ->\n        if suspend?, do: Logger.warning(\"Dog Mode is enabled ...\", car_id: car.id)\n\n        {:keep_state, %Data{data | last_used: DateTime.utc_now()},\n         [broadcast_summary(), schedule_fetch(30 * i, data)]}\n\n      {:error, :user_present} ->\n        if suspend?, do: Logger.warning(\"User present ...\", car_id: car.id)\n\n        {:keep_state, %Data{data | last_used: DateTime.utc_now()},\n         [broadcast_summary(), schedule_fetch(default_interval(), data)]}\n\n      {:error, :downloading_update} ->\n        if suspend?, do: Logger.warning(\"Downloading update ...\", car_id: car.id)\n\n        {:keep_state, %Data{data | last_used: DateTime.utc_now()},\n         [broadcast_summary(), schedule_fetch(default_interval() * i, data)]}\n\n      {:error, :doors_open} ->\n        if suspend?, do: Logger.warning(\"Doors open ...\", car_id: car.id)\n\n        {:keep_state, %Data{data | last_used: DateTime.utc_now()},\n         [broadcast_summary(), schedule_fetch(default_interval() * i, data)]}\n\n      {:error, :trunk_open} ->\n        if suspend?, do: Logger.warning(\"Trunk open ...\", car_id: car.id)\n\n        {:keep_state, %Data{data | last_used: DateTime.utc_now()},\n         [broadcast_summary(), schedule_fetch(default_interval() * i, data)]}\n\n      {:error, :power_usage} ->\n        if suspend?, do: Logger.warning(\"Power usage ...\", car_id: car.id)\n\n        {:keep_state, %Data{data | last_used: DateTime.utc_now()},\n         [broadcast_summary(), schedule_fetch(default_interval() * i, data)]}\n\n      {:error, :unlocked} ->\n        if suspend?, do: Logger.warning(\"Unlocked ...\", car_id: car.id)\n\n        {:keep_state_and_data,\n         [broadcast_summary(), schedule_fetch(default_interval() * i, data)]}\n\n      :ok ->\n        if suspend? do\n          {:ok, _pos} =\n            call(data.deps.log, :insert_position, [car, create_position(vehicle, data)])\n\n          events = [broadcast_summary(), schedule_fetch(suspend_min, :minutes, data)]\n\n          case current_state do\n            {:suspended, _} ->\n              {:keep_state_and_data, events}\n\n            _ ->\n              Logger.info(\"Suspending logging\", car_id: car.id)\n\n              {:next_state, {:suspended, current_state},\n               %Data{data | last_state_change: DateTime.utc_now()}, events}\n          end\n        else\n          {:keep_state_and_data,\n           [broadcast_summary(), schedule_fetch(default_interval() * i, data)]}\n        end\n    end\n  end\n\n  defp can_fall_asleep(vehicle, %Data{car: car}) do\n    case {vehicle, car.settings} do\n      {%Vehicle{vehicle_state: %VehicleState{is_user_present: true}}, _} ->\n        {:error, :user_present}\n\n      {%Vehicle{climate_state: %Climate{is_preconditioning: true}}, _} ->\n        {:error, :preconditioning}\n\n      {%Vehicle{climate_state: %Climate{climate_keeper_mode: \"dog\"}}, _} ->\n        {:error, :dogmode}\n\n      {%Vehicle{vehicle_state: %VehicleState{sentry_mode: true}}, _} ->\n        {:error, :sentry_mode}\n\n      {%Vehicle{\n         vehicle_state: %VehicleState{\n           software_update: %VehicleState.SoftwareUpdate{\n             status: \"downloading\",\n             download_perc: download_percentage\n           }\n         }\n       }, _}\n      when download_percentage < 100 ->\n        {:error, :downloading_update}\n\n      {%Vehicle{vehicle_state: %VehicleState{df: df, pf: pf, dr: dr, pr: pr}}, _}\n      when is_number(df) and is_number(pf) and is_number(dr) and is_number(pr) and\n             (df > 0 or pf > 0 or dr > 0 or pr > 0) ->\n        {:error, :doors_open}\n\n      {%Vehicle{vehicle_state: %VehicleState{ft: ft, rt: rt}}, _}\n      when is_number(ft) and is_number(rt) and (ft > 0 or rt > 0) ->\n        {:error, :trunk_open}\n\n      {%Vehicle{vehicle_state: %VehicleState{locked: false}},\n       %CarSettings{req_not_unlocked: true}} ->\n        {:error, :unlocked}\n\n      {%Vehicle{drive_state: %Drive{power: power}}, _}\n      when is_number(power) and power > 0 ->\n        {:error, :power_usage}\n\n      {%Vehicle{}, %CarSettings{}} ->\n        :ok\n    end\n  end\n\n  defp start_drive(position, %Data{car: car, deps: deps} = data) do\n    Logger.info(\"Driving / Start\", car_id: car.id)\n\n    {:ok, {drive, geofence}} =\n      Repo.transaction(fn ->\n        {:ok, drive} = call(deps.log, :start_drive, [car])\n        {:ok, pos} = call(deps.log, :insert_position, [drive, position])\n        geofence = call(deps.locations, :find_geofence, [pos])\n        {drive, geofence}\n      end)\n\n    now = DateTime.utc_now()\n    data = %Data{data | last_state_change: now, last_used: now, geofence: geofence}\n\n    {drive, data}\n  end\n\n  defp timeout_drive(drive, %Data{} = data) do\n    {:ok, %Log.Drive{distance: km, duration_min: min}} =\n      call(data.deps.log, :close_drive, [drive, [lookup_address: !data.import?]])\n\n    Logger.info(\"Driving / Timeout / #{km && round(km)} km – #{min} min\", car_id: data.car.id)\n  end\n\n  defp merge(\n         %Vehicle{drive_state: %Drive{}, charge_state: %Charge{}, vehicle_state: %VehicleState{}} =\n           vehicle,\n         %Stream.Data{} = stream_data,\n         opts \\\\ []\n       ) do\n    timestamp =\n      if Keyword.get(opts, :time, false) do\n        DateTime.to_unix(stream_data.time, :millisecond)\n      else\n        vehicle.drive_state.timestamp\n      end\n\n    %Vehicle{\n      vehicle\n      | drive_state: %{\n          vehicle.drive_state\n          | timestamp: timestamp,\n            latitude: stream_data.est_lat,\n            longitude: stream_data.est_lng,\n            speed: stream_data.speed,\n            power: stream_data.power,\n            heading: stream_data.est_heading,\n            shift_state: stream_data.shift_state\n        },\n        charge_state: %{\n          vehicle.charge_state\n          | battery_level: stream_data.soc\n        },\n        vehicle_state: %{\n          vehicle.vehicle_state\n          | odometer: stream_data.odometer\n        }\n    }\n  end\n\n  defp put_charge_defaults(vehicle) do\n    charge_state =\n      vehicle.charge_state\n      |> Map.update!(:charge_energy_added, fn\n        nil -> 0\n        val -> val\n      end)\n      |> Map.update!(:charger_power, fn\n        nil -> 0\n        val -> val\n      end)\n\n    Map.put(vehicle, :charge_state, charge_state)\n  end\n\n  defp synchronize_updates(%Vehicle{vehicle_state: vehicle_state}, %Data{car: car} = data) do\n    case vehicle_state do\n      %VehicleState{timestamp: ts, car_version: vsn} when is_binary(vsn) ->\n        case call(data.deps.log, :get_latest_update, [car]) do\n          nil ->\n            {:ok, _} =\n              call(data.deps.log, :insert_missed_update, [car, vsn, [date: parse_timestamp(ts)]])\n\n          %Log.Update{version: last_vsn} when is_binary(last_vsn) ->\n            if normalize_version(last_vsn) < normalize_version(vsn) do\n              Logger.info(\"Logged missing software update: #{vsn}\", car_id: car.id)\n\n              {:ok, _} =\n                call(data.deps.log, :insert_missed_update, [car, vsn, [date: parse_timestamp(ts)]])\n            end\n\n          %Log.Update{version: nil} ->\n            nil\n        end\n\n      error ->\n        Logger.warning(\"Unexpected software version: #{inspect(error, pretty: true)}\",\n          car_id: car.id\n        )\n    end\n  end\n\n  defp normalize_version(vsn) when is_binary(vsn) do\n    vsn\n    |> String.split(\" \", parts: 2)\n    |> hd()\n    |> String.split(\".\")\n    |> Enum.map(&String.pad_leading(&1, 4, \"0\"))\n  end\n\n  defp stale?(%Stream.Data{} = stream_data, %Vehicle{} = last_response) do\n    last_response_time =\n      case last_response do\n        %Vehicle{drive_state: %Drive{timestamp: t}} when is_number(t) -> parse_timestamp(t)\n        %Vehicle{drive_state: %Drive{timestamp: %DateTime{} = t}} -> t\n        _ -> nil\n      end\n\n    last_response_time != nil and DateTime.compare(last_response_time, stream_data.time) == :gt\n  end\n\n  defp streaming?(%Data{stream_pid: pid}), do: is_pid(pid) and Process.alive?(pid)\n\n  defp connect_stream(%Data{car: car} = data) do\n    Logger.info(\"Stream connecting ...\", car_id: car.id)\n\n    me = self()\n\n    id =\n      if System.get_env(\"TESLA_WSS_USE_VIN\") do\n        data.car.vin\n      else\n        data.car.vid\n      end\n\n    call(data.deps.api, :stream, [\n      id,\n      fn stream_data -> send(me, {:stream, stream_data}) end\n    ])\n  end\n\n  defp disconnect_stream(%Data{stream_pid: nil}), do: :ok\n\n  defp disconnect_stream(%Data{stream_pid: pid} = data) when is_pid(pid) do\n    Logger.info(\"Stream disconnecting ...\", car_id: data.car.id)\n    Stream.disconnect(pid)\n  end\n\n  defp summary_topic(car_id) when is_number(car_id), do: \"#{__MODULE__}/summary/#{car_id}\"\n  defp fetch_topic(car_id) when is_number(car_id), do: \"#{__MODULE__}/fetch/#{car_id}\"\n\n  defp determince_interval(n) when is_nil(n) or n <= 0, do: 5\n  defp determince_interval(n), do: round(250 / n) |> min(20) |> max(charging_interval())\n\n  defp fuse_name(:vehicle_not_found, car_id), do: :\"#{__MODULE__}_#{car_id}_not_found\"\n  defp fuse_name(:api_error, car_id), do: :\"#{__MODULE__}_#{car_id}_api_error\"\n\n  defp broadcast_summary, do: {:next_event, :internal, :broadcast_summary}\n  defp broadcast_fetch(status), do: {:next_event, :internal, {:broadcast_fetch, status}}\n\n  defp schedule_position_storing do\n    {{:timeout, :store_position}, :timer.minutes(5), :store_position}\n  end\n\n  defp date_opts(%Vehicle{drive_state: %Drive{timestamp: nil}}), do: []\n  defp date_opts(%Vehicle{drive_state: %Drive{timestamp: ts}}), do: [date: parse_timestamp(ts)]\n  defp date_opts(%Vehicle{}), do: []\n\n  defp parse_timestamp(ts), do: DateTime.from_unix!(ts, :millisecond)\n\n  defp schedule_fetch(%Data{} = data), do: schedule_fetch(10, :seconds, data)\n\n  defp schedule_fetch(n, %Data{} = data),\n    do: schedule_fetch(n |> max(minimum_interval()), :seconds, data)\n\n  defp schedule_fetch(_n, _unit, %Data{import?: true}), do: {:state_timeout, 0, :fetch}\n  defp schedule_fetch(n, unit, _), do: {:state_timeout, fetch_timeout(n, unit), :fetch}\n\n  case(Mix.env()) do\n    :test -> defp fetch_timeout(n, _), do: round(n)\n    _ -> defp fetch_timeout(n, unit), do: round(apply(:timer, unit, [n]))\n  end\n\n  case(Mix.env()) do\n    :test -> defp diff_seconds(a, b), do: DateTime.diff(a, b, :millisecond)\n    _ -> defp diff_seconds(a, b), do: DateTime.diff(a, b, :second)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate/vehicles.ex",
    "content": "defmodule TeslaMate.Vehicles do\n  use Supervisor\n\n  require Logger\n\n  alias __MODULE__.Vehicle\n  alias TeslaMate.Settings.CarSettings\n  alias TeslaMate.Log.Car\n  alias TeslaMate.Log\n\n  @name __MODULE__\n\n  def start_link(opts) do\n    Supervisor.start_link(__MODULE__, opts, name: @name)\n  end\n\n  def list do\n    Supervisor.which_children(@name)\n    |> Task.async_stream(fn {_, pid, _, _} -> Vehicle.summary(pid) end,\n      ordered: false,\n      max_concurrency: 10,\n      timeout: 5000\n    )\n    |> Enum.map(fn {:ok, vehicle} -> vehicle end)\n    |> Enum.sort_by(fn %Vehicle.Summary{car: %Car{id: id, display_priority: dp}} ->\n      {dp, id}\n    end)\n  end\n\n  def kill do\n    Logger.warning(\"Restarting #{__MODULE__} supervisor\")\n    __MODULE__ |> Process.whereis() |> Process.exit(:kill)\n  end\n\n  def restart do\n    with :ok <- Supervisor.stop(@name, :normal),\n         :ok <- block_until_started(250) do\n      :ok\n    end\n  end\n\n  defdelegate summary(id), to: Vehicle\n  defdelegate resume_logging(id), to: Vehicle\n  defdelegate suspend_logging(id), to: Vehicle\n  defdelegate subscribe_to_summary(id), to: Vehicle\n  defdelegate subscribe_to_fetch(id), to: Vehicle\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    children =\n      opts\n      |> Keyword.get_lazy(:vehicles, &list_vehicles!/0)\n      |> Enum.map(&{Keyword.get(opts, :vehicle, Vehicle), car: create_or_update!(&1)})\n      |> Enum.uniq_by(fn {_mod, car: %Car{id: id}} -> id end)\n      |> Enum.filter(fn {_mod, car: %Car{settings: settings}} -> settings.enabled end)\n\n    Supervisor.init(children,\n      strategy: :one_for_one,\n      max_restarts: 5,\n      max_seconds: 60\n    )\n  end\n\n  # Private\n\n  defp block_until_started(0), do: {:error, :restart_failed}\n\n  defp block_until_started(retries) when retries > 0 do\n    with pid when is_pid(pid) <- Process.whereis(@name),\n         true <- Process.alive?(pid) do\n      :ok\n    else\n      _ ->\n        Process.sleep(10)\n        block_until_started(retries - 1)\n    end\n  end\n\n  defp list_vehicles! do\n    case TeslaMate.Api.list_vehicles() do\n      {:error, :not_signed_in} ->\n        fallback_vehicles()\n\n      {:error, reason} ->\n        Logger.warning(\"Could not get vehicles: #{inspect(reason)}\")\n        fallback_vehicles()\n\n      {:ok, []} ->\n        fallback_vehicles()\n\n      {:ok, vehicles} ->\n        vehicles\n    end\n  end\n\n  defp fallback_vehicles do\n    vehicles =\n      Log.list_cars()\n      |> Enum.map(fn %Car{eid: eid, vid: vid, vin: vin, name: name} ->\n        %TeslaApi.Vehicle{id: eid, vin: vin, vehicle_id: vid, display_name: name}\n      end)\n\n    if vehicles != [] do\n      Logger.warning(\"Using fallback vehicles:\\n\\n#{inspect(vehicles, pretty: true)}\")\n    end\n\n    vehicles\n  end\n\n  def create_or_update!(%TeslaApi.Vehicle{} = vehicle) do\n    unless is_nil(name = vehicle.display_name), do: Logger.info(\"Starting logger for '#{name}'\")\n\n    {:ok, %Car{} = car} =\n      with nil <- Log.get_car_by(vin: vehicle.vin),\n           nil <- Log.get_car_by(vid: vehicle.vehicle_id),\n           nil <- Log.get_car_by(eid: vehicle.id) do\n        settings =\n          case Vehicle.identify(vehicle) do\n            {:ok, %{model: m, trim_badging: trim_badging, marketing_name: marketing_name}}\n            when m in [\"S\", \"X\"] and (trim_badging == nil or is_binary(marketing_name)) ->\n              %CarSettings{suspend_min: 12}\n\n            {:ok, %{model: m}} when m in [\"3\", \"Y\"] ->\n              %CarSettings{suspend_min: 12}\n\n            _ ->\n              %CarSettings{}\n          end\n\n        %Car{settings: settings}\n      end\n      |> Car.changeset(%{\n        name: vehicle.display_name,\n        eid: vehicle.id,\n        vid: vehicle.vehicle_id,\n        vin: vehicle.vin\n      })\n      |> Log.create_or_update_car()\n\n    car\n  end\nend\n"
  },
  {
    "path": "lib/teslamate.ex",
    "content": "defmodule TeslaMate do\n  @moduledoc \"\"\"\n  TeslaMate keeps the contexts that define your domain\n  and business logic.\n\n  Contexts are also responsible for managing your data, regardless\n  if it comes from the database, an external API or others.\n  \"\"\"\nend\n"
  },
  {
    "path": "lib/teslamate_web/cldr.ex",
    "content": "defmodule TeslaMateWeb.Cldr do\n  use Cldr,\n    gettext: TeslaMateWeb.Gettext,\n    locales: [],\n    otp_app: :teslamate,\n    providers: [],\n    generate_docs: false,\n    force_locale_download:\n      Mix.env() == :prod and System.get_env(\"SKIP_LOCALE_DOWNLOAD\") != \"true\",\n    data_dir: System.get_env(\"LOCALES\")\nend\n"
  },
  {
    "path": "lib/teslamate_web/controllers/car_controller.ex",
    "content": "defmodule TeslaMateWeb.CarController do\n  use TeslaMateWeb, :controller\n\n  require Logger\n  import Phoenix.LiveView.Controller\n\n  alias TeslaMate.Api, warn: false\n  alias TeslaMate.{Log, Vehicles}\n\n  plug :redirect_if_importing when action in [:index]\n  plug :fetch_signed_in when action in [:index]\n  plug :redirect_unless_signed_in when action in [:index]\n\n  action_fallback TeslaMateWeb.FallbackController\n\n  def index(conn, _) do\n    live_render(conn, TeslaMateWeb.CarLive.Index,\n      session: %{\n        \"settings\" => conn.assigns[:settings],\n        \"locale\" => get_session(conn, :locale)\n      }\n    )\n  end\n\n  def suspend_logging(conn, %{\"id\" => id}) do\n    car = Log.get_car!(id)\n\n    case Vehicles.suspend_logging(car.id) do\n      :ok ->\n        send_resp(conn, :no_content, \"\")\n\n      {:error, reason} ->\n        Logger.info(\"Could not suspend manually: #{inspect(reason)}\")\n\n        conn\n        |> put_status(:precondition_failed)\n        |> render(\"command_failed.json\", reason: reason)\n    end\n  end\n\n  def resume_logging(conn, %{\"id\" => id}) do\n    car = Log.get_car!(id)\n    :ok = Vehicles.resume_logging(car.id)\n    send_resp(conn, :no_content, \"\")\n  end\n\n  case Mix.env() do\n    :test -> defp fetch_signed_in(conn, _opts), do: conn\n    _ -> defp fetch_signed_in(conn, _opts), do: assign(conn, :signed_in?, Api.signed_in?())\n  end\n\n  defp redirect_if_importing(conn, _) do\n    case Application.get_env(:teslamate, :import_directory) do\n      nil -> conn\n      _ -> conn |> redirect(to: import_page(conn)) |> halt()\n    end\n  end\n\n  defp redirect_unless_signed_in(%Plug.Conn{assigns: %{signed_in?: true}} = conn, _), do: conn\n  defp redirect_unless_signed_in(conn, _opts), do: conn |> redirect(to: sign_in(conn)) |> halt()\n\n  defp sign_in(conn), do: Routes.live_path(conn, TeslaMateWeb.SignInLive.Index)\n  defp import_page(conn), do: Routes.live_path(conn, TeslaMateWeb.ImportLive.Index)\nend\n"
  },
  {
    "path": "lib/teslamate_web/controllers/drive_controller.ex",
    "content": "defmodule TeslaMateWeb.DriveController do\n  use TeslaMateWeb, :controller\n\n  require Logger\n  import Ecto.Query\n\n  alias TeslaMate.Log.{Drive, Position}\n  alias TeslaMate.Repo\n\n  def gpx(conn, %{\"id\" => id}) do\n    drive =\n      Drive\n      |> Repo.get(id)\n      |> Repo.preload(positions: from(p in Position, order_by: p.date))\n\n    case drive do\n      nil -> conn |> send_resp(404, \"Drive not found\")\n      drive -> send_gpx_file(conn, drive)\n    end\n  end\n\n  defp send_gpx_file(conn, drive) do\n    filename = \"#{drive.start_date}.gpx\"\n\n    conn\n    |> put_resp_content_type(\"application/xml\")\n    |> put_resp_header(\"content-disposition\", ~s(attachment; filename=\"#{filename}\"))\n    |> render(\"gpx.xml\", drive: drive)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/controllers/fallback_controller.ex",
    "content": "defmodule TeslaMateWeb.FallbackController do\n  @moduledoc \"\"\"\n  Translates controller action results into valid `Plug.Conn` responses.\n\n  See `Phoenix.Controller.action_fallback/1` for more details.\n  \"\"\"\n  use TeslaMateWeb, :controller\n\n  def call(conn, {:error, %Ecto.Changeset{} = changeset}) do\n    conn\n    |> put_status(:unprocessable_entity)\n    |> put_view(TeslaMateWeb.ChangesetView)\n    |> render(\"error.json\", changeset: changeset)\n  end\n\n  def call(conn, {:error, :not_found}) do\n    conn\n    |> put_status(:not_found)\n    |> put_view(TeslaMateWeb.ErrorView)\n    |> render(:\"404\")\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/endpoint.ex",
    "content": "defmodule TeslaMateWeb.Endpoint do\n  use Phoenix.Endpoint, otp_app: :teslamate\n\n  @session_options [\n    store: :cookie,\n    key: \"_teslamate_key\",\n    signing_salt: \"yt5O3CAQ\",\n    same_site: \"Strict\"\n  ]\n\n  plug TeslaMateWeb.HealthCheck\n\n  socket \"/live\", Phoenix.LiveView.Socket,\n    websocket: [connect_info: [session: @session_options], transport_log: :debug]\n\n  plug Plug.Static,\n    at: \"/\",\n    from: :teslamate,\n    encodings: [{\"zstd\", \".zst\"}, {\"br\", \".br\"}, {\"gzip\", \".gz\"}],\n    only: TeslaMateWeb.static_paths()\n\n  # Code reloading can be explicitly enabled under the\n  # :code_reloader configuration of your endpoint.\n  if code_reloading? do\n    socket \"/phoenix/live_reload/socket\", Phoenix.LiveReloader.Socket\n    plug Phoenix.LiveReloader\n    plug Phoenix.CodeReloader\n    plug Phoenix.Ecto.CheckRepoStatus, otp_app: :teslamate\n  end\n\n  plug Plug.RequestId\n  plug Plug.Logger\n\n  plug Plug.Parsers,\n    parsers: [:urlencoded, :multipart, :json],\n    pass: [\"*/*\"],\n    json_decoder: Phoenix.json_library()\n\n  plug Plug.MethodOverride\n  plug Plug.Head\n  plug Plug.Session, @session_options\n  plug TeslaMateWeb.Router\nend\n"
  },
  {
    "path": "lib/teslamate_web/gettext.ex",
    "content": "defmodule TeslaMateWeb.Gettext do\n  @moduledoc \"\"\"\n  A module providing Internationalization with a gettext-based API.\n\n  By using [Gettext](https://hexdocs.pm/gettext),\n  your module gains a set of macros for translations, for example:\n\n      use Gettext, backend: TeslaMateWeb.Gettext\n\n      # Simple translation\n      gettext(\"Here is the string to translate\")\n\n      # Plural translation\n      ngettext(\"Here is the string to translate\",\n               \"Here are the strings to translate\",\n               3)\n\n      # Domain-based translation\n      dgettext(\"errors\", \"Here is the error message to translate\")\n\n  See the [Gettext Docs](https://hexdocs.pm/gettext) for detailed usage.\n  \"\"\"\n  use Gettext.Backend, otp_app: :teslamate\nend\n"
  },
  {
    "path": "lib/teslamate_web/health_check.ex",
    "content": "defmodule TeslaMateWeb.HealthCheck do\n  import Plug.Conn\n\n  def init(opts), do: opts\n\n  def call(%Plug.Conn{request_path: \"/health_check\"} = conn, _opts) do\n    conn\n    |> send_resp(200, \"\")\n    |> halt()\n  end\n\n  def call(conn, _opts), do: conn\nend\n"
  },
  {
    "path": "lib/teslamate_web/live/car_live/index.ex",
    "content": "defmodule TeslaMateWeb.CarLive.Index do\n  use TeslaMateWeb, :live_view\n\n  require Logger\n\n  alias TeslaMate.{Settings, Vehicles}\n  alias TeslaMate.Settings.GlobalSettings\n\n  on_mount {TeslaMateWeb.InitAssigns, :locale}\n\n  @impl true\n  def mount(_params, %{\"settings\" => settings}, socket) do\n    socket =\n      socket\n      |> assign(page_title: gettext(\"Home\"))\n      |> assign_new(:summaries, fn -> Vehicles.list() end)\n      |> assign_new(:settings, fn -> update_base_url(settings, socket) end)\n\n    {:ok, socket}\n  end\n\n  ## Private\n\n  defp update_base_url(%GlobalSettings{base_url: url} = settings, socket)\n       when is_nil(url) or url == \"\" do\n    if connected?(socket) do\n      base_url = get_connect_params(socket)[\"baseUrl\"]\n\n      case Settings.update_global_settings(settings, %{base_url: base_url}) do\n        {:error, reason} ->\n          Logger.warning(\"Updating settings failed: #{inspect(reason)}\")\n          settings\n\n        {:ok, settings} ->\n          settings\n      end\n    else\n      settings\n    end\n  end\n\n  defp update_base_url(settings, _socket) do\n    settings\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/live/car_live/index.html.heex",
    "content": "<%= for summary <- @summaries do %>\n  <%= live_render(@socket, TeslaMateWeb.CarLive.Summary,\n    id: \"car_#{summary.car.id}\",\n    session: %{\"summary\" => summary, \"settings\" => @settings, \"locale\" => @locale}\n  ) %>\n<% end %>\n"
  },
  {
    "path": "lib/teslamate_web/live/car_live/summary.ex",
    "content": "defmodule TeslaMateWeb.CarLive.Summary do\n  use TeslaMateWeb, :live_view\n\n  use Gettext, backend: TeslaMateWeb.Gettext\n\n  alias TeslaMate.Vehicles.Vehicle.Summary\n  alias TeslaMate.Vehicles.Vehicle\n  alias TeslaMate.{Vehicles, Convert}\n\n  on_mount {TeslaMateWeb.InitAssigns, :locale}\n\n  @impl true\n  def mount(_params, %{\"summary\" => %Summary{car: car} = summary} = session, socket) do\n    if connected?(socket) do\n      send(self(), :update_duration)\n      send(self(), {:status, Vehicle.busy?(car.id)})\n\n      :ok = Vehicles.subscribe_to_summary(car.id)\n      :ok = Vehicles.subscribe_to_fetch(car.id)\n    end\n\n    assigns = %{\n      car: car,\n      summary: summary,\n      fetch_status: Vehicle.busy?(car.id),\n      fetch_start: 0,\n      fetch_timer: nil,\n      settings: session[\"settings\"],\n      translate_state: &translate_state/1,\n      duration: humanize_duration(summary.since),\n      error: nil,\n      error_timeout: nil,\n      loading: false\n    }\n\n    {:ok, assign(socket, assigns)}\n  end\n\n  @impl true\n  def handle_event(\"suspend_logging\", _val, socket) do\n    cancel_timer(socket.assigns.error_timeout)\n    send(self(), :suspend_logging)\n    {:noreply, assign(socket, loading: true)}\n  end\n\n  def handle_event(\"resume_logging\", _val, socket) do\n    send(self(), :resume_logging)\n    {:noreply, assign(socket, loading: true)}\n  end\n\n  @impl true\n  def handle_info(:update_duration, socket) do\n    Process.send_after(self(), :update_duration, :timer.seconds(1))\n    {:noreply, assign(socket, duration: humanize_duration(socket.assigns.summary.since))}\n  end\n\n  def handle_info(:resume_logging, socket) do\n    :ok = Vehicles.resume_logging(socket.assigns.car.id)\n    {:noreply, socket}\n  end\n\n  def handle_info(:suspend_logging, socket) do\n    assigns =\n      case Vehicles.suspend_logging(socket.assigns.car.id) do\n        :ok ->\n          %{error: nil, error_timeout: nil, loading: false}\n\n        {:error, reason} ->\n          %{\n            error: error_to_str(reason),\n            error_timeout: Process.send_after(self(), :hide_error, 5_000),\n            loading: false\n          }\n      end\n\n    {:noreply, assign(socket, assigns)}\n  end\n\n  def handle_info(:hide_error, socket) do\n    {:noreply, assign(socket, error: nil, error_timeout: nil)}\n  end\n\n  def handle_info(%Summary{since: since} = summary, socket) do\n    {:noreply,\n     assign(socket, summary: summary, duration: humanize_duration(since), loading: false)}\n  end\n\n  def handle_info({:status, true}, socket) do\n    cancel_timer(socket.assigns.fetch_timer)\n\n    assigns = %{\n      fetch_status: true,\n      fetch_start: System.monotonic_time(),\n      fetch_timer: nil\n    }\n\n    {:noreply, assign(socket, assigns)}\n  end\n\n  # Note: this must be smaller than the @driving_interval\n  @min_spinner_visibility_ms 1000\n\n  def handle_info({:status, false}, socket) do\n    fetch_duration =\n      (System.monotonic_time() - socket.assigns.fetch_start) /\n        System.convert_time_unit(1, :millisecond, :native)\n\n    assigns =\n      case @min_spinner_visibility_ms - fetch_duration do\n        diff when 0 < diff ->\n          %{fetch_timer: Process.send_after(self(), :set_status_to_false, round(diff))}\n\n        _ ->\n          %{fetch_status: false}\n      end\n\n    {:noreply, assign(socket, assigns)}\n  end\n\n  def handle_info(:set_status_to_false, socket) do\n    {:noreply, assign(socket, fetch_status: false)}\n  end\n\n  def format_tpms(bar, :psi) when is_number(bar) do\n    \"#{Float.round(bar * 14.5038, 1)} PSI\"\n  end\n\n  def format_tpms(bar, :bar) when is_number(bar) do\n    \"#{Float.round(bar, 1)} Bar\"\n  end\n\n  defp translate_state(:start), do: \"\"\n  defp translate_state(:driving), do: gettext(\"driving\")\n  defp translate_state(:charging), do: gettext(\"charging\")\n  defp translate_state(:updating), do: gettext(\"updating\")\n  defp translate_state(:suspended), do: gettext(\"falling asleep\")\n  defp translate_state(:online), do: gettext(\"online\")\n  defp translate_state(:offline), do: gettext(\"offline\")\n  defp translate_state(:asleep), do: gettext(\"asleep\")\n  defp translate_state(:unavailable), do: gettext(\"unavailable\")\n\n  defp error_to_str(:unlocked), do: gettext(\"Car is unlocked\")\n  defp error_to_str(:doors_open), do: gettext(\"Doors are open\")\n  defp error_to_str(:trunk_open), do: gettext(\"Trunk is open\")\n  defp error_to_str(:sentry_mode), do: gettext(\"Sentry mode is enabled\")\n  defp error_to_str(:preconditioning), do: gettext(\"Preconditioning\")\n  defp error_to_str(:dogmode), do: gettext(\"Dog mode is enabled\")\n  defp error_to_str(:user_present), do: gettext(\"Driver present\")\n  defp error_to_str(:downloading_update), do: gettext(\"Downloading update\")\n  defp error_to_str(:update_in_progress), do: gettext(\"Update in progress\")\n  defp error_to_str(:timeout), do: gettext(\"Timeout\")\n  defp error_to_str(_other), do: gettext(\"An error occurred\")\n\n  defp cancel_timer(nil), do: :ok\n  defp cancel_timer(ref) when is_reference(ref), do: Process.cancel_timer(ref)\n\n  defp humanize_duration(nil), do: nil\n\n  defp humanize_duration(date) do\n    case DateTime.utc_now() |> DateTime.diff(date, :second) do\n      dur when dur < 5 -> nil\n      dur when dur > 60 -> dur |> Convert.sec_to_str() |> Enum.reject(&String.ends_with?(&1, \"s\"))\n      dur -> dur |> Convert.sec_to_str()\n    end\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/live/car_live/summary.html.heex",
    "content": "<div class=\"car card\">\n  <div class=\"card-image\">\n    <figure\n      id={\"map_#{@car.id}_container\"}\n      data-id={@car.id}\n      data-marker=\"arrow\"\n      data-zoom=\"1\"\n      phx-hook=\"SimpleMap\"\n      phx-update=\"ignore\"\n    >\n      <div id={\"map_#{@car.id}\"} class=\"map\" style=\"height: 175px; position: relative;\">\n        <div class=\"spinner\">\n          <span class=\"is-loading\" />\n        </div>\n      </div>\n    </figure>\n    <input\n      id={\"position_#{@car.id}\"}\n      type=\"text\"\n      value={\"#{@summary.latitude},#{@summary.longitude},#{@summary.heading}\"}\n      class=\"is-hidden\"\n      phx-hook=\"TriggerChange\"\n      disabled\n    />\n  </div>\n  <div class=\"card-content\">\n    <div class=\"media is-flex mb-5\">\n      <div class=\"media-content\">\n        <p class=\"title is-5\"><%= @summary.display_name %></p>\n        <%= unless is_nil(@car.model) do %>\n          <p class=\"subtitle is-6 has-text-weight-light\">\n            Model <%= @car.model %>\n            <%= if @car.marketing_name != nil do %>\n              <span\n                class=\"has-tooltip-right has-tooltip-left-mobile\"\n                style=\"border-bottom: none;\"\n                data-tooltip={@car.trim_badging}\n              >\n                <%= @car.marketing_name %>\n              </span>\n            <% else %>\n              <%= @car.trim_badging %>\n            <% end %>\n          </p>\n        <% end %>\n      </div>\n      <div class=\"icons ml-5\">\n        <span\n          class={\"#{if @fetch_status, do: \"\", else: \"is-hidden \"}spinner has-tooltip-top has-tooltip-left-mobile\"}\n          data-tooltip={gettext(\"Fetching vehicle data ...\")}\n        >\n          <span class=\"is-loading\"></span>\n        </span>\n        <%= if @summary.is_preconditioning do %>\n          <span\n            class=\"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={gettext(\"Preconditioning\")}\n          >\n            <span class=\"mdi mdi-air-conditioner\"></span>\n          </span>\n        <% end %>\n        <%= if @summary.climate_keeper_mode == \"dog\" do %>\n          <span\n            class=\"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={gettext(\"Dog Mode\")}\n          >\n            <span class=\"mdi mdi-dog-side\"></span>\n          </span>\n        <% end %>\n        <%= if not is_nil(@summary.battery_level) and not is_nil(@summary.usable_battery_level) and @summary.battery_level - @summary.usable_battery_level > 2 do %>\n          <span\n            class=\"icon has-text-link has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={gettext(\"Reduced Battery Range\")}\n          >\n            <span class=\"mdi mdi-snowflake\"></span>\n          </span>\n        <% end %>\n        <%= if @summary.state != :driving and @summary.is_user_present do %>\n          <span\n            class=\"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={gettext(\"Driver present\")}\n          >\n            <span class=\"mdi mdi-account\"></span>\n          </span>\n        <% end %>\n        <%= if @summary.plugged_in == true do %>\n          <span\n            class=\"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={gettext(\"Plugged In\")}\n          >\n            <span class=\"mdi mdi-power-plug\"></span>\n          </span>\n        <% end %>\n        <%= unless is_nil(@summary.latitude) or is_nil(@summary.longitude) do %>\n          <%= link to: \"https://www.google.com/maps?q=#{@summary.latitude},#{@summary.longitude}\",\n                  target: \"_blank\",\n                  rel: \"noopener noreferrer\",\n                  class: \"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\",\n                  data: [tooltip: gettext(\"View car location on Google Maps\")] do %>\n            <span class=\"mdi mdi-map-marker\"></span>\n          <% end %>\n        <% end %>\n        <%= if @summary.windows_open do %>\n          <span\n            class=\"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={gettext(\"Windows open\")}\n          >\n            <span class=\"mdi mdi-window-open\"></span>\n          </span>\n        <% end %>\n        <%= if @summary.doors_open do %>\n          <span\n            class=\"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={gettext(\"Doors open\")}\n          >\n            <span class=\"mdi mdi-car-door\"></span>\n          </span>\n        <% end %>\n        <%= if @summary.sentry_mode do %>\n          <span\n            class=\"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={gettext(\"Sentry Mode\")}\n          >\n            <span class=\"mdi mdi-shield-check\"></span>\n          </span>\n        <% end %>\n        <%= if @summary.center_display_state == 7 do %>\n          <span\n            class=\"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={gettext(\"Sentry Mode recording\")}\n          >\n            <span class=\"mdi mdi-cctv\"></span>\n          </span>\n        <% end %>\n        <%= unless is_nil(@summary.locked) do %>\n          <span\n            class=\"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={if @summary.locked, do: gettext(\"Locked\"), else: gettext(\"Unlocked\")}\n          >\n            <span class={[\n              \"mdi\",\n              if(@summary.locked, do: \"mdi-lock\", else: \"mdi-lock-open-variant\")\n            ]}>\n            </span>\n          </span>\n        <% end %>\n        <%= if @summary.update_available do %>\n          <span\n            class=\"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={\n              gettext(\"Software Update available (%{version})\", version: @summary.update_version)\n            }\n          >\n            <span class=\"mdi mdi-gift-outline\"></span>\n          </span>\n        <% end %>\n        <%= unless is_nil(@summary.tpms_soft_warning_fl) or is_nil(@summary.tpms_soft_warning_fr) or is_nil(@summary.tpms_soft_warning_rl) or is_nil(@summary.tpms_soft_warning_rr) do %>\n          <%= if @summary.tpms_soft_warning_fl or @summary.tpms_soft_warning_fr or @summary.tpms_soft_warning_rl or @summary.tpms_soft_warning_rr do %>\n            <% tires = [\n              {:fl, {@summary.tpms_soft_warning_fl, @summary.tpms_pressure_fl}},\n              {:fr, {@summary.tpms_soft_warning_fr, @summary.tpms_pressure_fr}},\n              {:rl, {@summary.tpms_soft_warning_rl, @summary.tpms_pressure_rl}},\n              {:rr, {@summary.tpms_soft_warning_rr, @summary.tpms_pressure_rr}}\n            ] %>\n\n            <% tire_warnings =\n              Enum.filter(tires, fn {_tire, {warn, _}} -> warn end)\n              |> Enum.map(fn\n                {:fl, {true, val}} ->\n                  \"Front left (#{format_tpms(val, @settings.unit_of_pressure)})\"\n\n                {:fr, {true, val}} ->\n                  \"Front right (#{format_tpms(val, @settings.unit_of_pressure)})\"\n\n                {:rl, {true, val}} ->\n                  \"Rear left (#{format_tpms(val, @settings.unit_of_pressure)})\"\n\n                {:rr, {true, val}} ->\n                  \"Rear right (#{format_tpms(val, @settings.unit_of_pressure)})\"\n\n                _ ->\n                  nil\n              end)\n              |> Enum.filter(& &1) %>\n\n            <span\n              class=\"icon has-text-inherit has-tooltip-top has-tooltip-left-mobile\"\n              data-tooltip={\n                if length(tire_warnings) == 1 do\n                  \"Tire with low pressure: #{Enum.join(tire_warnings, \", \")}\"\n                else\n                  \"Tires with low pressure: #{Enum.join(tire_warnings, \", \")}\"\n                end\n              }\n            >\n              <span class=\"mdi mdi-car-tire-alert\"></span>\n            </span>\n          <% end %>\n        <% end %>\n        <%= if @summary.healthy == false do %>\n          <span\n            class=\"icon has-text-danger has-tooltip-top has-tooltip-left-mobile\"\n            data-tooltip={gettext(\"Health check failed\")}\n          >\n            <span class=\"mdi mdi-alert-box\"></span>\n          </span>\n        <% end %>\n      </div>\n    </div>\n    <div class=\"content\">\n      <table class=\"table is-narrow is-fullwidth thead-transparent\">\n        <thead>\n          <tr>\n            <th></th>\n            <th></th>\n          </tr>\n        </thead>\n        <tbody style=\"font-variant-numeric: tabular-nums;\">\n          <tr>\n            <td class=\"has-text-weight-medium\"><%= gettext(\"Status\") %></td>\n            <td>\n              <%= raw(\n                @translate_state.(@summary.state) <>\n                  unless is_nil(@duration) do\n                    \" #{gettext(\"for\")} \" <>\n                      case @duration do\n                        [a, b] -> \"#{a}<span class=\\\"duration-extended\\\">, #{b}</span>\"\n                        [a] -> a\n                      end\n                  else\n                    \"\"\n                  end\n              ) %>\n            </td>\n          </tr>\n          <%= if @summary.state == :charging and not is_nil(@summary.time_to_full_charge) do %>\n            <% current_time = Timex.now()\n\n            finish_time =\n              Timex.add(current_time, Timex.Duration.from_hours(@summary.time_to_full_charge))\n\n            local_finish_time = Timex.local(finish_time)\n\n            formatted_finish_time =\n              Timex.format!(local_finish_time, \"%Y-%m-%d %H:%M:%S\", :strftime) %>\n            <tr>\n              <td class=\"has-text-weight-medium\"><%= gettext(\"Remaining Time\") %></td>\n              <td>\n                <%= round(@summary.time_to_full_charge * 60 * 60)\n                |> Convert.sec_to_str()\n                |> Enum.reject(&String.ends_with?(&1, \"s\"))\n                |> Enum.join(\", \") %>\n              </td>\n            </tr>\n            <tr>\n              <td class=\"has-text-weight-medium\"><%= gettext(\"Expected Finish Time\") %></td>\n              <td><%= formatted_finish_time %></td>\n            </tr>\n          <% end %>\n          <%= unless is_nil(@summary.ideal_battery_range_km) do %>\n            <tr>\n              <td class=\"has-text-weight-medium\">\n                <%= case @settings.preferred_range do\n                  :ideal -> gettext(\"Range (ideal)\")\n                  :rated -> gettext(\"Range (rated)\")\n                end %>\n              </td>\n              <td>\n                <%= range =\n                  case @settings.preferred_range do\n                    :ideal -> @summary.ideal_battery_range_km\n                    :rated -> @summary.rated_battery_range_km\n                  end\n\n                if @settings.unit_of_length == :mi do\n                  \"#{Convert.km_to_miles(range, 1)} mi\"\n                else\n                  \"#{range} km\"\n                end %>\n              </td>\n            </tr>\n          <% end %>\n          <%= unless is_nil(@summary.est_battery_range_km) do %>\n            <tr>\n              <td class=\"has-text-weight-medium\"><%= gettext(\"Range (est.)\") %></td>\n              <td>\n                <%= if @settings.unit_of_length == :mi do\n                  \"#{Convert.km_to_miles(@summary.est_battery_range_km, 1)} mi\"\n                else\n                  \"#{@summary.est_battery_range_km} km\"\n                end %>\n              </td>\n            </tr>\n          <% end %>\n          <%= if @summary.state == :charging do %>\n            <%= unless is_nil(@summary.charge_energy_added) do %>\n              <tr>\n                <td class=\"has-text-weight-medium\"><%= gettext(\"Charged\") %></td>\n                <td><%= @summary.charge_energy_added %> kWh</td>\n              </tr>\n            <% end %>\n            <%= unless is_nil(@summary.charger_power) do %>\n              <tr>\n                <td class=\"has-text-weight-medium\"><%= gettext(\"Charger Power\") %></td>\n                <td><%= @summary.charger_power %> kW</td>\n              </tr>\n            <% end %>\n          <% end %>\n\n          <%= if @summary.plugged_in do %>\n            <%= unless @summary.scheduled_charging_start_time in [nil, :unknown] do %>\n              <tr>\n                <td class=\"has-text-weight-medium\"><%= gettext(\"Scheduled Charging\") %></td>\n                <td>\n                  <%= tag(:span,\n                    data: [date: @summary.scheduled_charging_start_time |> DateTime.to_iso8601()],\n                    phx_hook: \"LocalTime\",\n                    id: \"scheduled_start_time_#{@car.id}\"\n                  ) %>\n                </td>\n              </tr>\n            <% end %>\n            <%= if not is_nil(@summary.charge_limit_soc) do %>\n              <tr>\n                <td class=\"has-text-weight-medium\"><%= gettext(\"Charge Limit\") %></td>\n                <td><%= @summary.charge_limit_soc %>%</td>\n              </tr>\n            <% end %>\n          <% end %>\n          <%= unless is_nil(@summary.battery_level) do %>\n            <% {soc_text, tooltip} =\n              (fn ->\n                 {text, tooltip_battery_level} =\n                   case {@summary.battery_level, @summary.usable_battery_level} do\n                     {lvl, lvl} -> {\"#{lvl}%\", lvl}\n                     {lvl, nil} -> {\"#{lvl}%\", lvl}\n                     {lvl, usable_lvl} -> {\"#{usable_lvl}% (#{lvl}%)\", usable_lvl}\n                   end\n\n                 current_range =\n                   case @settings.preferred_range do\n                     :ideal -> @summary.ideal_battery_range_km\n                     :rated -> @summary.rated_battery_range_km\n                   end\n\n                 tooltip =\n                   if is_number(current_range) and\n                        is_number(tooltip_battery_level) and tooltip_battery_level > 0 do\n                     r100 = current_range / tooltip_battery_level * 100\n\n                     r100_str =\n                       if @settings.unit_of_length == :mi do\n                         \"#{Convert.km_to_miles(r100, 0)} mi\"\n                       else\n                         \"#{round(r100)} km\"\n                       end\n\n                     gettext(\"≈ %{range} at 100%\", range: r100_str)\n                   end\n\n                 {text, tooltip}\n               end).() %>\n            <tr>\n              <td class=\"has-text-weight-medium\"><%= gettext(\"State of Charge\") %></td>\n              <td>\n                <span class=\"has-tooltip-top has-tooltip-right-desktop\" data-tooltip={tooltip}>\n                  <%= soc_text %>\n                </span>\n              </td>\n            </tr>\n          <% end %>\n          <%= if @summary.state == :driving and not is_nil(@summary.speed) do %>\n            <tr>\n              <td class=\"has-text-weight-medium\"><%= gettext(\"Speed\") %></td>\n              <td>\n                <%= if @settings.unit_of_length == :mi do\n                  \"#{Convert.km_to_miles(@summary.speed, 0)} mph\"\n                else\n                  \"#{@summary.speed} km/h\"\n                end %>\n              </td>\n            </tr>\n          <% end %>\n          <%= if @summary.state not in [:asleep, :offline, :suspended] or DateTime.diff(DateTime.utc_now(), @summary.since) < 30*60 do %>\n            <%= unless is_nil(@summary.outside_temp) do %>\n              <tr>\n                <td class=\"has-text-weight-medium\"><%= gettext(\"Outside Temperature\") %></td>\n                <td>\n                  <%= if @settings.unit_of_temperature == :F do\n                    \"#{Convert.celsius_to_fahrenheit(@summary.outside_temp, 1)} °F\"\n                  else\n                    \"#{@summary.outside_temp} °C\"\n                  end %>\n                </td>\n              </tr>\n            <% end %>\n            <%= unless is_nil(@summary.inside_temp) do %>\n              <tr>\n                <td class=\"has-text-weight-medium\"><%= gettext(\"Inside Temperature\") %></td>\n                <td>\n                  <%= if @settings.unit_of_temperature == :F do\n                    \"#{Convert.celsius_to_fahrenheit(@summary.inside_temp, 1)} °F\"\n                  else\n                    \"#{@summary.inside_temp} °C\"\n                  end %>\n                </td>\n              </tr>\n            <% end %>\n          <% end %>\n          <%= unless is_nil(@summary.odometer) do %>\n            <tr>\n              <td class=\"has-text-weight-medium\"><%= gettext(\"Mileage\") %></td>\n              <td>\n                <%= if @settings.unit_of_length == :mi do\n                  \"#{Convert.km_to_miles(@summary.odometer, 0)} mi\"\n                else\n                  \"#{round(@summary.odometer)} km\"\n                end %>\n              </td>\n            </tr>\n          <% end %>\n          <%= unless is_nil(@summary.version) do %>\n            <tr>\n              <td class=\"has-text-weight-medium\"><%= gettext(\"Version\") %></td>\n              <td>\n                <%= link(@summary.version,\n                  to:\n                    \"https://www.notateslaapp.com/software-updates/version/#{@summary.version}/release-notes\",\n                  target: \"_blank\",\n                  rel: \"noopener noreferrer\"\n                ) %>\n              </td>\n            </tr>\n          <% end %>\n        </tbody>\n      </table>\n      <%= cond do\n        not is_nil(@error) ->\n          link(@error,\n            to: \"#\",\n            class: \"button is-danger is-small is-outlined is-fullwidth\",\n            disabled: true\n          )\n\n        @summary.state == :online and\n          !@summary.sentry_mode and\n          !@summary.is_user_present and\n          !@summary.is_preconditioning and\n            @summary.climate_keeper_mode == \"off\" ->\n          link(gettext(\"try to sleep\"),\n            to: \"#\",\n            phx_click: \"suspend_logging\",\n            class:\n              \"button is-info is-small is-outlined is-fullwidth\" <>\n                if(@loading, do: \" is-loading\", else: \"\")\n          )\n\n        @summary.state == :suspended ->\n          link(gettext(\"cancel sleep attempt\"),\n            to: \"#\",\n            phx_click: \"resume_logging\",\n            class:\n              \"button is-info is-small is-outlined is-fullwidth\" <>\n                if(@loading, do: \" is-loading\", else: \"\")\n          )\n\n        true ->\n          nil\n      end %>\n    </div>\n  </div>\n</div>\n"
  },
  {
    "path": "lib/teslamate_web/live/charge_live/cost.ex",
    "content": "defmodule TeslaMateWeb.ChargeLive.Cost do\n  use TeslaMateWeb, :live_view\n\n  require Logger\n\n  alias TeslaMate.Locations.{GeoFence, Address}\n  alias TeslaMate.Log.ChargingProcess\n  alias TeslaMate.Log\n\n  use Gettext, backend: TeslaMateWeb.Gettext\n\n  on_mount {TeslaMateWeb.InitAssigns, :locale}\n\n  @impl true\n  def mount(%{\"id\" => id}, _session, socket) do\n    charging_process = Log.get_charging_process!(id)\n\n    socket =\n      socket\n      |> assign(notification: nil, page_title: gettext(\"Charge Cost\"))\n      |> assign_charging_process(charging_process)\n\n    {:ok, socket}\n  end\n\n  @impl true\n  def handle_params(_params, uri, socket) do\n    referrer =\n      case {get_connect_params(socket)[\"referrer\"], uri} do\n        {uri, uri} -> nil\n        {\"\", _uri} -> nil\n        {referrer, _} when is_binary(referrer) -> referrer\n        _ -> nil\n      end\n\n    {:noreply, assign(socket, redirect_to: referrer || Routes.car_path(socket, :index))}\n  end\n\n  @impl true\n  def handle_event(\"save\", %{\"charging_process\" => params}, socket) do\n    params =\n      case params do\n        %{\"cost\" => cost, \"mode\" => \"per_kwh\"} when is_binary(cost) ->\n          kwh =\n            socket.assigns.charging_process\n            |> Map.take([:charge_energy_added, :charge_energy_used])\n            |> Map.values()\n            |> Enum.reject(&is_nil/1)\n            |> case do\n              [k0, k1] -> Decimal.max(k0, k1)\n              [kwh] -> kwh\n              [] -> nil\n            end\n\n          with true <- match?(%Decimal{}, kwh),\n               {cost_per_kwh, \"\"} <- Float.parse(cost) do\n            cost =\n              cost_per_kwh\n              |> Decimal.from_float()\n              |> Decimal.mult(kwh)\n\n            Map.put(params, \"cost\", cost)\n          else\n            _ -> params\n          end\n\n        %{\"cost\" => cost, \"mode\" => \"per_minute\"} when is_binary(cost) ->\n          with %ChargingProcess{duration_min: minutes} when is_number(minutes) <-\n                 socket.assigns.charging_process,\n               {cost_per_minute, \"\"} <- Float.parse(cost) do\n            cost =\n              cost_per_minute\n              |> Decimal.from_float()\n              |> Decimal.mult(minutes)\n\n            Map.put(params, \"cost\", cost)\n          else\n            _ -> params\n          end\n\n        %{\"cost\" => _} ->\n          params\n      end\n\n    case Log.update_charging_process(socket.assigns.charging_process, params) do\n      {:ok, charging_process} ->\n        notification = create_notification(:success, gettext(\"Saved!\"))\n\n        socket =\n          socket\n          |> assign(notification: notification)\n          |> assign_charging_process(charging_process)\n\n        {:noreply, socket}\n\n      {:error, %Ecto.Changeset{} = changeset} ->\n        {:noreply, assign(socket, changeset: changeset)}\n    end\n  end\n\n  @impl true\n  def handle_info({:remove_notification, id}, %{assigns: %{notification: %{id: id}}} = socket) do\n    socket =\n      socket\n      |> assign(notification: nil)\n      |> assign_charging_process(socket.assigns.charging_process, nil)\n\n    {:noreply, socket}\n  end\n\n  def handle_info({:remove_notification, _id}, socket) do\n    {:noreply, socket}\n  end\n\n  # Private\n\n  defp assign_charging_process(socket, %ChargingProcess{} = c, mode \\\\ \"total\") do\n    assign(socket, charging_process: c, changeset: ChargingProcess.changeset(c, %{mode: mode}))\n  end\n\n  defp create_notification(key, msg) do\n    id = make_ref()\n    Process.send_after(self(), {:remove_notification, id}, 2500)\n    %{id: id, message: msg, key: key}\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/live/charge_live/cost.html.heex",
    "content": "<nav class=\"breadcrumb\" aria-label=\"breadcrumbs\">\n  <ul>\n    <li><.link navigate={~p\"/\"}><%= gettext(\"Home\") %></.link></li>\n    <li class=\"is-active\"><.link navigate=\"\"><%= gettext(\"Charge Cost\") %></.link></li>\n  </ul>\n</nav>\n\n<.form :let={f} for={@changeset} phx-submit=\"save\" class=\"charging_process\">\n  <div class=\"field is-horizontal\">\n    <div class=\"field-label\"></div>\n    <div class=\"field-body\">\n      <div class=\"field\">\n        <div class=\"card-image\">\n          <figure\n            id={\"map_#{@charging_process.id}_container\"}\n            data-id={@charging_process.id}\n            data-zoom=\"1\"\n            phx-update=\"ignore\"\n            phx-hook=\"SimpleMap\"\n          >\n            <div\n              id={\"map_#{@charging_process.id}\"}\n              class=\"map\"\n              style=\"height: 250px; position: relative;\"\n            />\n          </figure>\n          <%= text_input(:position, \"#{@charging_process.id}\",\n            value:\n              \"#{@charging_process.position.latitude},#{@charging_process.position.longitude}\",\n            phx_hook: \"TriggerChange\",\n            id: \"position_#{@charging_process.id}\",\n            class: \"is-hidden\",\n            disabled: true\n          ) %>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"field is-horizontal\" style=\"margin-top: -6px;\">\n    <div class=\"field-label is-normal\"></div>\n    <div class=\"field-body\">\n      <div class=\"field is-grouped is-grouped-multiline\">\n        <%= unless is_nil(@charging_process.end_date) do %>\n          <div class=\"control\">\n            <div id=\"date-tag\" class=\"tags has-addons\">\n              <span class=\"tag is-primary is-light\">\n                <span class=\"icon\"><span class=\"mdi mdi-calendar-range\"></span></span>\n              </span>\n              <%= content_tag(:span, \"–\",\n                data: [\n                  start_date: DateTime.to_iso8601(@charging_process.start_date),\n                  end_date: DateTime.to_iso8601(@charging_process.end_date)\n                ],\n                phx_hook: \"LocalTimeRange\",\n                id: \"date_range_#{@charging_process.id}\",\n                class: \"tag\"\n              ) %>\n            </div>\n          </div>\n        <% end %>\n\n        <div class=\"control\">\n          <div id=\"car-tag\" class=\"tags has-addons\">\n            <span class=\"tag is-info is-light\">\n              <span class=\"icon\"><span class=\"mdi mdi-car\"></span></span>\n            </span>\n            <span class=\"tag\"><%= @charging_process.car.name %></span>\n          </div>\n        </div>\n\n        <%= unless is_nil(@charging_process.charge_energy_added) do %>\n          <div class=\"control\">\n            <div id=\"energy-tag\" class=\"tags has-addons\">\n              <span class=\"tag is-warning is-light\">\n                <span class=\"icon\"><span class=\"mdi mdi-flash\"></span></span>\n              </span>\n              <span class=\"tag\">\n                <%= Decimal.round(\n                  Decimal.max(\n                    @charging_process.charge_energy_used || 0,\n                    @charging_process.charge_energy_added\n                  ),\n                  2\n                ) %> kWh\n              </span>\n            </div>\n          </div>\n        <% end %>\n\n        <%= unless is_nil(@charging_process.duration_min) do %>\n          <div class=\"control\">\n            <div id=\"duration-tag\" class=\"tags has-addons\">\n              <span class=\"tag is-light\">\n                <span class=\"icon\"><span class=\"mdi mdi-clock\"></span></span>\n              </span>\n              <span class=\"tag\"><%= @charging_process.duration_min %> min</span>\n            </div>\n          </div>\n        <% end %>\n\n        <div class=\"control\">\n          <div id=\"location-tag\" class=\"tags has-addons\">\n            <span class=\"tag is-danger is-light\">\n              <span class=\"icon\"><span class=\"mdi mdi-map-marker\"></span></span>\n            </span>\n            <span class=\"tag\">\n              <%= case @charging_process do\n                %ChargingProcess{geofence: %GeoFence{name: name}} ->\n                  name\n\n                %ChargingProcess{\n                  address: %Address{name: name, road: road, house_number: no, city: city}\n                } ->\n                  [name || [road, no], city]\n                  |> List.flatten()\n                  |> Enum.reject(&is_nil/1)\n                  |> Enum.join(\", \")\n\n                _ ->\n                  \"???\"\n              end %>\n            </span>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"field is-horizontal\">\n    <div class=\"field-label is-normal\">\n      <%= label(f, :cost, gettext(\"Cost\"), class: \"label\") %>\n    </div>\n    <div class=\"field-body\">\n      <div class=\"field has-addons\">\n        <p class=\"control\">\n          <span class=\"select\">\n            <%= select(f, :mode, [\n              {gettext(\"Total\"), :total},\n              {gettext(\"Per kWh\"), :per_kwh},\n              {gettext(\"Per Minute\"), :per_minute}\n            ]) %>\n          </span>\n        </p>\n        <p class=\"control is-expanded\">\n          <%= text_input(f, :cost,\n            class: \"input\",\n            type: :number,\n            inputmode: :decimal,\n            step: 0.01,\n            placeholder: gettext(\"Enter charge cost\"),\n            autofocus: true\n          ) %>\n        </p>\n        <p class=\"help is-danger\"><%= error_tag(f, :cost) %></p>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"field is-horizontal mt-5\">\n    <div class=\"field-label\"></div>\n    <div class=\"field-body\">\n      <div class=\"field is-grouped\">\n        <div class=\"control\">\n          <%= link(gettext(\"Back\"), to: @redirect_to, class: \"button\") %>\n        </div>\n        <div class=\"control\" style=\"min-width: 300px;\">\n          <%= submit(if(is_nil(@notification), do: gettext(\"Save\"), else: @notification.message),\n            phx_disable_with: gettext(\"Saving...\"),\n            class: [\n              \"button\",\n              if(is_nil(@notification), do: \"is-info\", else: \"is-#{@notification.key}\")\n            ]\n          ) %>\n        </div>\n      </div>\n    </div>\n  </div>\n</.form>\n"
  },
  {
    "path": "lib/teslamate_web/live/geofence_live/form.ex",
    "content": "defmodule TeslaMateWeb.GeoFenceLive.Form do\n  use TeslaMateWeb, :live_view\n\n  require Logger\n\n  alias TeslaMateWeb.GeoFenceLive\n\n  alias TeslaMate.{Log, Locations, Settings}\n  alias TeslaMate.Settings.GlobalSettings\n  alias TeslaMate.Locations.GeoFence\n  alias TeslaMate.Log.Position\n\n  on_mount {TeslaMateWeb.InitAssigns, :locale}\n\n  @impl true\n  def mount(%{\"id\" => id}, %{\"settings\" => settings}, socket) do\n    geofence = Locations.get_geofence!(id)\n\n    {:ok, base_assigns(socket, geofence, settings, :edit)}\n  end\n\n  def mount(%{\"lat\" => lat, \"lng\" => lng}, %{\"settings\" => settings}, socket) do\n    {:ok, settings} = set_grafana_url(settings, socket)\n\n    geofence = %GeoFence{\n      radius: 20,\n      latitude: lat,\n      longitude: lng\n    }\n\n    {:ok, base_assigns(socket, geofence, settings, :new)}\n  end\n\n  def mount(_params, %{\"settings\" => settings}, socket) do\n    %{latitude: lat, longitude: lng} =\n      case Log.get_latest_position() do\n        %Position{latitude: lat, longitude: lng} -> %{latitude: lat, longitude: lng}\n        nil -> %{latitude: 0.0, longitude: 0.0}\n      end\n\n    geofence = %GeoFence{\n      radius: 20,\n      latitude: lat,\n      longitude: lng\n    }\n\n    {:ok, base_assigns(socket, geofence, settings, :new)}\n  end\n\n  @impl true\n  def handle_event(\"validate\", %{\"geo_fence\" => params}, socket) do\n    changeset =\n      socket.assigns.geofence\n      |> Locations.change_geofence(params)\n      |> Map.put(:action, :update)\n\n    {:noreply, assign(socket, changeset: changeset, show_errors: false)}\n  end\n\n  def handle_event(\"save\", %{\"geo_fence\" => params}, socket) do\n    with {:ok, geofence, changeset} <- validate(params, socket),\n         {:ok, socket} <- show_modal_or_save(geofence, changeset, socket) do\n      {:noreply, socket}\n    else\n      {:error, %Ecto.Changeset{} = changeset} ->\n        {:noreply, assign(socket, changeset: changeset, show_errors: true)}\n    end\n  end\n\n  def handle_event(\"calc-costs\", %{\"result\" => result}, socket) do\n    case save(socket) do\n      {:error, %Ecto.Changeset{} = changeset} ->\n        {:noreply, assign(socket, changeset: changeset, show_modal: false, show_errors: true)}\n\n      {:ok, socket} ->\n        if result == \"yes\" do\n          :ok = Locations.calculate_charge_costs(socket.assigns.geofence)\n        end\n\n        {:noreply, socket}\n    end\n  end\n\n  def handle_event(\"close-modal\", _, socket) do\n    {:noreply, assign(socket, show_modal: false)}\n  end\n\n  def handle_event(\"keyup\", %{\"code\" => \"Escape\"}, socket) do\n    {:noreply, assign(socket, show_modal: false)}\n  end\n\n  def handle_event(\"keyup\", _, socket) do\n    {:noreply, socket}\n  end\n\n  # Private\n\n  defp base_assigns(socket, %GeoFence{} = geofence, %GlobalSettings{} = settings, action)\n       when action in [:new, :edit] do\n    assigns = %{\n      settings: settings,\n      geofence: geofence,\n      changeset: Locations.change_geofence(geofence),\n      car_settings: Settings.get_car_settings(),\n      charges_without_costs: 0,\n      show_errors: false,\n      show_modal: false,\n      action: action,\n      connected?: connected?(socket),\n      page_title: geofence.name || gettext(\"Geo-Fences\")\n    }\n\n    assign(socket, assigns)\n  end\n\n  defp validate(params, %{assigns: assigns}) do\n    changeset = Locations.change_geofence(assigns.geofence, params)\n\n    with {:ok, geofence} <- Ecto.Changeset.apply_action(changeset, :update) do\n      {:ok, geofence, changeset}\n    end\n  end\n\n  defp show_modal_or_save(%GeoFence{} = geofence, changeset, socket) do\n    has_cost = geofence.session_fee != nil or geofence.cost_per_unit != nil\n\n    position_or_cost_changed =\n      has_changed?(changeset, [\n        :cost_per_unit,\n        :session_fee,\n        :billing_type,\n        :latitude,\n        :longitude,\n        :radius\n      ])\n\n    with true <- has_cost and position_or_cost_changed,\n         n when n > 0 <- Locations.count_charging_processes_without_costs(geofence) do\n      socket =\n        assign(socket,\n          show_modal: true,\n          changeset: changeset,\n          charges_without_costs: n\n        )\n\n      {:ok, socket}\n    else\n      _ -> socket |> assign(changeset: changeset) |> save()\n    end\n  end\n\n  defp save(%{assigns: assigns} = socket) do\n    %{changeset: %{params: params}, action: action, geofence: geofence} = assigns\n\n    with {:ok, %GeoFence{name: name} = geofence} <-\n           (case action do\n              :new -> Locations.create_geofence(params)\n              :edit -> Locations.update_geofence(geofence, params)\n            end) do\n      socket =\n        socket\n        |> assign(geofence: geofence)\n        |> put_flash(:success, flash_msg(action, name))\n        |> push_navigate(to: Routes.live_path(socket, GeoFenceLive.Index))\n\n      {:ok, socket}\n    end\n  end\n\n  defp set_grafana_url(settings, socket) do\n    with nil <- settings.grafana_url,\n         %{\"referrer\" => referrer} when is_binary(referrer) <- get_connect_params(socket),\n         %URI{path: path} = url when is_binary(path) <- URI.parse(referrer),\n         [_, _, _ | path] <- path |> String.split(\"/\") |> Enum.reverse(),\n         url = %URI{url | path: Enum.join([nil | path], \"/\"), query: nil} |> URI.to_string(),\n         {:ok, settings} <- Settings.update_global_settings(settings, %{grafana_url: url}) do\n      {:ok, settings}\n    else\n      {:error, reason} -> Logger.warning(\"Updating settings failed: #{inspect(reason)}\")\n      _ -> {:ok, settings}\n    end\n  end\n\n  defp has_changed?(%Ecto.Changeset{changes: changes}, keys) do\n    length(keys -- Map.keys(changes)) < length(keys)\n  end\n\n  defp flash_msg(:new, name), do: gettext(\"Geo-fence \\\"%{name}\\\" created\", name: name)\n  defp flash_msg(:edit, name), do: gettext(\"Geo-fence \\\"%{name}\\\" updated\", name: name)\nend\n"
  },
  {
    "path": "lib/teslamate_web/live/geofence_live/form.html.heex",
    "content": "<nav class=\"breadcrumb\" aria-label=\"breadcrumbs\">\n  <ul>\n    <li><.link navigate={~p\"/\"}><%= gettext(\"Home\") %></.link></li>\n    <li><.link navigate={~p\"/geo-fences\"}><%= gettext(\"Geo-Fences\") %></.link></li>\n    <li class=\"is-active\">\n      <a href=\"#\">\n        <%= case @action do\n          :new -> Ecto.Changeset.get_field(@changeset, :name) || \"…\"\n          :edit -> @geofence.name\n        end %>\n      </a>\n    </li>\n  </ul>\n</nav>\n\n<.form :let={f} for={@changeset} phx-change=\"validate\" phx-submit=\"save\" class=\"geofence\">\n  <div class=\"field is-horizontal\">\n    <div class=\"field-label is-normal\">\n      <%= label(f, :position, gettext(\"Position\"), class: \"label\") %>\n    </div>\n    <div class=\"field-body\">\n      <div class=\"field\">\n        <div class=\"control\">\n          <div id=\"map_container\" phx-update=\"ignore\">\n            <figure id=\"map\" style=\"height: 400px; position: relative;\" phx-hook=\"Map\"></figure>\n          </div>\n          <%= hidden_input(f, :latitude) %>\n          <%= hidden_input(f, :longitude) %>\n          <%= hidden_input(f, :radius) %>\n        </div>\n        <%= if @show_errors do %>\n          <p class=\"help is-danger\">\n            <%= error_tag(f, :address_id) %>\n            <%= error_tag(f, :latitude) %>\n            <%= error_tag(f, :longitude) %>\n            <%= error_tag(f, :radius) %>\n          </p>\n        <% end %>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"field is-horizontal\">\n    <div class=\"field-label is-normal\">\n      <%= label class: \"label\" do\n        gettext(\"Name\")\n      end %>\n    </div>\n    <div class=\"field-body\">\n      <div class=\"field is-expanded\">\n        <div class=\"control\">\n          <%= text_input(f, :name, class: \"input\", placeholder: gettext(\"Name\")) %>\n        </div>\n        <%= if @show_errors do %>\n          <p class=\"help is-danger\"><%= error_tag(f, :name) %></p>\n        <% end %>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"field is-horizontal mt-4\">\n    <div class=\"field-label is-normal\">\n      <%= label class: \"label\" do\n        gettext(\"Cost\")\n      end %>\n    </div>\n    <div class=\"field-body\">\n      <div class=\"field has-addons\">\n        <p class=\"control\">\n          <span class=\"select\">\n            <%= select(f, :billing_type, [\n              {gettext(\"Per kWh\"), :per_kwh},\n              {gettext(\"Per Minute\"), :per_minute}\n            ]) %>\n          </span>\n        </p>\n        <p class=\"control is-expanded\">\n          <%= text_input(f, :cost_per_unit,\n            class: \"input\",\n            type: :number,\n            inputmode: :decimal,\n            step: 0.0001,\n            placeholder: \"0.00\"\n          ) %>\n        </p>\n        <%= if @show_errors do %>\n          <p class=\"help is-danger\"><%= error_tag(f, :cost_per_unit) %></p>\n        <% end %>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"field is-horizontal\">\n    <div class=\"field-label is-normal\">\n      <%= label class: \"label\" do\n        gettext(\"Session fee\")\n      end %>\n    </div>\n    <div class=\"field-body\">\n      <div class=\"field\">\n        <div class=\"control\">\n          <%= text_input(f, :session_fee,\n            class: \"input\",\n            type: :number,\n            inputmode: :decimal,\n            min: 0.0,\n            step: 0.01,\n            placeholder: \"0.00\"\n          ) %>\n        </div>\n        <%= if @show_errors do %>\n          <p class=\"help is-danger\"><%= error_tag(f, :session_fee) %></p>\n        <% end %>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"field is-horizontal mt-5\">\n    <div class=\"field-label\"></div>\n    <div class=\"field-body\">\n      <div class=\"field is-grouped\">\n        <div class=\"control\">\n          <.link navigate={Routes.live_path(@socket, GeoFenceLive.Index)} class=\"button\">\n            <%= gettext(\"Back\") %>\n          </.link>\n        </div>\n        <div class=\"control\">\n          <%= submit(gettext(\"Save\"),\n            phx_disable_with: gettext(\"Saving...\"),\n            class: \"button is-info\"\n          ) %>\n        </div>\n      </div>\n    </div>\n  </div>\n</.form>\n\n<div\n  id=\"charging_cost_modal\"\n  class={[\n    \"modal modal-fx-fadeInScale\",\n    if(@show_modal, do: \"is-active\"),\n    if(not @connected?, do: \"is-hidden\")\n  ]}\n  phx-hook=\"Modal\"\n>\n  <div\n    class=\"modal-background\"\n    phx-click=\"close-modal\"\n    {if @show_modal, do: [phx_window_keyup: \"keyup\"], else: []}\n  >\n  </div>\n  <div class=\"modal-card modal-content\">\n    <header class=\"modal-card-head\">\n      <p class=\"modal-card-title\"><%= gettext(\"Charging Costs\") %></p>\n      <button class=\"button is-text is-rounded\" aria-label=\"close\" phx-click=\"close-modal\">\n        <span class=\"icon is-small\"><i class=\"mdi mdi-close\"></i></span>\n      </button>\n    </header>\n    <section class=\"modal-card-body\">\n      <p>\n        <%= raw(\n          ngettext(\n            \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\",\n            \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\",\n            @charges_without_costs,\n            n: @charges_without_costs\n          )\n        ) %>\n      </p>\n    </section>\n    <footer class=\"modal-card-foot\">\n      <button class=\"button\" phx-click=\"calc-costs\" phx-value-result=\"no\">\n        <%= gettext(\"Continue\") %>\n      </button>\n      <button class=\"button is-info\" phx-click=\"calc-costs\" phx-value-result=\"yes\">\n        <%= gettext(\"Add costs retroactively\") %>\n      </button>\n    </footer>\n  </div>\n</div>\n"
  },
  {
    "path": "lib/teslamate_web/live/geofence_live/index.ex",
    "content": "defmodule TeslaMateWeb.GeoFenceLive.Index do\n  use TeslaMateWeb, :live_view\n\n  alias TeslaMate.{Locations, Settings}\n  alias Settings.GlobalSettings\n\n  alias TeslaMate.Convert\n\n  on_mount {TeslaMateWeb.InitAssigns, :locale}\n\n  @impl true\n  def mount(_params, %{\"settings\" => settings}, socket) do\n    unit_of_length =\n      case settings do\n        %GlobalSettings{unit_of_length: :km} -> :m\n        %GlobalSettings{unit_of_length: :mi} -> :ft\n      end\n\n    assigns = %{\n      geofences: Locations.list_geofences(),\n      unit_of_length: unit_of_length,\n      page_title: gettext(\"Geo-Fences\")\n    }\n\n    {:ok, assign(socket, assigns)}\n  end\n\n  @impl true\n  def handle_event(\"delete\", %{\"id\" => id}, %{assigns: %{geofences: geofences}} = socket) do\n    {:ok, deleted_geofence} =\n      Locations.get_geofence!(id)\n      |> Locations.delete_geofence()\n\n    geofences = Enum.reject(geofences, &(&1.id == deleted_geofence.id))\n\n    {:noreply, assign(socket, geofences: geofences)}\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/live/geofence_live/index.html.heex",
    "content": "<nav class=\"breadcrumb\" aria-label=\"breadcrumbs\">\n  <ul>\n    <li><.link navigate={~p\"/\"}><%= gettext(\"Home\") %></.link></li>\n    <li class=\"is-active\">\n      <.link navigate={~p\"/geo-fences\"}><%= gettext(\"Geo-Fences\") %></.link>\n    </li>\n  </ul>\n</nav>\n\n<.link\n  navigate={Routes.live_path(@socket, TeslaMateWeb.GeoFenceLive.Form)}\n  class=\"button is-info is-small is-rounded is-pulled-right mb-4\"\n>\n  <span><%= gettext(\"Create\") %></span>\n  <span class=\"icon\">\n    <span class=\"mdi mdi-plus\"></span>\n  </span>\n</.link>\n\n<table class=\"table is-fullwidth\">\n  <thead class=\"is-hidden-mobile\">\n    <tr>\n      <th><%= gettext(\"Name\") %></th>\n      <th><%= gettext(\"Position\") %></th>\n      <th><%= gettext(\"Radius\") %></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody style=\"font-variant-numeric: tabular-nums;\">\n    <%= for geofence <- @geofences do %>\n      <tr>\n        <td class=\"has-text-weight-medium is-truncated\" style=\"min-width: 0; max-width: 180px\">\n          <%= geofence.name %>\n        </td>\n        <td class=\"is-hidden-mobile has-text-weight-light\" style=\"width: 30%\">\n          <%= geofence.latitude %>, <%= geofence.longitude %>\n        </td>\n        <td class=\"is-hidden-mobile has-text-weight-light\" style=\"width: 10%\">\n          <%= case @unit_of_length do\n            :ft -> geofence.radius |> Convert.m_to_ft() |> round()\n            :m -> geofence.radius |> round()\n          end %> <%= @unit_of_length %>\n        </td>\n        <td>\n          <div class=\"field is-grouped is-pulled-right\">\n            <p class=\"control\">\n              <.link\n                navigate={Routes.live_path(@socket, TeslaMateWeb.GeoFenceLive.Form, geofence, [])}\n                class=\"button is-info is-small is-inverted is-light\"\n              >\n                <span class=\"icon\"><span class=\"mdi mdi-square-edit-outline\"></span></span>\n              </.link>\n            </p>\n            <p class=\"control\">\n              <%= link(raw(\"<span class='icon'><span class='mdi mdi-trash-can'></span></span>\"),\n                to: \"#\",\n                phx_hook: \"ConfirmGeoFenceDeletion\",\n                data: [\n                  id: geofence.id,\n                  msg: gettext(\"Delete '%{geo_fence}'?\", geo_fence: geofence.name)\n                ],\n                type: \"button\",\n                id: \"delete_#{geofence.id}\",\n                class: \"button is-danger is-small is-inverted is-light\"\n              ) %>\n            </p>\n          </div>\n        </td>\n      </tr>\n    <% end %>\n  </tbody>\n</table>\n"
  },
  {
    "path": "lib/teslamate_web/live/import_live/index.ex",
    "content": "defmodule TeslaMateWeb.ImportLive.Index do\n  use TeslaMateWeb, :live_view\n\n  defmodule Settings do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    schema(\"settings\", do: field(:timezone, :string))\n\n    def changeset(attrs), do: cast(%__MODULE__{}, attrs, [:timezone])\n    def apply(changeset), do: apply_changes(changeset)\n  end\n\n  alias TeslaMate.Import\n\n  on_mount {TeslaMateWeb.InitAssigns, :locale}\n\n  @impl true\n  def mount(_params, %{\"settings\" => _}, socket) do\n    tz =\n      if connected?(socket) do\n        :ok = Import.subscribe()\n        get_connect_params(socket)[\"tz\"]\n      end\n\n    if Import.enabled?() do\n      timezones = Timex.timezones()\n      timezone = get_timezone() || Enum.find(timezones, &match?(^tz, &1))\n\n      socket =\n        socket\n        |> assign(status: Import.get_status())\n        |> assign(changeset: Settings.changeset(%{timezone: timezone}))\n        |> assign(timezones: timezones, page_title: gettext(\"Import\"))\n\n      {:ok, socket}\n    else\n      {:ok, redirect(socket, to: Routes.car_path(socket, :index))}\n    end\n  end\n\n  @impl true\n  def handle_event(\"change\", %{\"settings\" => attrs}, socket) do\n    {:noreply, assign(socket, changeset: Settings.changeset(attrs))}\n  end\n\n  def handle_event(\n        \"import\",\n        %{\"settings\" => attrs},\n        %{assigns: %{status: %Import.Status{} = status}} = socket\n      ) do\n    %Settings{timezone: tz} =\n      attrs\n      |> Settings.changeset()\n      |> Settings.apply()\n\n    :ok = Import.run(tz)\n\n    {:noreply, assign(socket, status: %{status | state: :running})}\n  end\n\n  def handle_event(\"reload\", _params, socket) do\n    :ok = Import.reload_directory()\n    {:noreply, socket}\n  end\n\n  @impl true\n  def handle_info(%Import.Status{} = status, socket) do\n    {:noreply, assign(socket, status: status)}\n  end\n\n  ## Private\n\n  defp get_timezone do\n    case Timex.local() do\n      %DateTime{time_zone: tz} -> tz\n      _ -> nil\n    end\n  rescue\n    _ ->\n      # https://github.com/bitwalker/timex/issues/521\n      nil\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/live/import_live/index.html.heex",
    "content": "<nav class=\"breadcrumb\" aria-label=\"breadcrumbs\">\n  <ul>\n    <li><.link navigate={~p\"/\"}><%= gettext(\"Home\") %></.link></li>\n    <li class=\"is-active\"><.link navigate=\"\"><%= gettext(\"TeslaFi Import\") %></.link></li>\n  </ul>\n</nav>\n\n<div class=\"container is-flex mb-3\" style=\"align-items: center; justify-content: space-between;\">\n  <h2 class=\"title is-4 is-marginless\">\n    <%= ngettext(\n      \"Found %{count} file\",\n      \"Found %{count} files\",\n      length(@status.files),\n      count: length(@status.files)\n    ) %>\n  </h2>\n  <%= link(raw(\"<span class='icon'><span class='mdi mdi-reload'></span></span>\"),\n    to: \"#\",\n    type: \"button\",\n    class: \"button is-text is-inverted\",\n    phx_click: \"reload\",\n    disabled: @status.state != :idle\n  ) %>\n</div>\n\n<div class=\"table-container\">\n  <table class=\"table is-narrow is-hoverable is-fullwidth\">\n    <thead></thead>\n    <tbody>\n      <%= for %{path: path, date: date, complete: complete} <- @status.files do %>\n        <% {year, month} =\n          with [year, month] <- date,\n               month = month |> to_string() |> String.pad_leading(2, \"0\") do\n            {year, month}\n          else\n            _ -> {\"????\", \"??\"}\n          end %>\n        <tr>\n          <td style=\"font-variant-numeric: tabular-nums;\"><%= \"#{month}/#{year}\" %></td>\n          <td><%= Path.absname(path) %></td>\n          <td class=\"has-text-centered\" style=\"min-width: 30px;\">\n            <span class=\"spinner\">\n              <%= case {@status.state, complete} do %>\n                <% {:running, true}   -> %>\n                  <span class=\"icon has-text-success\">\n                    <span class=\"mdi mdi-check-bold\"></span>\n                  </span>\n                <% {:running, false}  -> %>\n                  <%= content_tag(:span, nil, class: \"is-loading\") %>\n                <% {:error, true}     -> %>\n                  <span class=\"icon has-text-success\">\n                    <span class=\"mdi mdi-check-bold\"></span>\n                  </span>\n                <% {:error, false}    -> %>\n                  <span class=\"icon has-text-danger\">\n                    <span class=\"mdi mdi-alert-circle\"></span>\n                  </span>\n                <% {:complete, true } -> %>\n                  <span class=\"icon has-text-success\">\n                    <span class=\"mdi mdi-check-bold\"></span>\n                  </span>\n                <% {:complete, false} -> %>\n                  <span class=\"icon has-text-info\">\n                    <span class=\"mdi mdi-debug-step-over\"></span>\n                  </span>\n                <% {:idle, _} -> %>\n              <% end %>\n            </span>\n          </td>\n        </tr>\n      <% end %>\n    </tbody>\n  </table>\n</div>\n\n<%= if @status.state == :idle do %>\n  <.form :let={f} for={@changeset} phx-change=\"change\" phx-submit=\"import\">\n    <div class=\"field mb-6\">\n      <%= label(f, :timezone, gettext(\"Time zone\"), class: \"label is-medium \") %>\n      <div class=\"control\">\n        <div class=\"select is-fullwidth\">\n          <%= select(f, :timezone, @timezones, disabled: @status.state != :idle) %>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"field\">\n      <div class=\"control\">\n        <%= submit(gettext(\"Import\"),\n          class: \"button is-success is-fullwidth\",\n          disabled: !@changeset.valid? or length(@status.files) < 1,\n          phx_disable_with: \"Saving...\",\n          phx_loading_class: \"is-loading\"\n        ) %>\n      </div>\n    </div>\n  </.form>\n<% end %>\n\n<%= if @status.state == :error do %>\n  <code class=\"box has-text-danger\">\n    <%= inspect(@status.message, pretty: true) %>\n  </code>\n<% end %>\n"
  },
  {
    "path": "lib/teslamate_web/live/init_assigns.ex",
    "content": "defmodule TeslaMateWeb.InitAssigns do\n  @moduledoc \"\"\"\n  Ensures common `assigns` are applied to all LiveViews attaching this hook.\n  \"\"\"\n\n  import Phoenix.Component\n\n  def on_mount(:locale, _params, %{\"gettext_locale\" => locale}, socket) do\n    Gettext.put_locale(locale)\n    {:cont, assign(socket, :locale, locale)}\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/live/settings_live/index.ex",
    "content": "defmodule TeslaMateWeb.SettingsLive.Index do\n  use TeslaMateWeb, :live_view\n\n  require Logger\n\n  alias TeslaMate.Settings.{GlobalSettings, CarSettings}\n  alias TeslaMate.{Settings, Updater, Api}\n\n  on_mount {TeslaMateWeb.InitAssigns, :locale}\n\n  @impl true\n  def mount(_params, %{\"settings\" => settings}, socket) do\n    assigns = %{\n      addresses_migrated?: addresses_migrated?(),\n      car_settings: Settings.get_car_settings() |> prepare(),\n      car: nil,\n      global_settings: settings |> prepare(),\n      update: Updater.get_update(),\n      refreshing_addresses?: nil,\n      refresh_error: nil,\n      page_title: gettext(\"Settings\")\n    }\n\n    {:ok, assign(socket, assigns)}\n  end\n\n  @impl true\n  def handle_params(params, _uri, socket) do\n    %{car_settings: settings, car: car} = socket.assigns\n\n    car =\n      with id when not is_nil(id) <- Map.get(params, \"car\"),\n           {id, \"\"} <- Integer.parse(id),\n           true <- Map.has_key?(settings, id) do\n        id\n      else\n        _ -> car || settings |> Map.keys() |> List.first()\n      end\n\n    {:noreply, assign(socket, car: car)}\n  end\n\n  @impl true\n  def handle_event(\"car\", %{\"id\" => id}, socket) do\n    {:noreply, add_params(socket, car: id)}\n  end\n\n  def handle_event(\"change\", %{\"global_settings\" => %{\"ui\" => ui}}, %{assigns: %{locale: lo}} = s)\n      when ui != lo do\n    {:noreply, redirect(s, to: Routes.live_path(s, __MODULE__, locale: ui))}\n  end\n\n  def handle_event(\"change\", %{\"global_settings\" => params}, %{assigns: assigns} = socket) do\n    settings = fn ->\n      case Settings.update_global_settings(assigns.global_settings.original, params) do\n        {:error, %Ecto.Changeset{} = changeset} ->\n          %{global_settings: Map.put(assigns.global_settings, :changeset, changeset)}\n\n        {:error, reason} ->\n          Logger.warning(\"Updating settings failed: #{inspect(reason, pretty: true)}\")\n\n          %{\n            refresh_error:\n              gettext(\n                \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\n              )\n          }\n\n        {:ok, settings} ->\n          %{global_settings: prepare(settings)}\n      end\n    end\n\n    socket =\n      if params[\"language\"] != nil and params[\"language\"] != assigns.global_settings.original do\n        me = self()\n        spawn_link(fn -> send(me, {:assigns, settings.()}) end)\n        assign(socket, refreshing_addresses?: true)\n      else\n        assign(socket, settings.())\n      end\n\n    {:noreply, socket}\n  end\n\n  def handle_event(\"change\", params, %{assigns: %{car_settings: settings, car: id}} = socket) do\n    params = params[\"car_settings_#{id}\"]\n\n    settings =\n      get_in(settings, [id, :original])\n      |> Settings.update_car_settings(params)\n      |> case do\n        {:error, changeset} ->\n          Logger.warning(inspect(changeset))\n          put_in(settings, [id, :changeset], changeset)\n\n        {:ok, car_settings} ->\n          settings\n          |> put_in([id, :original], car_settings)\n          |> put_in([id, :changeset], Settings.change_car_settings(car_settings))\n      end\n\n    {:noreply, assign(socket, :car_settings, settings)}\n  end\n\n  def handle_event(\"sign_out\", _params, socket) do\n    :ok = Api.sign_out()\n    {:noreply, redirect(socket, to: Routes.car_path(socket, :index))}\n  end\n\n  @impl true\n  def handle_info({:assigns, assigns}, socket) do\n    socket =\n      socket\n      |> assign(refreshing_addresses?: false)\n      |> assign(assigns)\n\n    {:noreply, socket}\n  end\n\n  def handle_info(msg, socket) do\n    Logger.debug(\"Unexpected message: #{inspect(msg, pretty: true)}\")\n    {:noreply, socket}\n  end\n\n  # Private\n\n  @language_tags (GlobalSettings.supported_languages() ++\n                    [\n                      {\"Norwegian\", \"nb\"},\n                      {\"Chinese (simplified)\", \"zh_Hans\"},\n                      {\"Chinese (traditional)\", \"zh_Hant\"}\n                    ])\n                 |> Enum.map(fn {key, val} -> {val, key} end)\n                 |> Enum.into(%{})\n\n  @supported_ui_languages TeslaMateWeb.Cldr.known_locale_names()\n                          |> Enum.reject(&(&1 in [:zh]))\n                          |> Enum.map(&String.replace(to_string(&1), \"-\", \"_\"))\n                          |> Enum.map(&{Map.get(@language_tags, &1, &1), &1})\n                          |> Enum.sort_by(&elem(&1, 0))\n\n  defp supported_ui_languages, do: @supported_ui_languages\n\n  defp addresses_migrated? do\n    alias TeslaMate.Log.{Drive, ChargingProcess}\n    alias TeslaMate.Repo\n\n    import Ecto.Query\n\n    count_drives =\n      from(d in Drive,\n        select: count(),\n        where:\n          (is_nil(d.start_address_id) or is_nil(d.end_address_id)) and\n            (not is_nil(d.start_position_id) and not is_nil(d.end_position_id))\n      )\n\n    count_charges =\n      from(c in ChargingProcess,\n        select: count(),\n        where: is_nil(c.address_id) and not is_nil(c.position_id)\n      )\n\n    [d, c] =\n      count_drives\n      |> union_all(^count_charges)\n      |> Repo.all()\n\n    d + c == 0\n  end\n\n  defp add_params(socket, params) do\n    push_navigate(socket, to: Routes.live_path(socket, __MODULE__, params), replace: true)\n  end\n\n  defp prepare(%GlobalSettings{} = settings) do\n    %{original: settings, changeset: Settings.change_global_settings(settings)}\n  end\n\n  defp prepare(settings) do\n    Enum.reduce(settings, %{}, fn %CarSettings{car: car} = s, acc ->\n      Map.put(acc, car.id, %{original: s, changeset: Settings.change_car_settings(s)})\n    end)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/live/settings_live/index.html.heex",
    "content": "<nav class=\"breadcrumb\" aria-label=\"breadcrumbs\">\n  <ul>\n    <li><.link navigate={~p\"/\"}><%= gettext(\"Home\") %></.link></li>\n    <li class=\"is-active\"><.link navigate={~p\"/settings\"}><%= gettext(\"Settings\") %></.link></li>\n  </ul>\n</nav>\n\n<%= if Enum.count(@car_settings) > 0 do %>\n  <%= if Enum.count(@car_settings) > 1 do %>\n    <div class=\"tabs is-centered is-boxed\">\n      <ul>\n        <%= for {car_id, %{original: %{car: car}}} <- @car_settings do %>\n          <li class={if car_id == @car, do: \"is-active\"}>\n            <%= link(car.name || \"???\", to: \"#\", phx_click: \"car\", phx_value_id: car_id) %>\n          </li>\n        <% end %>\n      </ul>\n    </div>\n  <% end %>\n\n  <.form\n    :let={f}\n    for={get_in(@car_settings, [@car, :changeset])}\n    phx-change=\"change\"\n    as={:\"car_settings_#{@car}\"}\n  >\n    <div class=\"columns is-mobile is-centered\">\n      <div class=\"column\">\n        <h2 class=\"title is-4\"><%= gettext(\"Data Collection\") %></h2>\n        <div class=\"field is-horizontal center-vertically\">\n          <div class=\"field-label is-normal is-paddingless\">\n            <%= label(f, :enabled, gettext(\"Enabled\"), class: \"label\") %>\n          </div>\n          <div class=\"field-body\">\n            <div class=\"field\">\n              <div class=\"control\">\n                <%= checkbox(f, :enabled, class: \"switch is-rounded is-success\") %>\n                <%= label(f, :enabled, nil) %>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"columns is-mobile is-centered\">\n      <div class=\"column\">\n        <h2 class=\"title is-4\"><%= gettext(\"Sleep Mode\") %></h2>\n\n        <%= unless Ecto.Changeset.get_field(f.source, :use_streaming_api) do %>\n          <div class=\"field is-horizontal center-vertically\">\n            <div class=\"field-label is-normal\">\n              <%= label(f, :suspend_min, gettext(\"Time to Try Sleeping\"), class: \"label\") %>\n            </div>\n            <div class=\"field-body\">\n              <div class=\"field\">\n                <div class=\"control\">\n                  <div class=\"select is-fullwidth\">\n                    <%= select(\n                      f,\n                      :suspend_min,\n                      (Enum.filter(12..30, &(rem(&1, 3) == 0)) ++\n                         Enum.filter(35..90, &(rem(&1, 5) == 0)))\n                      |> Enum.map(&{\"#{&1} #{gettext(\"min\")}\", &1})\n                    ) %>\n                  </div>\n                </div>\n                <p class=\"help is-danger\"><%= error_tag(f, :suspend_min) %></p>\n              </div>\n            </div>\n          </div>\n          <div class=\"field is-horizontal center-vertically\">\n            <div class=\"field-label is-normal\">\n              <%= label(f, :suspend_after_idle_min, gettext(\"Idle Time Before Trying to Sleep\"),\n                class: \"label\"\n              ) %>\n            </div>\n            <div class=\"field-body\">\n              <div class=\"field\">\n                <div class=\"control\">\n                  <div class=\"select is-fullwidth\">\n                    <%= select(\n                      f,\n                      :suspend_after_idle_min,\n                      3..60\n                      |> Enum.filter(&(&1 == 3 or rem(&1, 5) == 0))\n                      |> Enum.map(&{\"#{&1} #{gettext(\"min\")}\", &1})\n                    ) %>\n                  </div>\n                </div>\n                <p class=\"help is-danger\"><%= error_tag(f, :suspend_after_idle_min) %></p>\n              </div>\n            </div>\n          </div>\n        <% end %>\n\n        <div class=\"field is-horizontal mb-0\">\n          <div class=\"field-label is-normal is-paddingless\">\n            <label class=\"label\"><%= gettext(\"Requirements\") %></label>\n          </div>\n          <div class=\"field-body\">\n            <div class=\"field\" style=\"min-width: 280px;\">\n              <div class=\"control\">\n                <div class=\"columns is-multiline is-mobile is-gapless\">\n                  <div class=\"column is-full\">\n                    <label class=\"checkbox\">\n                      <%= checkbox(f, :req_not_unlocked) %>&nbsp; <%= gettext(\n                        \"Vehicle must be locked\"\n                      ) %>\n                    </label>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"columns is-mobile is-centered\">\n      <div class=\"column\">\n        <h2 class=\"title is-4\"><%= gettext(\"Charge cost\") %></h2>\n        <div class=\"field is-horizontal center-vertically\">\n          <div class=\"field-label is-normal is-paddingless\">\n            <%= label(f, :free_supercharging, gettext(\"Free Supercharging\"), class: \"label\") %>\n          </div>\n          <div class=\"field-body\">\n            <div class=\"field\">\n              <div class=\"control\">\n                <%= checkbox(f, :free_supercharging, class: \"switch is-rounded is-success\") %>\n                <%= label(f, :free_supercharging, nil) %>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"columns is-mobile is-centered\">\n      <div class=\"column\">\n        <h2 class=\"title is-4\"><%= gettext(\"Streaming API\") %></h2>\n        <div class=\"field is-horizontal center-vertically\">\n          <div class=\"field-label is-normal is-paddingless\">\n            <%= label(f, :use_streaming_api, gettext(\"Enabled\"), class: \"label\") %>\n          </div>\n          <div class=\"field-body\">\n            <div class=\"field\">\n              <div class=\"control\">\n                <%= checkbox(f, :use_streaming_api, class: \"switch is-rounded is-success\") %>\n                <%= label(f, :use_streaming_api, nil) %>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"columns is-mobile is-centered\">\n      <div class=\"column\">\n        <h2 class=\"title is-4\"><%= gettext(\"Battery\") %></h2>\n        <div class=\"field is-horizontal center-vertically\">\n          <div class=\"field-label is-normal is-paddingless\">\n            <%= label(f, :lfp_battery, gettext(\"LFP Battery\"), class: \"label\") %>\n          </div>\n          <div class=\"field-body\">\n            <div class=\"field\">\n              <div class=\"control\">\n                <%= checkbox(f, :lfp_battery, class: \"switch is-rounded is-success\") %>\n                <%= label(f, :lfp_battery, nil) %>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </.form>\n<% end %>\n\n<div class={[\"divider\", if(Enum.count(@car_settings) <= 1, do: \" is-invisible\")]}>\n  <%= gettext(\"General Settings\") %>\n</div>\n\n<.form :let={f} for={@global_settings.changeset} phx-change=\"change\">\n  <div class=\"columns is-mobile is-centered\">\n    <div class=\"column\">\n      <h2 class=\"title is-4\"><%= gettext(\"Range\") %></h2>\n      <div class=\"field is-horizontal center-vertically\">\n        <div class=\"field-label is-normal\">\n          <%= label f, :preferred_range, class: \"label has-tooltip-multiline\", data_tooltip: gettext(\"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\")  do %>\n            <%= gettext(\"Preferred Range\") %><span class=\"icon is-small\">&nbsp;<span class=\"mdi mdi-information\"></span></span>\n          <% end %>\n        </div>\n        <div class=\"field-body\">\n          <div class=\"field\">\n            <div class=\"control\">\n              <div class=\"select is-fullwidth\">\n                <%= select(f, :preferred_range, [\n                  {gettext(\"ideal\"), :ideal},\n                  {gettext(\"rated\"), :rated}\n                ]) %>\n              </div>\n            </div>\n            <p class=\"help is-danger\"><%= error_tag(f, :preferred_range) %></p>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"columns is-mobile is-centered\">\n    <div class=\"column\">\n      <h2 class=\"title is-4\"><%= gettext(\"Language\") %></h2>\n\n      <div class=\"field is-horizontal\">\n        <div class=\"field-label is-normal\">\n          <%= label(f, :ui, gettext(\"Web App\"), class: \"label\") %>\n        </div>\n        <div class=\"field-body\">\n          <div class=\"field\">\n            <div class=\"control\">\n              <div class=\"select is-fullwidth\">\n                <%= select(f, :ui, supported_ui_languages(), selected: @locale) %>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"field is-horizontal\">\n        <div class=\"field-label is-normal\">\n          <%= label(f, :language, gettext(\"Addresses\"), class: \"label\") %>\n        </div>\n        <div class=\"field-body\">\n          <div class=\"field\">\n            <div class=\"control\">\n              <div class={[\"select\", \"is-fullwidth\", if(@refreshing_addresses?, do: \"is-loading\")]}>\n                <%= select(f, :language, GlobalSettings.supported_languages(),\n                  disabled: !@addresses_migrated? or @refreshing_addresses?\n                ) %>\n              </div>\n            </div>\n            <p class=\"help is-danger\"><%= @refresh_error || error_tag(f, :language) %></p>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"columns is-mobile is-centered\">\n    <div class=\"column\">\n      <h2 class=\"title is-4\"><%= gettext(\"Theme\") %></h2>\n      <div class=\"field is-horizontal\">\n        <div class=\"field-label is-normal\">\n          <%= label(f, :theme_mode, gettext(\"Appearance\"), class: \"label\") %>\n        </div>\n        <div class=\"field-body\">\n          <div class=\"field\">\n            <div class=\"control\">\n              <div class=\"select is-fullwidth\" id=\"theme-selector\" phx-hook=\"ThemeSelector\">\n                <%= select(f, :theme_mode, [\n                  {gettext(\"Light\"), :light},\n                  {gettext(\"Follow System\"), :system},\n                  {gettext(\"Dark\"), :dark}\n                ]) %>\n              </div>\n            </div>\n            <p class=\"help is-danger\"><%= error_tag(f, :theme_mode) %></p>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"columns is-mobile is-centered\">\n    <div class=\"column\">\n      <h2 class=\"title is-4\"><%= gettext(\"Units\") %></h2>\n      <div class=\"field is-horizontal\">\n        <div class=\"field-label is-normal\">\n          <%= label(f, :unit_of_length, gettext(\"Length\"), class: \"label\") %>\n        </div>\n        <div class=\"field-body\">\n          <div class=\"field\">\n            <div class=\"control\">\n              <div class=\"select is-fullwidth\">\n                <%= select(f, :unit_of_length, [:km, :mi]) %>\n              </div>\n            </div>\n            <p class=\"help is-danger\"><%= error_tag(f, :unit_of_length) %></p>\n          </div>\n        </div>\n      </div>\n      <div class=\"field is-horizontal\">\n        <div class=\"field-label is-normal\">\n          <%= label(f, :unit_of_temperature, gettext(\"Temperature\"), class: \"label\") %>\n        </div>\n        <div class=\"field-body\">\n          <div class=\"field\">\n            <div class=\"control\">\n              <div class=\"select is-fullwidth\">\n                <%= select(f, :unit_of_temperature, \"°C\": :C, \"°F\": :F) %>\n              </div>\n            </div>\n            <p class=\"help is-danger\"><%= error_tag(f, :unit_of_temperature) %></p>\n          </div>\n        </div>\n      </div>\n      <div class=\"field is-horizontal\">\n        <div class=\"field-label is-normal\">\n          <%= label(f, :unit_of_pressure, gettext(\"Tire Pressure\"), class: \"label\") %>\n        </div>\n        <div class=\"field-body\">\n          <div class=\"field\">\n            <div class=\"control\">\n              <div class=\"select is-fullwidth\">\n                <%= select(f, :unit_of_pressure, [:bar, :psi]) %>\n              </div>\n            </div>\n            <p class=\"help is-danger\"><%= error_tag(f, :unit_of_pressure) %></p>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"columns is-mobile is-centered\">\n    <div class=\"column\">\n      <h2 class=\"title is-4\"><%= gettext(\"URLs\") %></h2>\n      <div class=\"field is-horizontal center-vertically\">\n        <div class=\"field-label is-normal\">\n          <%= label(f, :base_url, gettext(\"Web App\"), class: \"label\") %>\n        </div>\n        <div class=\"field-body\">\n          <div class=\"field\">\n            <div class=\"control\">\n              <%= text_input(f, :base_url,\n                type: :url,\n                class: \"input\",\n                phx_debounce: \"blur\",\n                placeholder: \"teslamate.example.com\"\n              ) %>\n            </div>\n            <p class=\"help is-danger\"><%= error_tag(f, :base_url) %></p>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"field is-horizontal center-vertically\">\n        <div class=\"field-label is-normal\">\n          <%= label(f, :grafana_url, gettext(\"Dashboards\"), class: \"label\") %>\n        </div>\n        <div class=\"field-body\">\n          <div class=\"field\">\n            <div class=\"control\">\n              <%= text_input(f, :grafana_url,\n                type: :url,\n                class: \"input\",\n                phx_debounce: \"blur\",\n                placeholder: \"grafana.example.com\"\n              ) %>\n            </div>\n            <p class=\"help is-danger\"><%= error_tag(f, :grafana_url) %></p>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</.form>\n\n<div class=\"columns is-mobile is-centered\">\n  <div class=\"column is-narrow table-container\">\n    <table class=\"about table is-narrow\">\n      <tbody>\n        <tr>\n          <th align=\"right\"><%= gettext(\"Version\") %></th>\n          <td>\n            <%= Application.spec(:teslamate, :vsn) %><strong><%= if @update do\n                  vsn = link @update, to: \"https://github.com/teslamate-org/teslamate/releases\",\n                                      target: \"_blank\", rel: \"noopener noreferrer\"\n\n                  [\" (\", gettext(\"Update available\"), \": \", vsn, \")\"]\n                end %></strong>\n          </td>\n        </tr>\n        <tr>\n          <th align=\"right\"><%= gettext(\"GitHub\") %></th>\n          <td>\n            <%= link(\"teslamate-org/teslamate\",\n              to: \"https://github.com/teslamate-org/teslamate\",\n              target: \"_blank\",\n              rel: \"noopener noreferrer\"\n            ) %>\n          </td>\n        </tr>\n        <tr>\n          <th align=\"right\"><%= gettext(\"Documentation\") %></th>\n          <td>\n            <%= link(\"docs.teslamate.org\",\n              to: \"https://docs.teslamate.org\",\n              target: \"_blank\",\n              rel: \"noopener noreferrer\"\n            ) %>\n          </td>\n        </tr>\n      </tbody>\n    </table>\n  </div>\n</div>\n\n<%= if TeslaMate.Api.signed_in?() and not TeslaMate.Import.enabled?() do %>\n  <div class=\"columns is-mobile is-centered\">\n    <div class=\"column is-narrow table-container\">\n      <button class=\"button is-text is-rounded\" aria-label=\"sign out\" phx-click=\"sign_out\">\n        <%= gettext(\"Sign out\") %>\n      </button>\n    </div>\n  </div>\n<% end %>\n"
  },
  {
    "path": "lib/teslamate_web/live/signin_live/index.ex",
    "content": "defmodule TeslaMateWeb.SignInLive.Index do\n  use TeslaMateWeb, :live_view\n\n  import Core.Dependency, only: [call: 3]\n  alias TeslaMate.{Auth, Api}\n\n  on_mount {TeslaMateWeb.InitAssigns, :locale}\n\n  @impl true\n  def mount(_params, _session, socket) do\n    assigns = %{\n      api: get_api(socket),\n      page_title: gettext(\"Sign in\"),\n      error: nil,\n      task: nil,\n      changeset: Auth.change_tokens(),\n      token: System.get_env(\"TOKEN\", \"\"),\n      provider: System.get_env(\"TESLA_AUTH_HOST\", \"https://auth.tesla.com\")\n    }\n\n    {:ok, assign(socket, assigns)}\n  end\n\n  @impl true\n  def handle_event(\"validate\", %{\"tokens\" => tokens}, socket) do\n    changeset =\n      tokens\n      |> Auth.change_tokens()\n      |> Map.put(:action, :update)\n\n    {:noreply, assign(socket, changeset: changeset, error: nil)}\n  end\n\n  def handle_event(\"sign_in\", _, socket) do\n    tokens = Ecto.Changeset.apply_changes(socket.assigns.changeset)\n\n    task =\n      Task.async(fn ->\n        call(socket.assigns.api, :sign_in, [tokens])\n      end)\n\n    {:noreply, assign(socket, task: task)}\n  end\n\n  @impl true\n  def handle_info({ref, result}, %{assigns: %{task: %Task{ref: ref}}} = socket) do\n    Process.demonitor(ref, [:flush])\n\n    case result do\n      :ok ->\n        Process.sleep(250)\n        {:noreply, redirect_to_carlive(socket)}\n\n      {:error, %TeslaApi.Error{} = e} ->\n        message =\n          case e.reason do\n            :token_refresh ->\n              gettext(\"Tokens are invalid\")\n\n            :account_locked ->\n              gettext(\n                \"Your Tesla account is locked due to too many failed sign in attempts. \" <>\n                  \"To unlock your account, reset your password\"\n              )\n\n            _ ->\n              Exception.message(e)\n          end\n\n        {:noreply, assign(socket, error: message, task: nil)}\n    end\n  end\n\n  defp get_api(socket) do\n    case get_connect_params(socket) do\n      %{api: api} -> api\n      _ -> Api\n    end\n  end\n\n  defp redirect_to_carlive(socket) do\n    socket\n    |> put_flash(:success, gettext(\"Signed in successfully\"))\n    |> redirect(to: Routes.car_path(socket, :index))\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/live/signin_live/index.html.heex",
    "content": "<div class=\"mfa columns is-tablet is-centered\">\n  <div class=\"column is-half\">\n    <.form\n      :let={f}\n      for={@changeset}\n      phx-change=\"validate\"\n      phx-submit=\"sign_in\"\n      class=\"box\"\n      as={:tokens}\n    >\n      <%= if @error do %>\n        <div class=\"notification is-danger\">\n          Error: <%= @error %>\n        </div>\n      <% end %>\n\n      <%= if @token == \"\" do %>\n        <div class=\"field\">\n          <%= label(f, :access, gettext(\"Access Token\"), class: \"label\") %>\n          <div class=\"control has-icons-left\">\n            <%= text_input(f, :access,\n              class: \"input is-rounded\",\n              autocorrect: \"off\",\n              autocapitalize: \"none\",\n              spellcheck: \"false\",\n              disabled: !!@task\n            ) %>\n            <span class=\"icon is-small is-left\">\n              <i class=\"mdi mdi-api\"></i>\n            </span>\n          </div>\n        </div>\n\n        <div class=\"field\">\n          <%= label(f, :refresh, gettext(\"Refresh Token\"), class: \"label\") %>\n          <div class=\"control has-icons-left\">\n            <%= text_input(f, :refresh,\n              class: \"input is-rounded\",\n              autocorrect: \"off\",\n              autocapitalize: \"none\",\n              spellcheck: \"false\",\n              disabled: !!@task\n            ) %>\n            <span class=\"icon is-small is-left\">\n              <i class=\"mdi mdi-cloud-refresh\"></i>\n            </span>\n          </div>\n        </div>\n      <% else %>\n        <p class=\"is-size-7 has-text-centered is-italic has-text-weight-light\">\n          <% provider_link =\n            link(@provider,\n              to: @provider,\n              target: \"_blank\",\n              rel: \"noopener noreferrer\"\n            ) %>\n\n          <%= raw(\n            gettext(\n              \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\",\n              token: @token,\n              url: safe_to_string(provider_link)\n            )\n          ) %>\n        </p>\n      <% end %>\n\n      <div class=\"field mt-5\">\n        <div class=\"control\">\n          <%= submit(gettext(\"Sign in\"),\n            class: [\n              \"button\",\n              \"is-rounded\",\n              \"is-fullwidth\",\n              \"is-link\",\n              if(!!@task, do: \"is-loading\")\n            ],\n            disabled:\n              if @token == \"\" do\n                !@changeset.valid?\n              else\n                false\n              end,\n            phx_disable_with: gettext(\"Saving...\")\n          ) %>\n        </div>\n      </div>\n\n      <%= if @token == \"\" do %>\n        <p class=\"is-size-7 has-text-centered is-italic has-text-weight-light\">\n          <% here_link =\n            link(gettext(\"here\"),\n              to: \"https://docs.teslamate.org/docs/faq#how-to-generate-your-own-tokens\",\n              target: \"_blank\",\n              rel: \"noopener noreferrer\"\n            ) %>\n\n          <%= raw(\n            gettext(\n              \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\",\n              here: safe_to_string(here_link)\n            )\n          ) %>\n        </p>\n      <% end %>\n    </.form>\n  </div>\n</div>\n"
  },
  {
    "path": "lib/teslamate_web/plugs/put_session.ex",
    "content": "defmodule TeslaMateWeb.Plugs.PutSession do\n  @moduledoc \"\"\"\n  Puts the CLDR and Gettext locale names in the session.\n\n  Based on https://github.com/elixir-cldr/cldr/blob/v2.24.1/lib/cldr/plug/plug_put_session.ex\n\n  Differences: besides the :canonical_locale_name (\"en_US\") that is put in the\n  session under the \"cldr_locale\" key, it also puts the :gettext_locale_name\n  (\"en\") under \"gettext_locale\".\n  \"\"\"\n\n  import Plug.Conn\n  alias Cldr.Plug.SetLocale\n\n  @doc false\n  def init(_options) do\n    []\n  end\n\n  @doc false\n  def call(conn, _options) do\n    case SetLocale.get_cldr_locale(conn) do\n      %Cldr.LanguageTag{canonical_locale_name: cldr_locale, gettext_locale_name: gettext_locale} ->\n        conn\n        |> fetch_session()\n        |> put_session(SetLocale.session_key(), cldr_locale)\n        |> put_session(\"gettext_locale\", gettext_locale)\n\n      _other ->\n        conn\n    end\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/router.ex",
    "content": "defmodule TeslaMateWeb.Router do\n  use TeslaMateWeb, :router\n\n  alias TeslaMate.Settings\n\n  pipeline :browser do\n    plug :accepts, [\"html\"]\n    plug :fetch_session\n    plug :fetch_live_flash\n\n    plug Cldr.Plug.AcceptLanguage,\n      cldr_backend: TeslaMateWeb.Cldr,\n      no_match_log_level: :debug\n\n    plug Cldr.Plug.PutLocale,\n      apps: [:cldr, :gettext],\n      from: [:query, :session, :accept_language],\n      gettext: TeslaMateWeb.Gettext,\n      cldr: TeslaMateWeb.Cldr\n\n    plug TeslaMateWeb.Plugs.PutSession\n\n    plug :put_root_layout, {TeslaMateWeb.LayoutView, :root}\n    plug :protect_from_forgery\n    plug :put_secure_browser_headers\n    plug :fetch_settings\n  end\n\n  pipeline :api do\n    plug :accepts, [\"json\"]\n  end\n\n  scope \"/\", TeslaMateWeb do\n    pipe_through :browser\n\n    get \"/\", CarController, :index\n    get \"/drive/:id/gpx\", DriveController, :gpx\n\n    live_session :default do\n      live \"/sign_in\", SignInLive.Index\n      live \"/settings\", SettingsLive.Index\n      live \"/geo-fences\", GeoFenceLive.Index\n      live \"/geo-fences/new\", GeoFenceLive.Form\n      live \"/geo-fences/:id/edit\", GeoFenceLive.Form\n      live \"/charge-cost/:id\", ChargeLive.Cost\n      live \"/import\", ImportLive.Index\n    end\n  end\n\n  scope \"/api\", TeslaMateWeb do\n    pipe_through :api\n\n    put \"/car/:id/logging/resume\", CarController, :resume_logging\n    put \"/car/:id/logging/suspend\", CarController, :suspend_logging\n  end\n\n  def fetch_settings(conn, _opts) do\n    settings = Settings.get_global_settings!()\n\n    conn\n    |> assign(:settings, settings)\n    |> put_session(:settings, settings)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/templates/drive/gpx.xml.eex",
    "content": "<?xml version=\"1.0\"?>\n<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" version=\"1.1\" creator=\"Teslamate\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">\n    <trk>\n        <name><%= DateTime.to_iso8601(@drive.start_date) %></name>\n        <trkseg>\n            <%= for position <- @drive.positions do %>\n            <trkpt lat=\"<%= position.latitude %>\" lon=\"<%= position.longitude %>\">\n                <%= if not is_nil(position.elevation) do %>\n                <ele><%= position.elevation %></ele>\n                <% end %>\n                <time><%= DateTime.to_iso8601(position.date) %></time>\n            </trkpt>\n            <% end %>\n        </trkseg>\n    </trk>\n</gpx>"
  },
  {
    "path": "lib/teslamate_web/templates/layout/app.html.heex",
    "content": "<%= @inner_content %>\n"
  },
  {
    "path": "lib/teslamate_web/templates/layout/live.html.heex",
    "content": "<%= @inner_content %>\n"
  },
  {
    "path": "lib/teslamate_web/templates/layout/root.html.heex",
    "content": "<!DOCTYPE html>\n<html\n  lang={Plug.Conn.get_session(@conn, :locale)}\n  data-theme-mode={@conn.assigns.settings.theme_mode}\n>\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, viewport-fit=cover\" />\n    <.live_title suffix=\" · TeslaMate\">\n      <%= assigns[:page_title] || \"Home\" %>\n    </.live_title>\n    <link phx-track-static rel=\"stylesheet\" href={Routes.static_path(@conn, \"/assets/app.css\")} />\n    <link\n      rel=\"apple-touch-icon\"\n      sizes=\"180x180\"\n      href={Routes.static_path(@conn, \"/apple-touch-icon.png?v=5AB53N3ALo\")}\n    />\n    <link\n      rel=\"icon\"\n      type=\"image/png\"\n      sizes=\"32x32\"\n      href={Routes.static_path(@conn, \"/favicon-32x32.png?v=5AB53N3ALo\")}\n    />\n    <link\n      rel=\"icon\"\n      type=\"image/png\"\n      sizes=\"16x16\"\n      href={Routes.static_path(@conn, \"/favicon-16x16.png?v=5AB53N3ALo\")}\n    />\n    <link\n      rel=\"manifest\"\n      href={Routes.static_path(@conn, \"/site.webmanifest?v=5AB53N3ALo\")}\n      crossorigin=\"use-credentials\"\n    />\n    <link\n      rel=\"mask-icon\"\n      href={Routes.static_path(@conn, \"/safari-pinned-tab.svg?v=5AB53N3ALo\")}\n      color=\"#363636\"\n    />\n    <link rel=\"shortcut icon\" href={Routes.static_path(@conn, \"/favicon.ico?v=5AB53N3ALo\")} />\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n    <meta name=\"msapplication-TileColor\" content=\"#ffffff\" />\n    <meta name=\"theme-color\" content=\"#363636\" />\n    <%= csrf_meta_tag() %>\n    <script>\n      window.LIVE_PATH = \"<%= Routes.static_path(@conn, \"/live\") %>\";\n      // Apply theme immediately to prevent flash\n      (function() {\n        const themeMode = document.documentElement.getAttribute('data-theme-mode');\n        let actualTheme = themeMode;\n        if (themeMode === 'system') {\n          actualTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n        }\n        document.documentElement.setAttribute('data-theme', actualTheme);\n      })();\n    </script>\n    <script\n      defer\n      phx-track-static\n      type=\"text/javascript\"\n      src={Routes.static_path(@conn, \"/assets/app.js\")}\n    >\n    </script>\n  </head>\n  <body tabIndex=\"0\">\n    <nav class=\"navbar is-dark\" role=\"navigation\" aria-label=\"main navigation\">\n      <div class=\"container\">\n        <div class=\"navbar-brand\">\n          <a class=\"navbar-item\" href={Routes.static_path(@conn, \"/\")}>\n            <%= img_tag(Routes.static_path(@conn, \"/images/logo.svg\"),\n              alt: \"TeslaMate\",\n              width: \"90px\"\n            ) %>\n          </a>\n\n          <a\n            role=\"button\"\n            class=\"navbar-burger burger\"\n            aria-label=\"menu\"\n            aria-expanded=\"false\"\n            data-target=\"navbar\"\n          >\n            <span aria-hidden=\"true\"></span>\n            <span aria-hidden=\"true\"></span>\n            <span aria-hidden=\"true\"></span>\n          </a>\n        </div>\n\n        <div id=\"navbar\" class=\"navbar-menu\">\n          <div class=\"navbar-end\">\n            <%= if grafana_url = @conn.assigns.settings.grafana_url do %>\n              <div class=\"navbar-item has-dropdown is-hoverable\">\n                <a class=\"navbar-link is-arrowless\">\n                  <span class=\"icon\"><i class=\"mdi mdi-view-dashboard\"></i></span>&nbsp;<span><%= gettext \"Dashboards\" %></span>\n                </a>\n                <div class=\"navbar-dropdown is-boxed\">\n                  <%= for %{\"title\" => title, \"uid\" => uid} <- list_dashboards() do %>\n                    <%= link(title,\n                      to: \"#{grafana_url}/d/#{uid}\",\n                      class: \"navbar-item\",\n                      data_uid: uid,\n                      target: \"_blank\"\n                    ) %>\n                  <% end %>\n                </div>\n              </div>\n            <% end %>\n            <.link\n              navigate={Routes.live_path(@conn, TeslaMateWeb.GeoFenceLive.Index)}\n              class=\"navbar-item  mr-5\"\n            >\n              <span class=\"icon\"><i class=\"mdi mdi-map-marker-radius\"></i></span>&nbsp;<span><%= gettext(\"Geo-Fences\") %></span>\n            </.link>\n            <.link\n              navigate={Routes.live_path(@conn, TeslaMateWeb.SettingsLive.Index)}\n              class=\"navbar-item  mr-5\"\n            >\n              <span class=\"icon\"><i class=\"mdi mdi-cog\"></i></span>&nbsp;<span><%= gettext(\"Settings\") %></span>\n            </.link>\n          </div>\n        </div>\n      </div>\n    </nav>\n\n    <% update = TeslaMate.Updater.get_update() %>\n\n    <main\n      role=\"main\"\n      style=\"overflow: hidden;\"\n      class={[\"section\", if(update, do: \" full-height\")]}\n    >\n      <div class=\"container\">\n        <%= if not TeslaMate.Vault.encryption_key_provided?() or\n              (not TeslaMate.Api.signed_in?() and not TeslaMate.Auth.can_decrypt_tokens?()) do %>\n          <% docs_link =\n            link(\"docs.teslamate.org\",\n              to: \"https://docs.teslamate.org\",\n              target: \"_blank\",\n              rel: \"noopener noreferrer\"\n            ) %>\n\n          <div class=\"notification is-warning\">\n            <p class=\"title is-5 is-spaced\">\n              <span class=\"icon\"><i class=\"mdi mdi-shield-alert\"></i></span>&nbsp;<%= gettext(\n                \"No encryption key provided\"\n              ) %>\n            </p>\n            <p class=\"subtitle is-6\">\n              <%= raw(\n                gettext(\n                  \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\n                )\n              ) %>\n            </p>\n            <p class=\"subtitle is-6\">\n              <%= raw(\n                gettext(\n                  \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\n                )\n              ) %>\n            </p>\n            <p class=\"subtitle is-6\">\n              <%= raw(\n                gettext(\"For more information, see the updated installation guides on %{link}\",\n                  link: safe_to_string(docs_link)\n                )\n              ) %>\n            </p>\n          </div>\n        <% end %>\n\n        <%= Enum.map(@flash, fn {flash_key, flash_message} -> %>\n          <p class={\"notification is-#{flash_key}\"}><%= flash_message %></p>\n        <% end) %>\n\n        <%= @inner_content %>\n      </div>\n    </main>\n\n    <footer class=\"footer\">\n      <div class=\"content has-text-centered\">\n        <%= if update do %>\n          <%= link to: \"https://github.com/teslamate-org/teslamate/releases\",\n              class: \"button is-rounded is-text is-small has-text-grey\", type: \"button\",\n              target: \"_blank\", rel: \"noopener noreferrer\" do %>\n            <span class=\"icon\"><i class=\"mdi mdi-gift\"></i></span>\n            <strong><%= [gettext(\"Update available\"), \": \", update] %></strong>\n          <% end %>\n        <% end %>\n      </div>\n    </footer>\n  </body>\n</html>\n"
  },
  {
    "path": "lib/teslamate_web/templates/layout/root.xml.eex",
    "content": "<%= @inner_content %>"
  },
  {
    "path": "lib/teslamate_web/views/car_view.ex",
    "content": "defmodule TeslaMateWeb.CarView do\n  use TeslaMateWeb, :view\n\n  def render(\"command_failed.json\", %{reason: reason}) do\n    %{error: reason}\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/views/changeset_view.ex",
    "content": "defmodule TeslaMateWeb.ChangesetView do\n  use TeslaMateWeb, :view\n\n  @doc \"\"\"\n  Traverses and translates changeset errors.\n\n  See `Ecto.Changeset.traverse_errors/2` and\n  `TeslaMateWeb.ErrorHelpers.translate_error/1` for more details.\n  \"\"\"\n  def translate_errors(changeset) do\n    Ecto.Changeset.traverse_errors(changeset, &translate_error/1)\n  end\n\n  def render(\"error.json\", %{changeset: changeset}) do\n    # When encoded, the changeset returns its errors\n    # as a JSON object. So we just pass it forward.\n    %{errors: translate_errors(changeset)}\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/views/drive_view.ex",
    "content": "defmodule TeslaMateWeb.DriveView do\n  use TeslaMateWeb, :view\nend\n"
  },
  {
    "path": "lib/teslamate_web/views/error_helpers.ex",
    "content": "defmodule TeslaMateWeb.ErrorHelpers do\n  @moduledoc \"\"\"\n  Conveniences for translating and building error messages.\n  \"\"\"\n\n  import Phoenix.HTML.Form\n  use PhoenixHTMLHelpers\n\n  @doc \"\"\"\n  Generates tag for inlined form input errors.\n  \"\"\"\n  def error_tag(form, field) do\n    Enum.map(Keyword.get_values(form.errors, field), fn error ->\n      content_tag(:span, translate_error(error),\n        class: \"help is-danger pl-15\",\n        phx_feedback_for: input_name(form, field)\n      )\n    end)\n  end\n\n  @doc \"\"\"\n  Translates an error message using gettext.\n  \"\"\"\n  def translate_error({msg, opts}) do\n    # When using gettext, we typically pass the strings we want\n    # to translate as a static argument:\n    #\n    #     # Translate \"is invalid\" in the \"errors\" domain\n    #     dgettext(\"errors\", \"is invalid\")\n    #\n    #     # Translate the number of files with plural rules\n    #     dngettext(\"errors\", \"1 file\", \"%{count} files\", count)\n    #\n    # Because the error messages we show in our forms and APIs\n    # are defined inside Ecto, we need to translate them dynamically.\n    # This requires us to call the Gettext module passing our gettext\n    # backend as first argument.\n    #\n    # Note we use the \"errors\" domain, which means translations\n    # should be written to the errors.po file. The :count option is\n    # set by Ecto and indicates we should also apply plural rules.\n    if count = opts[:count] do\n      Gettext.dngettext(TeslaMateWeb.Gettext, \"errors\", msg, msg, count, opts)\n    else\n      Gettext.dgettext(TeslaMateWeb.Gettext, \"errors\", msg, opts)\n    end\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/views/error_view.ex",
    "content": "defmodule TeslaMateWeb.ErrorView do\n  use TeslaMateWeb, :view\n\n  # If you want to customize a particular status code\n  # for a certain format, you may uncomment below.\n  # def render(\"500.html\", _assigns) do\n  #   \"Internal Server Error\"\n  # end\n\n  # By default, Phoenix returns the status message from\n  # the template name. For example, \"404.html\" becomes\n  # \"Not Found\".\n  def template_not_found(template, _assigns) do\n    Phoenix.Controller.status_message_from_template(template)\n  end\nend\n"
  },
  {
    "path": "lib/teslamate_web/views/layout_view.ex",
    "content": "defmodule TeslaMateWeb.LayoutView do\n  use TeslaMateWeb, :view\n\n  import Phoenix.Component\n  use PhoenixHTMLHelpers\n\n  dashboards =\n    for dashboard_path <- Path.wildcard(\"grafana/dashboards/*.json\") do\n      @external_resource Path.relative_to_cwd(dashboard_path)\n\n      dashboard_path\n      |> File.read!()\n      |> Jason.decode!()\n      |> Map.take([\"title\", \"uid\"])\n    end\n\n  @dashboards Enum.sort_by(dashboards, & &1[\"title\"])\n  defp list_dashboards, do: @dashboards\nend\n"
  },
  {
    "path": "lib/teslamate_web.ex",
    "content": "defmodule TeslaMateWeb do\n  @moduledoc \"\"\"\n  The entrypoint for defining your web interface, such\n  as controllers, views, channels and so on.\n\n  This can be used in your application as:\n\n      use TeslaMateWeb, :controller\n      use TeslaMateWeb, :view\n\n  The definitions below will be executed for every view,\n  controller, etc, so keep them short and clean, focused\n  on imports, uses and aliases.\n\n  Do NOT define functions inside the quoted expressions\n  below. Instead, define any helper function in modules\n  and import those modules here.\n  \"\"\"\n\n  def static_paths, do: ~w(assets fonts images favicon.ico robots.txt android-chrome-192x192.png\n           android-chrome-512x512.png apple-touch-icon.png browserconfig.xml\n           favicon-16x16.png favicon-32x32.png mstile-150x150.png\n           safari-pinned-tab.svg site.webmanifest)\n\n  def controller do\n    quote do\n      use Phoenix.Controller, namespace: TeslaMateWeb\n\n      import Plug.Conn\n      use Gettext, backend: TeslaMateWeb.Gettext\n      alias TeslaMateWeb.Router.Helpers, as: Routes\n\n      unquote(verified_routes())\n    end\n  end\n\n  def view do\n    quote do\n      use Phoenix.View,\n        root: \"lib/teslamate_web/templates\",\n        namespace: TeslaMateWeb\n\n      # Import convenience functions from controllers\n      import Phoenix.Controller,\n        only: [get_flash: 1, get_flash: 2, view_module: 1, view_template: 1]\n\n      # Include shared imports and aliases for views\n      unquote(view_helpers())\n    end\n  end\n\n  def live_view do\n    quote do\n      use Phoenix.LiveView,\n        layout: {TeslaMateWeb.LayoutView, :live}\n\n      unquote(view_helpers())\n    end\n  end\n\n  def live_component do\n    quote do\n      use Phoenix.LiveComponent\n\n      unquote(view_helpers())\n    end\n  end\n\n  def router do\n    quote do\n      use Phoenix.Router\n\n      import Plug.Conn\n      import Phoenix.Controller\n      import Phoenix.LiveView.Router\n    end\n  end\n\n  def channel do\n    quote do\n      use Phoenix.Channel\n      use Gettext, backend: TeslaMateWeb.Gettext\n    end\n  end\n\n  defp view_helpers do\n    quote do\n      # Import all HTML functionality (forms, tags, etc)\n      import Phoenix.HTML\n      import Phoenix.HTML.Form\n      use PhoenixHTMLHelpers\n\n      # Import convenience functions for LiveView rendering\n      import Phoenix.LiveView.Helpers\n      # Import basic rendering functionality (render, render_layout, etc)\n      import Phoenix.View\n\n      import TeslaMateWeb.ErrorHelpers\n      use Gettext, backend: TeslaMateWeb.Gettext\n      alias TeslaMateWeb.Router.Helpers, as: Routes\n\n      unquote(verified_routes())\n    end\n  end\n\n  def verified_routes do\n    quote do\n      use Phoenix.VerifiedRoutes,\n        endpoint: TeslaMateWeb.Endpoint,\n        router: TeslaMateWeb.Router,\n        statics: TeslaMateWeb.static_paths()\n    end\n  end\n\n  @doc \"\"\"\n  When used, dispatch to the appropriate controller/view/etc.\n  \"\"\"\n  defmacro __using__(which) when is_atom(which) do\n    apply(__MODULE__, which, [])\n  end\nend\n"
  },
  {
    "path": "mix.exs",
    "content": "defmodule TeslaMate.MixProject do\n  use Mix.Project\n\n  def project do\n    [\n      app: :teslamate,\n      version: version(),\n      elixir: \"~> 1.17\",\n      elixirc_paths: elixirc_paths(Mix.env()),\n      compilers: Mix.compilers(),\n      start_permanent: Mix.env() == :prod,\n      aliases: aliases(),\n      releases: releases(),\n      deps: deps(),\n      dialyzer: dialyzer(),\n      test_coverage: [tool: ExCoveralls]\n    ]\n  end\n\n  def cli do\n    [\n      preferred_cli_env: [\n        coveralls: :test,\n        \"coveralls.detail\": :test,\n        \"coveralls.post\": :test,\n        \"coveralls.html\": :test,\n        \"coveralls.github\": :test,\n        ci: :test\n      ]\n    ]\n  end\n\n  def application do\n    [\n      mod: {TeslaMate.Application, []},\n      extra_applications: [:logger, :runtime_tools]\n    ]\n  end\n\n  defp elixirc_paths(:test), do: [\"lib\", \"test/support\"]\n  defp elixirc_paths(_), do: [\"lib\"]\n\n  defp deps do\n    [\n      {:castore, \"~> 1.0\"},\n      {:ecto_sql, \"~> 3.0\"},\n      {:ex_cldr, \"~> 2.47.1\"},\n      {:ex_cldr_plugs, \"~> 1.0\"},\n      {:excoveralls, \"~> 0.18.5\", only: :test},\n      {:finch, \"~> 0.20\"},\n      {:floki, \"~> 0.38\"},\n      {:fuse, \"~> 2.5\"},\n      {:gen_state_machine, \"~> 3.0\"},\n      # https://github.com/bitwalker/timex/pull/783\n      {:gettext, \"~> 1.0\", override: true},\n      {:jason, \"~> 1.4\"},\n      {:mock, \"~> 0.3\", only: :test},\n      {:nimble_csv, \"~> 1.3\"},\n      {:phoenix, \"~> 1.7.0\"},\n      {:phoenix_bakery, \"~> 1.0\", runtime: false},\n      {:phoenix_view, \"~> 2.0\"},\n      {:phoenix_ecto, \"~> 4.7\"},\n      {:phoenix_html, \"~> 4.3\"},\n      {:phoenix_html_helpers, \"~> 1.0\"},\n      {:phoenix_live_reload, \"~> 1.6\", only: :dev},\n      {:phoenix_live_view, \"~> 0.20.17\"},\n      {:phoenix_pubsub, \"~> 2.0\"},\n      {:plug_cowboy, \"~> 2.0\"},\n      {:postgrex, \">= 0.0.0\"},\n      {:ranch, \"~> 2.2\"},\n      {:srtm, \"~> 0.8.0\"},\n      {:tesla, \"~> 1.14\"},\n      {:timex, \"~> 3.7\"},\n      {:tortoise311, \"~> 0.12\"},\n      {:tzdata, \"~> 1.1\"},\n      {:websockex, \"~> 0.5\"},\n      {:cloak_ecto, \"~> 1.3\"},\n      {:dialyxir, \"~> 1.4\", only: [:dev], runtime: false},\n      {:credo, \"~> 1.7.1\", only: [:dev], runtime: false}\n    ]\n  end\n\n  defp aliases do\n    [\n      setup: [\"deps.get\", \"ecto.setup\", \"cmd --cd assets npm ci --no-audit --loglevel=error\"],\n      \"ecto.setup\": [\"ecto.create\", \"ecto.migrate\"],\n      \"ecto.reset\": [\"ecto.drop\", \"ecto.setup\"],\n      \"assets.deploy\": [\"cmd --cd assets node scripts/build.js\", \"phx.digest\"],\n      test: [\"ecto.create --quiet\", \"ecto.migrate --quiet\", \"test --no-start\"],\n      ci: [\"format --check-formatted\", \"deps.unlock --check-unused\", \"test --raise\"]\n    ]\n  end\n\n  defp dialyzer do\n    [\n      plt_file: {:no_warn, \"priv/plts/dialyzer.plt\"},\n      plt_core_path: \"priv/plts/\",\n      plt_add_apps: [:mix, :ex_unit],\n      plt_ignore_apps: [],\n      ignore_warnings: \".dialyzer_ignore.exs\",\n      list_unused_filters: true\n    ]\n  end\n\n  defp releases do\n    [\n      teslamate: [\n        include_executables_for: [:unix],\n        applications: [runtime_tools: :permanent]\n      ]\n    ]\n  end\n\n  defp version do\n    case File.read(\"VERSION\") do\n      {:ok, version} -> String.trim(version)\n      {:error, _reason} -> \"0.0.0\"\n    end\n  end\nend\n"
  },
  {
    "path": "nix/backup_and_restore.nix",
    "content": "{ stdenv\n, lib\n, pkgs\n, writeShellScript\n, databaseUser\n, databaseName\n, ...\n}:\nlet\n  backup = writeShellScript \"teslamate-backup\" ''\n    set -euo pipefail\n    : ''${1?' Please specify a file to save backup'}\n    sudo -u teslamate pg_dump -U ${databaseUser} ${databaseName} > \"$1\"\n  '';\n  restore = writeShellScript \"teslamate-restore\" ''\n    set -euo pipefail\n    : ''${1?' Please specify a file to restore from'}\n\n    # Stop the teslamate service to avoid write conflicts\n    systemctl stop teslamate.service\n\n    # Drop existing data and reinitialize\n    sudo -u teslamate psql -U ${databaseUser} << .\n      drop schema public cascade;\n      create schema public;\n      CREATE EXTENSION cube WITH SCHEMA public;\n      CREATE EXTENSION earthdistance WITH SCHEMA public;\n    .\n\n    # Restore\n    sudo -u teslamate psql -U ${databaseUser} -d ${databaseName} < \"$1\"\n\n    # Restart the teslamate container\n    systemctl start teslamate.service\n  '';\nin\nstdenv.mkDerivation {\n  pname = \"teslamate-backup\";\n  version = \"0.1.0\";\n  src = ./.;\n\n  phases = [ \"installPhase\" ];\n\n  installPhase = ''\n    mkdir -p $out/bin\n    ln -s ${backup} $out/bin/teslamate-backup\n    ln -s ${restore} $out/bin/teslamate-restore\n  '';\n}\n"
  },
  {
    "path": "nix/flake-modules/checks.nix",
    "content": "{ self, inputs, ... }:\n{\n  perSystem =\n    { self'\n    , pkgs\n    , lib\n    , ...\n    }:\n    let\n      inherit (inputs) nixpkgs;\n      moduleTest =\n        (nixpkgs.lib.nixos.runTest {\n          hostPkgs = pkgs;\n          defaults.documentation.enable = false;\n          imports = [\n            {\n              name = \"teslamate\";\n              nodes.server = {\n                imports = [ self.nixosModules.default ];\n                virtualisation.cores = 4;\n                virtualisation.memorySize = 2048;\n\n                services.teslamate = {\n                  enable = true;\n                  secretsFile = builtins.toFile \"teslamate.env\" ''\n                    ENCRYPTION_KEY=123456789\n                    DATABASE_PASS=123456789\n                    RELEASE_COOKIE=123456789\n                  '';\n                  postgres.enable_server = true;\n                  grafana.enable = true;\n                };\n              };\n\n              testScript = ''\n                server.wait_for_open_port(4000)\n              '';\n            }\n          ];\n        }).config.result;\n    in\n    {\n      checks =\n        if pkgs.stdenv.isLinux then {\n          default = moduleTest;\n        } else { };\n    };\n}\n"
  },
  {
    "path": "nix/flake-modules/devenv.nix",
    "content": "{ inputs, ... }:\n{\n  imports = [\n    inputs.devenv.flakeModule\n  ];\n\n  perSystem =\n    { config\n    , pkgs\n    , lib\n    , ...\n    }:\n    # legacy\n    let\n      inherit (lib) optional optionals;\n\n      elixir = config.teslamate.elixir;\n\n      nodejs = pkgs.nodejs;\n\n      postgres_port = 7000;\n      mosquitto_port = 7001;\n      process_compose_port = 7002;\n\n      psql = pkgs.writeShellScriptBin \"teslamate_psql\" ''\n        exec \"${pkgs.postgresql}/bin/psql\" --host \"$DATABASE_HOST\" --user \"$DATABASE_USER\" --port \"$DATABASE_PORT\" \"$DATABASE_NAME\" \"$@\"\n      '';\n      mosquitto_sub = pkgs.writeShellScriptBin \"teslamate_sub\" ''\n        exec \"${pkgs.mosquitto}/bin/mosquitto_sub\" -h \"$MQTT_HOST\" -p \"$MQTT_PORT\" -u \"$MQTT_USERNAME\" -P \"$MQTT_PASSWORD\" \"$@\"\n      '';\n\n      devenv = {\n        containers = lib.mkForce { }; # https://github.com/cachix/devenv/issues/760\n        devenv.root =\n          let\n            devenvRootFileContent = builtins.readFile inputs.devenv-root.outPath;\n          in\n          pkgs.lib.mkIf (devenvRootFileContent != \"\") devenvRootFileContent;\n        packages =\n          with pkgs; [\n            elixir\n            elixir-ls\n            node2nix\n            nodejs\n            prefetch-npm-deps\n            # for dashboard scripts\n            jq\n            psql\n            mosquitto\n            mosquitto_sub\n            config.treefmt.build.wrapper\n          ]\n          ++ builtins.attrValues config.treefmt.build.programs\n          ++ optionals stdenv.isLinux [\n            inotify-tools\n            glibcLocales\n          ]\n          ++ optional stdenv.isDarwin terminal-notifier;\n        enterShell = ''\n          export LOCALES=\"${config.teslamate.cldr}/priv/cldr\";\n          export PORT=\"4000\"\n          export ENCRYPTION_KEY=\"your_secure_encryption_key_here\"\n          export DATABASE_USER=\"teslamate\"\n          export DATABASE_PASS=\"your_secure_password_here\"\n          export DATABASE_NAME=\"teslamate\"\n          export DATABASE_HOST=\"127.0.0.1\"\n          export DATABASE_PORT=\"${toString postgres_port}\"\n          export MQTT_HOST=\"127.0.0.1\"\n          export MQTT_PORT=\"${toString mosquitto_port}\"\n          export RELEASE_COOKIE=\"1234567890123456789\"\n          export TZDATA_DIR=\"$PWD/tzdata\"\n          export MIX_REBAR3=\"${pkgs.beam26Packages.rebar3}/bin/rebar3\";\n          mix deps.get\n        '';\n        enterTest = ''\n          mix test\n        '';\n        processes.mqtt = {\n          exec = \"${pkgs.mosquitto}/bin/mosquitto -p ${toString mosquitto_port}\";\n        };\n        process.managers.process-compose = {\n          port = process_compose_port;\n          tui.enable = true;\n        };\n        services.postgres = {\n          enable = true;\n          package = pkgs.postgresql;\n          listen_addresses = \"127.0.0.1\";\n          port = postgres_port;\n          initialDatabases = [{ name = \"teslamate\"; }];\n          initialScript = ''\n            CREATE USER teslamate with encrypted password 'your_secure_password_here';\n            GRANT ALL PRIVILEGES ON DATABASE teslamate TO teslamate;\n            ALTER USER teslamate WITH SUPERUSER;\n          '';\n        };\n      };\n    in\n    {\n      devenv.shells.default = devenv;\n    };\n}\n"
  },
  {
    "path": "nix/flake-modules/formatter.nix",
    "content": "{ inputs, ... }:\n{\n  imports = [\n    inputs.treefmt-nix.flakeModule\n  ];\n  perSystem =\n    { config, pkgs, ... }:\n    {\n      # Auto formatters. This also adds a flake check to ensure that the\n      # source tree was auto formatted.\n      treefmt = {\n        flakeFormatter = true; # Enables treefmt the default formatter used by the nix fmt command\n        flakeCheck = false; # Add a flake check to run treefmt, disabled, as mix format does need the dependencies fetched beforehand\n        projectRootFile = \"VERSION\"; # File used to identity repo root\n\n        # we really need to mirror the treefmt.toml as we can't use it directly\n        settings.global.excludes = [\n          \"*.gitignore\"\n          \"*.dockerignore\"\n          \".envrc\"\n          \"*.node-version\"\n          \"CONTRIBUTING\"\n          \"Dockerfile\"\n          \"grafana/Dockerfile\"\n          \"Makefile\"\n          \"VERSION\"\n          \"LICENSE\"\n          \"*.metadata\"\n          \"*.manifest\"\n          \"*.webmanifest\"\n          \"*.dat\"\n          \"*.lock\"\n          \"*.txt\"\n          \"*.csv\"\n          \"*.ico\"\n          \"*.png\"\n          \"*.svg\"\n          \"*.properties\"\n          \"*.xml\"\n          \"*.po\"\n          \"*.pot\"\n          \"*.json.example\"\n          \"*.typos.toml\"\n          \"treefmt.toml\"\n          \"grafana/dashboards/*.json\" # we use the grafana export style\n        ];\n        programs.mix-format.enable = true;\n        programs.mix-format.package = config.teslamate.elixir;\n        settings.formatter.mix-format.includes = [\n          \"*.ex\"\n          \"*.exs\"\n          \"*.{heex,eex}\"\n        ];\n        # run shellcheck first\n        programs.shellcheck.enable = true;\n        settings.formatter.shellcheck.priority = 0; # default is 0, but we set it here for clarity\n\n        # shfmt second\n        programs.shfmt.enable = true;\n        programs.shfmt.indent_size = 0; # 0 means tabs\n        settings.formatter.shfmt.priority = 1;\n\n        programs.prettier.enable = true;\n\n        programs.nixpkgs-fmt.enable = true;\n      };\n    };\n}\n"
  },
  {
    "path": "nix/flake-modules/package.nix",
    "content": "{ ... }:\n{\n  perSystem =\n    { lib\n    , pkgs\n    , system\n    , ...\n    }:\n    let\n      elixir = pkgs.beam.packages.erlang_26.elixir_1_19;\n      beamPackages = pkgs.beam.packagesWith pkgs.beam.interpreters.erlang_26;\n\n      src = ../..;\n      version = builtins.readFile \"${src}/VERSION\";\n      pname = \"teslamate\";\n\n      mixFodDeps = beamPackages.fetchMixDeps {\n        TOP_SRC = src;\n        pname = \"${pname}-mix-deps\";\n        inherit src version;\n        hash = \"sha256-5zaqvh2Z8cnFN9Ls0aSKJZZ7ygfpsDrawrRqJ5U2wEA=\"; # if you change the mix deps, you need to update this hash\n        # hash = pkgs.lib.fakeHash;\n      };\n\n      nodejs = pkgs.nodejs;\n      nodePackages = pkgs.buildNpmPackage {\n        name = \"${pname}-assets\";\n        src = \"${src}/assets\";\n        npmDepsHash = \"sha256-8WkR5wqt5ooiF1Y66W3UMcbCfRmaBByS8704QHAvA4w=\"; # if you change the npm deps, you need to update this hash\n        # npmDepsHash = pkgs.lib.fakeHash;\n        dontNpmBuild = true;\n        inherit nodejs;\n\n        installPhase = ''\n          mkdir $out\n          cp -r node_modules $out\n          ln -s $out/node_modules/.bin $out/bin\n\n          rm $out/node_modules/phoenix\n          ln -s ${mixFodDeps}/phoenix $out/node_modules\n\n          rm $out/node_modules/phoenix_html\n          ln -s ${mixFodDeps}/phoenix_html $out/node_modules\n\n          rm $out/node_modules/phoenix_live_view\n          ln -s ${mixFodDeps}/phoenix_live_view $out/node_modules\n        '';\n      };\n\n      cldr = pkgs.fetchFromGitHub {\n        owner = \"elixir-cldr\";\n        repo = \"cldr\";\n        rev = \"v2.47.1\"; # this must match the version in the mix file\n        sha256 = \"sha256-7UtPQHKj3toxEkM+xlLpLrJfh9MeJ9d1DUR3kmiWyX8=\"; # if you change the cldr version in the mix file, you need to update this hash\n        # sha256 = pkgs.lib.fakeHash;\n      };\n\n      teslamate = beamPackages.mixRelease {\n        TOP_SRC = src;\n        inherit\n          pname\n          version\n          elixir\n          src\n          mixFodDeps\n          ;\n\n        # set the environment variables for the build\n        SKIP_LOCALE_DOWNLOAD = \"true\"; # do not download locales during build as they are already included in the cldr package from github\n        LOCALES = \"${cldr}/priv/cldr\";\n\n        postBuild = ''\n          ln -sf ${mixFodDeps}/deps deps\n          ln -sf ${nodePackages}/node_modules assets/node_modules\n          export PATH=\"${pkgs.nodejs}/bin:${nodePackages}/bin:$PATH\"\n          ${nodejs}/bin/npm run deploy --prefix ./assets\n\n          # for external task you need a workaround for the no deps check flag\n          # https://github.com/phoenixframework/phoenix/issues/2690\n          mix do deps.loadpaths --no-deps-check, phx.digest\n          mix phx.digest --no-deps-check\n        '';\n\n        meta = {\n          mainProgram = \"teslamate\";\n        };\n      };\n    in\n    {\n      options = {\n        teslamate.cldr = lib.mkOption {\n          type = lib.types.package;\n          readOnly = true;\n        };\n        teslamate.elixir = lib.mkOption {\n          type = lib.types.package;\n          readOnly = true;\n        };\n      };\n\n      config = {\n        teslamate = {\n          inherit cldr elixir;\n        };\n\n        packages = {\n          default = teslamate;\n        };\n      };\n    };\n}\n"
  },
  {
    "path": "nix/maintenance.nix",
    "content": "{ stdenv\n, lib\n, pkgs\n, writeShellScript\n, databaseUser\n, databaseName\n, getExe\n, teslamate\n, environmentFilePath\n, ...\n}:\nlet\n  closeDrive = writeShellScript \"teslamate-close-drive\" ''\n    set -euo pipefail\n    : ''${1?'Please provide a drive ID to close'}\n\n    if ! [[ \"''${1}\" =~ ^[0-9]+$ ]]; then\n      echo \"Error: Drive ID must be an integer.\" >&2\n      exit 1\n    fi\n\n    # load env file to have RELEASE_COOKIE set\n    if [ -f ${environmentFilePath} ]; then\n      source ${environmentFilePath}\n      export RELEASE_COOKIE\n    else\n      echo \"Environment file ${environmentFilePath} not found!\" >&2\n      exit 1\n    fi\n    : ''${RELEASE_COOKIE?'RELEASE_COOKIE must be set in the environment file'}\n\n    echo \"Attempt to close the drive with ID ''${1}.\"\n    ${getExe teslamate} rpc \"TeslaMate.Repo.get!(TeslaMate.Log.Drive, ''${1}) |> TeslaMate.Log.close_drive()\"\n  '';\n\n  closeCharge = writeShellScript \"teslamate-close-charge\" ''\n    set -euo pipefail\n    : ''${1?'Please provide a charge ID to close'}\n\n    if ! [[ \"''${1}\" =~ ^[0-9]+$ ]]; then\n      echo \"Error: Charge ID must be an integer.\" >&2\n      exit 1\n    fi\n\n    # load env file to have RELEASE_COOKIE set\n    if [ -f ${environmentFilePath} ]; then\n      source ${environmentFilePath}\n      export RELEASE_COOKIE\n    else\n      echo \"Environment file ${environmentFilePath} not found!\" >&2\n      exit 1\n    fi\n    : ''${RELEASE_COOKIE?'RELEASE_COOKIE must be set in the environment file'}\n\n    echo \"Attempt to close the charge with ID ''${1}.\"\n    ${getExe teslamate} rpc \"TeslaMate.Repo.get!(TeslaMate.Log.ChargingProcess, ''${1}) |> TeslaMate.Log.complete_charging_process()\"\n  '';\n\n  deleteDrive = writeShellScript \"teslamate-delete-drive\" ''\n    set -euo pipefail\n    : ''${1?'Please provide a drive ID to delete'}\n\n    if ! [[ \"''${1}\" =~ ^[0-9]+$ ]]; then\n      echo \"Error: Drive ID must be an integer.\" >&2\n      exit 1\n    fi\n\n    # Check if drive exists\n    if [ \"$(sudo -u teslamate psql -U ${databaseUser} -d ${databaseName} -tAc \"SELECT 1 FROM drives WHERE id = ''${1};\")\" != \"1\" ]; then\n      echo \"Warning: Drive with ID ''${1} does not exist. Nothing to delete.\" >&2\n      exit 0\n    fi\n\n    echo \"Attempt to delete the drive with ID ''${1}.\"\n    sudo -u teslamate psql -U ${databaseUser} -d ${databaseName} -c \"DELETE FROM drives WHERE id = ''${1};\"\n    echo \"Successfully deleted drive with ID ''${1}.\"\n  '';\n\n  deleteCharge = writeShellScript \"teslamate-delete-charge\" ''\n    set -euo pipefail\n    : ''${1?'Please provide a charge ID to delete'}\n\n    if ! [[ \"''${1}\" =~ ^[0-9]+$ ]]; then\n      echo \"Error: Charge ID must be an integer.\" >&2\n      exit 1\n    fi\n\n    # Check if charging process exists\n    if [ \"$(sudo -u teslamate psql -U ${databaseUser} -d ${databaseName} -tAc \"SELECT 1 FROM charging_processes WHERE id = ''${1};\")\" != \"1\" ]; then\n      echo \"Warning: Charging process with ID ''${1} does not exist. Nothing to delete.\" >&2\n      exit 0\n    fi\n\n    echo \"Attempt to delete the charge with ID ''${1}.\"\n    sudo -u teslamate psql -U ${databaseUser} -d ${databaseName} -c \"DELETE FROM charging_processes WHERE id = ''${1};\"\n    echo \"Successfully deleted charging process with ID ''${1}.\"\n  '';\nin\nstdenv.mkDerivation {\n  pname = \"teslamate-maintenance\";\n  version = \"0.1.0\";\n  src = ./.;\n\n  phases = [ \"installPhase\" ];\n\n  installPhase = ''\n    mkdir -p $out/bin\n    ln -s ${closeDrive} $out/bin/teslamate-close-drive\n    ln -s ${closeCharge} $out/bin/teslamate-close-charge\n    ln -s ${deleteDrive} $out/bin/teslamate-delete-drive\n    ln -s ${deleteCharge} $out/bin/teslamate-delete-charge\n  '';\n}\n"
  },
  {
    "path": "nix/module.nix",
    "content": "{ self }:\n{ config\n, lib\n, pkgs\n, ...\n}:\nlet\n  teslamate = self.packages.${pkgs.stdenv.hostPlatform.system}.default;\n  cfg = config.services.teslamate;\n\n  inherit (lib)\n    mkPackageOption\n    mkEnableOption\n    mkOption\n    types\n    mkIf\n    mkMerge\n    getExe\n    literalExpression\n    ;\nin\n{\n  options.services.teslamate = {\n    enable = mkEnableOption \"Teslamate\";\n\n    secretsFile = mkOption {\n      type = types.str;\n      example = \"/run/secrets/teslamate.env\";\n      description = lib.mdDoc ''\n        Path to an env file containing the secrets used by TeslaMate.\n\n        Must contain at least:\n        - `ENCRYPTION_KEY` - encryption key used to encrypt database\n        - `DATABASE_PASS` - password used to authenticate to database\n        - `RELEASE_COOKIE` - unique value used by elixir for clustering\n      '';\n    };\n\n    autoStart = mkOption {\n      type = types.bool;\n      default = true;\n      description = \"Whether to start teslamate on boot.\";\n    };\n\n    listenAddress = mkOption {\n      type = with types; nullOr str;\n      default = null;\n      example = \"127.0.0.1\";\n      description = \"IP address where the web interface is exposed or `null` for all addresses\";\n    };\n\n    port = mkOption {\n      type = types.port;\n      default = 4000;\n      description = \"Port the TeslaMate service will listen on\";\n    };\n\n    virtualHost = mkOption {\n      type = types.str;\n      default = if config.networking.domain == null then \"localhost\" else config.networking.fqdn;\n      defaultText = literalExpression ''\n        if config.networking.domain == null then \"localhost\" else config.networking.fqdn\n      '';\n      description = \"Host part used for generating URLs throughout the app. Will be combined with urlPath\";\n    };\n\n    urlPath = mkOption {\n      type = types.str;\n      default = \"/\";\n      description = \"Path prefix used for generating URLs throughout the app. Will be combined with virtualHost\";\n    };\n\n    postgres = {\n      enable_server = mkOption {\n        type = types.bool;\n        default = false;\n        description = lib.mdDoc ''\n          Whether to create a postgres server with the recommended configuration.\n\n          Other settings will still be used even if `enable` is false to configure\n          database connection.\n        '';\n      };\n\n      package = mkPackageOption pkgs \"postgresql_17\" {\n        extraDescription = ''\n          The postgresql package to use.\n        '';\n      };\n\n      user = mkOption {\n        type = types.str;\n        default = \"teslamate\";\n        description = \"PostgresQL database user\";\n      };\n\n      database = mkOption {\n        type = types.str;\n        default = \"teslamate\";\n        description = \"PostgresQL database to connect to\";\n      };\n\n      host = mkOption {\n        type = types.str;\n        default = \"127.0.0.1\";\n        description = \"Hostname of the database server\";\n      };\n\n      port = mkOption {\n        type = types.port;\n        default = 5432;\n        description = \"Postgresql database port. Must be correct even if `services.teslamate.postgres.enable` is false\";\n      };\n    };\n\n    grafana = {\n      enable = mkOption {\n        type = types.bool;\n        default = false;\n        description = \"Whether to create and provision grafana with the TeslaMate dashboards\";\n      };\n\n      listenAddress = mkOption {\n        type = types.str;\n        default = \"0.0.0.0\";\n        description = \"IP address for grafana to listen to.\";\n      };\n\n      port = mkOption {\n        type = types.port;\n        default = 3000;\n        description = \"Port for grafana web service\";\n      };\n\n      urlPath = mkOption {\n        type = types.str;\n        default = \"/\";\n        description = \"Path that grafana is mounted on. Useful if using a reverse proxy to vend teslamate and grafana on the same port\";\n      };\n\n      setDefaultDashboard = mkOption {\n        type = types.bool;\n        default = true;\n        description = \"Whether to set the TeslaMate home dashboard as the default dashboard in Grafana\";\n      };\n    };\n\n    mqtt = {\n      enable = mkEnableOption \"TeslaMate MQTT integration\";\n\n      host = mkOption {\n        type = types.str;\n        default = \"127.0.0.1\";\n        description = \"MQTT host\";\n      };\n\n      port = mkOption {\n        type = with types; nullOr port;\n        default = null;\n        example = 1883;\n        description = \"MQTT port.\";\n      };\n    };\n  };\n\n  config = mkIf cfg.enable (mkMerge [\n    {\n      users.users.teslamate = {\n        isSystemUser = true;\n        group = \"teslamate\";\n        home = \"/var/lib/teslamate\";\n        createHome = true;\n      };\n      users.groups.teslamate = { };\n\n      systemd.services.teslamate = {\n        description = \"TeslaMate\";\n        after = [\n          \"network.target\"\n          \"postgresql.service\"\n          \"mosquitto.service\"\n        ];\n        wantedBy = mkIf cfg.autoStart [ \"multi-user.target\" ];\n        serviceConfig = {\n          User = \"teslamate\";\n          Restart = \"on-failure\";\n          RestartSec = 5;\n\n          WorkingDirectory = \"/var/lib/teslamate\";\n\n          ExecStartPre = ''${getExe teslamate} eval \"TeslaMate.Release.migrate\"'';\n          ExecStart = \"${getExe teslamate} start\";\n          ExecStop = \"${getExe teslamate} stop\";\n\n          EnvironmentFile = cfg.secretsFile;\n        };\n        environment = mkMerge [\n          {\n            PORT = toString cfg.port;\n            DATABASE_USER = cfg.postgres.user;\n            DATABASE_NAME = cfg.postgres.database;\n            DATABASE_HOST = cfg.postgres.host;\n            DATABASE_PORT = toString cfg.postgres.port;\n            VIRTUAL_HOST = cfg.virtualHost;\n            URL_PATH = cfg.urlPath;\n            HTTP_BINDING_ADDRESS = mkIf (cfg.listenAddress != null) cfg.listenAddress;\n            DISABLE_MQTT = mkIf (!cfg.mqtt.enable) \"true\";\n          }\n          (mkIf cfg.mqtt.enable {\n            MQTT_HOST = cfg.mqtt.host;\n            MQTT_PORT = mkIf (cfg.mqtt.port != null) (toString cfg.mqtt.port);\n          })\n        ];\n      };\n\n      # idiomatic backup and restore and maintenance scripts\n      environment.systemPackages = with pkgs; [\n        (callPackage ./backup_and_restore.nix {\n          databaseUser = cfg.postgres.user;\n          databaseName = cfg.postgres.database;\n        })\n        (callPackage ./maintenance.nix {\n          databaseUser = cfg.postgres.user;\n          databaseName = cfg.postgres.database;\n          environmentFilePath = cfg.secretsFile;\n          getExe = getExe;\n          teslamate = teslamate;\n        })\n      ];\n    }\n    (mkIf cfg.postgres.enable_server {\n      services.postgresql = {\n        enable = true;\n        inherit (cfg.postgres) package;\n\n        settings = {\n          inherit (cfg.postgres) port;\n        };\n\n        initialScript = pkgs.writeText \"teslamate-psql-init\" ''\n          \\set password `echo $DATABASE_PASS`\n          CREATE DATABASE ${cfg.postgres.database};\n          CREATE USER ${cfg.postgres.user} with encrypted password :'password';\n          GRANT ALL PRIVILEGES ON DATABASE ${cfg.postgres.database} TO ${cfg.postgres.user};\n          ALTER USER ${cfg.postgres.user} WITH SUPERUSER;\n        '';\n      };\n\n      # Include secrets in postgres as well\n      systemd.services.postgresql = {\n        serviceConfig = {\n          EnvironmentFile = cfg.secretsFile;\n        };\n      };\n    })\n    (mkIf cfg.grafana.enable {\n      services.grafana = {\n        enable = true;\n        settings = {\n          server = {\n            domain = cfg.virtualHost;\n            http_port = cfg.grafana.port;\n            http_addr = cfg.grafana.listenAddress;\n            root_url = \"http://%(domain)s${cfg.grafana.urlPath}\";\n            serve_from_sub_path = cfg.grafana.urlPath != \"/\";\n          };\n          security = {\n            allow_embedding = true;\n            disable_gravatar = true;\n          };\n          users = {\n            allow_sign_up = false;\n            default_language = \"detect\";\n          };\n          \"auth.anonymous\".enabled = false;\n          \"auth.basic\".enabled = false;\n          analytics.reporting_enabled = false;\n          dashboards.default_home_dashboard_path = mkIf cfg.grafana.setDefaultDashboard \"${pkgs.lib.sources.sourceFilesBySuffices ../grafana/dashboards/internal [\".json\"]}/home.json\";\n          date_formats.use_browser_locale = true;\n          plugins.preinstall_disabled = true;\n          unified_alerting.enabled = false;\n        };\n        provision = {\n          enable = true;\n          datasources.settings.datasources = [\n            # extracted from ../grafana/datasource.yml\n            {\n              name = \"TeslaMate\";\n              type = \"postgres\";\n              url = \"http://${cfg.postgres.host}:${toString cfg.postgres.port}\";\n              user = cfg.postgres.user;\n              access = \"proxy\";\n              basicAuth = false;\n              withCredentials = false;\n              isDefault = true;\n              secureJsonData.password = \"\\${DATABASE_PASS}\";\n              jsonData = {\n                postgresVersion = 1500;\n                sslmode = \"disable\";\n                database = cfg.postgres.database;\n              };\n              version = 1;\n              editable = true;\n            }\n          ];\n          # Need to duplicate dashboards.yml since it contains absolute paths\n          # which are incompatible with NixOS\n          dashboards.settings = {\n            apiVersion = 1;\n            providers = [\n              {\n                name = \"teslamate\";\n                orgId = 1;\n                folder = \"TeslaMate\";\n                folderUid = \"Nr4ofiDZk\";\n                type = \"file\";\n                disableDeletion = false;\n                allowUiUpdates = true;\n                updateIntervalSeconds = 86400;\n                options.path = lib.sources.sourceByRegex\n                  ../grafana/dashboards\n                  [ \"^[^\\/]*\\.json$\" ];\n              }\n              {\n                name = \"teslamate_internal\";\n                orgId = 1;\n                folder = \"Internal\";\n                folderUid = \"Nr5ofiDZk\";\n                type = \"file\";\n                disableDeletion = false;\n                allowUiUpdates = true;\n                updateIntervalSeconds = 86400;\n                options.path = lib.sources.sourceFilesBySuffices\n                  ../grafana/dashboards/internal\n                  [ \".json\" ];\n              }\n              {\n                name = \"teslamate_reports\";\n                orgId = 1;\n                folder = \"Reports\";\n                folderUid = \"Nr6ofiDZk\";\n                type = \"file\";\n                disableDeletion = false;\n                allowUiUpdates = true;\n                updateIntervalSeconds = 86400;\n                options.path = lib.sources.sourceFilesBySuffices\n                  ../grafana/dashboards/reports\n                  [ \".json\" ];\n              }\n            ];\n          };\n        };\n      };\n\n      systemd.services.grafana = {\n        serviceConfig.EnvironmentFile = cfg.secretsFile;\n        environment = {\n          DATABASE_USER = cfg.postgres.user;\n          DATABASE_NAME = cfg.postgres.database;\n          DATABASE_HOST = cfg.postgres.host;\n          DATABASE_PORT = toString cfg.postgres.port;\n          DATABASE_SSL_MODE = \"disable\";\n        };\n      };\n    })\n  ]);\n}\n"
  },
  {
    "path": "priv/gettext/ca/LC_MESSAGES/default.po",
    "content": "# # `msgid`s in this file come from POT (.pot) files.\n# #\n# # Do not add, change, or remove `msgid`s manually here as\n# # they're tied to the ones in the corresponding POT file\n# # (with the same domain).\n# #\n# # Use `mix gettext.extract --merge` or `mix gettext.merge`\n# # to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\nmsgid \"Status\"\nmsgstr \"Estat\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\nmsgid \"Speed\"\nmsgstr \"Velocitat\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\nmsgid \"State of Charge\"\nmsgstr \"Nivell de càrrega\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\nmsgid \"Charged\"\nmsgstr \"Carregat\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\nmsgid \"asleep\"\nmsgstr \"en repòs\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\nmsgid \"charging\"\nmsgstr \"carregant\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\nmsgid \"driving\"\nmsgstr \"conduint\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\nmsgid \"offline\"\nmsgstr \"sense connexió\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\nmsgid \"online\"\nmsgstr \"en línia\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\nmsgid \"updating\"\nmsgstr \"actualitzant\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\nmsgid \"Locked\"\nmsgstr \"Blocat\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\nmsgid \"Sentry Mode\"\nmsgstr \"Mode centinella\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15 lib/teslamate_web/live/charge_live/cost.html.heex:3 lib/teslamate_web/live/geofence_live/form.html.heex:3 lib/teslamate_web/live/geofence_live/index.html.heex:3 lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\nmsgid \"Home\"\nmsgstr \"Inici\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21 lib/teslamate_web/live/settings_live/index.html.heex:4 lib/teslamate_web/templates/layout/root.html.heex:107\nmsgid \"Settings\"\nmsgstr \"Paràmetres\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\nmsgid \"Scheduled Charging\"\nmsgstr \"Càrrega programada\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\nmsgid \"Plugged In\"\nmsgstr \"Endollat\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\nmsgid \"Charge Limit\"\nmsgstr \"Límit de càrrega\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\nmsgid \"falling asleep\"\nmsgstr \"entrant en repòs\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\nmsgid \"unavailable\"\nmsgstr \"no disponible\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\nmsgid \"Length\"\nmsgstr \"Distància\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\nmsgid \"Temperature\"\nmsgstr \"Temperatura\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\nmsgid \"Units\"\nmsgstr \"Unitats\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165 lib/teslamate_web/live/geofence_live/form.html.heex:124\nmsgid \"Back\"\nmsgstr \"Enrere\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"S'ha creat la geotanca \\\"%{name}\\\"\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110 lib/teslamate_web/live/geofence_live/form.html.heex:4 lib/teslamate_web/live/geofence_live/index.ex:22 lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\nmsgid \"Geo-Fences\"\nmsgstr \"Geotanques\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"Temps inactiu abans d'intentar posar en repòs\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46 lib/teslamate_web/live/geofence_live/form.html.heex:52 lib/teslamate_web/live/geofence_live/index.html.heex:23\nmsgid \"Name\"\nmsgstr \"Nom\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19 lib/teslamate_web/live/geofence_live/index.html.heex:24\nmsgid \"Position\"\nmsgstr \"Posició\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\nmsgid \"Radius\"\nmsgstr \"Radi\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168 lib/teslamate_web/live/geofence_live/form.html.heex:128\nmsgid \"Save\"\nmsgstr \"Desa\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169 lib/teslamate_web/live/geofence_live/form.html.heex:129 lib/teslamate_web/live/signin_live/index.html.heex:84\nmsgid \"Saving...\"\nmsgstr \"Desant...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Temps intentant entrar en repòs\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64 lib/teslamate_web/live/settings_live/index.html.heex:87\nmsgid \"min\"\nmsgstr \"min\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\nmsgid \"Signed in successfully\"\nmsgstr \"Autenticat correctament\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\nmsgid \"Car is unlocked\"\nmsgstr \"Cotxe obert\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\nmsgid \"Create\"\nmsgstr \"Crea\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146 lib/teslamate_web/live/car_live/summary.html.heex:57\nmsgid \"Preconditioning\"\nmsgstr \"Precondicionant\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Mode centinella activat\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148 lib/teslamate_web/live/car_live/summary.html.heex:81\nmsgid \"Driver present\"\nmsgstr \"Conductor present\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\nmsgid \"cancel sleep attempt\"\nmsgstr \"cancel·la intent de repòs\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\nmsgid \"try to sleep\"\nmsgstr \"intenta posar en repòs\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\nmsgid \"Range (est.)\"\nmsgstr \"Autonomia (est.)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\nmsgid \"for\"\nmsgstr \"durant\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\nmsgid \"Requirements\"\nmsgstr \"Requisits\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\nmsgid \"Vehicle must be locked\"\nmsgstr \"Cal que el vehicle estigui tancat\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\nmsgid \"Range (rated)\"\nmsgstr \"Autonomia (nominal)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\nmsgid \"Charger Power\"\nmsgstr \"Potència de càrrega\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\nmsgid \"Preferred Range\"\nmsgstr \"Autonomia preferida\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\nmsgid \"Range\"\nmsgstr \"Autonomia\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\nmsgid \"ideal\"\nmsgstr \"ideal\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\nmsgid \"rated\"\nmsgstr \"nominal\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\nmsgid \"Range (ideal)\"\nmsgstr \"Autonomia (ideal)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"\"\n\"L'estimació de l'autonomia restant del vehicle es basa en un consum fix d'energia en Wh/km. El factor Wh/km ve determinat per Tesla i no és específic per a cada país, mentre que l'autonomia nominal es basa en proves regulatòries als diferents mercats per a \"\n\"aquest vehicle.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\nmsgid \"Update in progress\"\nmsgstr \"Actualitzant\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\nmsgid \"Windows open\"\nmsgstr \"Finestres obertes\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"Voleu eliminar '%{geo_fence}'?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\nmsgid \"Inside Temperature\"\nmsgstr \"Temperatura interior\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\nmsgid \"Outside Temperature\"\nmsgstr \"Temperatura exterior\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424 lib/teslamate_web/live/settings_live/index.html.heex:349\nmsgid \"Version\"\nmsgstr \"Versió\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\nmsgid \"Health check failed\"\nmsgstr \"Ha fallat la comprovació d'estat\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\nmsgid \"Unlocked\"\nmsgstr \"Obert\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\nmsgid \"Remaining Time\"\nmsgstr \"Temps restant\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324 lib/teslamate_web/templates/layout/root.html.heex:83\nmsgid \"Dashboards\"\nmsgstr \"Panells\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\nmsgid \"URLs\"\nmsgstr \"URLs\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216 lib/teslamate_web/live/settings_live/index.html.heex:305\nmsgid \"Web App\"\nmsgstr \"Aplicació web\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32 lib/teslamate_web/live/settings_live/index.html.heex:144\nmsgid \"Enabled\"\nmsgstr \"Activat\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\nmsgid \"Sleep Mode\"\nmsgstr \"Mode de repòs\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"S'ha actualitzat la geotanca \\\"%{name}\\\"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\nmsgid \"An error occurred\"\nmsgstr \"S'ha produit un error\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\nmsgid \"Timeout\"\nmsgstr \"S'ha excedit el temps\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\nmsgid \"Reduced Battery Range\"\nmsgstr \"Bateria amb autonomia reduïda\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} al 100%\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20 lib/teslamate_web/live/charge_live/cost.html.heex:4\nmsgid \"Charge Cost\"\nmsgstr \"Cost de càrrega\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132 lib/teslamate_web/live/geofence_live/form.html.heex:64\nmsgid \"Cost\"\nmsgstr \"Cost\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\nmsgid \"Enter charge cost\"\nmsgstr \"Introduïu el cost de càrrega\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\nmsgid \"Saved!\"\nmsgstr \"Desat!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Recuperant dades del vehicle...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\nmsgid \"Addresses\"\nmsgstr \"Adreces\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\nmsgid \"Language\"\nmsgstr \"Idioma\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"Hi ha hagut un problema recuperant dades des d'OpenStreetMap. Si us plau, proveu-ho més tard.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\nmsgid \"TeslaFi Import\"\nmsgstr \"Importar de TeslaFi\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"S'ha trobat %{count} fitxer\"\nmsgstr[1] \"S'han trobat %{count} fitxers\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34 lib/teslamate_web/live/import_live/index.html.heex:89\nmsgid \"Import\"\nmsgstr \"Importa\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\nmsgid \"Time zone\"\nmsgstr \"Zona horària\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13 lib/teslamate_web/live/signin_live/index.html.heex:70\nmsgid \"Sign in\"\nmsgstr \"Iniciar sessió\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\nmsgid \"Charge cost\"\nmsgstr \"Cost de càrrega\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\nmsgid \"Free Supercharging\"\nmsgstr \"Supercàrrega gratuïta\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\nmsgid \"General Settings\"\nmsgstr \"Paràmetres generals\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\nmsgid \"Session fee\"\nmsgstr \"Quota de sessió\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\nmsgid \"Doors open\"\nmsgstr \"Portes obertes\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140 lib/teslamate_web/live/geofence_live/form.html.heex:72\nmsgid \"Per kWh\"\nmsgstr \"Per kWh\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\nmsgid \"Total\"\nmsgstr \"Total\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"Hi ha <strong>%{n} sessió de càrrega</strong> en aquesta localització per la qual encara no s'ha establert un preu de cost.\"\nmsgstr[1] \"Hi ha <strong>%{n} sessions de càrrega</strong> en aquesta localització per les quals encara no s'ha establert un preu de cost.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\nmsgid \"Add costs retroactively\"\nmsgstr \"Afegeix despeses retroactivament\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\nmsgid \"Charging Costs\"\nmsgstr \"Despeses de càrrega\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\nmsgid \"Continue\"\nmsgstr \"Continua\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\nmsgid \"Mileage\"\nmsgstr \"Quilometratge\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\nmsgid \"Streaming API\"\nmsgstr \"Streaming API\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\nmsgid \"Documentation\"\nmsgstr \"Documentació\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355 lib/teslamate_web/templates/layout/root.html.heex:176\nmsgid \"Update available\"\nmsgstr \"Actualització disponible\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\nmsgid \"Doors are open\"\nmsgstr \"Portes obertes\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\nmsgid \"Trunk is open\"\nmsgstr \"Maleter obert\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141 lib/teslamate_web/live/geofence_live/form.html.heex:73\nmsgid \"Per Minute\"\nmsgstr \"Per minut\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Actualització de programari disponible (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\nmsgid \"Sign out\"\nmsgstr \"Tanca sessió\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\nmsgid \"Access Token\"\nmsgstr \"Token d'accés\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\nmsgid \"Refresh Token\"\nmsgstr \"Token de refresc\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\nmsgid \"Tokens are invalid\"\nmsgstr \"Tokens invàlids\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"Per a obtenir tokens a través de l'API de Tesla cal tenir experiència programant o bé utilitzar un servei de tercers. Podeu obtenir més informació %{here}.\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\nmsgid \"here\"\nmsgstr \"aquí\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"El vostre compte de Tesla s'ha bloquejat per massa intents d'accés. Per a recuperar l'accés, restabliu la contrasenya.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\nmsgid \"Downloading update\"\nmsgstr \"Descarregant l'actualització\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\nmsgid \"No encryption key provided\"\nmsgstr \"No s'ha proporcionat una clau de xifrat\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"Per a més informació, vegeu les guies d'instal·lació actualitzades a %{link}\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"Podeu trobar la clau de xifrat generada automàticament per a la sessió actual <strong>als logs de l'aplicació</strong>.\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"\"\n\"Per assegurar-vos que els vostres <strong>tokens de l'API de Tesla estan emmagatzemats de manera segura</strong>, cal proporcionar una clau de xifrat a TeslaMate mitjançant la variable d'entorn <code>ENCRYPTION_KEY</code>. En cas contrari, <strong>caldrà \"\n\"iniciar sessió després de cada reinici</strong>.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\nmsgid \"Tire Pressure\"\nmsgstr \"Pressió dels pneumàtics\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\nmsgid \"Dog Mode\"\nmsgstr \"Mode gos\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\nmsgid \"Dog mode is enabled\"\nmsgstr \"Mode gos actiu\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\nmsgid \"Expected Finish Time\"\nmsgstr \"Hora de finalització prevista\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"Esteu utilitzant la clau API (%{token}) proporcionada per %{url}. Permetrà al vostre TeslaMate accedir a l'API Tesla Fleet oficial i a l'streaming de Tesla Telemetry.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\nmsgid \"Data Collection\"\nmsgstr \"Recol·lecció de dades\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\nmsgid \"Battery\"\nmsgstr \"Bateria\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\nmsgid \"LFP Battery\"\nmsgstr \"Bateria LFP\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\nmsgid \"Sentry Mode recording\"\nmsgstr \"Mode centinella enregistrant\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\nmsgid \"View car location on Google Maps\"\nmsgstr \"Mostra'm la localització del cotxe a Google Maps\"\n"
  },
  {
    "path": "priv/gettext/ca/LC_MESSAGES/errors.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"can't be blank\"\nmsgstr \"no pot ser buit\"\n\n# # From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"ja s'ha fet servir\"\n\n# # From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"no és vàlid\"\n\n# # From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"ha de ser acceptat\"\n\n# # From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"el format no és vàlid\"\n\n# # From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"conté una entrada no vàlida\"\n\n# # From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"està reservat\"\n\n# # From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"no coincideix amb la confirmació\"\n\n# # From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"encara està associat amb aquesta entrada\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"encara estan associats amb aquesta entrada\"\n\n# # From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"hauria de ser de %{count} caràcter(s)\"\nmsgstr[1] \"haurien de ser de %{count} caràcter(s)\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"hauria de tenir %{count} ítem(s)\"\nmsgstr[1] \"haurien de tenir %{count} ítem(s)\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"hauria de ser almenys de %{count} caràcter(s)\"\nmsgstr[1] \"haurien de ser almenys de %{count} caràcter(s)\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"hauria de tenir almenys %{count} ítem(s)\"\nmsgstr[1] \"haurien de tenir almenys %{count} ítem(s)\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"hauria de ser d'un màxim de %{count} caràcter(s)\"\nmsgstr[1] \"haurien de ser d'un màxim de %{count} caràcter(s)\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"hauria de tenir un màxim de %{count} ítem(s)\"\nmsgstr[1] \"haurien de tenir un màxim de %{count} ítem(s)\"\n\n# # From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"ha de ser de menys de %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"ha de ser més gran de %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"ha ser ser inferior o igual a %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"ha ser ser més gran o igual a %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"ha ser ser igual a %{number}\"\n"
  },
  {
    "path": "priv/gettext/da/LC_MESSAGES/default.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: da\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"Status\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"Hastighed\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"Batteriniveau\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"Opladet\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"sover\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"oplader\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"kører\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"offline\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"online\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"opdaterer\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"Låst\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"Vagtstilstand\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"Hjem\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"Indstillinger\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"Planlagt opladning\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"Stikket sat i\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"Opladningsgrænse\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"ved at falde i søvn\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"ikke tilgængelig\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"Afstand\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"Temperatur\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"Enheder\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"Tilbage\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"Geografisk afgrænsning \\\"%{name}\\\" oprettet\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"Geografiske afgrænsninger\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"Inaktiv tid før forsøg på at falde i søvn\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"Navn\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"Position\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"Radius\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"Gem\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"Gemmer...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Tid indtil forsøg på at sove\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"min\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"Logget ind\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"Bilen er ikke låst\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"Opret\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"Forvarmer\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Vagttilstand er aktiveret\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"Fører tilstede\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"afbryd forsøg på at sove\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"forsøg at sove\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"Rækkevidde (beregnet)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"i\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"Krav\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"Køretøjet skal være låst\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"Rækkevidde (nominel)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"Opladers effekt\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"Ønsket rækkevidde\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"Rækkevidde\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"ideel\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"nominel\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"Rækkevidde (ideel)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"Bilens overslag på den tilbageværende rækkevidde er baseret på et fast energiforbrug i Wh/km. Wh/km faktoren er bestem af Tesla og er ikke landespecifik, hvorimod den beregnede rækkevidde er baseret på myndighedernes testregler i de forskellige markeder for køretøjet.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"Opdatering i gang\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"Vinduer er åbne\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"Slet '%{geo_fence}'?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"Indetemperatur\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"Udetemperatur\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"Version\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"Sundhedscheck mislykkedes\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"Ulåst\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"Tid tilbage\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"Oversigter\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"URL'er\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"Webapp\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"Aktiveret\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"Dvaletilstand\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"Geografisk afgrænsning \\\"%{name}\\\" opdateret\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"Der opstod en fejl\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"Timeout\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"Batteri har reduceret rækkevidde\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} ved 100%\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"Opladningspris\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"Pris\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"Indtast pris for opladning\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"Gemt!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Henter data for køretøjet ...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"Adresser\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"Sprog\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"Der opstod et problem med at hente data fra OpenStreetMap. Prøv venligst igen senere.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"TeslaFi import\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"Fandt %{count} fil\"\nmsgstr[1] \"Fandt %{count} filer\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"Importér\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"Tidszone\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"Log ind\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"Opladningspris\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"Gratis supercharging\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"Basale indstillinger\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"Afgift per opladning\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"Døre åbne\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"Per kWh\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"Total\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"Der er <strong>%{n} opladning</strong> på dette sted der ikke er angivet en pris for endnu.\"\nmsgstr[1] \"Der er <strong>%{n} opladninger</strong> på dette sted der ikke er angivet en pris for endnu.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"Tilføj pris med tilbagevirkning\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"Udgifter til opladning\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"Fortsæt\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"Kilometertal\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"Streaming API\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Dokumentation\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"Opdatering tilgængelig\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"Døre er åbne\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"Bagklap åben\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"Pr. minut\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Softwareopdatering tilgængelig (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"Log Ud\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"Vagtstilstand\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/da/LC_MESSAGES/errors.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: da\\n\"\n\n# # From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"skal udfyldes\"\n\n# # From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"er allerede taget\"\n\n# # From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"er ugyldigt\"\n\n# # From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"skal accepteres\"\n\n# # From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"har ugyldigt format\"\n\n# # From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"har en ugyldig indtastning\"\n\n# # From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"er reserveret\"\n\n# # From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"matcher ikke bekræftelsen\"\n\n# # From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"er stadig associeret med denne indtastning\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"er stadig associerede med denne indtastning\"\n\n# # From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"skal være %{count} karakter\"\nmsgstr[1] \"skal være %{count} karakterer\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"skal have %{count} element\"\nmsgstr[1] \"skal have %{count} elementer\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"skal være mindst %{count} karakter\"\nmsgstr[1] \"skal være mindst %{count} karakterer\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"skal have mindst %{count} element\"\nmsgstr[1] \"skal have mindst %{count} elementer\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"må højst være %{count} karakter\"\nmsgstr[1] \"må højst være %{count} karakterer\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"må højst have %{count} element\"\nmsgstr[1] \"må højst have %{count} elementer\"\n\n# # From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"skal være mindre end %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"skal være større end %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"skal være mindre end eller lig med %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"skal være større end eller lig med %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"skal være lig med %{number}\"\n"
  },
  {
    "path": "priv/gettext/de/LC_MESSAGES/default.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: de\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"Status\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"Geschwindigkeit\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"Ladestand\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"Geladen\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"schläft\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"lädt\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"fährt\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"offline\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"online\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"installiert Update\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"Verschlossen\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"Wächtermodus\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"Home\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:119\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"Einstellungen\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"Ladezeitpunkt\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"Eingesteckt\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"Ladelimit\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"schläft ein\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"nicht verfügbar\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:279\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"Länge\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:294\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"Temperatur\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:276\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"Einheiten\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"Zurück\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"Geo-Fence \\\"%{name}\\\" erstellt\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:113\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"Geo-Fences\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"Leerlaufzeit vor dem Einschlafversuch\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"Speichern\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"Speichere...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Dauer des Schlafversuchs\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"Erfolgreich angemeldet\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"Das Auto ist aufgeschlossen\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"Erstellen\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"Vorkonditionierung\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Wächtermodus aktiviert\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"Fahrer anwesend\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"Schlafversuch abbrechen\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"versuchen zu schlafen\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"Reichweite (gesch.)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"seit\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"Voraussetzungen\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"Fahrzeug muss verschlossen sein\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"Reichweite (rated)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"Ladeleistung\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"Bevorzugte Reichweite\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"Reichweite\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"ideal\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"rated\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"Reichweite (ideal)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"Die Schätzung der verbleibenden Reichweite basiert auf einem fixen Energieverbrauch in Wh/km. Der Wh/km-Faktor wird von Tesla bestimmt und ist nicht länderspezifisch, wohingegen die 'rated' Reichweite auf regulatorischen Tests in den verschiedenen Märkten für dieses Fahrzeug basiert.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"Update läuft\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"Fenster geöffnet\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"'%{geo_fence}' löschen?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"Innentemperatur\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"Außentemperatur\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"Health Check fehlgeschlagen\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"nicht verschlossen\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"Restlaufzeit\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#: lib/teslamate_web/templates/layout/root.html.heex:95\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:327\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:330\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"Aktiviert\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"Schlafmodus\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"Geo-Fence \\\"%{name}\\\" aktualisiert\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"Ein Fehler ist aufgetreten\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"Zeitüberschreitung\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"Verringerte Reichweite\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} bei 100%\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"Ladekosten\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"Kosten\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"Ladekosten eingeben\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"Gespeichert!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Fahrzeugdaten werden abgerufen ...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"Adressen\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"Sprache\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"Es gab ein Problem beim Abruf von Daten von OpenStreetMap. Bitte versuche es später noch einmal.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"%{count} Datei gefunden\"\nmsgstr[1] \"%{count} Dateien gefunden\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"Importieren\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"Zeitzone\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"Anmelden\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"Ladekosten\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"Gratis Supercharger-Nutzung\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"Allgemeine Einstellungen\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"Sessionpreis\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"Türen geöffnet\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"Pro kWh\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"Gesamt\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"An diesem Standort gibt es <strong>%{n} Ladevorgang</strong>, für den noch keine Kosten hinzugefügt wurden.\"\nmsgstr[1] \"An diesem Standort gibt es <strong>%{n} Ladevorgänge</strong>, für die noch keine Kosten hinzugefügt wurden.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"Kosten rückwirkend hinzufügen\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"Ladekosten\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"Weiter\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"Kilometerstand\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:395\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Dokumentation\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:385\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:380\n#: lib/teslamate_web/templates/layout/root.html.heex:188\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"Update verfügbar\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"Türen geöffnet\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"Kofferraum ist geöffnet\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"Pro Minute\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Software Update verfügbar (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:413\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"Abmelden\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"Access Token\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"Refresh Token\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"Tokens sind ungültig\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"Der Abruf von Tokens über die Tesla-API erfordert Programmierkenntnisse oder einen Drittanbieterdienst. Informationen dazu sind %{here} verfügbar.\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"hier\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"Dein Tesla-Konto ist aufgrund von zu vielen fehlgeschlagenen Anmeldeversuchen gesperrt. Um das Konto zu entsperren, setze dein Kennwort zurück\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"Update wird heruntergeladen\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:145\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"Kein Verschlüsselungscode angegeben\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:165\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"Weitere Informationen findest du in den aktualisierten Installationsanleitungen auf %{link}\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:158\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"Der automatisch generierte Verschlüsselungscode, der für die aktuelle Sitzung verwendet wird, ist <strong>in den Anwendungslogs einsehbar</strong>.\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:151\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"Um sicherzustellen, dass deine <strong>Tesla-API-Tokens sicher gespeichert</strong> werden, muss TeslaMate ein Verschlüsselungscode mittels der Umgebungsvariable <code>ENCRYPTION_KEY</code> übergeben werden.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:309\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"Reifendruck\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"Hundemodus\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"Hundemodus ist aktiviert\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"Erwartete Endzeit\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"Du verwendest den API-Schlüssel (%{token}), der von %{url} bereitgestellt wird. Er ermöglicht deinem TeslaMate den Zugriff auf die offizielle Tesla Fleet API und Tesla Telemetry Streaming.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"Datenerfassung\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"Batterie\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"LFP Batterie\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"Wächtermodus\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"Fahrzeugstandort auf Google Maps anzeigen\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Appearance\"\nmsgstr \"Darstellung\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:263\n#, elixir-autogen, elixir-format\nmsgid \"Dark\"\nmsgstr \"Dunkel\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:262\n#, elixir-autogen, elixir-format\nmsgid \"Follow System\"\nmsgstr \"Systemeinstellung folgen\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:261\n#, elixir-autogen, elixir-format\nmsgid \"Light\"\nmsgstr \"Hell\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Theme\"\nmsgstr \"Design\"\n"
  },
  {
    "path": "priv/gettext/de/LC_MESSAGES/errors.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: de\\n\"\n\nmsgid \"can't be blank\"\nmsgstr \"darf nicht leer sein\"\n\nmsgid \"has already been taken\"\nmsgstr \"ist bereits vergeben\"\n\nmsgid \"is invalid\"\nmsgstr \"ist ungültig\"\n\nmsgid \"must be accepted\"\nmsgstr \"muss akzeptiert werden\"\n\nmsgid \"has invalid format\"\nmsgstr \"hat ein ungültiges Format\"\n\nmsgid \"has an invalid entry\"\nmsgstr \"hat einen ungültigen Eintrag\"\n\nmsgid \"is reserved\"\nmsgstr \"ist reserviert\"\n\nmsgid \"does not match confirmation\"\nmsgstr \"stimmt nicht mit der Bestätigung überein\"\n\nmsgid \"is still associated with this entry\"\nmsgstr \"ist noch mit diesem Eintrag verbunden\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"sind noch mit diesem Eintrag verbunden\"\n\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"must be less than %{number}\"\nmsgstr \"muss kleiner als %{number} sein\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"muss größer als %{number} sein\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"muss kleiner oder gleich %{number} sein\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"muss größer oder gleich %{number} sein\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"muss gleich %{number} sein\"\n"
  },
  {
    "path": "priv/gettext/default.pot",
    "content": "## This file is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here as no\n## effect: edit them in PO (`.po`) files instead.\nmsgid \"\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:119\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:279\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:294\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:276\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:113\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#: lib/teslamate_web/templates/layout/root.html.heex:95\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:327\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:330\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:395\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:385\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:380\n#: lib/teslamate_web/templates/layout/root.html.heex:188\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:413\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:145\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:165\n#, elixir-autogen, elixir-format\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:158\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:309\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode recording\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Appearance\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:263\n#, elixir-autogen, elixir-format\nmsgid \"Dark\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:262\n#, elixir-autogen, elixir-format\nmsgid \"Follow System\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:261\n#, elixir-autogen, elixir-format\nmsgid \"Light\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Theme\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/en/LC_MESSAGES/default.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: en\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/en/LC_MESSAGES/errors.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: en\\n\"\n\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/errors.pot",
    "content": "## This is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here has no\n## effect: edit them in PO (`.po`) files instead.\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"\"\nmsgstr[1] \"\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/es/LC_MESSAGES/default.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: es\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"Estado\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"Velocidad\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"Nivel de carga\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"Cargado\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"en reposo\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"cargando\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"conduciendo\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"sin conexión\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"en línea\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"actualizando\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"Cerrado\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"Modo centinela\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"Inicio\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"Ajustes\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"Carga programada\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"Enchufado\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"Límite de carga\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"entrando en reposo\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"no disponible\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"Distancia\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"Temperatura\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"Unidades\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"Atrás\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"Creada la geovalla \\\"%{name}\\\"\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"Geovallas\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"Período de inactividad previo a intentar reposo\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"Nombre\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"Posición\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"Radio\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"Guardar\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"Guardando...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Duración del intento de reposo\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"min\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"Sesión iniciada correctamente\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"Coche abierto\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"Crear\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"Acondicionando\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Modo centinela activo\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"Conductor presente\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"cancelar intento de reposo\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"intentar reposo\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"Autonomía (estim.)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"durante\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"Requisitos\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"El vehículo debe estar cerrado\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"Autonomía (nominal)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"Potencia del cargador\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"Autonomía preferida\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"Autonomía\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"ideal\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"nominal\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"Autonomía (ideal)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"La estimación por parte del coche de la autonomía restante está basada en un consumo fijo de energía en Wh/km. El factor de Wh/km está determinado por Tesla y no es específico del país, mientras que la autonomía nominal está basada en pruebas regulatorias en los diferentes mercados para ese vehículo.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"Actualización en curso\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"Ventanillas abiertas\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"¿Eliminar '%{geo_fence}'?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"Temperatura interior\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"Temperatura exterior\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"Versión\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"Chequeo general fallido\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"Abierto\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"Tiempo restante\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"Paneles\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"URLs\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"Aplicación web\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"Activado\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"Modo de reposo\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"Actualizada la geovalla \\\"%{name}\\\"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"Ha ocurrido un error\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"Plazo de espera agotado\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"Batería con autonomía reducida\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} al 100%\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"Coste de carga\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"Coste\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"Introduce el coste de carga\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"¡Guardado!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Obteniendo datos del vehículo ...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"Direcciones\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"Idioma\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"Hubo un problema recuperando información de OpenStreetMap. Por favor inténtalo de nuevo más tarde.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"Importar de TeslaFi\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"Encontrado %{count} archivo\"\nmsgstr[1] \"Encontrados %{count} archivos\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"Importar\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"Zona horaria\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"Iniciar sesión\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"Coste de carga\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"Supercarga gratuita\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"Ajustes generales\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"Cuota de sesión\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"Puertas abiertas\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"Por kWh\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"Total\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"Hay <strong>%{n} sesión de carga</strong> en esta localización para la que aún no se ha añadido un coste.\"\nmsgstr[1] \"Hay <strong>%{n} sesiones de carga</strong> en esta localización para las que aún no se ha añadido un coste.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"Añadir costes retroactivamente\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"Costes de Carga\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"Continuar\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"Kilometraje\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"Streaming API\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Documentación\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"Actualización disponible\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"Puertas abiertas\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"Maletero abierto\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"Por minuto\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Actualización de software disponible (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"Cerrar Sesión\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"Token de acceso\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"Token de renovación\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"Tokens no válidos\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"La generación de tokens por medio del API de Tesla requiere habilidades de programación, o un servicio proporcionado por terceros. Se puede encontrar más información %{here}.\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"aquí\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"Su cuenta de Tesla se ha bloqueado por demasiados intentos fallidos de inicio de sesión. Para desbloquearla debe crear una nueva contraseña.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"Descargando actualización\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"No se proporcionó ninguna clave de encriptación\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"Para más información, consulte las guías de instalación actualizadas en %{link}\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"La clave de encriptación generada automáticamente utilizada para la sesión actual se puede encontrar <strong>en los registros de la aplicación</strong>.\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"Para asegurarse de que sus <strong>tokens API de Tesla se almacenen de forma segura</strong>, se debe proporcionar a TeslaMate una clave de encriptación a través de la variable de entorno <code>ENCRYPTION_KEY</code>. De lo contrario, se requerirá un <strong>inicio de sesión después de cada reinicio</strong>.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"Presión de las ruedas\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"Modo Perro\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"El modo Perro está activado\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"Hora de Finalización Estimada\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"Estás usando la clave API (%{token}) obtenida desde %{url}. Esto permitirá que tu TeslaMate acceda a la API oficial de Tesla Fleet y al streaming de Telemetría de Tesla.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"Colección de Datos\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"Batería\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"Batería LFP\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"Modo centinela activo\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"Ver la ubicación del coche en Google Maps\"\n"
  },
  {
    "path": "priv/gettext/es/LC_MESSAGES/errors.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: es\\n\"\n\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"no puede estar en blanco\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"ya ha sido usado\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"no es válido\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"debe ser aceptado\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"tiene formato incorrecto\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"tiene una entrada incorrecta\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"está reservado\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"no coincide con la confirmación\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"está todavía asociado con esta entrada\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"están todavía asociados con esta entrada\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"debería tener %{count} carácter(es)\"\nmsgstr[1] \"deberían tener %{count} carácter(es)\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"debería tener %{count} elemento(s)\"\nmsgstr[1] \"deberían tener %{count} elemento(s)\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"debería tener al menos %{count} carácter(es)\"\nmsgstr[1] \"deberían tener al menos %{count} carácter(es)\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"debería tener al menos %{count} elemento(s)\"\nmsgstr[1] \"deberían tener al menos %{count} elemento(s)\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"debería tener como mucho %{count} carácter(es)\"\nmsgstr[1] \"deberían tener como mucho %{count} carácter(es)\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"debería tener como mucho %{count} elemento(s)\"\nmsgstr[1] \"deberían tener como mucho %{count} elemento(s)\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"debe ser menor que %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"debe ser mayor que %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"debe ser menor o igual a %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"debe ser mayor o igual a %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"debe ser igual a %{number}\"\n"
  },
  {
    "path": "priv/gettext/fi/LC_MESSAGES/default.po",
    "content": "## This file is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here as no\n## effect: edit them in PO (`.po`) files instead.\nmsgid \"\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"Tila\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"Nopeus\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"Lataustaso\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"Ladattu\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"lepotilassa\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"lataa\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"ajossa\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"offline-tilassa\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"yhteydessä\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"päivittää\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"Lukittu\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"Sentry-moodi\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"Koti\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"Asetukset\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"Aikataulutettu lataus\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"Kytketty johtoon\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"Latausraja\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"menossa lepotilaan\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"ei saatavilla\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"Matka\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"Lämpötila\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"Mittayksiköt\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"Takaisin\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"Georajaus \\\"%{name}\\\" luotu\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"Georajaukset\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"Nimi\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"Sijainti\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"Säde\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"Tallenna\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"Tallentaa...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Lepotilaan menon kesto\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"min\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"Kirjauduttu sisään onnistuneesti\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"Auto ei ole lukittu\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"Luo\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"Esilämmitys\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Sentry-moodi on päällä\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"Kuljettaja paikalla\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"peru lepotilaan meno\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"pyydä lepotilaan menoa\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"Range (arvioitu)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"viimeiset\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"Vaatimukset\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"Auton tulee olla lukittu\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"Range (arvioitu)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"Laturin virta\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"Valittu range-tyyppi\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"Range\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"ihanteellinen\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"arvioitu\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"Range (ihanteellinen)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"Auton arvio jäljellä olevasta rangesta perustuu kiinteään Wh/km kulutukseen. Tämä kiinteä kulutus on Teslan määrittelemä eikä se riipu maasta, toisin kuin rated-range, joka pohjautuu testeihin eri markkina-alueilla.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"Päivitys käynnissä\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"Ikkunoita avoinna\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"Poista '%{geo_fence}'?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"Sisälämpötila\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"Ulkolämpötila\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"Versio\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"Kuntotarkistus epäonnistui\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"Lukitus avattu\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"Jäljellä oleva aika\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"Datanäkymät\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"URLit\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"Verkkosivu\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"Käytössä\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"Lepotila\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"Georajaus \\\"%{name}\\\" päivitetty\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"Virhe tapahtui\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"Aikakatkaisu\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"Pienennetty akun range\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} 100%:ssa\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"Lataushinta\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"Hinta\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"Syötä latauskustannukset\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"Tallennettu!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Noutaa ajoneuvon dataa...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"Osoitteet\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"Kieli\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"OpenSTreetMapista datan lataaminen epäonnistui. Yritä hetken päästä uudelleen.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"Tuonti TeslaFi:stä\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"Löytyi %{count} tiedosto\"\nmsgstr[1] \"Löytyi %{count} tiedostoa\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"Tuo\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"Aikavyöhyke\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"Kirjaudu sisään\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"Lataushinta\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"Maksuton Supercharging\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"Yleiset asetukset\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"Aloituskustannus\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"Ovia auki\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"Per kWh\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"Yhteensä\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"Lataustapahtumissa on <strong>yksi lataus</strong> johon ei ole lisätty kustannuksia.\"\nmsgstr[1] \"Lataustapahtumissa on <strong>%{n} latausta</strong> joihin ei ole lisätty kustannuksia.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"Lisää kustannuksia jälkikäteen\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"Latauskustannukset\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"Jatka\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"Mittarilukema\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"Streamaus-API\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Ohjeet\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"Päivitys saatavilla\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"Ovia on auki\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"Takakontti on auki\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"Per minuutti\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Päivitys saatavilla (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"Kirjaudu ulos\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"Sentry-moodi\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/fi/LC_MESSAGES/errors.po",
    "content": "## This is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here has no\n## effect: edit them in PO (`.po`) files instead.\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"ei voi olla tyhjä\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"on jo käytössä\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"ei ole kunnollinen\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"tulee olla hyväksytty\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"on väärässä muodossa\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"on virheellinen syöte\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"on varattu\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"ei vastaa vahvistettua\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"on yhä kytkettynä tähän syötteeseen\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"ovat yhä kytkettyinä tähän syötteeseen\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"tulisi olla yhden merkin\"\nmsgstr[1] \"tulisi olla %{count} merkkiä\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"tulisi olla yhden kappaleen\"\nmsgstr[1] \"tulisi olla %{count} kappaletta\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"tulisi olla vähintään yhden merkin\"\nmsgstr[1] \"tulisi olla vähintään %{count} merkkiä\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"tulisi olla vähintään yhden kappaleen\"\nmsgstr[1] \"tulisi olla vähintään %{count} kappaletta\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"tulisi olla vähintään yhden merkin\"\nmsgstr[1] \"tulisi olla vähintään %{count} merkkiä\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"tulisi olla enintään yhden kappaleen\"\nmsgstr[1] \"tulisi olla enintään %{count} kappaletta\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"tulee olla alle %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"tulee olla yli %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"tulee olla alle %{number} tai yhtä suuri\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"tulee olla yli %{number} tai yhtä suuri\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"tulee olla yhtä suuri kuin %{number}\"\n"
  },
  {
    "path": "priv/gettext/fr/LC_MESSAGES/default.po",
    "content": "## This file is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here as no\n## effect: edit them in PO (`.po`) files instead.\nmsgid \"\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"État\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"Vitesse\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"Niveau de charge\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"Chargée\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"Endormie\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"En charge\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"Conduite\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"Hors ligne\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"En ligne\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"Mise à jour en cours\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"Verrouillée\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"Mode sentinelle\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"Accueil\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:119\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"Réglages\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"Recharge planifiée\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"Branchée\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"Limite de charge\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"S'endort\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"Indisponible\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:279\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"Distance\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:294\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"Température\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:276\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"Unités\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"Retour\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"Géorepérage \\\"%{name}\\\" créé\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:113\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"Géorepérages\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"Temps d'inactivité avant d'essayer de dormir\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"Nom\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"Position\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"Rayon\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"Enregistrer\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"Enregistrement...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Temps avant d'essayer de dormir\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"min\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"Connecté avec succès\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"La voiture est déverrouillée\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"Créer\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"Préconditionnement\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Mode sentinelle activé\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"Conducteur présent\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"Annuler la tentative de sommeil\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"Tentative de mise en veille\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"Autonomie estimée\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"depuis\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"Exigences\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"Le véhicule doit être verrouillé\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"Autonomie théorique\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"Puissance de charge\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"Autonomie préférée\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"Autonomie\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"Estimée\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"Théorique\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"Autonomie Estimée\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"Théorique = Autonomie indiquée par Tesla. Estimée = Autonomie norme WLTP Europe\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"Mise à jour en cours d'installation\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"Vitres ouvertes\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"Effacer '%{geo_fence}'?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"Température habitacle\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"Température extérieure\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"Version\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"Echec du bilan de santé\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"Déverouillée\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"Temps restant\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#: lib/teslamate_web/templates/layout/root.html.heex:95\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"Tableaux de bord\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:327\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"URLs\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:330\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"App Web\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"Activé\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"Mode veille\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"Géo-repérage \\\"%{name}\\\" mis à jour\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"Une erreur est survenue\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"Délai maximum expiré\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"Autonomie de la batterie réduite\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} à 100%\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"Coût de charge\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"Coût\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"Entrez le coût de charge\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"Enregistré!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Récupération des données du véhicule ...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"Adresses\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"Langue\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"Un problème est survenu lors de la récupération des données depuis OpenStreetMap. Veuillez réessayer plus tard.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"Importation de TeslaFi\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"Trouvé %{count} fichier\"\nmsgstr[1] \"Trouvé %{count} fichiers\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"Importer\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"Fuseau horaire\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"Connexion\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"Coût de charge\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"Supercharge gratuite\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"Réglages généraux\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"Prix fixe\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"Portes ouvertes\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"Par kWh\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"Total\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"Il existe <strong>%{n} session de charge </strong> à cet endroit pour laquelle aucun coût n'a encore été ajouté.\"\nmsgstr[1] \"Il existe <strong>%{n} sessions de charge </strong> à cet endroit pour lesquelles aucun coût n'a encore été ajouté.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"Ajouter les coûts rétroactivement\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"Coût de Charge\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"Continuer\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"Kilométrage\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"API de Streaming\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:395\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Documentation\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:385\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:380\n#: lib/teslamate_web/templates/layout/root.html.heex:188\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"Mise à jour disponible\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"Les portes sont ouvertes\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"Le coffre est ouvert\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"Par minute\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Mise à jour disponible (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:413\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"Déconnexion\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"Jeton d'accès\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"Jeton d'actualisation\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"Les jetons ne sont pas valides\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"L'obtention de jetons via l'API Tesla nécessite une expérience de programmation ou un service tiers. Les informations peuvent être trouvées %{here}.\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"ici\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"Votre compte Tesla est verrouillé en raison d'un trop grand nombre de tentatives de connexion infructueuses. Pour déverrouiller votre compte, réinitialisez votre mot de passe\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"Mise à jour en cours de téléchargement\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:145\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"Aucune clé de chiffrement renseignée\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:165\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"Pour plus d'informations, dirigez-vous vers le guide d'installation en suivant le lien %{link}\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:158\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"La clé de chiffrement générée automatiquement pour la session actuelle peut être trouvée dans <strong>les logs de l'application</strong>\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:151\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"Pour s'assurer que votre <strong>jeton d'API Tesla est stocké de façon sécurisée</strong>, une clé de chiffrement doit être renseignée à TeslaMate via la variable d'environnement <code>ENCRYPTION_KEY</code>. Sinon, <strong>une authentification sera requise à chaque redémarrage</strong>.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:309\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"Pression des pneus\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"Mode Chien\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"Le Mode Chien est actif\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"Fin de charge estimée\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"Mode sentinelle\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Appearance\"\nmsgstr \"Apparence\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:263\n#, elixir-autogen, elixir-format\nmsgid \"Dark\"\nmsgstr \"Sombre\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:262\n#, elixir-autogen, elixir-format\nmsgid \"Follow System\"\nmsgstr \"Suivre le système\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:261\n#, elixir-autogen, elixir-format\nmsgid \"Light\"\nmsgstr \"Clair\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Theme\"\nmsgstr \"Thème\"\n"
  },
  {
    "path": "priv/gettext/fr/LC_MESSAGES/errors.po",
    "content": "## This is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here has no\n## effect: edit them in PO (`.po`) files instead.\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"ne peut pas être vide\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"a déjà été pris\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"est invalide\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"doit être accepté\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"a un format invalide\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"a une entrée invalide\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"est réservé\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"ne correspond pas à la confirmation\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"est toujours associé à cette entrée\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"sont toujours associés à cette entrée\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"devrait être %{count} caractère (s)\"\nmsgstr[1] \"devrait être %{count} caractère (s)\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"devrait avoir %{count} élément (s)\"\nmsgstr[1] \"devrait avoir %{count} élément (s)\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"doit contenir au moins %{count} caractère (s)\"\nmsgstr[1] \"\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"devrait avoir au moins %{count} élément (s)\"\nmsgstr[1] \"devrait avoir au moins %{count} élément (s)\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"doit être au plus %{count} caractère (s)\"\nmsgstr[1] \"doit être au plus %{count} caractère (s)\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"devrait avoir au plus %{count} élément (s)\"\nmsgstr[1] \"devrait avoir au plus %{count} élément (s)\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"doit être inférieur à %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"doit être supérieur à %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"doit être inférieur ou égal à %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"doit être supérieur ou égal à %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"doit être égal à %{number}\"\n"
  },
  {
    "path": "priv/gettext/it/LC_MESSAGES/default.po",
    "content": "## This file is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here as no\n## effect: edit them in PO (`.po`) files instead.\nmsgid \"\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"Stato\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"Velocità\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"Livello di carica\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"Caricato\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"sospesa\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"in carica\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"in movimento\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"non raggiungibile\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"in linea\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"aggiornamento in corso\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"Chiusa\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"Modalità Sentinella\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"Home\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"Impostazioni\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"Ricarica pianificata\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"Collegata\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"Limite di carica\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"sospensione in corso\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"non disponibile\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"Distanza\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"Temperatura\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"Unità\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"Indietro\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"Geo-Fence \\\"%{name}\\\" creata\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"Geo-Fence\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"Tempo di inattività prima di tentare la sospensione\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"Nome\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"Posizione\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"Raggio\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"Salva\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"Salvataggio...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Tempo prima di tentare la sospensione\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"min\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"Accesso effettuato\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"La vettura è aperta\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"Crea\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"Precondizionamento\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Modalità sentinella attiva\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"Guidatore presente\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"Annulla il tentativo di sospensione\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"Prova a sospondere\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"Autonomia (stimata)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"da\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"Impostazioni\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"Il veicolo deve essere bloccato\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"Autonomia (teorica)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"Potenza di ricarica\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"Autonomia preferita\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"Autonomia\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"Stimata\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"Nominale\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"Autonomia (stimata)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"La stima dell'autonomia residua dell'auto si basa su un consumo energetico fisso in Wh/km. Il fattore Wh/km è determinato da Tesla e non è specifico per ogni Paese, mentre l'autonomia nominale si basa sui test di certificazione effettuati nei diversi mercati per quel veicolo.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"Aggiornamento in corso\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"Finestrini aperti\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"Cancellare '%{geo_fence}'?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"Temperatura abitacolo\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"Temperatura esterna\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"Versione\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"Controllo integrità non riuscito\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"Aperta\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"Tempo rimanente\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"Cruscotti\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"URLs\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"Web App\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"Attivato\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"Modalità sospensione\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"Geo-fence \\\"%{name}\\\" aggiornata\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"Si è verificato un errore\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"Tempo massimo scaduto\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"Durata della batteria ridotta\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} al 100%\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"Costo di ricarica\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"Costo\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"Inserire il costo di ricarica\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"Salvato!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Recupero dati del veicolo ...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"Indirizzi\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"Lingua\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"Si è verificato un problema durante il recupero dei dati da OpenStreetMap. Per favore riprova più tardi.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"Importazione di TeslaFi\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"Trovato %{count} file\"\nmsgstr[1] \"Trovati %{count} file\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"Importare\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"Fuso orario\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"Accedi\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"Costo di ricarica\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"Supercharger gratuito\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"Impostazioni generali\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"Prezzo fisso\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"Porte aperte\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"Per kWh\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"Totale\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"C'è <strong>%{n} sessione di addebito</strong> in questa posizione per la quale non è stato ancora aggiunto alcun costo.\"\nmsgstr[1] \"Ci sono <strong>%{n} sessioni di addebito</strong> in questa posizione per le quali non è stato ancora aggiunto alcun costo.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"Aggiungere i costi retroattivamente\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"Costo di ricarica\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"Continuare\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"Chilometraggio\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"API di streaming\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Documentazione\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"Aggiornamento disponibile\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"Le portiere sono aperte\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"Il baule è aperto\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"Al minuto\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Aggiornamento disponibile (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"Uscire\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"Access Token\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"Aggiorna Token\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"Token non validi\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"Ottenere i token tramite le API Tesla richede esperienza nel campo della programmazione o un servizio di terze parti. Si possono trovare maggiori informazioni %{here}.\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"qui\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"Il tuo account Tesla è bloccato a causa di troppi tentativi di accesso. Per sbloccare il tuo account, esegui il reset della tua password\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"Download dell'aggiornamento in corso\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"Non è stata fornita nessuna chiave di crittazione\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"Per maggiori informazioni, si veda le guide di installazione aggiornate a %{link}\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"La chiave di crittazione generata automaticamente ed usata per la sessione corrente può essere trovata <strong>nei log dell'applicazione</strong>.\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"Per assicurarsi che <strong>i token Tesla API siano salvati in maniera sicura</strong>, deve essere fornita a TeslaMate una chive di crittazione tramice la variabile di ambiente <code>ENCRYPTION_KEY</code>. Altrimenti, un <strong>login sarà richiesto dopo ogni riavvio</strong>.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"Pressione pneumatici\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"Modalità Cane\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"Modalità Cane attiva\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"Tempo di completamento stimato\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"Stai usando la chiave API (%{token}) fornita da %{url}. Questa permette al tuo TeslaMate di accedere alle API Tesla Fleet ufficiali e allo streaming della telemetria di Tesla.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"Raccolta dati\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"Batteria\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"Batteria LFP\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"Modalità Sentinella in registrazione\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"Visualizza la posizione dell'auto in Google Maps\"\n"
  },
  {
    "path": "priv/gettext/it/LC_MESSAGES/errors.po",
    "content": "## This is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here has no\n## effect: edit them in PO (`.po`) files instead.\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"non può essere vuoto\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"è già stato preso\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"non è valido\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"dev'essere accettato\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"ha un formato non valido\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"ha una voce non valida\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"è riservato\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"non corrisponde alla conferma\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"è ancora associato a questa voce\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"sono ancora associati a questa voce\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"dovrebbe essere %{count} carattere\"\nmsgstr[1] \"dovrebbe essere %{count} caratteri\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"dovrebbe avere %{count} elemento\"\nmsgstr[1] \"dovrebbe avere %{count} elementi\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"dovrebbe essere almeno %{count} carattere\"\nmsgstr[1] \"dovrebbe essere almeno %{count} caratteri\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"dovrebbe avere almeno %{count} elemento\"\nmsgstr[1] \"dovrebbe avere almeno %{count} elementi\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"dovrebbe essere al massimo %{count} carattere\"\nmsgstr[1] \"dovrebbe essere al massimo %{count} caratteri\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"dovrebbe avere al massimo %{count} elemento\"\nmsgstr[1] \"dovrebbe avere al massimo %{count} elementi\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"deve essere inferiore a %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"deve essere superiore a %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"deve essere inferiore o uguale a %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"deve essere superiore o uguale a %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"deve essere uguale a %{number}\"\n"
  },
  {
    "path": "priv/gettext/ja/LC_MESSAGES/default.po",
    "content": "## This file is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here as no\n## effect: edit them in PO (`.po`) files instead.\nmsgid \"\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"ステータス\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"速度\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"充電状態\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"充電完了\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"スリープ\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"充電中\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"運転中\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"オフライン\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"オンライン\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"アップデート中\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"ロック\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"セントリーモード\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"ホーム\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"設定\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"予約充電中\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"電源に差し込み済\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"充電制限\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"スリープ中\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"利用不可\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"距離\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"温度\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"単位\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"戻る\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"ジオフェンス \\\"%{name}\\\" が作成されました\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"ジオフェンス\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"スリープ状態移行までのアイドルタイム\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"名前\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"位置\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"半径\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"保存\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"保存中…\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"スリープ実行時間\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"分\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"サインイン成功\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"車両のロックが解除されました\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"作成\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"プリコンディショニング\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"セントリーモードが有効化されました\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"ドライバー乗車中\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"スリープ設定をキャンセルする\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"スリープ中です\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"予想距離\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"要件\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"車両がロックされていないといけません\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"想定距離\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"充電電流値\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"推奨距離\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"距離\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"理想\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"想定\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"想定距離\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"車の残存距離の推定値は、Wh / km単位の固定エネルギー消費量に基づいています。 Wh / km係数はテスラによって決定され、国固有ではありませんが、定格範囲はその車両のさまざまな市場での規制テストに基づいています。\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"アップデート中\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"窓開放中\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"'%{geo_fence}' を削除しますか？\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"車内温度\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"外気温度\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"バージョン\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"ヘルスチェックが失敗しました\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"解除\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"残り時間\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"ダッシュボード\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"URL\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"ウェブアプリ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"有効\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"スリープモード\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"ジオフェンス \\\"%{name}\\\" がアップデートされました\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"エラーが発生しました\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"タイムアウト\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"バッテリー範囲の縮小\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"100% チャージ時\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"充電コスト\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"コスト\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"充電コストを入力\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"保存しました\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"車両データを取得中…\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"住所\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"言語\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"OpenStreetMapからデータを取得する際に問題が発生しました。 後でもう一度やり直してください。\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"TeslaFi からインポート\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"%{count} 個のファイルが見つかりました\"\nmsgstr[1] \"%{count} 個のファイルが見つかりました\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"インポート\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"タイムゾーン\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"サインイン\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"充電コスト\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"無料スーパーチャージ中\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"一般設定\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"セッション費用\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"ドアが開いています\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"kWh毎\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"合計\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"この場所には、<strong>まだ費用が追加されていない%{n}つの課金セッション</strong>があります。\"\nmsgstr[1] \"この場所には、<strong>まだ費用が追加されていない%{n}つの課金セッション</strong>があります。\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"さかのぼってにコストを追加する\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"充電費用\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"続ける\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"マイレージ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"Streaming API\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Documentation\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"アップデート可能\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"ドアが開いています\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"トランクが開いています\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"毎分\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"ソフトウェアアップデートが可能です (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"サインアウト\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"Access Token\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"Refresh Token\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"トークンが無効です\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"Tesla APIを介してトークンを取得するには、プログラミングの経験またはサードパーティのサービスが必要です。 情報は %{here} にあります\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"ここ\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"サインインの試行に失敗した回数が多すぎるため、Teslaアカウントがロックされています。 アカウントのロックを解除するには、パスワードをリセットしてください\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"セントリーモード\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/ja/LC_MESSAGES/errors.po",
    "content": "## This is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here has no\n## effect: edit them in PO (`.po`) files instead.\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"すでに取得されています\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"は無効です\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"承認が必須です\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"無効なフォーマット\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"無効なエントリー\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"予約されました\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"確認と一致しません\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"このエントリーに関連付けられています\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"このエントリに関連付けられています\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"%{count} 文字\"\nmsgstr[1] \"%{count} 文字\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"%{count} アイテム\"\nmsgstr[1] \"%{count} アイテム\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"%{count} 文字以上\"\nmsgstr[1] \"%{count} 文字以上\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"%{count} アイテム以上\"\nmsgstr[1] \"%{count} アイテム以上\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"%{count} 文字以下\"\nmsgstr[1] \"%{count} 文字以下\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"%{count} アイテム以下\"\nmsgstr[1] \"%{count} アイテム以下\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"%{count} 文字未満\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"%{count} 文字を超える文字数\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"%{count} 文字以下\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"%{count} 文字以上\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"%{count} 文字\"\n"
  },
  {
    "path": "priv/gettext/ko/LC_MESSAGES/default.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: ko\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"현재 차량상태\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"속도\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"충전상태\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"충전됨\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"절전\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"충전\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"주행\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"오프라인\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"온라인\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"업데이트\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"잠김\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"감시모드\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"홈\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"설정\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"충전 예약됨\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"충전 준비됨\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"충전목표\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"절전 중\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"사용불가\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"거리\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"온도\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"단위\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"뒤로\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"지오펜스 \\\"%{name}\\\" 가 생성되었습니다.\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"지오펜스\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"절전 전 유휴시간\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"이름\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"위치\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"반경\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"저장\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"저장 중...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"절전 시도 시간\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"분\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"로그인 성공\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"차량이 잠김해제되었습니다.\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"생성\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"프리컨디셔닝\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"감시모드가 활성화되었습니다.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"현재 운전자\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"절전모드 시도 취소\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"절전모드 시도\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"거리 (예상)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"경과시간\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"필수요구사항\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"차량문은 모두 잠겨있어야 합니다.\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"거리 (정규계산)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"충전기 전력\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"선호하는 계산방법\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"거리\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"이상적인 거리\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"정규계산된 거리\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"거리 (이상적)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"차량의 잔여거리 추정치는 고정 에너지 소비량(Wh/km)을 기준으로합니다. Wh/km 계수는 Tesla에 의해 결정되며 국가별로 다르지 않지만 정규 거리는 해당 차량의 다른 시장에서 규제 테스트를 기반으로합니다.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"업데이트 진행 중\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"창문 열림\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"'%{geo_fence}'를 삭제하겠습니까?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"실내 온도\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"실외 온도\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"소프트웨어 버전\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"상태확인 실패\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"잠금 해제\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"남은 시간\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"대시보드\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"접속주소\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"웹 애플리케이션\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"활성화\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"절전모드\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"지오펜스 \\\"%{name}\\\" 가 업데이트 되었습니다.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"오류가 발생하였습니다\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"시간초과\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"감소된 배터리 거리\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ 100%에서 %{range}\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"충전비용\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"비용\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"충전비용 입력\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"저장완료!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"차량데이터를 가져오는 중입니다.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"주소\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"언어\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"OpenStreetMap 데이터 검색 중 문제가 발생했습니다. 다시 시도해주세요.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"TeslaFi 가져오기\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"%{count} 파일을 찾았습니다.\"\nmsgstr[1] \"%{count} 파일들을 찾았습니다.\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"가져오기\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"시간대\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"로그인\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"충전비용\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"무료 수퍼차징\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"일반설정\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"세션수수료\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"차량문 열림\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"kWh 당\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"총합\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"이 위치에는 아직 비용이 추가되지 않은 <strong>%{n} 충전 세션</strong>이 있습니다.\"\nmsgstr[1] \"이 위치에는 아직 비용이 추가되지 않은 <strong>%{n} 충전 세션들</strong>이 있습니다.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"과거 요금 추가\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"충전요금\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"계속\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"누적주행거리\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"스트리밍 API\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"참고문서\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"깃허브\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"업데이트 가능\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"문이 열려있습니다.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"트렁크가 열려있습니다.\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"분당\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"소프트웨어 업데이트 가능 (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"로그아웃\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"엑세스 토큰\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"리프레시 토큰\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"토큰이 잘못되었습니다.\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"Tesla API 토큰을 얻으러면 프로그래밍 경험이나 서드파티 서비스가 필요합니다. 관련된 정보는 %{here}에서 찾을 수 있습니다.\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"이곳\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"너무 많은 로그인 실패로 Tesla 계정이 잠겼습니다. 계정 잠금을 해제하려면 비밀번호를 재설정하세요.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"업데이트 다운로드 중\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"암호화 키가 없습니다.\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"자세한 내용은 %{link}에서 업데이트 된 설치가이드를 참고하세요.\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"현재 사용하고 있는 암호화키는 자동으로 생성되었으며, <strong>애플리케이션 로그</strong> 폴더에서 찾을 수 있습니다.\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"<strong>Tesla API 토큰을 안전하게 저장</strong>하려면 하나의 암호화 키가 <code>ENCRYPTION_KEY</code> 환경 변수를 통해 TeslaMate로 제공되어야 합니다. 그렇지 않으면 <strong>TeslaMate를 재시작할 때마다 다시 로그인</strong>해야 합니다.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"공기압\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"애견 모드\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"애견 모드가 켜져있습니다.\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"예상 종료 시간\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"감시모드\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/ko/LC_MESSAGES/errors.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: ko\\n\"\n\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"빈칸이면 안됩니다.\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"이미 선택되어 있습니다.\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"은(는) 유효하지 않습니다.\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"반드시 허용되어야 합니다.\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"잘못된 포맷입니다.\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"잘못된 항목입니다.\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"예약되어 있습니다.\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"확인된 것과 일치하지 않습니다.\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"여전히 이 항목과 연결되어 있습니다.\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"여전히 이 항목과 연결되어 있습니다.\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"%{count}자 이상이어야 합니다.\"\nmsgstr[1] \"\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"%{count} 개의 아이템이 있어야합니다.\"\nmsgstr[1] \"\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"최소한 %{count}자 이상이어야 합니다.\"\nmsgstr[1] \"\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"최소한 %{count} 개의 아이템이 있어야합니다.\"\nmsgstr[1] \"\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"최대 %{count}자 이하이어야 합니다.\"\nmsgstr[1] \"\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"최대 %{count} 개의 아이템이 있어야합니다.\"\nmsgstr[1] \"\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"%{number} 보다 반드시 작어야 합니다.\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"%{number} 보다 반드시 커야 합니다.\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"%{number} 보다 반드시 작거나 같아야 합니다.\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"%{number} 보다 반드시 크거나 같아야 합니다.\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"%{number} 와 반드시 같아야 합니다.\"\n"
  },
  {
    "path": "priv/gettext/nb/LC_MESSAGES/default.po",
    "content": "## This file is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here as no\n## effect: edit them in PO (`.po`) files instead.\nmsgid \"\"\nmsgstr \"\"\n\"Language: nb\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"Status\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"Hastighet\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"Ladenivå nå\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"Ladet hittil\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"dvale\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"Ladet\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"kjører\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"Offline\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"online\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"oppdaterer\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"Låst\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"Sentry Mode\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"Hjem\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"Innstillinger\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"Tidsinnstilt lading\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"Koblet til\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"Ladelimit\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"Dvale\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"ikke tilgjengelig\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"Avstand\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"Temperatur\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"Enheter\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"Tilbake\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"Geo-lokasjon \\\"%{name}\\\" opprettet\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"Geo-lokasjoner\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"Inaktiv tid før dvale starter\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"Navn\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"Posisjon\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"Radius\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"Lagre\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"Lagrer...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Tid for forsøk på dvale\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"min\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"Innlogget\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"Bilen er ulåst\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"Opprett\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"Forvarming\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Sentry Mode er aktivert\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"Fører er tilstede\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"Avbryt dvale\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"forsøk på dvale\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"Rekkevidde (est.)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"i\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"Krav\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"Kjøretøyet må være låst\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"Rekkevidde klass.\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"Ladestyrke\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"Foretrukket rekkevidde\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"Rekkevidde\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"typisk\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"klassifisert\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"Rekkevidde typisk\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"Kjøretøyets estimerte tilgjengelige rekkevidde er basert på et fast energiforbruk oppgitt i Wh/km. Wh/km-faktoren er bestemt av Tesla og er ikke landspesifikk, der oppgitt rekkevidde er basert på regulatoriske tester i de ulike markeder for det spesifikke kjøretøyet.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"Oppdaterer software\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"Åpent vindu\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"Fjern '%{geo_fence}'?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"Temperatur inne\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"Temperatur ute\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"Software versjon\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"Helsesjekk feilet. Sjekk at mobil tilkobling er aktivert i bilen.\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"Ulåst\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"Gjenværende ladetid\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"Dashboard - Grafana\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"Nettadresser\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"Dashboard\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"Aktivert\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"Dvalemodus\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"Geo-lokasjon \\\"%{name}\\\" oppdatert\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"En feil har oppstått\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"Timeout\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"Redusert batterirekkevidde\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} ved 100%\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"Lading\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"Pris\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"Angi ladepris\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"Lagret!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Henter data fra kjøretøy...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"Adresser og gatenavn\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"Språk\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"Det var et problem med henting av data fra OpenStreetMap. Vennligst prøv igjen senere.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"TeslaFi import\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"%{count} fil\"\nmsgstr[1] \"%{count} filer\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"Importere\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"Tidssone\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"Logg inn\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"Ladepris\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"Gratis Superlading\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"Generelle innstillinger\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"Øktpris\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"Åpen dør\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"Pr kWh\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"Total\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"Det er <strong>%{n} ladeøkt</strong> på denne lokasjonen der pris ikke er definert.\"\nmsgstr[1] \"Det er <strong>%{n} ladeøkter</strong> på denne lokasjonen der priser ikke er definert.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"Legg til pris med tilbakevirkende kraft\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"Pris på lading\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"Fortsett\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"Kilometerstand\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"Streaming API\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Dokumentasjon\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"Ny software tilgjengelig\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"Åpen dør\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"Bagasjeluken er åpen\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"Per minutt\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Ny software tilgjengelig (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"Logg ut\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"Sentry Mode\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/nb/LC_MESSAGES/errors.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: nb\\n\"\n\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"kan ikke være tom\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"er allerede opptatt\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"er feil verdi\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"må aksepteres\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"har feil format\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"har en feil post\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"er reservert\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"stemmer ikke med bekreftelsen\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"er fortsatt assosiert med denne posten\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"er fortsatt assosiert med denne posten\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"bør være %{count} karakter\"\nmsgstr[1] \"bør være %{count} karakterer\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"bør ha %{count} punkter\"\nmsgstr[1] \"bør ha %{count} punkt\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"bør være minst %{count} tegn\"\nmsgstr[1] \"bør være minst %{count} tegn\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"bør ha minst %{count} punkt\"\nmsgstr[1] \"bør ha minst %{count} punkter\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"bør være helst %{count} tegn\"\nmsgstr[1] \"bør være helst %{count} tegn\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"bør ha som mest %{count} punkt\"\nmsgstr[1] \"bør ha som mest %{count} punkter\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"må være mindre enn %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"må være høyere enn %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"må være mindre eller lik som %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"må være større eller lik som %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"må være lik som %{number}\"\n"
  },
  {
    "path": "priv/gettext/nl/LC_MESSAGES/default.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: nl\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"Status\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"Snelheid\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"Laadtoestand\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"Opgeladen\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"slaapt\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"opladen\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"rijden\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"offline\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"online\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"bijwerken\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"Vergrendeld\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"Bewakingsmodus\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"Home\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:119\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"Instellingen\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"Gepland opladen\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"Ingeplugd\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"Laadlimiet\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"valt in slaap\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"onbeschikbaar\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:279\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"Lengte\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:294\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"Temperatuur\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:276\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"Eenheden\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"Terug\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"Geo-hek \\\"%{name}\\\" aangemaakt\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:113\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"Geofences\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"Inactieve tijd voordat de auto probeert te slapen\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"Naam\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"Positie\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"Straal\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"Opslaan\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"Opslaan...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Tijd om te proberen te slapen\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"min\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"Succesvol ingelogd\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"Auto is ontgrendeld\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"Creëer\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"Voorconditionering\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Bewakingsmodus is geactiveerd\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"Bestuurder aanwezig\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"annuleer slaap-poging\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"probeer te slapen\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"Bereik (geschat)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"sinds\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"Voorwaarden\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"Wagen moet vergrendeld zijn\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"Bereik (nominaal)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"Lader vermogen\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"Voorkeur bereik\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"Bereik\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"ideale\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"nominale\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"Bereik (ideaal)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"De auto schat de resterende actieradius op basis van een vast energieverbruik in Wh/km. De Wh/km-factor wordt bepaald door Tesla en is niet landspecifiek, terwijl het nominale bereik gebaseerd is op wettelijke tests in de verschillende markten voor dat voertuig.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"Update wordt uitgevoerd\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"Ramen open\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"Verwijder '%{geo_fence}'?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"Binnentemperatuur\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"Buitentemperatuur\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"Versie\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"Statuscontrole is mislukt\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"Ontgrendeld\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"Resterende tijd\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#: lib/teslamate_web/templates/layout/root.html.heex:95\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"Dashboards\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:327\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"URL's\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:330\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"Web App\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"Ingeschakeld\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"Slaapstand\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"Geo-hek \\\"%{name}\\\" bijgewerkt\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"Er is een fout opgetreden\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"Timeout\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"Verminderd accubereik\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} op 100%\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"Laadkosten\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"Kosten\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"Voer laadkosten in\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"Opgeslagen!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Voertuiggegevens ophalen ...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"Adressen\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"Taal\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"Er is een probleem opgetreden bij het ophalen van gegevens uit OpenStreetMap. Probeer het later opnieuw.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"TeslaFi Importeren\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"%{count} bestand gevonden\"\nmsgstr[1] \"%{count} bestanden gevonden\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"Importeren\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"Tijdzone\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"Log in\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"Laadkosten\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"Gratis laden bij Superchargers\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"Algemene instellingen\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"Sessiekosten\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"Deuren open\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"Per kWh\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"Totaal\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"Er is <strong>%{n} oplaadsessie</strong> op deze locatie waarvoor nog geen kosten zijn toegevoegd.\"\nmsgstr[1] \"Er zijn <strong>%{n} oplaadsessies</strong> op deze locatie waarvoor nog geen kosten zijn toegevoegd.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"Kosten met terugwerkende kracht toevoegen\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"Laadkosten\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"Ga verder\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"Kilometerstand\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"Streaming API\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:395\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Documentatie\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:385\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:380\n#: lib/teslamate_web/templates/layout/root.html.heex:188\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"Update beschikbaar\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"Deuren zijn open\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"Kofferbak is open\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"Per minuut\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Software-update beschikbaar (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:413\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"Uitloggen\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:145\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:165\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:158\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:151\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:309\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"Bewakingsmodus\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Appearance\"\nmsgstr \"Weergave\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:263\n#, elixir-autogen, elixir-format\nmsgid \"Dark\"\nmsgstr \"Donker\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:262\n#, elixir-autogen, elixir-format\nmsgid \"Follow System\"\nmsgstr \"Volg systeem\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:261\n#, elixir-autogen, elixir-format\nmsgid \"Light\"\nmsgstr \"Licht\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Theme\"\nmsgstr \"Thema\"\n"
  },
  {
    "path": "priv/gettext/nl/LC_MESSAGES/errors.po",
    "content": "# # `msgid`s in this file come from POT (.pot) files.\n# #\n# # Do not add, change, or remove `msgid`s manually here as\n# # they're tied to the ones in the corresponding POT file\n# # (with the same domain).\n# #\n# # Use `mix gettext.extract --merge` or `mix gettext.merge`\n# # to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: nl\\n\"\n\n# # From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"kan niet leeg zijn\"\n\n# # From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"is al in gebruik\"\n\n# # From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"is ongeldig\"\n\n# # From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"moet worden geaccepteerd\"\n\n# # From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"heeft een ongeldig formaat\"\n\n# # From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"heeft een ongeldige invoer\"\n\n# # From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"is gereserveerd\"\n\n# # From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"komt niet overeen met bevestiging\"\n\n# # From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"is nog steeds geassocieerd met dit item\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"zijn nog steeds gekoppeld aan dit item\"\n\n# # From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"moet %{count} karakter zijn\"\nmsgstr[1] \"moeten %{count} karakters zijn\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"moet %{count} item hebben\"\nmsgstr[1] \"moet %{count} items hebben\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"moet ten minste %{count} karakter zijn\"\nmsgstr[1] \"moet ten minste %{count} karakters zijn\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"moet ten minste %{count} item bevatten\"\nmsgstr[1] \"moet ten minste %{count} items bevatten\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"mag maximaal %{count} karakter zijn\"\nmsgstr[1] \"mag maximaal %{count} karakters zijn\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"mag maximaal %{count} item bevatten\"\nmsgstr[1] \"mag maximaal %{count} items bevatten\"\n\n# # From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"moet kleiner zijn dan %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"moet groter zijn dan %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"moet kleiner zijn dan of gelijk zijn aan %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"moet groter zijn dan of gelijk zijn aan %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"moet gelijk zijn aan %{number}\"\n"
  },
  {
    "path": "priv/gettext/sv/LC_MESSAGES/default.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: sv\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"Hastighet\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"Laddningsnivå\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"Laddad\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"vilat\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"laddat\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"kört\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"uppdaterat\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"Låst\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"Vaktläge\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"Hem\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"Inställningar\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"Schemalagd laddning\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"Inkopplad\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"Laddningsgräns\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"gått ner i vila\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"inte tillgänglig\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"Avstånd\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"Temperatur\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"Enheter\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"Tillbaka\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"Geostaket \\\"%{name}\\\" skapat\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"Geostaket\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"Inaktiv tid innan försök att gå ner i vila\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"Namn\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"Radie\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"Spara\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"Sparar...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Tid för försök att gå ner i vila\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"Inloggad\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"Bilen är olåst\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"Skapa\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"Förvärmning\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Vaktläge är aktiverad\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"Förare närvarande\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"avbryt försök att vila\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"försök att vila\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"Räckvidd (beräk.)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"i\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"Krav\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"Fordonet måste vara låst\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"Räckvidd (nominell)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"Laddningskraft\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"Föredragen räckvidd\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"Räckvidd\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"idealisk\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"nominell\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"Räckvidd (idealisk)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"Bilens uppskattning av återstående räckvidd baseras på en fast energiförbrukning i Wh/km. Wh/km-faktorn är bestämd av Tesla och är inte landsspecifik medan det nominella räckvidden är baserat på reglerande tester på de olika marknaderna för fordonet.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"Uppdatering pågår\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"Fönster öppna\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"Ta bort '%{geo_fence}'?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"Innertemperatur\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"Utetemperatur\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"Hälsokontroll misslyckades\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"Olåst\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"Återstående tid\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"Instrumentbrädor\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"URLer\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"Webbapp\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"Aktiverad\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"Viloläge\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"Geostaket \\\"%{name}\\\" uppdaterad\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"Ett fel uppstod\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"Reducerad batteriräckvidd\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} vid 100%\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"Laddningskostnad\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"Kostnad\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"Ange laddningskostnad\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"Sparat!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Hämtar fordonsdata ...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"Adresser\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"Språk\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"Det gick inte att hämta data från OpenStreetMap. Vänligen försök igen senare.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"%{count} fil hittades\"\nmsgstr[1] \"%{count} filer hittades\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"Importera\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"Tidszon\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"Logga in\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"Laddningskostnad\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"Gratis Supercharging\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"Allmänna Inställningar\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"Session avgift\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"Dörrar öppna\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"Total\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"Det finns <strong>%{n} laddningssession</strong> på denna position för vilken ingen kostnad har lagts till än.\"\nmsgstr[1] \"Det finns <strong>%{n} laddningssessioner</strong> på denna position för vilken inga kostnader har lagts till än.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"Lägg till kostnader retroaktivt\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"Laddningskostnad\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"Fortsätt\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"Mätarställning\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Dokumentation\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"Uppdatering tillgänglig\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"Dörrar är öppna\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"Bakluckan är öppen\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"Per Minut\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Mjukvaruuppdatering tillgänglig (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"Logga ut\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"Åtkomsttoken\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"Uppdatera token\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"Tokens är ogiltiga\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"För att få tokens via Tesla API krävs programmeringserfarenhet eller en tredjeparts tjänst. Information finns %{here}.\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"här\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"Ditt Tesla-konto är låst på grund av för många misslyckade inloggningsförsök. Återställ ditt lösenord för att låsa upp ditt konto\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"Laddar ner uppdatering\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"Ingen krypteringsnyckel har angetts\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"För mer information, se de uppdaterade installationsguiderna på %{link}\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"Den automatiskt genererade krypteringsnyckeln som används för den aktuella sessionen finns <strong>i programloggarna</strong>.\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"För att säkerställa att dina <strong>Tesla API-tokens lagras säkert</strong> måste en krypteringsnyckel tillhandahållas till TeslaMate via miljövariabeln <code>ENCRYPTION_KEY</code>. Annars kommer en <strong>inloggning att krävas efter varje omstart</strong>.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"Däcktryck\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"Hundläge\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"Hundläge är aktiverad\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"Förväntad sluttid\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"Du använder en API-nyckel (%{token}) från %{url}. Det ger din TeslaMate tillgång till den officiella Tesla Fleet API och Tesla Telemetry-strömning.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"Datainsamling\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"Batteri\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"LFP Batteri\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"Vaktläge\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/sv/LC_MESSAGES/errors.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: sv\\n\"\n\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"får inte vara tom\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"har redan blivit tagen\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"är ogiltig\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"måste accepteras\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"har ogiltigt format\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"har en ogiltig post\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"är reserverad\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"stämmer inte med bekräftelsen\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"är fortfarande associerad med den här posten\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"är fortfarande associerade med den här posten\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"bör vara %{count} tecken\"\nmsgstr[1] \"bör vara %{count} tecken\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"bör ha %{count} artiklar\"\nmsgstr[1] \"bör ha %{count} artikel\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"bör vara minst %{count} tecken\"\nmsgstr[1] \"bör vara minst %{count} tecken\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"bör ha minst %{count} artikel\"\nmsgstr[1] \"bör ha minst %{count} artiklar\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"bör vara högst %{count} tecken\"\nmsgstr[1] \"bör vara högst %{count} tecken\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"bör ha som mest %{count} artikel\"\nmsgstr[1] \"bör ha som mest %{count} artiklar\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"måste vara mindre än %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"måste vara större än %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"måste vara mindre eller lika med %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"måste vara större eller lika med %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"måste vara lika med %{number}\"\n"
  },
  {
    "path": "priv/gettext/th/LC_MESSAGES/default.po",
    "content": "# # `msgid`s in this file come from POT (.pot) files.\n# #\n# # Do not add, change, or remove `msgid`s manually here as\n# # they're tied to the ones in the corresponding POT file\n# # (with the same domain).\n# #\n# # Use `mix gettext.extract --merge` or `mix gettext.merge`\n# # to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: th\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"สถานะ\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"ความเร็ว\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"สถานะการชาร์จ\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"ชาร์จเรียบร้อยแล้ว\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"หลับอยู่\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"กำลังชาร์จ\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"กำลังขับรถ\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"ออฟไลน์\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"ออนไลน์\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"กำลังอัปเดท\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"ล๊อคแล้ว\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"โหมด Sentry\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"บ้าน\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"การตั้งค่า\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"การชาร์จตามกำหนดเวลา\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"เสียบปลั๊กแล้ว\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"การจำกัดการชาร์จ\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"กำลังเข้าสู่การหลับ\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"ไม่พร้อมใช้งาน\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"ความยาว\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"อุณหภูมิ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"หน่วย\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"ย้อนกลับ\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"สร้างขอบเขตทางภูมิศาสตร์ \\\"%{name}\\\" แล้ว\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"ขอบเขตทางภูมิศาสตร์\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"ระยะเวลาก่อนทำงานในโหมดหลับ\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"ชื่อ\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"ตำแหน่ง\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"รัศมี\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"บันทึก\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"กำลังบันทึก...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"จำนวนครั้งที่รถพยายามเข้าสู่โหมดหลับ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"นาที\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"ลงชื่อเข้าใช้เรียบร้อย\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"รถถูกปลดล็อคแล้ว\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"สร้าง\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"การปรับสภาพล่วงหน้า\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"โหมด Sentry เปิดแล้ว\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"มีผู้ขับรถอยู่\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"ยกเลิกการพยายามเข้าสู่โหมดหลับ\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"พยายามเข้าสู่โหมดหลับ\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"ระยะทาง (โดยประมาณ)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"สำหรับ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"ความต้องการ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"รถควรจะต้องถูกล็อค\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"ระยะทาง (จัดอันดับ)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"กำลังการชาร์จ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"ระยะที่ต้องการ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"ระยะทาง\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"ในอุดมคติ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"จัดอันดับแล้ว\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"ระยะทาง (ในอุดมคติ)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"ระยะทางที่เหลือโดยประมาณของรถจะขึ้นอยู่กับอัตราการสิ้นเปลืองพลังงานคงที่ในหน่วยกิโลวัตต์ชั่วโมง ปัจจัยกิโลวัตต์ชั่วโมงถูกกำหนดโดย Tesla และไม่ได้ระบุเฉพาะประเทศ ในขณะที่ช่วงพิกัดจะขึ้นอยู่กับการทดสอบตามกฎข้อบังคับในตลาดต่างๆ สำหรับยานพาหนะนั้น\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"อยู่ระหว่างการอัพเดท\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"หน้าต่างเปิดอยู่\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"ลบ '%{geo_fence}' หรือไม่?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"อุณหภูมิภายใน\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"อุณหภูมิภายนอก\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"รุ่น\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"การตรวจสุขภาพล้มเหลว\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"ปลดล็อคแล้ว\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"เวลาที่เหลือ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"แดชบอร์ด\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"URL\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"เว็บแอป\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"เปิดใช้งานแล้ว\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"โหมดหลับ\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"อัปเดตขอบเขตทางภูมิศาสตร์ \\\"%{name}\\\" แล้ว\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"เกิดข้อผิดพลาด\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"หมดเวลา\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"ระยะแบตเตอรี่ลดลง\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} ที่ 100%\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"ค่าใช้จ่ายในการชาร์จ\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"ค่าใช้จ่าย\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"ป้อนค่าใช้จ่ายในการชาร์จ\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"บันทึกแล้ว!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"กำลังเรียกข้อมูลรถ...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"ที่อยู่\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"ภาษา\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"เกิดปัญหาในการเรียกข้อมูลจาก OpenStreetMap กรุณาลองใหม่อีกครั้งในภายหลัง.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"การนำเข้าจาก TeslaFi\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen, fuzzy\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"พบ %{count} ไฟล์\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"นำเข้า\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"เขตเวลา\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"เข้าสู่ระบบ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"ค่าใช้จ่ายการชาร์จ\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"ซูเปอร์ชาร์จฟรี\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"การตั้งค่าทั่วไป\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"ค่าธรรมเนียมเซสชัน\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"ประตูเปิด\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"ต่อกิโลวัตต์ชั่วโมง\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"ทั้งหมด\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"มีเซสชันการเรียกเก็บเงิน <strong>%{n} ครั้ง</strong> ณ ตำแหน่งนี้ ซึ่งยังไม่มีการเพิ่มค่าใช้จ่าย\"\nmsgstr[1] \"มีเซสชันการเรียกเก็บเงิน <strong>%{n} ครั้ง</strong> ณ ตำแหน่งนี้ ซึ่งยังไม่มีการเพิ่มค่าใช้จ่าย\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"เพิ่มค่าใช้จ่ายย้อนหลัง\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"ค่าใช้จ่ายในการชาร์จ\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"ดำเนินการต่อ\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"ระยะทาง\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"สตรีมมิ่ง API\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"เอกสาร\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"มีการอัปเดต\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"ประตูเปิดอยู่\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"ที่เก็บสัมภาระท้ายรถเปิดอยู่\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"ต่อนาที\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"มีการอัปเดตซอฟต์แวร์ (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"ออกจากระบบ\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"โทเค็นการเข้าถึง\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"รีเฟรชโทเค็น\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"โทเค็นไม่ถูกต้อง\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"การได้รับโทเค็นผ่าน Tesla API ต้องใช้ประสบการณ์การเขียนโปรแกรมหรือบริการของบุคคลที่สาม ข้อมูลสามารถพบได้ที่ %{here}\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"ที่นี่\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"บัญชี Tesla ของคุณถูกล็อคเนื่องจากการพยายามลงชื่อเข้าใช้ที่ล้มเหลวหลายครั้งเกินไป หากต้องการปลดล็อคบัญชีของคุณ ให้รีเซ็ตรหัสผ่านของคุณ\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"กำลังดาวน์โหลดอัปเดต\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"ไม่มีคีย์เข้ารหัสให้มา\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"สำหรับข้อมูลเพิ่มเติม โปรดดูคู่มือการติดตั้งที่อัปเดตที่ %{link}\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"คีย์การเข้ารหัสที่สร้างขึ้นโดยอัตโนมัติที่ใช้สำหรับเซสชันปัจจุบันสามารถพบได้<strong>ในบันทึกแอปพลิเคชัน</strong>\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"เพื่อให้แน่ใจว่า <strong>โทเค็น Tesla API ของคุณจะถูกเก็บไว้อย่างปลอดภัย</strong> จะต้องมอบคีย์การเข้ารหัสให้กับ TeslaMate ผ่านทางตัวแปรสภาพแวดล้อม <code>ENCRYPTION_KEY</code> มิฉะนั้น <strong>จะต้องเข้าสู่ระบบหลังจากรีสตาร์ททุกครั้ง</strong>\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"แรงดันลมยาง\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"โหมดสำหรับสุนัข\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"เปิดใช้งานโหมดสำหรับสุนัขแล้ว\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"เวลาที่คาดว่าจะเสร็จสิ้น\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"คุณกำลังใช้คีย์ API (%{token}) ที่ได้รับจาก %{url} มันจะช่วยให้ TeslaMate ของคุณเข้าถึง Tesla Fleet API อย่างเป็นทางการและการสตรีม Tesla Telemetry\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"การเก็บรวบรวมข้อมูล\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"แบตเตอรี่\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"แบตเตอรี่ชนิด LFP\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"การบันทึกใน Sentry โหมด\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"ดูตำแหน่งรถบน Google Maps\"\n"
  },
  {
    "path": "priv/gettext/th/LC_MESSAGES/errors.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: th\\n\"\n\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"ไม่สามารถเว้นว่างได้\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"ถูกเลือกไปแล้ว\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"ไม่ถูกต้อง\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"จะต้องยอมรับ\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"มีรูปแบบที่ไม่ถูกต้อง\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"มีรายการไม่ถูกต้อง\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"ถูกสงวนไว้\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"ไม่ตรงกับการยืนยัน\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"ยังคงเกี่ยวข้องกับรายการนี้\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"ยังคงเกี่ยวข้องกับรายการนี้\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"ควรเป็น %{count} อักขระ\"\nmsgstr[1] \"ควรเป็น %{count} อักขระ\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"ควรมี %{count} รายการ\"\nmsgstr[1] \"ควรมี %{count} รายการ\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"ควรมีอักขระอย่างน้อย %{count} ตัว\"\nmsgstr[1] \"ควรมีอักขระอย่างน้อย %{count} ตัว\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"ควรมีอย่างน้อย %{count} รายการ\"\nmsgstr[1] \"ควรมีอย่างน้อย %{count} รายการ\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"ควรมีอักขระไม่เกิน %{count} ตัว\"\nmsgstr[1] \"ควรมีอักขระไม่เกิน %{count} ตัว\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"ควรมีมากที่สุด %{count} รายการ\"\nmsgstr[1] \"ควรมีมากที่สุด %{count} รายการ\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"ต้องน้อยกว่า %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"ต้องมากกว่า %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"ต้องน้อยกว่าหรือเท่ากับ %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"ต้องมากกว่าหรือเท่ากับ %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"ต้องเท่ากับ %{number}\"\n"
  },
  {
    "path": "priv/gettext/tr/LC_MESSAGES/default.po",
    "content": "## This file is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here as no\n## effect: edit them in PO (`.po`) files instead.\nmsgid \"\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"Durum\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"Hız\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"Şarj Durumu\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"Şarj Oldu\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"uykuda\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"şarj oluyor\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"sürüş\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"çevrimdışı\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"çevrimiçi\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"güncelleniyor\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"Kilitli\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"Sentry-modu\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"Anasayfa\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"Ayarlar\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"Zamanlanmış Şarj\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"Prize Takılı\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"Şarj Sınırı\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"uykuya dalıyor\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"mevcut değil\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"Uzunluk\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"Sıcaklık\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"Birimler\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"Geri\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"Coğrafi-sınır \\\"%{name}\\\" oluşturuldu\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"Coğrafi-Sınırlar\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"Uykuya Dalmadan Önce Boşta Geçen Zaman\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"İsim\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"Konum\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"Yarıçap\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"Kaydet\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"Kaydediliyor...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Uykuya Dalmayı Deneme Zamanı\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"min\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"Oturum başarıyla açıldı\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"Araba kilitli değil\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"Oluştur\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"Batarya şarja hazırlanıyor\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Sentry-modu devrede\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"Sürücü araçta\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"Uykuya dalmaktan vazgeç\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"uyumaya çalış\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"Menzil (tahmini)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"için\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"Gereksinimler\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"Araç kilitli olmalı\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"Menzil (hesaplanan)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"Şarj Cihazı Gücü\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"Tercih Edilen Menzil\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"Menzil\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"ideal\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"hesaplanan\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"Menzil (ideal)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"Aracın kalan menzil tahmini Wh/km cinsinden belirlenmiş sabit bir enerji tüketimine göre temel alınmıştır. Hesaplanan menzil, düzenliyici kurumların ilgili piyasalarda bu araç için yaptığı testlere göre temel alınırken Wh/km çarpanı Tesla tarafından belirlenir ve ülkeye özgü değildir.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"Güncelleniyor\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"Pencereler açık\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"Sil '%{geo_fence}'?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"İç Ortam Sıcaklığı\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"Dış Ortam Sıcaklığı\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"Sürüm\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"Sağlık kontrolü başarısız\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"Kilit açıldı\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"Kalan Süre\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"Gösterge Paneli\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"Bağlantılar\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"Web Uygulaması\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"Devrede\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"Uyku Modu\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"Coğrafi-sınır \\\"%{name}\\\" güncellendi\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"Bir hata oluştu\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"Zamanaşımı\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"Kısıtlı Batarya Menzili\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %100'de %{range}\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"Şarj Tutarı\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"Tutar\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"Şarj tutarını girin\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"Kaydedildi!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Araç verisi alınıyor...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"Adresler\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"Dil\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"OpenSTreetMap'den veriler alınırken bir hata oluştu. Lütfen daha sonra tekrar deneyin.\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"TeslaFi'den İçe Aktarma\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"%{count} dosya bulundu\"\nmsgstr[1] \"%{count} dosya bulundu\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"İçe Aktar\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"Saat dilimi\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"Oturum aç\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"Şarj Tutarı\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"Bedava Supercharging\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"Genel Ayarlar\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"Oturum ücreti\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"Kapılar açık\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"kWh başına\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"Toplam\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"Bu konumdaki <strong>%{n} şarj işlemi</strong> için henüz bir ücret yansıtılmadı.\"\nmsgstr[1] \"Bu konumdaki <strong>%{n} şarj işlemi</strong> için henüz bir ücret yansıtılmadı.\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"Tutarları geçmişe dönük olarak ekle\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"Şarj Tutarları\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"Devam Et\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"Mesafe\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"Eşzamanlı-API\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Dökümantasyon\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"Güncelleme mevcut\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"Kapılar açık\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"Bağaj açık\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"Dakika Başına\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Yazılım Güncellemesi mevcut (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"Sentry-modu\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/tr/LC_MESSAGES/errors.po",
    "content": "## This is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here has no\n## effect: edit them in PO (`.po`) files instead.\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"boş olamaz\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"daha önce seçildi\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"geçersiz\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"kabul edilmesi gerekli\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"geçersiz format\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"geçersiz bir kayıt mevcut\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"geri alındı\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"onayla eşleşmiyor\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"hala bu kayıtla ilişkili\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"hala bu kayıtla ilişkili\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"%{count} karakter olmalı\"\nmsgstr[1] \"%{count} karakter olmalı\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"%{count} öğe bulunmalı\"\nmsgstr[1] \"%{count} öğe bulunmalı\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"en azından %{count} karakter olmalı\"\nmsgstr[1] \"en azından %{count} karakter olmalı\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"en azından %{count} öğe bulunmalı\"\nmsgstr[1] \"en azından %{count} öğe bulunmalı\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"en fazla %{count} karakter olmalı\"\nmsgstr[1] \"en fazla %{count} karakter olmalı\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"en fazla %{count} öğe bulunmalı\"\nmsgstr[1] \"en fazla %{count} öğe bulunmalı\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"%{number}'den küçük olmalı\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"%{number}'den büyük olmalı\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"%{number}'den küçük ya da eşit olmalı\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"%{number}'den büyük ya da eşit olmalı\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"%{number}'e eşit olmalı\"\n"
  },
  {
    "path": "priv/gettext/uk/LC_MESSAGES/default.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: uk\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"Статус\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"Швидкість\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"Рівень заряду\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"Заряджено\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"спить\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"заряджається\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"подорожує\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"офлайн\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"онлайн\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"оновлюється\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"Закрито\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"Сентрі Мод\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"Додому\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"Налаштування\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"Запланована зарядка\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"З кабелем\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"Ліміт зарядки\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"Засинає\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"недоступно\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"Довжина\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"Температура\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"Одиниці\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"Назад\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"Гео-позиція \\\"%{name}\\\" створена\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"Гео-позиції\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"Час простою перед спробою заснути\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"Ім'я\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"Позиція\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"Радіус\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"Зберегти\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"Зберігаю...\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"Час до спроби заснути\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"мінімум\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"Вхід успішний\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"Авто відкрите\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"Створити\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"Прогрів\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"Сентрі мод увімкнено\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"Водій присутній\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"відмінити спробу сну\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"спроба заснути\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"Дальність (est.)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"для\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"Вимоги\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"Авто повинно бути зачинене\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"Дальність (rated)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"Потужність зарядки\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"Бажана дальність\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"Дальність\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"Дальність (ideal)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"Авто розраховує залишок відстані базаючись на фіксованому споживання енергії в Вт/км. Одиниця Вт/км визначено Теслою і не змінюється для кожної країни окремо, в залежності від законодавства різних країн та відповідного тестування.\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"Оновлення в процессі\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"Відкриті вікна\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"Видалити '%{geo_fence}'?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"Температура всередині\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"Температура ззовні\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"Версія\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"Помилка при перевірці\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"Відкрито\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"Залишилось часу\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"Посилання\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"Веб Додаток\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"Увімкнено\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"Спить\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"Гео-позиція \\\"%{name}\\\" оновлена\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"Сталась помилка\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"Таймаут\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"Зменшено доступний залишок батареї\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ %{range} при 100%\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"Вартість зарядки\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"Вартість\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"Введіть вартість зарядки\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"Збережено!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"Отримую інформацію з машини\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"Адреси\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"Мова\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"Виникла помилка під час отримання даних з OpenStreetMap. Спробуйте пізніше, будьласка\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"TeslaFi імпорт\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"Знайдено %{count} файл\"\nmsgstr[1] \"Знайдено %{count} файли\"\nmsgstr[2] \"Знайдено %{count} файли\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"Імпорт\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"Часовий пояс\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"Увійти\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"Вартість зарядки\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"Безкоштовний суперчарджер\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"Загальні налаштування\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"Вартість сесії\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"Відкриті двері\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"за кВт*Г\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"Усього\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"Зарядній сесії %{n} у данній гео-позиції ще не задано вартість\"\nmsgstr[1] \"Зарядним сесіям %{n} у данній гео-позиції ще не задано вартість\"\nmsgstr[2] \"Зарядним сесіям %{n} у данній гео-позиції ще не задано вартість\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"Додати вартість минулим сесіям?\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"Вартість зарядки\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"Продовжити\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"Пробіг\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"Потокове API\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"Документація\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"Доступне оновлення\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"Двері відкриті\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"Багажник відкритий\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"За хвилину\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"Доступне оновлення ПЗ (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"Вийти\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"Токени не дійсні\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"Для отримання токенів через API Tesla вимагає навичок програмування або доступ до інших сервісів. Інформацію можна знайти %{here}.\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"тут\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"Ваш аккаунт Тесла заблоковано через дуже велику кількість невдалих спроб входу. Щоб розблокувати свій аккаунт, відновіть свій пароль\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"Завантаження оновлення\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"Не надано ключ шифрування\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"За додатковою інформацією, ознайомтесь з інструкцією за посиланням %{link}\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"Автоматично сгенерований ключ шифрування, що використовується поточною сесією може бути знайдений <strong>у логах додотку</strong>.\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"Щоб переконатися що <strong>Tesla API токени зберігаються безпечно</strong>, ключ шифрування повинен передаватись TeslaMate через <code>ENCRYPTION_KEY</code> змінну в середовищі. Інакше, <strong>необхідно буде виконувати вхід, після кожного перезапуску</strong>.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"Тиск\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"Сентрі Мод\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/uk/LC_MESSAGES/errors.po",
    "content": "## `msgid`s in this file come from POT (.pot) files.\n##\n## Do not add, change, or remove `msgid`s manually here as\n## they're tied to the ones in the corresponding POT file\n## (with the same domain).\n##\n## Use `mix gettext.extract --merge` or `mix gettext.merge`\n## to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: uk\\n\"\n\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"не повинно бути порожнім\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"вже зайнято\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"невірний\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"повинно бути прийняте\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"невірний формат\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"невірний запис\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"зарезервовано\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"не відповідає підтвердженню\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"досі стосується цього запису\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"досі стосуються цих записів\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"повинно бути %{count} символу\"\nmsgstr[1] \"повинно бути %{count} символів\"\nmsgstr[2] \"повинно бути %{count} символів\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"повинно бути %{count} знаку\"\nmsgstr[1] \"повинно бути %{count} знаків\"\nmsgstr[2] \"повинно бути %{count} знаків\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"повинно мати %{count} знаки\"\nmsgstr[1] \"повинно мати %{count} знаків\"\nmsgstr[2] \"повинно мати %{count} знаків\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"повинно мати хочаб %{count} символу\"\nmsgstr[1] \"повинно мати хочаб %{count} символів\"\nmsgstr[2] \"повинно мати хочаб %{count} символів\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"не повинно перевищувати %{count} знаки\"\nmsgstr[1] \"не повинно перевищевати %{count} знаків\"\nmsgstr[2] \"не повинно перевищевати %{count} знаків\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"не повинно перевищувати %{count} символи\"\nmsgstr[1] \"не повинно перевищувати %{count} символів\"\nmsgstr[2] \"не повинно перевищувати %{count} символів\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"має бути менше ніж %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"має бути більше ніж %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"має бути менше чи дорівнювати %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"має бути більше чи дорівнювати %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"має дорівнювати %{number}\"\n"
  },
  {
    "path": "priv/gettext/zh_Hans/LC_MESSAGES/default.po",
    "content": "## This file is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here as no\n## effect: edit them in PO (`.po`) files instead.\nmsgid \"\"\nmsgstr \"\"\n\"Language: zh_Hans\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"当前状态\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"速度\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"当前电量\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"已充入电量\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"已休眠\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"充电中\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"行驶中\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"离线\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"在线\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"更新中\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"已锁车\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"哨兵模式\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"主页\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"设置\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"按计划充电\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"充电头已插入\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"充电上限\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"进入休眠中\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"不可用\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"长度\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"温度\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"单位\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"后退\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"收藏点 \\\"%{name}\\\" 已创建\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"收藏点\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"进入休眠前的闲置时间\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"名字\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"位置\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"半径\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"保存\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"保存中\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"尝试进入睡眠用时\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"分钟\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"登录成功\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"已锁车\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"新建\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"预热/冷\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"哨兵模式已启用\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"当前驾驶员\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"取消休眠\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"尝试休眠\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"当前剩余里程 (预估)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"休眠条件\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"车辆必须处于锁车状态\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"典型里程\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"充电功率\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"里程标定方式\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"里程\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"额定\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"典型\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"当前剩余里程 (额定)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"实际续航里程会因车辆配置、电池使用时长和状况、驾驶习惯及操作、环境和气候状况等因素的影响而有所不同。\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"更新中\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"车窗 开\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"确定删除 '%{geo_fence}' ?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"车内温度\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"车外温度\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"当前固件版本\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"健康检查失败\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"已解锁\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"充电剩余时间\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"控制台\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"URLs\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"Web应用程序\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"已启用\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"休眠模式\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"收藏点 \\\"%{name}\\\" 已更新\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"发生了一个错误\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"已超时\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"已降低续航里程\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"100%时续航为 %{range}\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"充电费用\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"费用\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"请输入充电费用\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"已保存!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"正在获取车辆数据\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"地址\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"语言\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"在获取OpenStreetMap地图信息时发生错误，请稍后再试。\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"从TeslaFi导入\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"找到了 %{count} 个文件\"\nmsgstr[1] \"找到了 %{count} 个文件\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"导入\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"时区\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"登录\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"充电费用\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"免费超充\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"通用设置\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"手续费\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"未锁车\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"每度电\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"总共\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"此位置有 <strong>%{n} 次</strong> 收费记录，尚未添加任何费用。\"\nmsgstr[1] \"此位置有 <strong>%{n} 次</strong> 收费记录，尚未添加任何费用。\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"过期费用追加\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"充电费用\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"下一步\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"总里程\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"Tesla串流接口 (默认开启)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"帮助文档\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"有可用更新\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"未上锁\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"行李箱已打开\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"每分钟\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"有可用更新 (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"退出登录\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"令牌\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"刷新令牌\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"令牌 无效\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"通过 Tesla API 获得令牌需要有编程经验或者借助第三方服务。更多信息可以查看 %{here}。\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"这里\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"您的 Tesla 帐户因登录尝试失败次数过多而被锁定。要解锁您的帐户，请重置您的密码\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"正在下载更新程序\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"没有提供密钥\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"获取更多信息,可查看更新安装指引:%{link}\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"当前会话自动生成的密钥可在<strong>应用程序日志</strong>中找到\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"为确保你的<strong>Tesla API令牌安全存储</strong>,密钥必须通过<code>ENCRYPTION_KEY</code>环境变量提供给Teslamate.否则每次重启都会被要求登录.\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"胎压\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"爱犬模式\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"爱犬模式已激活\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"预计完成时间\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"正在使用由 %{url} 提供的API key (%{token})。他将允许TeslaMate通过特斯拉官方车队API和Telemetry数据流访问你的车辆。\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"数据收集\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"电池类型\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"磷酸铁锂电池\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"哨兵模式录制中\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"\"\n"
  },
  {
    "path": "priv/gettext/zh_Hans/LC_MESSAGES/errors.po",
    "content": "## This is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here has no\n## effect: edit them in PO (`.po`) files instead.\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"\"\n\"Language: zh_Hans\\n\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"已被使用\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"无效\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"必须接受\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"为无效格式\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"为无效输入\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"已被使用\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"与已确认的不匹配\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"仍然与该输入相关联\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"仍然与该输入相关联\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"应为 %{count}\"\nmsgstr[1] \"\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"应有 %{count}\"\nmsgstr[1] \"\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"应至少有 %{count}\"\nmsgstr[1] \"\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"应至少有 %{count}\"\nmsgstr[1] \"\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"应不超过 %{count}\"\nmsgstr[1] \"\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"应不超过 %{count}\"\nmsgstr[1] \"\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"应少于 %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"应大于 %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"应小于或等于 %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"应大于或等于 %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"应为 %{number}\"\n"
  },
  {
    "path": "priv/gettext/zh_Hant/LC_MESSAGES/default.po",
    "content": "# # `msgid`s in this file come from POT (.pot) files.\n# #\n# # Do not add, change, or remove `msgid`s manually here as\n# # they're tied to the ones in the corresponding POT file\n# # (with the same domain).\n# #\n# # Use `mix gettext.extract --merge` or `mix gettext.merge`\n# # to merge POT files into PO files.\nmsgid \"\"\nmsgstr \"\"\n\"Language: zh_Hant\\n\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:220\n#, elixir-autogen, elixir-format\nmsgid \"Status\"\nmsgstr \"目前狀態\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:374\n#, elixir-autogen, elixir-format\nmsgid \"Speed\"\nmsgstr \"速度\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:364\n#, elixir-autogen, elixir-format\nmsgid \"State of Charge\"\nmsgstr \"目前電量\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:298\n#, elixir-autogen, elixir-format\nmsgid \"Charged\"\nmsgstr \"已充滿\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:139\n#, elixir-autogen, elixir-format\nmsgid \"asleep\"\nmsgstr \"休眠\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:134\n#, elixir-autogen, elixir-format\nmsgid \"charging\"\nmsgstr \"充電中\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:133\n#, elixir-autogen, elixir-format\nmsgid \"driving\"\nmsgstr \"駕駛中\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:138\n#, elixir-autogen, elixir-format\nmsgid \"offline\"\nmsgstr \"離線中\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:137\n#, elixir-autogen, elixir-format\nmsgid \"online\"\nmsgstr \"線上\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:135\n#, elixir-autogen, elixir-format\nmsgid \"updating\"\nmsgstr \"更新中\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Locked\"\nmsgstr \"已鎖車\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Sentry Mode\"\nmsgstr \"哨兵模式\"\n\n#: lib/teslamate_web/live/car_live/index.ex:15\n#: lib/teslamate_web/live/charge_live/cost.html.heex:3\n#: lib/teslamate_web/live/geofence_live/form.html.heex:3\n#: lib/teslamate_web/live/geofence_live/index.html.heex:3\n#: lib/teslamate_web/live/import_live/index.html.heex:3\n#: lib/teslamate_web/live/settings_live/index.html.heex:3\n#, elixir-autogen, elixir-format\nmsgid \"Home\"\nmsgstr \"首頁\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:21\n#: lib/teslamate_web/live/settings_live/index.html.heex:4\n#: lib/teslamate_web/templates/layout/root.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Settings\"\nmsgstr \"設定\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:313\n#, elixir-autogen, elixir-format\nmsgid \"Scheduled Charging\"\nmsgstr \"充電排程\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Plugged In\"\nmsgstr \"已連接充電埠\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:325\n#, elixir-autogen, elixir-format\nmsgid \"Charge Limit\"\nmsgstr \"充電上限\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:136\n#, elixir-autogen, elixir-format\nmsgid \"falling asleep\"\nmsgstr \"進入休眠中\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:140\n#, elixir-autogen, elixir-format\nmsgid \"unavailable\"\nmsgstr \"不可用\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:254\n#, elixir-autogen, elixir-format\nmsgid \"Length\"\nmsgstr \"距離\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:269\n#, elixir-autogen, elixir-format\nmsgid \"Temperature\"\nmsgstr \"溫度\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:251\n#, elixir-autogen, elixir-format\nmsgid \"Units\"\nmsgstr \"單位\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:165\n#: lib/teslamate_web/live/geofence_live/form.html.heex:124\n#, elixir-autogen, elixir-format\nmsgid \"Back\"\nmsgstr \"上一步\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:188\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" created\"\nmsgstr \"收藏地點 \\\"%{name}\\\" 已建立\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:110\n#: lib/teslamate_web/live/geofence_live/form.html.heex:4\n#: lib/teslamate_web/live/geofence_live/index.ex:22\n#: lib/teslamate_web/live/geofence_live/index.html.heex:5\n#: lib/teslamate_web/templates/layout/root.html.heex:101\n#, elixir-autogen, elixir-format\nmsgid \"Geo-Fences\"\nmsgstr \"收藏地點\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:74\n#, elixir-autogen, elixir-format\nmsgid \"Idle Time Before Trying to Sleep\"\nmsgstr \"進入休眠前的閒置時間\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:46\n#: lib/teslamate_web/live/geofence_live/form.html.heex:52\n#: lib/teslamate_web/live/geofence_live/index.html.heex:23\n#, elixir-autogen, elixir-format\nmsgid \"Name\"\nmsgstr \"名字\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:19\n#: lib/teslamate_web/live/geofence_live/index.html.heex:24\n#, elixir-autogen, elixir-format\nmsgid \"Position\"\nmsgstr \"位置\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:25\n#, elixir-autogen, elixir-format\nmsgid \"Radius\"\nmsgstr \"半徑\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:168\n#: lib/teslamate_web/live/geofence_live/form.html.heex:128\n#, elixir-autogen, elixir-format\nmsgid \"Save\"\nmsgstr \"保存\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:169\n#: lib/teslamate_web/live/geofence_live/form.html.heex:129\n#: lib/teslamate_web/live/signin_live/index.html.heex:84\n#, elixir-autogen, elixir-format\nmsgid \"Saving...\"\nmsgstr \"儲存中\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:53\n#, elixir-autogen, elixir-format\nmsgid \"Time to Try Sleeping\"\nmsgstr \"嘗試進入睡眠\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:64\n#: lib/teslamate_web/live/settings_live/index.html.heex:87\n#, elixir-autogen, elixir-format\nmsgid \"min\"\nmsgstr \"分鐘\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:83\n#, elixir-autogen, elixir-format\nmsgid \"Signed in successfully\"\nmsgstr \"登入成功\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:142\n#, elixir-autogen, elixir-format\nmsgid \"Car is unlocked\"\nmsgstr \"已鎖車\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:14\n#, elixir-autogen, elixir-format\nmsgid \"Create\"\nmsgstr \"新建\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:146\n#: lib/teslamate_web/live/car_live/summary.html.heex:57\n#, elixir-autogen, elixir-format\nmsgid \"Preconditioning\"\nmsgstr \"預熱/冷\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:145\n#, elixir-autogen, elixir-format\nmsgid \"Sentry mode is enabled\"\nmsgstr \"哨兵模式已啟用\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:148\n#: lib/teslamate_web/live/car_live/summary.html.heex:81\n#, elixir-autogen, elixir-format\nmsgid \"Driver present\"\nmsgstr \"駕駛中\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:459\n#, elixir-autogen, elixir-format\nmsgid \"cancel sleep attempt\"\nmsgstr \"取消休眠\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:450\n#, elixir-autogen, elixir-format\nmsgid \"try to sleep\"\nmsgstr \"嘗試休眠\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:285\n#, elixir-autogen, elixir-format\nmsgid \"Range (est.)\"\nmsgstr \"續航里程 (預估)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:225\n#, elixir-autogen, elixir-format\nmsgid \"for\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Requirements\"\nmsgstr \"休眠條件\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:107\n#, elixir-autogen, elixir-format\nmsgid \"Vehicle must be locked\"\nmsgstr \"車輛必須處於鎖車狀態\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:265\n#, elixir-autogen, elixir-format\nmsgid \"Range (rated)\"\nmsgstr \"續航里程 (表定)\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:304\n#, elixir-autogen, elixir-format\nmsgid \"Charger Power\"\nmsgstr \"充電功率\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:190\n#, elixir-autogen, elixir-format\nmsgid \"Preferred Range\"\nmsgstr \"里程標定方式\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:186\n#, elixir-autogen, elixir-format\nmsgid \"Range\"\nmsgstr \"里程\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:198\n#, elixir-autogen, elixir-format\nmsgid \"ideal\"\nmsgstr \"理想狀態\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:199\n#, elixir-autogen, elixir-format\nmsgid \"rated\"\nmsgstr \"表定狀態\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:264\n#, elixir-autogen, elixir-format\nmsgid \"Range (ideal)\"\nmsgstr \"續航里程 (理想狀態)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:189\n#, elixir-autogen, elixir-format\nmsgid \"The car's estimate of remaining range is based on a fixed energy consumption in Wh/km. The Wh/km factor is determined by Tesla and is not country specific whereas the rated range is based on regulatory tests in the different markets for that vehicle.\"\nmsgstr \"實際續航里程會因車輛配置、電池使用時長和狀況、駕駛習慣及操作、環境和氣候狀況等因素的影響而有所不同。\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:150\n#, elixir-autogen, elixir-format\nmsgid \"Update in progress\"\nmsgstr \"更新中\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:106\n#, elixir-autogen, elixir-format\nmsgid \"Windows open\"\nmsgstr \"車窗 開\"\n\n#: lib/teslamate_web/live/geofence_live/index.html.heex:60\n#, elixir-autogen, elixir-format\nmsgid \"Delete '%{geo_fence}'?\"\nmsgstr \"確定刪除 ‘%{geo_fence}’ ?\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:399\n#, elixir-autogen, elixir-format\nmsgid \"Inside Temperature\"\nmsgstr \"車內溫度\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:387\n#, elixir-autogen, elixir-format\nmsgid \"Outside Temperature\"\nmsgstr \"車外溫度\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:424\n#: lib/teslamate_web/live/settings_live/index.html.heex:349\n#, elixir-autogen, elixir-format\nmsgid \"Version\"\nmsgstr \"車輛軟體版本\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:203\n#, elixir-autogen, elixir-format\nmsgid \"Health check failed\"\nmsgstr \"健康檢查失敗\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:138\n#, elixir-autogen, elixir-format\nmsgid \"Unlocked\"\nmsgstr \"已解鎖\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:247\n#, elixir-autogen, elixir-format\nmsgid \"Remaining Time\"\nmsgstr \"剩餘時間\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:324\n#: lib/teslamate_web/templates/layout/root.html.heex:83\n#, elixir-autogen, elixir-format\nmsgid \"Dashboards\"\nmsgstr \"控制台\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:302\n#, elixir-autogen, elixir-format\nmsgid \"URLs\"\nmsgstr \"URLs\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:216\n#: lib/teslamate_web/live/settings_live/index.html.heex:305\n#, elixir-autogen, elixir-format\nmsgid \"Web App\"\nmsgstr \"Web應用程式\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:32\n#: lib/teslamate_web/live/settings_live/index.html.heex:144\n#, elixir-autogen, elixir-format\nmsgid \"Enabled\"\nmsgstr \"已啟用\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:48\n#, elixir-autogen, elixir-format\nmsgid \"Sleep Mode\"\nmsgstr \"休眠模式\"\n\n#: lib/teslamate_web/live/geofence_live/form.ex:189\n#, elixir-autogen, elixir-format\nmsgid \"Geo-fence \\\"%{name}\\\" updated\"\nmsgstr \"收藏點 \\\"%{name}\\\" 已更新\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:152\n#, elixir-autogen, elixir-format\nmsgid \"An error occurred\"\nmsgstr \"發生了一個錯誤\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:151\n#, elixir-autogen, elixir-format\nmsgid \"Timeout\"\nmsgstr \"已超時\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Reduced Battery Range\"\nmsgstr \"已降低續航里程\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:358\n#, elixir-autogen, elixir-format\nmsgid \"≈ %{range} at 100%\"\nmsgstr \"≈ 100%時續航為 %{range}\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:20\n#: lib/teslamate_web/live/charge_live/cost.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"Charge Cost\"\nmsgstr \"充電費用\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:132\n#: lib/teslamate_web/live/geofence_live/form.html.heex:64\n#, elixir-autogen, elixir-format\nmsgid \"Cost\"\nmsgstr \"費用\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Enter charge cost\"\nmsgstr \"請輸入充電費用\"\n\n#: lib/teslamate_web/live/charge_live/cost.ex:87\n#, elixir-autogen, elixir-format\nmsgid \"Saved!\"\nmsgstr \"已儲存!\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:50\n#, elixir-autogen, elixir-format\nmsgid \"Fetching vehicle data ...\"\nmsgstr \"正在讀取車輛數據\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:231\n#, elixir-autogen, elixir-format\nmsgid \"Addresses\"\nmsgstr \"地址\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:212\n#, elixir-autogen, elixir-format\nmsgid \"Language\"\nmsgstr \"語言\"\n\n#: lib/teslamate_web/live/settings_live/index.ex:64\n#, elixir-autogen, elixir-format\nmsgid \"There was a problem retrieving data from OpenStreetMap. Please try again later.\"\nmsgstr \"讀取地圖資訊時發成錯誤，請稍後再試。\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:4\n#, elixir-autogen, elixir-format\nmsgid \"TeslaFi Import\"\nmsgstr \"從TeslaFi匯入\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:10\n#, elixir-format, elixir-autogen\nmsgid \"Found %{count} file\"\nmsgid_plural \"Found %{count} files\"\nmsgstr[0] \"找到了 %{count} 個檔案\"\n\n#: lib/teslamate_web/live/import_live/index.ex:34\n#: lib/teslamate_web/live/import_live/index.html.heex:89\n#, elixir-autogen, elixir-format\nmsgid \"Import\"\nmsgstr \"匯入\"\n\n#: lib/teslamate_web/live/import_live/index.html.heex:79\n#, elixir-autogen, elixir-format\nmsgid \"Time zone\"\nmsgstr \"時區\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:13\n#: lib/teslamate_web/live/signin_live/index.html.heex:70\n#, elixir-autogen, elixir-format\nmsgid \"Sign in\"\nmsgstr \"登入\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:122\n#, elixir-autogen, elixir-format\nmsgid \"Charge cost\"\nmsgstr \"充電費用\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:125\n#, elixir-autogen, elixir-format\nmsgid \"Free Supercharging\"\nmsgstr \"免費超充\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:180\n#, elixir-autogen, elixir-format\nmsgid \"General Settings\"\nmsgstr \"一般設定\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:96\n#, elixir-autogen, elixir-format\nmsgid \"Session fee\"\nmsgstr \"手續費\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:114\n#, elixir-autogen, elixir-format\nmsgid \"Doors open\"\nmsgstr \"未鎖車\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:140\n#: lib/teslamate_web/live/geofence_live/form.html.heex:72\n#, elixir-autogen, elixir-format\nmsgid \"Per kWh\"\nmsgstr \"/度\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:139\n#, elixir-autogen, elixir-format\nmsgid \"Total\"\nmsgstr \"總共\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:163\n#, elixir-format, elixir-autogen\nmsgid \"There is <strong>%{n} charging session</strong> at this location for which no costs have been added yet.\"\nmsgid_plural \"There are <strong>%{n} charging sessions</strong> at this location for which no costs have been added yet.\"\nmsgstr[0] \"此地點有 <strong>%{n} 次</strong> 充電記錄，尚未增加費用。\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:177\n#, elixir-autogen, elixir-format\nmsgid \"Add costs retroactively\"\nmsgstr \"追溯添加費用\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:155\n#, elixir-autogen, elixir-format\nmsgid \"Charging Costs\"\nmsgstr \"充電費用\"\n\n#: lib/teslamate_web/live/geofence_live/form.html.heex:174\n#, elixir-autogen, elixir-format\nmsgid \"Continue\"\nmsgstr \"下一步\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:412\n#, elixir-autogen, elixir-format\nmsgid \"Mileage\"\nmsgstr \"里程表\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:141\n#, elixir-autogen, elixir-format\nmsgid \"Streaming API\"\nmsgstr \"Tesla串接(預設)\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:370\n#, elixir-autogen, elixir-format\nmsgid \"Documentation\"\nmsgstr \"說明文件\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:360\n#, elixir-autogen, elixir-format\nmsgid \"GitHub\"\nmsgstr \"GitHub\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:355\n#: lib/teslamate_web/templates/layout/root.html.heex:176\n#, elixir-autogen, elixir-format\nmsgid \"Update available\"\nmsgstr \"有可用更新\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:143\n#, elixir-autogen, elixir-format\nmsgid \"Doors are open\"\nmsgstr \"未上鎖\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:144\n#, elixir-autogen, elixir-format\nmsgid \"Trunk is open\"\nmsgstr \"後行李箱已打開\"\n\n#: lib/teslamate_web/live/charge_live/cost.html.heex:141\n#: lib/teslamate_web/live/geofence_live/form.html.heex:73\n#, elixir-autogen, elixir-format\nmsgid \"Per Minute\"\nmsgstr \"每分鐘\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:151\n#, elixir-autogen, elixir-format\nmsgid \"Software Update available (%{version})\"\nmsgstr \"有可用更新 (%{version})\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:388\n#, elixir-autogen, elixir-format\nmsgid \"Sign out\"\nmsgstr \"登出\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:19\n#, elixir-autogen, elixir-format\nmsgid \"Access Token\"\nmsgstr \"\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:35\n#, elixir-autogen, elixir-format\nmsgid \"Refresh Token\"\nmsgstr \"更新Token\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:58\n#, elixir-autogen, elixir-format\nmsgid \"Tokens are invalid\"\nmsgstr \"Tokens無效\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:99\n#, elixir-autogen, elixir-format\nmsgid \"Obtaining tokens through the Tesla API requires programming experience or a 3rd-party service. Information can be found %{here}.\"\nmsgstr \"透過 Tesla API 獲得Token需要有程式編寫經驗或者藉由第三方服務。更多資訊詳見 %{here}。\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:92\n#, elixir-autogen, elixir-format\nmsgid \"here\"\nmsgstr \"這裡\"\n\n#: lib/teslamate_web/live/signin_live/index.ex:61\n#, elixir-autogen, elixir-format\nmsgid \"Your Tesla account is locked due to too many failed sign in attempts. To unlock your account, reset your password\"\nmsgstr \"您的 Tesla 帳號因登入失敗次數過多而被鎖定。要解鎖您的帳戶，請重設您的密碼\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:149\n#, elixir-autogen, elixir-format\nmsgid \"Downloading update\"\nmsgstr \"下載更新\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:133\n#, elixir-autogen, elixir-format\nmsgid \"No encryption key provided\"\nmsgstr \"未提供密鑰\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:153\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"For more information, see the updated installation guides on %{link}\"\nmsgstr \"獲取更多資訊，請查看更新安裝指引\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:146\n#, elixir-autogen, elixir-format\nmsgid \"The automatically generated encryption key used for the current session can be found <strong>in the application logs</strong>.\"\nmsgstr \"目前對話自動生成的密鑰可在<strong>應用程式日誌</strong>中找到\"\n\n#: lib/teslamate_web/templates/layout/root.html.heex:139\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"To ensure that your <strong>Tesla API tokens are stored securely</strong>, an encryption key must be provided to TeslaMate via the <code>ENCRYPTION_KEY</code> environment variable. Otherwise, a <strong>login will be required after every restart</strong>.\"\nmsgstr \"為了確保你的<strong>Tesla API tokens安全儲存</strong>,密鑰必須透過<code>ENCRYPTION_KEY</code>環境變數提供给Teslamate.否則每次重啟都會被要求登入\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:284\n#, elixir-autogen, elixir-format\nmsgid \"Tire Pressure\"\nmsgstr \"胎壓\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:65\n#, elixir-autogen, elixir-format\nmsgid \"Dog Mode\"\nmsgstr \"寵物模式\"\n\n#: lib/teslamate_web/live/car_live/summary.ex:147\n#, elixir-autogen, elixir-format\nmsgid \"Dog mode is enabled\"\nmsgstr \"寵物模式開啓\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:256\n#, elixir-autogen, elixir-format\nmsgid \"Expected Finish Time\"\nmsgstr \"預計充電完成時間\"\n\n#: lib/teslamate_web/live/signin_live/index.html.heex:59\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"You are using the API key (%{token}) provided by %{url}. It will allow your TeslaMate to access the official Tesla Fleet API and Tesla Telemetry streaming.\"\nmsgstr \"正在使用由 %{url} 提供的API key (%{token})。它將允許TeslaMate透過特斯拉官方車隊API和Telemetry數據流讀取你的車輛。\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:29\n#, elixir-autogen, elixir-format\nmsgid \"Data Collection\"\nmsgstr \"數據收集\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:160\n#, elixir-autogen, elixir-format\nmsgid \"Battery\"\nmsgstr \"電池類型\"\n\n#: lib/teslamate_web/live/settings_live/index.html.heex:163\n#, elixir-autogen, elixir-format\nmsgid \"LFP Battery\"\nmsgstr \"鋰鐵磷酸電池（LFP）\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:130\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"Sentry Mode recording\"\nmsgstr \"哨兵模式錄影中\"\n\n#: lib/teslamate_web/live/car_live/summary.html.heex:99\n#, elixir-autogen, elixir-format, fuzzy\nmsgid \"View car location on Google Maps\"\nmsgstr \"在Google Maps查看車輛位置\"\n"
  },
  {
    "path": "priv/gettext/zh_Hant/LC_MESSAGES/errors.po",
    "content": "## This is a PO Template file.\n##\n## `msgid`s here are often extracted from source code.\n## Add new translations manually only if they're dynamic\n## translations that can't be statically extracted.\n##\n## Run `mix gettext.extract` to bring this file up to\n## date. Leave `msgstr`s empty as changing them here has no\n## effect: edit them in PO (`.po`) files instead.\n## From Ecto.Changeset.cast/4\nmsgid \"can't be blank\"\nmsgstr \"\"\n\"Language: zh_Hant\\n\"\n\n## From Ecto.Changeset.unique_constraint/3\nmsgid \"has already been taken\"\nmsgstr \"已被使用\"\n\n## From Ecto.Changeset.put_change/3\nmsgid \"is invalid\"\nmsgstr \"無效\"\n\n## From Ecto.Changeset.validate_acceptance/3\nmsgid \"must be accepted\"\nmsgstr \"必須接受\"\n\n## From Ecto.Changeset.validate_format/3\nmsgid \"has invalid format\"\nmsgstr \"為無效格式\"\n\n## From Ecto.Changeset.validate_subset/3\nmsgid \"has an invalid entry\"\nmsgstr \"為無效輸入\"\n\n## From Ecto.Changeset.validate_exclusion/3\nmsgid \"is reserved\"\nmsgstr \"已被使用\"\n\n## From Ecto.Changeset.validate_confirmation/3\nmsgid \"does not match confirmation\"\nmsgstr \"與已確認的不相符\"\n\n## From Ecto.Changeset.no_assoc_constraint/3\nmsgid \"is still associated with this entry\"\nmsgstr \"仍然與該輸入相關聯\"\n\nmsgid \"are still associated with this entry\"\nmsgstr \"仍然與該輸入相關聯\"\n\n## From Ecto.Changeset.validate_length/3\nmsgid \"should be %{count} character(s)\"\nmsgid_plural \"should be %{count} character(s)\"\nmsgstr[0] \"應為 %{count}\"\nmsgstr[1] \"\"\n\nmsgid \"should have %{count} item(s)\"\nmsgid_plural \"should have %{count} item(s)\"\nmsgstr[0] \"應有 %{count}\"\nmsgstr[1] \"\"\n\nmsgid \"should be at least %{count} character(s)\"\nmsgid_plural \"should be at least %{count} character(s)\"\nmsgstr[0] \"應至少有 %{count}\"\nmsgstr[1] \"\"\n\nmsgid \"should have at least %{count} item(s)\"\nmsgid_plural \"should have at least %{count} item(s)\"\nmsgstr[0] \"應至少有 %{count}\"\nmsgstr[1] \"\"\n\nmsgid \"should be at most %{count} character(s)\"\nmsgid_plural \"should be at most %{count} character(s)\"\nmsgstr[0] \"應不超過 %{count}\"\nmsgstr[1] \"\"\n\nmsgid \"should have at most %{count} item(s)\"\nmsgid_plural \"should have at most %{count} item(s)\"\nmsgstr[0] \"應不超過 %{count}\"\nmsgstr[1] \"\"\n\n## From Ecto.Changeset.validate_number/3\nmsgid \"must be less than %{number}\"\nmsgstr \"應少於 %{number}\"\n\nmsgid \"must be greater than %{number}\"\nmsgstr \"應大於 %{number}\"\n\nmsgid \"must be less than or equal to %{number}\"\nmsgstr \"應小於或等於 %{number}\"\n\nmsgid \"must be greater than or equal to %{number}\"\nmsgstr \"應大於或等於 %{number}\"\n\nmsgid \"must be equal to %{number}\"\nmsgstr \"應為 %{number}\"\n"
  },
  {
    "path": "priv/repo/migrations/.formatter.exs",
    "content": "[\n  import_deps: [:ecto_sql],\n  inputs: [\"*.exs\"]\n]\n"
  },
  {
    "path": "priv/repo/migrations/20190330150000_create_car.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateCar do\n  use Ecto.Migration\n\n  def change do\n    create table(:cars) do\n      add(:eid, :bigint, null: false)\n      add(:vid, :bigint, null: false)\n      add(:model, :string, null: false)\n      add(:efficiency, :float, null: false)\n\n      timestamps()\n    end\n\n    create(unique_index(:cars, :eid))\n    create(unique_index(:cars, :vid))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190330160000_create_trips.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateTrips do\n  use Ecto.Migration\n\n  def change do\n    create table(:trips) do\n      add(:start_date, :utc_datetime, null: false)\n      add(:end_date, :utc_datetime)\n      add(:outside_temp_avg, :float)\n      add(:speed_max, :integer)\n      add(:power_max, :float)\n      add(:power_min, :float)\n      add(:power_avg, :float)\n      add(:start_range_km, :float)\n      add(:end_range_km, :float)\n      add(:start_km, :float)\n      add(:end_km, :float)\n      add(:distance, :float)\n      add(:duration_min, :integer)\n      add(:start_address, :string)\n      add(:end_address, :string)\n      add(:consumption_kWh, :float)\n      add(:consumption_kWh_100km, :float)\n      add(:efficiency, :float)\n\n      add(:car_id, references(:cars), null: false)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190330170000_create_positions.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreatePositions do\n  use Ecto.Migration\n\n  def change do\n    create table(:positions) do\n      add(:date, :utc_datetime, null: false)\n      add(:latitude, :float, null: false)\n      add(:longitude, :float, null: false)\n      add(:speed, :integer)\n      add(:power, :float)\n      add(:odometer, :float)\n      add(:ideal_battery_range_km, :float)\n      add(:battery_level, :integer)\n      add(:outside_temp, :float)\n      add(:altitude, :float)\n      add(:fan_status, :integer)\n      add(:driver_temp_setting, :float)\n      add(:passenger_temp_setting, :float)\n      add(:is_climate_on, :boolean)\n      add(:is_rear_defroster_on, :boolean)\n      add(:is_front_defroster_on, :boolean)\n\n      add(:car_id, references(:cars), null: false)\n      add(:trip_id, references(:trips))\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190330180000_create_states.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateStates do\n  use Ecto.Migration\n\n  def change do\n    execute \"CREATE TYPE states_status AS ENUM ('online', 'offline', 'asleep')\",\n            \"DROP TYPE states_status \"\n\n    create table(:states) do\n      add(:state, :states_status, null: false)\n\n      add(:start_date, :utc_datetime, null: false)\n      add(:end_date, :utc_datetime)\n\n      add(:car_id, references(:cars), null: false)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190330190000_create_charging_processes.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateChargingProcesses do\n  use Ecto.Migration\n\n  def change do\n    create table(:charging_processes) do\n      # Note the typo: 'nul' – This is fixed in 20211022103654_add_not_null_constraint_to_start_date\n      add(:start_date, :utc_datetime, nul: false)\n      add(:end_date, :utc_datetime)\n      add(:charge_energy_added, :float)\n      add(:start_soc, :float)\n      add(:end_soc, :float)\n      add(:start_battery_level, :integer)\n      add(:end_battery_level, :integer)\n      add(:calculated_max_range, :integer)\n      add(:duration_min, :integer)\n      add(:outside_temp_avg, :float)\n\n      add(:car_id, references(:cars), null: false)\n      add(:position_id, references(:positions), null: false)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190330200000_create_charges.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateCharges do\n  use Ecto.Migration\n\n  def change do\n    create table(:charges) do\n      add(:date, :utc_datetime, null: false)\n      add(:battery_heater_on, :boolean)\n      add(:battery_level, :integer)\n      add(:charge_energy_added, :float, null: false)\n      add(:charger_actual_current, :integer)\n      add(:charger_phases, :integer)\n      add(:charger_pilot_current, :integer)\n      add(:charger_power, :float, null: false)\n      add(:charger_voltage, :integer)\n      add(:fast_charger_present, :boolean)\n      add(:conn_charge_cable, :string)\n      add(:fast_charger_brand, :string)\n      add(:fast_charger_type, :string)\n      add(:ideal_battery_range_km, :float, null: false)\n      add(:not_enough_power_to_heat, :boolean)\n      add(:outside_temp, :float)\n\n      add(:charging_process_id, references(:charging_processes), null: false)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190408203117_create_updates.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateUpdates do\n  use Ecto.Migration\n\n  def change do\n    create table(:updates) do\n      add(:start_date, :utc_datetime, null: false)\n      add(:end_date, :utc_datetime)\n      add(:version, :string)\n\n      add(:car_id, references(:cars), null: false)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190415103933_add_inside_temp.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddInsideTemp do\n  use Ecto.Migration\n\n  def change do\n    alter table(:positions) do\n      add(:inside_temp, :float)\n    end\n\n    alter table(:trips) do\n      add(:inside_temp_avg, :float)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190415115227_add_battery_heater_fields.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddBatteryHeaterFields do\n  use Ecto.Migration\n\n  def change do\n    alter table(:positions) do\n      add(:battery_heater, :boolean)\n      add(:battery_heater_on, :boolean)\n      add(:battery_heater_no_power, :boolean)\n    end\n\n    alter table(:charges) do\n      add(:battery_heater, :boolean)\n      add(:battery_heater_no_power, :boolean)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190415130006_create_addresses.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateAddresses do\n  use Ecto.Migration\n\n  def change do\n    create table(:addresses) do\n      add(:display_name, :string, size: 512)\n      add(:place_id, :integer)\n      add(:latitude, :float)\n      add(:longitude, :float)\n      add(:name, :string)\n      add(:house_number, :string)\n      add(:road, :string)\n      add(:neighbourhood, :string)\n      add(:city, :string)\n      add(:county, :string)\n      add(:postcode, :string)\n      add(:state, :string)\n      add(:state_district, :string)\n      add(:country, :string)\n      add(:raw, :map)\n\n      timestamps()\n    end\n\n    create(unique_index(:addresses, :place_id))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190415130705_add_addresses_to_trips.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddAddressesToTrips do\n  use Ecto.Migration\n\n  def change do\n    alter table(:trips) do\n      remove(:start_address, :string)\n      remove(:end_address, :string)\n\n      add(:start_address_id, references(:addresses))\n      add(:end_address_id, references(:addresses))\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190415192200_add_address_to_charging_process.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddAddressToChargingProcess do\n  use Ecto.Migration\n\n  def change do\n    alter table(:charging_processes) do\n      add(:address_id, references(:addresses))\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190416125429_add_indexes_on_dates.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddIndexesOnDates do\n  use Ecto.Migration\n\n  def change do\n    create(index(:positions, [:date]))\n    create(index(:charges, [:date]))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190525125700_rename_soc_fields.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.RenameSocFields do\n  use Ecto.Migration\n\n  def change do\n    rename(table(:charging_processes), :start_soc, to: :start_range_km)\n    rename(table(:charging_processes), :end_soc, to: :end_range_km)\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190717184003_add_fkey_indexes.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddFkeyIndexes do\n  use Ecto.Migration\n\n  def change do\n    create(index(:charges, [:charging_process_id]))\n\n    create(index(:charging_processes, [:car_id]))\n    create(index(:charging_processes, [:position_id]))\n    create(index(:charging_processes, [:address_id]))\n\n    create(index(:positions, [:car_id]))\n    create(index(:positions, [:trip_id]))\n\n    create(index(:states, [:car_id]))\n\n    create(index(:trips, [:car_id]))\n    create(index(:trips, [:start_address_id]))\n    create(index(:trips, [:end_address_id]))\n\n    create(index(:updates, [:car_id]))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190729142656_add_conversion_functions.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddConversionFunctions do\n  use Ecto.Migration\n\n  def up do\n    execute(\"\"\"\n    CREATE FUNCTION convert_celsius(n double precision, unit text)\n    RETURNS double precision\n    AS $$\n      SELECT\n        CASE WHEN $2 = 'C' THEN $1\n             WHEN $2 = 'F' THEN ($1 * 9 / 5) + 32\n        END;\n    $$\n    LANGUAGE SQL\n    IMMUTABLE\n    RETURNS NULL ON NULL INPUT;\n    \"\"\")\n\n    execute(\"\"\"\n    CREATE FUNCTION convert_km(n double precision, unit text)\n    RETURNS double precision\n    AS $$\n      SELECT\n        CASE WHEN $2 = 'km' THEN $1\n             WHEN $2 = 'mi' THEN $1 / 1.60934\n        END;\n    $$\n    LANGUAGE SQL\n    IMMUTABLE\n    RETURNS NULL ON NULL INPUT;\n    \"\"\")\n  end\n\n  def down do\n    execute(\"drop function convert_celsius;\")\n    execute(\"drop function convert_km;\")\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190729181314_fix_trip_efficiency.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.FixTripEfficiency do\n  use Ecto.Migration\n\n  import Ecto.Query\n\n  def up do\n    from(t in \"trips\",\n      update: [set: [efficiency: 1 / t.efficiency]],\n      where: not is_nil(t.efficiency)\n    )\n    |> TeslaMate.Repo.update_all([])\n  end\n\n  def down do\n    from(t in \"trips\",\n      update: [set: [efficiency: 1 / t.efficiency]],\n      where: not is_nil(t.efficiency)\n    )\n    |> TeslaMate.Repo.update_all([])\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190730101523_create_tokens.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateTokens do\n  use Ecto.Migration\n\n  def change do\n    create table(:tokens) do\n      add(:access, :string, null: false)\n      add(:refresh, :string, null: false)\n\n      timestamps()\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190731154452_create_settings.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateSettings do\n  use Ecto.Migration\n\n  alias TeslaMate.Repo\n\n  def up do\n    create table(:settings) do\n      add(:use_imperial_units, :boolean, default: false, null: false)\n      timestamps()\n    end\n\n    flush()\n\n    Ecto.Adapters.SQL.query!(\n      Repo,\n      \"INSERT INTO settings (use_imperial_units, inserted_at, updated_at) VALUES ($1, $2, $3)\",\n      [\n        false,\n        DateTime.utc_now(),\n        DateTime.utc_now()\n      ]\n    )\n  end\n\n  def down do\n    drop(table(:settings))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190805092941_fix_incomplete_charging_processes.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.FixIncompleteChargingProcesses do\n  use Ecto.Migration\n\n  def up do\n    :ok\n  end\n\n  def down do\n    :ok\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190810105216_unit_of_length_and_temperature.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.UnitOfLengthAndTemperature do\n  use Ecto.Migration\n\n  alias TeslaMate.Repo\n\n  import Ecto.Query\n\n  def up do\n    [use_imperial_units?] =\n      from(s in \"settings\", select: s.use_imperial_units)\n      |> Repo.all()\n\n    execute(\"CREATE TYPE length AS ENUM ('km', 'mi')\")\n    execute(\"CREATE TYPE temperature AS ENUM ('C', 'F')\")\n\n    alter table(:settings) do\n      add(:unit_of_length, :length, default: \"km\", null: false)\n      add(:unit_of_temperature, :temperature, default: \"C\", null: false)\n      remove(:use_imperial_units)\n    end\n\n    flush()\n\n    {unit_of_length, unit_of_temperature} =\n      case use_imperial_units? do\n        false -> {\"km\", \"C\"}\n        true -> {\"mi\", \"F\"}\n      end\n\n    from(t in \"settings\",\n      update: [\n        set: [\n          unit_of_length: ^unit_of_length,\n          unit_of_temperature: ^unit_of_temperature\n        ]\n      ]\n    )\n    |> Repo.update_all([])\n  end\n\n  def down do\n    alter table(:settings) do\n      remove(:unit_of_length)\n      remove(:unit_of_temperature)\n      add(:use_imperial_units, :boolean, default: false, null: false)\n    end\n\n    execute(\"DROP TYPE length\")\n    execute(\"DROP TYPE temperature\")\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190810131321_persist_suspend_settings.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.PersistSuspendSettings do\n  use Ecto.Migration\n\n  def change do\n    alter table(:settings) do\n      add(:suspend_min, :integer, default: 12, null: false)\n      add(:suspend_after_idle_min, :integer, default: 15, null: false)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190810151901_create_geofences.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateGeofences do\n  use Ecto.Migration\n\n  def change do\n    create table(:geofences) do\n      add(:name, :string, null: false)\n      add(:latitude, :float, null: false)\n      add(:longitude, :float, null: false)\n      add(:radius, :float, null: false, default: 25)\n\n      add(:address_id, references(:addresses), null: false)\n\n      timestamps()\n    end\n\n    create(unique_index(:geofences, :address_id))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190812191616_rename_trips_to_drives.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.RenameTripsToDrives do\n  use Ecto.Migration\n\n  def up do\n    rename(table(:trips), to: table(:drives))\n    rename(table(:positions), :trip_id, to: :drive_id)\n    execute(\"ALTER INDEX positions_trip_id_index RENAME TO positions_drive_id_index;\")\n\n    execute(\n      \"ALTER TABLE positions RENAME CONSTRAINT positions_trip_id_fkey TO positions_drive_id_fkey\"\n    )\n  end\n\n  def down do\n    rename(table(:drives), to: table(:trips))\n    rename(table(:positions), :drive_id, to: :trip_id)\n    execute(\"ALTER INDEX positions_drive_id_index RENAME TO positions_trip_id_index;\")\n\n    execute(\n      \"ALTER TABLE positions RENAME CONSTRAINT positions_drive_id_fkey TO positions_trip_id_fkey\"\n    )\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190813184320_fix_incomplete_charging_processes_v2.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.FixIncompleteChargingProcessesV2 do\n  use Ecto.Migration\n\n  def up do\n    :ok\n  end\n\n  def down do\n    :ok\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190814152810_increase_suspend_min.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.IncreaseSuspendMin do\n  use Ecto.Migration\n\n  import Ecto.Query\n\n  alias TeslaMate.Repo\n\n  def up do\n    alter table(:settings) do\n      modify(:suspend_min, :integer, default: 21, null: false)\n    end\n\n    flush()\n\n    from(s in \"settings\",\n      update: [set: [suspend_min: 21]],\n      where: s.suspend_min < 21\n    )\n    |> Repo.update_all([])\n  end\n\n  def down do\n    :ok\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190816165713_extend_car_table.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.ExtendCarTable do\n  use Ecto.Migration\n\n  def change do\n    alter table(:cars) do\n      add(:vin, :text)\n      add(:name, :text)\n      add(:version, :text)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190816200723_add_est_battery_range_km.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddEstBatteryRangeKm do\n  use Ecto.Migration\n\n  def change do\n    alter table(:positions) do\n      add(:est_battery_range_km, :float)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190821143938_add_constraints.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddConstraints do\n  use Ecto.Migration\n\n  def change do\n    create(unique_index(:states, [:car_id, \"(end_date IS NULL)\"], where: \"end_date IS NULL\"))\n    create(constraint(:states, :positive_duration, check: \"end_date >= start_date\"))\n    create(constraint(:updates, :positive_duration, check: \"end_date >= start_date\"))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190821155748_drop_consumption_columns.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.DropConsumptionColumns do\n  use Ecto.Migration\n\n  def change do\n    alter table(:drives) do\n      remove(:consumption_kWh)\n      remove(:consumption_kWh_100km)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190823173437_add_sleep_requirements.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddSleepRequirements do\n  use Ecto.Migration\n\n  def change do\n    alter table(:settings) do\n      add(:req_no_shift_state_reading, :boolean, null: false, default: false)\n      add(:req_no_temp_reading, :boolean, null: false, default: false)\n      add(:req_not_unlocked, :boolean, null: false, default: true)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190826142828_fix_incomplete_charging_processes_v3.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.FixIncompleteChargingProcessesV3 do\n  use Ecto.Migration\n\n  # alias TeslaMate.Log.{ChargingProcess, Charge}\n  # alias TeslaMate.Repo\n\n  # import Ecto.Query\n\n  def up do\n    # incomplete_charging_processes =\n    #   ChargingProcess\n    #   |> select([c], c.id)\n    #   |> where([c], is_nil(c.end_date))\n    #   |> Repo.all()\n\n    # for id <- incomplete_charging_processes do\n    #   {:ok, cproc} = TeslaMate.Log.complete_charging_process(id)\n\n    #   %{end_date: end_date} =\n    #     Charge\n    #     |> select([c], %{end_date: max(c.date)})\n    #     |> where(charging_process_id: ^id)\n    #     |> Repo.one()\n\n    #   {:ok, _} =\n    #     cproc\n    #     |> ChargingProcess.changeset(%{end_date: end_date})\n    #     |> Repo.update()\n    # end\n    :ok\n  end\n\n  def down do\n    :ok\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190828094708_add_battery_range.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddBatteryRange do\n  use Ecto.Migration\n\n  def change do\n    alter table(:positions) do\n      add(:battery_range_km, :float)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190828104902_add_elevation.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddElevation do\n  use Ecto.Migration\n\n  def change do\n    rename(table(:positions), :altitude, to: :elevation)\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190828122529_add_m_to_ft_conversion_helper.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddMToFtConversionHelper do\n  use Ecto.Migration\n\n  def up do\n    execute(\"\"\"\n    CREATE FUNCTION convert_m(n double precision, unit text)\n    RETURNS double precision\n    AS $$\n      SELECT\n        CASE WHEN $2 = 'm' THEN $1\n             WHEN $2 = 'ft' THEN $1 * 3.28084\n        END;\n    $$\n    LANGUAGE SQL\n    IMMUTABLE\n    RETURNS NULL ON NULL INPUT;\n    \"\"\")\n  end\n\n  def down do\n    execute(\"drop function convert_m;\")\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190828150058_do_not_require_efficiency.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.DoNotRequireEfficiency do\n  use Ecto.Migration\n\n  def up do\n    alter table(:cars) do\n      modify(:efficiency, :float, null: true)\n      modify(:model, :string, null: true)\n    end\n\n    rename(table(:cars), :version, to: :trim_badging)\n  end\n\n  def down do\n    alter table(:cars) do\n      modify(:efficiency, :float, null: false)\n      modify(:model, :string, null: false)\n    end\n\n    rename(table(:cars), :trim_badging, to: :version)\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190903151524_add_unique_index_on_vins.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddUniqueIndexOnVins do\n  use Ecto.Migration\n\n  def change do\n    create(unique_index(:cars, :vin))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190913165850_add_range_enum.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddRangeEnum do\n  use Ecto.Migration\n\n  def change do\n    execute \"CREATE TYPE range AS ENUM ('ideal', 'rated')\", \"DROP TYPE range\"\n\n    alter table(:settings) do\n      add :preferred_range, :range, default: \"rated\", null: false\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190913175011_add_rated_range_to_drives.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddRatedRangeToDrives do\n  use Ecto.Migration\n\n  def change do\n    rename(table(:positions), :battery_range_km, to: :rated_battery_range_km)\n\n    rename(table(:drives), :start_range_km, to: :start_ideal_range_km)\n    rename(table(:drives), :end_range_km, to: :end_ideal_range_km)\n\n    alter table(:drives) do\n      add(:start_rated_range_km, :float)\n      add(:end_rated_range_km, :float)\n      remove(:efficiency, :float)\n    end\n\n    alter table(:charges) do\n      add(:rated_battery_range_km, :float)\n    end\n\n    rename(table(:charging_processes), :start_range_km, to: :start_ideal_range_km)\n    rename(table(:charging_processes), :end_range_km, to: :end_ideal_range_km)\n\n    alter table(:charging_processes) do\n      add(:start_rated_range_km, :float)\n      add(:end_rated_range_km, :float)\n      remove(:calculated_max_range, :float)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190913175543_set_start_and_end_rated_range_km.exs",
    "content": "# Schemas\n\ndefmodule Drive do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  schema \"drives\" do\n    field(:start_ideal_range_km, :float)\n    field(:end_ideal_range_km, :float)\n    field(:start_rated_range_km, :float)\n    field(:end_rated_range_km, :float)\n  end\n\n  @doc false\n  def changeset(drive, attrs) do\n    drive\n    |> cast(attrs, [\n      :start_ideal_range_km,\n      :end_ideal_range_km,\n      :start_rated_range_km,\n      :end_rated_range_km\n    ])\n  end\nend\n\ndefmodule Position do\n  use Ecto.Schema\n  import Ecto.Changeset\n\n  schema \"positions\" do\n    field(:date, :utc_datetime)\n    field(:ideal_battery_range_km, :float)\n    field(:rated_battery_range_km, :float)\n\n    belongs_to(:drive, Drive)\n  end\n\n  @doc false\n  def changeset(position, attrs) do\n    position\n    |> cast(attrs, [:date, :ideal_battery_range_km, :rated_battery_range_km])\n    |> validate_required([:date])\n    |> foreign_key_constraint(:drive_id)\n  end\nend\n\n# Migration\n\ndefmodule TeslaMate.Repo.Migrations.SetStartAndEndRatedRangeKm do\n  use Ecto.Migration\n\n  alias TeslaMate.Repo\n  import Ecto.Query\n\n  defp add_rated_range(%Drive{id: drive_id} = drive) do\n    query =\n      Position\n      |> select([p], %{\n        rated_battery_range_km: p.rated_battery_range_km,\n        first_row: row_number() |> over(order_by: [asc: p.date]),\n        last_row: row_number() |> over(order_by: [desc: p.date])\n      })\n      |> where(drive_id: ^drive_id)\n      |> order_by(asc: :date)\n\n    positions =\n      subquery(query)\n      |> where([p], p.first_row == 1 or p.last_row == 1)\n      |> Repo.all()\n\n    case positions do\n      [start_pos, end_pos] ->\n        {:ok, _drive} =\n          drive\n          |> Drive.changeset(%{\n            start_rated_range_km: start_pos.rated_battery_range_km,\n            end_rated_range_km: end_pos.rated_battery_range_km\n          })\n          |> Repo.update()\n\n      _ ->\n        :ok\n    end\n  end\n\n  def up do\n    Repo.transaction(fn ->\n      Drive\n      |> where([d], is_nil(d.start_rated_range_km) or is_nil(d.end_rated_range_km))\n      |> order_by(asc: :id)\n      |> Repo.stream()\n      |> Stream.each(&add_rated_range/1)\n      |> Stream.run()\n    end)\n  end\n\n  def down do\n    :ok\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190925152807_create_geo_extensions.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateGeoExtensions do\n  use Ecto.Migration\n\n  def change do\n    execute(\"CREATE EXTENSION IF NOT EXISTS cube WITH SCHEMA public\", \"DROP EXTENSION cube\")\n\n    execute(\n      \"CREATE EXTENSION IF NOT EXISTS earthdistance WITH SCHEMA public\",\n      \"DROP EXTENSION earthdistance\"\n    )\n\n    execute(\"ALTER FUNCTION ll_to_earth SET search_path = public\")\n    execute(\"ALTER FUNCTION earth_box SET search_path = public\")\n    create(index(:geofences, [\"(earth_box(ll_to_earth(latitude, longitude), radius))\"]))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190925161034_create_index_on_address_positions.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreateIndexOnAddressPositions do\n  use Ecto.Migration\n\n  def change do\n    create(index(:addresses, [\"ll_to_earth(latitude, longitude)\"]))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190925182253_add_geofence_id_to_addresses.exs",
    "content": "defmodule New do\n  defmodule GeoFence do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    schema \"geofences\" do\n      field(:latitude, :float)\n      field(:longitude, :float)\n      field(:radius, :float)\n      has_many(:addresses, Address)\n    end\n  end\n\n  defmodule Address do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    alias New.GeoFence\n\n    schema \"addresses\" do\n      field(:latitude, :float)\n      field(:longitude, :float)\n\n      belongs_to(:geofence, GeoFence)\n    end\n\n    @doc false\n    def changeset(address, attrs) do\n      address\n      |> cast(attrs, [:latitude, :longitude, :geofence_id])\n      |> validate_required([:latitude, :longitude])\n    end\n  end\nend\n\ndefmodule Old do\n  defmodule GeoFence do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    alias Old.Address\n\n    schema \"geofences\" do\n      field(:latitude, :float)\n      field(:longitude, :float)\n      belongs_to(:address, Address)\n    end\n\n    @doc false\n    def changeset(geofence, attrs) do\n      geofence\n      |> cast(attrs, [:address_id])\n      |> foreign_key_constraint(:address_id)\n    end\n  end\n\n  defmodule Address do\n    use Ecto.Schema\n\n    schema \"addresses\" do\n      field(:place_id, :integer)\n    end\n  end\nend\n\ndefmodule TeslaMate.Repo.Migrations.AddGeofenceIdToAddresses do\n  use Ecto.Migration\n\n  import Ecto.Query\n  alias TeslaMate.Repo\n\n  def up do\n    alias New.{GeoFence, Address}\n\n    alter table(:addresses) do\n      add(:geofence_id, references(:geofences), null: true)\n    end\n\n    alter table(:geofences) do\n      remove(:address_id, references(:addresses), null: false)\n    end\n\n    create(index(:addresses, :geofence_id))\n\n    flush()\n\n    Repo.transaction(fn ->\n      for %GeoFence{id: id, latitude: lat, longitude: lng, radius: r} <- Repo.all(GeoFence) do\n        query =\n          from(a in Address,\n            where:\n              fragment(\n                \"earth_box(ll_to_earth(?, ?), ?) @> ll_to_earth(?, ?)\",\n                ^lat,\n                ^lng,\n                ^r,\n                a.latitude,\n                a.longitude\n              )\n          )\n\n        :ok =\n          query\n          |> Repo.stream()\n          |> Stream.each(fn %Address{} = address ->\n            address\n            |> Address.changeset(%{geofence_id: id})\n            |> Repo.update()\n          end)\n          |> Stream.run()\n      end\n    end)\n  end\n\n  def down do\n    alias TeslaMate.Locations.Geocoder\n    alias Old.{GeoFence, Address}\n\n    {:ok, _pid} = Application.ensure_all_started(:mojito)\n\n    alter table(:addresses) do\n      remove(:geofence_id, references(:geofences), null: true)\n    end\n\n    alter table(:geofences) do\n      add(:address_id, references(:addresses), null: true)\n    end\n\n    flush()\n\n    for %GeoFence{latitude: lat, longitude: lng} = geofence <- Repo.all(GeoFence) do\n      with {:ok, %{place_id: place_id}} <- Geocoder.reverse_lookup(lat, lng) do\n        %Address{id: id} = Repo.get_by(Address, place_id: place_id)\n\n        geofence\n        |> GeoFence.changeset(%{address_id: id})\n        |> Repo.update()\n      end\n\n      Process.sleep(750)\n    end\n\n    drop(constraint(:geofences, \"geofences_address_id_fkey\"))\n\n    alter table(:geofences) do\n      modify(:address_id, references(:addresses), null: false)\n    end\n\n    create(unique_index(:geofences, :address_id))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20190928155641_add_base_url_setting.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddBaseUrlSetting do\n  use Ecto.Migration\n\n  def change do\n    alter table(:settings) do\n      add(:base_url, :string, null: true)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191003130650_add_start_and_end_position_to_drives.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddStartAndEndPositionToDrives do\n  use Ecto.Migration\n\n  def change do\n    alter table(:drives) do\n      add(:start_position_id, references(:positions))\n      add(:end_position_id, references(:positions))\n\n      add(:start_geofence_id, references(:geofences))\n      add(:end_geofence_id, references(:geofences))\n    end\n\n    alter table(:charging_processes) do\n      add(:geofence_id, references(:geofences))\n    end\n\n    alter table(:addresses) do\n      remove(:geofence_id, references(:geofences))\n    end\n\n    create(index(:positions, [\"ll_to_earth(latitude, longitude)\"]))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191003132415_add_position_ids_and_apply_geofences.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddPositionIdsAndApplyGeofences do\n  use Ecto.Migration\n\n  import Ecto.Query\n\n  alias TeslaMate.Repo\n\n  defmodule Position do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    schema \"positions\" do\n      field(:date, :utc_datetime)\n      belongs_to(:drive, Drive)\n    end\n  end\n\n  defmodule Drive do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    schema \"drives\" do\n      belongs_to(:start_position, Position)\n      belongs_to(:end_position, Position)\n      belongs_to(:start_geofence, GeoFence)\n      belongs_to(:end_geofence, GeoFence)\n    end\n\n    @doc false\n    def changeset(drive, attrs) do\n      drive\n      |> cast(attrs, [:start_position_id, :end_position_id, :start_geofence_id, :end_geofence_id])\n      |> foreign_key_constraint(:start_geofence_id)\n      |> foreign_key_constraint(:end_geofence_id)\n      |> foreign_key_constraint(:start_position_id)\n      |> foreign_key_constraint(:end_position_id)\n    end\n  end\n\n  defmodule ChargingProcess do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    schema \"charging_processes\" do\n      belongs_to(:position, Position)\n      belongs_to(:geofence, GeoFence)\n    end\n\n    @doc false\n    def changeset(charging_state, attrs) do\n      charging_state\n      |> cast(attrs, [:geo_fence_id])\n      |> foreign_key_constraint(:geofence_id)\n    end\n  end\n\n  defmodule GeoFence do\n    use Ecto.Schema\n\n    schema \"geofences\" do\n      field(:latitude, :float)\n      field(:longitude, :float)\n      field(:radius, :float)\n      has_many(:addresses, Address)\n    end\n  end\n\n  def up do\n    Repo.transaction(fn ->\n      :ok =\n        Drive\n        |> select([:id])\n        |> Repo.stream()\n        |> Stream.each(&add_position_ids/1)\n        |> Stream.run()\n\n      for geofence <- Repo.all(GeoFence) do\n        :ok = apply_geofence_to_drives(geofence)\n        :ok = apply_geofence_to_charges(geofence)\n      end\n    end)\n  end\n\n  def down do\n    :ok\n  end\n\n  defp add_position_ids(%Drive{id: drive_id}) do\n    query =\n      Position\n      |> select([p], %{\n        id: p.id,\n        first_row: row_number() |> over(order_by: [asc: p.date]),\n        last_row: row_number() |> over(order_by: [desc: p.date])\n      })\n      |> where(drive_id: ^drive_id)\n      |> order_by(asc: :date)\n\n    positions =\n      subquery(query)\n      |> where([p], p.first_row == 1 or p.last_row == 1)\n      |> Repo.all()\n\n    case positions do\n      [start_position, end_position] ->\n        Repo.get!(Drive, drive_id)\n        |> Drive.changeset(%{\n          start_position_id: start_position.id,\n          end_position_id: end_position.id\n        })\n        |> Repo.update()\n\n      [start_position] ->\n        Repo.get!(Drive, drive_id)\n        |> Drive.changeset(%{\n          start_position_id: start_position.id\n        })\n        |> Repo.update()\n\n      [] ->\n        IO.inspect(drive_id, label: :no_positions)\n    end\n  end\n\n  defp apply_geofence_to_drives(%GeoFence{id: id, latitude: lat, longitude: lng, radius: r}) do\n    {_, nil} =\n      from(d in Drive,\n        join: p in Position,\n        on: [id: d.start_position_id],\n        where:\n          fragment(\n            \"earth_box(ll_to_earth(?, ?), ?) @> ll_to_earth(?, ?)\",\n            ^lat,\n            ^lng,\n            ^r,\n            p.latitude,\n            p.longitude\n          )\n      )\n      |> Repo.update_all(set: [start_geofence_id: id])\n\n    {_, nil} =\n      from(d in Drive,\n        join: p in Position,\n        on: [id: d.end_position_id],\n        where:\n          fragment(\n            \"earth_box(ll_to_earth(?, ?), ?) @> ll_to_earth(?, ?)\",\n            ^lat,\n            ^lng,\n            ^r,\n            p.latitude,\n            p.longitude\n          )\n      )\n      |> Repo.update_all(set: [end_geofence_id: id])\n\n    :ok\n  end\n\n  defp apply_geofence_to_charges(%GeoFence{id: id, latitude: lat, longitude: lng, radius: r}) do\n    {_, nil} =\n      from(d in ChargingProcess,\n        join: p in Position,\n        on: [id: d.position_id],\n        where:\n          fragment(\n            \"earth_box(ll_to_earth(?, ?), ?) @> ll_to_earth(?, ?)\",\n            ^lat,\n            ^lng,\n            ^r,\n            p.latitude,\n            p.longitude\n          )\n      )\n      |> Repo.update_all(set: [geofence_id: id])\n\n    :ok\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191007105010_add_new_fkey_indexes.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddNewFkeyIndexes do\n  use Ecto.Migration\n\n  def change do\n    create(index(:drives, [:start_position_id]))\n    create(index(:drives, [:end_position_id]))\n    create(index(:drives, [:start_geofence_id]))\n    create(index(:drives, [:end_geofence_id]))\n\n    drop(index(:positions, [\"ll_to_earth(latitude, longitude)\"]))\n    drop(index(:addresses, [\"ll_to_earth(latitude, longitude)\"]))\n    drop(index(:geofences, [\"(earth_box(ll_to_earth(latitude, longitude), radius))\"]))\n\n    create(index(:positions, [\"ll_to_earth(latitude, longitude)\"], using: \"gist\"))\n    create(index(:addresses, [\"ll_to_earth(latitude, longitude)\"], using: \"gist\"))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191008191431_fix_ll_to_earth.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.FixLlToEarth do\n  use Ecto.Migration\n\n  def up do\n    execute(\"\"\"\n    CREATE OR REPLACE FUNCTION public.ll_to_earth(float8, float8)\n    RETURNS public.earth\n    LANGUAGE SQL\n    IMMUTABLE STRICT\n    PARALLEL SAFE\n    AS 'SELECT public.cube(public.cube(public.cube(public.earth()*cos(radians($1))*cos(radians($2))),public.earth()*cos(radians($1))*sin(radians($2))),public.earth()*sin(radians($1)))::public.earth';\n    \"\"\")\n  end\n\n  def down do\n    :ok\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191017003836_add_est_total_charge_energy.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddEstTotalChargeEnergy do\n  use Ecto.Migration\n\n  def change do\n    alter table(:charging_processes) do\n      add(:charge_energy_used, :float)\n      add(:charge_energy_used_confidence, :float)\n      add(:interval_sec, :integer)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191020130234_increase_datetime_precision.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.IncreaseDatetimePrecision do\n  use Ecto.Migration\n\n  def change do\n    alter table(:charging_processes) do\n      modify(:start_date, :utc_datetime_usec, from: :utc_datetime)\n      modify(:end_date, :utc_datetime_usec, from: :utc_datetime)\n    end\n\n    alter table(:drives) do\n      modify(:start_date, :utc_datetime_usec, from: :utc_datetime)\n      modify(:end_date, :utc_datetime_usec, from: :utc_datetime)\n    end\n\n    alter table(:states) do\n      modify(:start_date, :utc_datetime_usec, from: :utc_datetime)\n      modify(:end_date, :utc_datetime_usec, from: :utc_datetime)\n    end\n\n    alter table(:updates) do\n      modify(:start_date, :utc_datetime_usec, from: :utc_datetime)\n      modify(:end_date, :utc_datetime_usec, from: :utc_datetime)\n    end\n\n    alter table(:charges) do\n      modify(:date, :utc_datetime_usec, from: :utc_datetime)\n    end\n\n    alter table(:positions) do\n      modify(:date, :utc_datetime_usec, from: :utc_datetime)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191026144449_drop_cp_confidence_and_interval.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.DropCpConfidenceAndInterval do\n  use Ecto.Migration\n\n  def change do\n    alter table(:charging_processes) do\n      remove(:charge_energy_used_confidence, :float)\n      remove(:interval_sec, :integer)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191026145925_phase_correction.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.PhaseCorrection do\n  use Ecto.Migration\n\n  def change do\n    alter table(:geofences) do\n      add(:phase_correction, :integer, null: true)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191026185642_calculate_charge_energy_used.exs",
    "content": "defmodule CustomExpressions do\n  import Ecto.Query, warn: false\n\n  defmacro c_if(condition, do: do_clause, else: else_clause) do\n    quote do\n      fragment(\n        \"CASE WHEN ? THEN ? ELSE ? END\",\n        unquote(condition),\n        unquote(do_clause),\n        unquote(else_clause)\n      )\n    end\n  end\nend\n\ndefmodule TeslaMate.Repo.Migrations.CalculateChargeEnergyUsed do\n  use Ecto.Migration\n\n  import Ecto.Query\n  import CustomExpressions\n\n  alias TeslaMate.Repo\n\n  defmodule ChargingProcess do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    schema \"charging_processes\" do\n      field(:charge_energy_used, :float)\n    end\n\n    @doc false\n    def changeset(charging_state, attrs) do\n      charging_state\n      |> cast(attrs, [:charge_energy_used])\n      |> validate_number(:charge_energy_used, greater_than_or_equal_to: 0)\n    end\n  end\n\n  defmodule Charge do\n    use Ecto.Schema\n\n    alias TeslaMate.Log.ChargingProcess\n\n    schema \"charges\" do\n      field(:date, :utc_datetime_usec)\n      field(:charger_actual_current, :integer)\n      field(:charger_phases, :integer, default: 1)\n      field(:charger_power, :float)\n      field(:charger_voltage, :integer)\n\n      belongs_to(:charging_process, ChargingProcess)\n    end\n  end\n\n  #####\n\n  def up do\n    for charge <- Repo.all(ChargingProcess) do\n      {:ok, _} =\n        charge\n        |> ChargingProcess.changeset(%{charge_energy_used: calculate_energy_used(charge)})\n        |> Repo.update()\n    end\n  end\n\n  def down do\n    :ok\n  end\n\n  #####\n\n  defp calculate_energy_used(%ChargingProcess{id: id}) do\n    query =\n      from(c in Charge,\n        select: %{\n          energy_used:\n            c_if is_nil(c.charger_phases) do\n              c.charger_power\n            else\n              c.charger_actual_current * c.charger_voltage * c.charger_phases / 1000.0\n            end *\n              fragment(\n                \"EXTRACT(epoch FROM (?))\",\n                c.date - (lag(c.date) |> over(order_by: c.date))\n              ) / 3600\n        },\n        where: c.charging_process_id == ^id\n      )\n\n    from(e in subquery(query),\n      select: {sum(e.energy_used)},\n      where: e.energy_used > 0\n    )\n    |> Repo.one()\n    |> case do\n      {charge_energy_used} -> charge_energy_used\n      _ -> nil\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191117042320_add_cost_field_to_charges.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddCostFieldToCharges do\n  use Ecto.Migration\n\n  def change do\n    alter table(:charging_processes) do\n      add(:cost, :decimal, precision: 6, scale: 2)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191117143038_add_grafana_url.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddGrafanaUrl do\n  use Ecto.Migration\n\n  def change do\n    alter table(:settings) do\n      add(:grafana_url, :string, null: true)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191117171307_car_settings.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CarSettings do\n  use Ecto.Migration\n\n  defmodule Settings do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    schema \"settings\" do\n      field(:suspend_min, :integer)\n      field(:suspend_after_idle_min, :integer)\n      field(:req_no_shift_state_reading, :boolean)\n      field(:req_no_temp_reading, :boolean)\n      field(:req_not_unlocked, :boolean)\n    end\n  end\n\n  defmodule CarSettings do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    schema \"car_settings\" do\n      field(:suspend_min, :integer)\n      field(:suspend_after_idle_min, :integer)\n      field(:req_no_shift_state_reading, :boolean)\n      field(:req_no_temp_reading, :boolean)\n      field(:req_not_unlocked, :boolean)\n    end\n\n    @all_fields [\n      :suspend_min,\n      :suspend_after_idle_min,\n      :req_no_shift_state_reading,\n      :req_no_temp_reading,\n      :req_not_unlocked\n    ]\n\n    def changeset(settings, attrs) do\n      settings\n      |> cast(attrs, @all_fields)\n      |> validate_required(@all_fields)\n      |> validate_number(:suspend_min, greater_than: 0, less_than_or_equal_to: 90)\n      |> validate_number(:suspend_after_idle_min, greater_than: 0, less_than_or_equal_to: 60)\n    end\n  end\n\n  defmodule Car do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    schema \"cars\" do\n      belongs_to(:settings, CarSettings)\n    end\n\n    @doc false\n    def changeset(car, attrs) do\n      car\n      |> cast(attrs, [])\n      |> cast_assoc(:settings, with: &CarSettings.changeset/2, required: true)\n    end\n  end\n\n  alias TeslaMate.Repo\n\n  def up do\n    create table(:car_settings) do\n      add(:suspend_min, :integer, default: 21, null: false)\n      add(:suspend_after_idle_min, :integer, default: 15, null: false)\n\n      add(:req_no_shift_state_reading, :boolean, null: false, default: false)\n      add(:req_no_temp_reading, :boolean, null: false, default: false)\n      add(:req_not_unlocked, :boolean, null: false, default: true)\n    end\n\n    alter table(:cars) do\n      add(:settings_id, references(:car_settings), null: true)\n    end\n\n    flush()\n\n    [settings] = Repo.all(Settings)\n\n    for car <- Repo.all(Car) do\n      car\n      |> Repo.preload(:settings)\n      |> Car.changeset(%{settings: Map.from_struct(settings)})\n      |> Repo.update!()\n    end\n\n    drop(constraint(:cars, \"cars_settings_id_fkey\"))\n\n    alter table(:cars) do\n      modify(:settings_id, references(:car_settings), null: false)\n    end\n\n    create(unique_index(:cars, :settings_id))\n\n    alter table(:settings) do\n      remove(:suspend_min, :integer)\n      remove(:suspend_after_idle_min)\n\n      remove(:req_no_shift_state_reading)\n      remove(:req_no_temp_reading)\n      remove(:req_not_unlocked)\n    end\n  end\n\n  def down do\n    alter table(:cars) do\n      remove(:settings_id)\n    end\n\n    drop(table(:car_settings))\n\n    alter table(:settings) do\n      add(:suspend_min, :integer, default: 21, null: false)\n      add(:suspend_after_idle_min, :integer, default: 15, null: false)\n\n      add(:req_no_shift_state_reading, :boolean, null: false, default: false)\n      add(:req_no_temp_reading, :boolean, null: false, default: false)\n      add(:req_not_unlocked, :boolean, null: false, default: true)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191119162847_geofence_sleep.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.GeofenceSleep do\n  use Ecto.Migration\n\n  def change do\n    alter table(:car_settings) do\n      add(:sleep_mode_enabled, :boolean, null: false, default: true)\n    end\n\n    create table(:geofence_sleep_mode_whitelist, primary_key: false) do\n      add(:car_id, references(:cars, on_delete: :delete_all), primary_key: true)\n      add(:geofence_id, references(:geofences, on_delete: :delete_all), primary_key: true)\n    end\n\n    create table(:geofence_sleep_mode_blacklist, primary_key: false) do\n      add(:car_id, references(:cars, on_delete: :delete_all), primary_key: true)\n      add(:geofence_id, references(:geofences, on_delete: :delete_all), primary_key: true)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191212215130_remove_phase_correction.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.RemovePhaseCorrection do\n  use Ecto.Migration\n\n  def change do\n    alter table(:geofences) do\n      remove(:phase_correction, :integer, null: true)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20191212230527_recalc_energy_used.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.RecalcEnergyUsed.CustomExpressions do\n  import Ecto.Query, warn: false\n\n  defmacro c_if(condition, do: do_clause, else: else_clause) do\n    quote do\n      fragment(\n        \"CASE WHEN ? THEN ? ELSE ? END\",\n        unquote(condition),\n        unquote(do_clause),\n        unquote(else_clause)\n      )\n    end\n  end\n\n  defmacro duration_min(a, b) do\n    quote do\n      fragment(\n        \"(EXTRACT(EPOCH FROM (?::timestamp - ?::timestamp)) / 60)::integer\",\n        unquote(a),\n        unquote(b)\n      )\n    end\n  end\n\n  defmacro nullif(a, b) do\n    quote do\n      fragment(\"NULLIF(?, ?)\", unquote(a), unquote(b))\n    end\n  end\n\n  defmacro round(v, s) do\n    quote do\n      fragment(\"ROUND((?)::numeric, ?)::float8\", unquote(v), unquote(s))\n    end\n  end\nend\n\ndefmodule TeslaMate.Repo.Migrations.RecalcEnergyUsed do\n  use Ecto.Migration\n\n  require Logger\n\n  defmodule Charge do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    alias ChargingProcess\n\n    schema \"charges\" do\n      field(:date, :utc_datetime_usec)\n      field(:battery_level, :integer)\n      field(:charge_energy_added, :float)\n      field(:charger_actual_current, :integer)\n      field(:charger_phases, :integer, default: 1)\n      field(:charger_power, :float)\n      field(:charger_voltage, :integer)\n      field(:ideal_battery_range_km, :float)\n      field(:rated_battery_range_km, :float)\n      field(:outside_temp, :float)\n\n      belongs_to(:charging_process, ChargingProcess)\n    end\n  end\n\n  defmodule ChargingProcess do\n    use Ecto.Schema\n    import Ecto.Changeset\n\n    alias TeslaMate.Log.Charge\n\n    schema \"charging_processes\" do\n      field(:start_date, :utc_datetime_usec)\n      field(:end_date, :utc_datetime_usec)\n      field(:charge_energy_added, :float)\n      field(:charge_energy_used, :float)\n      field(:start_ideal_range_km, :float)\n      field(:end_ideal_range_km, :float)\n      field(:start_rated_range_km, :float)\n      field(:end_rated_range_km, :float)\n      field(:start_battery_level, :integer)\n      field(:end_battery_level, :integer)\n      field(:duration_min, :integer)\n      field(:outside_temp_avg, :float)\n\n      has_many(:charges, Charge)\n    end\n\n    @doc false\n    def changeset(charging_state, attrs) do\n      charging_state\n      |> cast(attrs, [\n        :start_date,\n        :end_date,\n        :charge_energy_added,\n        :charge_energy_used,\n        :start_ideal_range_km,\n        :end_ideal_range_km,\n        :start_rated_range_km,\n        :end_rated_range_km,\n        :start_battery_level,\n        :end_battery_level,\n        :duration_min,\n        :outside_temp_avg\n      ])\n      |> validate_required([:start_date])\n      |> validate_number(:charge_energy_added, greater_than_or_equal_to: 0)\n      |> validate_number(:charge_energy_used, greater_than_or_equal_to: 0)\n    end\n  end\n\n  import Ecto.Query\n  import __MODULE__.CustomExpressions\n\n  alias TeslaMate.Repo\n\n  def up do\n    ChargingProcess\n    |> Repo.all()\n    |> Enum.each(&complete_charging_process/1)\n  end\n\n  def down do\n    :ok\n  end\n\n  defp complete_charging_process(%ChargingProcess{} = charging_process) do\n    stats =\n      from(c in Charge,\n        select: %{\n          start_ideal_range_km: first_value(c.ideal_battery_range_km) |> over(:w),\n          end_ideal_range_km: last_value(c.ideal_battery_range_km) |> over(:w),\n          start_rated_range_km: first_value(c.rated_battery_range_km) |> over(:w),\n          end_rated_range_km: last_value(c.rated_battery_range_km) |> over(:w),\n          start_battery_level: first_value(c.battery_level) |> over(:w),\n          end_battery_level: last_value(c.battery_level) |> over(:w),\n          outside_temp_avg: avg(c.outside_temp) |> over(:w),\n          charge_energy_added:\n            (last_value(c.charge_energy_added) |> over(:w)) -\n              (first_value(c.charge_energy_added) |> over(:w)),\n          duration_min:\n            duration_min(last_value(c.date) |> over(:w), first_value(c.date) |> over(:w)),\n          detected_end_date: last_value(c.date) |> over(:w)\n        },\n        windows: [\n          w: [\n            order_by:\n              fragment(\"? RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING\", c.date)\n          ]\n        ],\n        where: [charging_process_id: ^charging_process.id],\n        limit: 1\n      )\n      |> Repo.one() || %{detected_end_date: nil}\n\n    charge_energy_used = calculate_energy_used(charging_process)\n\n    attrs =\n      stats\n      |> Map.put(:end_date, charging_process.end_date || stats.detected_end_date)\n      |> Map.put(:charge_energy_used, charge_energy_used)\n      |> Map.update(:charge_energy_added, nil, &if(&1 < 0, do: nil, else: &1))\n\n    charging_process |> ChargingProcess.changeset(attrs) |> Repo.update()\n  end\n\n  defp calculate_energy_used(%ChargingProcess{id: id} = charging_process) do\n    phases = determine_phases(charging_process)\n\n    query =\n      from(c in Charge,\n        join: p in ChargingProcess,\n        on: [id: c.charging_process_id],\n        select: %{\n          energy_used:\n            c_if is_nil(c.charger_phases) do\n              c.charger_power\n            else\n              c.charger_actual_current * c.charger_voltage * type(^phases, :float) / 1000.0\n            end *\n              fragment(\n                \"EXTRACT(epoch FROM (?))\",\n                c.date - (lag(c.date) |> over(order_by: c.date))\n              ) / 3600\n        },\n        where: c.charging_process_id == ^id\n      )\n\n    from(e in subquery(query),\n      select: {sum(e.energy_used)},\n      where: e.energy_used > 0\n    )\n    |> Repo.one()\n    |> case do\n      {charge_energy_used} -> charge_energy_used\n      _ -> nil\n    end\n  end\n\n  defp determine_phases(%ChargingProcess{id: id}) do\n    from(c in Charge,\n      join: p in ChargingProcess,\n      on: [id: c.charging_process_id],\n      select: {\n        avg(c.charger_power * 1000 / nullif(c.charger_actual_current * c.charger_voltage, 0)),\n        type(avg(c.charger_phases), :integer),\n        type(avg(c.charger_voltage), :float),\n        count()\n      },\n      group_by: c.charging_process_id,\n      where: c.charging_process_id == ^id\n    )\n    |> Repo.one()\n    |> case do\n      {p, r, v, n} when not is_nil(p) and p > 0 and n > 15 ->\n        cond do\n          r == round(p) ->\n            r\n\n          r == 3 and abs(p / :math.sqrt(r) - 1) <= 0.1 ->\n            Logger.info(\"Voltage correction: #{round(v)}V -> #{round(v / :math.sqrt(r))}V\")\n            :math.sqrt(r)\n\n          abs(round(p) - p) <= 0.3 ->\n            Logger.info(\"Phase correction: #{r} -> #{round(p)}\")\n            round(p)\n\n          true ->\n            nil\n        end\n\n      _ ->\n        nil\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200103073606_add_usable_battery_level.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddUsableBatteryLevel do\n  use Ecto.Migration\n\n  def change do\n    alter table(:positions) do\n      add(:usable_battery_level, :integer)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200116190926_charges_add_usable_battery_level.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.ChargesAddUsableBatteryLevel do\n  use Ecto.Migration\n\n  def change do\n    alter table(:charges) do\n      add(:usable_battery_level, :integer)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200120130125_add_language.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddLanguage do\n  use Ecto.Migration\n\n  def change do\n    alter table(:settings) do\n      add(:language, :text, null: false, default: \"en\")\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200120142602_replace_place_id_with_osmid.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.ReplacePlaceIdWithOsmid do\n  use Ecto.Migration\n\n  def change do\n    drop(unique_index(:addresses, :place_id))\n\n    alter table(:addresses) do\n      remove(:place_id, :integer)\n      add(:osm_id, :bigint)\n      add(:osm_type, :text)\n    end\n\n    create(unique_index(:addresses, [:osm_id, :osm_type]))\n\n    execute(\"UPDATE drives SET start_address_id = NULL, end_address_id = NULL;\", fn -> :ok end)\n    execute(\"UPDATE charging_processes SET address_id = NULL;\", fn -> :ok end)\n    execute(\"DELETE FROM addresses;\", fn -> :ok end)\n    execute(\"ALTER SEQUENCE addresses_id_seq RESTART;\", fn -> :ok end)\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200203120311_cascade_delete.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CascadeDelete do\n  use Ecto.Migration\n\n  def up do\n    drop(constraint(:cars, \"cars_settings_id_fkey\"))\n\n    flush()\n\n    alter table(:cars) do\n      modify(:settings_id, references(:car_settings, on_delete: :delete_all), null: false)\n    end\n\n    drop(constraint(:charges, \"charges_charging_process_id_fkey\"))\n\n    flush()\n\n    alter table(:charges) do\n      modify(:charging_process_id, references(:charging_processes, on_delete: :delete_all),\n        null: false\n      )\n    end\n\n    drop(constraint(:charging_processes, \"charging_processes_car_id_fkey\"))\n    drop(constraint(:charging_processes, \"charging_processes_address_id_fkey\"))\n    drop(constraint(:charging_processes, \"charging_processes_geofence_id_fkey\"))\n\n    flush()\n\n    alter table(:charging_processes) do\n      modify(:car_id, references(:cars, on_delete: :delete_all), null: false)\n      modify(:address_id, references(:addresses, on_delete: :nilify_all))\n      modify(:geofence_id, references(:geofences, on_delete: :nilify_all))\n    end\n\n    drop_if_exists(constraint(:drives, \"trips_car_id_fkey\"))\n    drop_if_exists(constraint(:drives, \"drives_car_id_fkey\"))\n\n    drop(constraint(:drives, \"drives_start_position_id_fkey\"))\n    drop(constraint(:drives, \"drives_end_position_id_fkey\"))\n\n    drop_if_exists(constraint(:drives, \"trips_start_address_id_fkey\"))\n    drop_if_exists(constraint(:drives, \"trips_end_address_id_fkey\"))\n    drop_if_exists(constraint(:drives, \"drives_start_address_id_fkey\"))\n    drop_if_exists(constraint(:drives, \"drives_end_address_id_fkey\"))\n\n    drop(constraint(:drives, \"drives_start_geofence_id_fkey\"))\n    drop(constraint(:drives, \"drives_end_geofence_id_fkey\"))\n\n    flush()\n\n    alter table(:drives) do\n      modify(:car_id, references(:cars, on_delete: :delete_all), null: false)\n\n      modify(:start_position_id, references(:positions, on_delete: :nilify_all))\n      modify(:end_position_id, references(:positions, on_delete: :nilify_all))\n\n      modify(:start_address_id, references(:addresses, on_delete: :nilify_all))\n      modify(:end_address_id, references(:addresses, on_delete: :nilify_all))\n\n      modify(:start_geofence_id, references(:geofences, on_delete: :nilify_all))\n      modify(:end_geofence_id, references(:geofences, on_delete: :nilify_all))\n    end\n\n    drop(constraint(:positions, \"positions_car_id_fkey\"))\n    drop(constraint(:positions, \"positions_drive_id_fkey\"))\n\n    flush()\n\n    alter table(:positions) do\n      modify(:car_id, references(:cars, on_delete: :delete_all), null: false)\n      modify(:drive_id, references(:drives, on_delete: :nilify_all))\n    end\n\n    drop(constraint(:states, \"states_car_id_fkey\"))\n\n    flush()\n\n    alter table(:states) do\n      modify(:car_id, references(:cars, on_delete: :delete_all), null: false)\n    end\n\n    drop(constraint(:updates, \"updates_car_id_fkey\"))\n\n    flush()\n\n    alter table(:updates) do\n      modify(:car_id, references(:cars, on_delete: :delete_all), null: false)\n    end\n  end\n\n  def down do\n    :ok\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200203180529_location_based_charge_cost.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.LocationBasedChargeCost do\n  use Ecto.Migration\n\n  def change do\n    alter table(:geofences) do\n      add(:cost_per_kwh, :decimal, precision: 6, scale: 2)\n    end\n\n    alter table(:car_settings) do\n      add(:free_supercharging, :boolean, null: false, default: false)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200212001245_location_based_charge_cost_increase_scale.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.LocationBasedChargeCostIncreaseScale do\n  use Ecto.Migration\n\n  def up do\n    alter table(:geofences) do\n      modify(:cost_per_kwh, :decimal, precision: 6, scale: 4)\n    end\n  end\n\n  def down do\n    alter table(:geofences) do\n      modify(:cost_per_kwh, :decimal, precision: 6, scale: 2)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200216121330_use_rated_as_default_preferred_range.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.UseRatedAsDefaultPreferredRange do\n  use Ecto.Migration\n\n  def up do\n    alter table(:settings) do\n      modify :preferred_range, :range, default: \"rated\", null: false\n    end\n  end\n\n  def down do\n    alter table(:settings) do\n      modify :preferred_range, :range, default: \"ideal\", null: false\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200302100654_add_vehicle_config_attrbitues.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddVehicleConfigAttrbitues do\n  use Ecto.Migration\n\n  def change do\n    alter table(:cars) do\n      add(:exterior_color, :text)\n      add(:spoiler_type, :text)\n      add(:wheel_type, :text)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200306130218_update_cities.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.UpdateCities do\n  use Ecto.Migration\n\n  def change do\n    execute(\n      \"\"\"\n      UPDATE addresses a\n      SET city = (\n        SELECT trim(BOTH '\"' FROM COALESCE(\n          raw -> 'address' -> 'city',\n          raw -> 'address' -> 'town',\n          raw -> 'address' -> 'municipality',\n          raw -> 'address' -> 'village',\n          raw -> 'address' -> 'hamlet',\n          raw -> 'address' -> 'locality',\n          raw -> 'address' -> 'croft'\n        )::text)\n        FROM addresses\n        WHERE a.id = id\n      ) WHERE\n        raw -> 'address' -> 'village' IS NOT NULL OR\n        raw -> 'address' -> 'hamlet' IS NOT NULL OR\n        raw -> 'address' -> 'locality' IS NOT NULL OR\n        raw -> 'address' -> 'croft' IS NOT NULL;\n      \"\"\",\n      fn -> :ok end\n    )\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200306133847_add_flat_fee.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddFlatFee do\n  use Ecto.Migration\n\n  def change do\n    alter table(:geofences) do\n      add(:session_fee, :decimal, precision: 6, scale: 2)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200318164021_use_streaming_api.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.UseStreamingApi do\n  use Ecto.Migration\n\n  def change do\n    alter table(:car_settings) do\n      add :use_streaming_api, :boolean, default: true, null: false\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200320140020_drop_power_avg.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.DropPowerAvg do\n  use Ecto.Migration\n\n  def change do\n    alter table(:drives) do\n      remove(:power_avg, :float)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200401170940_remove_sleep_mode_toggles.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.RemoveSleepModeToggles do\n  use Ecto.Migration\n\n  def up do\n    alter table(:car_settings) do\n      remove :sleep_mode_enabled\n    end\n\n    drop table(:geofence_sleep_mode_whitelist)\n    drop table(:geofence_sleep_mode_blacklist)\n  end\n\n  def down do\n    alter table(:car_settings) do\n      add :sleep_mode_enabled, :boolean, null: false, default: true\n    end\n\n    create table(:geofence_sleep_mode_whitelist, primary_key: false) do\n      add :car_id, references(:cars, on_delete: :delete_all), primary_key: true\n      add :geofence_id, references(:geofences, on_delete: :delete_all), primary_key: true\n    end\n\n    create table(:geofence_sleep_mode_blacklist, primary_key: false) do\n      add :car_id, references(:cars, on_delete: :delete_all), primary_key: true\n      add :geofence_id, references(:geofences, on_delete: :delete_all), primary_key: true\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200401171402_remove_sleep_mode_requirements.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.RemoveSleepModeRequirements do\n  use Ecto.Migration\n\n  def change do\n    alter table(:car_settings) do\n      remove(:req_no_shift_state_reading, :boolean, null: false, default: false)\n      remove(:req_no_temp_reading, :boolean, null: false, default: false)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200401171923_enable_streaming.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.EnableStreaming do\n  use Ecto.Migration\n\n  alias TeslaMate.Settings.CarSettings\n  alias TeslaMate.Repo\n\n  def up, do: Repo.update_all(CarSettings, set: [use_streaming_api: true])\n  def down, do: :ok\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200410112005_database_efficiency_improvements.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.DatabaseEfficiencyImprovements do\n  use Ecto.Migration\n\n  def change do\n    alter table(:cars) do\n      modify(:id, :smallint)\n    end\n\n    alter table(:addresses) do\n      modify(:id, :integer)\n      modify(:latitude, :numeric, precision: 8, scale: 6)\n      modify(:longitude, :numeric, precision: 9, scale: 6)\n    end\n\n    alter table(:charging_processes) do\n      modify(:id, :integer)\n      modify(:charge_energy_added, :numeric, precision: 8, scale: 2)\n      modify(:charge_energy_used, :numeric, precision: 8, scale: 2)\n      modify(:start_ideal_range_km, :numeric, precision: 6, scale: 2)\n      modify(:end_ideal_range_km, :numeric, precision: 6, scale: 2)\n      modify(:start_rated_range_km, :numeric, precision: 6, scale: 2)\n      modify(:end_rated_range_km, :numeric, precision: 6, scale: 2)\n      modify(:start_battery_level, :smallint)\n      modify(:end_battery_level, :smallint)\n      modify(:duration_min, :smallint)\n      modify(:outside_temp_avg, :numeric, precision: 4, scale: 1)\n      modify(:car_id, :smallint)\n      modify(:position_id, :integer)\n      modify(:address_id, :integer)\n      modify(:geofence_id, :integer)\n    end\n\n    alter table(:drives) do\n      modify(:id, :integer)\n      modify(:car_id, :smallint)\n      modify(:outside_temp_avg, :numeric, precision: 4, scale: 1)\n      modify(:inside_temp_avg, :numeric, precision: 4, scale: 1)\n      modify(:speed_max, :smallint)\n      modify(:power_max, :smallint)\n      modify(:power_min, :smallint)\n      modify(:start_ideal_range_km, :numeric, precision: 6, scale: 2)\n      modify(:end_ideal_range_km, :numeric, precision: 6, scale: 2)\n      modify(:start_rated_range_km, :numeric, precision: 6, scale: 2)\n      modify(:end_rated_range_km, :numeric, precision: 6, scale: 2)\n      modify(:duration_min, :smallint)\n      modify(:start_position_id, :integer)\n      modify(:end_position_id, :integer)\n      modify(:start_address_id, :integer)\n      modify(:end_address_id, :integer)\n      modify(:start_geofence_id, :integer)\n      modify(:end_geofence_id, :integer)\n    end\n\n    alter table(:geofences) do\n      modify(:id, :integer)\n      modify(:latitude, :numeric, precision: 8, scale: 6)\n      modify(:longitude, :numeric, precision: 9, scale: 6)\n      modify(:radius, :smallint)\n    end\n\n    alter table(:positions) do\n      modify(:id, :integer)\n      modify(:car_id, :smallint)\n      modify(:drive_id, :integer)\n      modify(:latitude, :numeric, precision: 8, scale: 6)\n      modify(:longitude, :numeric, precision: 9, scale: 6)\n      modify(:elevation, :smallint)\n      modify(:speed, :smallint)\n      modify(:power, :smallint)\n      modify(:ideal_battery_range_km, :numeric, precision: 6, scale: 2)\n      modify(:est_battery_range_km, :numeric, precision: 6, scale: 2)\n      modify(:rated_battery_range_km, :numeric, precision: 6, scale: 2)\n      modify(:battery_level, :smallint)\n      modify(:usable_battery_level, :smallint)\n      modify(:outside_temp, :numeric, precision: 4, scale: 1)\n      modify(:inside_temp, :numeric, precision: 4, scale: 1)\n      modify(:driver_temp_setting, :numeric, precision: 4, scale: 1)\n      modify(:passenger_temp_setting, :numeric, precision: 4, scale: 1)\n    end\n\n    alter table(:charges) do\n      modify(:id, :integer)\n      modify(:charging_process_id, :integer)\n      modify(:battery_level, :smallint)\n      modify(:usable_battery_level, :smallint)\n      modify(:charge_energy_added, :numeric, precision: 8, scale: 2)\n      modify(:charger_actual_current, :smallint)\n      modify(:charger_phases, :smallint)\n      modify(:charger_pilot_current, :smallint)\n      modify(:charger_power, :smallint)\n      modify(:charger_voltage, :smallint)\n      modify(:ideal_battery_range_km, :numeric, precision: 6, scale: 2)\n      modify(:rated_battery_range_km, :numeric, precision: 6, scale: 2)\n      modify(:outside_temp, :numeric, precision: 4, scale: 1)\n    end\n\n    alter table(:states) do\n      modify(:id, :integer)\n      modify(:car_id, :smallint)\n    end\n\n    alter table(:tokens) do\n      modify(:id, :integer)\n    end\n\n    alter table(:updates) do\n      modify(:id, :integer)\n      modify(:car_id, :smallint)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200502140646_drop_unused_indexes.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.DropUnusedIndexes do\n  use Ecto.Migration\n\n  def change do\n    drop_if_exists(index(:positions, [\"ll_to_earth(latitude, longitude)\"], using: \"gist\"))\n    drop_if_exists(index(:addresses, [\"ll_to_earth(latitude, longitude)\"], using: \"gist\"))\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200528163852_cost_by_minute.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CostByMinute do\n  use Ecto.Migration\n\n  def up do\n    execute \"CREATE TYPE billing_type AS ENUM ('per_kwh', 'per_minute')\"\n\n    alter table(:geofences) do\n      add :billing_type, :billing_type, null: false, default: \"per_kwh\"\n    end\n\n    rename table(:geofences), :cost_per_kwh, to: :cost_per_unit\n  end\n\n  def down do\n    rename table(:geofences), :cost_per_unit, to: :cost_per_kwh\n\n    alter table(:geofences) do\n      remove :billing_type\n    end\n\n    execute \"DROP TYPE billing_type\"\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200528173223_rename_unit_enums.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.RenameUnitEnums do\n  use Ecto.Migration\n\n  def change do\n    execute(\n      \"ALTER TYPE length RENAME TO unit_of_length\",\n      \"ALTER TYPE unit_of_length RENAME TO length\"\n    )\n\n    execute(\n      \"ALTER TYPE temperature RENAME TO unit_of_temperature\",\n      \"ALTER TYPE unit_of_temperature RENAME TO temperature\"\n    )\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200528175158_optimize_conversion_helpers.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.OptimizeConversionHelpers do\n  use Ecto.Migration\n\n  def change do\n    execute(\"DROP FUNCTION IF EXISTS public.convert_km(double precision, text);\", &noop/0)\n\n    execute(\n      \"\"\"\n      CREATE OR REPLACE FUNCTION public.convert_km(n numeric(6,2), unit text)\n      RETURNS numeric(6,2)\n      LANGUAGE 'sql'\n      COST 100\n      VOLATILE\n      AS $BODY$\n        SELECT\n        CASE $2 WHEN 'km' THEN $1\n                WHEN 'mi' THEN $1 / 1.60934\n        END;\n      $BODY$;\n      \"\"\",\n      &noop/0\n    )\n\n    execute(\"DROP FUNCTION IF EXISTS public.convert_celsius(double precision, text);\", &noop/0)\n\n    execute(\n      \"\"\"\n      CREATE OR REPLACE FUNCTION public.convert_celsius(n numeric(4,1), unit text)\n      RETURNS numeric(4,1)\n      LANGUAGE 'sql'\n      COST 100\n      VOLATILE\n      AS $BODY$\n        SELECT\n        CASE $2 WHEN 'C' THEN $1\n                WHEN 'F' THEN ($1 * 9 / 5) + 32\n        END;\n      $BODY$;\n      \"\"\",\n      &noop/0\n    )\n  end\n\n  defp noop, do: :ok\nend\n"
  },
  {
    "path": "priv/repo/migrations/20200709165119_change_sleep_requirements_default.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.ChangeSleepRequirementsDefault do\n  use Ecto.Migration\n\n  def up do\n    alter table(:car_settings) do\n      modify(:req_not_unlocked, :boolean, null: false, default: false)\n    end\n  end\n\n  def down do\n    alter table(:car_settings) do\n      modify(:req_not_unlocked, :boolean, null: false, default: true)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20210130174838_use_variable_length_type_for_tokens.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.UseVariableLengthTypeForTokens do\n  use Ecto.Migration\n\n  def change do\n    alter table(:tokens) do\n      modify :access, :text, from: :string\n      modify :refresh, :text, from: :string\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20210812173700_car_priorities.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CarPriorities do\n  use Ecto.Migration\n\n  def change do\n    alter table(:cars) do\n      add(:display_priority, :smallint, default: 1)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20210831153305_add_not_null_constraint_to_display_priority.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddNotNullConstraintToDisplayPriority do\n  use Ecto.Migration\n\n  def up do\n    alter table(:cars) do\n      modify(:display_priority, :smallint, null: false, default: 1)\n    end\n  end\n\n  def down do\n    alter table(:cars) do\n      modify(:display_priority, :smallint, null: true, default: 1)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20211022103654_add_not_null_constraint_to_start_date.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddNotNullConstraintToStartDate do\n  use Ecto.Migration\n\n  def up do\n    alter table(:charging_processes) do\n      modify(:start_date, :utc_datetime_usec, null: false)\n    end\n  end\n\n  def down do\n    alter table(:charging_processes) do\n      modify(:start_date, :utc_datetime_usec, null: true)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20220123131732_encrypt_api_tokens.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.EncryptApiTokens do\n  use Ecto.Migration\n\n  Code.ensure_loaded!(TeslaMate.Vault)\n\n  defmodule Encrypted.Binary do\n    use Cloak.Ecto.Binary, vault: TeslaMate.Vault\n  end\n\n  defmodule Tokens do\n    use Ecto.Schema\n\n    schema \"tokens\" do\n      field(:refresh, :string)\n      field(:access, :string)\n\n      field(:encrypted_refresh, Encrypted.Binary)\n      field(:encrypted_access, Encrypted.Binary)\n    end\n  end\n\n  defmodule Encryption do\n    def setup do\n      {type, key} =\n        case System.get_env(\"ENCRYPTION_KEY\") do\n          key when is_binary(key) and byte_size(key) > 0 -> {:existing, key}\n          _ -> {:generated, generate_key(64)}\n        end\n\n      setup_vault(key)\n\n      {type, key}\n    end\n\n    defp generate_key(length) when length > 31 do\n      :crypto.strong_rand_bytes(length) |> Base.encode64(padding: false) |> binary_part(0, length)\n    end\n\n    defp setup_vault(key) do\n      Cloak.Vault.save_config(TeslaMate.Vault.Config,\n        ciphers: [\n          default: TeslaMate.Vault.default_cipher(:crypto.hash(:sha256, key))\n        ]\n      )\n    end\n  end\n\n  defmodule Cache do\n    require Logger\n\n    def store(encryption_key) do\n      Enum.each([System.tmp_dir(), import_dir()], fn dir ->\n        with dir when is_binary(dir) <- dir,\n             path = Path.join(dir, \"tm_encryption.key\"),\n             :ok <- File.write(path, encryption_key) do\n          Logger.info(\"Wrote encryption key to #{path}\")\n        end\n      end)\n    end\n\n    defp import_dir do\n      path =\n        System.get_env(\"IMPORT_DIR\", \"import\")\n        |> Path.absname()\n\n      if File.exists?(path), do: path\n    end\n  end\n\n  alias TeslaMate.Repo\n\n  def change do\n    alter table(:tokens) do\n      add :encrypted_refresh, :binary\n      add :encrypted_access, :binary\n    end\n\n    flush()\n\n    with [_ | _] = tokens <- Repo.all(Tokens) do\n      with {:generated, encryption_key} <- Encryption.setup() do\n        require Logger\n\n        Logger.warning(\"\"\"\n        \\n------------------------------------------------------------------------------\n        No ENCRYPTION_KEY was found to encrypt and securely store your API tokens.\n\n        Therefore, the following randomly generated key will be used instead:\n\n\n                #{encryption_key}\n\n\n        IMPORTANT: Create an environment variable named \"ENCRYPTION_KEY\" with the value\n        set to the key above and pass it to the application from now on.\n\n        If you choose to use a different key, a new login with your API tokens will be\n        required once after starting the application.\n        ------------------------------------------------------------------------------\n        \"\"\")\n\n        Cache.store(encryption_key)\n      end\n\n      Enum.each(tokens, fn %Tokens{} = tokens ->\n        tokens\n        |> Ecto.Changeset.change(%{\n          encrypted_access: tokens.access,\n          encrypted_refresh: tokens.refresh\n        })\n        |> Repo.update!()\n      end)\n    end\n\n    alter table(:tokens) do\n      remove :access\n      remove :refresh\n    end\n\n    rename table(:tokens), :encrypted_access, to: :access\n    rename table(:tokens), :encrypted_refresh, to: :refresh\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20220422132017_add_marketing_name_to_car.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddMarketingNameToCar do\n  use Ecto.Migration\n\n  def change do\n    alter table(:cars) do\n      add :marketing_name, :string, null: true\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20220617170400_add_tire_pressures.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddTirePressures do\n  use Ecto.Migration\n\n  def change do\n    alter table(:positions) do\n      add :tpms_pressure_fl, :numeric, precision: 4, scale: 1\n      add :tpms_pressure_fr, :numeric, precision: 4, scale: 1\n      add :tpms_pressure_rl, :numeric, precision: 4, scale: 1\n      add :tpms_pressure_rr, :numeric, precision: 4, scale: 1\n    end\n\n    execute(\n      \"\"\"\n      CREATE OR REPLACE FUNCTION public.convert_tire_pressure(n numeric(6,2), character varying)\n      RETURNS numeric(6,2)\n      LANGUAGE 'sql'\n      COST 100\n      VOLATILE\n      AS $BODY$\n      SELECT\n      CASE $2 WHEN 'bar' THEN $1\n          WHEN 'psi' THEN $1 * 14.503773773\n      END;\n      $BODY$;\n      \"\"\",\n      &noop/0\n    )\n  end\n\n  defp noop, do: :ok\nend\n"
  },
  {
    "path": "priv/repo/migrations/20220718085412_add_unit_of_pressure_to_global_settings.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddUnitOfPressureToGlobalSettings do\n  use Ecto.Migration\n\n  def change do\n    execute(\"CREATE TYPE unit_of_pressure AS ENUM ('bar', 'psi')\", \"DROP TYPE unit_of_pressure \")\n\n    alter table(:settings) do\n      add(:unit_of_pressure, :unit_of_pressure, default: \"bar\", null: false)\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20230417225712_composite_index_to_position.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddCompositeIndexToPositions do\n  use Ecto.Migration\n\n  def change do\n    create index(:positions, [:drive_id, :date])\n    drop index(:positions, [:drive_id])\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20240603152807_add_enabled_to_car_settings.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddEnabledToCarSettings do\n  use Ecto.Migration\n\n  def change do\n    alter table(:car_settings) do\n      add :enabled, :boolean, null: false, default: true\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20240627021414_add_lfp_battery_car_setting.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddLFPBatteryCarSetting do\n  use Ecto.Migration\n\n  def change do\n    alter table(:car_settings) do\n      add :lfp_battery, :boolean, default: false, null: false\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20240915193446_composite_index_with_predicate_to_position.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddCompositeIndexWithPredicateToPositions do\n  use Ecto.Migration\n\n  def change do\n    create index(:positions, [:car_id, :date, \"(ideal_battery_range_km IS NOT NULL)\"],\n             where: \"ideal_battery_range_km IS NOT NULL\"\n           )\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20240929084639_recreate_geo_extensions.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.RecreateGeoExtensions do\n  use Ecto.Migration\n\n  def change do\n    execute(\"DROP EXTENSION cube CASCADE\")\n    execute(\"CREATE EXTENSION cube WITH SCHEMA public\")\n    execute(\"CREATE EXTENSION earthdistance WITH SCHEMA public\")\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20250407155134_upgrade_earthdistance.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.UpgradeEarthdistance do\n  use Ecto.Migration\n\n  def change do\n    execute(\"ALTER EXTENSION earthdistance UPDATE\")\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20250613133700_add_and_calculate_elevation_changes.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddAndCalculateElevationChanges do\n  use Ecto.Migration\n\n  def up do\n    alter table(:drives) do\n      add :ascent, :smallint\n      add :descent, :smallint\n    end\n\n    # If the sum of elevation gains exceeds the max value of a smallint (32767), set it to 0.\n    # If the sum of elevation losses exceeds the max value of a smallint (32767), set it to 0.\n\n    execute \"\"\"\n    WITH elevation_changes AS (\n      SELECT\n        drive_id,\n        COALESCE(NULLIF(LEAST(SUM(CASE WHEN elevation_diff > 0 THEN elevation_diff ELSE 0 END), 32768), 32768), 0) as ascent,\n        COALESCE(NULLIF(LEAST(SUM(CASE WHEN elevation_diff < 0 THEN ABS(elevation_diff) ELSE 0 END), 32768), 32768), 0) as descent\n      FROM (\n        SELECT\n          drive_id,\n          elevation - LAG(elevation) OVER (PARTITION BY drive_id ORDER BY date) as elevation_diff\n        FROM positions\n        WHERE elevation IS NOT NULL\n      ) as changes\n      GROUP BY drive_id\n    )\n    UPDATE drives d\n    SET\n      ascent = ec.ascent,\n      descent = ec.descent\n    FROM elevation_changes ec\n    WHERE d.id = ec.drive_id;\n    \"\"\"\n  end\n\n  def down do\n    alter table(:drives) do\n      remove :ascent\n      remove :descent\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20250924215353_create_private_schema.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.CreatePrivateSchema do\n  use Ecto.Migration\n\n  def up do\n    execute(\"CREATE SCHEMA IF NOT EXISTS private;\")\n    execute(\"ALTER TABLE public.tokens SET SCHEMA private;\")\n  end\n\n  def down do\n    execute(\"ALTER TABLE private.tokens SET SCHEMA public;\")\n    execute(\"DROP SCHEMA private;\")\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20251207212310_add_theme_mode_to_settings.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.AddThemeModeToSettings do\n  use Ecto.Migration\n\n  def change do\n    alter table(:settings) do\n      add(:theme_mode, :text, null: false, default: \"system\")\n    end\n  end\nend\n"
  },
  {
    "path": "priv/repo/migrations/20251225150000_replace_positions_date_indexes.exs",
    "content": "defmodule TeslaMate.Repo.Migrations.ReplaceDateBtreeIndexesWithBrin do\n  use Ecto.Migration\n\n  def change do\n    # Drop BTREE indexes\n    drop_if_exists(index(:positions, [:drive_id, :date]))\n    drop_if_exists(index(:positions, [:date]))\n\n    # Create BRIN indexes\n    create(index(:positions, [:date], using: \"brin\"))\n    create(index(:positions, [:drive_id, :date], using: \"brin\"))\n  end\nend\n"
  },
  {
    "path": "priv/repo/seeds.exs",
    "content": "# Script for populating the database. You can run it as:\n#\n#     mix run priv/repo/seeds.exs\n#\n# Inside the script, you can read and write to any of your\n# repositories directly:\n#\n#     TeslaMate.Repo.insert!(%TeslaMate.SomeSchema{})\n#\n# We recommend using the bang functions (`insert!`, `update!`\n# and so on) as they will fail if something goes wrong.\n"
  },
  {
    "path": "priv/static/browserconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<browserconfig>\n    <msapplication>\n        <tile>\n            <square150x150logo src=\"/mstile-150x150.png?v=5AB53N3ALo\"/>\n            <TileColor>#ffffff</TileColor>\n        </tile>\n    </msapplication>\n</browserconfig>\n"
  },
  {
    "path": "priv/static/robots.txt",
    "content": "# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file\n#\n# To ban all spiders from the entire site uncomment the next two lines:\n# User-agent: *\n# Disallow: /\n"
  },
  {
    "path": "priv/static/site.webmanifest",
    "content": "{\n    \"name\": \"TeslaMate\",\n    \"short_name\": \"TeslaMate\",\n    \"icons\": [\n        {\n            \"src\": \"/android-chrome-192x192.png?v=5AB53N3ALo\",\n            \"sizes\": \"192x192\",\n            \"type\": \"image/png\"\n        },\n        {\n            \"src\": \"/android-chrome-512x512.png?v=5AB53N3ALo\",\n            \"sizes\": \"512x512\",\n            \"type\": \"image/png\"\n        }\n    ],\n    \"theme_color\": \"#ffffff\",\n    \"background_color\": \"#ffffff\",\n    \"display\": \"standalone\"\n}\n"
  },
  {
    "path": "test/fixtures/import/01_complete/TeslaFi62016.csv",
    "content": "﻿data_id,Date,calendar_enabled,remote_start_enabled,vehicle_id,display_name,color,backseat_token,notifications_enabled,vin,backseat_token_updated_at,id,tokens,id_s,state,user_charge_enable_request,time_to_full_charge,charge_current_request,charge_enable_request,charge_to_max_range,charger_phases,battery_heater_on,managed_charging_start_time,battery_range,charger_power,charge_limit_soc,charger_pilot_current,charge_port_latch,battery_current,charger_actual_current,scheduled_charging_pending,fast_charger_type,usable_battery_level,motorized_charge_port,charge_limit_soc_std,not_enough_power_to_heat,battery_level,charge_energy_added,charge_port_door_open,max_range_charge_counter,charge_limit_soc_max,ideal_battery_range,managed_charging_active,charging_state,fast_charger_present,trip_charging,managed_charging_user_canceled,scheduled_charging_start_time,est_battery_range,charge_rate,charger_voltage,charge_current_request_max,eu_vehicle,charge_miles_added_ideal,charge_limit_soc_min,charge_miles_added_rated,inside_temp,longitude,heading,gps_as_of,latitude,speed,shift_state,seat_heater_rear_right,seat_heater_rear_left_back,seat_heater_left,passenger_temp_setting,is_auto_conditioning_on,driver_temp_setting,outside_temp,seat_heater_rear_center,is_rear_defroster_on,seat_heater_rear_right_back,smart_preconditioning,seat_heater_right,fan_status,is_front_defroster_on,seat_heater_rear_left,gui_charge_rate_units,gui_24_hour_time,gui_temperature_units,gui_range_display,gui_distance_units,sun_roof_installed,rhd,remote_start_supported,homelink_nearby,parsed_calendar_supported,spoiler_type,ft,odometer,remote_start,pr,has_spoiler,roof_color,perf_config,valet_mode,calendar_supported,pf,sun_roof_percent_open,third_row_seats,seat_type,api_version,rear_seat_heaters,rt,exterior_color,df,autopark_state,sun_roof_state,notifications_supported,vehicle_name,dr,autopark_style,car_type,wheel_type,locked,center_display_state,last_autopark_error,car_version,dark_rims,autopark_state_v2,inside_tempF,driver_temp_settingF,outside_tempF,odometerF,idleNumber,sleepNumber,driveNumber,chargeNumber,polling,idleTime,running,rerunning,maxRange,left_temp_direction,max_avail_temp,is_climate_on,right_temp_direction,min_avail_temp,rear_seat_type,power,steering_wheel_heater,wiper_blade_heater,side_mirror_heaters,elevation\n1,\"2016-06-26 07:58:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.39,0.0,0,40,False,78.0,50,61.5,24.0,0.0,90,1466953114,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,,,,,0,0,0,0,,0,0,0,,,,,,,,,,,,\n2,\"2016-06-26 07:59:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.39,0.0,0,40,False,78.0,50,61.5,24.0,0.0,90,1466953173,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,1,0,0,0,,,,,,,,,,,\n3,\"2016-06-26 08:00:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.39,0.0,0,40,False,78.0,50,61.5,24.0,0.0,90,1466953252,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,2,0,0,0,,,,,,,,,,,\n4,\"2016-06-26 08:01:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.5,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.39,0.0,0,40,False,78.0,50,61.5,24.0,0.0,90,1466953298,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,3,0,0,0,,,,,,,,,,,\n5,\"2016-06-26 08:02:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.39,0.0,0,40,False,78.0,50,61.5,24.0,0.0,90,1466953356,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,4,0,0,0,,,,,,,,,,,\n6,\"2016-06-26 08:03:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.39,0.0,0,40,False,78.0,50,61.5,24.0,0.0,90,1466953415,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,5,0,0,0,,,,,,,,,,,\n7,\"2016-06-26 08:04:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.39,0.0,0,40,False,78.0,50,61.5,24.0,0.0,90,1466953475,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,6,0,0,0,,,,,,,,,,,\n8,\"2016-06-26 08:05:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.39,0.0,0,40,False,78.0,50,61.5,24.0,0.0,90,1466953533,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,7,0,0,0,,,,,,,,,,,\n9,\"2016-06-26 08:06:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.5,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.39,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466953597,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,8,0,0,0,,,,,,,,,,,\n10,\"2016-06-26 08:07:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.0,0.0,90,1466953654,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,9,0,0,0,,,,,,,,,,,\n11,\"2016-06-26 08:08:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466953714,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,10,0,0,0,,,,,,,,,,,\n12,\"2016-06-26 08:09:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466953778,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,11,0,0,0,,,,,,,,,,,\n13,\"2016-06-26 08:10:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466953832,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,12,0,0,0,,,,,,,,,,,\n14,\"2016-06-26 08:11:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.0,0.0,90,1466953897,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,13,0,0,0,,,,,,,,,,,\n15,\"2016-06-26 08:12:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466953954,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,14,0,0,0,,,,,,,,,,,\n16,\"2016-06-26 08:13:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.3,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466954012,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,15,0,0,0,,,,,,,,,,,\n17,\"2016-06-26 08:14:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.3,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466954075,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,16,0,0,0,,,,,,,,,,,\n18,\"2016-06-26 08:15:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466954131,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,17,0,0,0,,,,,,,,,,,\n19,\"2016-06-26 08:16:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.3,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.2,0.0,90,1466954195,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,18,0,0,0,,,,,,,,,,,\n20,\"2016-06-26 08:17:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.2,0.0,90,1466954254,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,19,0,0,0,,,,,,,,,,,\n21,\"2016-06-26 08:18:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.2,0.0,90,1466954316,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,20,0,0,0,,,,,,,,,,,\n22,\"2016-06-26 08:19:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.2,0.0,90,1466954376,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,21,0,0,0,,,,,,,,,,,\n23,\"2016-06-26 08:20:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466954437,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,22,0,0,0,,,,,,,,,,,\n24,\"2016-06-26 08:21:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466954496,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,23,0,0,0,,,,,,,,,,,\n25,\"2016-06-26 08:22:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466954554,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,24,0,0,0,,,,,,,,,,,\n26,\"2016-06-26 08:23:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.2,0.0,90,1466954615,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,25,0,0,0,,,,,,,,,,,\n27,\"2016-06-26 08:24:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.2,0.0,90,1466954674,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,26,0,0,0,,,,,,,,,,,\n28,\"2016-06-26 08:25:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466954738,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,27,0,0,0,,,,,,,,,,,\n29,\"2016-06-26 08:26:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466954800,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,28,0,0,0,,,,,,,,,,,\n30,\"2016-06-26 08:27:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.1,0.0,90,1466954852,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,29,0,0,0,,,,,,,,,,,\n31,\"2016-06-26 08:28:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.3,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.2,0.0,90,1466954927,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,30,0,0,0,,,,,,,,,,,\n32,\"2016-06-26 08:29:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.3,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.2,0.0,90,1466954981,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,31,0,0,0,,,,,,,,,,,\n33,\"2016-06-26 08:30:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.3,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.2,0.0,90,1466955033,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,32,0,0,0,,,,,,,,,,,\n34,\"2016-06-26 08:31:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.2,0.0,90,1466955112,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,33,0,0,0,,,,,,,,,,,\n35,\"2016-06-26 08:32:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.38,0,60,40,Engaged,-0.3,0,False,<invalid>,60,True,90,False,60,17.9,True,0,100,194.65,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,78.0,50,61.5,24.2,0.0,90,1466955155,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,34,0,0,0,,,,,,,,,,,\n36,\"2016-06-26 08:33:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.01,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.8,True,0,100,194.19,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,77.5,50,61.5,24.4,0.0,90,1466955214,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,75,68,68.0,13927,1,0,0,0,,35,0,0,0,,,,,,,,,,,\n37,\"2016-06-26 08:34:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.01,0,60,40,Engaged,-0.3,0,False,<invalid>,60,True,90,False,60,17.8,True,0,100,194.19,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,77.5,50,61.5,24.5,0.0,90,1466955276,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,36,0,0,0,,,,,,,,,,,\n38,\"2016-06-26 08:35:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.01,0,60,40,Engaged,-0.3,0,False,<invalid>,60,True,90,False,60,17.8,True,0,100,194.19,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,77.5,50,61.5,24.5,0.0,90,1466955334,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,37,0,0,0,,,,,,,,,,,\n39,\"2016-06-26 08:36:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.01,0,60,40,Engaged,-0.4,0,False,<invalid>,60,True,90,False,60,17.8,True,0,100,194.19,False,Complete,False,False,False,1467014400,136.07,0.0,0,40,False,77.5,50,61.5,24.5,0.0,90,1466955396,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,38,0,0,0,,,,,,,,,,,\n40,\"2016-06-26 08:37:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.5,0.0,90,1466955454,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,39,0,0,0,,,,,,,,,,,\n41,\"2016-06-26 08:38:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.5,0.0,90,1466955514,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,40,0,0,0,,,,,,,,,,,\n42,\"2016-06-26 08:39:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.5,0.0,90,1466955573,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,41,0,0,0,,,,,,,,,,,\n43,\"2016-06-26 08:40:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.5,0.0,90,1466955634,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,42,0,0,0,,,,,,,,,,,\n44,\"2016-06-26 08:41:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466955701,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,43,0,0,0,,,,,,,,,,,\n45,\"2016-06-26 08:42:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.5,0.0,90,1466955753,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,44,0,0,0,,,,,,,,,,,\n46,\"2016-06-26 08:43:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.5,0.0,90,1466955817,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,45,0,0,0,,,,,,,,,,,\n47,\"2016-06-26 08:44:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.5,0.0,90,1466955878,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,46,0,0,0,,,,,,,,,,,\n48,\"2016-06-26 08:45:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466955934,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,47,0,0,0,,,,,,,,,,,\n49,\"2016-06-26 08:46:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466955996,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,48,0,0,0,,,,,,,,,,,\n50,\"2016-06-26 08:47:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466956057,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,49,0,0,0,,,,,,,,,,,\n51,\"2016-06-26 08:48:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466956116,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,50,0,0,0,,,,,,,,,,,\n52,\"2016-06-26 08:49:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466956174,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,51,0,0,0,,,,,,,,,,,\n53,\"2016-06-26 08:50:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,60,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466956235,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,52,0,0,0,,,,,,,,,,,\n54,\"2016-06-26 08:51:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,59,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466956294,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,53,0,0,0,,,,,,,,,,,\n55,\"2016-06-26 08:52:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,136.06,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466956354,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,54,0,0,0,,,,,,,,,,,\n56,\"2016-06-26 08:53:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,135.74,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466956417,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,55,0,0,0,,,,,,,,,,,\n57,\"2016-06-26 08:54:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,135.74,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466956472,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,56,0,0,0,,,,,,,,,,,\n58,\"2016-06-26 08:55:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,59,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,135.74,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466956532,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,57,0,0,0,,,,,,,,,,,\n59,\"2016-06-26 08:56:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,135.74,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466956594,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,58,0,0,0,,,,,,,,,,,\n60,\"2016-06-26 08:57:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,135.74,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466956651,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,59,0,0,0,,,,,,,,,,,\n61,\"2016-06-26 08:58:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,135.74,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466956712,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,60,0,0,0,,,,,,,,,,,\n62,\"2016-06-26 08:59:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,154.0,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.8,True,0,100,194.18,False,Complete,False,False,False,1467014400,135.74,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466956775,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,61,0,0,0,,,,,,,,,,,\n63,\"2016-06-26 09:00:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466956834,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,62,0,0,0,,,,,,,,,,,\n64,\"2016-06-26 09:01:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466956894,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,63,0,0,0,,,,,,,,,,,\n65,\"2016-06-26 09:02:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,24.6,0.0,90,1466956952,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,64,0,0,0,,,,,,,,,,,\n66,\"2016-06-26 09:03:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466957015,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,65,0,0,0,,,,,,,,,,,\n67,\"2016-06-26 09:04:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466957077,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,66,0,0,0,,,,,,,,,,,\n68,\"2016-06-26 09:05:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466957135,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,67,0,0,0,,,,,,,,,,,\n69,\"2016-06-26 09:06:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466957199,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,68,0,0,0,,,,,,,,,,,\n70,\"2016-06-26 09:07:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466957259,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,69,0,0,0,,,,,,,,,,,\n71,\"2016-06-26 09:08:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,24.7,0.0,90,1466957315,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,76,68,68.0,13927,1,0,0,0,,70,0,0,0,,,,,,,,,,,\n72,\"2016-06-26 09:09:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,25.0,0.0,90,1466957372,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,68,68.0,13927,1,0,0,0,,71,0,0,0,,,,,,,,,,,\n73,\"2016-06-26 09:10:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,25.1,0.0,90,1466957433,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,68,68.0,13927,1,0,0,0,,72,0,0,0,,,,,,,,,,,\n74,\"2016-06-26 09:11:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,25.1,0.0,90,1466957492,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,68,68.0,13927,1,0,0,0,,73,0,0,0,,,,,,,,,,,\n75,\"2016-06-26 09:12:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.4,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,25.1,0.0,90,1466957553,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,68,68.0,13927,1,0,0,0,,74,0,0,0,,,,,,,,,,,\n76,\"2016-06-26 09:13:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,25.2,0.0,90,1466957613,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,68,68.0,13927,1,0,0,0,,75,0,0,0,,,,,,,,,,,\n77,\"2016-06-26 09:14:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,25.2,0.0,90,1466957671,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,68,68.0,13927,1,0,0,0,,76,0,0,0,,,,,,,,,,,\n78,\"2016-06-26 09:15:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,25.2,0.0,90,1466957739,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,68,68.0,13927,1,0,0,0,,77,0,0,0,,,,,,,,,,,\n79,\"2016-06-26 09:16:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,25.1,0.0,90,1466957795,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,68,68.0,13927,1,0,0,0,,78,0,0,0,,,,,,,,,,,\n80,\"2016-06-26 09:17:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.99,0,60,40,Engaged,-0.3,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,25.2,0.0,90,1466957857,0.0,None,None,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,68,68.0,13927,1,0,0,0,,79,0,0,0,,,,,,,,,,,\n81,\"2016-06-26 09:18:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466957919,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n82,\"2016-06-26 09:19:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n83,\"2016-06-26 09:20:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n84,\"2016-06-26 09:21:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n85,\"2016-06-26 09:22:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n86,\"2016-06-26 09:23:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n87,\"2016-06-26 09:24:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n88,\"2016-06-26 09:25:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n89,\"2016-06-26 09:26:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n90,\"2016-06-26 09:27:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n91,\"2016-06-26 09:28:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n92,\"2016-06-26 09:29:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n93,\"2016-06-26 09:30:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n94,\"2016-06-26 09:31:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n95,\"2016-06-26 09:32:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n96,\"2016-06-26 09:33:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,True,0,0,0,0,,,,,,,,,,,\n97,\"2016-06-26 09:34:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466958875,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,1,0,0,0,,,,,,,,,,,\n98,\"2016-06-26 09:35:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466958934,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,2,0,0,0,,,,,,,,,,,\n99,\"2016-06-26 09:36:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466958997,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,3,0,0,0,,,,,,,,,,,\n100,\"2016-06-26 09:37:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,None,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959056,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,4,0,0,0,,,,,,,,,,,\n101,\"2016-06-26 09:38:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959115,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,5,0,0,0,,,,,,,,,,,\n102,\"2016-06-26 09:39:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959177,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,6,0,0,0,,,,,,,,,,,\n103,\"2016-06-26 09:40:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959237,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,7,0,0,0,,,,,,,,,,,\n104,\"2016-06-26 09:41:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959293,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,8,0,0,0,,,,,,,,,,,\n105,\"2016-06-26 09:42:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959356,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,9,0,0,0,,,,,,,,,,,\n106,\"2016-06-26 09:43:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959414,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,10,0,0,0,,,,,,,,,,,\n107,\"2016-06-26 09:44:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959477,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,11,0,0,0,,,,,,,,,,,\n108,\"2016-06-26 09:45:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959537,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,12,0,0,0,,,,,,,,,,,\n109,\"2016-06-26 09:46:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959598,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,13,0,0,0,,,,,,,,,,,\n110,\"2016-06-26 09:47:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959653,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,14,0,0,0,,,,,,,,,,,\n111,\"2016-06-26 09:48:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959716,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,15,0,0,0,,,,,,,,,,,\n112,\"2016-06-26 09:49:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959775,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,16,0,0,0,,,,,,,,,,,\n113,\"2016-06-26 09:50:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,-0.2,0,False,<invalid>,59,True,90,None,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959835,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,17,0,0,0,,,,,,,,,,,\n114,\"2016-06-26 09:51:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959894,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,18,0,0,0,,,,,,,,,,,\n115,\"2016-06-26 09:52:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.1,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466959955,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,19,0,0,0,,,,,,,,,,,\n116,\"2016-06-26 09:53:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960014,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,20,0,0,0,,,,,,,,,,,\n117,\"2016-06-26 09:54:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960078,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,21,0,0,0,,,,,,,,,,,\n118,\"2016-06-26 09:55:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960134,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,22,0,0,0,,,,,,,,,,,\n119,\"2016-06-26 09:56:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960196,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,23,0,0,0,,,,,,,,,,,\n120,\"2016-06-26 09:57:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960255,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,24,0,0,0,,,,,,,,,,,\n121,\"2016-06-26 09:58:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960317,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,25,0,0,0,,,,,,,,,,,\n122,\"2016-06-26 09:59:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960376,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,26,0,0,0,,,,,,,,,,,\n123,\"2016-06-26 10:00:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960438,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,27,0,0,0,,,,,,,,,,,\n124,\"2016-06-26 10:01:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960497,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,28,0,0,0,,,,,,,,,,,\n125,\"2016-06-26 10:02:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,-0.2,0,False,<invalid>,59,True,90,None,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960558,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,29,0,0,0,,,,,,,,,,,\n126,\"2016-06-26 10:03:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960612,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,30,0,0,0,,,,,,,,,,,\n127,\"2016-06-26 10:04:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.1,0,False,<invalid>,59,True,90,None,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960675,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,31,0,0,0,,,,,,,,,,,\n128,\"2016-06-26 10:05:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,40,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960731,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,32,0,0,0,,,,,,,,,,,\n129,\"2016-06-26 10:06:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466960795,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n130,\"2016-06-26 10:07:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n131,\"2016-06-26 10:08:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n132,\"2016-06-26 10:09:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n133,\"2016-06-26 10:10:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n134,\"2016-06-26 10:11:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n135,\"2016-06-26 10:12:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n136,\"2016-06-26 10:13:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n137,\"2016-06-26 10:14:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n138,\"2016-06-26 10:15:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n139,\"2016-06-26 10:16:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n140,\"2016-06-26 10:17:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n141,\"2016-06-26 10:18:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n142,\"2016-06-26 10:19:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n143,\"2016-06-26 10:20:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n144,\"2016-06-26 10:21:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,True,0,0,0,0,,,,,,,,,,,\n145,\"2016-06-26 10:22:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.99,0,60,None,Engaged,0.1,0,False,<invalid>,59,True,90,None,59,17.79,True,0,100,194.16,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.5,50,61.5,None,0.0,90,1466961756,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,1,0,0,0,,,,,,,,,,,\n146,\"2016-06-26 10:23:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466961821,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,2,0,0,0,,,,,,,,,,,\n147,\"2016-06-26 10:24:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466961873,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,3,0,0,0,,,,,,,,,,,\n148,\"2016-06-26 10:25:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.69,True,0,100,193.7,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466961935,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,4,0,0,0,,,,,,,,,,,\n149,\"2016-06-26 10:26:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466961993,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,5,0,0,0,,,,,,,,,,,\n150,\"2016-06-26 10:27:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,None,59,17.69,True,0,100,193.7,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962055,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,6,0,0,0,,,,,,,,,,,\n151,\"2016-06-26 10:28:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962112,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,7,0,0,0,,,,,,,,,,,\n152,\"2016-06-26 10:29:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962178,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,8,0,0,0,,,,,,,,,,,\n153,\"2016-06-26 10:30:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962237,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,9,0,0,0,,,,,,,,,,,\n154,\"2016-06-26 10:31:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.69,True,0,100,193.7,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962297,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,10,0,0,0,,,,,,,,,,,\n155,\"2016-06-26 10:32:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962351,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,11,0,0,0,,,,,,,,,,,\n156,\"2016-06-26 10:33:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,None,Engaged,0.1,0,False,<invalid>,59,True,90,None,59,17.69,True,0,100,193.7,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962410,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,12,0,0,0,,,,,,,,,,,\n157,\"2016-06-26 10:34:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962477,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,13,0,0,0,,,,,,,,,,,\n158,\"2016-06-26 10:35:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962534,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,14,0,0,0,,,,,,,,,,,\n159,\"2016-06-26 10:36:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962591,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,15,0,0,0,,,,,,,,,,,\n160,\"2016-06-26 10:37:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962651,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,16,0,0,0,,,,,,,,,,,\n161,\"2016-06-26 10:38:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962718,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,17,0,0,0,,,,,,,,,,,\n162,\"2016-06-26 10:39:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,None,59,17.69,True,0,100,193.7,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962773,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,18,0,0,0,,,,,,,,,,,\n163,\"2016-06-26 10:40:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962832,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,19,0,0,0,,,,,,,,,,,\n164,\"2016-06-26 10:41:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962893,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,20,0,0,0,,,,,,,,,,,\n165,\"2016-06-26 10:42:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.69,True,0,100,193.7,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466962952,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,21,0,0,0,,,,,,,,,,,\n166,\"2016-06-26 10:43:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466963009,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,22,0,0,0,,,,,,,,,,,\n167,\"2016-06-26 10:44:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,None,59,17.69,True,0,100,193.7,False,Complete,False,None,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466963069,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,23,0,0,0,,,,,,,,,,,\n168,\"2016-06-26 10:45:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466963129,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,24,0,0,0,,,,,,,,,,,\n169,\"2016-06-26 10:46:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,None,Engaged,0.1,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466963192,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,25,0,0,0,,,,,,,,,,,\n170,\"2016-06-26 10:47:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,40,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,True,0,100,193.7,False,Complete,False,False,False,1467014400,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466963249,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,26,0,0,0,,,,,,,,,,,\n171,\"2016-06-26 10:48:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,False,None,153.63,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,135.73,0.0,0,40,False,77.0,50,61.0,25.4,0.0,90,1466963311,0.0,None,None,0,0,0,20.3,False,20.3,21.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,False,0,no_error,2.20.30,False,disabled,77,68,70.7,13927,1,0,0,0,,27,0,0,0,,,,,,,,,,,\n172,\"2016-06-26 10:49:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466963373,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,False,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,28,0,0,0,,,,,,,,,,,\n173,\"2016-06-26 10:50:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466963430,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,False,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,29,0,0,0,,,,,,,,,,,\n174,\"2016-06-26 10:51:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,False,False,None,None,None,153.63,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466963492,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,False,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,,30,0,0,0,,,,,,,,,,,\n175,\"2016-06-26 10:52:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,153.63,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,135.73,0.0,0,40,False,77.0,50,61.0,None,0.0,90,1466963551,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,False,0,no_error,2.20.30,False,disabled,None,None,None,13927,1,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n176,\"2016-06-26 10:53:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n177,\"2016-06-26 10:54:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n178,\"2016-06-26 10:55:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n179,\"2016-06-26 10:56:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n180,\"2016-06-26 10:57:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n181,\"2016-06-26 10:58:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n182,\"2016-06-26 10:59:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n183,\"2016-06-26 11:00:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n184,\"2016-06-26 11:01:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n185,\"2016-06-26 11:02:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n186,\"2016-06-26 11:03:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n187,\"2016-06-26 11:04:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n188,\"2016-06-26 11:05:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n189,\"2016-06-26 11:06:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n190,\"2016-06-26 11:07:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,0,0,0,True,0,0,0,0,,,,,,,,,,,\n191,\"2016-06-26 11:08:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,153.63,0,60,0,Engaged,-0.7,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,135.73,0.0,0,40,False,77.0,50,61.0,24.2,0.0,90,1466964513,0.0,None,P,0,0,0,20.3,False,20.3,21.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,1,disabled,closed,True,82420,0,standard,s,Base19,False,2,no_error,2.20.30,False,disabled,75,68,70.7,13927,1,0,0,0,,1,0,0,0,,,,,,,,,,,\n192,\"2016-06-26 11:09:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,153.63,0,60,0,Engaged,-1.3,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,135.73,0.0,0,40,False,77.0,50,61.0,24.5,0.0,90,1466964570,0.0,0,P,0,0,0,20.3,False,20.3,21.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,1,disabled,closed,True,82420,0,standard,s,Base19,False,3,no_error,2.20.30,False,disabled,76,68,70.7,13927,1,0,0,0,,2,0,0,0,,,,,,,,,,,\n193,\"2016-06-26 11:10:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,153.63,0,60,0,Engaged,-1.3,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,135.73,0.0,0,40,False,77.0,50,61.0,24.7,0.0,90,1466964631,0.0,0,P,0,0,0,20.3,False,20.3,21.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13927.07505,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,1,disabled,closed,True,82420,0,standard,s,Base19,False,3,no_error,2.20.30,False,disabled,76,68,70.7,13927,1,0,0,0,,3,0,0,0,,,,,,,,,,,\n194,\"2016-06-26 11:11:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n195,\"2016-06-26 11:12:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,153.63,0,60,0,Engaged,34.4,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,134.99,0.0,0,40,False,77.0,50,61.0,25.9,0.0,90,1466964754,0.0,15,D,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13927.469928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,78,68,68.0,13927,1,0,2,0,,0,0,0,0,,,,,,,,,,,\n196,\"2016-06-26 11:13:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,153.63,0,60,0,Engaged,-18.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,134.99,0.0,0,40,False,77.0,50,61.0,26.6,0.0,1,1466964819,0.0,34,D,0,0,0,20.3,False,20.3,19.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13927.847914,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,79,68,67.1,13927,0,0,2,0,,0,0,1,0,,,,,,,,,,,\n197,\"2016-06-26 11:13:56\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,153.63,0,60,0,Engaged,-50.9,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,134.99,0.0,0,40,False,77.0,50,61.0,26.5,0.0,270,1466964842,0.0,23,D,0,0,0,20.3,False,20.3,19.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.004192,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,79,68,67.1,13928,0,0,2,0,,0,0,1,0,,,,,,,,,,,\n198,\"2016-06-26 11:14:18\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,153.63,0,60,0,Engaged,-8.7,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,134.99,0.0,0,40,False,77.0,50,61.0,26.4,0.0,218,1466964865,0.0,17,D,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.11712,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,79,68,66.92,13928,0,0,2,0,,0,0,1,0,,,,,,,,,,,\n199,\"2016-06-26 11:14:43\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,153.63,0,60,0,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,134.99,0.0,0,40,False,77.0,50,61.0,26.6,0.0,121,1466964890,0.0,9,D,0,0,0,20.3,False,20.3,19.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.208636,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,79,68,66.2,13928,0,0,2,0,,0,0,1,0,,,,,,,,,,,\n200,\"2016-06-26 11:15:06\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,153.63,0,60,0,Engaged,-4.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,134.99,0.0,0,40,False,77.0,50,61.0,26.8,0.0,271,1466964911,0.0,0,R,0,0,0,20.3,False,20.3,19.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,80,68,66.2,13928,0,0,2,0,,0,0,1,0,,,,,,,,,,,\n201,\"2016-06-26 11:15:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.63,0,60,0,Engaged,-0.9,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.7,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,27.0,0.0,270,1466964933,0.0,0,P,0,0,0,20.3,False,20.3,19.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,3,no_error,2.20.30,False,disabled,80,68,66.2,13928,2,0,2,0,,0,0,0,0,,,,,,,,,,,\n202,\"2016-06-26 11:16:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.9,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,27.4,0.0,270,1466964994,0.0,0,P,0,0,0,20.3,False,20.3,19.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,3,no_error,2.20.30,False,disabled,81,68,66.2,13928,2,0,0,0,,1,0,0,0,,,,,,,,,,,\n203,\"2016-06-26 11:17:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965057,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,2,0,0,0,,,,,,,,,,,\n204,\"2016-06-26 11:18:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965116,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,3,0,0,0,,,,,,,,,,,\n205,\"2016-06-26 11:19:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965180,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,4,0,0,0,,,,,,,,,,,\n206,\"2016-06-26 11:20:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965237,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,5,0,0,0,,,,,,,,,,,\n207,\"2016-06-26 11:21:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.69,False,0,100,193.25,False,Disconnected,False,None,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965328,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,6,0,0,0,,,,,,,,,,,\n208,\"2016-06-26 11:22:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,None,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965375,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,7,0,0,0,,,,,,,,,,,\n209,\"2016-06-26 11:23:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965419,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,8,0,0,0,,,,,,,,,,,\n210,\"2016-06-26 11:24:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.69,False,0,100,193.25,False,Disconnected,False,None,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965486,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,9,0,0,0,,,,,,,,,,,\n211,\"2016-06-26 11:25:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965540,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,10,0,0,0,,,,,,,,,,,\n212,\"2016-06-26 11:26:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965601,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,11,0,0,0,,,,,,,,,,,\n213,\"2016-06-26 11:27:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965663,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,12,0,0,0,,,,,,,,,,,\n214,\"2016-06-26 11:28:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.69,False,0,100,193.25,False,Disconnected,False,None,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965735,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,13,0,0,0,,,,,,,,,,,\n215,\"2016-06-26 11:29:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965801,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,14,0,0,0,,,,,,,,,,,\n216,\"2016-06-26 11:31:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965911,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,15,0,0,0,,,,,,,,,,,\n217,\"2016-06-26 11:32:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,None,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466965973,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,16,0,0,0,,,,,,,,,,,\n218,\"2016-06-26 11:33:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966030,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,17,0,0,0,,,,,,,,,,,\n219,\"2016-06-26 11:34:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966090,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,18,0,0,0,,,,,,,,,,,\n220,\"2016-06-26 11:35:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.69,False,0,100,193.25,False,Disconnected,False,None,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966153,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,19,0,0,0,,,,,,,,,,,\n221,\"2016-06-26 11:36:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966204,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,20,0,0,0,,,,,,,,,,,\n222,\"2016-06-26 11:37:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966267,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,21,0,0,0,,,,,,,,,,,\n223,\"2016-06-26 11:38:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966314,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,22,0,0,0,,,,,,,,,,,\n224,\"2016-06-26 11:39:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,None,59,17.69,False,0,100,193.25,False,Disconnected,False,None,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966380,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,23,0,0,0,,,,,,,,,,,\n225,\"2016-06-26 11:40:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966435,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,24,0,0,0,,,,,,,,,,,\n226,\"2016-06-26 11:41:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.69,False,0,100,193.25,False,Disconnected,False,None,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966503,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,25,0,0,0,,,,,,,,,,,\n227,\"2016-06-26 11:42:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966561,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,26,0,0,0,,,,,,,,,,,\n228,\"2016-06-26 11:43:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,-0.1,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966647,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,27,0,0,0,,,,,,,,,,,\n229,\"2016-06-26 11:44:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966679,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,28,0,0,0,,,,,,,,,,,\n230,\"2016-06-26 11:45:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,None,Engaged,0.0,0,False,<invalid>,59,True,90,None,59,17.69,False,0,100,193.25,False,Disconnected,False,None,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966740,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,29,0,0,0,,,,,,,,,,,\n231,\"2016-06-26 11:46:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966799,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,,30,0,0,0,,,,,,,,,,,\n232,\"2016-06-26 11:47:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,153.26,0,60,0,Engaged,0.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,None,0.0,270,1466966866,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13928,2,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n233,\"2016-06-26 11:48:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n234,\"2016-06-26 11:49:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n235,\"2016-06-26 11:50:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n236,\"2016-06-26 11:51:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n237,\"2016-06-26 11:52:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n238,\"2016-06-26 11:53:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n239,\"2016-06-26 11:54:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n240,\"2016-06-26 11:55:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n241,\"2016-06-26 11:56:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n242,\"2016-06-26 11:57:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n243,\"2016-06-26 11:58:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n244,\"2016-06-26 11:59:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n245,\"2016-06-26 12:00:38\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n246,\"2016-06-26 12:01:47\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n247,\"2016-06-26 12:02:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,0,0,0,True,0,0,0,0,,,,,,,,,,,\n248,\"2016-06-26 12:03:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,33.2,0.0,270,1466967823,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,91,68,73.4,13928,2,0,0,0,,1,0,0,0,,,,,,,,,,,\n249,\"2016-06-26 12:04:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,33.1,0.0,270,1466967887,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,91,68,73.4,13928,2,0,0,0,,2,0,0,0,,,,,,,,,,,\n250,\"2016-06-26 12:05:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,33.1,0.0,270,1466967932,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,91,68,73.4,13928,2,0,0,0,,3,0,0,0,,,,,,,,,,,\n251,\"2016-06-26 12:06:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,135.22,0.0,0,40,False,77.0,50,61.0,33.1,0.0,270,1466968003,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,91,68,73.4,13928,2,0,0,0,,4,0,0,0,,,,,,,,,,,\n252,\"2016-06-26 12:07:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.1,0.0,270,1466968061,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,91,68,73.4,13928,2,0,0,0,,5,0,0,0,,,,,,,,,,,\n253,\"2016-06-26 12:08:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.1,0.0,270,1466968113,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,91,68,73.4,13928,2,0,0,0,,6,0,0,0,,,,,,,,,,,\n254,\"2016-06-26 12:09:25\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.2,0.0,270,1466968175,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,91,68,73.4,13928,2,0,0,0,,7,0,0,0,,,,,,,,,,,\n255,\"2016-06-26 12:10:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.2,0.0,270,1466968232,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,91,68,73.4,13928,2,0,0,0,,8,0,0,0,,,,,,,,,,,\n256,\"2016-06-26 12:11:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.5,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.3,0.0,270,1466968297,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,91,68,73.4,13928,2,0,0,0,,9,0,0,0,,,,,,,,,,,\n257,\"2016-06-26 12:12:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.3,0.0,270,1466968351,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,91,68,73.4,13928,2,0,0,0,,10,0,0,0,,,,,,,,,,,\n258,\"2016-06-26 12:13:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.5,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.3,0.0,270,1466968416,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,91,68,73.4,13928,2,0,0,0,,11,0,0,0,,,,,,,,,,,\n259,\"2016-06-26 12:14:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.4,0.0,270,1466968471,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,92,68,73.4,13928,2,0,0,0,,12,0,0,0,,,,,,,,,,,\n260,\"2016-06-26 12:15:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.4,0.0,270,1466968536,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,92,68,73.4,13928,2,0,0,0,,13,0,0,0,,,,,,,,,,,\n261,\"2016-06-26 12:16:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.4,0.0,270,1466968600,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,92,68,73.4,13928,2,0,0,0,,14,0,0,0,,,,,,,,,,,\n262,\"2016-06-26 12:17:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.6,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.4,0.0,270,1466968662,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,92,68,73.4,13928,2,0,0,0,,15,0,0,0,,,,,,,,,,,\n263,\"2016-06-26 12:18:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.8,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,33.9,0.0,270,1466968717,0.0,None,P,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,75,None,1,3,0,0,Black,1,disabled,unknown,True,82420,0,standard,s,Base19,False,2,no_error,2.20.30,False,disabled,93,68,73.4,13928,2,0,0,0,,16,0,0,0,,,,,,,,,,,\n264,\"2016-06-26 12:19:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.8,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,30.9,0.0,270,1466968795,0.0,None,P,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,75,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,False,2,no_error,2.20.30,False,disabled,87,68,73.4,13928,2,0,0,0,,17,0,0,0,,,,,,,,,,,\n265,\"2016-06-26 12:20:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.7,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,30.6,0.0,270,1466968846,0.0,None,P,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,75,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,False,2,no_error,2.20.30,False,disabled,87,68,73.4,13928,2,0,0,0,,18,0,0,0,,,,,,,,,,,\n266,\"2016-06-26 12:21:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,153.26,0,60,0,Engaged,-0.8,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,193.25,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,30.1,0.0,270,1466968896,0.0,None,P,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.218645,False,0,False,None,P1,False,True,0,75,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,False,2,no_error,2.20.30,False,disabled,86,68,73.4,13928,2,0,0,0,,19,0,0,0,,,,,,,,,,,\n267,\"2016-06-26 12:22:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,152.9,0,60,0,Engaged,-18.2,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,192.79,False,Disconnected,False,False,False,None,134.9,0.0,0,40,False,77.0,50,61.0,29.9,0.0,317,1466968956,0.0,10,D,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.249089,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,85,68,73.4,13928,2,0,3,0,,0,0,0,0,,,,,,,,,,,\n268,\"2016-06-26 12:23:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,152.9,0,60,0,Engaged,-22.0,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,192.79,False,Disconnected,False,False,False,None,133.33,0.0,0,40,False,77.0,50,61.0,30.8,0.0,86,1466969022,0.0,20,D,0,0,0,20.3,False,20.3,21.3,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.514934,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,87,68,70.34,13928,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n269,\"2016-06-26 12:24:02\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,152.54,0,60,0,Engaged,-42.3,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,192.33,False,Disconnected,False,False,False,None,131.77,0.0,0,40,False,77.0,50,61.0,30.9,0.0,27,1466969050,0.0,23,D,0,0,0,20.3,False,20.3,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.668856,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,87,68,69.8,13928,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n270,\"2016-06-26 12:24:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,152.54,0,60,0,Engaged,-2.4,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,192.33,False,Disconnected,False,False,False,None,130.52,0.0,0,40,False,77.0,50,61.0,31.0,0.0,29,1466969075,0.0,0,D,0,0,0,20.3,False,20.3,20.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.668856,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,87,68,68.9,13928,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n271,\"2016-06-26 12:24:57\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,152.54,0,60,0,Engaged,-3.1,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,192.33,False,Disconnected,False,False,False,None,129.24,0.0,0,40,False,77.0,50,61.0,30.8,0.0,31,1466969106,0.0,22,D,0,0,0,20.3,False,20.3,20.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.814784,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,87,68,68.9,13928,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n272,\"2016-06-26 12:25:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,152.18,0,60,0,Engaged,-6.3,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,191.87,False,Disconnected,False,False,False,None,126.91,0.0,0,40,False,77.0,50,61.0,30.8,0.0,33,1466969132,0.0,13,D,0,0,0,20.3,False,20.3,20.3,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13928.907331,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,87,68,68.54,13928,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n273,\"2016-06-26 12:25:52\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,152.18,0,60,0,Engaged,-3.2,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,191.87,False,Disconnected,False,False,False,None,126.91,0.0,0,40,False,77.0,50,61.0,30.8,0.0,31,1466969170,0.0,16,D,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13929.072659,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,87,68,68.0,13929,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n274,\"2016-06-26 12:26:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,152.18,0,60,0,Engaged,-0.5,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,191.87,False,Disconnected,False,False,False,None,126.91,0.0,0,40,False,77.0,50,61.0,30.8,0.0,31,1466969197,0.0,10,D,0,0,0,20.3,False,20.3,19.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13929.154714,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,87,68,67.1,13929,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n275,\"2016-06-26 12:26:55\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,151.81,0,60,0,Engaged,17.9,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,191.42,False,Disconnected,False,False,False,None,126.91,0.0,0,40,False,77.0,50,61.0,30.7,0.0,112,1466969223,0.0,7,D,0,0,0,20.3,False,20.3,19.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13929.269175,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,87,68,67.1,13929,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n276,\"2016-06-26 12:27:21\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,151.81,0,60,0,Engaged,-24.4,0,False,<invalid>,59,True,90,False,59,17.69,False,0,100,191.42,False,Disconnected,False,False,False,None,130.63,0.0,0,40,False,77.0,50,61.0,30.6,0.0,210,1466969249,0.0,23,D,0,0,0,20.3,False,20.3,19.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13929.468434,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,87,68,67.1,13929,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n277,\"2016-06-26 12:27:52\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,151.45,0,60,0,Engaged,-20.1,0,False,<invalid>,58,True,90,False,59,17.69,False,0,100,190.96,False,Disconnected,False,False,False,None,130.63,0.0,0,40,False,77.0,50,61.0,30.5,0.0,231,1466969283,0.0,12,D,0,0,0,20.3,False,20.3,19.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13929.623806,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,86,68,67.1,13929,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n278,\"2016-06-26 12:28:22\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,151.45,0,60,0,Engaged,14.9,0,False,<invalid>,58,True,90,False,58,17.69,False,0,100,190.96,False,Disconnected,False,False,False,None,129.3,0.0,0,40,False,77.0,50,61.0,30.5,0.0,300,1466969309,0.0,2,D,0,0,0,20.3,False,20.3,19.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13929.706275,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,86,68,67.1,13929,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n279,\"2016-06-26 12:28:48\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,151.45,0,60,0,Engaged,-2.3,0,False,<invalid>,58,True,90,False,58,17.69,False,0,100,190.96,False,Disconnected,False,False,False,None,129.3,0.0,0,40,False,77.0,50,61.0,30.2,0.0,244,1466969338,0.0,0,D,0,0,0,20.3,False,20.3,19.8,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13929.716459,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,86,68,67.64,13929,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n280,\"2016-06-26 12:29:16\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,151.45,0,60,0,Engaged,-18.4,0,False,<invalid>,58,True,90,False,58,17.69,False,0,100,190.96,False,Disconnected,False,False,False,None,129.3,0.0,0,40,False,77.0,50,61.0,30.0,0.0,209,1466969379,0.0,4,D,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13929.859411,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,86,68,68.0,13929,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n281,\"2016-06-26 12:29:58\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,151.45,0,60,0,Engaged,-1.0,0,False,<invalid>,58,True,90,False,58,17.69,False,0,100,190.96,False,Disconnected,False,False,False,None,129.3,0.0,0,40,False,77.0,50,61.0,29.8,0.0,209,1466969406,0.0,0,D,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13929.879456,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,85,68,68.0,13929,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n282,\"2016-06-26 12:30:24\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,151.09,0,60,0,Engaged,30.6,0,False,<invalid>,58,True,90,False,58,17.69,False,0,100,190.5,False,Disconnected,False,False,False,None,128.78,0.0,0,40,False,77.0,50,61.0,29.8,0.0,209,1466969430,0.0,21,D,0,0,0,20.3,False,20.3,20.1,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13929.994173,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,85,68,68.18,13929,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n283,\"2016-06-26 12:30:45\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,151.09,0,60,0,Engaged,-30.2,0,False,<invalid>,58,True,90,False,58,17.69,False,0,100,190.5,False,Disconnected,False,False,False,None,128.78,0.0,0,40,False,77.0,50,61.0,29.9,0.0,180,1466969449,0.0,36,D,0,0,0,20.3,False,20.3,20.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13930.149492,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,85,68,68.0,13930,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n284,\"2016-06-26 12:31:06\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,150.72,0,60,0,Engaged,-22.5,0,False,<invalid>,58,True,90,False,58,17.69,False,0,100,190.04,False,Disconnected,False,False,False,None,128.78,0.0,0,40,False,77.0,50,61.0,30.2,0.0,180,1466969470,0.0,36,D,0,0,0,20.3,False,20.3,20.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13930.373475,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,86,68,68.9,13930,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n285,\"2016-06-26 12:31:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,150.36,0,60,0,Engaged,55.3,0,False,<invalid>,58,True,90,False,58,17.69,False,0,100,189.58,False,Disconnected,False,False,False,None,131.92,0.0,0,40,False,77.0,50,61.0,30.4,0.0,270,1466969494,0.0,24,D,0,0,0,20.3,True,20.3,20.5,0,False,0,False,0,5,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13930.568728,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,86,68,68.9,13930,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n286,\"2016-06-26 12:31:50\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,150.0,0,60,0,Engaged,-54.6,0,False,<invalid>,58,True,90,False,58,17.69,False,0,100,189.13,False,Disconnected,False,False,False,None,131.92,0.0,0,40,False,77.0,50,61.0,28.4,0.0,304,1466969527,0.0,26,D,0,0,0,20.3,True,20.3,20.5,0,False,0,False,0,5,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13930.848717,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,83,68,68.9,13930,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n287,\"2016-06-26 12:32:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,149.27,0,60,0,Engaged,-47.8,0,False,<invalid>,58,True,90,False,58,17.69,False,0,100,188.21,False,Disconnected,False,False,False,None,130.41,0.0,0,40,False,77.0,50,61.0,25.0,0.0,174,1466969560,0.0,19,D,0,0,0,20.3,True,20.3,20.0,0,False,0,False,0,5,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13930.992173,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,77,68,68.0,13930,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n288,\"2016-06-26 12:33:00\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,148.91,0,60,0,Engaged,-28.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.75,False,Disconnected,False,False,False,None,128.2,0.0,0,40,False,77.0,50,61.0,23.4,0.0,181,1466969587,0.0,19,D,0,0,0,20.3,True,20.3,19.6,0,False,0,False,0,5,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13931.127648,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,74,68,67.28,13931,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n289,\"2016-06-26 12:33:25\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,148.54,0,60,0,Engaged,32.8,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,128.2,0.0,0,40,False,77.0,50,61.0,22.4,0.0,90,1466969611,0.0,18,D,0,0,0,20.3,True,20.3,19.1,0,False,0,False,0,5,3,0,kW,False,F,Rated,mi/hr,1,False,True,False,True,None,0,13931.261559,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,72,68,66.38,13931,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n290,\"2016-06-26 12:33:47\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,148.54,0,60,0,Engaged,-19.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,128.2,0.0,0,40,False,77.0,50,61.0,21.6,0.0,271,1466969634,0.0,2,D,0,0,0,20.3,True,20.3,19.0,0,False,0,False,0,5,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,True,4,no_error,2.20.30,False,disabled,70,68,66.2,13931,0,0,3,0,,0,0,1,0,,,,,,,,,,,\n291,\"2016-06-26 12:34:09\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,False,None,148.54,0,60,0,Engaged,-5.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,128.2,0.0,0,40,False,77.0,50,61.0,21.2,0.0,268,1466969658,0.0,0,P,0,0,0,20.3,True,20.3,19.4,0,False,0,False,0,4,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,1,disabled,closed,True,82420,0,standard,s,Base19,False,3,no_error,2.20.30,False,disabled,70,68,66.92,13931,3,0,3,0,,0,0,0,0,,,,,,,,,,,\n292,\"2016-06-26 12:34:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-3.8,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,21.0,0.0,268,1466969675,0.0,None,P,0,0,0,20.3,True,20.3,19.4,0,False,0,False,0,4,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,1,disabled,closed,True,82420,0,standard,s,Base19,False,2,no_error,2.20.30,False,disabled,69,68,66.92,13931,3,0,0,0,,1,0,0,0,,,,,,,,,,,\n293,\"2016-06-26 12:35:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,23.2,0.0,268,1466969730,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,73,68,66.92,13931,3,0,0,0,,2,0,0,0,,,,,,,,,,,\n294,\"2016-06-26 12:36:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.6,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,25.4,0.0,268,1466969789,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,68,66.92,13931,3,0,0,0,,3,0,0,0,,,,,,,,,,,\n295,\"2016-06-26 12:37:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,27.0,0.0,268,1466969848,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,80,68,66.92,13931,3,0,0,0,,4,0,0,0,,,,,,,,,,,\n296,\"2016-06-26 12:38:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,27.9,0.0,268,1466969911,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,5,0,0,0,,,,,,,,,,,\n297,\"2016-06-26 12:39:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.3,0.0,268,1466969973,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,6,0,0,0,,,,,,,,,,,\n298,\"2016-06-26 12:40:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.6,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.5,0.0,268,1466970028,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,83,68,66.92,13931,3,0,0,0,,7,0,0,0,,,,,,,,,,,\n299,\"2016-06-26 12:41:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.7,0.0,268,1466970088,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,83,68,66.92,13931,3,0,0,0,,8,0,0,0,,,,,,,,,,,\n300,\"2016-06-26 12:42:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.7,0.0,268,1466970152,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,83,68,66.92,13931,3,0,0,0,,9,0,0,0,,,,,,,,,,,\n301,\"2016-06-26 12:43:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.8,0.0,268,1466970210,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,83,68,66.92,13931,3,0,0,0,,10,0,0,0,,,,,,,,,,,\n302,\"2016-06-26 12:44:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.7,0.0,268,1466970271,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,83,68,66.92,13931,3,0,0,0,,11,0,0,0,,,,,,,,,,,\n303,\"2016-06-26 12:45:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.5,0.0,268,1466970333,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,83,68,66.92,13931,3,0,0,0,,12,0,0,0,,,,,,,,,,,\n304,\"2016-06-26 12:46:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.6,0.0,268,1466970393,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,83,68,66.92,13931,3,0,0,0,,13,0,0,0,,,,,,,,,,,\n305,\"2016-06-26 12:47:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.6,0.0,268,1466970451,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,83,68,66.92,13931,3,0,0,0,,14,0,0,0,,,,,,,,,,,\n306,\"2016-06-26 12:48:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.5,0.0,268,1466970511,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,83,68,66.92,13931,3,0,0,0,,15,0,0,0,,,,,,,,,,,\n307,\"2016-06-26 12:49:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.5,0.0,268,1466970573,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,83,68,66.92,13931,3,0,0,0,,16,0,0,0,,,,,,,,,,,\n308,\"2016-06-26 12:50:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.6,0.0,268,1466970635,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,83,68,66.92,13931,3,0,0,0,,17,0,0,0,,,,,,,,,,,\n309,\"2016-06-26 12:51:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.3,0.0,268,1466970694,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,18,0,0,0,,,,,,,,,,,\n310,\"2016-06-26 12:52:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.3,0.0,268,1466970756,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,19,0,0,0,,,,,,,,,,,\n311,\"2016-06-26 12:53:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.3,0.0,268,1466970812,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,20,0,0,0,,,,,,,,,,,\n312,\"2016-06-26 12:54:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.3,0.0,268,1466970872,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,21,0,0,0,,,,,,,,,,,\n313,\"2016-06-26 12:55:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.3,0.0,268,1466970931,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,22,0,0,0,,,,,,,,,,,\n314,\"2016-06-26 12:56:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.2,0.0,268,1466970993,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,23,0,0,0,,,,,,,,,,,\n315,\"2016-06-26 12:57:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.2,0.0,268,1466971052,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,24,0,0,0,,,,,,,,,,,\n316,\"2016-06-26 12:58:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.2,0.0,268,1466971112,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,25,0,0,0,,,,,,,,,,,\n317,\"2016-06-26 12:59:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.2,0.0,268,1466971174,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,26,0,0,0,,,,,,,,,,,\n318,\"2016-06-26 13:00:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.2,0.0,268,1466971239,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,27,0,0,0,,,,,,,,,,,\n319,\"2016-06-26 13:02:42\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n320,\"2016-06-26 13:03:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.1,0.0,268,1466971440,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,82,68,66.92,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n321,\"2016-06-26 13:04:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.1,0.0,268,1466971479,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,1,0,0,0,,,,,,,,,,,\n322,\"2016-06-26 13:05:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.1,0.0,268,1466971539,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,2,0,0,0,,,,,,,,,,,\n323,\"2016-06-26 13:06:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.54,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,187.29,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.1,0.0,268,1466971601,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,3,0,0,0,,,,,,,,,,,\n324,\"2016-06-26 13:07:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.1,0.0,268,1466971655,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,4,0,0,0,,,,,,,,,,,\n325,\"2016-06-26 13:08:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.1,0.0,268,1466971718,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,5,0,0,0,,,,,,,,,,,\n326,\"2016-06-26 13:09:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.1,0.0,268,1466971776,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,6,0,0,0,,,,,,,,,,,\n327,\"2016-06-26 13:10:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,130.22,0.0,0,40,False,77.0,50,61.0,28.1,0.0,268,1466971844,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,7,0,0,0,,,,,,,,,,,\n328,\"2016-06-26 13:11:42\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.1,0.0,268,1466971906,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,8,0,0,0,,,,,,,,,,,\n329,\"2016-06-26 13:12:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.1,0.0,268,1466971956,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,9,0,0,0,,,,,,,,,,,\n330,\"2016-06-26 13:13:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972014,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,10,0,0,0,,,,,,,,,,,\n331,\"2016-06-26 13:14:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972075,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,11,0,0,0,,,,,,,,,,,\n332,\"2016-06-26 13:15:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972134,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,12,0,0,0,,,,,,,,,,,\n333,\"2016-06-26 13:16:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972197,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,13,0,0,0,,,,,,,,,,,\n334,\"2016-06-26 13:17:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.5,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972253,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,14,0,0,0,,,,,,,,,,,\n335,\"2016-06-26 13:18:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972318,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,15,0,0,0,,,,,,,,,,,\n336,\"2016-06-26 13:19:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972376,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,16,0,0,0,,,,,,,,,,,\n337,\"2016-06-26 13:20:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972432,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,17,0,0,0,,,,,,,,,,,\n338,\"2016-06-26 13:21:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972494,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,18,0,0,0,,,,,,,,,,,\n339,\"2016-06-26 13:22:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972555,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,19,0,0,0,,,,,,,,,,,\n340,\"2016-06-26 13:23:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972614,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,20,0,0,0,,,,,,,,,,,\n341,\"2016-06-26 13:24:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972674,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,21,0,0,0,,,,,,,,,,,\n342,\"2016-06-26 13:25:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972734,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,22,0,0,0,,,,,,,,,,,\n343,\"2016-06-26 13:26:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972793,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,23,0,0,0,,,,,,,,,,,\n344,\"2016-06-26 13:27:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972854,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,24,0,0,0,,,,,,,,,,,\n345,\"2016-06-26 13:28:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972916,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,25,0,0,0,,,,,,,,,,,\n346,\"2016-06-26 13:29:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466972973,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,26,0,0,0,,,,,,,,,,,\n347,\"2016-06-26 13:30:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973033,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,27,0,0,0,,,,,,,,,,,\n348,\"2016-06-26 13:31:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973095,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,28,0,0,0,,,,,,,,,,,\n349,\"2016-06-26 13:32:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.18,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.84,False,Disconnected,False,False,False,None,129.9,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973154,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,29,0,0,0,,,,,,,,,,,\n350,\"2016-06-26 13:33:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.17,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.82,False,Disconnected,False,False,False,None,129.89,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973211,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,30,0,0,0,,,,,,,,,,,\n351,\"2016-06-26 13:34:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.17,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.82,False,Disconnected,False,False,False,None,129.89,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973270,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,31,0,0,0,,,,,,,,,,,\n352,\"2016-06-26 13:35:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.17,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.82,False,Disconnected,False,False,False,None,129.89,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973332,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,32,0,0,0,,,,,,,,,,,\n353,\"2016-06-26 13:36:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.17,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.82,False,Disconnected,False,False,False,None,129.89,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973393,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,33,0,0,0,,,,,,,,,,,\n354,\"2016-06-26 13:37:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.17,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.82,False,Disconnected,False,False,False,None,129.89,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973452,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,34,0,0,0,,,,,,,,,,,\n355,\"2016-06-26 13:38:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.17,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.82,False,Disconnected,False,False,False,None,129.89,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973514,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,35,0,0,0,,,,,,,,,,,\n356,\"2016-06-26 13:39:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.17,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.82,False,Disconnected,False,False,False,None,129.89,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973574,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,36,0,0,0,,,,,,,,,,,\n357,\"2016-06-26 13:40:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.17,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.82,False,Disconnected,False,False,False,None,129.89,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973635,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,37,0,0,0,,,,,,,,,,,\n358,\"2016-06-26 13:41:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.16,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.81,False,Disconnected,False,False,False,None,129.88,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973697,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,38,0,0,0,,,,,,,,,,,\n359,\"2016-06-26 13:42:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.8,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.35,False,Disconnected,False,False,False,None,129.88,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973752,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,39,0,0,0,,,,,,,,,,,\n360,\"2016-06-26 13:43:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.8,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.35,False,Disconnected,False,False,False,None,129.56,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973813,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,40,0,0,0,,,,,,,,,,,\n361,\"2016-06-26 13:44:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,148.16,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.81,False,Disconnected,False,False,False,None,129.88,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973871,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,41,0,0,0,,,,,,,,,,,\n362,\"2016-06-26 13:45:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.8,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.35,False,Disconnected,False,False,False,None,129.56,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973933,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,42,0,0,0,,,,,,,,,,,\n363,\"2016-06-26 13:46:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.8,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.35,False,Disconnected,False,False,False,None,129.56,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466973990,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,43,0,0,0,,,,,,,,,,,\n364,\"2016-06-26 13:47:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.8,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.35,False,Disconnected,False,False,False,None,129.56,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974053,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,44,0,0,0,,,,,,,,,,,\n365,\"2016-06-26 13:48:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.81,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.36,False,Disconnected,False,False,False,None,129.57,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974115,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,45,0,0,0,,,,,,,,,,,\n366,\"2016-06-26 13:49:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.44,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.91,False,Disconnected,False,False,False,None,129.57,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974174,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,46,0,0,0,,,,,,,,,,,\n367,\"2016-06-26 13:50:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.8,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.35,False,Disconnected,False,False,False,None,129.56,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974234,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,47,0,0,0,,,,,,,,,,,\n368,\"2016-06-26 13:51:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.44,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.91,False,Disconnected,False,False,False,None,129.25,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974294,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,48,0,0,0,,,,,,,,,,,\n369,\"2016-06-26 13:52:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.8,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,186.35,False,Disconnected,False,False,False,None,129.56,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974356,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,49,0,0,0,,,,,,,,,,,\n370,\"2016-06-26 13:53:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.44,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.91,False,Disconnected,False,False,False,None,129.25,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974414,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,50,0,0,0,,,,,,,,,,,\n371,\"2016-06-26 13:54:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.44,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.91,False,Disconnected,False,False,False,None,129.25,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974475,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,51,0,0,0,,,,,,,,,,,\n372,\"2016-06-26 13:55:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.43,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.89,False,Disconnected,False,False,False,None,129.24,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974535,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,52,0,0,0,,,,,,,,,,,\n373,\"2016-06-26 13:56:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.43,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.89,False,Disconnected,False,False,False,None,129.24,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974591,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,53,0,0,0,,,,,,,,,,,\n374,\"2016-06-26 13:57:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.43,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.89,False,Disconnected,False,False,False,None,129.24,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974653,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,54,0,0,0,,,,,,,,,,,\n375,\"2016-06-26 13:58:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.43,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.89,False,Disconnected,False,False,False,None,129.24,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974710,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,55,0,0,0,,,,,,,,,,,\n376,\"2016-06-26 13:59:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.43,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.89,False,Disconnected,False,False,False,None,129.24,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974778,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,56,0,0,0,,,,,,,,,,,\n377,\"2016-06-26 14:00:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.43,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.89,False,Disconnected,False,False,False,None,129.24,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974832,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,57,0,0,0,,,,,,,,,,,\n378,\"2016-06-26 14:01:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.43,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.89,False,Disconnected,False,False,False,None,129.24,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974898,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,58,0,0,0,,,,,,,,,,,\n379,\"2016-06-26 14:02:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.44,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.91,False,Disconnected,False,False,False,None,129.25,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466974964,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,59,0,0,0,,,,,,,,,,,\n380,\"2016-06-26 14:03:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.43,0,60,0,Engaged,-0.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.89,False,Disconnected,False,False,False,None,129.24,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466975016,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,60,0,0,0,,,,,,,,,,,\n381,\"2016-06-26 14:04:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.08,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.45,False,Disconnected,False,False,False,None,129.25,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466975073,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,61,0,0,0,,,,,,,,,,,\n382,\"2016-06-26 14:05:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.43,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.89,False,Disconnected,False,False,False,None,129.24,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466975132,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,62,0,0,0,,,,,,,,,,,\n383,\"2016-06-26 14:06:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.08,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.45,False,Disconnected,False,False,False,None,128.93,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466975192,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,63,0,0,0,,,,,,,,,,,\n384,\"2016-06-26 14:07:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.08,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.45,False,Disconnected,False,False,False,None,128.93,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466975252,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,64,0,0,0,,,,,,,,,,,\n385,\"2016-06-26 14:08:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,147.07,0,60,0,Engaged,-0.3,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,28.0,0.0,268,1466975309,0.0,None,None,0,0,0,20.3,False,20.3,19.4,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,66.92,13931,3,0,0,0,,65,0,0,0,,,,,,,,,,,\n386,\"2016-06-26 14:09:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466975375,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,66,0,0,0,,,,,,,,,,,\n387,\"2016-06-26 14:10:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466975431,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n388,\"2016-06-26 14:11:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n389,\"2016-06-26 14:12:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n390,\"2016-06-26 14:13:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n391,\"2016-06-26 14:14:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n392,\"2016-06-26 14:15:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n393,\"2016-06-26 14:16:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n394,\"2016-06-26 14:17:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n395,\"2016-06-26 14:18:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n396,\"2016-06-26 14:19:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n397,\"2016-06-26 14:20:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n398,\"2016-06-26 14:21:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n399,\"2016-06-26 14:22:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n400,\"2016-06-26 14:23:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n401,\"2016-06-26 14:24:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n402,\"2016-06-26 14:25:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,True,0,0,0,0,,,,,,,,,,,\n403,\"2016-06-26 14:26:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,129.56,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466976394,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,1,0,0,0,,,,,,,,,,,\n404,\"2016-06-26 14:27:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466976453,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,2,0,0,0,,,,,,,,,,,\n405,\"2016-06-26 14:28:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466976513,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,3,0,0,0,,,,,,,,,,,\n406,\"2016-06-26 14:29:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466976574,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,4,0,0,0,,,,,,,,,,,\n407,\"2016-06-26 14:30:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466976629,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,5,0,0,0,,,,,,,,,,,\n408,\"2016-06-26 14:31:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.1,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466976690,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,6,0,0,0,,,,,,,,,,,\n409,\"2016-06-26 14:32:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466976752,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,7,0,0,0,,,,,,,,,,,\n410,\"2016-06-26 14:33:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466976810,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,8,0,0,0,,,,,,,,,,,\n411,\"2016-06-26 14:34:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466976870,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,9,0,0,0,,,,,,,,,,,\n412,\"2016-06-26 14:35:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,None,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466976937,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,10,0,0,0,,,,,,,,,,,\n413,\"2016-06-26 14:36:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466976990,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,11,0,0,0,,,,,,,,,,,\n414,\"2016-06-26 14:37:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,-0.2,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977056,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,12,0,0,0,,,,,,,,,,,\n415,\"2016-06-26 14:38:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977115,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,13,0,0,0,,,,,,,,,,,\n416,\"2016-06-26 14:39:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977175,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,14,0,0,0,,,,,,,,,,,\n417,\"2016-06-26 14:40:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977236,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,15,0,0,0,,,,,,,,,,,\n418,\"2016-06-26 14:41:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,-0.2,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977295,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,16,0,0,0,,,,,,,,,,,\n419,\"2016-06-26 14:42:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977351,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,17,0,0,0,,,,,,,,,,,\n420,\"2016-06-26 14:43:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977412,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,18,0,0,0,,,,,,,,,,,\n421,\"2016-06-26 14:44:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977471,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,19,0,0,0,,,,,,,,,,,\n422,\"2016-06-26 14:45:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,-0.2,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977534,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,20,0,0,0,,,,,,,,,,,\n423,\"2016-06-26 14:46:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977591,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,21,0,0,0,,,,,,,,,,,\n424,\"2016-06-26 14:47:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977653,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,22,0,0,0,,,,,,,,,,,\n425,\"2016-06-26 14:48:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977712,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,23,0,0,0,,,,,,,,,,,\n426,\"2016-06-26 14:49:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977768,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,24,0,0,0,,,,,,,,,,,\n427,\"2016-06-26 14:50:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977830,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,25,0,0,0,,,,,,,,,,,\n428,\"2016-06-26 14:51:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977891,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,26,0,0,0,,,,,,,,,,,\n429,\"2016-06-26 14:52:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,-0.1,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466977952,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,27,0,0,0,,,,,,,,,,,\n430,\"2016-06-26 14:53:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466978009,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,28,0,0,0,,,,,,,,,,,\n431,\"2016-06-26 14:54:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466978068,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,29,0,0,0,,,,,,,,,,,\n432,\"2016-06-26 14:55:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466978132,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,30,0,0,0,,,,,,,,,,,\n433,\"2016-06-26 14:56:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466978190,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n434,\"2016-06-26 14:57:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n435,\"2016-06-26 14:58:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n436,\"2016-06-26 14:59:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n437,\"2016-06-26 15:00:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n438,\"2016-06-26 15:01:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n439,\"2016-06-26 15:02:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n440,\"2016-06-26 15:03:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n441,\"2016-06-26 15:04:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n442,\"2016-06-26 15:05:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n443,\"2016-06-26 15:06:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n444,\"2016-06-26 15:07:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n445,\"2016-06-26 15:08:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n446,\"2016-06-26 15:09:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n447,\"2016-06-26 15:10:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n448,\"2016-06-26 15:11:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,True,0,0,0,0,,,,,,,,,,,\n449,\"2016-06-26 15:12:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.1,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979153,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,1,0,0,0,,,,,,,,,,,\n450,\"2016-06-26 15:13:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979211,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,2,0,0,0,,,,,,,,,,,\n451,\"2016-06-26 15:14:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979272,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,3,0,0,0,,,,,,,,,,,\n452,\"2016-06-26 15:15:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,None,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979335,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,4,0,0,0,,,,,,,,,,,\n453,\"2016-06-26 15:16:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979396,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,5,0,0,0,,,,,,,,,,,\n454,\"2016-06-26 15:17:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979456,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,6,0,0,0,,,,,,,,,,,\n455,\"2016-06-26 15:18:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979512,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,7,0,0,0,,,,,,,,,,,\n456,\"2016-06-26 15:19:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979574,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,8,0,0,0,,,,,,,,,,,\n457,\"2016-06-26 15:20:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979635,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,9,0,0,0,,,,,,,,,,,\n458,\"2016-06-26 15:21:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979696,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,10,0,0,0,,,,,,,,,,,\n459,\"2016-06-26 15:22:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979755,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,11,0,0,0,,,,,,,,,,,\n460,\"2016-06-26 15:23:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979815,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,12,0,0,0,,,,,,,,,,,\n461,\"2016-06-26 15:24:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979873,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,13,0,0,0,,,,,,,,,,,\n462,\"2016-06-26 15:25:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979935,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,14,0,0,0,,,,,,,,,,,\n463,\"2016-06-26 15:26:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466979995,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,15,0,0,0,,,,,,,,,,,\n464,\"2016-06-26 15:27:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980057,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,16,0,0,0,,,,,,,,,,,\n465,\"2016-06-26 15:28:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980115,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,17,0,0,0,,,,,,,,,,,\n466,\"2016-06-26 15:29:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980176,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,18,0,0,0,,,,,,,,,,,\n467,\"2016-06-26 15:30:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980234,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,19,0,0,0,,,,,,,,,,,\n468,\"2016-06-26 15:31:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,-0.1,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980296,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,20,0,0,0,,,,,,,,,,,\n469,\"2016-06-26 15:32:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980357,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,21,0,0,0,,,,,,,,,,,\n470,\"2016-06-26 15:33:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980415,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,22,0,0,0,,,,,,,,,,,\n471,\"2016-06-26 15:34:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980473,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,23,0,0,0,,,,,,,,,,,\n472,\"2016-06-26 15:35:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,-0.2,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980540,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,24,0,0,0,,,,,,,,,,,\n473,\"2016-06-26 15:36:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980595,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,25,0,0,0,,,,,,,,,,,\n474,\"2016-06-26 15:37:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,None,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980656,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,26,0,0,0,,,,,,,,,,,\n475,\"2016-06-26 15:38:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980716,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,27,0,0,0,,,,,,,,,,,\n476,\"2016-06-26 15:39:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980776,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,28,0,0,0,,,,,,,,,,,\n477,\"2016-06-26 15:40:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980835,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,29,0,0,0,,,,,,,,,,,\n478,\"2016-06-26 15:41:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,None,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980897,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,30,0,0,0,,,,,,,,,,,\n479,\"2016-06-26 15:42:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466980956,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n480,\"2016-06-26 15:43:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n481,\"2016-06-26 15:44:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n482,\"2016-06-26 15:45:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n483,\"2016-06-26 15:46:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n484,\"2016-06-26 15:47:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n485,\"2016-06-26 15:48:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n486,\"2016-06-26 15:49:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n487,\"2016-06-26 15:50:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n488,\"2016-06-26 15:51:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n489,\"2016-06-26 15:52:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n490,\"2016-06-26 15:53:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n491,\"2016-06-26 15:54:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n492,\"2016-06-26 15:55:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n493,\"2016-06-26 15:56:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n494,\"2016-06-26 15:57:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0,0,True,0,0,0,0,,,,,,,,,,,\n495,\"2016-06-26 15:58:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,0.2,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,129.56,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466981914,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,1,0,0,0,,,,,,,,,,,\n496,\"2016-06-26 15:59:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466981976,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,2,0,0,0,,,,,,,,,,,\n497,\"2016-06-26 16:00:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466982037,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,3,0,0,0,,,,,,,,,,,\n498,\"2016-06-26 16:01:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,None,Engaged,-0.1,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466982093,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,4,0,0,0,,,,,,,,,,,\n499,\"2016-06-26 16:02:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,147.07,0,60,0,Engaged,0.0,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,None,0.0,268,1466982154,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,3,0,0,0,,5,0,0,0,,,,,,,,,,,\n500,\"2016-06-26 16:03:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,147.07,0,60,0,Engaged,-1.4,0,False,<invalid>,57,True,90,False,57,17.69,False,0,100,185.44,False,Disconnected,False,False,False,None,128.92,0.0,0,40,False,77.0,50,61.0,27.8,0.0,268,1466982212,0.0,0,P,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,1,disabled,closed,True,82420,0,standard,s,Base19,False,3,no_error,2.20.30,False,disabled,82,68,74.3,13931,3,0,0,0,,6,0,0,0,,,,,,,,,,,\n501,\"2016-06-26 16:04:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.25,40,True,False,1,False,None,147.07,4,70,40,Engaged,9.0,16,False,<invalid>,57,True,90,False,57,0.0,True,0,100,185.44,False,Charging,False,False,False,None,128.92,10.7,239,40,False,0.0,50,0.0,27.0,0.0,268,1466982273,0.0,None,P,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,1,disabled,closed,True,82420,0,standard,s,Base19,False,2,no_error,2.20.30,False,disabled,80,68,74.3,13931,3,0,0,2,,0,0,0,0,,,,,,,,,,,\n502,\"2016-06-26 16:05:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.17,40,True,False,1,False,None,147.43,9,70,40,Engaged,23.3,40,False,<invalid>,57,True,90,False,57,0.11,True,0,100,185.89,False,Charging,False,False,False,None,129.24,25.3,235,40,False,0.5,50,0.5,26.8,0.0,268,1466982336,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,80,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n503,\"2016-06-26 16:06:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.17,40,True,False,1,False,None,148.16,9,70,40,Engaged,23.4,40,False,<invalid>,57,True,90,False,57,0.32,True,0,100,186.81,False,Charging,False,False,False,None,129.88,27.2,235,40,False,1.5,50,1.0,27.5,0.0,268,1466982394,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n504,\"2016-06-26 16:07:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.17,40,True,False,1,False,None,148.52,9,70,40,Engaged,23.2,40,False,<invalid>,57,True,90,False,57,0.42,True,0,100,187.27,False,Charging,False,False,False,None,130.2,27.9,235,40,False,2.0,50,1.5,27.6,0.0,268,1466982454,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n505,\"2016-06-26 16:08:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.08,40,True,False,1,False,None,148.89,9,70,40,Engaged,23.2,40,False,<invalid>,57,True,90,False,57,0.53,True,0,100,187.72,False,Charging,False,False,False,None,130.84,28.3,235,40,False,2.5,50,2.0,27.6,0.0,268,1466982514,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n506,\"2016-06-26 16:09:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.08,40,True,False,1,False,None,149.61,9,70,40,Engaged,23.3,39,False,<invalid>,58,True,90,False,58,0.74,True,0,100,188.64,False,Charging,False,False,False,None,131.16,28.5,235,40,False,3.0,50,2.5,27.6,0.0,268,1466982575,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n507,\"2016-06-26 16:10:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.08,40,True,False,1,False,None,149.97,9,70,40,Engaged,23.1,40,False,<invalid>,58,True,90,False,58,0.84,True,0,100,189.1,False,Charging,False,False,False,None,131.48,28.7,235,40,False,3.5,50,3.0,27.9,0.0,268,1466982633,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n508,\"2016-06-26 16:11:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.08,40,True,False,1,False,None,150.7,9,70,40,Engaged,23.0,40,False,<invalid>,58,True,90,False,58,1.05,True,0,100,190.01,False,Charging,False,False,False,None,132.12,28.8,236,40,False,4.5,50,3.5,28.0,0.0,268,1466982693,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n509,\"2016-06-26 16:12:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.08,40,True,False,1,False,None,151.06,9,70,40,Engaged,23.1,39,False,<invalid>,58,True,90,False,58,1.16,True,0,100,190.47,False,Charging,False,False,False,None,132.44,28.9,235,40,False,5.0,50,4.0,27.9,0.0,268,1466982754,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n510,\"2016-06-26 16:13:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.0,40,True,False,1,False,None,151.43,9,70,40,Engaged,23.0,40,False,<invalid>,58,True,90,False,58,1.26,True,0,100,190.93,False,Charging,False,False,False,None,133.08,28.9,235,40,False,5.5,50,4.5,27.9,0.0,268,1466982816,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n511,\"2016-06-26 16:14:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.0,40,True,False,1,False,None,152.15,9,70,40,Engaged,23.1,40,False,<invalid>,59,True,90,False,59,1.47,True,0,100,191.85,False,Charging,False,False,False,None,133.4,29.0,235,40,False,6.5,50,5.0,27.9,0.0,268,1466982876,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n512,\"2016-06-26 16:15:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.0,40,True,False,1,False,None,152.52,9,70,40,Engaged,23.3,39,False,<invalid>,59,True,90,False,59,1.58,True,0,100,192.3,False,Charging,False,False,False,None,133.72,29.0,234,40,False,7.0,50,5.5,27.9,0.0,268,1466982932,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n513,\"2016-06-26 16:16:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.0,40,True,False,1,False,None,153.24,9,70,40,Engaged,23.1,39,False,<invalid>,59,True,90,False,59,1.79,True,0,100,193.22,False,Charging,False,False,False,None,134.36,29.1,235,40,False,8.0,50,6.0,27.9,0.0,268,1466982993,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n514,\"2016-06-26 16:17:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,1.0,40,True,False,1,False,None,153.61,9,70,40,Engaged,23.1,40,False,<invalid>,59,True,90,False,59,1.9,True,0,100,193.68,False,Charging,False,False,False,None,134.68,29.1,236,40,False,8.0,50,6.5,27.9,0.0,268,1466983055,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n515,\"2016-06-26 16:18:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.92,40,True,False,1,False,None,153.97,9,70,40,Engaged,23.1,40,False,<invalid>,59,True,90,False,59,2.0,True,0,100,194.13,False,Charging,False,False,False,None,134.99,29.1,236,40,False,8.5,50,7.0,27.9,0.0,268,1466983117,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n516,\"2016-06-26 16:19:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.92,40,True,False,1,False,None,154.69,9,70,40,Engaged,23.1,39,False,<invalid>,59,True,90,False,59,2.21,True,0,100,195.05,False,Charging,False,False,False,None,135.63,29.2,234,40,False,9.5,50,7.5,27.9,0.0,268,1466983172,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n517,\"2016-06-26 16:20:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.92,40,True,False,1,False,None,155.06,9,70,40,Engaged,23.0,40,False,<invalid>,60,True,90,False,60,2.32,True,0,100,195.51,False,Charging,False,False,False,None,135.95,29.2,236,40,False,10.0,50,8.0,27.9,0.0,268,1466983235,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n518,\"2016-06-26 16:21:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.92,40,True,False,1,False,None,155.42,9,70,40,Engaged,22.9,40,False,<invalid>,60,True,90,False,60,2.42,True,0,100,195.97,False,Charging,False,False,False,None,136.27,29.2,235,40,False,10.5,50,8.5,27.9,0.0,268,1466983292,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n519,\"2016-06-26 16:22:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.92,40,True,False,1,False,None,156.15,9,70,40,Engaged,23.2,39,False,<invalid>,60,True,90,False,60,2.63,True,0,100,196.88,False,Charging,False,False,False,None,136.91,29.2,234,40,False,11.5,50,9.0,27.9,0.0,268,1466983354,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n520,\"2016-06-26 16:23:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.83,40,True,False,1,False,None,156.51,9,70,40,Engaged,23.2,39,False,<invalid>,60,True,90,False,60,2.74,True,0,100,197.34,False,Charging,False,False,False,None,137.23,29.2,236,40,False,12.0,50,9.5,27.9,0.0,268,1466983416,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n521,\"2016-06-26 16:24:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.83,40,True,False,1,False,None,157.24,9,70,40,Engaged,23.0,39,False,<invalid>,60,True,90,False,60,2.95,True,0,100,198.26,False,Charging,False,False,False,None,137.87,29.3,235,40,False,13.0,50,10.0,27.8,0.0,268,1466983474,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n522,\"2016-06-26 16:25:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.83,40,True,False,1,False,None,157.6,9,70,40,Engaged,21.1,40,False,<invalid>,61,True,90,False,61,3.05,True,0,100,198.71,False,Charging,False,False,False,None,138.19,29.3,235,40,False,13.5,50,10.5,27.8,0.0,268,1466983532,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n523,\"2016-06-26 16:26:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.92,40,True,False,1,False,None,157.96,9,70,40,Engaged,20.1,39,False,<invalid>,61,True,90,False,61,3.16,True,0,100,199.17,False,Charging,False,False,False,None,138.51,29.1,234,40,False,13.5,50,11.0,27.8,0.0,268,1466983593,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n524,\"2016-06-26 16:27:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.92,40,True,False,1,False,None,158.33,9,70,40,Engaged,19.6,39,False,<invalid>,61,True,90,False,61,3.26,True,0,100,199.63,False,Charging,False,False,False,None,138.83,29.0,233,40,False,14.0,50,11.5,27.9,0.0,268,1466983653,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n525,\"2016-06-26 16:28:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.92,40,True,False,1,False,None,159.05,9,70,40,Engaged,23.0,39,False,<invalid>,61,True,90,False,61,3.48,True,0,100,200.54,False,Charging,False,False,False,None,139.47,28.9,234,40,False,15.0,50,12.0,27.9,0.0,268,1466983715,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n526,\"2016-06-26 16:29:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.83,40,True,False,1,False,None,159.42,9,70,40,Engaged,22.8,39,False,<invalid>,61,True,90,False,61,3.58,True,0,100,201.0,False,Charging,False,False,False,None,139.79,28.9,234,40,False,15.5,50,12.5,27.9,0.0,268,1466983776,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n527,\"2016-06-26 16:30:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.75,40,True,False,1,False,None,159.78,9,70,40,Engaged,22.8,40,False,<invalid>,61,True,90,False,62,3.69,True,0,100,201.46,False,Charging,False,False,False,None,140.11,28.9,234,40,False,16.0,50,12.5,27.3,0.0,268,1466983831,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n528,\"2016-06-26 16:31:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.75,40,True,False,1,False,None,160.5,9,70,40,Engaged,23.0,40,False,<invalid>,62,True,90,False,62,3.9,True,0,100,202.38,False,Charging,False,False,False,None,140.75,28.9,235,40,False,17.0,50,13.5,27.1,0.0,268,1466983894,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,80,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n529,\"2016-06-26 16:32:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.75,40,True,False,1,False,None,160.87,9,70,40,Engaged,23.0,39,False,<invalid>,62,True,90,False,62,4.0,True,0,100,202.83,False,Charging,False,False,False,None,141.07,28.9,235,40,False,17.5,50,14.0,26.9,0.0,268,1466983955,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,80,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n530,\"2016-06-26 16:33:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.75,40,True,False,1,False,None,161.59,9,70,40,Engaged,23.0,40,False,<invalid>,62,True,90,False,62,4.21,True,0,100,203.75,False,Charging,False,False,False,None,141.39,29.0,234,40,False,18.5,50,14.5,27.2,0.0,268,1466984012,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,80,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n531,\"2016-06-26 16:34:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.67,40,True,False,1,False,None,161.96,9,70,40,Engaged,23.0,40,False,<invalid>,62,True,90,False,62,4.32,True,0,100,204.21,False,Charging,False,False,False,None,142.03,29.0,235,40,False,19.0,50,15.0,27.3,0.0,268,1466984075,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n532,\"2016-06-26 16:35:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.67,40,True,False,1,False,None,162.32,9,70,40,Engaged,23.1,39,False,<invalid>,62,True,90,False,63,4.42,True,0,100,204.66,False,Charging,False,False,False,None,142.35,29.0,235,40,False,19.0,50,15.5,27.7,0.0,268,1466984132,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n533,\"2016-06-26 16:36:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.67,40,True,False,1,False,None,163.05,9,70,40,Engaged,23.1,39,False,<invalid>,63,True,90,False,63,4.63,True,0,100,205.58,False,Charging,False,False,False,None,142.99,29.0,234,40,False,20.0,50,16.0,27.8,0.0,268,1466984202,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n534,\"2016-06-26 16:37:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.67,40,True,False,1,False,None,163.41,9,70,40,Engaged,23.2,39,False,<invalid>,63,True,90,False,63,4.74,True,0,100,206.04,False,Charging,False,False,False,None,143.31,29.0,235,40,False,20.5,50,16.5,27.9,0.0,268,1466984260,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n535,\"2016-06-26 16:38:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.67,40,True,False,1,False,None,163.77,9,70,40,Engaged,23.1,40,False,<invalid>,63,True,90,False,63,4.84,True,0,100,206.5,False,Charging,False,False,False,None,143.63,29.1,235,40,False,21.0,50,16.5,27.9,0.0,268,1466984313,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n536,\"2016-06-26 16:39:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.58,40,True,False,1,False,None,164.5,9,70,40,Engaged,23.1,39,False,<invalid>,63,True,90,False,63,5.05,True,0,100,207.41,False,Charging,False,False,False,None,144.27,29.1,234,40,False,22.0,50,17.5,27.9,0.0,268,1466984375,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n537,\"2016-06-26 16:40:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.58,40,True,False,1,False,None,164.86,9,70,40,Engaged,22.9,40,False,<invalid>,63,True,90,False,64,5.16,True,0,100,207.87,False,Charging,False,False,False,None,144.59,29.1,234,40,False,22.5,50,18.0,27.9,0.0,268,1466984437,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n538,\"2016-06-26 16:41:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.58,40,True,False,1,False,None,165.59,9,70,40,Engaged,23.0,40,False,<invalid>,64,True,90,False,64,5.37,True,0,100,208.79,False,Charging,False,False,False,None,145.23,29.1,234,40,False,23.5,50,18.5,27.9,0.0,268,1466984493,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n539,\"2016-06-26 16:42:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.58,40,True,False,1,False,None,165.95,9,70,40,Engaged,23.1,40,False,<invalid>,64,True,90,False,64,5.48,True,0,100,209.24,False,Charging,False,False,False,None,145.55,29.1,234,40,False,24.0,50,19.0,27.9,0.0,268,1466984552,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n540,\"2016-06-26 16:43:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.58,40,True,False,1,False,None,166.31,9,70,40,Engaged,23.0,39,False,<invalid>,64,True,90,False,64,5.58,True,0,100,209.7,False,Charging,False,False,False,None,145.87,29.1,234,40,False,24.5,50,19.0,28.0,0.0,268,1466984613,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n541,\"2016-06-26 16:44:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.5,40,True,False,1,False,None,167.04,9,70,40,Engaged,22.8,39,False,<invalid>,64,True,90,False,64,5.79,True,0,100,210.62,False,Charging,False,False,False,None,146.51,29.1,233,40,False,25.0,50,20.0,28.0,0.0,268,1466984673,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n542,\"2016-06-26 16:45:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.5,40,True,False,1,False,None,167.4,9,70,40,Engaged,22.9,39,False,<invalid>,64,True,90,False,65,5.9,True,0,100,211.07,False,Charging,False,False,False,None,146.83,29.2,235,40,False,25.5,50,20.5,27.9,0.0,268,1466984732,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n543,\"2016-06-26 16:46:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.5,40,True,False,1,False,None,168.13,9,70,40,Engaged,23.0,39,False,<invalid>,65,True,90,False,65,6.11,True,0,100,211.99,False,Charging,False,False,False,None,147.15,29.2,235,40,False,26.5,50,21.0,28.0,0.0,268,1466984789,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n544,\"2016-06-26 16:47:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.5,40,True,False,1,False,None,168.49,9,70,40,Engaged,23.0,39,False,<invalid>,65,True,90,False,65,6.21,True,0,100,212.45,False,Charging,False,False,False,None,147.79,29.2,235,40,False,27.0,50,21.5,27.9,0.0,268,1466984853,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n545,\"2016-06-26 16:48:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.5,40,True,False,1,False,None,169.22,9,70,40,Engaged,22.7,40,False,<invalid>,65,True,90,False,65,6.42,True,0,100,213.36,False,Charging,False,False,False,None,148.11,29.2,234,40,False,28.0,50,22.0,28.0,0.0,268,1466984910,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n546,\"2016-06-26 16:49:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.42,40,True,False,1,False,None,169.58,9,70,40,Engaged,22.8,39,False,<invalid>,65,True,90,False,65,6.53,True,0,100,213.82,False,Charging,False,False,False,None,148.75,29.2,234,40,False,28.5,50,22.5,28.0,0.0,268,1466984971,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n547,\"2016-06-26 16:50:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.42,40,True,False,1,False,None,169.95,9,70,40,Engaged,22.9,40,False,<invalid>,65,True,90,False,66,6.63,True,0,100,214.28,False,Charging,False,False,False,None,149.07,29.2,234,40,False,29.0,50,23.0,28.0,0.0,268,1466985034,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n548,\"2016-06-26 16:51:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.42,40,True,False,1,False,None,170.67,9,70,40,Engaged,22.9,40,False,<invalid>,66,True,90,False,66,6.84,True,0,100,215.2,False,Charging,False,False,False,None,149.71,29.2,233,40,False,30.0,50,23.5,27.9,0.0,268,1466985091,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n549,\"2016-06-26 16:52:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.42,40,True,False,1,False,None,171.04,9,70,40,Engaged,22.7,40,False,<invalid>,66,True,90,False,66,6.95,True,0,100,215.65,False,Charging,False,False,False,None,150.03,29.2,234,40,False,30.0,50,24.0,28.0,0.0,268,1466985151,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n550,\"2016-06-26 16:53:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.42,40,True,False,1,False,None,171.4,9,70,40,Engaged,22.7,39,False,<invalid>,66,True,90,False,66,7.06,True,0,100,216.11,False,Charging,False,False,False,None,150.35,29.2,234,40,False,30.5,50,24.5,28.0,0.0,268,1466985211,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n551,\"2016-06-26 16:54:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.33,40,True,False,1,False,None,172.12,9,70,40,Engaged,23.0,39,False,<invalid>,66,True,90,False,66,7.27,True,0,100,217.03,False,Charging,False,False,False,None,150.99,29.2,233,40,False,31.5,50,25.0,28.0,0.0,268,1466985271,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n552,\"2016-06-26 16:55:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.33,40,True,False,1,False,None,172.49,9,70,40,Engaged,22.9,40,False,<invalid>,66,True,90,False,66,7.37,True,0,100,217.48,False,Charging,False,False,False,None,151.31,29.3,234,40,False,32.0,50,25.5,28.0,0.0,268,1466985333,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n553,\"2016-06-26 16:56:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.33,40,True,False,1,False,None,173.21,9,70,40,Engaged,22.9,40,False,<invalid>,67,True,90,False,67,7.58,True,0,100,218.4,False,Charging,False,False,False,None,151.63,29.3,234,40,False,33.0,50,26.0,27.9,0.0,268,1466985392,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n554,\"2016-06-26 16:57:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.33,40,True,False,1,False,None,173.58,9,70,40,Engaged,22.8,39,False,<invalid>,67,True,90,False,67,7.69,True,0,100,218.86,False,Charging,False,False,False,None,152.27,29.3,233,40,False,33.5,50,26.5,28.0,0.0,268,1466985454,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n555,\"2016-06-26 16:58:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.33,40,True,False,1,False,None,173.94,9,70,40,Engaged,22.9,39,False,<invalid>,67,True,90,False,67,7.79,True,0,100,219.32,False,Charging,False,False,False,None,152.59,29.3,233,40,False,34.0,50,27.0,28.0,0.0,268,1466985511,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n556,\"2016-06-26 16:59:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.25,40,True,False,1,False,None,174.67,9,70,40,Engaged,22.8,39,False,<invalid>,67,True,90,False,67,8.0,True,0,100,220.23,False,Charging,False,False,False,None,153.23,29.3,233,40,False,35.0,50,27.5,28.0,0.0,268,1466985573,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n557,\"2016-06-26 17:00:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.25,40,True,False,1,False,None,175.03,9,70,40,Engaged,23.0,40,False,<invalid>,67,True,90,False,67,8.11,True,0,100,220.69,False,Charging,False,False,False,None,153.55,29.3,234,40,False,35.5,50,28.0,28.0,0.0,268,1466985633,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n558,\"2016-06-26 17:01:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.25,40,True,False,1,False,None,175.76,9,70,40,Engaged,22.8,40,False,<invalid>,68,True,90,False,68,8.32,True,0,100,221.61,False,Charging,False,False,False,None,153.87,29.3,234,40,False,36.0,50,28.5,28.0,0.0,268,1466985694,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n559,\"2016-06-26 17:02:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.25,40,True,False,1,False,None,176.12,9,70,40,Engaged,22.8,40,False,<invalid>,68,True,90,False,68,8.42,True,0,100,222.06,False,Charging,False,False,False,None,154.51,29.3,234,40,False,36.5,50,29.0,28.0,0.0,268,1466985755,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n560,\"2016-06-26 17:03:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.25,40,True,False,1,False,None,176.48,9,70,40,Engaged,22.8,40,False,<invalid>,68,True,90,False,68,8.53,True,0,100,222.52,False,Charging,False,False,False,None,154.83,29.3,234,40,False,37.0,50,29.5,28.0,0.0,268,1466985814,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n561,\"2016-06-26 17:04:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.17,40,True,False,1,False,None,177.21,9,70,40,Engaged,22.9,40,False,<invalid>,68,True,90,False,68,8.74,True,0,100,223.44,False,Charging,False,False,False,None,155.47,29.3,234,40,False,38.0,50,30.0,28.0,0.0,268,1466985877,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n562,\"2016-06-26 17:05:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.17,40,True,False,1,False,None,177.57,9,70,40,Engaged,22.7,40,False,<invalid>,68,True,90,False,68,8.85,True,0,100,223.89,False,Charging,False,False,False,None,155.79,29.3,234,40,False,38.5,50,30.5,28.0,0.0,268,1466985938,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n563,\"2016-06-26 17:06:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.17,40,True,False,1,False,None,178.3,9,70,40,Engaged,22.6,40,False,<invalid>,69,True,90,False,69,9.06,True,0,100,224.81,False,Charging,False,False,False,None,156.43,29.3,233,40,False,39.5,50,31.0,28.0,0.0,268,1466985995,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n564,\"2016-06-26 17:07:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.17,40,True,False,1,False,None,178.66,9,70,40,Engaged,22.9,39,False,<invalid>,69,True,90,False,69,9.16,True,0,100,225.27,False,Charging,False,False,False,None,156.75,29.3,234,40,False,40.0,50,31.5,28.0,0.0,268,1466986057,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n565,\"2016-06-26 17:08:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.17,40,True,False,1,False,None,179.02,9,70,40,Engaged,23.0,39,False,<invalid>,69,True,90,False,69,9.27,True,0,100,225.73,False,Charging,False,False,False,None,157.07,29.3,233,40,False,40.5,50,32.0,28.0,0.0,268,1466986112,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n566,\"2016-06-26 17:09:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.08,40,True,False,1,False,None,179.75,9,70,40,Engaged,22.7,39,False,<invalid>,69,True,90,False,69,9.48,True,0,100,226.64,False,Charging,False,False,False,None,157.71,29.3,233,40,False,41.0,50,32.5,28.0,0.0,268,1466986172,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n567,\"2016-06-26 17:10:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.08,40,True,False,1,False,None,180.11,9,70,40,Engaged,22.8,40,False,<invalid>,69,True,90,False,69,9.58,True,0,100,227.1,False,Charging,False,False,False,None,158.03,29.4,233,40,False,41.5,50,33.0,28.0,0.0,268,1466986232,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n568,\"2016-06-26 17:11:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.08,40,True,False,1,False,None,180.84,9,70,40,Engaged,22.7,40,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Charging,False,False,False,None,158.35,29.4,233,40,False,42.5,50,34.0,28.0,0.0,268,1466986293,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n569,\"2016-06-26 17:12:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.08,40,True,False,1,False,None,181.2,9,70,40,Engaged,22.8,40,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Charging,False,False,False,None,158.99,29.4,234,40,False,43.0,50,34.0,28.0,0.0,268,1466986351,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n570,\"2016-06-26 17:13:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.08,40,True,False,1,False,None,181.57,9,70,40,Engaged,22.9,40,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Charging,False,False,False,None,159.31,29.4,234,40,False,43.5,50,34.5,28.0,0.0,268,1466986412,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,0,0,0,2,,0,0,0,0,,,,,,,,,,,\n571,\"2016-06-26 17:14:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466986474,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,2,,0,0,0,0,,,,,,,,,,,\n572,\"2016-06-26 17:15:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466986533,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,1,0,0,0,,,,,,,,,,,\n573,\"2016-06-26 17:16:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,181.93,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466986593,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,2,0,0,0,,,,,,,,,,,\n574,\"2016-06-26 17:17:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466986657,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,3,0,0,0,,,,,,,,,,,\n575,\"2016-06-26 17:18:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466986711,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,4,0,0,0,,,,,,,,,,,\n576,\"2016-06-26 17:19:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,36,True,False,None,False,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,29.0,0.0,268,1466986773,0.0,None,P,0,0,0,20.3,False,20.3,24.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,2,0,None,1,3,0,0,Black,0,disabled,closed,True,82420,0,standard,s,Base19,False,2,no_error,2.20.30,False,disabled,84,68,76.1,13931,4,0,0,0,,5,0,0,0,,,,,,,,,,,\n577,\"2016-06-26 17:20:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466986832,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,6,0,0,0,,,,,,,,,,,\n578,\"2016-06-26 17:21:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466986894,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,7,0,0,0,,,,,,,,,,,\n579,\"2016-06-26 17:22:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466986952,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,8,0,0,0,,,,,,,,,,,\n580,\"2016-06-26 17:23:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987012,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,9,0,0,0,,,,,,,,,,,\n581,\"2016-06-26 17:24:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.21,True,0,100,229.85,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987070,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,10,0,0,0,,,,,,,,,,,\n582,\"2016-06-26 17:25:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987133,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,11,0,0,0,,,,,,,,,,,\n583,\"2016-06-26 17:26:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987188,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,12,0,0,0,,,,,,,,,,,\n584,\"2016-06-26 17:27:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987250,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,13,0,0,0,,,,,,,,,,,\n585,\"2016-06-26 17:28:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987310,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,14,0,0,0,,,,,,,,,,,\n586,\"2016-06-26 17:29:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,10.21,True,0,100,229.85,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987372,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,15,0,0,0,,,,,,,,,,,\n587,\"2016-06-26 17:30:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987431,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,16,0,0,0,,,,,,,,,,,\n588,\"2016-06-26 17:31:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.21,True,0,100,229.85,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987493,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,17,0,0,0,,,,,,,,,,,\n589,\"2016-06-26 17:32:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987550,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,18,0,0,0,,,,,,,,,,,\n590,\"2016-06-26 17:33:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987613,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,19,0,0,0,,,,,,,,,,,\n591,\"2016-06-26 17:34:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987672,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,20,0,0,0,,,,,,,,,,,\n592,\"2016-06-26 17:35:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.21,True,0,100,229.85,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987733,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,21,0,0,0,,,,,,,,,,,\n593,\"2016-06-26 17:36:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987790,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,22,0,0,0,,,,,,,,,,,\n594,\"2016-06-26 17:37:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.21,True,0,100,229.85,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987855,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,23,0,0,0,,,,,,,,,,,\n595,\"2016-06-26 17:38:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987909,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,24,0,0,0,,,,,,,,,,,\n596,\"2016-06-26 17:39:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466987973,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,25,0,0,0,,,,,,,,,,,\n597,\"2016-06-26 17:40:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466988031,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,26,0,0,0,,,,,,,,,,,\n598,\"2016-06-26 17:41:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466988090,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,27,0,0,0,,,,,,,,,,,\n599,\"2016-06-26 17:42:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466988148,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,28,0,0,0,,,,,,,,,,,\n600,\"2016-06-26 17:43:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.21,True,0,100,229.85,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466988211,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,29,0,0,0,,,,,,,,,,,\n601,\"2016-06-26 17:44:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466988271,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,30,0,0,0,,,,,,,,,,,\n602,\"2016-06-26 17:45:50\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.2,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466988372,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,31,0,0,0,,,,,,,,,,,\n603,\"2016-06-26 17:46:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.21,True,0,100,229.85,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466988399,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n604,\"2016-06-26 17:47:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n605,\"2016-06-26 17:48:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n606,\"2016-06-26 17:49:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n607,\"2016-06-26 17:50:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n608,\"2016-06-26 17:51:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n609,\"2016-06-26 17:52:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n610,\"2016-06-26 17:53:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n611,\"2016-06-26 17:54:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n612,\"2016-06-26 17:55:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n613,\"2016-06-26 17:56:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n614,\"2016-06-26 17:57:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n615,\"2016-06-26 17:58:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n616,\"2016-06-26 17:59:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n617,\"2016-06-26 18:00:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n618,\"2016-06-26 18:01:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,True,0,0,0,0,,,,,,,,,,,\n619,\"2016-06-26 18:02:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,182.29,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.21,True,0,100,229.85,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.5,50,35.0,None,0.0,268,1466989349,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,1,0,0,0,,,,,,,,,,,\n620,\"2016-06-26 18:03:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466989410,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,2,0,0,0,,,,,,,,,,,\n621,\"2016-06-26 18:04:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466989472,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,3,0,0,0,,,,,,,,,,,\n622,\"2016-06-26 18:05:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466989532,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,4,0,0,0,,,,,,,,,,,\n623,\"2016-06-26 18:06:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466989591,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,5,0,0,0,,,,,,,,,,,\n624,\"2016-06-26 18:07:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466989654,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,6,0,0,0,,,,,,,,,,,\n625,\"2016-06-26 18:08:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466989714,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,7,0,0,0,,,,,,,,,,,\n626,\"2016-06-26 18:09:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466989772,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,8,0,0,0,,,,,,,,,,,\n627,\"2016-06-26 18:10:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466989834,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,9,0,0,0,,,,,,,,,,,\n628,\"2016-06-26 18:11:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466989892,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,10,0,0,0,,,,,,,,,,,\n629,\"2016-06-26 18:12:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466989956,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,11,0,0,0,,,,,,,,,,,\n630,\"2016-06-26 18:13:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990014,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,12,0,0,0,,,,,,,,,,,\n631,\"2016-06-26 18:14:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990072,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,13,0,0,0,,,,,,,,,,,\n632,\"2016-06-26 18:15:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990133,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,14,0,0,0,,,,,,,,,,,\n633,\"2016-06-26 18:16:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990192,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,15,0,0,0,,,,,,,,,,,\n634,\"2016-06-26 18:17:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990255,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,16,0,0,0,,,,,,,,,,,\n635,\"2016-06-26 18:18:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990313,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,17,0,0,0,,,,,,,,,,,\n636,\"2016-06-26 18:19:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990373,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,32,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,18,0,0,0,,,,,,,,,,,\n637,\"2016-06-26 18:20:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990436,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,19,0,0,0,,,,,,,,,,,\n638,\"2016-06-26 18:21:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990489,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,20,0,0,0,,,,,,,,,,,\n639,\"2016-06-26 18:22:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990551,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,21,0,0,0,,,,,,,,,,,\n640,\"2016-06-26 18:23:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990612,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,22,0,0,0,,,,,,,,,,,\n641,\"2016-06-26 18:24:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990673,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,23,0,0,0,,,,,,,,,,,\n642,\"2016-06-26 18:25:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990732,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,24,0,0,0,,,,,,,,,,,\n643,\"2016-06-26 18:26:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990792,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,25,0,0,0,,,,,,,,,,,\n644,\"2016-06-26 18:27:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990855,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,26,0,0,0,,,,,,,,,,,\n645,\"2016-06-26 18:28:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990910,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,27,0,0,0,,,,,,,,,,,\n646,\"2016-06-26 18:29:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466990974,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,28,0,0,0,,,,,,,,,,,\n647,\"2016-06-26 18:30:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466991032,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,29,0,0,0,,,,,,,,,,,\n648,\"2016-06-26 18:31:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466991091,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,30,0,0,0,,,,,,,,,,,\n649,\"2016-06-26 18:32:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466991151,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n650,\"2016-06-26 18:33:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n651,\"2016-06-26 18:34:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n652,\"2016-06-26 18:35:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n653,\"2016-06-26 18:36:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n654,\"2016-06-26 18:37:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n655,\"2016-06-26 18:38:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n656,\"2016-06-26 18:39:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n657,\"2016-06-26 18:40:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n658,\"2016-06-26 18:41:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n659,\"2016-06-26 18:42:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n660,\"2016-06-26 18:43:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n661,\"2016-06-26 18:44:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n662,\"2016-06-26 18:45:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n663,\"2016-06-26 18:46:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n664,\"2016-06-26 18:47:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,True,0,0,0,0,,,,,,,,,,,\n665,\"2016-06-26 18:48:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992113,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,1,0,0,0,,,,,,,,,,,\n666,\"2016-06-26 18:49:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992173,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,2,0,0,0,,,,,,,,,,,\n667,\"2016-06-26 18:50:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992234,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,3,0,0,0,,,,,,,,,,,\n668,\"2016-06-26 18:51:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992291,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,4,0,0,0,,,,,,,,,,,\n669,\"2016-06-26 18:52:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992352,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,5,0,0,0,,,,,,,,,,,\n670,\"2016-06-26 18:53:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992412,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,6,0,0,0,,,,,,,,,,,\n671,\"2016-06-26 18:54:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992474,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,7,0,0,0,,,,,,,,,,,\n672,\"2016-06-26 18:55:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992533,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,8,0,0,0,,,,,,,,,,,\n673,\"2016-06-26 18:56:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992591,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,9,0,0,0,,,,,,,,,,,\n674,\"2016-06-26 18:57:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992651,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,10,0,0,0,,,,,,,,,,,\n675,\"2016-06-26 18:58:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992712,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,11,0,0,0,,,,,,,,,,,\n676,\"2016-06-26 18:59:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992772,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,12,0,0,0,,,,,,,,,,,\n677,\"2016-06-26 19:00:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466992834,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,13,0,0,0,,,,,,,,,,,\n678,\"2016-06-26 19:02:03\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n679,\"2016-06-26 19:03:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993024,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,1,0,0,0,,,,,,,,,,,\n680,\"2016-06-26 19:04:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993074,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,2,0,0,0,,,,,,,,,,,\n681,\"2016-06-26 19:05:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993135,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,3,0,0,0,,,,,,,,,,,\n682,\"2016-06-26 19:06:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993192,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,4,0,0,0,,,,,,,,,,,\n683,\"2016-06-26 19:07:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993252,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,5,0,0,0,,,,,,,,,,,\n684,\"2016-06-26 19:08:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993312,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,6,0,0,0,,,,,,,,,,,\n685,\"2016-06-26 19:09:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,unknown,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n686,\"2016-06-26 19:10:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,unknown,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n687,\"2016-06-26 19:11:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,unknown,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n688,\"2016-06-26 19:12:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,unknown,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n689,\"2016-06-26 19:13:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,unknown,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n690,\"2016-06-26 19:14:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993672,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,1,0,0,0,,,,,,,,,,,\n691,\"2016-06-26 19:15:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993729,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,2,0,0,0,,,,,,,,,,,\n692,\"2016-06-26 19:16:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993793,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,3,0,0,0,,,,,,,,,,,\n693,\"2016-06-26 19:17:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993852,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,4,0,0,0,,,,,,,,,,,\n694,\"2016-06-26 19:18:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993915,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,5,0,0,0,,,,,,,,,,,\n695,\"2016-06-26 19:19:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,10.11,True,0,100,229.39,False,Complete,False,None,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466993974,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,6,0,0,0,,,,,,,,,,,\n696,\"2016-06-26 19:20:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466994030,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,7,0,0,0,,,,,,,,,,,\n697,\"2016-06-26 19:21:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466994093,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,8,0,0,0,,,,,,,,,,,\n698,\"2016-06-26 19:22:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.93,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,None,0.0,268,1466994152,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,9,0,0,0,,,,,,,,,,,\n699,\"2016-06-26 19:23:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.3,0.0,268,1466994212,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,10,0,0,0,,,,,,,,,,,\n700,\"2016-06-26 19:24:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.7,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.1,0.0,268,1466994273,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,80,68,74.3,13931,4,0,0,0,,11,0,0,0,,,,,,,,,,,\n701,\"2016-06-26 19:25:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.5,0.0,268,1466994333,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,12,0,0,0,,,,,,,,,,,\n702,\"2016-06-26 19:26:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.5,0.0,268,1466994393,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,13,0,0,0,,,,,,,,,,,\n703,\"2016-06-26 19:27:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.5,0.0,268,1466994452,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,14,0,0,0,,,,,,,,,,,\n704,\"2016-06-26 19:28:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.5,0.0,268,1466994513,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,15,0,0,0,,,,,,,,,,,\n705,\"2016-06-26 19:29:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.5,0.0,268,1466994572,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,16,0,0,0,,,,,,,,,,,\n706,\"2016-06-26 19:30:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.5,0.0,268,1466994633,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,17,0,0,0,,,,,,,,,,,\n707,\"2016-06-26 19:31:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.5,0.0,268,1466994693,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,18,0,0,0,,,,,,,,,,,\n708,\"2016-06-26 19:32:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.5,0.0,268,1466994754,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,19,0,0,0,,,,,,,,,,,\n709,\"2016-06-26 19:33:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.5,0.0,268,1466994815,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,20,0,0,0,,,,,,,,,,,\n710,\"2016-06-26 19:34:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.4,0.0,268,1466994874,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,21,0,0,0,,,,,,,,,,,\n711,\"2016-06-26 19:35:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.4,0.0,268,1466994932,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,22,0,0,0,,,,,,,,,,,\n712,\"2016-06-26 19:36:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.5,0.0,268,1466994993,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,23,0,0,0,,,,,,,,,,,\n713,\"2016-06-26 19:37:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.8,0.0,268,1466995054,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,4,0,0,0,,24,0,0,0,,,,,,,,,,,\n714,\"2016-06-26 19:38:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.8,0.0,268,1466995120,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,4,0,0,0,,25,0,0,0,,,,,,,,,,,\n715,\"2016-06-26 19:39:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.8,0.0,268,1466995173,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,4,0,0,0,,26,0,0,0,,,,,,,,,,,\n716,\"2016-06-26 19:40:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.7,0.0,268,1466995232,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,27,0,0,0,,,,,,,,,,,\n717,\"2016-06-26 19:41:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.7,0.0,268,1466995296,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,28,0,0,0,,,,,,,,,,,\n718,\"2016-06-26 19:42:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.63,0.0,0,40,False,44.0,50,35.0,27.7,0.0,268,1466995354,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,29,0,0,0,,,,,,,,,,,\n719,\"2016-06-26 19:43:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.31,0.0,0,40,False,44.0,50,35.0,27.8,0.0,268,1466995415,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,4,0,0,0,,30,0,0,0,,,,,,,,,,,\n720,\"2016-06-26 19:44:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.31,0.0,0,40,False,44.0,50,35.0,27.7,0.0,268,1466995472,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,31,0,0,0,,,,,,,,,,,\n721,\"2016-06-26 19:45:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.31,0.0,0,40,False,44.0,50,35.0,27.7,0.0,268,1466995535,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,32,0,0,0,,,,,,,,,,,\n722,\"2016-06-26 19:46:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.31,0.0,0,40,False,44.0,50,35.0,27.7,0.0,268,1466995591,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,33,0,0,0,,,,,,,,,,,\n723,\"2016-06-26 19:47:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.31,0.0,0,40,False,44.0,50,35.0,27.7,0.0,268,1466995656,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,34,0,0,0,,,,,,,,,,,\n724,\"2016-06-26 19:48:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.31,0.0,0,40,False,44.0,50,35.0,27.7,0.0,268,1466995713,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,35,0,0,0,,,,,,,,,,,\n725,\"2016-06-26 19:49:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.93,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.11,True,0,100,229.39,False,Complete,False,False,False,None,159.31,0.0,0,40,False,44.0,50,35.0,27.7,0.0,268,1466995777,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,36,0,0,0,,,,,,,,,,,\n726,\"2016-06-26 19:50:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466995832,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,37,0,0,0,,,,,,,,,,,\n727,\"2016-06-26 19:51:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466995893,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,38,0,0,0,,,,,,,,,,,\n728,\"2016-06-26 19:52:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.6,0.0,268,1466995953,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,39,0,0,0,,,,,,,,,,,\n729,\"2016-06-26 19:53:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996014,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,40,0,0,0,,,,,,,,,,,\n730,\"2016-06-26 19:54:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996094,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,41,0,0,0,,,,,,,,,,,\n731,\"2016-06-26 19:55:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996131,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,42,0,0,0,,,,,,,,,,,\n732,\"2016-06-26 19:56:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996192,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,43,0,0,0,,,,,,,,,,,\n733,\"2016-06-26 19:57:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996252,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,44,0,0,0,,,,,,,,,,,\n734,\"2016-06-26 19:58:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996314,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,45,0,0,0,,,,,,,,,,,\n735,\"2016-06-26 19:59:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.6,0.0,268,1466996373,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,46,0,0,0,,,,,,,,,,,\n736,\"2016-06-26 20:00:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996433,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,81,68,74.3,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n737,\"2016-06-26 20:01:41\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996528,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,1,0,0,0,,,,,,,,,,,\n738,\"2016-06-26 20:02:26\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996566,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,2,0,0,0,,,,,,,,,,,\n739,\"2016-06-26 20:03:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996619,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,3,0,0,0,,,,,,,,,,,\n740,\"2016-06-26 20:04:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996674,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,4,0,0,0,,,,,,,,,,,\n741,\"2016-06-26 20:05:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996735,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,5,0,0,0,,,,,,,,,,,\n742,\"2016-06-26 20:06:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996793,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,6,0,0,0,,,,,,,,,,,\n743,\"2016-06-26 20:07:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996851,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,7,0,0,0,,,,,,,,,,,\n744,\"2016-06-26 20:08:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996913,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,8,0,0,0,,,,,,,,,,,\n745,\"2016-06-26 20:09:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466996971,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,9,0,0,0,,,,,,,,,,,\n746,\"2016-06-26 20:10:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466997032,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,10,0,0,0,,,,,,,,,,,\n747,\"2016-06-26 20:11:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466997089,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,11,0,0,0,,,,,,,,,,,\n748,\"2016-06-26 20:12:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466997151,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,12,0,0,0,,,,,,,,,,,\n749,\"2016-06-26 20:13:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.8,0.0,268,1466997210,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,4,0,0,0,,13,0,0,0,,,,,,,,,,,\n750,\"2016-06-26 20:14:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.8,0.0,268,1466997272,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,4,0,0,0,,14,0,0,0,,,,,,,,,,,\n751,\"2016-06-26 20:15:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.8,0.0,268,1466997332,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,4,0,0,0,,15,0,0,0,,,,,,,,,,,\n752,\"2016-06-26 20:16:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.8,0.0,268,1466997392,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,4,0,0,0,,16,0,0,0,,,,,,,,,,,\n753,\"2016-06-26 20:17:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,159.31,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466997450,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,17,0,0,0,,,,,,,,,,,\n754,\"2016-06-26 20:18:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466997515,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,18,0,0,0,,,,,,,,,,,\n755,\"2016-06-26 20:19:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466997571,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,19,0,0,0,,,,,,,,,,,\n756,\"2016-06-26 20:20:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466997632,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,20,0,0,0,,,,,,,,,,,\n757,\"2016-06-26 20:21:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466997692,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,21,0,0,0,,,,,,,,,,,\n758,\"2016-06-26 20:22:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.5,50,34.5,27.8,0.0,268,1466997753,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,82,68,74.3,13931,4,0,0,0,,22,0,0,0,,,,,,,,,,,\n759,\"2016-06-26 20:23:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466997810,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,23,0,0,0,,,,,,,,,,,\n760,\"2016-06-26 20:24:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.5,50,34.5,27.7,0.0,268,1466997873,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,24,0,0,0,,,,,,,,,,,\n761,\"2016-06-26 20:25:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.57,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,10.0,True,0,100,228.93,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.5,50,34.5,27.6,0.0,268,1466997931,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,25,0,0,0,,,,,,,,,,,\n762,\"2016-06-26 20:26:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.5,0.0,268,1466997993,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,26,0,0,0,,,,,,,,,,,\n763,\"2016-06-26 20:27:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.6,0.0,268,1466998053,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,27,0,0,0,,,,,,,,,,,\n764,\"2016-06-26 20:28:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.5,0.0,268,1466998114,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,28,0,0,0,,,,,,,,,,,\n765,\"2016-06-26 20:29:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466998171,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,29,0,0,0,,,,,,,,,,,\n766,\"2016-06-26 20:30:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466998231,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,30,0,0,0,,,,,,,,,,,\n767,\"2016-06-26 20:31:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466998290,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,31,0,0,0,,,,,,,,,,,\n768,\"2016-06-26 20:32:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466998353,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,32,0,0,0,,,,,,,,,,,\n769,\"2016-06-26 20:33:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466998411,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,33,0,0,0,,,,,,,,,,,\n770,\"2016-06-26 20:34:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1466998472,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,34,0,0,0,,,,,,,,,,,\n771,\"2016-06-26 20:35:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1466998531,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,35,0,0,0,,,,,,,,,,,\n772,\"2016-06-26 20:36:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466998591,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,36,0,0,0,,,,,,,,,,,\n773,\"2016-06-26 20:37:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1466998651,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,37,0,0,0,,,,,,,,,,,\n774,\"2016-06-26 20:38:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466998714,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,38,0,0,0,,,,,,,,,,,\n775,\"2016-06-26 20:39:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1466998772,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,39,0,0,0,,,,,,,,,,,\n776,\"2016-06-26 20:40:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466998833,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,40,0,0,0,,,,,,,,,,,\n777,\"2016-06-26 20:41:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466998890,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,41,0,0,0,,,,,,,,,,,\n778,\"2016-06-26 20:42:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466998952,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,42,0,0,0,,,,,,,,,,,\n779,\"2016-06-26 20:43:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1466999011,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,43,0,0,0,,,,,,,,,,,\n780,\"2016-06-26 20:44:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1466999073,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,44,0,0,0,,,,,,,,,,,\n781,\"2016-06-26 20:45:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999131,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,45,0,0,0,,,,,,,,,,,\n782,\"2016-06-26 20:46:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999192,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,46,0,0,0,,,,,,,,,,,\n783,\"2016-06-26 20:47:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999250,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,47,0,0,0,,,,,,,,,,,\n784,\"2016-06-26 20:48:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999311,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,48,0,0,0,,,,,,,,,,,\n785,\"2016-06-26 20:49:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999370,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,49,0,0,0,,,,,,,,,,,\n786,\"2016-06-26 20:50:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999431,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,50,0,0,0,,,,,,,,,,,\n787,\"2016-06-26 20:51:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999492,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,51,0,0,0,,,,,,,,,,,\n788,\"2016-06-26 20:52:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999553,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,52,0,0,0,,,,,,,,,,,\n789,\"2016-06-26 20:53:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999611,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,53,0,0,0,,,,,,,,,,,\n790,\"2016-06-26 20:54:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999671,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,54,0,0,0,,,,,,,,,,,\n791,\"2016-06-26 20:55:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1466999731,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,55,0,0,0,,,,,,,,,,,\n792,\"2016-06-26 20:56:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999795,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,56,0,0,0,,,,,,,,,,,\n793,\"2016-06-26 20:57:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999851,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,57,0,0,0,,,,,,,,,,,\n794,\"2016-06-26 20:58:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1466999911,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,58,0,0,0,,,,,,,,,,,\n795,\"2016-06-26 20:59:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1466999970,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,59,0,0,0,,,,,,,,,,,\n796,\"2016-06-26 21:00:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1467000034,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,60,0,0,0,,,,,,,,,,,\n797,\"2016-06-26 21:01:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1467000104,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,61,0,0,0,,,,,,,,,,,\n798,\"2016-06-26 21:02:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1467000153,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,62,0,0,0,,,,,,,,,,,\n799,\"2016-06-26 21:03:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1467000213,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,63,0,0,0,,,,,,,,,,,\n800,\"2016-06-26 21:04:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1467000274,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,64,0,0,0,,,,,,,,,,,\n801,\"2016-06-26 21:05:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1467000332,0.0,None,None,0,0,0,20.3,False,20.3,23.5,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,74.3,13931,4,0,0,0,,65,0,0,0,,,,,,,,,,,\n802,\"2016-06-26 21:06:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1467000394,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,66,0,0,0,,,,,,,,,,,\n803,\"2016-06-26 21:07:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.99,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1467000452,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,67,0,0,0,,,,,,,,,,,\n804,\"2016-06-26 21:08:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1467000513,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,68,0,0,0,,,,,,,,,,,\n805,\"2016-06-26 21:09:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1467000573,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,69,0,0,0,,,,,,,,,,,\n806,\"2016-06-26 21:10:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1467000633,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,70,0,0,0,,,,,,,,,,,\n807,\"2016-06-26 21:11:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,27.4,0.0,268,1467000692,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,71,0,0,0,,,,,,,,,,,\n808,\"2016-06-26 21:12:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1467000752,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,72,0,0,0,,,,,,,,,,,\n809,\"2016-06-26 21:13:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1467000815,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,73,0,0,0,,,,,,,,,,,\n810,\"2016-06-26 21:14:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1467000871,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,74,0,0,0,,,,,,,,,,,\n811,\"2016-06-26 21:15:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,181.2,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,27.3,0.0,268,1467000932,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,75,0,0,0,,,,,,,,,,,\n812,\"2016-06-26 21:16:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.3,0.0,268,1467000993,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,76,0,0,0,,,,,,,,,,,\n813,\"2016-06-26 21:17:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.3,0.0,268,1467001055,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,77,0,0,0,,,,,,,,,,,\n814,\"2016-06-26 21:18:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.4,0.0,268,1467001113,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,78,0,0,0,,,,,,,,,,,\n815,\"2016-06-26 21:19:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.3,0.0,268,1467001173,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,79,0,0,0,,,,,,,,,,,\n816,\"2016-06-26 21:20:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.4,0.0,268,1467001233,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,80,0,0,0,,,,,,,,,,,\n817,\"2016-06-26 21:21:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.4,0.0,268,1467001292,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,81,0,0,0,,,,,,,,,,,\n818,\"2016-06-26 21:22:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.4,0.0,268,1467001353,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,82,0,0,0,,,,,,,,,,,\n819,\"2016-06-26 21:23:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.4,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.3,0.0,268,1467001413,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,83,0,0,0,,,,,,,,,,,\n820,\"2016-06-26 21:24:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.3,0.0,268,1467001473,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,84,0,0,0,,,,,,,,,,,\n821,\"2016-06-26 21:25:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.3,0.0,268,1467001534,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,85,0,0,0,,,,,,,,,,,\n822,\"2016-06-26 21:26:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.3,0.0,268,1467001592,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,86,0,0,0,,,,,,,,,,,\n823,\"2016-06-26 21:27:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.2,0.0,268,1467001652,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,80,68,73.4,13931,4,0,0,0,,87,0,0,0,,,,,,,,,,,\n824,\"2016-06-26 21:28:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.2,0.0,268,1467001713,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,80,68,73.4,13931,4,0,0,0,,88,0,0,0,,,,,,,,,,,\n825,\"2016-06-26 21:29:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.3,0.0,268,1467001775,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,89,0,0,0,,,,,,,,,,,\n826,\"2016-06-26 21:30:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.3,0.0,268,1467001833,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,90,0,0,0,,,,,,,,,,,\n827,\"2016-06-26 21:31:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.3,0.0,268,1467001893,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,81,68,73.4,13931,4,0,0,0,,91,0,0,0,,,,,,,,,,,\n828,\"2016-06-26 21:32:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.84,0,70,40,Engaged,-0.3,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,27.2,0.0,268,1467001951,0.0,None,None,0,0,0,20.3,False,20.3,23.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,80,68,73.4,13931,4,0,0,0,,92,0,0,0,,,,,,,,,,,\n829,\"2016-06-26 21:33:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467002012,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n830,\"2016-06-26 21:34:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n831,\"2016-06-26 21:35:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n832,\"2016-06-26 21:36:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n833,\"2016-06-26 21:37:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n834,\"2016-06-26 21:38:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n835,\"2016-06-26 21:39:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n836,\"2016-06-26 21:40:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n837,\"2016-06-26 21:41:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n838,\"2016-06-26 21:42:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n839,\"2016-06-26 21:43:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n840,\"2016-06-26 21:44:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n841,\"2016-06-26 21:45:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n842,\"2016-06-26 21:46:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n843,\"2016-06-26 21:47:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n844,\"2016-06-26 21:48:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,True,0,0,0,0,,,,,,,,,,,\n845,\"2016-06-26 21:49:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467002974,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,1,0,0,0,,,,,,,,,,,\n846,\"2016-06-26 21:50:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003032,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,2,0,0,0,,,,,,,,,,,\n847,\"2016-06-26 21:51:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003093,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,3,0,0,0,,,,,,,,,,,\n848,\"2016-06-26 21:52:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003152,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,4,0,0,0,,,,,,,,,,,\n849,\"2016-06-26 21:53:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003216,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,5,0,0,0,,,,,,,,,,,\n850,\"2016-06-26 21:54:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003273,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,6,0,0,0,,,,,,,,,,,\n851,\"2016-06-26 21:55:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003333,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,7,0,0,0,,,,,,,,,,,\n852,\"2016-06-26 21:56:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003395,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,8,0,0,0,,,,,,,,,,,\n853,\"2016-06-26 21:57:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003454,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,9,0,0,0,,,,,,,,,,,\n854,\"2016-06-26 21:58:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003512,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,10,0,0,0,,,,,,,,,,,\n855,\"2016-06-26 21:59:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003573,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,11,0,0,0,,,,,,,,,,,\n856,\"2016-06-26 22:00:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003639,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,12,0,0,0,,,,,,,,,,,\n857,\"2016-06-26 22:02:08\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n858,\"2016-06-26 22:02:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n859,\"2016-06-26 22:03:50\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003866,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,1,0,0,0,,,,,,,,,,,\n860,\"2016-06-26 22:05:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467003936,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,2,0,0,0,,,,,,,,,,,\n861,\"2016-06-26 22:06:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004002,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,3,0,0,0,,,,,,,,,,,\n862,\"2016-06-26 22:07:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004055,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,4,0,0,0,,,,,,,,,,,\n863,\"2016-06-26 22:08:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004116,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,5,0,0,0,,,,,,,,,,,\n864,\"2016-06-26 22:09:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004173,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,6,0,0,0,,,,,,,,,,,\n865,\"2016-06-26 22:10:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004235,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,7,0,0,0,,,,,,,,,,,\n866,\"2016-06-26 22:11:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.1,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004293,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,8,0,0,0,,,,,,,,,,,\n867,\"2016-06-26 22:12:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004354,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,9,0,0,0,,,,,,,,,,,\n868,\"2016-06-26 22:13:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004413,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,10,0,0,0,,,,,,,,,,,\n869,\"2016-06-26 22:14:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004477,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,11,0,0,0,,,,,,,,,,,\n870,\"2016-06-26 22:15:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004535,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,12,0,0,0,,,,,,,,,,,\n871,\"2016-06-26 22:16:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004596,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,13,0,0,0,,,,,,,,,,,\n872,\"2016-06-26 22:17:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004654,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,14,0,0,0,,,,,,,,,,,\n873,\"2016-06-26 22:18:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004714,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,15,0,0,0,,,,,,,,,,,\n874,\"2016-06-26 22:19:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004777,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,16,0,0,0,,,,,,,,,,,\n875,\"2016-06-26 22:20:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004835,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,17,0,0,0,,,,,,,,,,,\n876,\"2016-06-26 22:21:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004894,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,18,0,0,0,,,,,,,,,,,\n877,\"2016-06-26 22:22:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467004951,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,19,0,0,0,,,,,,,,,,,\n878,\"2016-06-26 22:23:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005016,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,20,0,0,0,,,,,,,,,,,\n879,\"2016-06-26 22:24:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005072,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,21,0,0,0,,,,,,,,,,,\n880,\"2016-06-26 22:25:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005135,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,22,0,0,0,,,,,,,,,,,\n881,\"2016-06-26 22:26:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005193,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,23,0,0,0,,,,,,,,,,,\n882,\"2016-06-26 22:27:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005255,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,24,0,0,0,,,,,,,,,,,\n883,\"2016-06-26 22:28:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,-0.3,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005314,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,25,0,0,0,,,,,,,,,,,\n884,\"2016-06-26 22:29:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005374,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,26,0,0,0,,,,,,,,,,,\n885,\"2016-06-26 22:30:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005433,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,27,0,0,0,,,,,,,,,,,\n886,\"2016-06-26 22:31:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005495,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,28,0,0,0,,,,,,,,,,,\n887,\"2016-06-26 22:32:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005553,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,29,0,0,0,,,,,,,,,,,\n888,\"2016-06-26 22:33:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005615,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,30,0,0,0,,,,,,,,,,,\n889,\"2016-06-26 22:34:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467005674,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n890,\"2016-06-26 22:35:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n891,\"2016-06-26 22:36:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n892,\"2016-06-26 22:37:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n893,\"2016-06-26 22:38:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n894,\"2016-06-26 22:39:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n895,\"2016-06-26 22:40:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n896,\"2016-06-26 22:41:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n897,\"2016-06-26 22:42:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n898,\"2016-06-26 22:43:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n899,\"2016-06-26 22:44:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n900,\"2016-06-26 22:45:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n901,\"2016-06-26 22:46:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n902,\"2016-06-26 22:47:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n903,\"2016-06-26 22:48:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n904,\"2016-06-26 22:49:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,True,0,0,0,0,,,,,,,,,,,\n905,\"2016-06-26 22:50:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,None,70,None,<invalid>,None,None,False,<invalid>,70,True,90,None,70,9.79,None,0,100,228.02,False,None,None,None,False,None,158.67,0.0,None,40,False,42.5,50,34.0,None,0.0,268,1467006637,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,1,0,0,0,,,,,,,,,,,\n906,\"2016-06-26 22:51:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467006692,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,2,0,0,0,,,,,,,,,,,\n907,\"2016-06-26 22:52:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.1,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467006754,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,3,0,0,0,,,,,,,,,,,\n908,\"2016-06-26 22:53:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467006815,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,4,0,0,0,,,,,,,,,,,\n909,\"2016-06-26 22:54:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467006872,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,5,0,0,0,,,,,,,,,,,\n910,\"2016-06-26 22:55:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467006933,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,6,0,0,0,,,,,,,,,,,\n911,\"2016-06-26 22:56:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467006991,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,7,0,0,0,,,,,,,,,,,\n912,\"2016-06-26 22:57:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007053,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,8,0,0,0,,,,,,,,,,,\n913,\"2016-06-26 22:58:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007113,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,9,0,0,0,,,,,,,,,,,\n914,\"2016-06-26 22:59:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007174,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,10,0,0,0,,,,,,,,,,,\n915,\"2016-06-26 23:00:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007234,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,11,0,0,0,,,,,,,,,,,\n916,\"2016-06-26 23:01:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.1,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007293,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,12,0,0,0,,,,,,,,,,,\n917,\"2016-06-26 23:02:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,None,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007356,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,13,0,0,0,,,,,,,,,,,\n918,\"2016-06-26 23:03:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007414,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,14,0,0,0,,,,,,,,,,,\n919,\"2016-06-26 23:04:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007477,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,15,0,0,0,,,,,,,,,,,\n920,\"2016-06-26 23:05:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007533,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,16,0,0,0,,,,,,,,,,,\n921,\"2016-06-26 23:06:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007595,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,17,0,0,0,,,,,,,,,,,\n922,\"2016-06-26 23:07:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007653,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,18,0,0,0,,,,,,,,,,,\n923,\"2016-06-26 23:08:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007713,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,19,0,0,0,,,,,,,,,,,\n924,\"2016-06-26 23:09:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007773,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,20,0,0,0,,,,,,,,,,,\n925,\"2016-06-26 23:10:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007834,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,21,0,0,0,,,,,,,,,,,\n926,\"2016-06-26 23:11:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007893,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,22,0,0,0,,,,,,,,,,,\n927,\"2016-06-26 23:12:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467007955,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,23,0,0,0,,,,,,,,,,,\n928,\"2016-06-26 23:13:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467008013,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,24,0,0,0,,,,,,,,,,,\n929,\"2016-06-26 23:14:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467008075,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,25,0,0,0,,,,,,,,,,,\n930,\"2016-06-26 23:15:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467008133,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,26,0,0,0,,,,,,,,,,,\n931,\"2016-06-26 23:16:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467008194,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,27,0,0,0,,,,,,,,,,,\n932,\"2016-06-26 23:17:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467008252,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,28,0,0,0,,,,,,,,,,,\n933,\"2016-06-26 23:18:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467008312,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,29,0,0,0,,,,,,,,,,,\n934,\"2016-06-26 23:19:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,-0.2,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467008373,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,30,0,0,0,,,,,,,,,,,\n935,\"2016-06-26 23:20:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467008433,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,31,0,0,0,,,,,,,,,,,\n936,\"2016-06-26 23:21:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467008495,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,32,0,0,0,,,,,,,,,,,\n937,\"2016-06-26 23:22:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467008552,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n938,\"2016-06-26 23:23:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n939,\"2016-06-26 23:24:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n940,\"2016-06-26 23:25:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n941,\"2016-06-26 23:26:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n942,\"2016-06-26 23:27:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n943,\"2016-06-26 23:28:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n944,\"2016-06-26 23:29:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n945,\"2016-06-26 23:30:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n946,\"2016-06-26 23:31:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n947,\"2016-06-26 23:32:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n948,\"2016-06-26 23:33:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-4,0,0,0,,,,,,,,,,,\n949,\"2016-06-26 23:34:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-3,0,0,0,,,,,,,,,,,\n950,\"2016-06-26 23:35:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-2,0,0,0,,,,,,,,,,,\n951,\"2016-06-26 23:36:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,False,-1,0,0,0,,,,,,,,,,,\n952,\"2016-06-26 23:37:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,0,0,0,True,0,0,0,0,,,,,,,,,,,\n953,\"2016-06-26 23:38:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,None,70,None,Engaged,None,None,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,None,False,None,False,None,158.67,0.0,None,40,False,42.5,50,34.0,None,0.0,268,1467009516,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,1,0,0,0,,,,,,,,,,,\n954,\"2016-06-26 23:39:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467009574,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,2,0,0,0,,,,,,,,,,,\n955,\"2016-06-26 23:40:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467009632,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,3,0,0,0,,,,,,,,,,,\n956,\"2016-06-26 23:41:28\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467009690,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,4,0,0,0,,,,,,,,,,,\n957,\"2016-06-26 23:42:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.9,True,0,100,228.47,False,Complete,False,None,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467009751,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,5,0,0,0,,,,,,,,,,,\n958,\"2016-06-26 23:43:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467009810,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,6,0,0,0,,,,,,,,,,,\n959,\"2016-06-26 23:44:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,None,70,9.9,True,0,100,228.47,False,Complete,False,None,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467009873,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,7,0,0,0,,,,,,,,,,,\n960,\"2016-06-26 23:45:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467009932,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,8,0,0,0,,,,,,,,,,,\n961,\"2016-06-26 23:46:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467009993,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,9,0,0,0,,,,,,,,,,,\n962,\"2016-06-26 23:47:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467010051,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,10,0,0,0,,,,,,,,,,,\n963,\"2016-06-26 23:48:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467010112,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,11,0,0,0,,,,,,,,,,,\n964,\"2016-06-26 23:49:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467010170,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,12,0,0,0,,,,,,,,,,,\n965,\"2016-06-26 23:50:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467010232,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,13,0,0,0,,,,,,,,,,,\n966,\"2016-06-26 23:51:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467010291,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,14,0,0,0,,,,,,,,,,,\n967,\"2016-06-26 23:52:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467010352,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,15,0,0,0,,,,,,,,,,,\n968,\"2016-06-26 23:53:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467010410,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,16,0,0,0,,,,,,,,,,,\n969,\"2016-06-26 23:54:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467010472,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,17,0,0,0,,,,,,,,,,,\n970,\"2016-06-26 23:55:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467010531,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,18,0,0,0,,,,,,,,,,,\n971,\"2016-06-26 23:56:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.9,True,0,100,228.47,False,Complete,False,None,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467010592,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,19,0,0,0,,,,,,,,,,,\n972,\"2016-06-26 23:57:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.35,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467010652,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,20,0,0,0,,,,,,,,,,,\n973,\"2016-06-26 23:58:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.35,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467010714,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,21,0,0,0,,,,,,,,,,,\n974,\"2016-06-26 23:59:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467010771,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,22,0,0,0,,,,,,,,,,,\n975,\"2016-06-27 00:00:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n976,\"2016-06-27 00:01:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,None,Engaged,-0.2,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467010905,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,1,0,0,0,,,,,,,,,,,\n977,\"2016-06-27 00:02:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467010954,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,2,0,0,0,,,,,,,,,,,\n978,\"2016-06-27 00:03:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,None,Engaged,0.1,0,False,<invalid>,70,True,90,None,70,9.9,True,0,100,228.47,False,Complete,False,None,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467011012,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,3,0,0,0,,,,,,,,,,,\n979,\"2016-06-27 00:04:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,40,Engaged,0.0,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,False,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467011072,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,4,0,0,0,,,,,,,,,,,\n980,\"2016-06-27 00:05:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.9,True,0,100,228.47,False,Complete,False,None,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467011134,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,5,0,0,0,,,,,,,,,,,\n981,\"2016-06-27 00:06:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,181.2,0,70,40,Engaged,None,0,False,<invalid>,70,True,90,False,70,9.9,True,0,100,228.47,False,Complete,None,False,False,None,158.67,0.0,0,40,False,43.0,50,34.0,None,0.0,268,1467011208,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,6,0,0,0,,,,,,,,,,,\n982,\"2016-06-27 00:07:27\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,40,Engaged,-0.1,0,False,<invalid>,70,True,90,False,70,9.79,True,0,100,228.02,False,Complete,False,False,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467011248,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,7,0,0,0,,,,,,,,,,,\n983,\"2016-06-27 00:08:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,None,None,180.84,0,70,None,Engaged,0.0,0,False,<invalid>,70,True,90,None,70,9.79,True,0,100,228.02,False,Complete,False,None,False,None,158.67,0.0,0,40,False,42.5,50,34.0,None,0.0,268,1467011315,0.0,None,None,0,0,0,20.3,None,20.3,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13931,4,0,0,0,,8,0,0,0,,,,,,,,,,,\n984,\"2016-06-27 00:09:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.85,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,9.8,True,0,100,228.03,False,Complete,False,False,False,None,158.68,0.0,0,40,False,42.5,50,34.0,25.8,0.0,268,1467011378,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,78,68,71.6,13931,4,0,0,0,,9,0,0,0,,,,,,,,,,,\n985,\"2016-06-27 00:10:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.85,0,70,40,Engaged,-0.7,0,False,<invalid>,70,True,90,False,70,9.8,True,0,100,228.03,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.5,50,34.0,25.9,0.0,268,1467011433,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,78,68,71.6,13931,4,0,0,0,,10,0,0,0,,,,,,,,,,,\n986,\"2016-06-27 00:11:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.85,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,9.8,True,0,100,228.03,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.5,50,34.0,26.0,0.0,268,1467011496,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,78,68,71.6,13931,4,0,0,0,,11,0,0,0,,,,,,,,,,,\n987,\"2016-06-27 00:12:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.85,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.8,True,0,100,228.03,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.5,50,34.0,26.1,0.0,268,1467011549,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,78,68,71.6,13931,4,0,0,0,,12,0,0,0,,,,,,,,,,,\n988,\"2016-06-27 00:13:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.85,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.8,True,0,100,228.03,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.5,50,34.0,26.1,0.0,268,1467011614,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,78,68,71.6,13931,4,0,0,0,,13,0,0,0,,,,,,,,,,,\n989,\"2016-06-27 00:14:29\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.85,0,70,40,Engaged,-0.6,0,False,<invalid>,70,True,90,False,70,9.8,True,0,100,228.03,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.5,50,34.0,26.0,0.0,268,1467011672,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,78,68,71.6,13931,4,0,0,0,,14,0,0,0,,,,,,,,,,,\n990,\"2016-06-27 00:15:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.85,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.8,True,0,100,228.03,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.5,50,34.0,26.1,0.0,268,1467011733,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,78,68,71.6,13931,4,0,0,0,,15,0,0,0,,,,,,,,,,,\n991,\"2016-06-27 00:16:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.85,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.8,True,0,100,228.03,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.5,50,34.0,26.0,0.0,268,1467011794,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,78,68,71.6,13931,4,0,0,0,,16,0,0,0,,,,,,,,,,,\n992,\"2016-06-27 00:17:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.49,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.69,True,0,100,227.57,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.0,50,33.5,26.3,0.0,268,1467011852,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,79,68,71.6,13931,4,0,0,0,,17,0,0,0,,,,,,,,,,,\n993,\"2016-06-27 00:18:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.49,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.69,True,0,100,227.57,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.0,50,33.5,26.4,0.0,268,1467011914,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,79,68,71.6,13931,4,0,0,0,,18,0,0,0,,,,,,,,,,,\n994,\"2016-06-27 00:19:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.49,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.69,True,0,100,227.57,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.0,50,33.5,26.4,0.0,268,1467011976,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,79,68,71.6,13931,4,0,0,0,,19,0,0,0,,,,,,,,,,,\n995,\"2016-06-27 00:20:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.49,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.69,True,0,100,227.57,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.0,50,33.5,26.4,0.0,268,1467012034,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,79,68,71.6,13931,4,0,0,0,,20,0,0,0,,,,,,,,,,,\n996,\"2016-06-27 00:21:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.49,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.69,True,0,100,227.57,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.0,50,33.5,26.4,0.0,268,1467012093,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,79,68,71.6,13931,4,0,0,0,,21,0,0,0,,,,,,,,,,,\n997,\"2016-06-27 00:22:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.49,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.69,True,0,100,227.57,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.0,50,33.5,26.4,0.0,268,1467012153,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,79,68,71.6,13931,4,0,0,0,,22,0,0,0,,,,,,,,,,,\n998,\"2016-06-27 00:23:30\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.49,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.69,True,0,100,227.57,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.0,50,33.5,26.4,0.0,268,1467012213,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,79,68,71.6,13931,4,0,0,0,,23,0,0,0,,,,,,,,,,,\n999,\"2016-06-27 00:24:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,32,True,False,None,False,None,180.49,0,70,40,Engaged,-0.5,0,False,<invalid>,70,True,90,False,70,9.69,True,0,100,227.57,False,Complete,False,False,False,None,158.36,0.0,0,40,False,42.0,50,33.5,26.4,0.0,268,1467012276,0.0,None,None,0,0,0,20.3,False,20.3,22.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13931.332653,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,79,68,71.6,13931,4,0,0,0,,24,0,0,0,,,,,,,,,,,\n"
  },
  {
    "path": "test/fixtures/import/01_complete/TeslaFi72016.csv",
    "content": "﻿data_id,Date,calendar_enabled,remote_start_enabled,vehicle_id,display_name,color,backseat_token,notifications_enabled,vin,backseat_token_updated_at,id,tokens,id_s,state,user_charge_enable_request,time_to_full_charge,charge_current_request,charge_enable_request,charge_to_max_range,charger_phases,battery_heater_on,managed_charging_start_time,battery_range,charger_power,charge_limit_soc,charger_pilot_current,charge_port_latch,battery_current,charger_actual_current,scheduled_charging_pending,fast_charger_type,usable_battery_level,motorized_charge_port,charge_limit_soc_std,not_enough_power_to_heat,battery_level,charge_energy_added,charge_port_door_open,max_range_charge_counter,charge_limit_soc_max,ideal_battery_range,managed_charging_active,charging_state,fast_charger_present,trip_charging,managed_charging_user_canceled,scheduled_charging_start_time,est_battery_range,charge_rate,charger_voltage,charge_current_request_max,eu_vehicle,charge_miles_added_ideal,charge_limit_soc_min,charge_miles_added_rated,inside_temp,longitude,heading,gps_as_of,latitude,speed,shift_state,seat_heater_rear_right,seat_heater_rear_left_back,seat_heater_left,passenger_temp_setting,is_auto_conditioning_on,driver_temp_setting,outside_temp,seat_heater_rear_center,is_rear_defroster_on,seat_heater_rear_right_back,smart_preconditioning,seat_heater_right,fan_status,is_front_defroster_on,seat_heater_rear_left,gui_charge_rate_units,gui_24_hour_time,gui_temperature_units,gui_range_display,gui_distance_units,sun_roof_installed,rhd,remote_start_supported,homelink_nearby,parsed_calendar_supported,spoiler_type,ft,odometer,remote_start,pr,has_spoiler,roof_color,perf_config,valet_mode,calendar_supported,pf,sun_roof_percent_open,third_row_seats,seat_type,api_version,rear_seat_heaters,rt,exterior_color,df,autopark_state,sun_roof_state,notifications_supported,vehicle_name,dr,autopark_style,car_type,wheel_type,locked,center_display_state,last_autopark_error,car_version,dark_rims,autopark_state_v2,inside_tempF,driver_temp_settingF,outside_tempF,odometerF,idleNumber,sleepNumber,driveNumber,chargeNumber,polling,idleTime,running,rerunning,maxRange,left_temp_direction,max_avail_temp,is_climate_on,right_temp_direction,min_avail_temp,rear_seat_type,power,steering_wheel_heater,wiper_blade_heater,side_mirror_heaters,elevation\n6814,\"2016-07-01 00:00:35\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,164.5,0,66,0,Engaged,-0.3,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,207.41,False,Disconnected,False,False,False,None,135.61,0.0,0,40,False,15.0,50,12.0,25.5,0.0,268,1467356461,0.0,None,None,0,0,0,20.9,False,20.9,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,69,69.8,13954,36,0,0,0,,117,0,0,0,,,,,,,,,,,\n6815,\"2016-07-01 00:01:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,164.5,0,66,0,Engaged,-0.3,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,207.41,False,Disconnected,False,False,False,None,135.61,0.0,0,40,False,15.0,50,12.0,25.5,0.0,268,1467356495,0.0,None,None,0,0,0,20.9,False,20.9,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,69,69.8,13954,36,0,0,0,,118,0,0,0,,,,,,,,,,,\n6816,\"2016-07-01 00:02:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,164.5,0,66,0,Engaged,-0.3,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,207.41,False,Disconnected,False,False,False,None,135.61,0.0,0,40,False,15.0,50,12.0,25.5,0.0,268,1467356557,0.0,None,None,0,0,0,20.9,False,20.9,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,69,69.8,13954,36,0,0,0,,119,0,0,0,,,,,,,,,,,\n6817,\"2016-07-01 00:03:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,164.5,0,66,0,Engaged,-0.3,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,207.41,False,Disconnected,False,False,False,None,135.61,0.0,0,40,False,15.0,50,12.0,25.5,0.0,268,1467356616,0.0,None,None,0,0,0,20.9,False,20.9,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,69,69.8,13954,36,0,0,0,,120,0,0,0,,,,,,,,,,,\n6818,\"2016-07-01 00:04:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,164.5,0,66,0,Engaged,-0.2,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,207.41,False,Disconnected,False,False,False,None,135.61,0.0,0,40,False,15.0,50,12.0,25.5,0.0,268,1467356675,0.0,None,None,0,0,0,20.9,False,20.9,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,69,69.8,13954,36,0,0,0,,121,0,0,0,,,,,,,,,,,\n6819,\"2016-07-01 00:05:35\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,164.5,0,66,0,Engaged,-0.3,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,207.41,False,Disconnected,False,False,False,None,135.31,0.0,0,40,False,15.0,50,12.0,25.5,0.0,268,1467356737,0.0,None,None,0,0,0,20.9,False,20.9,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,69,69.8,13954,36,0,0,0,,122,0,0,0,,,,,,,,,,,\n6820,\"2016-07-01 00:06:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,164.5,0,66,0,Engaged,-0.4,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,207.41,False,Disconnected,False,False,False,None,135.31,0.0,0,40,False,15.0,50,12.0,25.5,0.0,268,1467356795,0.0,None,None,0,0,0,20.9,False,20.9,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,69,69.8,13954,36,0,0,0,,123,0,0,0,,,,,,,,,,,\n6821,\"2016-07-01 00:07:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,164.5,0,66,0,Engaged,-0.3,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,207.41,False,Disconnected,False,False,False,None,135.31,0.0,0,40,False,15.0,50,12.0,25.5,0.0,268,1467356858,0.0,None,None,0,0,0,20.9,False,20.9,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,69,69.8,13954,36,0,0,0,,124,0,0,0,,,,,,,,,,,\n6822,\"2016-07-01 00:08:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,164.5,0,66,0,Engaged,-0.3,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,207.41,False,Disconnected,False,False,False,None,135.61,0.0,0,40,False,15.0,50,12.0,25.5,0.0,268,1467356914,0.0,None,None,0,0,0,20.9,False,20.9,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,69,69.8,13954,36,0,0,0,,125,0,0,0,,,,,,,,,,,\n6823,\"2016-07-01 00:09:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,164.5,0,66,0,Engaged,-0.3,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,207.41,False,Disconnected,False,False,False,None,135.61,0.0,0,40,False,15.0,50,12.0,25.5,0.0,268,1467356976,0.0,None,None,0,0,0,20.9,False,20.9,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,69,69.8,13954,36,0,0,0,,126,0,0,0,,,,,,,,,,,\n6824,\"2016-07-01 00:10:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,False,None,164.5,0,66,0,Engaged,-0.3,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,207.41,False,Disconnected,False,False,False,None,135.31,0.0,0,40,False,15.0,50,12.0,25.5,0.0,268,1467357035,0.0,None,None,0,0,0,20.9,False,20.9,21.0,0,False,0,False,0,0,3,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,77,69,69.8,13954,36,0,0,0,,127,0,0,0,,,,,,,,,,,\n6825,\"2016-07-01 00:11:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,164.15,0,66,0,Engaged,-0.1,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,206.97,False,Disconnected,False,False,False,None,135.32,0.0,0,40,False,15.0,50,12.0,None,0.0,268,1467357096,0.0,None,None,0,0,0,20.9,None,20.9,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13954,36,0,0,0,,128,0,0,0,,,,,,,,,,,\n6826,\"2016-07-01 00:12:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,164.15,0,66,0,Engaged,-0.1,0,False,<invalid>,63,True,90,False,63,3.48,False,0,100,206.97,False,Disconnected,False,False,False,None,135.32,0.0,0,40,False,15.0,50,12.0,None,0.0,268,1467357153,0.0,None,None,0,0,0,20.9,None,20.9,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13954,36,0,0,0,,129,0,0,0,,,,,,,,,,,\n6827,\"2016-07-01 00:13:36\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,None,0.0,40,False,False,None,None,None,164.15,0,66,None,Engaged,0.0,0,False,<invalid>,63,True,90,None,63,3.48,False,0,100,206.97,False,Disconnected,False,None,False,None,135.32,0.0,0,40,False,15.0,50,12.0,None,0.0,268,1467357221,0.0,None,None,0,0,0,20.9,None,20.9,None,0,False,0,False,0,None,None,0,kW,False,F,Rated,mi/hr,1,False,True,True,True,None,0,13954.150928,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,disabled,unknown,True,82420,0,standard,s,Base19,True,0,no_error,2.20.30,False,disabled,None,None,None,13954,36,0,0,0,False,-15,0,0,0,,,,,,,,,,,\n6828,\"2016-07-01 00:14:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,0,0,0,False,-14,0,0,0,,,,,,,,,,,\n6829,\"2016-07-01 00:15:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,0,0,0,False,-13,0,0,0,,,,,,,,,,,\n6830,\"2016-07-01 00:16:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,0,0,0,False,-12,0,0,0,,,,,,,,,,,\n6831,\"2016-07-01 00:17:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,0,0,0,False,-11,0,0,0,,,,,,,,,,,\n6832,\"2016-07-01 00:18:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,0,0,0,False,-10,0,0,0,,,,,,,,,,,\n6833,\"2016-07-01 00:19:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,0,0,0,False,-9,0,0,0,,,,,,,,,,,\n6834,\"2016-07-01 00:20:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,0,0,0,False,-8,0,0,0,,,,,,,,,,,\n6835,\"2016-07-01 00:21:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,0,0,0,False,-7,0,0,0,,,,,,,,,,,\n6836,\"2016-07-01 00:22:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,0,0,0,False,-6,0,0,0,,,,,,,,,,,\n6837,\"2016-07-01 00:23:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,0,0,0,False,-5,0,0,0,,,,,,,,,,,\n6838,\"2016-07-01 00:24:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36,16,0,0,,0,0,0,0,,,,,,,,,,,\n6839,\"2016-07-01 00:25:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6840,\"2016-07-01 00:26:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6841,\"2016-07-01 00:27:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6842,\"2016-07-01 00:28:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6843,\"2016-07-01 00:29:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6844,\"2016-07-01 00:30:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6845,\"2016-07-01 00:31:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6846,\"2016-07-01 00:32:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6847,\"2016-07-01 00:33:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6848,\"2016-07-01 00:34:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6849,\"2016-07-01 00:35:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6850,\"2016-07-01 00:36:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6851,\"2016-07-01 00:37:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6852,\"2016-07-01 00:38:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6853,\"2016-07-01 00:39:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6854,\"2016-07-01 00:40:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6855,\"2016-07-01 00:41:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6856,\"2016-07-01 00:42:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6857,\"2016-07-01 00:43:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6858,\"2016-07-01 00:44:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6859,\"2016-07-01 00:45:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6860,\"2016-07-01 00:46:36\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6861,\"2016-07-01 00:47:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6862,\"2016-07-01 00:48:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6863,\"2016-07-01 00:49:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6864,\"2016-07-01 00:50:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6865,\"2016-07-01 00:51:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6866,\"2016-07-01 00:52:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6867,\"2016-07-01 00:53:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6868,\"2016-07-01 00:54:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6869,\"2016-07-01 00:55:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6870,\"2016-07-01 00:56:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6871,\"2016-07-01 00:57:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6872,\"2016-07-01 00:58:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6873,\"2016-07-01 00:59:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6874,\"2016-07-01 01:00:35\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6875,\"2016-07-01 01:01:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6876,\"2016-07-01 01:02:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6877,\"2016-07-01 01:03:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6878,\"2016-07-01 01:04:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6879,\"2016-07-01 01:05:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6880,\"2016-07-01 01:06:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6881,\"2016-07-01 01:07:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6882,\"2016-07-01 01:08:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6883,\"2016-07-01 01:09:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6884,\"2016-07-01 01:10:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6885,\"2016-07-01 01:11:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6886,\"2016-07-01 01:12:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6887,\"2016-07-01 01:13:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6888,\"2016-07-01 01:14:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6889,\"2016-07-01 01:15:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6890,\"2016-07-01 01:16:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6891,\"2016-07-01 01:17:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6892,\"2016-07-01 01:18:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6893,\"2016-07-01 01:19:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6894,\"2016-07-01 01:20:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6895,\"2016-07-01 01:21:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6896,\"2016-07-01 01:22:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6897,\"2016-07-01 01:23:31\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6898,\"2016-07-01 01:24:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6899,\"2016-07-01 01:25:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6900,\"2016-07-01 01:26:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6901,\"2016-07-01 01:27:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6902,\"2016-07-01 01:28:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6903,\"2016-07-01 01:29:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6904,\"2016-07-01 01:30:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6905,\"2016-07-01 01:31:34\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6906,\"2016-07-01 01:32:32\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6907,\"2016-07-01 01:33:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6908,\"2016-07-01 01:34:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6909,\"2016-07-01 01:35:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6910,\"2016-07-01 01:36:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6911,\"2016-07-01 01:37:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n6912,\"2016-07-01 01:38:33\",True,True,1111111111,82420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,999999999999999,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,16,0,0,,0,0,0,0,,,,,,,,,,,\n"
  },
  {
    "path": "test/fixtures/import/02_timezone/TeslaFi92019.csv",
    "content": "﻿data_id,Date,calendar_enabled,remote_start_enabled,vehicle_id,display_name,color,backseat_token,notifications_enabled,vin,backseat_token_updated_at,id,tokens,id_s,state,user_charge_enable_request,time_to_full_charge,charge_current_request,charge_enable_request,charge_to_max_range,charger_phases,battery_heater_on,managed_charging_start_time,battery_range,charger_power,charge_limit_soc,charger_pilot_current,charge_port_latch,battery_current,charger_actual_current,scheduled_charging_pending,fast_charger_type,usable_battery_level,motorized_charge_port,charge_limit_soc_std,not_enough_power_to_heat,battery_level,charge_energy_added,charge_port_door_open,max_range_charge_counter,charge_limit_soc_max,ideal_battery_range,managed_charging_active,charging_state,fast_charger_present,trip_charging,managed_charging_user_canceled,scheduled_charging_start_time,est_battery_range,charge_rate,charger_voltage,charge_current_request_max,eu_vehicle,charge_miles_added_ideal,charge_limit_soc_min,charge_miles_added_rated,inside_temp,longitude,heading,gps_as_of,latitude,speed,shift_state,seat_heater_rear_right,seat_heater_rear_left_back,seat_heater_left,passenger_temp_setting,is_auto_conditioning_on,driver_temp_setting,outside_temp,seat_heater_rear_center,is_rear_defroster_on,seat_heater_rear_right_back,smart_preconditioning,seat_heater_right,fan_status,is_front_defroster_on,seat_heater_rear_left,gui_charge_rate_units,gui_24_hour_time,gui_temperature_units,gui_range_display,gui_distance_units,sun_roof_installed,rhd,remote_start_supported,homelink_nearby,parsed_calendar_supported,spoiler_type,ft,odometer,remote_start,pr,has_spoiler,roof_color,perf_config,valet_mode,calendar_supported,pf,sun_roof_percent_open,third_row_seats,seat_type,api_version,rear_seat_heaters,rt,exterior_color,df,autopark_state,sun_roof_state,notifications_supported,vehicle_name,dr,autopark_style,car_type,wheel_type,locked,center_display_state,last_autopark_error,car_version,dark_rims,autopark_state_v2,inside_tempF,driver_temp_settingF,outside_tempF,odometerF,idleNumber,sleepNumber,driveNumber,chargeNumber,polling,idleTime,running,rerunning,maxRange,left_temp_direction,max_avail_temp,is_climate_on,right_temp_direction,min_avail_temp,rear_seat_type,power,steering_wheel_heater,wiper_blade_heater,side_mirror_heaters,elevation\n1742297,\"2019-09-01 00:00:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742298,\"2019-09-01 00:01:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742299,\"2019-09-01 00:02:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742300,\"2019-09-01 00:03:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742301,\"2019-09-01 00:04:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742302,\"2019-09-01 00:05:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742303,\"2019-09-01 00:06:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742304,\"2019-09-01 00:07:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742305,\"2019-09-01 00:08:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742306,\"2019-09-01 00:09:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742307,\"2019-09-01 00:10:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742308,\"2019-09-01 00:11:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742309,\"2019-09-01 00:12:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742310,\"2019-09-01 00:13:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742311,\"2019-09-01 00:14:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742312,\"2019-09-01 00:15:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742313,\"2019-09-01 00:16:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742314,\"2019-09-01 00:17:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742315,\"2019-09-01 00:18:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742316,\"2019-09-01 00:19:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742317,\"2019-09-01 00:20:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742318,\"2019-09-01 00:21:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742319,\"2019-09-01 00:22:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742320,\"2019-09-01 00:23:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742321,\"2019-09-01 00:24:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742322,\"2019-09-01 00:25:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742323,\"2019-09-01 00:26:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742324,\"2019-09-01 00:27:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742325,\"2019-09-01 00:28:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742326,\"2019-09-01 00:29:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742327,\"2019-09-01 00:30:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742328,\"2019-09-01 00:31:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742329,\"2019-09-01 00:32:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742330,\"2019-09-01 00:33:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742331,\"2019-09-01 00:34:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742332,\"2019-09-01 00:35:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742333,\"2019-09-01 00:36:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742334,\"2019-09-01 00:37:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742335,\"2019-09-01 00:38:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742336,\"2019-09-01 00:39:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742337,\"2019-09-01 00:40:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742338,\"2019-09-01 00:41:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742339,\"2019-09-01 00:42:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742340,\"2019-09-01 00:43:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742341,\"2019-09-01 00:44:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742342,\"2019-09-01 00:45:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742343,\"2019-09-01 00:46:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742344,\"2019-09-01 00:47:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742345,\"2019-09-01 00:48:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742346,\"2019-09-01 00:49:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742347,\"2019-09-01 00:50:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742348,\"2019-09-01 00:51:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742349,\"2019-09-01 00:52:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742350,\"2019-09-01 00:53:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742351,\"2019-09-01 00:54:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742352,\"2019-09-01 00:55:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742353,\"2019-09-01 00:56:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742354,\"2019-09-01 00:57:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742355,\"2019-09-01 00:58:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742356,\"2019-09-01 00:59:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742357,\"2019-09-01 01:00:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742358,\"2019-09-01 01:01:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742359,\"2019-09-01 01:02:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742360,\"2019-09-01 01:03:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742361,\"2019-09-01 01:04:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742362,\"2019-09-01 01:05:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742363,\"2019-09-01 01:06:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742364,\"2019-09-01 01:07:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742365,\"2019-09-01 01:08:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742366,\"2019-09-01 01:09:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742367,\"2019-09-01 01:10:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742368,\"2019-09-01 01:11:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742369,\"2019-09-01 01:12:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742370,\"2019-09-01 01:13:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742371,\"2019-09-01 01:14:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742372,\"2019-09-01 01:15:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742373,\"2019-09-01 01:16:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742374,\"2019-09-01 01:17:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742375,\"2019-09-01 01:18:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742376,\"2019-09-01 01:19:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742377,\"2019-09-01 01:20:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742378,\"2019-09-01 01:21:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742379,\"2019-09-01 01:22:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742380,\"2019-09-01 01:23:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742381,\"2019-09-01 01:24:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742382,\"2019-09-01 01:25:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742383,\"2019-09-01 01:26:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742384,\"2019-09-01 01:27:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742385,\"2019-09-01 01:28:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742386,\"2019-09-01 01:29:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742387,\"2019-09-01 01:30:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742388,\"2019-09-01 01:31:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742389,\"2019-09-01 01:32:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742390,\"2019-09-01 01:33:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742391,\"2019-09-01 01:34:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742392,\"2019-09-01 01:35:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742393,\"2019-09-01 01:36:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742394,\"2019-09-01 01:37:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742395,\"2019-09-01 01:38:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742396,\"2019-09-01 01:39:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742397,\"2019-09-01 01:40:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742398,\"2019-09-01 01:41:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742399,\"2019-09-01 01:42:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742400,\"2019-09-01 01:43:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742401,\"2019-09-01 01:44:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742402,\"2019-09-01 01:45:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742403,\"2019-09-01 01:46:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742404,\"2019-09-01 01:47:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742405,\"2019-09-01 01:48:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742406,\"2019-09-01 01:49:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742407,\"2019-09-01 01:50:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742408,\"2019-09-01 01:51:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742409,\"2019-09-01 01:52:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742410,\"2019-09-01 01:53:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742411,\"2019-09-01 01:54:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742412,\"2019-09-01 01:55:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742413,\"2019-09-01 01:56:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742414,\"2019-09-01 01:57:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742415,\"2019-09-01 01:58:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742416,\"2019-09-01 01:59:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742417,\"2019-09-01 02:00:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742418,\"2019-09-01 02:01:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742419,\"2019-09-01 02:02:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742420,\"2019-09-01 02:03:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742421,\"2019-09-01 02:04:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742422,\"2019-09-01 02:05:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742423,\"2019-09-01 02:06:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742424,\"2019-09-01 02:07:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742425,\"2019-09-01 02:08:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742426,\"2019-09-01 02:09:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742427,\"2019-09-01 02:10:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742428,\"2019-09-01 02:11:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742429,\"2019-09-01 02:12:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742430,\"2019-09-01 02:13:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742431,\"2019-09-01 02:14:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742432,\"2019-09-01 02:15:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742433,\"2019-09-01 02:16:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742434,\"2019-09-01 02:17:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742435,\"2019-09-01 02:18:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742436,\"2019-09-01 02:19:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742437,\"2019-09-01 02:20:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742438,\"2019-09-01 02:21:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742439,\"2019-09-01 02:22:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742440,\"2019-09-01 02:23:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742441,\"2019-09-01 02:24:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742442,\"2019-09-01 02:25:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742443,\"2019-09-01 02:26:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742444,\"2019-09-01 02:27:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742445,\"2019-09-01 02:28:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742446,\"2019-09-01 02:29:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742447,\"2019-09-01 02:30:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742448,\"2019-09-01 02:31:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742449,\"2019-09-01 02:32:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742450,\"2019-09-01 02:33:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742451,\"2019-09-01 02:34:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742452,\"2019-09-01 02:35:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742453,\"2019-09-01 02:36:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742454,\"2019-09-01 02:37:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742455,\"2019-09-01 02:38:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742456,\"2019-09-01 02:39:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742457,\"2019-09-01 02:40:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742458,\"2019-09-01 02:41:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742459,\"2019-09-01 02:42:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742460,\"2019-09-01 02:43:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742461,\"2019-09-01 02:44:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742462,\"2019-09-01 02:45:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742463,\"2019-09-01 02:46:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742464,\"2019-09-01 02:47:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742465,\"2019-09-01 02:48:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742466,\"2019-09-01 02:49:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742467,\"2019-09-01 02:50:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742468,\"2019-09-01 02:51:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742469,\"2019-09-01 02:52:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742470,\"2019-09-01 02:53:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742471,\"2019-09-01 02:54:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742472,\"2019-09-01 02:55:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742473,\"2019-09-01 02:56:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742474,\"2019-09-01 02:57:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742475,\"2019-09-01 02:58:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742476,\"2019-09-01 02:59:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742477,\"2019-09-01 03:00:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742478,\"2019-09-01 03:01:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742479,\"2019-09-01 03:02:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742480,\"2019-09-01 03:03:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742481,\"2019-09-01 03:04:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742482,\"2019-09-01 03:05:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742483,\"2019-09-01 03:06:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742484,\"2019-09-01 03:07:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742485,\"2019-09-01 03:08:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742486,\"2019-09-01 03:09:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742487,\"2019-09-01 03:10:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742488,\"2019-09-01 03:11:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742489,\"2019-09-01 03:12:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742490,\"2019-09-01 03:13:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742491,\"2019-09-01 03:14:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742492,\"2019-09-01 03:15:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742493,\"2019-09-01 03:16:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742494,\"2019-09-01 03:17:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742495,\"2019-09-01 03:18:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742496,\"2019-09-01 03:19:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742497,\"2019-09-01 03:20:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742498,\"2019-09-01 03:21:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742499,\"2019-09-01 03:22:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742500,\"2019-09-01 03:23:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742501,\"2019-09-01 03:24:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742502,\"2019-09-01 03:25:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742503,\"2019-09-01 03:26:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742504,\"2019-09-01 03:27:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742505,\"2019-09-01 03:28:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742506,\"2019-09-01 03:29:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742507,\"2019-09-01 03:30:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742508,\"2019-09-01 03:31:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742509,\"2019-09-01 03:32:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742510,\"2019-09-01 03:33:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742511,\"2019-09-01 03:34:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742512,\"2019-09-01 03:35:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742513,\"2019-09-01 03:36:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742514,\"2019-09-01 03:37:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742515,\"2019-09-01 03:38:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742516,\"2019-09-01 03:39:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742517,\"2019-09-01 03:40:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742518,\"2019-09-01 03:41:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742519,\"2019-09-01 03:42:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742520,\"2019-09-01 03:43:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742521,\"2019-09-01 03:44:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742522,\"2019-09-01 03:45:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742523,\"2019-09-01 03:46:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742524,\"2019-09-01 03:47:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742525,\"2019-09-01 03:48:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742526,\"2019-09-01 03:49:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742527,\"2019-09-01 03:50:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742528,\"2019-09-01 03:51:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742529,\"2019-09-01 03:52:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742530,\"2019-09-01 03:53:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742531,\"2019-09-01 03:54:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742532,\"2019-09-01 03:55:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742533,\"2019-09-01 03:56:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742534,\"2019-09-01 03:57:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742535,\"2019-09-01 03:58:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742536,\"2019-09-01 03:59:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742537,\"2019-09-01 04:00:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742538,\"2019-09-01 04:01:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742539,\"2019-09-01 04:02:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742540,\"2019-09-01 04:03:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742541,\"2019-09-01 04:04:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742542,\"2019-09-01 04:05:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742543,\"2019-09-01 04:06:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742544,\"2019-09-01 04:07:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742545,\"2019-09-01 04:08:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742546,\"2019-09-01 04:09:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742547,\"2019-09-01 04:10:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742548,\"2019-09-01 04:11:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742549,\"2019-09-01 04:12:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742550,\"2019-09-01 04:13:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742551,\"2019-09-01 04:14:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742552,\"2019-09-01 04:15:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742553,\"2019-09-01 04:16:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742554,\"2019-09-01 04:17:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742555,\"2019-09-01 04:18:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742556,\"2019-09-01 04:19:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742557,\"2019-09-01 04:20:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742558,\"2019-09-01 04:21:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742559,\"2019-09-01 04:22:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742560,\"2019-09-01 04:23:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742561,\"2019-09-01 04:24:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742562,\"2019-09-01 04:25:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742563,\"2019-09-01 04:26:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742564,\"2019-09-01 04:27:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742565,\"2019-09-01 04:28:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742566,\"2019-09-01 04:29:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742567,\"2019-09-01 04:30:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742568,\"2019-09-01 04:31:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742569,\"2019-09-01 04:32:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742570,\"2019-09-01 04:33:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742571,\"2019-09-01 04:34:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742572,\"2019-09-01 04:35:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742573,\"2019-09-01 04:36:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742574,\"2019-09-01 04:37:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742575,\"2019-09-01 04:38:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742576,\"2019-09-01 04:39:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742577,\"2019-09-01 04:40:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742578,\"2019-09-01 04:41:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742579,\"2019-09-01 04:42:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742580,\"2019-09-01 04:43:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742581,\"2019-09-01 04:44:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742582,\"2019-09-01 04:45:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742583,\"2019-09-01 04:46:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742584,\"2019-09-01 04:47:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742585,\"2019-09-01 04:48:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742586,\"2019-09-01 04:49:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742587,\"2019-09-01 04:50:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742588,\"2019-09-01 04:51:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742589,\"2019-09-01 04:52:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742590,\"2019-09-01 04:53:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742591,\"2019-09-01 04:54:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742592,\"2019-09-01 04:55:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742593,\"2019-09-01 04:56:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742594,\"2019-09-01 04:57:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742595,\"2019-09-01 04:58:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742596,\"2019-09-01 04:59:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742597,\"2019-09-01 05:00:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742598,\"2019-09-01 05:01:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742599,\"2019-09-01 05:02:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742600,\"2019-09-01 05:03:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742601,\"2019-09-01 05:04:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742602,\"2019-09-01 05:05:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742603,\"2019-09-01 05:06:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742604,\"2019-09-01 05:07:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742605,\"2019-09-01 05:08:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742606,\"2019-09-01 05:09:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742607,\"2019-09-01 05:10:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742608,\"2019-09-01 05:11:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742609,\"2019-09-01 05:12:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742610,\"2019-09-01 05:13:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742611,\"2019-09-01 05:14:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742612,\"2019-09-01 05:15:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742613,\"2019-09-01 05:16:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742614,\"2019-09-01 05:17:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742615,\"2019-09-01 05:18:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742616,\"2019-09-01 05:19:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742617,\"2019-09-01 05:20:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742618,\"2019-09-01 05:21:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742619,\"2019-09-01 05:22:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742620,\"2019-09-01 05:23:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742621,\"2019-09-01 05:24:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742622,\"2019-09-01 05:25:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742623,\"2019-09-01 05:26:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742624,\"2019-09-01 05:27:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742625,\"2019-09-01 05:28:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742626,\"2019-09-01 05:29:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742627,\"2019-09-01 05:30:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742628,\"2019-09-01 05:31:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742629,\"2019-09-01 05:32:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742630,\"2019-09-01 05:33:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742631,\"2019-09-01 05:34:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742632,\"2019-09-01 05:35:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742633,\"2019-09-01 05:36:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742634,\"2019-09-01 05:37:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742635,\"2019-09-01 05:38:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742636,\"2019-09-01 05:39:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742637,\"2019-09-01 05:40:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742638,\"2019-09-01 05:41:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742639,\"2019-09-01 05:42:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742640,\"2019-09-01 05:43:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742641,\"2019-09-01 05:44:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742642,\"2019-09-01 05:45:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742643,\"2019-09-01 05:46:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742644,\"2019-09-01 05:47:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742645,\"2019-09-01 05:48:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742646,\"2019-09-01 05:49:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742647,\"2019-09-01 05:50:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742648,\"2019-09-01 05:51:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742649,\"2019-09-01 05:52:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742650,\"2019-09-01 05:53:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742651,\"2019-09-01 05:54:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742652,\"2019-09-01 05:55:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742653,\"2019-09-01 05:56:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742654,\"2019-09-01 05:57:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742655,\"2019-09-01 05:58:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742656,\"2019-09-01 05:59:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742657,\"2019-09-01 06:00:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742658,\"2019-09-01 06:01:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742659,\"2019-09-01 06:02:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742660,\"2019-09-01 06:03:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742661,\"2019-09-01 06:04:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742662,\"2019-09-01 06:05:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742663,\"2019-09-01 06:06:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742664,\"2019-09-01 06:07:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742665,\"2019-09-01 06:08:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742666,\"2019-09-01 06:09:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742667,\"2019-09-01 06:10:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742668,\"2019-09-01 06:11:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742669,\"2019-09-01 06:12:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742670,\"2019-09-01 06:13:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742671,\"2019-09-01 06:14:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742672,\"2019-09-01 06:15:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742673,\"2019-09-01 06:16:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742674,\"2019-09-01 06:17:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742675,\"2019-09-01 06:18:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742676,\"2019-09-01 06:19:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742677,\"2019-09-01 06:20:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742678,\"2019-09-01 06:21:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742679,\"2019-09-01 06:22:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742680,\"2019-09-01 06:23:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742681,\"2019-09-01 06:24:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742682,\"2019-09-01 06:25:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742683,\"2019-09-01 06:26:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742684,\"2019-09-01 06:27:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742685,\"2019-09-01 06:28:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742686,\"2019-09-01 06:29:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742687,\"2019-09-01 06:30:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742688,\"2019-09-01 06:31:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742689,\"2019-09-01 06:32:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742690,\"2019-09-01 06:33:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742691,\"2019-09-01 06:34:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742692,\"2019-09-01 06:35:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742693,\"2019-09-01 06:36:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742694,\"2019-09-01 06:37:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742695,\"2019-09-01 06:38:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742696,\"2019-09-01 06:39:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742697,\"2019-09-01 06:40:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742698,\"2019-09-01 06:41:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742699,\"2019-09-01 06:42:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742700,\"2019-09-01 06:43:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742701,\"2019-09-01 06:44:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742702,\"2019-09-01 06:45:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742703,\"2019-09-01 06:46:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742704,\"2019-09-01 06:47:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742705,\"2019-09-01 06:48:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742706,\"2019-09-01 06:49:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742707,\"2019-09-01 06:50:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742708,\"2019-09-01 06:51:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742709,\"2019-09-01 06:52:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742710,\"2019-09-01 06:53:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742711,\"2019-09-01 06:54:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742712,\"2019-09-01 06:55:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742713,\"2019-09-01 06:56:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742714,\"2019-09-01 06:57:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742715,\"2019-09-01 06:58:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742716,\"2019-09-01 06:59:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742717,\"2019-09-01 07:00:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742718,\"2019-09-01 07:01:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742719,\"2019-09-01 07:02:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742720,\"2019-09-01 07:03:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742721,\"2019-09-01 07:04:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742722,\"2019-09-01 07:05:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742723,\"2019-09-01 07:06:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742724,\"2019-09-01 07:07:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742725,\"2019-09-01 07:08:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742726,\"2019-09-01 07:09:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742727,\"2019-09-01 07:10:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742728,\"2019-09-01 07:11:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742729,\"2019-09-01 07:12:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742730,\"2019-09-01 07:13:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742731,\"2019-09-01 07:14:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742732,\"2019-09-01 07:15:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742733,\"2019-09-01 07:16:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742734,\"2019-09-01 07:17:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742735,\"2019-09-01 07:18:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742736,\"2019-09-01 07:19:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742737,\"2019-09-01 07:20:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742738,\"2019-09-01 07:21:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742739,\"2019-09-01 07:22:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742740,\"2019-09-01 07:23:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742741,\"2019-09-01 07:24:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742742,\"2019-09-01 07:25:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742743,\"2019-09-01 07:26:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742744,\"2019-09-01 07:27:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742745,\"2019-09-01 07:28:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742746,\"2019-09-01 07:29:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742747,\"2019-09-01 07:30:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742748,\"2019-09-01 07:31:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742749,\"2019-09-01 07:32:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742750,\"2019-09-01 07:33:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742751,\"2019-09-01 07:34:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742752,\"2019-09-01 07:35:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742753,\"2019-09-01 07:36:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742754,\"2019-09-01 07:37:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742755,\"2019-09-01 07:38:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742756,\"2019-09-01 07:39:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742757,\"2019-09-01 07:40:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742758,\"2019-09-01 07:41:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742759,\"2019-09-01 07:42:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742760,\"2019-09-01 07:43:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742761,\"2019-09-01 07:44:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742762,\"2019-09-01 07:45:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742763,\"2019-09-01 07:46:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742764,\"2019-09-01 07:47:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742765,\"2019-09-01 07:48:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742766,\"2019-09-01 07:49:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742767,\"2019-09-01 07:50:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742768,\"2019-09-01 07:51:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742769,\"2019-09-01 07:52:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742770,\"2019-09-01 07:53:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742771,\"2019-09-01 07:54:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742772,\"2019-09-01 07:55:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742773,\"2019-09-01 07:56:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742774,\"2019-09-01 07:57:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742775,\"2019-09-01 07:58:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742776,\"2019-09-01 07:59:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742777,\"2019-09-01 08:00:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742778,\"2019-09-01 08:01:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742779,\"2019-09-01 08:02:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742780,\"2019-09-01 08:03:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742781,\"2019-09-01 08:04:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742782,\"2019-09-01 08:05:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742783,\"2019-09-01 08:06:15\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742784,\"2019-09-01 08:07:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742785,\"2019-09-01 08:08:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742786,\"2019-09-01 08:09:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742787,\"2019-09-01 08:10:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742788,\"2019-09-01 08:11:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742789,\"2019-09-01 08:12:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742790,\"2019-09-01 08:13:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742791,\"2019-09-01 08:14:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742792,\"2019-09-01 08:15:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742793,\"2019-09-01 08:16:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742794,\"2019-09-01 08:17:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742795,\"2019-09-01 08:18:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742796,\"2019-09-01 08:19:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742797,\"2019-09-01 08:20:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742798,\"2019-09-01 08:21:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742799,\"2019-09-01 08:22:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742800,\"2019-09-01 08:23:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742801,\"2019-09-01 08:24:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742802,\"2019-09-01 08:25:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742803,\"2019-09-01 08:26:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742804,\"2019-09-01 08:27:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742805,\"2019-09-01 08:28:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742806,\"2019-09-01 08:29:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742807,\"2019-09-01 08:30:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742808,\"2019-09-01 08:31:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742809,\"2019-09-01 08:32:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742810,\"2019-09-01 08:33:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742811,\"2019-09-01 08:34:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742812,\"2019-09-01 08:35:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742813,\"2019-09-01 08:36:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742814,\"2019-09-01 08:37:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742815,\"2019-09-01 08:38:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742816,\"2019-09-01 08:39:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742817,\"2019-09-01 08:40:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742818,\"2019-09-01 08:41:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742819,\"2019-09-01 08:42:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742820,\"2019-09-01 08:43:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742821,\"2019-09-01 08:44:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742822,\"2019-09-01 08:45:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742823,\"2019-09-01 08:46:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742824,\"2019-09-01 08:47:10\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742825,\"2019-09-01 08:48:10\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742826,\"2019-09-01 08:49:10\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742827,\"2019-09-01 08:50:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742828,\"2019-09-01 08:51:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742829,\"2019-09-01 08:52:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742830,\"2019-09-01 08:53:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742831,\"2019-09-01 08:54:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.1,0.0,270,1567353280,0.0,None,P,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,closed,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,70,38508.1998,6590,3443,0,0,,0,0,0,265.99,-160,28.0,False,-160,15.0,1,0,,,,\n1742832,\"2019-09-01 08:55:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.2,0.0,270,1567353312,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,None,38508.1998,6590,0,0,0,,1,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742833,\"2019-09-01 08:56:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.2,0.0,270,1567353370,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,None,38508.1998,6590,0,0,0,,2,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742834,\"2019-09-01 08:57:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.2,0.0,270,1567353431,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,None,38508.1998,6590,0,0,0,,3,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742835,\"2019-09-01 08:58:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.2,0.0,270,1567353490,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,None,38508.1998,6590,0,0,0,,4,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742836,\"2019-09-01 08:59:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,None,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.2,0.0,270,1567353551,0.0,None,None,,,0,21.1,None,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,70,38508.1998,6590,0,0,0,,5,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742837,\"2019-09-01 09:00:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.2,0.0,270,1567353611,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,None,38508.1998,6590,0,0,0,,6,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742838,\"2019-09-01 09:01:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.2,0.0,270,1567353670,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,None,38508.1998,6590,0,0,0,,7,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742839,\"2019-09-01 09:02:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.2,0.0,270,1567353731,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,None,38508.1998,6590,0,0,0,,8,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742840,\"2019-09-01 09:03:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.2,0.0,270,1567353791,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,None,38508.1998,6590,0,0,0,,9,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742841,\"2019-09-01 09:04:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.2,0.0,270,1567353851,0.0,None,None,,,0,21.1,None,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,70,38508.1998,6590,0,0,0,,10,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742842,\"2019-09-01 09:05:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,23.5,0.0,270,1567353913,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,74,69,70,38508.1998,6590,0,0,0,,11,0,0,265.99,61,28.0,False,61,15.0,1,0,,,,\n1742843,\"2019-09-01 09:06:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.2,0.0,270,1567353971,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,75,69,70,38508.1998,6590,0,0,0,,12,0,0,265.99,-173,28.0,False,-173,15.0,1,0,,,,\n1742844,\"2019-09-01 09:07:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.5,0.0,270,1567354031,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,76,69,70,38508.1998,6590,0,0,0,,13,0,0,265.99,-183,28.0,False,-183,15.0,1,0,,,,\n1742845,\"2019-09-01 09:08:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,24.8,0.0,270,1567354091,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,76,69,70,38508.1998,6590,0,0,0,,14,0,0,265.99,-194,28.0,False,-194,15.0,1,0,,,,\n1742846,\"2019-09-01 09:09:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.0,0.0,270,1567354151,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,15,0,0,265.99,-205,28.0,False,-205,15.0,1,0,,,,\n1742847,\"2019-09-01 09:10:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.0,0.0,270,1567354211,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,16,0,0,265.99,-207,28.0,False,-207,15.0,1,0,,,,\n1742848,\"2019-09-01 09:11:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.0,0.0,270,1567354271,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,17,0,0,265.99,-208,28.0,False,-208,15.0,1,0,,,,\n1742849,\"2019-09-01 09:12:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.1,0.0,270,1567354332,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,18,0,0,265.99,-213,28.0,False,-213,15.0,1,0,,,,\n1742850,\"2019-09-01 09:13:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.1,0.0,270,1567354391,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,19,0,0,265.99,-215,28.0,False,-215,15.0,1,0,,,,\n1742851,\"2019-09-01 09:14:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.2,0.0,270,1567354451,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,20,0,0,265.99,-221,28.0,False,-221,15.0,1,0,,,,\n1742852,\"2019-09-01 09:15:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.4,0.0,270,1567354511,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,21,0,0,265.99,-231,28.0,False,-231,15.0,1,0,,,,\n1742853,\"2019-09-01 09:16:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.5,0.0,270,1567354571,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,22,0,0,265.99,-237,28.0,False,-237,15.0,1,0,,,,\n1742854,\"2019-09-01 09:17:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.5,0.0,270,1567354631,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,23,0,0,265.99,-239,28.0,False,-239,15.0,1,0,,,,\n1742855,\"2019-09-01 09:18:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.5,0.0,270,1567354692,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,24,0,0,265.99,-241,28.0,False,-241,15.0,1,0,,,,\n1742856,\"2019-09-01 09:19:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.5,0.0,270,1567354751,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,25,0,0,265.99,-242,28.0,False,-242,15.0,1,0,,,,\n1742857,\"2019-09-01 09:20:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.5,0.0,270,1567354811,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,26,0,0,265.99,-244,28.0,False,-244,15.0,1,0,,,,\n1742858,\"2019-09-01 09:21:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.5,0.0,270,1567354871,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,27,0,0,265.99,-246,28.0,False,-246,15.0,1,0,,,,\n1742859,\"2019-09-01 09:22:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.5,0.0,270,1567354931,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,28,0,0,265.99,-247,28.0,False,-247,15.0,1,0,,,,\n1742860,\"2019-09-01 09:23:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0.0,0,32,False,67.5,50,53.5,25.5,0.0,270,1567354991,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,29,0,0,265.99,-249,28.0,False,-249,15.0,1,0,,,,\n1742861,\"2019-09-01 09:24:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.5,50,53.5,25.5,0.0,270,1567355051,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,77,69,70,38508.1998,6590,0,0,0,,30,0,0,265.99,-251,28.0,False,-251,15.0,1,0,,,,\n1742862,\"2019-09-01 09:25:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.5,50,53.5,25.6,0.0,270,1567355111,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-256,28.0,False,-256,15.0,1,0,,,,\n1742863,\"2019-09-01 09:26:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1742864,\"2019-09-01 09:27:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1742865,\"2019-09-01 09:28:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1742866,\"2019-09-01 09:29:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1742867,\"2019-09-01 09:30:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1742868,\"2019-09-01 09:31:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1742869,\"2019-09-01 09:32:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1742870,\"2019-09-01 09:33:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1742871,\"2019-09-01 09:34:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1742872,\"2019-09-01 09:35:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1742873,\"2019-09-01 09:36:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1742874,\"2019-09-01 09:37:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1742875,\"2019-09-01 09:38:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1742876,\"2019-09-01 09:39:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1742877,\"2019-09-01 09:40:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1742878,\"2019-09-01 09:41:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,25.9,0.0,270,1567356071,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,1,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742879,\"2019-09-01 09:42:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567356132,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,2,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742880,\"2019-09-01 09:43:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,25.9,0.0,270,1567356191,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,3,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742881,\"2019-09-01 09:44:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567356252,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,4,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742882,\"2019-09-01 09:45:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567356312,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,5,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742883,\"2019-09-01 09:46:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567356373,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,6,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742884,\"2019-09-01 09:47:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567356431,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,7,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742885,\"2019-09-01 09:48:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567356492,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,8,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742886,\"2019-09-01 09:49:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567356551,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,9,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742887,\"2019-09-01 09:50:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567356612,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,10,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742888,\"2019-09-01 09:51:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567356671,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,11,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742889,\"2019-09-01 09:52:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567356732,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,12,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742890,\"2019-09-01 09:53:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567356792,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,13,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742891,\"2019-09-01 09:54:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567356852,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,14,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742892,\"2019-09-01 09:55:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567356911,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,15,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742893,\"2019-09-01 09:56:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567356972,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,16,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742894,\"2019-09-01 09:57:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567357031,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,17,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742895,\"2019-09-01 09:58:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567357091,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,18,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742896,\"2019-09-01 09:59:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567357151,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,19,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742897,\"2019-09-01 10:00:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567357211,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,20,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742898,\"2019-09-01 10:01:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567357271,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,21,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742899,\"2019-09-01 10:02:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567357331,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,22,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742900,\"2019-09-01 10:03:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567357390,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,23,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742901,\"2019-09-01 10:04:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567357451,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,24,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742902,\"2019-09-01 10:05:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567357510,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,25,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742903,\"2019-09-01 10:06:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,67.0,50,53.0,26.0,0.0,270,1567357570,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,26,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742904,\"2019-09-01 10:07:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567357631,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,27,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742905,\"2019-09-01 10:08:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,67.0,50,53.0,26.1,0.0,270,1567357691,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,78,69,70,38508.1998,6590,0,0,0,,28,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742906,\"2019-09-01 10:09:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,67.0,50,53.0,26.4,0.0,270,1567357751,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,29,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742907,\"2019-09-01 10:10:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,67.0,50,53.0,26.5,0.0,270,1567357810,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,30,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742908,\"2019-09-01 10:11:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,67.0,50,53.0,26.5,0.0,270,1567357870,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742909,\"2019-09-01 10:12:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1742910,\"2019-09-01 10:13:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1742911,\"2019-09-01 10:14:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1742912,\"2019-09-01 10:15:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1742913,\"2019-09-01 10:16:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1742914,\"2019-09-01 10:17:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1742915,\"2019-09-01 10:18:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1742916,\"2019-09-01 10:19:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1742917,\"2019-09-01 10:20:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1742918,\"2019-09-01 10:21:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1742919,\"2019-09-01 10:22:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1742920,\"2019-09-01 10:23:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1742921,\"2019-09-01 10:24:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1742922,\"2019-09-01 10:25:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1742923,\"2019-09-01 10:26:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1742924,\"2019-09-01 10:27:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.5,0.0,270,1567358831,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,1,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742925,\"2019-09-01 10:28:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.5,0.0,270,1567358891,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,2,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742926,\"2019-09-01 10:29:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567358952,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,3,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742927,\"2019-09-01 10:30:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567359011,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,4,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742928,\"2019-09-01 10:31:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567359072,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,5,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742929,\"2019-09-01 10:32:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567359131,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,6,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742930,\"2019-09-01 10:33:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567359192,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,7,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742931,\"2019-09-01 10:34:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567359251,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,8,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742932,\"2019-09-01 10:35:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567359311,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,9,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742933,\"2019-09-01 10:36:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567359370,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,10,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742934,\"2019-09-01 10:37:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567359430,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,11,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742935,\"2019-09-01 10:38:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567359492,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,12,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742936,\"2019-09-01 10:39:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567359551,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,13,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742937,\"2019-09-01 10:40:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.6,0.0,270,1567359612,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,79,69,70,38508.1998,6590,0,0,0,,14,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742938,\"2019-09-01 10:41:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.7,0.0,270,1567359671,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,15,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742939,\"2019-09-01 10:42:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.8,0.0,270,1567359732,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,16,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742940,\"2019-09-01 10:43:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,27.0,0.0,270,1567359791,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,17,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742941,\"2019-09-01 10:44:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.9,0.0,270,1567359852,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,18,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742942,\"2019-09-01 10:45:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.9,0.0,270,1567359911,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,19,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742943,\"2019-09-01 10:46:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.9,0.0,270,1567359971,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,20,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742944,\"2019-09-01 10:47:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,27.0,0.0,270,1567360030,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,21,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742945,\"2019-09-01 10:48:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.9,0.0,270,1567360091,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,22,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742946,\"2019-09-01 10:49:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.9,0.0,270,1567360149,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,23,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742947,\"2019-09-01 10:50:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.9,0.0,270,1567360211,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,24,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742948,\"2019-09-01 10:51:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,27.0,0.0,270,1567360270,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,25,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742949,\"2019-09-01 10:52:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,27.0,0.0,270,1567360330,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,26,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742950,\"2019-09-01 10:53:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,27.0,0.0,270,1567360392,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,27,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742951,\"2019-09-01 10:54:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,27.0,0.0,270,1567360451,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,28,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742952,\"2019-09-01 10:55:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,27.0,0.0,270,1567360512,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,29,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742953,\"2019-09-01 10:56:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,27.0,0.0,270,1567360571,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,,30,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742954,\"2019-09-01 10:57:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0.0,0,32,False,66.5,50,52.5,26.9,0.0,270,1567360631,0.0,None,None,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,70,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1742955,\"2019-09-01 10:58:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1742956,\"2019-09-01 10:59:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1742957,\"2019-09-01 11:00:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1742958,\"2019-09-01 11:01:16\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1742959,\"2019-09-01 11:02:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1742960,\"2019-09-01 11:03:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1742961,\"2019-09-01 11:04:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1742962,\"2019-09-01 11:05:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1742963,\"2019-09-01 11:06:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1742964,\"2019-09-01 11:07:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1742965,\"2019-09-01 11:08:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1742966,\"2019-09-01 11:09:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1742967,\"2019-09-01 11:10:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1742968,\"2019-09-01 11:11:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1742969,\"2019-09-01 11:12:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1742970,\"2019-09-01 11:13:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,27.0,0.0,270,1567361592,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,None,38508.1998,6590,0,0,0,,1,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742971,\"2019-09-01 11:14:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,27.0,0.0,270,1567361649,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,None,38508.1998,6590,0,0,0,,2,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742972,\"2019-09-01 11:15:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,27.0,0.0,270,1567361711,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,None,38508.1998,6590,0,0,0,,3,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742973,\"2019-09-01 11:16:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,27.0,0.0,270,1567361769,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,80,69,None,38508.1998,6590,0,0,0,,4,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742974,\"2019-09-01 11:17:09\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567361829,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,5,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742975,\"2019-09-01 11:18:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567361889,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,6,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742976,\"2019-09-01 11:19:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567361949,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,7,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742977,\"2019-09-01 11:20:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567362010,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,8,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742978,\"2019-09-01 11:21:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567362070,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,9,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742979,\"2019-09-01 11:22:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567362129,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,10,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742980,\"2019-09-01 11:23:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567362191,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,11,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742981,\"2019-09-01 11:24:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567362250,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,12,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742982,\"2019-09-01 11:25:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567362310,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,13,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742983,\"2019-09-01 11:26:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567362369,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,14,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742984,\"2019-09-01 11:27:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567362431,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,15,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742985,\"2019-09-01 11:28:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567362489,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,16,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742986,\"2019-09-01 11:29:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567362550,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,17,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742987,\"2019-09-01 11:30:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567362609,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,18,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742988,\"2019-09-01 11:31:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567362671,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,19,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742989,\"2019-09-01 11:32:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567362730,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,20,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742990,\"2019-09-01 11:33:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567362789,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,21,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742991,\"2019-09-01 11:34:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567362850,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,22,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742992,\"2019-09-01 11:35:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567362910,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,23,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742993,\"2019-09-01 11:36:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567362970,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,24,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742994,\"2019-09-01 11:37:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567363030,0.0,None,None,,,0,21.1,None,21.1,24.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,75,38508.1998,6590,0,0,0,,25,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742995,\"2019-09-01 11:38:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567363090,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,26,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742996,\"2019-09-01 11:39:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567363149,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,27,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742997,\"2019-09-01 11:40:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567363209,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,28,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742998,\"2019-09-01 11:41:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567363269,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,29,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1742999,\"2019-09-01 11:42:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567363330,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,30,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743000,\"2019-09-01 11:43:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567363389,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,False,-15,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743001,\"2019-09-01 11:44:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743002,\"2019-09-01 11:45:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743003,\"2019-09-01 11:46:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743004,\"2019-09-01 11:47:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743005,\"2019-09-01 11:48:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743006,\"2019-09-01 11:49:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743007,\"2019-09-01 11:50:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743008,\"2019-09-01 11:51:15\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743009,\"2019-09-01 11:52:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743010,\"2019-09-01 11:53:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743011,\"2019-09-01 11:54:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743012,\"2019-09-01 11:55:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743013,\"2019-09-01 11:56:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743014,\"2019-09-01 11:57:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743015,\"2019-09-01 11:58:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1743016,\"2019-09-01 11:59:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567364351,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,1,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743017,\"2019-09-01 12:00:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567364411,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,2,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743018,\"2019-09-01 12:01:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567364470,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,3,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743019,\"2019-09-01 12:02:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567364531,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,4,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743020,\"2019-09-01 12:03:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567364590,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,5,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743021,\"2019-09-01 12:04:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567364651,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,6,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743022,\"2019-09-01 12:05:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567364709,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,7,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743023,\"2019-09-01 12:06:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567364769,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,8,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743024,\"2019-09-01 12:07:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567364829,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,9,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743025,\"2019-09-01 12:08:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567364891,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,10,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743026,\"2019-09-01 12:09:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567364950,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,11,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743027,\"2019-09-01 12:10:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567365011,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,12,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743028,\"2019-09-01 12:11:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567365070,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,13,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743029,\"2019-09-01 12:12:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567365131,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,14,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743030,\"2019-09-01 12:13:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567365190,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,15,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743031,\"2019-09-01 12:14:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567365252,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,16,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743032,\"2019-09-01 12:15:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567365309,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,17,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743033,\"2019-09-01 12:16:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567365370,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,18,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743034,\"2019-09-01 12:17:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567365429,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,19,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743035,\"2019-09-01 12:18:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567365492,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,20,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743036,\"2019-09-01 12:19:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567365549,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,21,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743037,\"2019-09-01 12:20:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567365611,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,22,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743038,\"2019-09-01 12:21:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567365670,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,23,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743039,\"2019-09-01 12:22:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567365729,0.0,None,None,,,0,21.1,None,21.1,24.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,76,38508.1998,6590,0,0,0,,24,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743040,\"2019-09-01 12:23:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567365790,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,25,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743041,\"2019-09-01 12:24:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567365849,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,26,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743042,\"2019-09-01 12:25:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567365910,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,27,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743043,\"2019-09-01 12:26:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567365970,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,28,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743044,\"2019-09-01 12:27:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567366030,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,29,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743045,\"2019-09-01 12:28:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567366089,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,30,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743046,\"2019-09-01 12:29:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567366150,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,False,-15,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743047,\"2019-09-01 12:30:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743048,\"2019-09-01 12:31:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743049,\"2019-09-01 12:32:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743050,\"2019-09-01 12:33:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743051,\"2019-09-01 12:34:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743052,\"2019-09-01 12:35:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743053,\"2019-09-01 12:36:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743054,\"2019-09-01 12:37:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743055,\"2019-09-01 12:38:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743056,\"2019-09-01 12:39:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743057,\"2019-09-01 12:40:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743058,\"2019-09-01 12:41:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743059,\"2019-09-01 12:42:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743060,\"2019-09-01 12:43:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743061,\"2019-09-01 12:44:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1743062,\"2019-09-01 12:45:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567367110,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,1,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743063,\"2019-09-01 12:46:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567367170,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,2,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743064,\"2019-09-01 12:47:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567367230,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,3,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743065,\"2019-09-01 12:48:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567367290,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,4,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743066,\"2019-09-01 12:49:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567367351,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,5,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743067,\"2019-09-01 12:50:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567367410,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,6,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743068,\"2019-09-01 12:51:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567367471,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,7,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743069,\"2019-09-01 12:52:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567367530,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,8,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743070,\"2019-09-01 12:53:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567367591,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,9,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743071,\"2019-09-01 12:54:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567367650,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,10,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743072,\"2019-09-01 12:55:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567367710,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,11,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743073,\"2019-09-01 12:56:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567367770,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,12,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743074,\"2019-09-01 12:57:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567367831,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,13,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743075,\"2019-09-01 12:58:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567367890,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,14,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743076,\"2019-09-01 12:59:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567367952,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,15,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743077,\"2019-09-01 13:00:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567368010,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,16,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743078,\"2019-09-01 13:01:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567368070,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,17,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743079,\"2019-09-01 13:02:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567368131,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,18,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743080,\"2019-09-01 13:03:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567368190,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,19,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743081,\"2019-09-01 13:04:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567368251,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,20,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743082,\"2019-09-01 13:05:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567368310,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,21,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743083,\"2019-09-01 13:06:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567368372,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,22,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743084,\"2019-09-01 13:07:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567368430,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,23,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743085,\"2019-09-01 13:08:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567368491,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,24,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743086,\"2019-09-01 13:09:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567368550,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,25,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743087,\"2019-09-01 13:10:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567368612,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,26,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743088,\"2019-09-01 13:11:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567368669,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,27,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743089,\"2019-09-01 13:12:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567368731,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,28,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743090,\"2019-09-01 13:13:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,None,0.0,270,1567368789,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,29,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743091,\"2019-09-01 13:14:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,None,80,None,<invalid>,,None,False,ACSingleWireCAN,80,True,90,None,80,15.3,None,0,100,266.01,False,Complete,None,None,False,1567407600,203.04,0.0,None,32,False,66.5,50,52.5,None,0.0,270,1567368851,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,30,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743092,\"2019-09-01 13:15:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.5,50,52.5,27.3,0.0,270,1567368909,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,81,69,77,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743093,\"2019-09-01 13:16:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743094,\"2019-09-01 13:17:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743095,\"2019-09-01 13:18:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743096,\"2019-09-01 13:19:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743097,\"2019-09-01 13:20:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743098,\"2019-09-01 13:21:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743099,\"2019-09-01 13:22:09\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743100,\"2019-09-01 13:23:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743101,\"2019-09-01 13:24:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743102,\"2019-09-01 13:25:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743103,\"2019-09-01 13:26:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743104,\"2019-09-01 13:27:09\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743105,\"2019-09-01 13:28:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743106,\"2019-09-01 13:29:09\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743107,\"2019-09-01 13:30:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1743108,\"2019-09-01 13:31:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.0,50,52.5,28.1,0.0,270,1567369870,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,1,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743109,\"2019-09-01 13:32:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.0,50,52.5,28.2,0.0,270,1567369929,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,2,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743110,\"2019-09-01 13:33:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.0,50,52.5,28.1,0.0,270,1567369990,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,3,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743111,\"2019-09-01 13:34:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.0,50,52.5,28.2,0.0,270,1567370049,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,4,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743112,\"2019-09-01 13:35:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.0,50,52.5,28.1,0.0,270,1567370110,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,5,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743113,\"2019-09-01 13:36:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.0,50,52.5,28.2,0.0,270,1567370169,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,6,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743114,\"2019-09-01 13:37:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.0,50,52.5,28.1,0.0,270,1567370229,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,7,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743115,\"2019-09-01 13:38:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.0,50,52.5,28.2,0.0,270,1567370290,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,8,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743116,\"2019-09-01 13:39:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.0,50,52.5,28.1,0.0,270,1567370350,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,9,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743117,\"2019-09-01 13:40:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.0,50,52.5,28.1,0.0,270,1567370411,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,10,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743118,\"2019-09-01 13:41:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0.0,0,32,False,66.0,50,52.5,28.2,0.0,270,1567370471,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,11,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743119,\"2019-09-01 13:42:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,66.0,50,52.5,28.2,0.0,270,1567370531,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,12,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743120,\"2019-09-01 13:43:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,66.0,50,52.5,28.2,0.0,270,1567370591,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,13,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743121,\"2019-09-01 13:44:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,66.0,50,52.5,28.1,0.0,270,1567370651,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,14,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743122,\"2019-09-01 13:45:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,66.0,50,52.5,28.1,0.0,270,1567370711,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,15,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743123,\"2019-09-01 13:46:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,66.0,50,52.5,28.2,0.0,270,1567370769,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,16,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743124,\"2019-09-01 13:47:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,66.0,50,52.5,28.2,0.0,270,1567370833,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,17,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743125,\"2019-09-01 13:48:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,66.0,50,52.5,28.2,0.0,270,1567370889,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,18,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743126,\"2019-09-01 13:49:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,66.0,50,52.5,28.2,0.0,270,1567370950,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,19,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743127,\"2019-09-01 13:50:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.2,0.0,270,1567371008,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,20,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743128,\"2019-09-01 13:51:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.2,0.0,270,1567371073,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,21,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743129,\"2019-09-01 13:52:09\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.1,0.0,270,1567371129,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,22,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743130,\"2019-09-01 13:53:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.1,0.0,270,1567371191,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,23,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743131,\"2019-09-01 13:54:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.1,0.0,270,1567371249,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,24,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743132,\"2019-09-01 13:55:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.2,0.0,270,1567371312,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,25,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743133,\"2019-09-01 13:56:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.1,0.0,270,1567371370,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,26,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743134,\"2019-09-01 13:57:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.2,0.0,270,1567371429,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,27,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743135,\"2019-09-01 13:58:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.2,0.0,270,1567371489,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,28,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743136,\"2019-09-01 13:59:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.3,0.0,270,1567371551,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,82,69,77,38508.1998,6590,0,0,0,,29,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743137,\"2019-09-01 14:00:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567371609,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,30,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743138,\"2019-09-01 14:01:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567371668,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743139,\"2019-09-01 14:02:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743140,\"2019-09-01 14:03:09\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743141,\"2019-09-01 14:04:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743142,\"2019-09-01 14:05:09\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743143,\"2019-09-01 14:06:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743144,\"2019-09-01 14:07:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743145,\"2019-09-01 14:08:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743146,\"2019-09-01 14:09:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743147,\"2019-09-01 14:10:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743148,\"2019-09-01 14:11:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743149,\"2019-09-01 14:12:09\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743150,\"2019-09-01 14:13:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743151,\"2019-09-01 14:14:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743152,\"2019-09-01 14:15:09\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743153,\"2019-09-01 14:16:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1743154,\"2019-09-01 14:17:09\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567372629,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,1,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743155,\"2019-09-01 14:18:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567372689,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,2,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743156,\"2019-09-01 14:19:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567372750,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,3,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743157,\"2019-09-01 14:20:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567372809,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,4,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743158,\"2019-09-01 14:21:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567372870,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,5,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743159,\"2019-09-01 14:22:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567372929,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,6,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743160,\"2019-09-01 14:23:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567372990,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,7,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743161,\"2019-09-01 14:24:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567373050,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,8,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743162,\"2019-09-01 14:25:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567373111,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,9,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743163,\"2019-09-01 14:26:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567373170,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,10,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743164,\"2019-09-01 14:27:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567373231,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,11,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743165,\"2019-09-01 14:28:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567373290,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,12,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743166,\"2019-09-01 14:29:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567373351,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,13,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743167,\"2019-09-01 14:30:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567373410,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,14,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743168,\"2019-09-01 14:31:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567373471,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,15,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743169,\"2019-09-01 14:32:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567373529,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,16,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743170,\"2019-09-01 14:33:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567373590,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,17,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743171,\"2019-09-01 14:34:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567373649,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,18,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743172,\"2019-09-01 14:35:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567373710,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,19,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743173,\"2019-09-01 14:36:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567373769,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,20,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743174,\"2019-09-01 14:37:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567373830,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,21,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743175,\"2019-09-01 14:38:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567373890,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,22,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743176,\"2019-09-01 14:39:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.5,50,52.0,28.5,0.0,270,1567373951,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,23,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743177,\"2019-09-01 14:40:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.5,50,52.0,28.6,0.0,270,1567374011,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,24,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743178,\"2019-09-01 14:41:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567374071,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,25,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743179,\"2019-09-01 14:42:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567374130,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,26,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743180,\"2019-09-01 14:43:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.6,0.0,270,1567374191,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,27,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743181,\"2019-09-01 14:44:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567374250,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,28,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743182,\"2019-09-01 14:45:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567374311,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,29,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743183,\"2019-09-01 14:46:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.6,0.0,270,1567374370,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,30,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743184,\"2019-09-01 14:47:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567374431,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743185,\"2019-09-01 14:48:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743186,\"2019-09-01 14:49:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743187,\"2019-09-01 14:50:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743188,\"2019-09-01 14:51:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743189,\"2019-09-01 14:52:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743190,\"2019-09-01 14:53:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743191,\"2019-09-01 14:54:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743192,\"2019-09-01 14:55:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743193,\"2019-09-01 14:56:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743194,\"2019-09-01 14:57:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743195,\"2019-09-01 14:58:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743196,\"2019-09-01 14:59:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743197,\"2019-09-01 15:00:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743198,\"2019-09-01 15:01:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743199,\"2019-09-01 15:02:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1743200,\"2019-09-01 15:03:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567375391,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,1,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743201,\"2019-09-01 15:04:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567375450,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,2,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743202,\"2019-09-01 15:05:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567375511,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,3,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743203,\"2019-09-01 15:06:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567375570,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,4,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743204,\"2019-09-01 15:07:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567375631,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,5,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743205,\"2019-09-01 15:08:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567375690,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,6,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743206,\"2019-09-01 15:09:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567375751,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,7,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743207,\"2019-09-01 15:10:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.4,0.0,270,1567375810,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,8,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743208,\"2019-09-01 15:11:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.4,0.0,270,1567375871,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,9,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743209,\"2019-09-01 15:12:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567375930,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,10,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743210,\"2019-09-01 15:13:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.4,0.0,270,1567375991,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,11,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743211,\"2019-09-01 15:14:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567376049,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,12,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743212,\"2019-09-01 15:15:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.5,0.0,270,1567376110,0.0,None,None,,,0,21.1,True,21.1,25.0,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,77,38508.1998,6590,0,0,0,,13,0,0,265.99,-267,28.0,False,-267,15.0,1,0,,,,\n1743213,\"2019-09-01 15:16:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,201.99,0.0,0,32,False,65.0,50,51.5,28.4,0.0,270,1567376169,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,14,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743214,\"2019-09-01 15:17:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,None,80,None,Disengaged,,None,False,ACSingleWireCAN,79,True,90,None,79,14.98,False,0,100,264.63,False,Complete,False,None,False,1567407600,202.34,0.0,None,32,False,65.0,50,51.5,28.4,0.0,270,1567376230,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,15,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743215,\"2019-09-01 15:18:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.4,0.0,270,1567376289,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,16,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743216,\"2019-09-01 15:19:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,None,80,None,Disengaged,,None,False,ACSingleWireCAN,79,True,90,False,79,14.98,False,0,100,264.63,False,Complete,False,None,False,1567407600,202.34,0.0,None,32,False,65.0,50,51.5,28.4,0.0,270,1567376351,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,17,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743217,\"2019-09-01 15:20:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.4,0.0,270,1567376409,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,18,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743218,\"2019-09-01 15:21:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,None,80,None,Disengaged,,None,False,ACSingleWireCAN,79,True,90,None,79,14.98,False,0,100,264.63,False,Complete,False,None,False,1567407600,202.34,0.0,None,32,False,65.0,50,51.5,28.4,0.0,270,1567376470,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,19,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743219,\"2019-09-01 15:22:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.4,0.0,270,1567376531,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,20,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743220,\"2019-09-01 15:23:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,None,80,None,Disengaged,,None,False,ACSingleWireCAN,79,True,90,None,79,14.98,False,0,100,264.63,False,Complete,False,None,False,1567407600,202.34,0.0,None,32,False,65.0,50,51.5,28.4,0.0,270,1567376590,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,21,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743221,\"2019-09-01 15:24:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.4,0.0,270,1567376649,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,22,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743222,\"2019-09-01 15:25:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,None,80,None,Disengaged,,None,False,ACSingleWireCAN,79,True,90,None,79,14.98,False,0,100,264.63,False,Complete,False,None,False,1567407600,202.34,0.0,None,32,False,65.0,50,51.5,28.4,0.0,270,1567376710,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,23,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743223,\"2019-09-01 15:26:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.4,0.0,270,1567376769,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,24,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743224,\"2019-09-01 15:27:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,None,80,None,Disengaged,,None,False,ACSingleWireCAN,79,True,90,None,79,14.98,False,0,100,264.63,False,Complete,False,None,False,1567407600,202.34,0.0,None,32,False,65.0,50,51.5,28.4,0.0,270,1567376830,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,25,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743225,\"2019-09-01 15:28:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.4,0.0,270,1567376889,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,26,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743226,\"2019-09-01 15:29:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,None,80,None,Disengaged,,None,False,ACSingleWireCAN,79,True,90,None,79,14.98,False,0,100,264.63,False,Complete,False,None,False,1567407600,202.34,0.0,None,32,False,65.0,50,51.5,28.4,0.0,270,1567376951,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,27,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743227,\"2019-09-01 15:30:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,28.4,0.0,270,1567377009,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,83,69,None,38508.1998,6590,0,0,0,,28,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743228,\"2019-09-01 15:31:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,None,80,None,Disengaged,,None,False,ACSingleWireCAN,79,True,90,None,79,14.98,False,0,100,264.63,False,Complete,False,None,False,1567407600,202.34,0.0,None,32,False,65.0,50,51.5,None,0.0,270,1567377071,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,29,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743229,\"2019-09-01 15:32:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,None,0.0,270,1567377129,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,,30,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743230,\"2019-09-01 15:33:10\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,None,80,None,Disengaged,,None,False,ACSingleWireCAN,79,True,90,None,79,14.98,False,0,100,264.63,False,Complete,False,None,False,1567407600,202.34,0.0,None,32,False,65.0,50,51.5,None,0.0,270,1567377189,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,None,None,None,38508.1998,6590,0,0,0,False,-15,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743231,\"2019-09-01 15:34:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743232,\"2019-09-01 15:35:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743233,\"2019-09-01 15:36:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743234,\"2019-09-01 15:37:10\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743235,\"2019-09-01 15:38:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743236,\"2019-09-01 15:39:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743237,\"2019-09-01 15:40:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743238,\"2019-09-01 15:41:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743239,\"2019-09-01 15:42:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743240,\"2019-09-01 15:43:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743241,\"2019-09-01 15:44:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743242,\"2019-09-01 15:45:11\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743243,\"2019-09-01 15:46:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743244,\"2019-09-01 15:47:12\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743245,\"2019-09-01 15:48:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743246,\"2019-09-01 15:49:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743247,\"2019-09-01 15:50:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743248,\"2019-09-01 15:51:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743249,\"2019-09-01 15:52:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743250,\"2019-09-01 15:53:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743251,\"2019-09-01 15:54:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743252,\"2019-09-01 15:55:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743253,\"2019-09-01 15:56:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743254,\"2019-09-01 15:57:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743255,\"2019-09-01 15:58:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743256,\"2019-09-01 15:59:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743257,\"2019-09-01 16:00:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743258,\"2019-09-01 16:01:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743259,\"2019-09-01 16:02:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743260,\"2019-09-01 16:03:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743261,\"2019-09-01 16:04:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743262,\"2019-09-01 16:05:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743263,\"2019-09-01 16:06:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743264,\"2019-09-01 16:07:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743265,\"2019-09-01 16:08:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743266,\"2019-09-01 16:09:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743267,\"2019-09-01 16:10:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743268,\"2019-09-01 16:11:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743269,\"2019-09-01 16:12:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743270,\"2019-09-01 16:13:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743271,\"2019-09-01 16:14:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743272,\"2019-09-01 16:15:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743273,\"2019-09-01 16:16:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743274,\"2019-09-01 16:17:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743275,\"2019-09-01 16:18:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743276,\"2019-09-01 16:19:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743277,\"2019-09-01 16:20:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743278,\"2019-09-01 16:21:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743279,\"2019-09-01 16:22:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743280,\"2019-09-01 16:23:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743281,\"2019-09-01 16:24:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743282,\"2019-09-01 16:25:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743283,\"2019-09-01 16:26:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743284,\"2019-09-01 16:27:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743285,\"2019-09-01 16:28:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743286,\"2019-09-01 16:29:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743287,\"2019-09-01 16:30:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743288,\"2019-09-01 16:31:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743289,\"2019-09-01 16:32:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743290,\"2019-09-01 16:33:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,27.3,0.0,270,1567380820,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,81,69,None,38508.1998,6591,3444,0,0,,0,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743291,\"2019-09-01 16:34:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,None,80,None,Engaged,,None,False,ACSingleWireCAN,79,True,90,None,79,14.98,True,0,100,264.63,False,Complete,None,None,False,1567407600,202.34,0.0,None,32,False,65.0,50,51.5,27.3,0.0,270,1567380851,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,81,69,None,38508.1998,6591,0,0,0,,1,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743292,\"2019-09-01 16:35:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,27.3,0.0,270,1567380910,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,81,69,None,38508.1998,6591,0,0,0,,2,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743293,\"2019-09-01 16:36:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,27.3,0.0,270,1567380970,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,81,69,None,38508.1998,6591,0,0,0,,3,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743294,\"2019-09-01 16:37:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,27.3,0.0,270,1567381030,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,81,69,None,38508.1998,6591,0,0,0,,4,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n1743295,\"2019-09-01 16:38:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,32,False,False,None,False,None,209.88,0,80,None,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0.0,0,32,False,65.0,50,51.5,27.3,0.0,270,1567381090,0.0,None,None,,,0,21.1,None,21.1,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,38508.199878,False,0,,None,,False,True,0,0,None,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,\"2019.28.3.1 f9e95acd\",,,81,69,None,38508.1998,6591,0,0,0,,5,0,0,265.99,None,28.0,False,None,15.0,1,0,,,,\n"
  },
  {
    "path": "test/fixtures/import/03_empty/TeslaFi52018.csv",
    "content": "﻿data_id,Date,calendar_enabled,remote_start_enabled,vehicle_id,display_name,color,backseat_token,notifications_enabled,vin,backseat_token_updated_at,id,tokens,id_s,state,user_charge_enable_request,time_to_full_charge,charge_current_request,charge_enable_request,charge_to_max_range,charger_phases,battery_heater_on,managed_charging_start_time,battery_range,charger_power,charge_limit_soc,charger_pilot_current,charge_port_latch,battery_current,charger_actual_current,scheduled_charging_pending,fast_charger_type,usable_battery_level,motorized_charge_port,charge_limit_soc_std,not_enough_power_to_heat,battery_level,charge_energy_added,charge_port_door_open,max_range_charge_counter,charge_limit_soc_max,ideal_battery_range,managed_charging_active,charging_state,fast_charger_present,trip_charging,managed_charging_user_canceled,scheduled_charging_start_time,est_battery_range,charge_rate,charger_voltage,charge_current_request_max,eu_vehicle,charge_miles_added_ideal,charge_limit_soc_min,charge_miles_added_rated,inside_temp,longitude,heading,gps_as_of,latitude,speed,shift_state,seat_heater_rear_right,seat_heater_rear_left_back,seat_heater_left,passenger_temp_setting,is_auto_conditioning_on,driver_temp_setting,outside_temp,seat_heater_rear_center,is_rear_defroster_on,seat_heater_rear_right_back,smart_preconditioning,seat_heater_right,fan_status,is_front_defroster_on,seat_heater_rear_left,gui_charge_rate_units,gui_24_hour_time,gui_temperature_units,gui_range_display,gui_distance_units,sun_roof_installed,rhd,remote_start_supported,homelink_nearby,parsed_calendar_supported,spoiler_type,ft,odometer,remote_start,pr,has_spoiler,roof_color,perf_config,valet_mode,calendar_supported,pf,sun_roof_percent_open,third_row_seats,seat_type,api_version,rear_seat_heaters,rt,exterior_color,df,autopark_state,sun_roof_state,notifications_supported,vehicle_name,dr,autopark_style,car_type,wheel_type,locked,center_display_state,last_autopark_error,car_version,dark_rims,autopark_state_v2,inside_tempF,driver_temp_settingF,outside_tempF,odometerF,idleNumber,sleepNumber,driveNumber,chargeNumber,polling,idleTime,running,rerunning,maxRange,left_temp_direction,max_avail_temp,is_climate_on,right_temp_direction,min_avail_temp,rear_seat_type,power,steering_wheel_heater,wiper_blade_heater,side_mirror_heaters,elevation\n1001381,\"2018-05-01 00:00:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2073,0,0,,0,0,0,262.5,,,,,,,,,,,\n1001382,\"2018-05-01 00:01:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2073,0,0,,0,0,0,262.5,,,,,,,,,,,\n1001383,\"2018-05-01 00:02:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2073,0,0,,0,0,0,262.5,,,,,,,,,,,\n1001384,\"2018-05-01 00:03:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2073,0,0,,0,0,0,262.5,,,,,,,,,,,\n1001385,\"2018-05-01 00:04:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2073,0,0,,0,0,0,262.5,,,,,,,,,,,\n1001386,\"2018-05-01 00:05:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2073,0,0,,0,0,0,262.5,,,,,,,,,,,\n1001387,\"2018-05-01 00:06:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2073,0,0,,0,0,0,262.5,,,,,,,,,,,\n1001388,\"2018-05-01 00:07:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2073,0,0,,0,0,0,262.5,,,,,,,,,,,\n1001389,\"2018-05-01 00:08:17\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2073,0,0,,0,0,0,262.5,,,,,,,,,,,\n"
  },
  {
    "path": "test/fixtures/import/03_empty/TeslaFi62018.csv",
    "content": "﻿data_id,Date,calendar_enabled,remote_start_enabled,vehicle_id,display_name,color,backseat_token,notifications_enabled,vin,backseat_token_updated_at,id,tokens,id_s,state,user_charge_enable_request,time_to_full_charge,charge_current_request,charge_enable_request,charge_to_max_range,charger_phases,battery_heater_on,managed_charging_start_time,battery_range,charger_power,charge_limit_soc,charger_pilot_current,charge_port_latch,battery_current,charger_actual_current,scheduled_charging_pending,fast_charger_type,usable_battery_level,motorized_charge_port,charge_limit_soc_std,not_enough_power_to_heat,battery_level,charge_energy_added,charge_port_door_open,max_range_charge_counter,charge_limit_soc_max,ideal_battery_range,managed_charging_active,charging_state,fast_charger_present,trip_charging,managed_charging_user_canceled,scheduled_charging_start_time,est_battery_range,charge_rate,charger_voltage,charge_current_request_max,eu_vehicle,charge_miles_added_ideal,charge_limit_soc_min,charge_miles_added_rated,inside_temp,longitude,heading,gps_as_of,latitude,speed,shift_state,seat_heater_rear_right,seat_heater_rear_left_back,seat_heater_left,passenger_temp_setting,is_auto_conditioning_on,driver_temp_setting,outside_temp,seat_heater_rear_center,is_rear_defroster_on,seat_heater_rear_right_back,smart_preconditioning,seat_heater_right,fan_status,is_front_defroster_on,seat_heater_rear_left,gui_charge_rate_units,gui_24_hour_time,gui_temperature_units,gui_range_display,gui_distance_units,sun_roof_installed,rhd,remote_start_supported,homelink_nearby,parsed_calendar_supported,spoiler_type,ft,odometer,remote_start,pr,has_spoiler,roof_color,perf_config,valet_mode,calendar_supported,pf,sun_roof_percent_open,third_row_seats,seat_type,api_version,rear_seat_heaters,rt,exterior_color,df,autopark_state,sun_roof_state,notifications_supported,vehicle_name,dr,autopark_style,car_type,wheel_type,locked,center_display_state,last_autopark_error,car_version,dark_rims,autopark_state_v2,inside_tempF,driver_temp_settingF,outside_tempF,odometerF,idleNumber,sleepNumber,driveNumber,chargeNumber,polling,idleTime,running,rerunning,maxRange,left_temp_direction,max_avail_temp,is_climate_on,right_temp_direction,min_avail_temp,rear_seat_type,power,steering_wheel_heater,wiper_blade_heater,side_mirror_heaters,elevation\n1047312,\"2018-06-01 00:00:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047313,\"2018-06-01 00:01:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047314,\"2018-06-01 00:02:16\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047315,\"2018-06-01 00:03:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047316,\"2018-06-01 00:04:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047317,\"2018-06-01 00:05:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047318,\"2018-06-01 00:06:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047319,\"2018-06-01 00:07:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047320,\"2018-06-01 00:08:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047321,\"2018-06-01 00:09:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047322,\"2018-06-01 00:10:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047323,\"2018-06-01 00:11:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047324,\"2018-06-01 00:12:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047325,\"2018-06-01 00:13:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047326,\"2018-06-01 00:14:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047327,\"2018-06-01 00:15:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047328,\"2018-06-01 00:16:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047329,\"2018-06-01 00:17:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047330,\"2018-06-01 00:18:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047331,\"2018-06-01 00:19:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047332,\"2018-06-01 00:20:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047333,\"2018-06-01 00:21:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047334,\"2018-06-01 00:22:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047335,\"2018-06-01 00:23:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047336,\"2018-06-01 00:24:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047337,\"2018-06-01 00:25:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047338,\"2018-06-01 00:26:15\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047339,\"2018-06-01 00:27:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047340,\"2018-06-01 00:28:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047341,\"2018-06-01 00:29:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047342,\"2018-06-01 00:30:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047343,\"2018-06-01 00:31:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047344,\"2018-06-01 00:32:15\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047345,\"2018-06-01 00:33:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047346,\"2018-06-01 00:34:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047347,\"2018-06-01 00:35:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047348,\"2018-06-01 00:36:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047349,\"2018-06-01 00:37:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047350,\"2018-06-01 00:38:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047351,\"2018-06-01 00:39:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047352,\"2018-06-01 00:40:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047353,\"2018-06-01 00:41:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047354,\"2018-06-01 00:42:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047355,\"2018-06-01 00:43:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047356,\"2018-06-01 00:44:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047357,\"2018-06-01 00:45:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047358,\"2018-06-01 00:46:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047359,\"2018-06-01 00:47:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047360,\"2018-06-01 00:48:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047361,\"2018-06-01 00:49:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047362,\"2018-06-01 00:50:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047363,\"2018-06-01 00:51:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047364,\"2018-06-01 00:52:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047365,\"2018-06-01 00:53:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047366,\"2018-06-01 00:54:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047367,\"2018-06-01 00:55:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047368,\"2018-06-01 00:56:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047369,\"2018-06-01 00:57:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047370,\"2018-06-01 00:58:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047371,\"2018-06-01 00:59:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047372,\"2018-06-01 01:00:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047373,\"2018-06-01 01:01:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047374,\"2018-06-01 01:02:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047375,\"2018-06-01 01:03:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047376,\"2018-06-01 01:04:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047377,\"2018-06-01 01:05:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047378,\"2018-06-01 01:06:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047379,\"2018-06-01 01:07:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047380,\"2018-06-01 01:08:15\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047381,\"2018-06-01 01:09:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047382,\"2018-06-01 01:10:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047383,\"2018-06-01 01:11:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047384,\"2018-06-01 01:12:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047385,\"2018-06-01 01:13:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047386,\"2018-06-01 01:14:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047387,\"2018-06-01 01:15:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047388,\"2018-06-01 01:16:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047389,\"2018-06-01 01:17:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047390,\"2018-06-01 01:18:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047391,\"2018-06-01 01:19:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047392,\"2018-06-01 01:20:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047393,\"2018-06-01 01:21:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047394,\"2018-06-01 01:22:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047395,\"2018-06-01 01:23:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047396,\"2018-06-01 01:24:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047397,\"2018-06-01 01:25:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047398,\"2018-06-01 01:26:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047399,\"2018-06-01 01:27:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047400,\"2018-06-01 01:28:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047401,\"2018-06-01 01:29:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047402,\"2018-06-01 01:30:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047403,\"2018-06-01 01:31:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047404,\"2018-06-01 01:32:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047405,\"2018-06-01 01:33:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047406,\"2018-06-01 01:34:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047407,\"2018-06-01 01:35:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047408,\"2018-06-01 01:36:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047409,\"2018-06-01 01:37:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047410,\"2018-06-01 01:38:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047411,\"2018-06-01 01:39:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047412,\"2018-06-01 01:40:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047413,\"2018-06-01 01:41:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047414,\"2018-06-01 01:42:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047415,\"2018-06-01 01:43:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047416,\"2018-06-01 01:44:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047417,\"2018-06-01 01:45:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047418,\"2018-06-01 01:46:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047419,\"2018-06-01 01:47:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047420,\"2018-06-01 01:48:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047421,\"2018-06-01 01:49:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047422,\"2018-06-01 01:50:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047423,\"2018-06-01 01:51:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047424,\"2018-06-01 01:52:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047425,\"2018-06-01 01:53:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047426,\"2018-06-01 01:54:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047427,\"2018-06-01 01:55:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047428,\"2018-06-01 01:56:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047429,\"2018-06-01 01:57:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047430,\"2018-06-01 01:58:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047431,\"2018-06-01 01:59:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047432,\"2018-06-01 02:00:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047433,\"2018-06-01 02:01:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047434,\"2018-06-01 02:02:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047435,\"2018-06-01 02:03:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047436,\"2018-06-01 02:04:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047437,\"2018-06-01 02:05:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047438,\"2018-06-01 02:06:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047439,\"2018-06-01 02:07:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047440,\"2018-06-01 02:08:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047441,\"2018-06-01 02:09:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047442,\"2018-06-01 02:10:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047443,\"2018-06-01 02:11:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047444,\"2018-06-01 02:12:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047445,\"2018-06-01 02:13:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047446,\"2018-06-01 02:14:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047447,\"2018-06-01 02:15:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047448,\"2018-06-01 02:16:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047449,\"2018-06-01 02:17:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047450,\"2018-06-01 02:18:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047451,\"2018-06-01 02:19:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047452,\"2018-06-01 02:20:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047453,\"2018-06-01 02:21:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047454,\"2018-06-01 02:22:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047455,\"2018-06-01 02:23:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047456,\"2018-06-01 02:24:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047457,\"2018-06-01 02:25:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047458,\"2018-06-01 02:26:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047459,\"2018-06-01 02:27:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047460,\"2018-06-01 02:28:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047461,\"2018-06-01 02:29:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047462,\"2018-06-01 02:30:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047463,\"2018-06-01 02:31:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047464,\"2018-06-01 02:32:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047465,\"2018-06-01 02:33:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047466,\"2018-06-01 02:34:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047467,\"2018-06-01 02:35:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047468,\"2018-06-01 02:36:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047469,\"2018-06-01 02:37:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047470,\"2018-06-01 02:38:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047471,\"2018-06-01 02:39:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047472,\"2018-06-01 02:40:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047473,\"2018-06-01 02:41:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047474,\"2018-06-01 02:42:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047475,\"2018-06-01 02:43:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047476,\"2018-06-01 02:44:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047477,\"2018-06-01 02:45:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047478,\"2018-06-01 02:46:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047479,\"2018-06-01 02:47:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047480,\"2018-06-01 02:48:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047481,\"2018-06-01 02:49:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047482,\"2018-06-01 02:50:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047483,\"2018-06-01 02:51:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047484,\"2018-06-01 02:52:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047485,\"2018-06-01 02:53:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047486,\"2018-06-01 02:54:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047487,\"2018-06-01 02:55:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047488,\"2018-06-01 02:56:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047489,\"2018-06-01 02:57:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047490,\"2018-06-01 02:58:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047491,\"2018-06-01 02:59:15\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047492,\"2018-06-01 03:00:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047493,\"2018-06-01 03:01:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047494,\"2018-06-01 03:02:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047495,\"2018-06-01 03:03:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047496,\"2018-06-01 03:04:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047497,\"2018-06-01 03:05:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047498,\"2018-06-01 03:06:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047499,\"2018-06-01 03:07:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047500,\"2018-06-01 03:08:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047501,\"2018-06-01 03:09:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047502,\"2018-06-01 03:10:15\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047503,\"2018-06-01 03:11:15\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047504,\"2018-06-01 03:12:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047505,\"2018-06-01 03:13:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047506,\"2018-06-01 03:14:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047507,\"2018-06-01 03:15:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047508,\"2018-06-01 03:16:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047509,\"2018-06-01 03:17:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047510,\"2018-06-01 03:18:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047511,\"2018-06-01 03:19:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047512,\"2018-06-01 03:20:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047513,\"2018-06-01 03:21:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047514,\"2018-06-01 03:22:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047515,\"2018-06-01 03:23:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047516,\"2018-06-01 03:24:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047517,\"2018-06-01 03:25:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047518,\"2018-06-01 03:26:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047519,\"2018-06-01 03:27:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047520,\"2018-06-01 03:28:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047521,\"2018-06-01 03:29:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047522,\"2018-06-01 03:30:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047523,\"2018-06-01 03:31:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047524,\"2018-06-01 03:32:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047525,\"2018-06-01 03:33:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047526,\"2018-06-01 03:34:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047527,\"2018-06-01 03:35:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047528,\"2018-06-01 03:36:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047529,\"2018-06-01 03:37:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047530,\"2018-06-01 03:38:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047531,\"2018-06-01 03:39:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047532,\"2018-06-01 03:40:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047533,\"2018-06-01 03:41:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047534,\"2018-06-01 03:42:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047535,\"2018-06-01 03:43:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047536,\"2018-06-01 03:44:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047537,\"2018-06-01 03:45:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047538,\"2018-06-01 03:46:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047539,\"2018-06-01 03:47:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047540,\"2018-06-01 03:48:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047541,\"2018-06-01 03:49:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047542,\"2018-06-01 03:50:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047543,\"2018-06-01 03:51:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047544,\"2018-06-01 03:52:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047545,\"2018-06-01 03:53:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047546,\"2018-06-01 03:54:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047547,\"2018-06-01 03:55:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047548,\"2018-06-01 03:56:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047549,\"2018-06-01 03:57:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047550,\"2018-06-01 03:58:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047551,\"2018-06-01 03:59:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047552,\"2018-06-01 04:00:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047553,\"2018-06-01 04:01:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047554,\"2018-06-01 04:02:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047555,\"2018-06-01 04:03:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047556,\"2018-06-01 04:04:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047557,\"2018-06-01 04:05:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047558,\"2018-06-01 04:06:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047559,\"2018-06-01 04:07:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047560,\"2018-06-01 04:08:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047561,\"2018-06-01 04:09:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047562,\"2018-06-01 04:10:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047563,\"2018-06-01 04:11:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047564,\"2018-06-01 04:12:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047565,\"2018-06-01 04:13:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047566,\"2018-06-01 04:14:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047567,\"2018-06-01 04:15:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047568,\"2018-06-01 04:16:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047569,\"2018-06-01 04:17:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047570,\"2018-06-01 04:18:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047571,\"2018-06-01 04:19:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047572,\"2018-06-01 04:20:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047573,\"2018-06-01 04:21:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047574,\"2018-06-01 04:22:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047575,\"2018-06-01 04:23:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047576,\"2018-06-01 04:24:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047577,\"2018-06-01 04:25:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047578,\"2018-06-01 04:26:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047579,\"2018-06-01 04:27:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047580,\"2018-06-01 04:28:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047581,\"2018-06-01 04:29:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047582,\"2018-06-01 04:30:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047583,\"2018-06-01 04:31:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047584,\"2018-06-01 04:32:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047585,\"2018-06-01 04:33:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047586,\"2018-06-01 04:34:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047587,\"2018-06-01 04:35:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047588,\"2018-06-01 04:36:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047589,\"2018-06-01 04:37:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047590,\"2018-06-01 04:38:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047591,\"2018-06-01 04:39:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047592,\"2018-06-01 04:40:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047593,\"2018-06-01 04:41:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047594,\"2018-06-01 04:42:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047595,\"2018-06-01 04:43:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047596,\"2018-06-01 04:44:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047597,\"2018-06-01 04:45:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047598,\"2018-06-01 04:46:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047599,\"2018-06-01 04:47:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047600,\"2018-06-01 04:48:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047601,\"2018-06-01 04:49:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047602,\"2018-06-01 04:50:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047603,\"2018-06-01 04:51:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047604,\"2018-06-01 04:52:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047605,\"2018-06-01 04:53:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047606,\"2018-06-01 04:54:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047607,\"2018-06-01 04:55:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047608,\"2018-06-01 04:56:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047609,\"2018-06-01 04:57:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047610,\"2018-06-01 04:58:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047611,\"2018-06-01 04:59:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047612,\"2018-06-01 05:00:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047613,\"2018-06-01 05:01:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047614,\"2018-06-01 05:02:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047615,\"2018-06-01 05:03:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047616,\"2018-06-01 05:04:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047617,\"2018-06-01 05:05:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047618,\"2018-06-01 05:06:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047619,\"2018-06-01 05:07:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047620,\"2018-06-01 05:08:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047621,\"2018-06-01 05:09:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047622,\"2018-06-01 05:10:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047623,\"2018-06-01 05:11:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047624,\"2018-06-01 05:12:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047625,\"2018-06-01 05:13:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047626,\"2018-06-01 05:14:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047627,\"2018-06-01 05:15:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047628,\"2018-06-01 05:16:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047629,\"2018-06-01 05:17:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047630,\"2018-06-01 05:18:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047631,\"2018-06-01 05:19:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047632,\"2018-06-01 05:20:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047633,\"2018-06-01 05:21:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047634,\"2018-06-01 05:22:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047635,\"2018-06-01 05:23:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047636,\"2018-06-01 05:24:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047637,\"2018-06-01 05:25:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047638,\"2018-06-01 05:26:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047639,\"2018-06-01 05:27:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047640,\"2018-06-01 05:28:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047641,\"2018-06-01 05:29:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047642,\"2018-06-01 05:30:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047643,\"2018-06-01 05:31:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047644,\"2018-06-01 05:32:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047645,\"2018-06-01 05:33:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047646,\"2018-06-01 05:34:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047647,\"2018-06-01 05:35:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047648,\"2018-06-01 05:36:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047649,\"2018-06-01 05:37:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047650,\"2018-06-01 05:38:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047651,\"2018-06-01 05:39:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047652,\"2018-06-01 05:40:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047653,\"2018-06-01 05:41:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047654,\"2018-06-01 05:42:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047655,\"2018-06-01 05:43:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047656,\"2018-06-01 05:44:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047657,\"2018-06-01 05:45:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047658,\"2018-06-01 05:46:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047659,\"2018-06-01 05:47:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047660,\"2018-06-01 05:48:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047661,\"2018-06-01 05:49:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047662,\"2018-06-01 05:50:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047663,\"2018-06-01 05:51:11\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047664,\"2018-06-01 05:52:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047665,\"2018-06-01 05:53:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047666,\"2018-06-01 05:54:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047667,\"2018-06-01 05:55:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047668,\"2018-06-01 05:56:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047669,\"2018-06-01 05:57:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047670,\"2018-06-01 05:58:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047671,\"2018-06-01 05:59:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047672,\"2018-06-01 06:00:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047673,\"2018-06-01 06:01:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047674,\"2018-06-01 06:02:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047675,\"2018-06-01 06:03:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047676,\"2018-06-01 06:04:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047677,\"2018-06-01 06:05:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047678,\"2018-06-01 06:06:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047679,\"2018-06-01 06:07:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047680,\"2018-06-01 06:08:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047681,\"2018-06-01 06:09:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047682,\"2018-06-01 06:10:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047683,\"2018-06-01 06:11:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047684,\"2018-06-01 06:12:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047685,\"2018-06-01 06:13:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047686,\"2018-06-01 06:14:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047687,\"2018-06-01 06:15:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047688,\"2018-06-01 06:16:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047689,\"2018-06-01 06:17:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047690,\"2018-06-01 06:18:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047691,\"2018-06-01 06:19:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047692,\"2018-06-01 06:20:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047693,\"2018-06-01 06:21:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047694,\"2018-06-01 06:22:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047695,\"2018-06-01 06:23:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047696,\"2018-06-01 06:24:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047697,\"2018-06-01 06:25:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047698,\"2018-06-01 06:26:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047699,\"2018-06-01 06:27:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047700,\"2018-06-01 06:28:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047701,\"2018-06-01 06:29:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047702,\"2018-06-01 06:31:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047703,\"2018-06-01 06:32:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047704,\"2018-06-01 06:33:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047705,\"2018-06-01 06:34:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047706,\"2018-06-01 06:35:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047707,\"2018-06-01 06:36:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047708,\"2018-06-01 06:37:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047709,\"2018-06-01 06:38:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047710,\"2018-06-01 06:39:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047711,\"2018-06-01 06:40:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047712,\"2018-06-01 06:41:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047713,\"2018-06-01 06:42:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047714,\"2018-06-01 06:43:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047715,\"2018-06-01 06:44:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047716,\"2018-06-01 06:45:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047717,\"2018-06-01 06:46:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047718,\"2018-06-01 06:47:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047719,\"2018-06-01 06:48:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047720,\"2018-06-01 06:49:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047721,\"2018-06-01 06:50:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047722,\"2018-06-01 06:51:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047723,\"2018-06-01 06:52:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047724,\"2018-06-01 06:53:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047725,\"2018-06-01 06:54:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047726,\"2018-06-01 06:55:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047727,\"2018-06-01 06:56:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047728,\"2018-06-01 06:57:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047729,\"2018-06-01 06:58:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047730,\"2018-06-01 06:59:14\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047731,\"2018-06-01 07:00:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047732,\"2018-06-01 07:01:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047733,\"2018-06-01 07:02:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047734,\"2018-06-01 07:03:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047735,\"2018-06-01 07:04:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047736,\"2018-06-01 07:05:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047737,\"2018-06-01 07:06:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047738,\"2018-06-01 07:07:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047739,\"2018-06-01 07:08:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047740,\"2018-06-01 07:09:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047741,\"2018-06-01 07:10:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047742,\"2018-06-01 07:11:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047743,\"2018-06-01 07:12:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047744,\"2018-06-01 07:13:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047745,\"2018-06-01 07:14:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047746,\"2018-06-01 07:15:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047747,\"2018-06-01 07:16:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047748,\"2018-06-01 07:17:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047749,\"2018-06-01 07:18:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047750,\"2018-06-01 07:19:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047751,\"2018-06-01 07:20:12\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047752,\"2018-06-01 07:21:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047753,\"2018-06-01 07:22:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047754,\"2018-06-01 07:23:13\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047755,\"2018-06-01 07:24:13\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,Offline,1,0,0,264.9,,,,,,,,,,,\n1047756,\"2018-06-01 07:25:13\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,2175,0,0,,0,0,0,264.9,,,,,,,,,,,\n1047757,\"2018-06-01 07:26:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,19.4,0.0,265,1527863172,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,66,68,62,30436.7548,4071,0,0,0,,1,0,0,264.9,10,28.0,False,10,15.0,1,0,False,False,False,\n1047758,\"2018-06-01 07:27:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,19.6,0.0,265,1527863234,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,67,68,62,30436.7548,4071,0,0,0,,2,0,0,264.9,7,28.0,False,7,15.0,1,0,False,False,False,\n1047759,\"2018-06-01 07:28:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,19.6,0.0,265,1527863293,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,67,68,62,30436.7548,4071,0,0,0,,3,0,0,264.9,6,28.0,False,6,15.0,1,0,False,False,False,\n1047760,\"2018-06-01 07:29:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,19.7,0.0,265,1527863354,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,67,68,62,30436.7548,4071,0,0,0,,4,0,0,264.9,4,28.0,False,4,15.0,1,0,False,False,False,\n1047761,\"2018-06-01 07:30:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,20.0,0.0,265,1527863413,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,5,0,0,264.9,-4,28.0,False,-4,15.0,1,0,False,False,False,\n1047762,\"2018-06-01 07:31:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,20.1,0.0,265,1527863474,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,6,0,0,264.9,-7,28.0,False,-7,15.0,1,0,False,False,False,\n1047763,\"2018-06-01 07:32:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,20.1,0.0,265,1527863533,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,7,0,0,264.9,-8,28.0,False,-8,15.0,1,0,False,False,False,\n1047764,\"2018-06-01 07:33:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,20.1,0.0,265,1527863594,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,8,0,0,264.9,-8,28.0,False,-8,15.0,1,0,False,False,False,\n1047765,\"2018-06-01 07:34:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,20.1,0.0,265,1527863652,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,9,0,0,264.9,-7,28.0,False,-7,15.0,1,0,False,False,False,\n1047766,\"2018-06-01 07:35:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,20.1,0.0,265,1527863713,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,10,0,0,264.9,-9,28.0,False,-9,15.0,1,0,False,False,False,\n1047767,\"2018-06-01 07:36:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,20.2,0.0,265,1527863773,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,11,0,0,264.9,-12,28.0,False,-12,15.0,1,0,False,False,False,\n1047768,\"2018-06-01 07:37:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.98,0,70,40,Engaged,,0,False,ACSingleWireCAN,70,True,90,False,70,1.26,True,0,100,233.23,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.5,50,4.5,20.2,0.0,265,1527863833,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,12,0,0,264.9,-12,28.0,False,-12,15.0,1,0,False,False,False,\n1047769,\"2018-06-01 07:38:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.2,0.0,265,1527863893,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,13,0,0,264.9,-12,28.0,False,-12,15.0,1,0,False,False,False,\n1047770,\"2018-06-01 07:39:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.2,0.0,265,1527863953,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,14,0,0,264.9,-12,28.0,False,-12,15.0,1,0,False,False,False,\n1047771,\"2018-06-01 07:40:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.2,0.0,265,1527864013,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,15,0,0,264.9,-12,28.0,False,-12,15.0,1,0,False,False,False,\n1047772,\"2018-06-01 07:41:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.2,0.0,265,1527864073,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,16,0,0,264.9,-13,28.0,False,-13,15.0,1,0,False,False,False,\n1047773,\"2018-06-01 07:42:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.2,0.0,265,1527864132,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,17,0,0,264.9,-13,28.0,False,-13,15.0,1,0,False,False,False,\n1047774,\"2018-06-01 07:43:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864193,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,18,0,0,264.9,-16,28.0,False,-16,15.0,1,0,False,False,False,\n1047775,\"2018-06-01 07:44:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864253,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,19,0,0,264.9,-16,28.0,False,-16,15.0,1,0,False,False,False,\n1047776,\"2018-06-01 07:45:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864314,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,20,0,0,264.9,-16,28.0,False,-16,15.0,1,0,False,False,False,\n1047777,\"2018-06-01 07:46:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864372,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,21,0,0,264.9,-16,28.0,False,-16,15.0,1,0,False,False,False,\n1047778,\"2018-06-01 07:47:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864433,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,22,0,0,264.9,-16,28.0,False,-16,15.0,1,0,False,False,False,\n1047779,\"2018-06-01 07:48:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864493,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,23,0,0,264.9,-17,28.0,False,-17,15.0,1,0,False,False,False,\n1047780,\"2018-06-01 07:49:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864554,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,24,0,0,264.9,-17,28.0,False,-17,15.0,1,0,False,False,False,\n1047781,\"2018-06-01 07:50:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.72,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864613,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,25,0,0,264.9,-17,28.0,False,-17,15.0,1,0,False,False,False,\n1047782,\"2018-06-01 07:51:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864674,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,26,0,0,264.9,-17,28.0,False,-17,15.0,1,0,False,False,False,\n1047783,\"2018-06-01 07:52:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864733,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,27,0,0,264.9,-17,28.0,False,-17,15.0,1,0,False,False,False,\n1047784,\"2018-06-01 07:53:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864794,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,28,0,0,264.9,-17,28.0,False,-17,15.0,1,0,False,False,False,\n1047785,\"2018-06-01 07:54:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.3,0.0,265,1527864853,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,29,0,0,264.9,-18,28.0,False,-18,15.0,1,0,False,False,False,\n1047786,\"2018-06-01 07:55:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.4,0.0,265,1527864915,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,30,0,0,264.9,-20,28.0,False,-20,15.0,1,0,False,False,False,\n1047787,\"2018-06-01 07:56:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.4,0.0,265,1527864973,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,False,-15,0,0,264.9,-20,28.0,False,-20,15.0,1,0,False,False,False,\n1047788,\"2018-06-01 07:57:15\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-14,0,0,264.9,,,,,,,,,,,\n1047789,\"2018-06-01 07:58:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-13,0,0,264.9,,,,,,,,,,,\n1047790,\"2018-06-01 07:59:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-12,0,0,264.9,,,,,,,,,,,\n1047791,\"2018-06-01 08:00:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-11,0,0,264.9,,,,,,,,,,,\n1047792,\"2018-06-01 08:01:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-10,0,0,264.9,,,,,,,,,,,\n1047793,\"2018-06-01 08:02:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-9,0,0,264.9,,,,,,,,,,,\n1047794,\"2018-06-01 08:03:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-8,0,0,264.9,,,,,,,,,,,\n1047795,\"2018-06-01 08:04:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-7,0,0,264.9,,,,,,,,,,,\n1047796,\"2018-06-01 08:05:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-6,0,0,264.9,,,,,,,,,,,\n1047797,\"2018-06-01 08:06:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-5,0,0,264.9,,,,,,,,,,,\n1047798,\"2018-06-01 08:07:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-4,0,0,264.9,,,,,,,,,,,\n1047799,\"2018-06-01 08:08:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-3,0,0,264.9,,,,,,,,,,,\n1047800,\"2018-06-01 08:09:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-2,0,0,264.9,,,,,,,,,,,\n1047801,\"2018-06-01 08:10:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-1,0,0,264.9,,,,,,,,,,,\n1047802,\"2018-06-01 08:11:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,True,0,0,0,264.9,,,,,,,,,,,\n1047803,\"2018-06-01 08:12:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.5,0.0,265,1527865934,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,1,0,0,264.9,-26,28.0,False,-26,15.0,1,0,False,False,False,\n1047804,\"2018-06-01 08:13:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.5,0.0,265,1527865993,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,2,0,0,264.9,-26,28.0,False,-26,15.0,1,0,False,False,False,\n1047805,\"2018-06-01 08:14:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.5,0.0,265,1527866054,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,3,0,0,264.9,-27,28.0,False,-27,15.0,1,0,False,False,False,\n1047806,\"2018-06-01 08:15:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.5,0.0,265,1527866113,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,4,0,0,264.9,-27,28.0,False,-27,15.0,1,0,False,False,False,\n1047807,\"2018-06-01 08:16:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.5,0.0,265,1527866173,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,5,0,0,264.9,-27,28.0,False,-27,15.0,1,0,False,False,False,\n1047808,\"2018-06-01 08:17:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.61,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.16,True,0,100,232.77,False,Complete,False,False,False,None,162.4,0.0,0,40,False,5.0,50,4.0,20.5,0.0,265,1527866233,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,6,0,0,264.9,-28,28.0,False,-28,15.0,1,0,False,False,False,\n1047809,\"2018-06-01 08:18:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527866294,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,7,0,0,264.9,-26,28.0,False,-26,15.0,1,0,False,False,False,\n1047810,\"2018-06-01 08:19:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527866353,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,8,0,0,264.9,-27,28.0,False,-27,15.0,1,0,False,False,False,\n1047811,\"2018-06-01 08:20:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527866413,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,9,0,0,264.9,-26,28.0,False,-26,15.0,1,0,False,False,False,\n1047812,\"2018-06-01 08:21:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.6,0.0,265,1527866473,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,10,0,0,264.9,-31,28.0,False,-31,15.0,1,0,False,False,False,\n1047813,\"2018-06-01 08:22:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527866534,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,11,0,0,264.9,-28,28.0,False,-28,15.0,1,0,False,False,False,\n1047814,\"2018-06-01 08:23:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.6,0.0,265,1527866592,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,12,0,0,264.9,-32,28.0,False,-32,15.0,1,0,False,False,False,\n1047815,\"2018-06-01 08:24:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527866654,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,13,0,0,264.9,-27,28.0,False,-27,15.0,1,0,False,False,False,\n1047816,\"2018-06-01 08:25:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527866713,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,14,0,0,264.9,-28,28.0,False,-28,15.0,1,0,False,False,False,\n1047817,\"2018-06-01 08:26:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527866773,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,15,0,0,264.9,-27,28.0,False,-27,15.0,1,0,False,False,False,\n1047818,\"2018-06-01 08:27:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527866832,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,16,0,0,264.9,-29,28.0,False,-29,15.0,1,0,False,False,False,\n1047819,\"2018-06-01 08:28:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527866893,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,17,0,0,264.9,-29,28.0,False,-29,15.0,1,0,False,False,False,\n1047820,\"2018-06-01 08:29:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527866953,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,18,0,0,264.9,-28,28.0,False,-28,15.0,1,0,False,False,False,\n1047821,\"2018-06-01 08:30:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527867014,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,19,0,0,264.9,-28,28.0,False,-28,15.0,1,0,False,False,False,\n1047822,\"2018-06-01 08:31:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527867074,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,20,0,0,264.9,-29,28.0,False,-29,15.0,1,0,False,False,False,\n1047823,\"2018-06-01 08:32:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.6,0.0,265,1527867132,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,21,0,0,264.9,-33,28.0,False,-33,15.0,1,0,False,False,False,\n1047824,\"2018-06-01 08:33:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527867191,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,22,0,0,264.9,-30,28.0,False,-30,15.0,1,0,False,False,False,\n1047825,\"2018-06-01 08:34:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527867253,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,23,0,0,264.9,-30,28.0,False,-30,15.0,1,0,False,False,False,\n1047826,\"2018-06-01 08:35:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.6,0.0,265,1527867312,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,24,0,0,264.9,-34,28.0,False,-34,15.0,1,0,False,False,False,\n1047827,\"2018-06-01 08:36:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.6,0.0,265,1527867373,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,25,0,0,264.9,-34,28.0,False,-34,15.0,1,0,False,False,False,\n1047828,\"2018-06-01 08:37:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527867432,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,26,0,0,264.9,-29,28.0,False,-29,15.0,1,0,False,False,False,\n1047829,\"2018-06-01 08:38:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.4,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527867493,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,27,0,0,264.9,-29,28.0,False,-29,15.0,1,0,False,False,False,\n1047830,\"2018-06-01 08:39:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527867552,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,28,0,0,264.9,-32,28.0,False,-32,15.0,1,0,False,False,False,\n1047831,\"2018-06-01 08:40:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527867613,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,29,0,0,264.9,-31,28.0,False,-31,15.0,1,0,False,False,False,\n1047832,\"2018-06-01 08:41:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527867671,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,30,0,0,264.9,-31,28.0,False,-31,15.0,1,0,False,False,False,\n1047833,\"2018-06-01 08:42:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527867732,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,False,-15,0,0,264.9,-32,28.0,False,-32,15.0,1,0,False,False,False,\n1047834,\"2018-06-01 08:43:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-14,0,0,264.9,,,,,,,,,,,\n1047835,\"2018-06-01 08:44:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-13,0,0,264.9,,,,,,,,,,,\n1047836,\"2018-06-01 08:45:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-12,0,0,264.9,,,,,,,,,,,\n1047837,\"2018-06-01 08:46:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-11,0,0,264.9,,,,,,,,,,,\n1047838,\"2018-06-01 08:47:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-10,0,0,264.9,,,,,,,,,,,\n1047839,\"2018-06-01 08:48:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-9,0,0,264.9,,,,,,,,,,,\n1047840,\"2018-06-01 08:49:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-8,0,0,264.9,,,,,,,,,,,\n1047841,\"2018-06-01 08:50:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-7,0,0,264.9,,,,,,,,,,,\n1047842,\"2018-06-01 08:51:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-6,0,0,264.9,,,,,,,,,,,\n1047843,\"2018-06-01 08:52:13\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-5,0,0,264.9,,,,,,,,,,,\n1047844,\"2018-06-01 08:53:13\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-4,0,0,264.9,,,,,,,,,,,\n1047845,\"2018-06-01 08:54:13\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-3,0,0,264.9,,,,,,,,,,,\n1047846,\"2018-06-01 08:55:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-2,0,0,264.9,,,,,,,,,,,\n1047847,\"2018-06-01 08:56:13\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-1,0,0,264.9,,,,,,,,,,,\n1047848,\"2018-06-01 08:57:13\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,True,0,0,0,264.9,,,,,,,,,,,\n1047849,\"2018-06-01 08:58:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527868693,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,1,0,0,264.9,-33,28.0,False,-33,15.0,1,0,False,False,False,\n1047850,\"2018-06-01 08:59:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527868752,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,2,0,0,264.9,-33,28.0,False,-33,15.0,1,0,False,False,False,\n1047851,\"2018-06-01 09:00:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527868813,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,3,0,0,264.9,-33,28.0,False,-33,15.0,1,0,False,False,False,\n1047852,\"2018-06-01 09:01:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527868871,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,4,0,0,264.9,-33,28.0,False,-33,15.0,1,0,False,False,False,\n1047853,\"2018-06-01 09:02:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527868932,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,5,0,0,264.9,-34,28.0,False,-34,15.0,1,0,False,False,False,\n1047854,\"2018-06-01 09:03:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527868992,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,6,0,0,264.9,-34,28.0,False,-34,15.0,1,0,False,False,False,\n1047855,\"2018-06-01 09:04:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.6,0.0,265,1527869052,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,7,0,0,264.9,-34,28.0,False,-34,15.0,1,0,False,False,False,\n1047856,\"2018-06-01 09:05:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527869113,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,8,0,0,264.9,-34,28.0,False,-34,15.0,1,0,False,False,False,\n1047857,\"2018-06-01 09:06:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527869174,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,9,0,0,264.9,-34,28.0,False,-34,15.0,1,0,False,False,False,\n1047858,\"2018-06-01 09:07:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527869233,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,10,0,0,264.9,-34,28.0,False,-34,15.0,1,0,False,False,False,\n1047859,\"2018-06-01 09:08:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527869294,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,11,0,0,264.9,-34,28.0,False,-34,15.0,1,0,False,False,False,\n1047860,\"2018-06-01 09:09:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527869353,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,12,0,0,264.9,-35,28.0,False,-35,15.0,1,0,False,False,False,\n1047861,\"2018-06-01 09:10:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527869414,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,13,0,0,264.9,-35,28.0,False,-35,15.0,1,0,False,False,False,\n1047862,\"2018-06-01 09:11:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527869473,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,14,0,0,264.9,-35,28.0,False,-35,15.0,1,0,False,False,False,\n1047863,\"2018-06-01 09:12:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.6,0.0,265,1527869533,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,15,0,0,264.9,-36,28.0,False,-36,15.0,1,0,False,False,False,\n1047864,\"2018-06-01 09:13:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527869592,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,16,0,0,264.9,-35,28.0,False,-35,15.0,1,0,False,False,False,\n1047865,\"2018-06-01 09:14:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,184.25,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,1.05,True,0,100,232.32,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.5,50,3.5,20.5,0.0,265,1527869653,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,17,0,0,264.9,-35,28.0,False,-35,15.0,1,0,False,False,False,\n1047866,\"2018-06-01 09:15:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.5,0.0,265,1527869712,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,18,0,0,264.9,-36,28.0,False,-36,15.0,1,0,False,False,False,\n1047867,\"2018-06-01 09:16:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.5,0.0,265,1527869772,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,19,0,0,264.9,-35,28.0,False,-35,15.0,1,0,False,False,False,\n1047868,\"2018-06-01 09:17:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.6,0.0,265,1527869831,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,20,0,0,264.9,-37,28.0,False,-37,15.0,1,0,False,False,False,\n1047869,\"2018-06-01 09:18:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.5,0.0,265,1527869892,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,21,0,0,264.9,-36,28.0,False,-36,15.0,1,0,False,False,False,\n1047870,\"2018-06-01 09:19:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.5,0.0,265,1527869950,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,22,0,0,264.9,-36,28.0,False,-36,15.0,1,0,False,False,False,\n1047871,\"2018-06-01 09:20:11\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.6,0.0,265,1527870011,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,23,0,0,264.9,-38,28.0,False,-38,15.0,1,0,False,False,False,\n1047872,\"2018-06-01 09:21:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.5,0.0,265,1527870070,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,24,0,0,264.9,-37,28.0,False,-37,15.0,1,0,False,False,False,\n1047873,\"2018-06-01 09:22:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.5,0.0,265,1527870132,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,25,0,0,264.9,-37,28.0,False,-37,15.0,1,0,False,False,False,\n1047874,\"2018-06-01 09:23:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.5,0.0,265,1527870191,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,26,0,0,264.9,-37,28.0,False,-37,15.0,1,0,False,False,False,\n1047875,\"2018-06-01 09:24:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.5,0.0,265,1527870252,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,27,0,0,264.9,-37,28.0,False,-37,15.0,1,0,False,False,False,\n1047876,\"2018-06-01 09:25:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,70,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.5,0.0,265,1527870311,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,28,0,0,264.9,-37,28.0,False,-37,15.0,1,0,False,False,False,\n1047877,\"2018-06-01 09:26:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.5,0.0,265,1527870371,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,,29,0,0,264.9,-37,28.0,False,-37,15.0,1,0,False,False,False,\n1047878,\"2018-06-01 09:27:12\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.7,0.0,265,1527870431,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,30,0,0,264.9,-41,28.0,False,-41,15.0,1,0,False,False,False,\n1047879,\"2018-06-01 09:28:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,162.08,0.0,0,40,False,4.0,50,3.5,20.5,0.0,265,1527870492,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,68,68,62,30436.7548,4071,0,0,0,False,-15,0,0,264.9,-38,28.0,False,-38,15.0,1,0,False,False,False,\n1047880,\"2018-06-01 09:29:13\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-14,0,0,264.9,,,,,,,,,,,\n1047881,\"2018-06-01 09:31:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-13,0,0,264.9,,,,,,,,,,,\n1047882,\"2018-06-01 09:32:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-12,0,0,264.9,,,,,,,,,,,\n1047883,\"2018-06-01 09:33:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-11,0,0,264.9,,,,,,,,,,,\n1047884,\"2018-06-01 09:34:15\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-10,0,0,264.9,,,,,,,,,,,\n1047885,\"2018-06-01 09:35:15\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-9,0,0,264.9,,,,,,,,,,,\n1047886,\"2018-06-01 09:36:15\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-8,0,0,264.9,,,,,,,,,,,\n1047887,\"2018-06-01 09:37:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-7,0,0,264.9,,,,,,,,,,,\n1047888,\"2018-06-01 09:38:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-6,0,0,264.9,,,,,,,,,,,\n1047889,\"2018-06-01 09:39:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-5,0,0,264.9,,,,,,,,,,,\n1047890,\"2018-06-01 09:40:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-4,0,0,264.9,,,,,,,,,,,\n1047891,\"2018-06-01 09:41:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-3,0,0,264.9,,,,,,,,,,,\n1047892,\"2018-06-01 09:42:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-2,0,0,264.9,,,,,,,,,,,\n1047893,\"2018-06-01 09:43:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,False,-1,0,0,264.9,,,,,,,,,,,\n1047894,\"2018-06-01 09:44:14\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4071,0,0,0,True,0,0,0,264.9,,,,,,,,,,,\n1047895,\"2018-06-01 09:45:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.9,0.0,265,1527871514,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,1,0,0,264.9,-52,28.0,False,-52,15.0,1,0,False,False,False,\n1047896,\"2018-06-01 09:46:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.9,0.0,265,1527871573,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,2,0,0,264.9,-53,28.0,False,-53,15.0,1,0,False,False,False,\n1047897,\"2018-06-01 09:47:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.9,0.0,265,1527871634,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,3,0,0,264.9,-53,28.0,False,-53,15.0,1,0,False,False,False,\n1047898,\"2018-06-01 09:48:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.8,0.0,265,1527871693,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,4,0,0,264.9,-52,28.0,False,-52,15.0,1,0,False,False,False,\n1047899,\"2018-06-01 09:49:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.9,0.0,265,1527871754,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,5,0,0,264.9,-53,28.0,False,-53,15.0,1,0,False,False,False,\n1047900,\"2018-06-01 09:50:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.9,0.0,265,1527871813,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,6,0,0,264.9,-54,28.0,False,-54,15.0,1,0,False,False,False,\n1047901,\"2018-06-01 09:51:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.9,0.0,265,1527871874,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,7,0,0,264.9,-54,28.0,False,-54,15.0,1,0,False,False,False,\n1047902,\"2018-06-01 09:52:15\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.9,0.0,265,1527871933,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,8,0,0,264.9,-55,28.0,False,-55,15.0,1,0,False,False,False,\n1047903,\"2018-06-01 09:53:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.9,0.0,265,1527871993,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,9,0,0,264.9,-55,28.0,False,-55,15.0,1,0,False,False,False,\n1047904,\"2018-06-01 09:54:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.8,0.0,265,1527872052,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,10,0,0,264.9,-53,28.0,False,-53,15.0,1,0,False,False,False,\n1047905,\"2018-06-01 09:55:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,None,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.8,0.0,265,1527872114,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,11,0,0,264.9,-53,28.0,False,-53,15.0,1,0,False,False,False,\n1047906,\"2018-06-01 09:56:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.8,0.0,265,1527872172,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,12,0,0,264.9,-53,28.0,False,-53,15.0,1,0,False,False,False,\n1047907,\"2018-06-01 09:57:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.9,0.0,265,1527872232,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,13,0,0,264.9,-56,28.0,False,-56,15.0,1,0,False,False,False,\n1047908,\"2018-06-01 09:58:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.8,0.0,265,1527872292,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,14,0,0,264.9,-54,28.0,False,-54,15.0,1,0,False,False,False,\n1047909,\"2018-06-01 09:59:13\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.8,0.0,265,1527872352,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,15,0,0,264.9,-54,28.0,False,-54,15.0,1,0,False,False,False,\n1047910,\"2018-06-01 10:01:14\",True,,1111111111,82420,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,40,True,False,None,False,None,183.89,0,70,40,Engaged,,0,False,ACSingleWireCAN,69,True,90,False,69,0.95,True,0,100,231.86,False,Complete,False,False,False,None,161.76,0.0,0,40,False,4.0,50,3.5,20.9,0.0,265,1527872478,0.0,None,None,False,0,False,20.0,False,20.0,17.0,False,False,0,False,False,0,False,False,,,,,,1,False,True,,True,None,0,30436.754849,False,0,,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,82420,0,,models,Base19,True,0,,\"2018.16 eac88a7\",,standby,69,68,62,30436.7548,4071,0,0,0,,16,0,0,264.9,-58,28.0,False,-58,15.0,1,0,False,False,False,\n"
  },
  {
    "path": "test/fixtures/import/04_error/TeslaFi110017.csv",
    "content": "﻿data_id,Date,calendar_enabled,remote_start_enabled,vehicle_id,display_name,color,backseat_token,notifications_enabled,vin,backseat_token_updated_at,id,tokens,id_s,state,user_charge_enable_request,time_to_full_charge,charge_current_request,charge_enable_request,charge_to_max_range,charger_phases,battery_heater_on,managed_charging_start_time,battery_range,charger_power,charge_limit_soc,charger_pilot_current,charge_port_latch,battery_current,charger_actual_current,scheduled_charging_pending,fast_charger_type,usable_battery_level,motorized_charge_port,charge_limit_soc_std,not_enough_power_to_heat,battery_level,charge_energy_added,charge_port_door_open,max_range_charge_counter,charge_limit_soc_max,ideal_battery_range,managed_charging_active,charging_state,fast_charger_present,trip_charging,managed_charging_user_canceled,scheduled_charging_start_time,est_battery_range,charge_rate,charger_voltage,charge_current_request_max,eu_vehicle,charge_miles_added_ideal,charge_limit_soc_min,charge_miles_added_rated,inside_temp,longitude,heading,gps_as_of,latitude,speed,shift_state,seat_heater_rear_right,seat_heater_rear_left_back,seat_heater_left,passenger_temp_setting,is_auto_conditioning_on,driver_temp_setting,outside_temp,seat_heater_rear_center,is_rear_defroster_on,seat_heater_rear_right_back,smart_preconditioning,seat_heater_right,fan_status,is_front_defroster_on,seat_heater_rear_left,gui_charge_rate_units,gui_24_hour_time,gui_temperature_units,gui_range_display,gui_distance_units,sun_roof_installed,rhd,remote_start_supported,homelink_nearby,parsed_calendar_supported,spoiler_type,ft,odometer,remote_start,pr,has_spoiler,roof_color,perf_config,valet_mode,calendar_supported,pf,sun_roof_percent_open,third_row_seats,seat_type,api_version,rear_seat_heaters,rt,exterior_color,df,autopark_state,sun_roof_state,notifications_supported,vehicle_name,dr,autopark_style,car_type,wheel_type,locked,center_display_state,last_autopark_error,car_version,dark_rims,autopark_state_v2,inside_tempF,driver_temp_settingF,outside_tempF,odometerF,idleNumber,sleepNumber,driveNumber,chargeNumber,polling,idleTime,running,rerunning,maxRange,left_temp_direction,max_avail_temp,is_climate_on,right_temp_direction,min_avail_temp,rear_seat_type,power,steering_wheel_heater,wiper_blade_heater,side_mirror_heaters,elevation\n"
  },
  {
    "path": "test/fixtures/import/04_error/TeslaFi112017.csv",
    "content": "﻿data_id,Date,calendar_enabled,remote_start_enabled,vehicle_id,display_name,color,backseat_token,notifications_enabled,vin,backseat_token_updated_at,id,tokens,id_s,state,user_charge_enable_request,time_to_full_charge,charge_current_request,charge_enable_request,charge_to_max_range,charger_phases,battery_heater_on,managed_charging_start_time,battery_range,charger_power,charge_limit_soc,charger_pilot_current,charge_port_latch,battery_current,charger_actual_current,scheduled_charging_pending,fast_charger_type,usable_battery_level,motorized_charge_port,charge_limit_soc_std,not_enough_power_to_heat,battery_level,charge_energy_added,charge_port_door_open,max_range_charge_counter,charge_limit_soc_max,ideal_battery_range,managed_charging_active,charging_state,fast_charger_present,trip_charging,managed_charging_user_canceled,scheduled_charging_start_time,est_battery_range,charge_rate,charger_voltage,charge_current_request_max,eu_vehicle,charge_miles_added_ideal,charge_limit_soc_min,charge_miles_added_rated,inside_temp,longitude,heading,gps_as_of,latitude,speed,shift_state,seat_heater_rear_right,seat_heater_rear_left_back,seat_heater_left,passenger_temp_setting,is_auto_conditioning_on,driver_temp_setting,outside_temp,seat_heater_rear_center,is_rear_defroster_on,seat_heater_rear_right_back,smart_preconditioning,seat_heater_right,fan_status,is_front_defroster_on,seat_heater_rear_left,gui_charge_rate_units,gui_24_hour_time,gui_temperature_units,gui_range_display,gui_distance_units,sun_roof_installed,rhd,remote_start_supported,homelink_nearby,parsed_calendar_supported,spoiler_type,ft,odometer,remote_start,pr,has_spoiler,roof_color,perf_config,valet_mode,calendar_supported,pf,sun_roof_percent_open,third_row_seats,seat_type,api_version,rear_seat_heaters,rt,exterior_color,df,autopark_state,sun_roof_state,notifications_supported,vehicle_name,dr,autopark_style,car_type,wheel_type,locked,center_display_state,last_autopark_error,car_version,dark_rims,autopark_state_v2,inside_tempF,driver_temp_settingF,outside_tempF,odometerF,idleNumber,sleepNumber,driveNumber,chargeNumber,polling,idleTime,running,rerunning,maxRange,left_temp_direction,max_avail_temp,is_climate_on,right_temp_direction,min_avail_temp,rear_seat_type,power,steering_wheel_heater,wiper_blade_heater,side_mirror_heaters,elevation\n736469,\"2017-11-01 00:00:17\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,1564,0,0,,0,0,0,262.53,,,,,,,,,,,\n736470,\"11/01/2017 00:01\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,1564,0,0,,0,0,0,262.53,,,,,,,,,,,\n736471,\"11/01/2017 11:02:16 AM\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,1564,0,0,,0,0,0,262.53,,,,,,,,,,,\n736472,\"2017-11-01 00:03:17\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,1564,0,0,,0,0,0,262.53,,,,,,,,,,,\n736473,\"2017-11-01 00:04:16\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,1564,0,0,,0,0,0,262.53,,,,,,,,,,,\n"
  },
  {
    "path": "test/fixtures/import/04_error/TeslaFi122017.csv",
    "content": "﻿data_id,Date,calendar_enabled,remote_start_enabled,vehicle_id,display_name,color,backseat_token,notifications_enabled,vin,backseat_token_updated_at,id,tokens,id_s,state,user_charge_enable_request,time_to_full_charge,charge_current_request,charge_enable_request,charge_to_max_range,charger_phases,battery_heater_on,managed_charging_start_time,battery_range,charger_power,charge_limit_soc,charger_pilot_current,charge_port_latch,battery_current,charger_actual_current,scheduled_charging_pending,fast_charger_type,usable_battery_level,motorized_charge_port,charge_limit_soc_std,not_enough_power_to_heat,battery_level,charge_energy_added,charge_port_door_open,max_range_charge_counter,charge_limit_soc_max,ideal_battery_range,managed_charging_active,charging_state,fast_charger_present,trip_charging,managed_charging_user_canceled,scheduled_charging_start_time,est_battery_range,charge_rate,charger_voltage,charge_current_request_max,eu_vehicle,charge_miles_added_ideal,charge_limit_soc_min,charge_miles_added_rated,inside_temp,longitude,heading,gps_as_of,latitude,speed,shift_state,seat_heater_rear_right,seat_heater_rear_left_back,seat_heater_left,passenger_temp_setting,is_auto_conditioning_on,driver_temp_setting,outside_temp,seat_heater_rear_center,is_rear_defroster_on,seat_heater_rear_right_back,smart_preconditioning,seat_heater_right,fan_status,is_front_defroster_on,seat_heater_rear_left,gui_charge_rate_units,gui_24_hour_time,gui_temperature_units,gui_range_display,gui_distance_units,sun_roof_installed,rhd,remote_start_supported,homelink_nearby,parsed_calendar_supported,spoiler_type,ft,odometer,remote_start,pr,has_spoiler,roof_color,perf_config,valet_mode,calendar_supported,pf,sun_roof_percent_open,third_row_seats,seat_type,api_version,rear_seat_heaters,rt,exterior_color,df,autopark_state,sun_roof_state,notifications_supported,vehicle_name,dr,autopark_style,car_type,wheel_type,locked,center_display_state,last_autopark_error,car_version,dark_rims,autopark_state_v2,inside_tempF,driver_temp_settingF,outside_tempF,odometerF,idleNumber,sleepNumber,driveNumber,chargeNumber,polling,idleTime,running,rerunning,maxRange,left_temp_direction,max_avail_temp,is_climate_on,right_temp_direction,min_avail_temp,rear_seat_type,power,steering_wheel_heater,wiper_blade_heater,side_mirror_heaters,elevation\n779922,\"2017-12-01 14:35:14\",True,True,1111111111,80420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,lol,40,True,False,None,False,None,120.4,0,70,40,Engaged,,0,False,<invalid>,45,True,90,False,46,lol,False,0,100,151.81,False,Disconnected,False,False,False,None,74.74,lol,0,40,False,lol,50,lol,13.4,lol,90,1512167717,lol,None,None,0,0,0,21.1,False,21.1,7.5,0,False,0,False,0,0,False,0,,,,,,1,False,True,,True,None,0,27347.236942,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,80420,0,,models,Base19,True,0,,\"2017.42 a88c8d5\",False,ready,56,69,45,27347.2369,3115,0,0,0,,17,0,0,262.53,232,28.0,False,232,15.0,1,0,,,,\n779923,\"2017-12-01 14:36:14\",True,True,1111111111,80420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,lol,40,True,False,None,False,None,120.4,0,70,40,Engaged,,0,False,<invalid>,45,True,90,False,46,lol,False,0,100,151.81,False,Disconnected,False,False,False,None,74.74,lol,0,40,False,lol,50,lol,13.4,lol,90,1512167773,lol,None,None,0,0,0,21.1,False,21.1,7.5,0,False,0,False,0,0,False,0,,,,,,1,False,True,,True,None,0,27347.236942,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,80420,0,,models,Base19,True,0,,\"2017.42 a88c8d5\",False,ready,56,69,45,27347.2369,3115,0,0,0,,18,0,0,262.53,232,28.0,False,232,15.0,1,0,,,,\n779924,\"2017-12-01 14:37:14\",True,True,1111111111,80420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,lol,40,True,False,None,False,None,120.4,0,70,40,Engaged,,0,False,<invalid>,45,True,90,False,46,lol,False,0,100,151.81,False,Disconnected,False,False,False,None,74.74,lol,0,40,False,lol,50,lol,13.4,lol,90,1512167834,lol,None,None,0,0,0,21.1,False,21.1,7.5,0,False,0,False,0,0,False,0,,,,,,1,False,True,,True,None,0,27347.236942,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,80420,0,,models,Base19,True,0,,\"2017.42 a88c8d5\",False,ready,56,69,45,27347.2369,3115,0,0,0,,19,0,0,262.53,232,28.0,False,232,15.0,1,0,,,,\n779925,\"2017-12-01 14:38:14\",True,True,1111111111,80420,None,None,True,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,lol,40,True,False,None,False,None,120.4,0,70,40,Engaged,,0,False,<invalid>,45,True,90,False,46,lol,False,0,100,151.81,False,Disconnected,False,False,False,None,74.74,lol,0,40,False,lol,50,lol,13.4,lol,90,1512167896,lol,None,None,0,0,0,21.1,False,21.1,7.5,0,False,0,False,0,0,False,0,,,,,,1,False,True,,True,None,0,27347.236942,False,0,False,None,P1,False,True,0,0,None,1,3,0,0,Black,0,unavailable,unknown,True,80420,0,,models,Base19,True,0,,\"2017.42 a88c8d5\",False,ready,56,69,45,27347.2369,3115,0,0,0,,20,0,0,262.53,232,28.0,False,232,15.0,1,0,,,,\n"
  },
  {
    "path": "test/fixtures/import/05_dst/TeslaFi102019.csv",
    "content": "﻿data_id,Date,calendar_enabled,remote_start_enabled,vehicle_id,display_name,color,backseat_token,notifications_enabled,vin,backseat_token_updated_at,id,tokens,id_s,state,user_charge_enable_request,time_to_full_charge,charge_current_request,charge_enable_request,charge_to_max_range,charger_phases,battery_heater_on,managed_charging_start_time,battery_range,charger_power,charge_limit_soc,charger_pilot_current,charge_port_latch,battery_current,charger_actual_current,scheduled_charging_pending,fast_charger_type,usable_battery_level,motorized_charge_port,charge_limit_soc_std,not_enough_power_to_heat,battery_level,charge_energy_added,charge_port_door_open,max_range_charge_counter,charge_limit_soc_max,ideal_battery_range,managed_charging_active,charging_state,fast_charger_present,trip_charging,managed_charging_user_canceled,scheduled_charging_start_time,est_battery_range,charge_rate,charger_voltage,charge_current_request_max,eu_vehicle,charge_miles_added_ideal,charge_limit_soc_min,charge_miles_added_rated,inside_temp,longitude,heading,gps_as_of,latitude,speed,shift_state,seat_heater_rear_right,seat_heater_rear_left_back,seat_heater_left,passenger_temp_setting,is_auto_conditioning_on,driver_temp_setting,outside_temp,seat_heater_rear_center,is_rear_defroster_on,seat_heater_rear_right_back,smart_preconditioning,seat_heater_right,fan_status,is_front_defroster_on,seat_heater_rear_left,gui_charge_rate_units,gui_24_hour_time,gui_temperature_units,gui_range_display,gui_distance_units,sun_roof_installed,rhd,remote_start_supported,homelink_nearby,parsed_calendar_supported,spoiler_type,ft,odometer,remote_start,pr,has_spoiler,roof_color,perf_config,valet_mode,calendar_supported,pf,sun_roof_percent_open,third_row_seats,seat_type,api_version,rear_seat_heaters,rt,exterior_color,df,autopark_state,sun_roof_state,notifications_supported,vehicle_name,dr,autopark_style,car_type,wheel_type,locked,center_display_state,last_autopark_error,car_version,dark_rims,autopark_state_v2,inside_tempF,driver_temp_settingF,outside_tempF,odometerF,idleNumber,sleepNumber,driveNumber,chargeNumber,polling,idleTime,running,rerunning,maxRange,left_temp_direction,max_avail_temp,is_climate_on,right_temp_direction,min_avail_temp,rear_seat_type,power,steering_wheel_heater,wiper_blade_heater,side_mirror_heaters,elevation\n478484,\"2019-10-27 01:22:42\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2393,0,0,0,False,-12,0,0,294.83,,,,,,,,,,,\n478485,\"2019-10-27 01:23:42\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2393,0,0,0,False,-11,0,0,294.83,,,,,,,,,,,\n478486,\"2019-10-27 01:24:44\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2393,0,0,0,False,-10,0,0,294.83,,,,,,,,,,,\n478487,\"2019-10-27 01:25:43\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2393,0,0,0,False,-9,0,0,294.83,,,,,,,,,,,\n478488,\"2019-10-27 01:26:42\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2393,0,0,0,False,-8,0,0,294.83,,,,,,,,,,,\n478489,\"2019-10-27 01:27:44\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2393,0,0,0,False,-7,0,0,294.83,,,,,,,,,,,\n478490,\"2019-10-27 01:28:37\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2393,0,0,0,False,-6,0,0,294.83,,,,,,,,,,,\n478491,\"2019-10-27 01:29:36\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2393,0,0,0,False,-5,0,0,294.83,,,,,,,,,,,\n478492,\"2019-10-27 01:30:40\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2393,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478493,\"2019-10-27 01:31:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478494,\"2019-10-27 01:32:38\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478495,\"2019-10-27 01:33:34\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478496,\"2019-10-27 01:34:40\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478497,\"2019-10-27 01:35:35\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478498,\"2019-10-27 01:36:35\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478499,\"2019-10-27 01:37:34\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478500,\"2019-10-27 01:38:37\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478501,\"2019-10-27 01:39:38\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478502,\"2019-10-27 01:40:40\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478503,\"2019-10-27 01:41:36\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478504,\"2019-10-27 01:42:36\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478505,\"2019-10-27 01:43:38\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478506,\"2019-10-27 01:44:40\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478507,\"2019-10-27 01:45:38\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478508,\"2019-10-27 01:46:34\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478509,\"2019-10-27 01:47:34\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478510,\"2019-10-27 01:48:33\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478511,\"2019-10-27 01:49:35\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478512,\"2019-10-27 01:50:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478513,\"2019-10-27 01:51:34\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478514,\"2019-10-27 01:52:34\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478515,\"2019-10-27 01:53:36\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478516,\"2019-10-27 01:54:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478517,\"2019-10-27 01:55:30\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478518,\"2019-10-27 01:56:32\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478519,\"2019-10-27 01:57:33\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478520,\"2019-10-27 01:58:31\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478521,\"2019-10-27 01:59:35\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478522,\"2019-10-27 02:00:37\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478523,\"2019-10-27 02:01:37\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478524,\"2019-10-27 02:02:40\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478525,\"2019-10-27 02:03:37\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478526,\"2019-10-27 02:04:36\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478527,\"2019-10-27 02:05:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478528,\"2019-10-27 02:06:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478529,\"2019-10-27 02:07:38\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478530,\"2019-10-27 02:08:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478531,\"2019-10-27 02:09:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478532,\"2019-10-27 02:10:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478533,\"2019-10-27 02:11:41\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478534,\"2019-10-27 02:12:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478535,\"2019-10-27 02:13:37\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,294.83,,,,,,,,,,,\n478536,\"2019-10-27 02:14:41\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478537,\"2019-10-27 02:15:41\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478538,\"2019-10-27 02:16:41\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478539,\"2019-10-27 02:17:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478540,\"2019-10-27 02:18:40\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478541,\"2019-10-27 02:19:38\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478542,\"2019-10-27 02:20:43\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478543,\"2019-10-27 02:21:45\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478544,\"2019-10-27 02:22:42\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478545,\"2019-10-27 02:23:42\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478546,\"2019-10-27 02:24:40\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478547,\"2019-10-27 02:25:37\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478548,\"2019-10-27 02:26:36\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478549,\"2019-10-27 02:27:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478550,\"2019-10-27 02:28:38\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478551,\"2019-10-27 02:29:34\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478552,\"2019-10-27 02:30:35\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,985,0,0,,0,0,0,287.43,,,,,,,,,,,\n478553,\"2019-10-27 02:31:41\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,<invalid>,,None,False,<invalid>,86,False,90,None,87,26.93,None,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572136332,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,985,0,0,,0,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478554,\"2019-10-27 02:32:41\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,None,0.0,274,1572136360,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,1,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478555,\"2019-10-27 02:33:44\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,None,90,None,<invalid>,,None,False,<invalid>,86,False,90,None,87,27.04,None,0,100,200.51,False,Complete,False,None,False,None,178.58,0.0,None,13,True,84.0,50,105.0,None,0.0,274,1572136424,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,2,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478556,\"2019-10-27 02:34:41\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,None,0.0,274,1572136480,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,3,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478557,\"2019-10-27 02:35:41\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,<invalid>,,None,False,<invalid>,86,False,90,None,87,26.93,None,0,100,200.18,False,Complete,False,None,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572136541,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,4,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478558,\"2019-10-27 02:36:36\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572136595,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,5,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478559,\"2019-10-27 02:37:38\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,None,90,None,Engaged,,None,False,<invalid>,86,False,90,None,87,27.04,False,0,100,200.51,False,Complete,False,None,False,None,178.58,0.0,None,13,True,84.0,50,105.0,None,0.0,274,1572136659,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,6,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478560,\"2019-10-27 02:38:38\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,None,0.0,274,1572136718,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,7,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478561,\"2019-10-27 02:39:36\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.65,None,90,None,Engaged,,None,False,<invalid>,86,False,90,None,87,27.05,False,0,100,200.52,False,Complete,False,None,False,None,178.88,0.0,None,13,True,84.0,50,105.0,None,0.0,274,1572136777,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,8,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478562,\"2019-10-27 02:40:41\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572136840,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,9,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478563,\"2019-10-27 02:41:42\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,<invalid>,,None,False,<invalid>,86,False,90,None,87,26.93,None,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572136902,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,10,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478564,\"2019-10-27 02:42:41\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,None,0.0,274,1572136960,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,11,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478565,\"2019-10-27 02:43:43\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,None,90,None,Engaged,,None,False,<invalid>,86,False,90,None,87,27.04,False,0,100,200.51,False,Complete,False,None,False,None,178.58,0.0,None,13,True,84.0,50,105.0,None,0.0,274,1572137023,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,12,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478566,\"2019-10-27 02:44:41\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572137081,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,13,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478567,\"2019-10-27 02:45:44\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,Engaged,,None,False,<invalid>,86,False,90,False,87,26.93,False,0,100,200.18,False,Complete,False,False,False,None,178.87,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572137145,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,14,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478568,\"2019-10-27 02:46:45\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572137204,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,15,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478569,\"2019-10-27 02:47:45\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,Engaged,,None,False,<invalid>,86,False,90,None,87,26.93,False,0,100,200.18,False,Complete,False,None,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572137266,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,16,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478570,\"2019-10-27 02:48:45\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572137324,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,17,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478571,\"2019-10-27 02:49:45\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,Engaged,,None,False,<invalid>,86,False,90,None,87,26.93,False,0,100,200.18,False,Complete,False,None,False,None,178.87,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572137385,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,18,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478572,\"2019-10-27 02:50:45\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.87,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572137444,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,19,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478573,\"2019-10-27 02:51:45\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,Engaged,,None,False,<invalid>,86,False,90,False,87,26.93,False,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572137506,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,20,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478574,\"2019-10-27 02:52:41\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.87,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572137560,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,21,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478575,\"2019-10-27 02:53:41\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,Engaged,,None,False,<invalid>,86,False,90,None,87,26.93,False,0,100,200.18,False,Complete,False,None,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572137622,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,22,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478576,\"2019-10-27 02:54:40\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.24,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.94,True,0,100,200.2,False,Complete,False,False,False,None,178.88,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572137680,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,23,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478577,\"2019-10-27 02:55:42\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,Engaged,,None,False,<invalid>,86,False,90,False,87,26.93,False,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572137742,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,24,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478578,\"2019-10-27 02:56:41\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.24,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.94,True,0,100,200.2,False,Complete,False,False,False,None,178.59,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572137801,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,25,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478579,\"2019-10-27 02:57:43\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,Engaged,,None,False,<invalid>,86,False,90,None,87,26.93,False,0,100,200.18,False,Complete,False,None,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572137864,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,26,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478580,\"2019-10-27 02:58:42\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.24,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.94,True,0,100,200.2,False,Complete,False,False,False,None,178.59,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572137921,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,27,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478581,\"2019-10-27 02:59:42\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.24,None,90,None,Engaged,,None,False,<invalid>,86,False,90,None,87,26.94,False,0,100,200.2,False,Complete,False,None,False,None,178.59,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572137983,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,28,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478582,\"2019-10-27 02:00:40\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572138040,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,29,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478583,\"2019-10-27 02:01:45\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,Engaged,,None,False,<invalid>,86,False,90,None,87,26.93,False,0,100,200.18,False,Complete,False,None,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572138105,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,,30,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478584,\"2019-10-27 02:02:44\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572138164,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2394,0,0,0,False,-15,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478585,\"2019-10-27 02:03:46\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2394,0,0,0,False,-14,0,0,287.43,,,,,,,,,,,\n478586,\"2019-10-27 02:04:43\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2394,0,0,0,False,-13,0,0,287.43,,,,,,,,,,,\n478587,\"2019-10-27 02:05:43\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2394,0,0,0,False,-12,0,0,287.43,,,,,,,,,,,\n478588,\"2019-10-27 02:06:46\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2394,0,0,0,False,-11,0,0,287.43,,,,,,,,,,,\n478589,\"2019-10-27 02:07:40\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2394,0,0,0,False,-10,0,0,287.43,,,,,,,,,,,\n478590,\"2019-10-27 02:08:43\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2394,0,0,0,False,-9,0,0,287.43,,,,,,,,,,,\n478591,\"2019-10-27 02:09:43\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2394,0,0,0,False,-8,0,0,287.43,,,,,,,,,,,\n478592,\"2019-10-27 02:10:41\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2394,0,0,0,False,-7,0,0,287.43,,,,,,,,,,,\n478593,\"2019-10-27 02:11:41\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2394,0,0,0,False,-6,0,0,287.43,,,,,,,,,,,\n478594,\"2019-10-27 02:12:44\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2394,0,0,0,False,-5,0,0,287.43,,,,,,,,,,,\n478595,\"2019-10-27 02:13:46\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2394,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478596,\"2019-10-27 02:14:42\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478597,\"2019-10-27 02:15:43\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478598,\"2019-10-27 02:16:46\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478599,\"2019-10-27 02:17:47\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478600,\"2019-10-27 02:18:42\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478601,\"2019-10-27 02:19:42\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478602,\"2019-10-27 02:20:40\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478603,\"2019-10-27 02:21:46\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478604,\"2019-10-27 02:22:42\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478605,\"2019-10-27 02:23:41\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478606,\"2019-10-27 02:24:42\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478607,\"2019-10-27 02:25:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478608,\"2019-10-27 02:26:45\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478609,\"2019-10-27 02:27:40\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478610,\"2019-10-27 02:28:39\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478611,\"2019-10-27 02:29:42\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478612,\"2019-10-27 02:30:43\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478613,\"2019-10-27 02:31:47\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478614,\"2019-10-27 02:32:48\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478615,\"2019-10-27 02:33:48\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478616,\"2019-10-27 02:34:48\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478617,\"2019-10-27 02:35:48\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478618,\"2019-10-27 02:36:46\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478619,\"2019-10-27 02:37:44\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478620,\"2019-10-27 02:38:43\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478621,\"2019-10-27 02:39:44\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478622,\"2019-10-27 02:40:40\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478623,\"2019-10-27 02:41:43\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478624,\"2019-10-27 02:42:42\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478625,\"2019-10-27 02:43:45\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478626,\"2019-10-27 02:44:45\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478627,\"2019-10-27 02:45:42\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478628,\"2019-10-27 02:46:43\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478629,\"2019-10-27 02:47:41\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478630,\"2019-10-27 02:48:46\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478631,\"2019-10-27 02:49:46\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478632,\"2019-10-27 02:50:46\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478633,\"2019-10-27 02:51:47\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478634,\"2019-10-27 02:52:48\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478635,\"2019-10-27 02:53:44\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478636,\"2019-10-27 02:54:46\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478637,\"2019-10-27 02:55:48\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478638,\"2019-10-27 02:56:48\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478639,\"2019-10-27 02:57:49\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478640,\"2019-10-27 02:58:47\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478641,\"2019-10-27 02:59:48\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478642,\"2019-10-27 03:00:49\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478643,\"2019-10-27 03:01:50\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478644,\"2019-10-27 03:02:51\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478645,\"2019-10-27 03:03:50\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478646,\"2019-10-27 03:04:51\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478647,\"2019-10-27 03:05:51\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478648,\"2019-10-27 03:06:50\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478649,\"2019-10-27 03:07:48\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478650,\"2019-10-27 03:08:48\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478651,\"2019-10-27 03:09:47\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478652,\"2019-10-27 03:10:45\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478653,\"2019-10-27 03:11:43\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478654,\"2019-10-27 03:12:45\",,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,986,0,0,,0,0,0,287.43,,,,,,,,,,,\n478655,\"2019-10-27 03:13:46\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,<invalid>,,None,False,<invalid>,86,False,90,None,87,26.93,None,0,100,200.18,False,Complete,None,None,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572142456,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2395,986,0,0,,0,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478656,\"2019-10-27 03:14:44\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572142483,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2395,0,0,0,,1,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478657,\"2019-10-27 03:15:46\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,<invalid>,,None,False,<invalid>,86,False,90,None,87,26.93,None,0,100,200.18,False,Complete,None,None,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572142546,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2395,0,0,0,,2,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478658,\"2019-10-27 03:16:46\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,1,13,True,83.5,50,104.5,None,0.0,274,1572142607,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2395,0,0,0,,3,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478659,\"2019-10-27 03:17:49\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,<invalid>,,None,False,<invalid>,86,False,90,None,87,26.93,None,0,100,200.18,False,Complete,None,None,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572142669,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2395,0,0,0,,4,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478660,\"2019-10-27 03:18:47\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,None,0.0,274,1572142727,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2395,0,0,0,,5,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478661,\"2019-10-27 03:19:46\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,None,90,None,<invalid>,,None,False,<invalid>,86,False,90,None,87,26.93,None,0,100,200.18,False,Complete,None,None,False,None,178.58,0.0,None,13,True,83.5,50,104.5,None,0.0,274,1572142786,0.0,None,None,,,0,25.0,None,25.0,None,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,None,None,None,75077.4288,2395,0,0,0,,6,0,0,287.43,None,28.0,False,None,15.0,0,0,,,,\n478662,\"2019-10-27 03:20:50\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,4.7,0.0,274,1572142849,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,40,77,34,75077.4288,2395,0,0,0,,7,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478663,\"2019-10-27 03:21:54\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,6.1,0.0,274,1572142914,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,42,77,34,75077.4288,2395,0,0,0,,8,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478664,\"2019-10-27 03:22:49\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,6.9,0.0,274,1572142968,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,44,77,34,75077.4288,2395,0,0,0,,9,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478665,\"2019-10-27 03:23:49\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,7.1,0.0,274,1572143029,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,44,77,34,75077.4288,2395,0,0,0,,10,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478666,\"2019-10-27 03:24:48\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,7.5,0.0,274,1572143087,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,45,77,34,75077.4288,2395,0,0,0,,11,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478667,\"2019-10-27 03:25:48\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,7.6,0.0,274,1572143148,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,45,77,34,75077.4288,2395,0,0,0,,12,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478668,\"2019-10-27 03:26:49\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,7.5,0.0,274,1572143208,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,45,77,34,75077.4288,2395,0,0,0,,13,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478669,\"2019-10-27 03:27:48\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.64,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,27.04,True,0,100,200.51,False,Complete,False,False,False,None,178.58,0.0,0,13,True,84.0,50,105.0,7.5,0.0,274,1572143268,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,45,77,34,75077.4288,2395,0,0,0,,14,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478670,\"2019-10-27 03:28:49\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,7.5,0.0,274,1572143328,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,45,77,34,75077.4288,2395,0,0,0,,15,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478671,\"2019-10-27 03:29:52\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,7.6,0.0,274,1572143391,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,45,77,34,75077.4288,2395,0,0,0,,16,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478672,\"2019-10-27 03:30:54\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,7.9,0.0,274,1572143455,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,17,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478673,\"2019-10-27 03:31:53\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572143513,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,18,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478674,\"2019-10-27 03:32:54\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,7.9,0.0,274,1572143573,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,19,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478675,\"2019-10-27 03:33:53\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572143633,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,20,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478676,\"2019-10-27 03:34:55\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572143694,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,21,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478677,\"2019-10-27 03:35:53\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572143753,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,22,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478678,\"2019-10-27 03:36:57\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.58,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572143816,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,23,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478679,\"2019-10-27 03:37:54\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.29,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572143874,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,24,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478680,\"2019-10-27 03:38:53\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.29,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572143932,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,25,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478681,\"2019-10-27 03:39:52\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.29,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572143992,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,26,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478682,\"2019-10-27 03:40:52\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.29,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572144052,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,27,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478683,\"2019-10-27 03:41:51\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.29,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572144111,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,28,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478684,\"2019-10-27 03:42:54\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.29,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572144173,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,29,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478685,\"2019-10-27 03:43:52\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.29,0.0,0,13,True,83.5,50,104.5,8.0,0.0,274,1572144232,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,,30,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478686,\"2019-10-27 03:44:51\",True,,1111111111,foo,None,None,,1YYSA1YYYFF08YYYY,None,999999999999999,,,online,None,0.0,13,True,False,None,False,None,250.23,0,90,13,Engaged,,0,False,<invalid>,86,False,90,False,87,26.93,True,0,100,200.18,False,Complete,False,False,False,None,178.29,0.0,0,13,True,83.5,50,104.5,8.1,0.0,274,1572144290,0.0,None,None,,,0,25.0,False,25.0,1.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,None,0,75077.428831,False,0,,None,,False,True,0,0,None,0,6,0,0,SteelGrey,0,standby,unknown,True,foo,0,,model,Base19,True,0,,\"2019.32.12.2 58f3b76\",,,46,77,34,75077.4288,2395,0,0,0,False,-15,0,0,287.43,473,28.0,False,473,15.0,0,0,,,,\n478687,\"2019-10-27 03:45:51\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-14,0,0,287.43,,,,,,,,,,,\n478688,\"2019-10-27 03:46:52\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-13,0,0,287.43,,,,,,,,,,,\n478689,\"2019-10-27 03:47:52\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-12,0,0,287.43,,,,,,,,,,,\n478690,\"2019-10-27 03:48:50\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-11,0,0,287.43,,,,,,,,,,,\n478691,\"2019-10-27 03:49:54\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-10,0,0,287.43,,,,,,,,,,,\n478692,\"2019-10-27 03:50:52\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-9,0,0,287.43,,,,,,,,,,,\n478693,\"2019-10-27 03:51:52\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-8,0,0,287.43,,,,,,,,,,,\n478694,\"2019-10-27 03:52:50\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-7,0,0,287.43,,,,,,,,,,,\n478695,\"2019-10-27 03:53:51\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-6,0,0,287.43,,,,,,,,,,,\n478696,\"2019-10-27 03:54:50\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-5,0,0,287.43,,,,,,,,,,,\n478697,\"2019-10-27 03:55:48\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-4,0,0,287.43,,,,,,,,,,,\n478698,\"2019-10-27 03:56:47\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-3,0,0,287.43,,,,,,,,,,,\n478699,\"2019-10-27 03:57:46\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-2,0,0,287.43,,,,,,,,,,,\n478700,\"2019-10-27 03:58:48\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,False,-1,0,0,287.43,,,,,,,,,,,\n478701,\"2019-10-27 03:59:46\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2395,0,0,0,True,0,0,0,287.43,,,,,,,,,,,\n"
  },
  {
    "path": "test/fixtures/import/06_two_cars/TeslaFi62020.csv",
    "content": "﻿data_id,Date,calendar_enabled,remote_start_enabled,vehicle_id,display_name,color,backseat_token,notifications_enabled,vin,backseat_token_updated_at,id,tokens,id_s,state,user_charge_enable_request,time_to_full_charge,charge_current_request,charge_enable_request,charge_to_max_range,charger_phases,battery_heater_on,managed_charging_start_time,battery_range,charger_power,charge_limit_soc,charger_pilot_current,charge_port_latch,battery_current,charger_actual_current,scheduled_charging_pending,fast_charger_type,usable_battery_level,motorized_charge_port,charge_limit_soc_std,not_enough_power_to_heat,battery_level,charge_energy_added,charge_port_door_open,max_range_charge_counter,charge_limit_soc_max,ideal_battery_range,managed_charging_active,charging_state,fast_charger_present,trip_charging,managed_charging_user_canceled,scheduled_charging_start_time,est_battery_range,charge_rate,charger_voltage,charge_current_request_max,eu_vehicle,charge_miles_added_ideal,charge_limit_soc_min,charge_miles_added_rated,inside_temp,longitude,heading,gps_as_of,latitude,speed,shift_state,seat_heater_rear_right,seat_heater_rear_left_back,seat_heater_left,passenger_temp_setting,is_auto_conditioning_on,driver_temp_setting,outside_temp,seat_heater_rear_center,is_rear_defroster_on,seat_heater_rear_right_back,smart_preconditioning,seat_heater_right,fan_status,is_front_defroster_on,seat_heater_rear_left,gui_charge_rate_units,gui_24_hour_time,gui_temperature_units,gui_range_display,gui_distance_units,sun_roof_installed,rhd,remote_start_supported,homelink_nearby,parsed_calendar_supported,spoiler_type,ft,odometer,remote_start,pr,has_spoiler,roof_color,perf_config,valet_mode,calendar_supported,pf,sun_roof_percent_open,third_row_seats,seat_type,api_version,rear_seat_heaters,rt,exterior_color,df,autopark_state,sun_roof_state,notifications_supported,vehicle_name,dr,autopark_style,car_type,wheel_type,locked,center_display_state,last_autopark_error,car_version,dark_rims,autopark_state_v2,inside_tempF,driver_temp_settingF,outside_tempF,odometerF,idleNumber,sleepNumber,driveNumber,chargeNumber,polling,idleTime,running,rerunning,maxRange,left_temp_direction,max_avail_temp,is_climate_on,right_temp_direction,min_avail_temp,rear_seat_type,power,steering_wheel_heater,wiper_blade_heater,side_mirror_heaters,elevation\n198,\"2020-06-15 14:30:49\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n199,\"2020-06-15 14:31:45\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n200,\"2020-06-15 14:32:46\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n201,\"2020-06-15 14:33:49\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n202,\"2020-06-15 14:34:44\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n203,\"2020-06-15 14:35:43\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n204,\"2020-06-15 14:36:46\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n205,\"2020-06-15 14:37:44\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n206,\"2020-06-15 14:38:45\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n207,\"2020-06-15 14:39:45\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n208,\"2020-06-15 14:40:47\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n209,\"2020-06-15 14:41:47\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n210,\"2020-06-15 14:42:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,1,48,0,65.5,50,65.5,20.8,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,1,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n211,\"2020-06-15 14:43:43\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,1,48,0,65.5,50,65.5,20.8,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,2,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n212,\"2020-06-15 14:44:45\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.8,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,3,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n213,\"2020-06-15 14:45:54\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,1,48,0,65.5,50,65.5,20.8,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,4,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n214,\"2020-06-15 14:46:59\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.8,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,5,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n215,\"2020-06-15 14:47:55\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,1,48,0,65.5,50,65.5,20.8,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,6,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n216,\"2020-06-15 14:48:54\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.8,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,7,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n217,\"2020-06-15 14:49:52\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,1,48,0,65.5,50,65.5,20.8,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,8,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n218,\"2020-06-15 14:50:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.8,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,9,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n219,\"2020-06-15 14:51:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,10,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n220,\"2020-06-15 14:52:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,11,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n221,\"2020-06-15 14:53:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,12,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n222,\"2020-06-15 14:54:56\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,13,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n223,\"2020-06-15 14:55:54\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,14,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n224,\"2020-06-15 14:56:55\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,15,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n225,\"2020-06-15 14:57:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,16,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n226,\"2020-06-15 14:58:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,17,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n227,\"2020-06-15 14:59:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,214.43,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,214.43,0,Disconnected,0,0,0,,245.81,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,18,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n228,\"2020-06-15 15:00:52\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,19,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n229,\"2020-06-15 15:01:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,20,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n230,\"2020-06-15 15:02:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,21,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n231,\"2020-06-15 15:03:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,22,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n232,\"2020-06-15 15:04:52\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,1,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,23,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n233,\"2020-06-15 15:05:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,24,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n234,\"2020-06-15 15:06:52\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,1,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,25,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n235,\"2020-06-15 15:07:54\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,1,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,26,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n236,\"2020-06-15 15:08:47\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,27,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n237,\"2020-06-15 15:09:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,28,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n238,\"2020-06-15 15:10:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,29,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n239,\"2020-06-15 15:11:55\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,29,0,0,0,,,,,,,,,,,\n240,\"2020-06-15 15:12:48\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,29,0,0,0,,,,,,,,,,,\n241,\"2020-06-15 15:13:52\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,29,0,0,0,,,,,,,,,,,\n242,\"2020-06-15 15:14:51\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,29,0,0,0,,,,,,,,,,,\n243,\"2020-06-15 15:15:36\",,,,,,,,,,,,,offline,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n244,\"2020-06-15 15:16:53\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,0,0,0,,,,,,,,,,,\n245,\"2020-06-15 15:17:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,1,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n246,\"2020-06-15 15:18:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,2,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n247,\"2020-06-15 15:19:44\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,3,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n248,\"2020-06-15 15:20:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,4,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n249,\"2020-06-15 15:21:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.7,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,5,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n250,\"2020-06-15 15:22:54\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.6,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,6,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n251,\"2020-06-15 15:23:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.6,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,7,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n252,\"2020-06-15 15:24:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,1,48,0,65.5,50,65.5,20.6,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,8,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n253,\"2020-06-15 15:25:53\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n254,\"2020-06-15 15:26:56\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n255,\"2020-06-15 15:27:49\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n256,\"2020-06-15 15:28:47\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n257,\"2020-06-15 15:29:50\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n258,\"2020-06-15 15:30:50\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n259,\"2020-06-15 15:31:56\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n260,\"2020-06-15 15:32:55\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n261,\"2020-06-15 15:33:53\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n262,\"2020-06-15 15:34:57\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n263,\"2020-06-15 15:36:00\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n264,\"2020-06-15 15:37:00\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n265,\"2020-06-15 15:37:57\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n266,\"2020-06-15 15:38:54\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n267,\"2020-06-15 15:39:54\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n268,\"2020-06-15 15:40:54\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n269,\"2020-06-15 15:41:54\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n270,\"2020-06-15 15:42:50\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n271,\"2020-06-15 15:43:49\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,8,0,0,0,,,,,,,,,,,\n272,\"2020-06-15 15:44:42\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.6,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,9,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n273,\"2020-06-15 15:45:39\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.99,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.99,0,Disconnected,0,0,0,,245.29,0.0,2,48,0,65.5,50,65.5,20.6,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,10,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n274,\"2020-06-15 15:46:51\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,10,0,0,0,,,,,,,,,,,\n275,\"2020-06-15 15:47:51\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,10,0,0,0,,,,,,,,,,,\n276,\"2020-06-15 15:48:47\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,10,0,0,0,,,,,,,,,,,\n277,\"2020-06-15 15:49:45\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,10,0,0,0,,,,,,,,,,,\n278,\"2020-06-15 15:50:49\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,10,0,0,0,,,,,,,,,,,\n279,\"2020-06-15 15:51:46\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,10,0,0,0,,,,,,,,,,,\n280,\"2020-06-15 15:52:48\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,10,0,0,0,,,,,,,,,,,\n281,\"2020-06-15 15:53:51\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,10,0,0,0,,,,,,,,,,,\n282,\"2020-06-15 15:54:53\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,10,0,0,0,,,,,,,,,,,\n283,\"2020-06-15 15:55:49\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,10,0,0,0,,,,,,,,,,,\n284,\"2020-06-15 15:56:56\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.54,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.54,0,Disconnected,0,0,0,,244.78,0.0,2,48,0,65.5,50,65.5,20.6,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,11,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n285,\"2020-06-15 15:58:16\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,11,0,0,0,,,,,,,,,,,\n286,\"2020-06-15 15:59:58\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,11,0,0,0,,,,,,,,,,,\n287,\"2020-06-15 16:01:31\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,11,0,0,0,,,,,,,,,,,\n288,\"2020-06-15 16:03:05\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,11,0,0,0,,,,,,,,,,,\n289,\"2020-06-15 16:04:23\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,11,0,0,0,,,,,,,,,,,\n290,\"2020-06-15 16:05:34\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,11,0,0,0,,,,,,,,,,,\n291,\"2020-06-15 16:06:42\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.54,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.54,0,Disconnected,0,0,0,,244.78,0.0,2,48,0,65.5,50,65.5,20.6,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,12,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n292,\"2020-06-15 16:07:37\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,12,0,0,0,,,,,,,,,,,\n293,\"2020-06-15 16:08:18\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,12,0,0,0,,,,,,,,,,,\n294,\"2020-06-15 16:09:30\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,12,0,0,0,,,,,,,,,,,\n295,\"2020-06-15 16:10:23\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,12,0,0,0,,,,,,,,,,,\n296,\"2020-06-15 16:11:18\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,12,0,0,0,,,,,,,,,,,\n297,\"2020-06-15 16:12:08\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,12,0,0,0,,,,,,,,,,,\n298,\"2020-06-15 16:12:37\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.54,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.54,0,Disconnected,0,0,0,,244.78,0.0,2,48,0,65.5,50,65.5,20.6,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,13,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n299,\"2020-06-15 16:13:17\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,13,0,0,0,,,,,,,,,,,\n300,\"2020-06-15 16:14:07\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,13,0,0,0,,,,,,,,,,,\n301,\"2020-06-15 16:15:36\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.54,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.54,0,Disconnected,0,0,0,,244.78,0.0,2,48,0,65.5,50,65.5,20.6,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,14,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n302,\"2020-06-15 16:16:04\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,14,0,0,0,,,,,,,,,,,\n303,\"2020-06-15 16:16:59\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,14,0,0,0,,,,,,,,,,,\n304,\"2020-06-15 16:18:04\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,14,0,0,0,,,,,,,,,,,\n305,\"2020-06-15 16:19:05\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,14,0,0,0,,,,,,,,,,,\n306,\"2020-06-15 16:20:02\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,14,0,0,0,,,,,,,,,,,\n307,\"2020-06-15 16:21:00\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.54,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.54,0,Disconnected,0,0,0,,244.78,0.0,2,48,0,65.5,50,65.5,20.6,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,15,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n308,\"2020-06-15 16:21:58\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,15,0,0,0,,,,,,,,,,,\n309,\"2020-06-15 16:22:53\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,15,0,0,0,,,,,,,,,,,\n310,\"2020-06-15 16:23:53\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,15,0,0,0,,,,,,,,,,,\n311,\"2020-06-15 16:24:53\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,15,0,0,0,,,,,,,,,,,\n312,\"2020-06-15 16:25:58\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,15,0,0,0,,,,,,,,,,,\n313,\"2020-06-15 16:26:54\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,15,0,0,0,,,,,,,,,,,\n314,\"2020-06-15 16:27:52\",,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,0,,15,0,0,0,,,,,,,,,,,\n315,\"2020-06-15 16:28:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.52,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.52,0,Disconnected,0,0,0,,244.76,0.0,2,48,0,65.5,50,65.5,20.6,-74.594447,285,1592246518,40.569235,,,0,,0,23.9,0,23.9,20.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.619554,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,69,75,68,None,1,0,0,0,,16,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n316,\"2020-06-15 16:29:43\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.54,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.54,0,Disconnected,0,0,0,,244.78,0.0,2,48,0,65.5,50,65.5,21.1,-74.594561,353,1592252981,40.569309,7,D,0,,0,23.9,0,23.9,21.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.657458,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,69,75,69,None,1,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,9,,,,24.28300304\n317,\"2020-06-15 16:30:05\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.54,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.54,0,Disconnected,0,0,0,,244.78,0.0,2,48,0,65.5,50,65.5,21.4,-74.594576,266,1592253004,40.569403,8,D,0,,0,23.9,0,23.9,21.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.692255,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,70,75,69,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,11,,,,24.07853888\n318,\"2020-06-15 16:30:27\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.54,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.54,0,Disconnected,0,0,0,,242.76,0.0,2,48,0,65.5,50,65.5,21.6,-74.594914,341,1592253026,40.569719,27,D,0,,0,23.9,0,23.9,21.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.76247,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,70,75,69,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,4,,,,24\n319,\"2020-06-15 16:30:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,213.09,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,213.09,0,Disconnected,0,0,0,,240.04,0.0,2,48,0,65.5,50,65.5,21.8,-74.594858,294,1592253047,40.566388,23,D,0,,0,23.9,0,23.9,21.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22970.892336,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,71,75,69,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,27,,,,25.00163584\n320,\"2020-06-15 16:31:11\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,212.64,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,212.64,0,Disconnected,0,0,0,,238.61,0.0,2,48,0,65.5,50,65.5,22.0,-74.596626,194,1592253070,40.56613,24,D,0,,0,23.9,0,23.9,21.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22971.010397,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,71,75,69,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-1,,,,25.2044448\n321,\"2020-06-15 16:31:35\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,212.64,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,212.64,0,Disconnected,0,0,0,,237.51,0.0,2,48,0,65.5,50,65.5,22.2,-74.598559,278,1592253094,40.565566,33,D,0,,0,23.9,0,23.9,21.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22971.146477,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,71,75,69,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-7,,,,23\n322,\"2020-06-15 16:31:56\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,212.64,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,212.64,0,Disconnected,0,0,0,,237.32,0.0,2,48,0,65.5,50,65.5,22.4,-74.600895,185,1592253115,40.565669,22,D,0,,0,23.9,0,23.9,21.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22971.281315,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,72,75,70,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,14,,,,20.0406704\n323,\"2020-06-15 16:32:18\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,212.64,0,90,48,Engaged,,0,0,<invalid>,71,1,90,,71,15.29,0,0,100,212.64,0,Disconnected,0,0,0,,240.03,0.0,2,48,0,65.5,50,65.5,22.6,-74.601475,195,1592253137,40.564201,30,D,0,,0,23.9,0,23.9,21.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22971.386948,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,72,75,70,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-5,,,,20.038316\n324,\"2020-06-15 16:32:40\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,212.2,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,71,15.29,0,0,100,212.2,0,Disconnected,0,0,0,,243.08,0.0,2,48,0,65.5,50,65.5,22.8,-74.602424,193,1592253159,40.561618,26,D,0,,0,23.9,0,23.9,21.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22971.572116,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,73,75,70,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-26,,,,16.35293056\n325,\"2020-06-15 16:33:01\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,212.2,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,71,15.29,0,0,100,212.2,0,Disconnected,0,0,0,,241.7,0.0,2,48,0,65.5,50,65.5,22.9,-74.605017,275,1592253180,40.56135,28,D,0,,0,23.9,0,23.9,21.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22971.727459,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,73,75,70,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-7,,,,15.0788\n326,\"2020-06-15 16:33:24\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,212.2,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,71,15.29,0,0,100,212.2,0,Disconnected,0,0,0,,240.88,0.0,2,48,0,65.5,50,65.5,23.1,-74.608351,274,1592253202,40.561522,26,D,0,,0,23.9,0,23.9,21.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22971.903929,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,73,75,70,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,15,,,,16.51232288\n327,\"2020-06-15 16:33:45\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,212.2,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,71,15.29,0,0,100,212.2,0,Disconnected,0,0,0,,240.88,0.0,1,48,0,65.5,50,65.5,23.2,-74.611482,282,1592253224,40.56202,29,D,0,,0,23.9,0,23.9,21.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22972.073563,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,73,75,70,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,0,,,,17.7559744\n328,\"2020-06-15 16:34:07\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,212.2,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,71,15.29,0,0,100,212.2,0,Disconnected,0,0,0,,240.14,0.0,2,48,0,65.5,50,65.5,23.4,-74.613314,276,1592253246,40.562342,0,D,0,,0,23.9,0,23.9,22.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22972.174846,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,74,75,71,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,0,,,,16\n329,\"2020-06-15 16:34:29\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,211.75,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,71,15.29,0,0,100,211.75,0,Disconnected,0,0,0,,238.83,0.0,2,48,0,65.5,50,65.5,23.5,-74.614096,193,1592253267,40.560069,38,D,0,,0,23.9,0,23.9,22.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22972.338888,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,74,75,71,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,2,,,,14.44560704\n330,\"2020-06-15 16:34:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,211.75,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,211.75,0,Disconnected,0,0,0,,238.45,0.0,2,48,0,65.5,50,65.5,23.6,-74.616047,245,1592253289,40.557676,15,D,0,,0,23.9,0,23.9,22.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22972.542698,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,74,75,71,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-20,,,,14.83086976\n331,\"2020-06-15 16:35:12\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,211.75,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,71,15.29,0,0,100,211.75,0,Disconnected,0,0,0,,238.45,0.0,2,48,0,65.5,50,65.5,23.8,-74.616269,245,1592253311,40.557598,0,D,0,,0,23.9,0,23.9,22.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22972.557611,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,74,75,71,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,0,,,,15\n332,\"2020-06-15 16:35:33\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,211.75,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,71,15.29,0,0,100,211.75,0,Disconnected,0,0,0,,238.45,0.0,2,48,0,65.5,50,65.5,23.9,-74.616269,245,1592253332,40.557598,0,D,0,,0,23.9,0,23.9,22.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22972.557611,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,75,75,71,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,0,,,,15\n333,\"2020-06-15 16:35:56\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,211.75,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,71,15.29,0,0,100,211.75,0,Disconnected,0,0,0,,238.45,0.0,2,48,0,65.5,50,65.5,24.1,-74.616269,245,1592253355,40.557598,0,D,0,,0,23.9,0,23.9,22.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22972.557611,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,75,75,71,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,0,,,,15\n334,\"2020-06-15 16:36:17\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,211.75,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,71,15.29,0,0,100,211.75,0,Disconnected,0,0,0,,238.45,0.0,2,48,0,65.5,50,65.5,24.2,-74.616447,152,1592253376,40.557107,32,D,0,,0,23.9,0,23.9,22.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22972.599243,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,75,75,71,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,5,,,,15.4436953601\n335,\"2020-06-15 16:36:39\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,211.3,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,211.3,0,Disconnected,0,0,0,,233.12,0.0,2,48,0,65.5,50,65.5,24.4,-74.615186,173,1592253398,40.55265,59,D,0,,0,23.9,0,23.9,22.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22972.913657,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,75,75,72,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,8,,,,15\n336,\"2020-06-15 16:37:00\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,210.41,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,210.41,0,Disconnected,0,0,0,,230.72,0.0,2,48,0,65.5,50,65.5,24.5,-74.614365,172,1592253419,40.547792,61,D,0,,0,23.9,0,23.9,22.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22973.251683,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,76,75,72,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,6,,,,18\n337,\"2020-06-15 16:37:23\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.96,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.96,0,Disconnected,0,0,0,,229.96,0.0,2,48,0,65.5,50,65.5,24.7,-74.613409,176,1592253442,40.542296,54,D,0,,0,23.9,0,23.9,22.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22973.63569,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,76,75,72,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-11,,,,21\n338,\"2020-06-15 16:37:45\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.96,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.96,0,Disconnected,0,0,0,,229.87,0.0,2,48,0,65.5,50,65.5,24.8,-74.61536,219,1592253463,40.538595,38,D,0,,0,23.9,0,23.9,22.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22973.922142,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,76,75,72,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-31,,,,24.942\n339,\"2020-06-15 16:38:06\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.96,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.96,0,Disconnected,0,0,0,,235.07,0.0,2,48,0,65.5,50,65.5,24.9,-74.617983,221,1592253485,40.536174,38,D,0,,0,23.9,0,23.9,22.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22974.141486,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,76,75,72,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-37,,,,19.42846432\n340,\"2020-06-15 16:38:28\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.96,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.96,0,Disconnected,0,0,0,,238.88,0.0,2,48,0,65.5,50,65.5,25.0,-74.619363,219,1592253506,40.534927,18,D,0,,0,23.9,0,23.9,22.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22974.255197,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,77,75,72,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-2,,,,19.8680648001\n341,\"2020-06-15 16:38:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.96,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.96,0,Disconnected,0,0,0,,235.11,0.0,2,48,0,65.5,50,65.5,25.1,-74.621254,220,1592253528,40.533174,34,D,0,,0,23.9,0,23.9,22.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22974.411783,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,77,75,72,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,17,,,,18.9408\n342,\"2020-06-15 16:39:10\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.96,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.96,0,Disconnected,0,0,0,,235.11,0.0,2,48,0,65.5,50,65.5,25.2,-74.62376,220,1592253549,40.53087,41,D,0,,0,23.9,0,23.9,22.5,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22974.619321,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,77,75,72,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,19,,,,19.536\n343,\"2020-06-15 16:39:32\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.51,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.51,0,Disconnected,0,0,0,,234.38,0.0,2,48,0,65.5,50,65.5,25.2,-74.626323,208,1592253571,40.528429,17,D,0,,0,23.9,0,23.9,23.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22974.836801,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,77,75,73,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-3,,,,19.76261664\n344,\"2020-06-15 16:39:54\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.51,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.51,0,Disconnected,0,0,0,,234.38,0.0,2,48,0,65.5,50,65.5,25.3,-74.626637,195,1592253593,40.52778,12,D,0,,0,23.9,0,23.9,23.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22974.885889,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,77,75,73,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,9,,,,17.9012\n345,\"2020-06-15 16:40:15\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.51,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.51,0,Disconnected,0,0,0,,234.38,0.0,2,48,0,65.5,50,65.5,25.4,-74.627356,194,1592253614,40.525715,33,D,0,,0,23.9,0,23.9,23.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22975.032533,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,77,75,73,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,13,,,,19\n346,\"2020-06-15 16:40:37\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.51,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.51,0,Disconnected,0,0,0,,234.23,0.0,2,48,0,65.5,50,65.5,25.5,-74.628375,194,1592253636,40.522643,35,D,0,,0,23.9,0,23.9,23.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22975.250634,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,77,75,73,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,2,,,,23.85\n347,\"2020-06-15 16:40:58\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.51,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.51,0,Disconnected,0,0,0,,234.23,0.0,2,48,0,65.5,50,65.5,25.5,-74.629851,213,1592253657,40.520224,27,D,0,,0,23.9,0,23.9,23.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22975.437667,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,77,75,73,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,18,,,,25.08975296\n348,\"2020-06-15 16:41:20\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.51,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.51,0,Disconnected,0,0,0,,234.23,0.0,2,48,0,65.5,50,65.5,25.6,-74.631573,203,1592253679,40.518204,22,D,0,,0,23.9,0,23.9,23.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22975.604816,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,78,75,73,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-16,,,,25\n349,\"2020-06-15 16:41:41\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.51,0,90,48,Engaged,,0,0,<invalid>,70,1,90,,70,15.29,0,0,100,209.51,0,Disconnected,0,0,0,,234.23,0.0,2,48,0,65.5,50,65.5,25.7,-74.634593,274,1592253700,40.518027,36,D,0,,0,23.9,0,23.9,23.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22975.775071,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,78,75,73,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-2,,,,26.8972\n350,\"2020-06-15 16:42:03\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,209.06,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,70,15.29,0,0,100,209.06,0,Disconnected,0,0,0,,239.53,0.0,2,48,0,65.5,50,65.5,25.3,-74.63916,273,1592253722,40.518226,44,D,0,,0,23.9,0,23.9,23.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22976.016785,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,77,75,73,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,16,,,,28.5988736\n351,\"2020-06-15 16:42:24\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,239.21,0.0,2,48,0,65.5,50,65.5,24.9,-74.643947,274,1592253743,40.518474,45,D,0,,0,23.9,0,23.9,23.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22976.270304,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,76,75,73,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,7,,,,30\n352,\"2020-06-15 16:42:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,239.21,0.0,1,48,0,65.5,50,65.5,24.8,-74.64883,274,1592253765,40.518853,39,D,0,,0,23.9,0,23.9,23.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22976.529416,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,76,75,73,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,6,,,,30.9726096\n353,\"2020-06-15 16:43:07\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,239.21,0.0,2,48,0,65.5,50,65.5,24.9,-74.651059,154,1592253786,40.518415,14,D,0,,0,23.9,0,23.9,23.0,0,0,,,0,0,0,0,,,,,,,0,1,0,1,None,0,22976.669846,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,76,75,73,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,-6,,,,31.0551544\n354,\"2020-06-15 16:43:29\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,1,48,0,65.5,50,65.5,25.0,-74.650016,16,1592253808,40.51831,4,D,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.73509,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,standby,,1,Car-A,0,,model,Pinwheel18,1,4,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,2,,,,32.0791616\n355,\"2020-06-15 16:43:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.1,-74.649995,2,1592253829,40.518461,0,D,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,3,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,0,0,2,0,,0,0,1,0,0,28.0,0,0,15.0,1,0,,,,32.4596\n356,\"2020-06-15 16:44:12\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.3,-74.649995,2,1592253851,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,0,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,2,0,,0,0,0,0,0,28.0,0,0,15.0,0,0,,,,32.4596\n357,\"2020-06-15 16:44:34\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.5,-74.649995,2,1592253873,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,0,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,1,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n358,\"2020-06-15 16:45:35\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.9,-74.649995,2,1592253934,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,0,0,,\"2020.8.1 ae1963092ff\",0,,78,75,74,None,2,0,0,0,,2,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n359,\"2020-06-15 16:46:40\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.8,-74.649995,2,1592253999,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,78,75,74,None,2,0,0,0,,3,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n360,\"2020-06-15 16:47:40\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.6,-74.649995,2,1592254059,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,78,75,74,None,2,0,0,0,,4,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n361,\"2020-06-15 16:48:40\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.5,-74.649995,2,1592254118,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,5,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n362,\"2020-06-15 16:49:47\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,1,48,0,65.5,50,65.5,25.4,-74.649995,2,1592254186,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,6,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n363,\"2020-06-15 16:50:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.4,-74.649995,2,1592254247,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,7,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n364,\"2020-06-15 16:51:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.4,-74.649995,2,1592254307,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,8,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n365,\"2020-06-15 16:52:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.4,-74.649995,2,1592254365,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,9,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n366,\"2020-06-15 16:53:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.4,-74.649995,2,1592254428,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,10,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n367,\"2020-06-15 16:54:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,11,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n368,\"2020-06-15 16:55:53\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,12,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n369,\"2020-06-15 16:56:53\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,13,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n370,\"2020-06-15 16:57:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,14,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n371,\"2020-06-15 16:58:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,15,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n372,\"2020-06-15 16:59:52\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,16,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n373,\"2020-06-15 17:00:56\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,17,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n374,\"2020-06-15 17:01:53\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,1,48,0,65.5,50,65.5,25.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,18,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n375,\"2020-06-15 17:02:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.2,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,19,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n376,\"2020-06-15 17:03:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.2,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,20,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n377,\"2020-06-15 17:04:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,1,48,0,65.5,50,65.5,25.2,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,21,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n378,\"2020-06-15 17:05:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.1,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,22,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n379,\"2020-06-15 17:06:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.1,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,23,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n380,\"2020-06-15 17:07:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.1,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,24,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n381,\"2020-06-15 17:08:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.1,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,25,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n382,\"2020-06-15 17:09:44\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.0,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,26,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n383,\"2020-06-15 17:10:45\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,25.0,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,27,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n384,\"2020-06-15 17:11:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.0,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,28,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n385,\"2020-06-15 17:12:42\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,25.0,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,77,75,74,None,2,0,0,0,,29,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n386,\"2020-06-15 17:13:42\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.9,0.0,1,48,0,65.5,50,65.5,24.9,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,30,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n387,\"2020-06-15 17:14:45\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,1,48,0,65.5,50,65.5,24.9,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,31,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n388,\"2020-06-15 17:15:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,24.9,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,32,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n389,\"2020-06-15 17:16:47\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,24.9,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,33,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n390,\"2020-06-15 17:17:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,24.9,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,34,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n391,\"2020-06-15 17:18:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,24.8,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,35,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n392,\"2020-06-15 17:19:43\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.9,0.0,1,48,0,65.5,50,65.5,24.8,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,36,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n393,\"2020-06-15 17:20:41\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.9,0.0,1,48,0,65.5,50,65.5,24.8,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,37,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n394,\"2020-06-15 17:21:44\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,2,48,0,65.5,50,65.5,24.8,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,38,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n395,\"2020-06-15 17:22:43\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,1,48,0,65.5,50,65.5,24.8,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,39,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n396,\"2020-06-15 17:23:43\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,24.8,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,40,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n397,\"2020-06-15 17:24:44\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,24.7,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,41,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n398,\"2020-06-15 17:25:47\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.17,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.17,0,Disconnected,0,0,0,,242.38,0.0,1,48,0,65.5,50,65.5,24.7,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,42,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n399,\"2020-06-15 17:26:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,208.61,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,208.61,0,Disconnected,0,0,0,,242.9,0.0,2,48,0,65.5,50,65.5,24.7,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,43,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n400,\"2020-06-15 17:27:42\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.72,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.72,0,Disconnected,0,0,0,,241.86,0.0,2,48,0,65.5,50,65.5,24.7,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,44,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n401,\"2020-06-15 17:28:39\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.72,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.72,0,Disconnected,0,0,0,,241.86,0.0,2,48,0,65.5,50,65.5,24.7,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,45,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n402,\"2020-06-15 17:29:40\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.72,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.72,0,Disconnected,0,0,0,,241.86,0.0,2,48,0,65.5,50,65.5,24.7,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,46,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n403,\"2020-06-15 17:30:42\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.72,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.72,0,Disconnected,0,0,0,,241.86,0.0,2,48,0,65.5,50,65.5,24.7,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,47,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n404,\"2020-06-15 17:31:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.72,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.72,0,Disconnected,0,0,0,,241.86,0.0,2,48,0,65.5,50,65.5,24.7,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,48,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n405,\"2020-06-15 17:32:52\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.72,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.72,0,Disconnected,0,0,0,,241.86,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,49,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n406,\"2020-06-15 17:33:52\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.72,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.72,0,Disconnected,0,0,0,,241.86,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,50,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n407,\"2020-06-15 17:34:56\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.27,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.27,0,Disconnected,0,0,0,,241.34,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,51,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n408,\"2020-06-15 17:35:55\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.27,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.27,0,Disconnected,0,0,0,,241.34,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,52,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n409,\"2020-06-15 17:36:55\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.26,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.26,0,Disconnected,0,0,0,,241.32,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,53,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n410,\"2020-06-15 17:37:53\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.26,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.26,0,Disconnected,0,0,0,,241.32,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,54,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n411,\"2020-06-15 17:38:53\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.26,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.26,0,Disconnected,0,0,0,,241.32,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,55,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n412,\"2020-06-15 17:39:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.26,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.26,0,Disconnected,0,0,0,,241.32,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,56,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n413,\"2020-06-15 17:40:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.26,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.26,0,Disconnected,0,0,0,,241.32,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,57,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n414,\"2020-06-15 17:41:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.26,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.26,0,Disconnected,0,0,0,,241.32,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,58,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n415,\"2020-06-15 17:42:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.26,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.26,0,Disconnected,0,0,0,,241.32,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,59,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n416,\"2020-06-15 17:43:45\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.26,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.26,0,Disconnected,0,0,0,,241.32,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,60,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n417,\"2020-06-15 17:44:43\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.26,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.26,0,Disconnected,0,0,0,,241.32,0.0,2,48,0,65.5,50,65.5,24.6,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,61,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n418,\"2020-06-15 17:45:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.26,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.26,0,Disconnected,0,0,0,,241.32,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,62,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n419,\"2020-06-15 17:46:47\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,207.26,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,207.26,0,Disconnected,0,0,0,,241.32,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,63,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n420,\"2020-06-15 17:47:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,64,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n421,\"2020-06-15 17:48:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,65,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n422,\"2020-06-15 17:49:54\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,66,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n423,\"2020-06-15 17:50:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,67,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n424,\"2020-06-15 17:51:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,68,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n425,\"2020-06-15 17:52:45\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,1,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,69,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n426,\"2020-06-15 17:53:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,70,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n427,\"2020-06-15 17:54:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,71,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n428,\"2020-06-15 17:55:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,72,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n429,\"2020-06-15 17:56:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,73,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n430,\"2020-06-15 17:57:45\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,74,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n431,\"2020-06-15 17:58:45\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,75,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n432,\"2020-06-15 17:59:43\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,76,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n433,\"2020-06-15 18:00:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,77,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n434,\"2020-06-15 18:01:48\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,78,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n435,\"2020-06-15 18:02:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.5,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,76,75,74,None,2,0,0,0,,79,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n436,\"2020-06-15 18:03:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,80,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n437,\"2020-06-15 18:04:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,81,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n438,\"2020-06-15 18:05:52\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,82,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n439,\"2020-06-15 18:06:55\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,83,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n440,\"2020-06-15 18:07:54\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,1,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,84,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n441,\"2020-06-15 18:08:55\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,85,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n442,\"2020-06-15 18:09:54\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.82,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.82,0,Disconnected,0,0,0,,240.82,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,86,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n443,\"2020-06-15 18:10:54\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.81,0,90,48,Engaged,,0,0,<invalid>,69,1,90,,69,15.29,0,0,100,206.81,0,Disconnected,0,0,0,,240.8,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,87,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n444,\"2020-06-15 18:11:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.91,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.91,0,Disconnected,0,0,0,,239.76,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,88,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n445,\"2020-06-15 18:12:42\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.91,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.91,0,Disconnected,0,0,0,,239.76,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,89,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n446,\"2020-06-15 18:13:38\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.91,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.91,0,Disconnected,0,0,0,,239.76,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,90,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n447,\"2020-06-15 18:14:43\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.36,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.36,0,Disconnected,0,0,0,,240.28,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,91,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n448,\"2020-06-15 18:15:50\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.91,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.91,0,Disconnected,0,0,0,,239.76,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,92,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n449,\"2020-06-15 18:16:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.38,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.38,0,Disconnected,0,0,0,,240.3,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,93,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n450,\"2020-06-15 18:17:43\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.91,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.91,0,Disconnected,0,0,0,,239.76,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,94,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n451,\"2020-06-15 18:18:43\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.38,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.38,0,Disconnected,0,0,0,,240.3,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,95,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n452,\"2020-06-15 18:19:40\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.36,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.36,0,Disconnected,0,0,0,,240.28,0.0,1,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,96,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n453,\"2020-06-15 18:20:47\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.36,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.36,0,Disconnected,0,0,0,,240.28,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,97,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n454,\"2020-06-15 18:21:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.91,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.91,0,Disconnected,0,0,0,,239.76,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,98,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n455,\"2020-06-15 18:22:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.93,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.93,0,Disconnected,0,0,0,,239.78,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,99,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n456,\"2020-06-15 18:23:41\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.91,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.91,0,Disconnected,0,0,0,,239.76,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,100,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n457,\"2020-06-15 18:24:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.38,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.38,0,Disconnected,0,0,0,,240.3,0.0,2,48,0,65.5,50,65.5,24.4,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,101,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n458,\"2020-06-15 18:25:47\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.91,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.91,0,Disconnected,0,0,0,,239.76,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,102,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n459,\"2020-06-15 18:26:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.38,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.38,0,Disconnected,0,0,0,,240.3,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,103,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n460,\"2020-06-15 18:27:46\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.93,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.93,0,Disconnected,0,0,0,,239.78,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,104,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n461,\"2020-06-15 18:28:47\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.93,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.93,0,Disconnected,0,0,0,,239.78,0.0,1,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,105,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n462,\"2020-06-15 18:29:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.93,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.93,0,Disconnected,0,0,0,,239.78,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,106,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n463,\"2020-06-15 18:30:53\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.38,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.38,0,Disconnected,0,0,0,,240.3,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,107,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n464,\"2020-06-15 18:31:56\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.38,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.38,0,Disconnected,0,0,0,,240.3,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,108,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n465,\"2020-06-15 18:32:56\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.36,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.36,0,Disconnected,0,0,0,,240.28,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,109,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n466,\"2020-06-15 18:33:58\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.38,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.38,0,Disconnected,0,0,0,,240.3,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,110,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n467,\"2020-06-15 18:34:51\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.93,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.93,0,Disconnected,0,0,0,,239.78,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,111,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n468,\"2020-06-15 18:35:49\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.38,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.38,0,Disconnected,0,0,0,,240.3,0.0,1,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,112,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n469,\"2020-06-15 18:36:53\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.93,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,205.93,0,Disconnected,0,0,0,,239.78,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,113,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n470,\"2020-06-15 18:37:52\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.38,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,69,15.29,0,0,100,206.38,0,Disconnected,0,0,0,,240.3,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,114,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n471,\"2020-06-15 18:38:52\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,206.38,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,68,15.29,0,0,100,206.38,0,Disconnected,0,0,0,,240.3,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,115,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n472,\"2020-06-15 18:39:53\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.93,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,68,15.29,0,0,100,205.93,0,Disconnected,0,0,0,,239.78,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,116,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n473,\"2020-06-15 18:40:53\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.93,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,68,15.29,0,0,100,205.93,0,Disconnected,0,0,0,,239.78,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,117,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n474,\"2020-06-15 18:41:52\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.93,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,68,15.29,0,0,100,205.93,0,Disconnected,0,0,0,,239.78,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,118,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n475,\"2020-06-15 18:42:43\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.93,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,68,15.29,0,0,100,205.93,0,Disconnected,0,0,0,,240.3,0.0,2,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,119,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n476,\"2020-06-15 18:43:47\",1,,736151111,Car-A,,<invalid>,,5YJ3E1EA1JFXXXXXX,<invalid>,69324805777777777,0,,online,,0.0,48,1,0,,0,,205.91,0,90,48,Engaged,,0,0,<invalid>,68,1,90,,68,15.29,0,0,100,205.91,0,Disconnected,0,0,0,,240.28,0.0,1,48,0,65.5,50,65.5,24.3,-74.649995,2,1592254443,40.518461,,,0,,0,23.9,0,23.9,23.5,0,0,,,0,0,0,0,,,,,,,0,1,1,1,None,0,22976.746896,0,0,off,Glass,,0,1,0,,<invalid>,,7,1,0,DeepBlue,0,ready,,1,Car-A,0,,model,Pinwheel18,1,0,,\"2020.8.1 ae1963092ff\",0,,75,75,74,None,2,0,0,0,,120,0,0,0,0,28.0,0,0,15.0,0,0,,,,\n477,\"2020-06-15 18:44:51\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,279.29,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261089,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,121,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n478,\"2020-06-15 18:45:52\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,279.29,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261150,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,122,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n479,\"2020-06-15 18:46:54\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,279.29,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.8,-74.037671,283,1592261213,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,91,71,79,None,2,0,0,0,,123,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n480,\"2020-06-15 18:47:50\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,279.29,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261269,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,124,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n481,\"2020-06-15 18:48:49\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,279.29,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261328,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,125,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n482,\"2020-06-15 18:49:49\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,279.29,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.8,-74.037671,283,1592261388,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,91,71,79,None,2,0,0,0,,126,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n483,\"2020-06-15 18:50:48\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,279.29,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261447,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,127,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n484,\"2020-06-15 18:51:51\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,279.29,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261509,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,128,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n485,\"2020-06-15 18:52:52\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261571,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,129,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n486,\"2020-06-15 18:53:49\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,279.29,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261627,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,130,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n487,\"2020-06-15 18:54:43\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,279.29,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.8,-74.037671,283,1592261682,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,91,71,79,None,2,0,0,0,,131,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n488,\"2020-06-15 18:55:44\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261742,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,132,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n489,\"2020-06-15 18:56:41\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,227.34,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261799,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,133,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n490,\"2020-06-15 18:57:40\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261859,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,134,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n491,\"2020-06-15 18:58:40\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261919,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,135,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n492,\"2020-06-15 18:59:42\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592261981,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,136,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n493,\"2020-06-15 19:00:49\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592262047,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,137,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n494,\"2020-06-15 19:01:51\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592262109,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,138,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n495,\"2020-06-15 19:02:54\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592262172,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,139,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n496,\"2020-06-15 19:03:52\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592262230,40.721753,,P,0,,0,20.0,0,22.2,26.5,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,79,None,2,0,0,0,,140,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n497,\"2020-06-15 19:04:54\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.8,-74.037671,283,1592262292,40.721753,,P,0,,0,20.0,0,22.2,26.0,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,91,71,78,None,2,0,0,0,,141,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n498,\"2020-06-15 19:05:56\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592262354,40.721753,,P,0,,0,20.0,0,22.2,26.0,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,78,None,2,0,0,0,,142,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n499,\"2020-06-15 19:06:55\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592262413,40.721753,,P,0,,0,20.0,0,22.2,26.0,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,78,None,2,0,0,0,,143,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n500,\"2020-06-15 19:07:55\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592262474,40.721753,,P,0,,0,20.0,0,22.2,26.0,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,78,None,2,0,0,0,,144,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n501,\"2020-06-15 19:08:54\",1,,172022222,Car-B,,<invalid>,,5YJSA1E2XLFYYYYYY,<invalid>,55636994333333333,,,online,,0.0,48,1,0,,0,,278.86,0,90,48,Engaged,,0,0,<invalid>,71,1,90,0,71,45.33,0,1,100,999.0,0,Disconnected,0,0,0,,226.99,0.0,0,48,0,45332.0,50,183.0,32.7,-74.037671,283,1592262532,40.721753,,P,0,,0,20.0,0,22.2,26.0,0,0,,,0,0,0,0,,,,,,0,0,1,0,1,None,0,443.135057,0,0,off,Glass,,0,1,0,,None,2,8,1,0,SteelGrey,0,disabled,,1,Car-B,0,,model,Tempest19SonicSilver,1,0,,\"2020.20.12 d2c8a3e11\",0,,90,71,78,None,2,0,0,0,,145,0,0,0,0,28.0,0,0,15.0,0,0,0,0,0,\n"
  },
  {
    "path": "test/fixtures/import/07_alternative_variant/112023.csv",
    "content": "data_id,Date,calendar_enabled,remote_start_enabled,vehicle_id,display_name,color,backseat_token,notifications_enabled,vin,backseat_token_updated_at,id,tokens,id_s,state,user_charge_enable_request,time_to_full_charge,charge_current_request,charge_enable_request,charge_to_max_range,charger_phases,battery_heater_on,managed_charging_start_time,battery_range,charger_power,charge_limit_soc,charger_pilot_current,charge_port_latch,battery_current,charger_actual_current,scheduled_charging_pending,fast_charger_type,usable_battery_level,motorized_charge_port,charge_limit_soc_std,not_enough_power_to_heat,battery_level,charge_energy_added,charge_port_door_open,max_range_charge_counter,charge_limit_soc_max,ideal_battery_range,managed_charging_active,charging_state,fast_charger_present,trip_charging,managed_charging_user_canceled,scheduled_charging_start_time,est_battery_range,charge_rate,charger_voltage,charge_current_request_max,eu_vehicle,charge_miles_added_ideal,charge_limit_soc_min,charge_miles_added_rated,inside_temp,longitude,heading,gps_as_of,latitude,speed,shift_state,seat_heater_rear_right,seat_heater_rear_left_back,seat_heater_left,passenger_temp_setting,is_auto_conditioning_on,driver_temp_setting,outside_temp,seat_heater_rear_center,is_rear_defroster_on,seat_heater_rear_right_back,smart_preconditioning,seat_heater_right,fan_status,is_front_defroster_on,seat_heater_rear_left,gui_charge_rate_units,gui_24_hour_time,gui_temperature_units,gui_range_display,gui_distance_units,sun_roof_installed,rhd,remote_start_supported,homelink_nearby,parsed_calendar_supported,spoiler_type,ft,odometer,remote_start,pr,has_spoiler,roof_color,perf_config,valet_mode,calendar_supported,pf,sun_roof_percent_open,third_row_seats,seat_type,api_version,rear_seat_heaters,rt,exterior_color,df,autopark_state,sun_roof_state,notifications_supported,vehicle_name,dr,autopark_style,car_type,wheel_type,locked,center_display_state,last_autopark_error,car_version,dark_rims,autopark_state_v2,inside_tempF,driver_temp_settingF,outside_tempF,odometerF,idleNumber,sleepNumber,driveNumber,chargeNumber,polling,idleTime,running,rerunning,maxRange,left_temp_direction,max_avail_temp,is_climate_on,right_temp_direction,min_avail_temp,rear_seat_type,power,steering_wheel_heater,wiper_blade_heater,side_mirror_heaters,elevation\n1742297,2023-11-01 00:00:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742298,2023-11-01 00:01:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742299,2023-11-01 00:02:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742300,2023-11-01 00:03:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742301,2023-11-01 00:04:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742302,2023-11-01 00:05:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742303,2023-11-01 00:06:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742304,2023-11-01 00:07:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742305,2023-11-01 00:08:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742306,2023-11-01 00:09:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742307,2023-11-01 00:10:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742308,2023-11-01 00:11:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742309,2023-11-01 00:12:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742310,2023-11-01 00:13:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742311,2023-11-01 00:14:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742312,2023-11-01 00:15:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742313,2023-11-01 00:16:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742314,2023-11-01 00:17:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742315,2023-11-01 00:18:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742316,2023-11-01 00:19:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742317,2023-11-01 00:20:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742318,2023-11-01 00:21:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742319,2023-11-01 00:22:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742320,2023-11-01 00:23:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742321,2023-11-01 00:24:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742322,2023-11-01 00:25:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742323,2023-11-01 00:26:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742324,2023-11-01 00:27:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742325,2023-11-01 00:28:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742326,2023-11-01 00:29:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742327,2023-11-01 00:30:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742328,2023-11-01 00:31:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742329,2023-11-01 00:32:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742330,2023-11-01 00:33:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742331,2023-11-01 00:34:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742332,2023-11-01 00:35:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742333,2023-11-01 00:36:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742334,2023-11-01 00:37:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742335,2023-11-01 00:38:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742336,2023-11-01 00:39:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742337,2023-11-01 00:40:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742338,2023-11-01 00:41:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742339,2023-11-01 00:42:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742340,2023-11-01 00:43:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742341,2023-11-01 00:44:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742342,2023-11-01 00:45:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742343,2023-11-01 00:46:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742344,2023-11-01 00:47:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742345,2023-11-01 00:48:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742346,2023-11-01 00:49:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742347,2023-11-01 00:50:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742348,2023-11-01 00:51:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742349,2023-11-01 00:52:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742350,2023-11-01 00:53:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742351,2023-11-01 00:54:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742352,2023-11-01 00:55:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742353,2023-11-01 00:56:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742354,2023-11-01 00:57:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742355,2023-11-01 00:58:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742356,2023-11-01 00:59:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742357,2023-11-01 01:00:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742358,2023-11-01 01:01:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742359,2023-11-01 01:02:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742360,2023-11-01 01:03:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742361,2023-11-01 01:04:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742362,2023-11-01 01:05:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742363,2023-11-01 01:06:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742364,2023-11-01 01:07:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742365,2023-11-01 01:08:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742366,2023-11-01 01:09:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742367,2023-11-01 01:10:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742368,2023-11-01 01:11:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742369,2023-11-01 01:12:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742370,2023-11-01 01:13:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742371,2023-11-01 01:14:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742372,2023-11-01 01:15:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742373,2023-11-01 01:16:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742374,2023-11-01 01:17:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742375,2023-11-01 01:18:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742376,2023-11-01 01:19:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742377,2023-11-01 01:20:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742378,2023-11-01 01:21:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742379,2023-11-01 01:22:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742380,2023-11-01 01:23:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742381,2023-11-01 01:24:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742382,2023-11-01 01:25:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742383,2023-11-01 01:26:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742384,2023-11-01 01:27:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742385,2023-11-01 01:28:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742386,2023-11-01 01:29:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742387,2023-11-01 01:30:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742388,2023-11-01 01:31:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742389,2023-11-01 01:32:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742390,2023-11-01 01:33:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742391,2023-11-01 01:34:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742392,2023-11-01 01:35:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742393,2023-11-01 01:36:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742394,2023-11-01 01:37:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742395,2023-11-01 01:38:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742396,2023-11-01 01:39:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742397,2023-11-01 01:40:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742398,2023-11-01 01:41:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742399,2023-11-01 01:42:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742400,2023-11-01 01:43:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742401,2023-11-01 01:44:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742402,2023-11-01 01:45:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742403,2023-11-01 01:46:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742404,2023-11-01 01:47:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742405,2023-11-01 01:48:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742406,2023-11-01 01:49:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742407,2023-11-01 01:50:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742408,2023-11-01 01:51:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742409,2023-11-01 01:52:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742410,2023-11-01 01:53:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742411,2023-11-01 01:54:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742412,2023-11-01 01:55:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742413,2023-11-01 01:56:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742414,2023-11-01 01:57:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742415,2023-11-01 01:58:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742416,2023-11-01 01:59:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742417,2023-11-01 02:00:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742418,2023-11-01 02:01:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742419,2023-11-01 02:02:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742420,2023-11-01 02:03:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742421,2023-11-01 02:04:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742422,2023-11-01 02:05:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742423,2023-11-01 02:06:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742424,2023-11-01 02:07:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742425,2023-11-01 02:08:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742426,2023-11-01 02:09:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742427,2023-11-01 02:10:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742428,2023-11-01 02:11:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742429,2023-11-01 02:12:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742430,2023-11-01 02:13:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742431,2023-11-01 02:14:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742432,2023-11-01 02:15:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742433,2023-11-01 02:16:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742434,2023-11-01 02:17:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742435,2023-11-01 02:18:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742436,2023-11-01 02:19:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742437,2023-11-01 02:20:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742438,2023-11-01 02:21:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742439,2023-11-01 02:22:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742440,2023-11-01 02:23:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742441,2023-11-01 02:24:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742442,2023-11-01 02:25:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742443,2023-11-01 02:26:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742444,2023-11-01 02:27:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742445,2023-11-01 02:28:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742446,2023-11-01 02:29:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742447,2023-11-01 02:30:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742448,2023-11-01 02:31:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742449,2023-11-01 02:32:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742450,2023-11-01 02:33:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742451,2023-11-01 02:34:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742452,2023-11-01 02:35:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742453,2023-11-01 02:36:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742454,2023-11-01 02:37:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742455,2023-11-01 02:38:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742456,2023-11-01 02:39:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742457,2023-11-01 02:40:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742458,2023-11-01 02:41:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742459,2023-11-01 02:42:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742460,2023-11-01 02:43:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742461,2023-11-01 02:44:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742462,2023-11-01 02:45:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742463,2023-11-01 02:46:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742464,2023-11-01 02:47:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742465,2023-11-01 02:48:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742466,2023-11-01 02:49:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742467,2023-11-01 02:50:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742468,2023-11-01 02:51:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742469,2023-11-01 02:52:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742470,2023-11-01 02:53:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742471,2023-11-01 02:54:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742472,2023-11-01 02:55:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742473,2023-11-01 02:56:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742474,2023-11-01 02:57:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742475,2023-11-01 02:58:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742476,2023-11-01 02:59:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742477,2023-11-01 03:00:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742478,2023-11-01 03:01:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742479,2023-11-01 03:02:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742480,2023-11-01 03:03:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742481,2023-11-01 03:04:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742482,2023-11-01 03:05:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742483,2023-11-01 03:06:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742484,2023-11-01 03:07:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742485,2023-11-01 03:08:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742486,2023-11-01 03:09:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742487,2023-11-01 03:10:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742488,2023-11-01 03:11:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742489,2023-11-01 03:12:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742490,2023-11-01 03:13:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742491,2023-11-01 03:14:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742492,2023-11-01 03:15:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742493,2023-11-01 03:16:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742494,2023-11-01 03:17:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,0,0,0,False,0,0,0,265.99,,,,,,,,,,,\n1742495,2023-11-01 03:18:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6589,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742496,2023-11-01 03:19:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742497,2023-11-01 03:20:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742498,2023-11-01 03:21:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742499,2023-11-01 03:22:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742500,2023-11-01 03:23:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742501,2023-11-01 03:24:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742502,2023-11-01 03:25:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742503,2023-11-01 03:26:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742504,2023-11-01 03:27:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742505,2023-11-01 03:28:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742506,2023-11-01 03:29:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742507,2023-11-01 03:30:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742508,2023-11-01 03:31:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742509,2023-11-01 03:32:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742510,2023-11-01 03:33:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742511,2023-11-01 03:34:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742512,2023-11-01 03:35:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742513,2023-11-01 03:36:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742514,2023-11-01 03:37:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742515,2023-11-01 03:38:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742516,2023-11-01 03:39:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742517,2023-11-01 03:40:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742518,2023-11-01 03:41:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742519,2023-11-01 03:42:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742520,2023-11-01 03:43:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742521,2023-11-01 03:44:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742522,2023-11-01 03:45:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742523,2023-11-01 03:46:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742524,2023-11-01 03:47:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742525,2023-11-01 03:48:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742526,2023-11-01 03:49:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742527,2023-11-01 03:50:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742528,2023-11-01 03:51:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742529,2023-11-01 03:52:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742530,2023-11-01 03:53:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742531,2023-11-01 03:54:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742532,2023-11-01 03:55:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742533,2023-11-01 03:56:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742534,2023-11-01 03:57:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742535,2023-11-01 03:58:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742536,2023-11-01 03:59:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742537,2023-11-01 04:00:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742538,2023-11-01 04:01:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742539,2023-11-01 04:02:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742540,2023-11-01 04:03:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742541,2023-11-01 04:04:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742542,2023-11-01 04:05:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742543,2023-11-01 04:06:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742544,2023-11-01 04:07:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742545,2023-11-01 04:08:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742546,2023-11-01 04:09:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742547,2023-11-01 04:10:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742548,2023-11-01 04:11:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742549,2023-11-01 04:12:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742550,2023-11-01 04:13:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742551,2023-11-01 04:14:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742552,2023-11-01 04:15:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742553,2023-11-01 04:16:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742554,2023-11-01 04:17:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742555,2023-11-01 04:18:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742556,2023-11-01 04:19:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742557,2023-11-01 04:20:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742558,2023-11-01 04:21:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742559,2023-11-01 04:22:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742560,2023-11-01 04:23:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742561,2023-11-01 04:24:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742562,2023-11-01 04:25:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742563,2023-11-01 04:26:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742564,2023-11-01 04:27:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742565,2023-11-01 04:28:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742566,2023-11-01 04:29:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742567,2023-11-01 04:30:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742568,2023-11-01 04:31:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742569,2023-11-01 04:32:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742570,2023-11-01 04:33:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742571,2023-11-01 04:34:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742572,2023-11-01 04:35:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742573,2023-11-01 04:36:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742574,2023-11-01 04:37:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742575,2023-11-01 04:38:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742576,2023-11-01 04:39:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742577,2023-11-01 04:40:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742578,2023-11-01 04:41:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742579,2023-11-01 04:42:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742580,2023-11-01 04:43:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742581,2023-11-01 04:44:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742582,2023-11-01 04:45:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742583,2023-11-01 04:46:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742584,2023-11-01 04:47:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742585,2023-11-01 04:48:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742586,2023-11-01 04:49:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742587,2023-11-01 04:50:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742588,2023-11-01 04:51:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742589,2023-11-01 04:52:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742590,2023-11-01 04:53:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742591,2023-11-01 04:54:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742592,2023-11-01 04:55:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742593,2023-11-01 04:56:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742594,2023-11-01 04:57:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742595,2023-11-01 04:58:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742596,2023-11-01 04:59:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742597,2023-11-01 05:00:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742598,2023-11-01 05:01:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742599,2023-11-01 05:02:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742600,2023-11-01 05:03:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742601,2023-11-01 05:04:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742602,2023-11-01 05:05:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742603,2023-11-01 05:06:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742604,2023-11-01 05:07:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742605,2023-11-01 05:08:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742606,2023-11-01 05:09:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742607,2023-11-01 05:10:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742608,2023-11-01 05:11:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742609,2023-11-01 05:12:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742610,2023-11-01 05:13:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742611,2023-11-01 05:14:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742612,2023-11-01 05:15:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742613,2023-11-01 05:16:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742614,2023-11-01 05:17:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742615,2023-11-01 05:18:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742616,2023-11-01 05:19:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742617,2023-11-01 05:20:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742618,2023-11-01 05:21:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742619,2023-11-01 05:22:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742620,2023-11-01 05:23:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742621,2023-11-01 05:24:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742622,2023-11-01 05:25:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742623,2023-11-01 05:26:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742624,2023-11-01 05:27:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742625,2023-11-01 05:28:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742626,2023-11-01 05:29:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742627,2023-11-01 05:30:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742628,2023-11-01 05:31:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742629,2023-11-01 05:32:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742630,2023-11-01 05:33:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742631,2023-11-01 05:34:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742632,2023-11-01 05:35:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742633,2023-11-01 05:36:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742634,2023-11-01 05:37:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742635,2023-11-01 05:38:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742636,2023-11-01 05:39:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742637,2023-11-01 05:40:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742638,2023-11-01 05:41:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742639,2023-11-01 05:42:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742640,2023-11-01 05:43:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742641,2023-11-01 05:44:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742642,2023-11-01 05:45:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742643,2023-11-01 05:46:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742644,2023-11-01 05:47:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742645,2023-11-01 05:48:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742646,2023-11-01 05:49:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742647,2023-11-01 05:50:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742648,2023-11-01 05:51:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742649,2023-11-01 05:52:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742650,2023-11-01 05:53:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742651,2023-11-01 05:54:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742652,2023-11-01 05:55:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742653,2023-11-01 05:56:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742654,2023-11-01 05:57:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742655,2023-11-01 05:58:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742656,2023-11-01 05:59:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742657,2023-11-01 06:00:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742658,2023-11-01 06:01:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742659,2023-11-01 06:02:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742660,2023-11-01 06:03:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742661,2023-11-01 06:04:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742662,2023-11-01 06:05:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742663,2023-11-01 06:06:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742664,2023-11-01 06:07:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742665,2023-11-01 06:08:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742666,2023-11-01 06:09:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742667,2023-11-01 06:10:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742668,2023-11-01 06:11:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742669,2023-11-01 06:12:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742670,2023-11-01 06:13:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742671,2023-11-01 06:14:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742672,2023-11-01 06:15:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742673,2023-11-01 06:16:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742674,2023-11-01 06:17:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742675,2023-11-01 06:18:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742676,2023-11-01 06:19:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742677,2023-11-01 06:20:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742678,2023-11-01 06:21:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742679,2023-11-01 06:22:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742680,2023-11-01 06:23:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742681,2023-11-01 06:24:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742682,2023-11-01 06:25:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742683,2023-11-01 06:26:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742684,2023-11-01 06:27:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742685,2023-11-01 06:28:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742686,2023-11-01 06:29:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742687,2023-11-01 06:30:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742688,2023-11-01 06:31:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742689,2023-11-01 06:32:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742690,2023-11-01 06:33:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742691,2023-11-01 06:34:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742692,2023-11-01 06:35:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742693,2023-11-01 06:36:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742694,2023-11-01 06:37:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742695,2023-11-01 06:38:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742696,2023-11-01 06:39:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742697,2023-11-01 06:40:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742698,2023-11-01 06:41:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742699,2023-11-01 06:42:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742700,2023-11-01 06:43:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742701,2023-11-01 06:44:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742702,2023-11-01 06:45:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742703,2023-11-01 06:46:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742704,2023-11-01 06:47:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742705,2023-11-01 06:48:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742706,2023-11-01 06:49:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742707,2023-11-01 06:50:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742708,2023-11-01 06:51:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742709,2023-11-01 06:52:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742710,2023-11-01 06:53:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742711,2023-11-01 06:54:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742712,2023-11-01 06:55:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742713,2023-11-01 06:56:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742714,2023-11-01 06:57:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742715,2023-11-01 06:58:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742716,2023-11-01 06:59:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742717,2023-11-01 07:00:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742718,2023-11-01 07:01:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742719,2023-11-01 07:02:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742720,2023-11-01 07:03:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742721,2023-11-01 07:04:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742722,2023-11-01 07:05:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742723,2023-11-01 07:06:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742724,2023-11-01 07:07:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742725,2023-11-01 07:08:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742726,2023-11-01 07:09:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742727,2023-11-01 07:10:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742728,2023-11-01 07:11:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742729,2023-11-01 07:12:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742730,2023-11-01 07:13:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742731,2023-11-01 07:14:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742732,2023-11-01 07:15:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742733,2023-11-01 07:16:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742734,2023-11-01 07:17:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742735,2023-11-01 07:18:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742736,2023-11-01 07:19:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742737,2023-11-01 07:20:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742738,2023-11-01 07:21:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742739,2023-11-01 07:22:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742740,2023-11-01 07:23:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742741,2023-11-01 07:24:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742742,2023-11-01 07:25:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742743,2023-11-01 07:26:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742744,2023-11-01 07:27:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742745,2023-11-01 07:28:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742746,2023-11-01 07:29:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742747,2023-11-01 07:30:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742748,2023-11-01 07:31:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742749,2023-11-01 07:32:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742750,2023-11-01 07:33:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742751,2023-11-01 07:34:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742752,2023-11-01 07:35:13,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742753,2023-11-01 07:36:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742754,2023-11-01 07:37:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742755,2023-11-01 07:38:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742756,2023-11-01 07:39:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742757,2023-11-01 07:40:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742758,2023-11-01 07:41:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742759,2023-11-01 07:42:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742760,2023-11-01 07:43:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742761,2023-11-01 07:44:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742762,2023-11-01 07:45:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742763,2023-11-01 07:46:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742764,2023-11-01 07:47:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742765,2023-11-01 07:48:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742766,2023-11-01 07:49:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742767,2023-11-01 07:50:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742768,2023-11-01 07:51:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742769,2023-11-01 07:52:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742770,2023-11-01 07:53:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742771,2023-11-01 07:54:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742772,2023-11-01 07:55:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742773,2023-11-01 07:56:13,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742774,2023-11-01 07:57:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742775,2023-11-01 07:58:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742776,2023-11-01 07:59:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742777,2023-11-01 08:00:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742778,2023-11-01 08:01:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742779,2023-11-01 08:02:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742780,2023-11-01 08:03:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742781,2023-11-01 08:04:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742782,2023-11-01 08:05:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742783,2023-11-01 08:06:15,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742784,2023-11-01 08:07:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742785,2023-11-01 08:08:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742786,2023-11-01 08:09:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742787,2023-11-01 08:10:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742788,2023-11-01 08:11:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742789,2023-11-01 08:12:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742790,2023-11-01 08:13:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742791,2023-11-01 08:14:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742792,2023-11-01 08:15:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742793,2023-11-01 08:16:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742794,2023-11-01 08:17:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742795,2023-11-01 08:18:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742796,2023-11-01 08:19:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742797,2023-11-01 08:20:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742798,2023-11-01 08:21:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742799,2023-11-01 08:22:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742800,2023-11-01 08:23:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742801,2023-11-01 08:24:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742802,2023-11-01 08:25:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742803,2023-11-01 08:26:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742804,2023-11-01 08:27:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742805,2023-11-01 08:28:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742806,2023-11-01 08:29:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742807,2023-11-01 08:30:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742808,2023-11-01 08:31:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742809,2023-11-01 08:32:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742810,2023-11-01 08:33:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742811,2023-11-01 08:34:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742812,2023-11-01 08:35:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742813,2023-11-01 08:36:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742814,2023-11-01 08:37:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742815,2023-11-01 08:38:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742816,2023-11-01 08:39:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742817,2023-11-01 08:40:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742818,2023-11-01 08:41:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742819,2023-11-01 08:42:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742820,2023-11-01 08:43:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742821,2023-11-01 08:44:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742822,2023-11-01 08:45:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742823,2023-11-01 08:46:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742824,2023-11-01 08:47:10,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742825,2023-11-01 08:48:10,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742826,2023-11-01 08:49:10,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742827,2023-11-01 08:50:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742828,2023-11-01 08:51:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742829,2023-11-01 08:52:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742830,2023-11-01 08:53:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3443,0,0,,0,0,0,265.99,,,,,,,,,,,\n1742831,2023-11-01 08:54:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.1,0,270,1567353280,0,,P,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,closed,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,70,38508.1998,6590,3443,0,0,,0,0,0,265.99,-160,28,False,-160,15,1,0,,,,\n1742832,2023-11-01 08:55:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.2,0,270,1567353312,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,,38508.1998,6590,0,0,0,,1,0,0,265.99,,28,False,,15,1,0,,,,\n1742833,2023-11-01 08:56:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.2,0,270,1567353370,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,,38508.1998,6590,0,0,0,,2,0,0,265.99,,28,False,,15,1,0,,,,\n1742834,2023-11-01 08:57:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.2,0,270,1567353431,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,,38508.1998,6590,0,0,0,,3,0,0,265.99,,28,False,,15,1,0,,,,\n1742835,2023-11-01 08:58:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.2,0,270,1567353490,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,,38508.1998,6590,0,0,0,,4,0,0,265.99,,28,False,,15,1,0,,,,\n1742836,2023-11-01 08:59:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.2,0,270,1567353551,0,,,,,0,21.1,,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,70,38508.1998,6590,0,0,0,,5,0,0,265.99,,28,False,,15,1,0,,,,\n1742837,2023-11-01 09:00:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.2,0,270,1567353611,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,,38508.1998,6590,0,0,0,,6,0,0,265.99,,28,False,,15,1,0,,,,\n1742838,2023-11-01 09:01:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.2,0,270,1567353670,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,,38508.1998,6590,0,0,0,,7,0,0,265.99,,28,False,,15,1,0,,,,\n1742839,2023-11-01 09:02:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.2,0,270,1567353731,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,,38508.1998,6590,0,0,0,,8,0,0,265.99,,28,False,,15,1,0,,,,\n1742840,2023-11-01 09:03:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.2,0,270,1567353791,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,,38508.1998,6590,0,0,0,,9,0,0,265.99,,28,False,,15,1,0,,,,\n1742841,2023-11-01 09:04:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.2,0,270,1567353851,0,,,,,0,21.1,,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,70,38508.1998,6590,0,0,0,,10,0,0,265.99,,28,False,,15,1,0,,,,\n1742842,2023-11-01 09:05:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,23.5,0,270,1567353913,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,74,69,70,38508.1998,6590,0,0,0,,11,0,0,265.99,61,28,False,61,15,1,0,,,,\n1742843,2023-11-01 09:06:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.2,0,270,1567353971,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,75,69,70,38508.1998,6590,0,0,0,,12,0,0,265.99,-173,28,False,-173,15,1,0,,,,\n1742844,2023-11-01 09:07:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.5,0,270,1567354031,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,76,69,70,38508.1998,6590,0,0,0,,13,0,0,265.99,-183,28,False,-183,15,1,0,,,,\n1742845,2023-11-01 09:08:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,24.8,0,270,1567354091,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,76,69,70,38508.1998,6590,0,0,0,,14,0,0,265.99,-194,28,False,-194,15,1,0,,,,\n1742846,2023-11-01 09:09:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25,0,270,1567354151,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,15,0,0,265.99,-205,28,False,-205,15,1,0,,,,\n1742847,2023-11-01 09:10:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25,0,270,1567354211,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,16,0,0,265.99,-207,28,False,-207,15,1,0,,,,\n1742848,2023-11-01 09:11:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25,0,270,1567354271,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,17,0,0,265.99,-208,28,False,-208,15,1,0,,,,\n1742849,2023-11-01 09:12:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.1,0,270,1567354332,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,18,0,0,265.99,-213,28,False,-213,15,1,0,,,,\n1742850,2023-11-01 09:13:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.1,0,270,1567354391,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,19,0,0,265.99,-215,28,False,-215,15,1,0,,,,\n1742851,2023-11-01 09:14:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.2,0,270,1567354451,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,20,0,0,265.99,-221,28,False,-221,15,1,0,,,,\n1742852,2023-11-01 09:15:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.4,0,270,1567354511,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,21,0,0,265.99,-231,28,False,-231,15,1,0,,,,\n1742853,2023-11-01 09:16:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.5,0,270,1567354571,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,22,0,0,265.99,-237,28,False,-237,15,1,0,,,,\n1742854,2023-11-01 09:17:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.5,0,270,1567354631,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,23,0,0,265.99,-239,28,False,-239,15,1,0,,,,\n1742855,2023-11-01 09:18:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.5,0,270,1567354692,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,24,0,0,265.99,-241,28,False,-241,15,1,0,,,,\n1742856,2023-11-01 09:19:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.5,0,270,1567354751,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,25,0,0,265.99,-242,28,False,-242,15,1,0,,,,\n1742857,2023-11-01 09:20:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.5,0,270,1567354811,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,26,0,0,265.99,-244,28,False,-244,15,1,0,,,,\n1742858,2023-11-01 09:21:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.5,0,270,1567354871,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,27,0,0,265.99,-246,28,False,-246,15,1,0,,,,\n1742859,2023-11-01 09:22:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.5,0,270,1567354931,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,28,0,0,265.99,-247,28,False,-247,15,1,0,,,,\n1742860,2023-11-01 09:23:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,204.09,0,0,32,False,67.5,50,53.5,25.5,0,270,1567354991,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,29,0,0,265.99,-249,28,False,-249,15,1,0,,,,\n1742861,2023-11-01 09:24:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67.5,50,53.5,25.5,0,270,1567355051,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,77,69,70,38508.1998,6590,0,0,0,,30,0,0,265.99,-251,28,False,-251,15,1,0,,,,\n1742862,2023-11-01 09:25:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.7,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.51,True,0,100,266.93,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67.5,50,53.5,25.6,0,270,1567355111,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-256,28,False,-256,15,1,0,,,,\n1742863,2023-11-01 09:26:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1742864,2023-11-01 09:27:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1742865,2023-11-01 09:28:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1742866,2023-11-01 09:29:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1742867,2023-11-01 09:30:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1742868,2023-11-01 09:31:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1742869,2023-11-01 09:32:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1742870,2023-11-01 09:33:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1742871,2023-11-01 09:34:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1742872,2023-11-01 09:35:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1742873,2023-11-01 09:36:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1742874,2023-11-01 09:37:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1742875,2023-11-01 09:38:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1742876,2023-11-01 09:39:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1742877,2023-11-01 09:40:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1742878,2023-11-01 09:41:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,25.9,0,270,1567356071,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,1,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742879,2023-11-01 09:42:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567356132,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,2,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742880,2023-11-01 09:43:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,25.9,0,270,1567356191,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,3,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742881,2023-11-01 09:44:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567356252,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,4,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742882,2023-11-01 09:45:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567356312,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,5,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742883,2023-11-01 09:46:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567356373,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,6,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742884,2023-11-01 09:47:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567356431,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,7,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742885,2023-11-01 09:48:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567356492,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,8,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742886,2023-11-01 09:49:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567356551,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,9,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742887,2023-11-01 09:50:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567356612,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,10,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742888,2023-11-01 09:51:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567356671,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,11,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742889,2023-11-01 09:52:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26.1,0,270,1567356732,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,12,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742890,2023-11-01 09:53:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567356792,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,13,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742891,2023-11-01 09:54:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26.1,0,270,1567356852,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,14,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742892,2023-11-01 09:55:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26.1,0,270,1567356911,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,15,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742893,2023-11-01 09:56:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26.1,0,270,1567356972,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,16,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742894,2023-11-01 09:57:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567357031,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,17,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742895,2023-11-01 09:58:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567357091,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,18,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742896,2023-11-01 09:59:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26.1,0,270,1567357151,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,19,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742897,2023-11-01 10:00:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26,0,270,1567357211,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,20,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742898,2023-11-01 10:01:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26.1,0,270,1567357271,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,21,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742899,2023-11-01 10:02:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26.1,0,270,1567357331,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,22,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742900,2023-11-01 10:03:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26.1,0,270,1567357390,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,23,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742901,2023-11-01 10:04:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.74,0,0,32,False,67,50,53,26.1,0,270,1567357451,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,24,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742902,2023-11-01 10:05:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,67,50,53,26.1,0,270,1567357510,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,25,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742903,2023-11-01 10:06:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,67,50,53,26,0,270,1567357570,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,26,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742904,2023-11-01 10:07:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,67,50,53,26.1,0,270,1567357631,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,27,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742905,2023-11-01 10:08:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,67,50,53,26.1,0,270,1567357691,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,78,69,70,38508.1998,6590,0,0,0,,28,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742906,2023-11-01 10:09:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,67,50,53,26.4,0,270,1567357751,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,29,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742907,2023-11-01 10:10:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,67,50,53,26.5,0,270,1567357810,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,30,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742908,2023-11-01 10:11:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,211.34,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.4,True,0,100,266.47,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,67,50,53,26.5,0,270,1567357870,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742909,2023-11-01 10:12:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1742910,2023-11-01 10:13:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1742911,2023-11-01 10:14:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1742912,2023-11-01 10:15:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1742913,2023-11-01 10:16:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1742914,2023-11-01 10:17:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1742915,2023-11-01 10:18:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1742916,2023-11-01 10:19:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1742917,2023-11-01 10:20:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1742918,2023-11-01 10:21:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1742919,2023-11-01 10:22:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1742920,2023-11-01 10:23:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1742921,2023-11-01 10:24:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1742922,2023-11-01 10:25:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1742923,2023-11-01 10:26:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1742924,2023-11-01 10:27:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.5,0,270,1567358831,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,1,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742925,2023-11-01 10:28:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.5,0,270,1567358891,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,2,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742926,2023-11-01 10:29:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567358952,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,3,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742927,2023-11-01 10:30:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567359011,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,4,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742928,2023-11-01 10:31:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567359072,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,5,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742929,2023-11-01 10:32:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567359131,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,6,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742930,2023-11-01 10:33:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567359192,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,7,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742931,2023-11-01 10:34:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567359251,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,8,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742932,2023-11-01 10:35:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567359311,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,9,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742933,2023-11-01 10:36:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567359370,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,10,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742934,2023-11-01 10:37:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567359430,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,11,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742935,2023-11-01 10:38:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567359492,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,12,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742936,2023-11-01 10:39:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567359551,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,13,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742937,2023-11-01 10:40:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.6,0,270,1567359612,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,79,69,70,38508.1998,6590,0,0,0,,14,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742938,2023-11-01 10:41:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.7,0,270,1567359671,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,15,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742939,2023-11-01 10:42:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.8,0,270,1567359732,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,16,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742940,2023-11-01 10:43:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,27,0,270,1567359791,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,17,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742941,2023-11-01 10:44:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.9,0,270,1567359852,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,18,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742942,2023-11-01 10:45:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.9,0,270,1567359911,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,19,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742943,2023-11-01 10:46:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.9,0,270,1567359971,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,20,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742944,2023-11-01 10:47:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,27,0,270,1567360030,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,21,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742945,2023-11-01 10:48:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.9,0,270,1567360091,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,22,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742946,2023-11-01 10:49:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.9,0,270,1567360149,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,23,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742947,2023-11-01 10:50:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.9,0,270,1567360211,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,24,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742948,2023-11-01 10:51:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,27,0,270,1567360270,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,25,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742949,2023-11-01 10:52:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,27,0,270,1567360330,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,26,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742950,2023-11-01 10:53:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,27,0,270,1567360392,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,27,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742951,2023-11-01 10:54:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,27,0,270,1567360451,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,28,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742952,2023-11-01 10:55:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,27,0,270,1567360512,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,29,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742953,2023-11-01 10:56:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,27,0,270,1567360571,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,,30,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742954,2023-11-01 10:57:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.39,0,0,32,False,66.5,50,52.5,26.9,0,270,1567360631,0,,,,,0,21.1,True,21.1,21.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,70,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1742955,2023-11-01 10:58:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1742956,2023-11-01 10:59:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1742957,2023-11-01 11:00:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1742958,2023-11-01 11:01:16,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1742959,2023-11-01 11:02:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1742960,2023-11-01 11:03:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1742961,2023-11-01 11:04:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1742962,2023-11-01 11:05:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1742963,2023-11-01 11:06:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1742964,2023-11-01 11:07:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1742965,2023-11-01 11:08:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1742966,2023-11-01 11:09:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1742967,2023-11-01 11:10:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1742968,2023-11-01 11:11:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1742969,2023-11-01 11:12:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1742970,2023-11-01 11:13:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,27,0,270,1567361592,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,,38508.1998,6590,0,0,0,,1,0,0,265.99,,28,False,,15,1,0,,,,\n1742971,2023-11-01 11:14:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,27,0,270,1567361649,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,,38508.1998,6590,0,0,0,,2,0,0,265.99,,28,False,,15,1,0,,,,\n1742972,2023-11-01 11:15:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,27,0,270,1567361711,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,,38508.1998,6590,0,0,0,,3,0,0,265.99,,28,False,,15,1,0,,,,\n1742973,2023-11-01 11:16:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,27,0,270,1567361769,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,80,69,,38508.1998,6590,0,0,0,,4,0,0,265.99,,28,False,,15,1,0,,,,\n1742974,2023-11-01 11:17:09,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567361829,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,5,0,0,265.99,,28,False,,15,1,0,,,,\n1742975,2023-11-01 11:18:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567361889,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,6,0,0,265.99,,28,False,,15,1,0,,,,\n1742976,2023-11-01 11:19:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567361949,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,7,0,0,265.99,,28,False,,15,1,0,,,,\n1742977,2023-11-01 11:20:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567362010,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,8,0,0,265.99,,28,False,,15,1,0,,,,\n1742978,2023-11-01 11:21:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567362070,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,9,0,0,265.99,,28,False,,15,1,0,,,,\n1742979,2023-11-01 11:22:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567362129,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,10,0,0,265.99,,28,False,,15,1,0,,,,\n1742980,2023-11-01 11:23:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567362191,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,11,0,0,265.99,,28,False,,15,1,0,,,,\n1742981,2023-11-01 11:24:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567362250,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,12,0,0,265.99,,28,False,,15,1,0,,,,\n1742982,2023-11-01 11:25:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567362310,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,13,0,0,265.99,,28,False,,15,1,0,,,,\n1742983,2023-11-01 11:26:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567362369,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,14,0,0,265.99,,28,False,,15,1,0,,,,\n1742984,2023-11-01 11:27:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567362431,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,15,0,0,265.99,,28,False,,15,1,0,,,,\n1742985,2023-11-01 11:28:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567362489,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,16,0,0,265.99,,28,False,,15,1,0,,,,\n1742986,2023-11-01 11:29:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567362550,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,17,0,0,265.99,,28,False,,15,1,0,,,,\n1742987,2023-11-01 11:30:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567362609,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,18,0,0,265.99,,28,False,,15,1,0,,,,\n1742988,2023-11-01 11:31:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567362671,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,19,0,0,265.99,,28,False,,15,1,0,,,,\n1742989,2023-11-01 11:32:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567362730,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,20,0,0,265.99,,28,False,,15,1,0,,,,\n1742990,2023-11-01 11:33:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567362789,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,21,0,0,265.99,,28,False,,15,1,0,,,,\n1742991,2023-11-01 11:34:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567362850,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,22,0,0,265.99,,28,False,,15,1,0,,,,\n1742992,2023-11-01 11:35:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567362910,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,23,0,0,265.99,,28,False,,15,1,0,,,,\n1742993,2023-11-01 11:36:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567362970,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,24,0,0,265.99,,28,False,,15,1,0,,,,\n1742994,2023-11-01 11:37:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567363030,0,,,,,0,21.1,,21.1,24,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,75,38508.1998,6590,0,0,0,,25,0,0,265.99,,28,False,,15,1,0,,,,\n1742995,2023-11-01 11:38:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567363090,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,26,0,0,265.99,,28,False,,15,1,0,,,,\n1742996,2023-11-01 11:39:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567363149,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,27,0,0,265.99,,28,False,,15,1,0,,,,\n1742997,2023-11-01 11:40:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567363209,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,28,0,0,265.99,,28,False,,15,1,0,,,,\n1742998,2023-11-01 11:41:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567363269,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,29,0,0,265.99,,28,False,,15,1,0,,,,\n1742999,2023-11-01 11:42:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567363330,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,30,0,0,265.99,,28,False,,15,1,0,,,,\n1743000,2023-11-01 11:43:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567363389,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,False,-15,0,0,265.99,,28,False,,15,1,0,,,,\n1743001,2023-11-01 11:44:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743002,2023-11-01 11:45:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743003,2023-11-01 11:46:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743004,2023-11-01 11:47:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743005,2023-11-01 11:48:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743006,2023-11-01 11:49:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743007,2023-11-01 11:50:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743008,2023-11-01 11:51:15,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743009,2023-11-01 11:52:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743010,2023-11-01 11:53:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743011,2023-11-01 11:54:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743012,2023-11-01 11:55:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743013,2023-11-01 11:56:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743014,2023-11-01 11:57:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743015,2023-11-01 11:58:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1743016,2023-11-01 11:59:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567364351,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,1,0,0,265.99,,28,False,,15,1,0,,,,\n1743017,2023-11-01 12:00:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567364411,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,2,0,0,265.99,,28,False,,15,1,0,,,,\n1743018,2023-11-01 12:01:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567364470,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,3,0,0,265.99,,28,False,,15,1,0,,,,\n1743019,2023-11-01 12:02:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567364531,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,4,0,0,265.99,,28,False,,15,1,0,,,,\n1743020,2023-11-01 12:03:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567364590,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,5,0,0,265.99,,28,False,,15,1,0,,,,\n1743021,2023-11-01 12:04:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567364651,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,6,0,0,265.99,,28,False,,15,1,0,,,,\n1743022,2023-11-01 12:05:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567364709,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,7,0,0,265.99,,28,False,,15,1,0,,,,\n1743023,2023-11-01 12:06:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567364769,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,8,0,0,265.99,,28,False,,15,1,0,,,,\n1743024,2023-11-01 12:07:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567364829,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,9,0,0,265.99,,28,False,,15,1,0,,,,\n1743025,2023-11-01 12:08:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567364891,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,10,0,0,265.99,,28,False,,15,1,0,,,,\n1743026,2023-11-01 12:09:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567364950,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,11,0,0,265.99,,28,False,,15,1,0,,,,\n1743027,2023-11-01 12:10:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567365011,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,12,0,0,265.99,,28,False,,15,1,0,,,,\n1743028,2023-11-01 12:11:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567365070,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,13,0,0,265.99,,28,False,,15,1,0,,,,\n1743029,2023-11-01 12:12:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567365131,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,14,0,0,265.99,,28,False,,15,1,0,,,,\n1743030,2023-11-01 12:13:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567365190,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,15,0,0,265.99,,28,False,,15,1,0,,,,\n1743031,2023-11-01 12:14:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567365252,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,16,0,0,265.99,,28,False,,15,1,0,,,,\n1743032,2023-11-01 12:15:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567365309,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,17,0,0,265.99,,28,False,,15,1,0,,,,\n1743033,2023-11-01 12:16:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567365370,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,18,0,0,265.99,,28,False,,15,1,0,,,,\n1743034,2023-11-01 12:17:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567365429,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,19,0,0,265.99,,28,False,,15,1,0,,,,\n1743035,2023-11-01 12:18:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567365492,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,20,0,0,265.99,,28,False,,15,1,0,,,,\n1743036,2023-11-01 12:19:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567365549,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,21,0,0,265.99,,28,False,,15,1,0,,,,\n1743037,2023-11-01 12:20:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567365611,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,22,0,0,265.99,,28,False,,15,1,0,,,,\n1743038,2023-11-01 12:21:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567365670,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,23,0,0,265.99,,28,False,,15,1,0,,,,\n1743039,2023-11-01 12:22:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567365729,0,,,,,0,21.1,,21.1,24.5,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,76,38508.1998,6590,0,0,0,,24,0,0,265.99,,28,False,,15,1,0,,,,\n1743040,2023-11-01 12:23:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567365790,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,25,0,0,265.99,,28,False,,15,1,0,,,,\n1743041,2023-11-01 12:24:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567365849,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,26,0,0,265.99,,28,False,,15,1,0,,,,\n1743042,2023-11-01 12:25:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567365910,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,27,0,0,265.99,,28,False,,15,1,0,,,,\n1743043,2023-11-01 12:26:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567365970,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,28,0,0,265.99,,28,False,,15,1,0,,,,\n1743044,2023-11-01 12:27:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567366030,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,29,0,0,265.99,,28,False,,15,1,0,,,,\n1743045,2023-11-01 12:28:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567366089,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,30,0,0,265.99,,28,False,,15,1,0,,,,\n1743046,2023-11-01 12:29:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567366150,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,False,-15,0,0,265.99,,28,False,,15,1,0,,,,\n1743047,2023-11-01 12:30:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743048,2023-11-01 12:31:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743049,2023-11-01 12:32:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743050,2023-11-01 12:33:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743051,2023-11-01 12:34:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743052,2023-11-01 12:35:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743053,2023-11-01 12:36:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743054,2023-11-01 12:37:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743055,2023-11-01 12:38:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743056,2023-11-01 12:39:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743057,2023-11-01 12:40:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743058,2023-11-01 12:41:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743059,2023-11-01 12:42:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743060,2023-11-01 12:43:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743061,2023-11-01 12:44:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1743062,2023-11-01 12:45:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567367110,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,1,0,0,265.99,,28,False,,15,1,0,,,,\n1743063,2023-11-01 12:46:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567367170,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,2,0,0,265.99,,28,False,,15,1,0,,,,\n1743064,2023-11-01 12:47:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567367230,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,3,0,0,265.99,,28,False,,15,1,0,,,,\n1743065,2023-11-01 12:48:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567367290,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,4,0,0,265.99,,28,False,,15,1,0,,,,\n1743066,2023-11-01 12:49:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567367351,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,5,0,0,265.99,,28,False,,15,1,0,,,,\n1743067,2023-11-01 12:50:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567367410,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,6,0,0,265.99,,28,False,,15,1,0,,,,\n1743068,2023-11-01 12:51:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567367471,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,7,0,0,265.99,,28,False,,15,1,0,,,,\n1743069,2023-11-01 12:52:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567367530,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,8,0,0,265.99,,28,False,,15,1,0,,,,\n1743070,2023-11-01 12:53:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567367591,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,9,0,0,265.99,,28,False,,15,1,0,,,,\n1743071,2023-11-01 12:54:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567367650,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,10,0,0,265.99,,28,False,,15,1,0,,,,\n1743072,2023-11-01 12:55:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567367710,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,11,0,0,265.99,,28,False,,15,1,0,,,,\n1743073,2023-11-01 12:56:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567367770,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,12,0,0,265.99,,28,False,,15,1,0,,,,\n1743074,2023-11-01 12:57:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567367831,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,13,0,0,265.99,,28,False,,15,1,0,,,,\n1743075,2023-11-01 12:58:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567367890,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,14,0,0,265.99,,28,False,,15,1,0,,,,\n1743076,2023-11-01 12:59:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567367952,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,15,0,0,265.99,,28,False,,15,1,0,,,,\n1743077,2023-11-01 13:00:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567368010,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,16,0,0,265.99,,28,False,,15,1,0,,,,\n1743078,2023-11-01 13:01:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567368070,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,17,0,0,265.99,,28,False,,15,1,0,,,,\n1743079,2023-11-01 13:02:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567368131,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,18,0,0,265.99,,28,False,,15,1,0,,,,\n1743080,2023-11-01 13:03:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567368190,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,19,0,0,265.99,,28,False,,15,1,0,,,,\n1743081,2023-11-01 13:04:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567368251,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,20,0,0,265.99,,28,False,,15,1,0,,,,\n1743082,2023-11-01 13:05:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567368310,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,21,0,0,265.99,,28,False,,15,1,0,,,,\n1743083,2023-11-01 13:06:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567368372,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,22,0,0,265.99,,28,False,,15,1,0,,,,\n1743084,2023-11-01 13:07:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567368430,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,23,0,0,265.99,,28,False,,15,1,0,,,,\n1743085,2023-11-01 13:08:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567368491,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,24,0,0,265.99,,28,False,,15,1,0,,,,\n1743086,2023-11-01 13:09:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567368550,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,25,0,0,265.99,,28,False,,15,1,0,,,,\n1743087,2023-11-01 13:10:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567368612,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,26,0,0,265.99,,28,False,,15,1,0,,,,\n1743088,2023-11-01 13:11:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567368669,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,27,0,0,265.99,,28,False,,15,1,0,,,,\n1743089,2023-11-01 13:12:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567368731,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,28,0,0,265.99,,28,False,,15,1,0,,,,\n1743090,2023-11-01 13:13:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,,0,270,1567368789,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,29,0,0,265.99,,28,False,,15,1,0,,,,\n1743091,2023-11-01 13:14:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,,80,,<invalid>,,,False,ACSingleWireCAN,80,True,90,,80,15.3,,0,100,266.01,False,Complete,,,False,1567407600,203.04,0,,32,False,66.5,50,52.5,,0,270,1567368851,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,30,0,0,265.99,,28,False,,15,1,0,,,,\n1743092,2023-11-01 13:15:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.97,0,80,32,Engaged,,0,False,ACSingleWireCAN,80,True,90,False,80,15.3,True,0,100,266.01,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66.5,50,52.5,27.3,0,270,1567368909,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,81,69,77,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743093,2023-11-01 13:16:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743094,2023-11-01 13:17:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743095,2023-11-01 13:18:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743096,2023-11-01 13:19:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743097,2023-11-01 13:20:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743098,2023-11-01 13:21:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743099,2023-11-01 13:22:09,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743100,2023-11-01 13:23:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743101,2023-11-01 13:24:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743102,2023-11-01 13:25:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743103,2023-11-01 13:26:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743104,2023-11-01 13:27:09,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743105,2023-11-01 13:28:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743106,2023-11-01 13:29:09,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743107,2023-11-01 13:30:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1743108,2023-11-01 13:31:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66,50,52.5,28.1,0,270,1567369870,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,1,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743109,2023-11-01 13:32:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66,50,52.5,28.2,0,270,1567369929,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,2,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743110,2023-11-01 13:33:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66,50,52.5,28.1,0,270,1567369990,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,3,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743111,2023-11-01 13:34:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66,50,52.5,28.2,0,270,1567370049,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,4,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743112,2023-11-01 13:35:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66,50,52.5,28.1,0,270,1567370110,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,5,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743113,2023-11-01 13:36:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66,50,52.5,28.2,0,270,1567370169,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,6,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743114,2023-11-01 13:37:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66,50,52.5,28.1,0,270,1567370229,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,7,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743115,2023-11-01 13:38:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66,50,52.5,28.2,0,270,1567370290,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,8,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743116,2023-11-01 13:39:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66,50,52.5,28.1,0,270,1567370350,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,9,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743117,2023-11-01 13:40:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66,50,52.5,28.1,0,270,1567370411,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,10,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743118,2023-11-01 13:41:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,203.04,0,0,32,False,66,50,52.5,28.2,0,270,1567370471,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,11,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743119,2023-11-01 13:42:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,66,50,52.5,28.2,0,270,1567370531,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,12,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743120,2023-11-01 13:43:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,66,50,52.5,28.2,0,270,1567370591,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,13,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743121,2023-11-01 13:44:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,66,50,52.5,28.1,0,270,1567370651,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,14,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743122,2023-11-01 13:45:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,66,50,52.5,28.1,0,270,1567370711,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,15,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743123,2023-11-01 13:46:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,66,50,52.5,28.2,0,270,1567370769,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,16,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743124,2023-11-01 13:47:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,66,50,52.5,28.2,0,270,1567370833,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,17,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743125,2023-11-01 13:48:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,66,50,52.5,28.2,0,270,1567370889,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,18,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743126,2023-11-01 13:49:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.61,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.19,True,0,100,265.55,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,66,50,52.5,28.2,0,270,1567370950,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,19,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743127,2023-11-01 13:50:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.2,0,270,1567371008,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,20,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743128,2023-11-01 13:51:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.2,0,270,1567371073,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,21,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743129,2023-11-01 13:52:09,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.1,0,270,1567371129,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,22,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743130,2023-11-01 13:53:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.1,0,270,1567371191,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,23,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743131,2023-11-01 13:54:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.1,0,270,1567371249,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,24,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743132,2023-11-01 13:55:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.2,0,270,1567371312,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,25,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743133,2023-11-01 13:56:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.1,0,270,1567371370,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,26,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743134,2023-11-01 13:57:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.2,0,270,1567371429,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,27,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743135,2023-11-01 13:58:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.2,0,270,1567371489,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,28,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743136,2023-11-01 13:59:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.3,0,270,1567371551,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,82,69,77,38508.1998,6590,0,0,0,,29,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743137,2023-11-01 14:00:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,80,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.5,0,270,1567371609,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,30,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743138,2023-11-01 14:01:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.5,0,270,1567371668,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743139,2023-11-01 14:02:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743140,2023-11-01 14:03:09,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743141,2023-11-01 14:04:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743142,2023-11-01 14:05:09,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743143,2023-11-01 14:06:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743144,2023-11-01 14:07:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743145,2023-11-01 14:08:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743146,2023-11-01 14:09:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743147,2023-11-01 14:10:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743148,2023-11-01 14:11:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743149,2023-11-01 14:12:09,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743150,2023-11-01 14:13:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743151,2023-11-01 14:14:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743152,2023-11-01 14:15:09,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743153,2023-11-01 14:16:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1743154,2023-11-01 14:17:09,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.5,0,270,1567372629,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,1,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743155,2023-11-01 14:18:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.6,0,270,1567372689,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,2,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743156,2023-11-01 14:19:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.5,0,270,1567372750,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,3,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743157,2023-11-01 14:20:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.5,0,270,1567372809,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,4,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743158,2023-11-01 14:21:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.6,0,270,1567372870,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,5,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743159,2023-11-01 14:22:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.5,0,270,1567372929,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,6,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743160,2023-11-01 14:23:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.6,0,270,1567372990,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,7,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743161,2023-11-01 14:24:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.5,0,270,1567373050,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,8,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743162,2023-11-01 14:25:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.6,0,270,1567373111,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,9,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743163,2023-11-01 14:26:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.6,0,270,1567373170,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,10,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743164,2023-11-01 14:27:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.5,0,270,1567373231,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,11,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743165,2023-11-01 14:28:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.6,0,270,1567373290,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,12,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743166,2023-11-01 14:29:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.5,0,270,1567373351,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,13,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743167,2023-11-01 14:30:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.69,0,0,32,False,65.5,50,52,28.5,0,270,1567373410,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,14,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743168,2023-11-01 14:31:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65.5,50,52,28.6,0,270,1567373471,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,15,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743169,2023-11-01 14:32:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65.5,50,52,28.6,0,270,1567373529,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,16,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743170,2023-11-01 14:33:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65.5,50,52,28.6,0,270,1567373590,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,17,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743171,2023-11-01 14:34:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65.5,50,52,28.6,0,270,1567373649,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,18,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743172,2023-11-01 14:35:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65.5,50,52,28.6,0,270,1567373710,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,19,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743173,2023-11-01 14:36:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65.5,50,52,28.6,0,270,1567373769,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,20,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743174,2023-11-01 14:37:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65.5,50,52,28.5,0,270,1567373830,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,21,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743175,2023-11-01 14:38:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65.5,50,52,28.6,0,270,1567373890,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,22,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743176,2023-11-01 14:39:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65.5,50,52,28.5,0,270,1567373951,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,23,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743177,2023-11-01 14:40:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,210.25,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,15.08,True,0,100,265.09,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65.5,50,52,28.6,0,270,1567374011,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,24,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743178,2023-11-01 14:41:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567374071,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,25,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743179,2023-11-01 14:42:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567374130,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,26,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743180,2023-11-01 14:43:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.6,0,270,1567374191,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,27,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743181,2023-11-01 14:44:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567374250,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,28,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743182,2023-11-01 14:45:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567374311,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,29,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743183,2023-11-01 14:46:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.6,0,270,1567374370,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,30,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743184,2023-11-01 14:47:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567374431,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,False,-15,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743185,2023-11-01 14:48:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743186,2023-11-01 14:49:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743187,2023-11-01 14:50:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743188,2023-11-01 14:51:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743189,2023-11-01 14:52:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743190,2023-11-01 14:53:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743191,2023-11-01 14:54:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743192,2023-11-01 14:55:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743193,2023-11-01 14:56:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743194,2023-11-01 14:57:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743195,2023-11-01 14:58:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743196,2023-11-01 14:59:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743197,2023-11-01 15:00:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743198,2023-11-01 15:01:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743199,2023-11-01 15:02:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,True,0,0,0,265.99,,,,,,,,,,,\n1743200,2023-11-01 15:03:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567375391,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,1,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743201,2023-11-01 15:04:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567375450,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,2,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743202,2023-11-01 15:05:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567375511,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,3,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743203,2023-11-01 15:06:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567375570,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,4,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743204,2023-11-01 15:07:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567375631,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,5,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743205,2023-11-01 15:08:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567375690,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,6,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743206,2023-11-01 15:09:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567375751,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,7,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743207,2023-11-01 15:10:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.4,0,270,1567375810,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,8,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743208,2023-11-01 15:11:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.4,0,270,1567375871,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,9,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743209,2023-11-01 15:12:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567375930,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,10,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743210,2023-11-01 15:13:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.4,0,270,1567375991,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,11,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743211,2023-11-01 15:14:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567376049,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,12,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743212,2023-11-01 15:15:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.5,0,270,1567376110,0,,,,,0,21.1,True,21.1,25,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,77,38508.1998,6590,0,0,0,,13,0,0,265.99,-267,28,False,-267,15,1,0,,,,\n1743213,2023-11-01 15:16:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,201.99,0,0,32,False,65,50,51.5,28.4,0,270,1567376169,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,14,0,0,265.99,,28,False,,15,1,0,,,,\n1743214,2023-11-01 15:17:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,,80,,Disengaged,,,False,ACSingleWireCAN,79,True,90,,79,14.98,False,0,100,264.63,False,Complete,False,,False,1567407600,202.34,0,,32,False,65,50,51.5,28.4,0,270,1567376230,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,15,0,0,265.99,,28,False,,15,1,0,,,,\n1743215,2023-11-01 15:18:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.4,0,270,1567376289,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,16,0,0,265.99,,28,False,,15,1,0,,,,\n1743216,2023-11-01 15:19:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,,80,,Disengaged,,,False,ACSingleWireCAN,79,True,90,False,79,14.98,False,0,100,264.63,False,Complete,False,,False,1567407600,202.34,0,,32,False,65,50,51.5,28.4,0,270,1567376351,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,17,0,0,265.99,,28,False,,15,1,0,,,,\n1743217,2023-11-01 15:20:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.4,0,270,1567376409,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,18,0,0,265.99,,28,False,,15,1,0,,,,\n1743218,2023-11-01 15:21:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,,80,,Disengaged,,,False,ACSingleWireCAN,79,True,90,,79,14.98,False,0,100,264.63,False,Complete,False,,False,1567407600,202.34,0,,32,False,65,50,51.5,28.4,0,270,1567376470,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,19,0,0,265.99,,28,False,,15,1,0,,,,\n1743219,2023-11-01 15:22:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.4,0,270,1567376531,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,20,0,0,265.99,,28,False,,15,1,0,,,,\n1743220,2023-11-01 15:23:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,,80,,Disengaged,,,False,ACSingleWireCAN,79,True,90,,79,14.98,False,0,100,264.63,False,Complete,False,,False,1567407600,202.34,0,,32,False,65,50,51.5,28.4,0,270,1567376590,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,21,0,0,265.99,,28,False,,15,1,0,,,,\n1743221,2023-11-01 15:24:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.4,0,270,1567376649,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,22,0,0,265.99,,28,False,,15,1,0,,,,\n1743222,2023-11-01 15:25:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,,80,,Disengaged,,,False,ACSingleWireCAN,79,True,90,,79,14.98,False,0,100,264.63,False,Complete,False,,False,1567407600,202.34,0,,32,False,65,50,51.5,28.4,0,270,1567376710,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,23,0,0,265.99,,28,False,,15,1,0,,,,\n1743223,2023-11-01 15:26:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.4,0,270,1567376769,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,24,0,0,265.99,,28,False,,15,1,0,,,,\n1743224,2023-11-01 15:27:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,,80,,Disengaged,,,False,ACSingleWireCAN,79,True,90,,79,14.98,False,0,100,264.63,False,Complete,False,,False,1567407600,202.34,0,,32,False,65,50,51.5,28.4,0,270,1567376830,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,25,0,0,265.99,,28,False,,15,1,0,,,,\n1743225,2023-11-01 15:28:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.4,0,270,1567376889,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,26,0,0,265.99,,28,False,,15,1,0,,,,\n1743226,2023-11-01 15:29:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,,80,,Disengaged,,,False,ACSingleWireCAN,79,True,90,,79,14.98,False,0,100,264.63,False,Complete,False,,False,1567407600,202.34,0,,32,False,65,50,51.5,28.4,0,270,1567376951,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,27,0,0,265.99,,28,False,,15,1,0,,,,\n1743227,2023-11-01 15:30:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,28.4,0,270,1567377009,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,83,69,,38508.1998,6590,0,0,0,,28,0,0,265.99,,28,False,,15,1,0,,,,\n1743228,2023-11-01 15:31:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,,80,,Disengaged,,,False,ACSingleWireCAN,79,True,90,,79,14.98,False,0,100,264.63,False,Complete,False,,False,1567407600,202.34,0,,32,False,65,50,51.5,,0,270,1567377071,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,29,0,0,265.99,,28,False,,15,1,0,,,,\n1743229,2023-11-01 15:32:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,,0,270,1567377129,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,,30,0,0,265.99,,28,False,,15,1,0,,,,\n1743230,2023-11-01 15:33:10,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,,80,,Disengaged,,,False,ACSingleWireCAN,79,True,90,,79,14.98,False,0,100,264.63,False,Complete,False,,False,1567407600,202.34,0,,32,False,65,50,51.5,,0,270,1567377189,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,,,,38508.1998,6590,0,0,0,False,-15,0,0,265.99,,28,False,,15,1,0,,,,\n1743231,2023-11-01 15:34:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-14,0,0,265.99,,,,,,,,,,,\n1743232,2023-11-01 15:35:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-13,0,0,265.99,,,,,,,,,,,\n1743233,2023-11-01 15:36:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-12,0,0,265.99,,,,,,,,,,,\n1743234,2023-11-01 15:37:10,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-11,0,0,265.99,,,,,,,,,,,\n1743235,2023-11-01 15:38:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-10,0,0,265.99,,,,,,,,,,,\n1743236,2023-11-01 15:39:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-9,0,0,265.99,,,,,,,,,,,\n1743237,2023-11-01 15:40:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-8,0,0,265.99,,,,,,,,,,,\n1743238,2023-11-01 15:41:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-7,0,0,265.99,,,,,,,,,,,\n1743239,2023-11-01 15:42:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-6,0,0,265.99,,,,,,,,,,,\n1743240,2023-11-01 15:43:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-5,0,0,265.99,,,,,,,,,,,\n1743241,2023-11-01 15:44:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-4,0,0,265.99,,,,,,,,,,,\n1743242,2023-11-01 15:45:11,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-3,0,0,265.99,,,,,,,,,,,\n1743243,2023-11-01 15:46:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-2,0,0,265.99,,,,,,,,,,,\n1743244,2023-11-01 15:47:12,,,,,,,,,,,,,online,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,0,0,0,False,-1,0,0,265.99,,,,,,,,,,,\n1743245,2023-11-01 15:48:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6590,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743246,2023-11-01 15:49:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743247,2023-11-01 15:50:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743248,2023-11-01 15:51:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743249,2023-11-01 15:52:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743250,2023-11-01 15:53:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743251,2023-11-01 15:54:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743252,2023-11-01 15:55:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743253,2023-11-01 15:56:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743254,2023-11-01 15:57:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743255,2023-11-01 15:58:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743256,2023-11-01 15:59:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743257,2023-11-01 16:00:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743258,2023-11-01 16:01:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743259,2023-11-01 16:02:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743260,2023-11-01 16:03:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743261,2023-11-01 16:04:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743262,2023-11-01 16:05:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743263,2023-11-01 16:06:13,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743264,2023-11-01 16:07:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743265,2023-11-01 16:08:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743266,2023-11-01 16:09:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743267,2023-11-01 16:10:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743268,2023-11-01 16:11:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743269,2023-11-01 16:12:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743270,2023-11-01 16:13:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743271,2023-11-01 16:14:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743272,2023-11-01 16:15:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743273,2023-11-01 16:16:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743274,2023-11-01 16:17:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743275,2023-11-01 16:18:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743276,2023-11-01 16:19:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743277,2023-11-01 16:20:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743278,2023-11-01 16:21:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743279,2023-11-01 16:22:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743280,2023-11-01 16:23:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743281,2023-11-01 16:24:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743282,2023-11-01 16:25:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743283,2023-11-01 16:26:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743284,2023-11-01 16:27:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743285,2023-11-01 16:28:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743286,2023-11-01 16:29:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743287,2023-11-01 16:30:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743288,2023-11-01 16:31:11,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743289,2023-11-01 16:32:12,,,,,,,,,,,,,asleep,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,3444,0,0,,0,0,0,265.99,,,,,,,,,,,\n1743290,2023-11-01 16:33:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,27.3,0,270,1567380820,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,81,69,,38508.1998,6591,3444,0,0,,0,0,0,265.99,,28,False,,15,1,0,,,,\n1743291,2023-11-01 16:34:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,,80,,Engaged,,,False,ACSingleWireCAN,79,True,90,,79,14.98,True,0,100,264.63,False,Complete,,,False,1567407600,202.34,0,,32,False,65,50,51.5,27.3,0,270,1567380851,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,81,69,,38508.1998,6591,0,0,0,,1,0,0,265.99,,28,False,,15,1,0,,,,\n1743292,2023-11-01 16:35:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,27.3,0,270,1567380910,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,81,69,,38508.1998,6591,0,0,0,,2,0,0,265.99,,28,False,,15,1,0,,,,\n1743293,2023-11-01 16:36:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,27.3,0,270,1567380970,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,81,69,,38508.1998,6591,0,0,0,,3,0,0,265.99,,28,False,,15,1,0,,,,\n1743294,2023-11-01 16:37:11,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,32,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,27.3,0,270,1567381030,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,81,69,,38508.1998,6591,0,0,0,,4,0,0,265.99,,28,False,,15,1,0,,,,\n1743295,2023-11-01 16:38:12,,,,,,,,1YYSA1YYYFF08YYYY,,,,,online,,0,32,False,False,,False,,209.88,0,80,,Engaged,,0,False,ACSingleWireCAN,79,True,90,False,79,14.98,True,0,100,264.63,False,Complete,False,False,False,1567407600,202.34,0,0,32,False,65,50,51.5,27.3,0,270,1567381090,0,,,,,0,21.1,,21.1,,,False,,False,0,0,False,,,,,,,1,False,True,,True,,0,38508.199878,False,0,,,,False,True,0,0,,1,6,0,0,Black,0,disabled,unknown,True,82420,0,,models,Base19,True,0,,2019.28.3.1 f9e95acd,,,81,69,,38508.1998,6591,0,0,0,,5,0,0,265.99,,28,False,,15,1,0,,,,\n"
  },
  {
    "path": "test/support/conn_case.ex",
    "content": "defmodule TeslaMateWeb.ConnCase do\n  @moduledoc \"\"\"\n  This module defines the test case to be used by\n  tests that require setting up a connection.\n\n  Such tests rely on `Phoenix.ConnTest` and also\n  import other functionality to make it easier\n  to build common data structures and query the data layer.\n\n  Finally, if the test case interacts with the database,\n  it cannot be async. For this reason, every test runs\n  inside a transaction which is reset at the beginning\n  of the test unless the test case is marked as async.\n  \"\"\"\n\n  use ExUnit.CaseTemplate\n\n  using do\n    quote do\n      # Import conveniences for testing with connections\n      import Plug.Conn\n      import Phoenix.ConnTest\n      import TeslaMateWeb.ConnCase\n\n      alias TeslaMateWeb.Router.Helpers, as: Routes\n      import Phoenix.LiveViewTest\n\n      # The default endpoint for testing\n      @endpoint TeslaMateWeb.Endpoint\n\n      use TeslaMateWeb, :verified_routes\n    end\n  end\n\n  setup tags do\n    try do\n      pid = Ecto.Adapters.SQL.Sandbox.start_owner!(TeslaMate.Repo, shared: not tags[:async])\n      on_exit(fn -> Ecto.Adapters.SQL.Sandbox.stop_owner(pid) end)\n    rescue\n      e in [MatchError] ->\n        case e.term do\n          {:error, {{:badmatch, :already_shared}, _}} -> :ok\n          _ -> reraise e, __STACKTRACE__\n        end\n    end\n\n    # Start the Endpoint manually since tests run with '--no-start'\n    {:ok, _pid} = start_supervised(TeslaMateWeb.Endpoint)\n\n    conn =\n      Phoenix.ConnTest.build_conn()\n      |> Plug.Conn.assign(:signed_in?, !!tags[:signed_in])\n\n    {:ok, conn: conn}\n  end\nend\n"
  },
  {
    "path": "test/support/data_case.ex",
    "content": "defmodule TeslaMate.DataCase do\n  @moduledoc \"\"\"\n  This module defines the setup for tests requiring\n  access to the application's data layer.\n\n  You may define functions here to be used as helpers in\n  your tests.\n\n  Finally, if the test case interacts with the database,\n  it cannot be async. For this reason, every test runs\n  inside a transaction which is reset at the beginning\n  of the test unless the test case is marked as async.\n  \"\"\"\n\n  use ExUnit.CaseTemplate\n\n  using do\n    quote do\n      alias TeslaMate.Repo\n\n      import Ecto\n      import Ecto.Changeset\n      import Ecto.Query\n      import TeslaMate.DataCase\n    end\n  end\n\n  setup tags do\n    pid = Ecto.Adapters.SQL.Sandbox.start_owner!(TeslaMate.Repo, shared: not tags[:async])\n    on_exit(fn -> Ecto.Adapters.SQL.Sandbox.stop_owner(pid) end)\n    :ok\n  rescue\n    e in [MatchError] ->\n      case e.term do\n        {:error, {{:badmatch, :already_shared}, _}} -> :ok\n        _ -> reraise e, __STACKTRACE__\n      end\n  end\n\n  @doc \"\"\"\n  A helper that transforms changeset errors into a map of messages.\n\n      assert {:error, changeset} = Accounts.create_user(%{password: \"short\"})\n      assert \"password is too short\" in errors_on(changeset).password\n      assert %{password: [\"password is too short\"]} = errors_on(changeset)\n\n  \"\"\"\n  def errors_on(changeset) do\n    Ecto.Changeset.traverse_errors(changeset, fn {message, opts} ->\n      Regex.replace(~r\"%{(\\w+)}\", message, fn _, key ->\n        opts |> Keyword.get(String.to_existing_atom(key), key) |> to_string()\n      end)\n    end)\n  end\nend\n"
  },
  {
    "path": "test/support/mocks/api.ex",
    "content": "defmodule ApiMock do\n  use GenServer\n\n  defmodule State do\n    defstruct [:pid, :events]\n  end\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: Keyword.fetch!(opts, :name))\n  end\n\n  def get_vehicle(name, id), do: GenServer.call(name, {:get_vehicle, id})\n  def get_vehicle_with_state(name, id), do: GenServer.call(name, {:get_vehicle_with_state, id})\n  def stream(name, vid, receiver), do: GenServer.call(name, {:stream, vid, receiver})\n\n  def sign_in(name, tokens), do: GenServer.call(name, {:sign_in, tokens})\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    state = %State{\n      pid: Keyword.fetch!(opts, :pid),\n      events: Keyword.get(opts, :events, [])\n    }\n\n    {:ok, state}\n  end\n\n  @impl true\n  def handle_call({action, _id}, _from, %State{events: [event | []]} = state)\n      when action in [:get_vehicle, :get_vehicle_with_state] do\n    {:reply, exec(event), state}\n  end\n\n  def handle_call({action, _id}, _from, %State{events: [event | events]} = state)\n      when action in [:get_vehicle, :get_vehicle_with_state] do\n    {:reply, exec(event), %State{state | events: events}}\n  end\n\n  def handle_call({:sign_in, _tokens} = event, _from, %State{pid: pid} = state) do\n    send(pid, {ApiMock, event})\n    {:reply, :ok, state}\n  end\n\n  def handle_call({:stream, _vid, _receiver} = event, _from, %State{pid: pid} = state) do\n    send(pid, {ApiMock, event})\n    {:reply, {:ok, pid}, state}\n  end\n\n  defp exec(event) when is_function(event), do: event.()\n  defp exec(event), do: event\nend\n"
  },
  {
    "path": "test/support/mocks/auth.ex",
    "content": "defmodule AuthMock do\n  use GenServer\n\n  defstruct [:pid, :tokens]\n  alias __MODULE__, as: State\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: Keyword.fetch!(opts, :name))\n  end\n\n  def get_tokens(name), do: GenServer.call(name, :get_tokens)\n  def save(name, auth), do: GenServer.call(name, {:save, auth})\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    {:ok,\n     %State{\n       pid: Keyword.fetch!(opts, :pid),\n       tokens: Keyword.fetch!(opts, :tokens)\n     }}\n  end\n\n  @impl true\n  def handle_call(:get_tokens, _from, state) do\n    {:reply, state.tokens, state}\n  end\n\n  def handle_call({:save, _auth} = event, _from, %State{pid: pid} = state) do\n    send(pid, {AuthMock, event})\n    {:reply, :ok, state}\n  end\nend\n"
  },
  {
    "path": "test/support/mocks/geocoder.ex",
    "content": "defmodule GeocoderMock do\n  alias TeslaMate.Locations.Address\n\n  def reverse_lookup(%Decimal{} = lat, %Decimal{} = lon, lang) do\n    reverse_lookup(Decimal.to_float(lat), Decimal.to_float(lon), lang)\n  end\n\n  def reverse_lookup(99.9, 99.9, _lang) do\n    {:error, :induced_error}\n  end\n\n  def reverse_lookup(-99.9, -99.9, _lang) do\n    {:ok,\n     %{\n       display_name: \"Unknown\",\n       osm_type: \"unknown\",\n       osm_id: 0,\n       latitude: 0.0,\n       longitude: 0.0,\n       raw: %{\"error\" => \"Unable to geocode\"}\n     }}\n  end\n\n  def reverse_lookup(lat, lng, _lang)\n      when lat in [52.51599, 52.515, 52.514521] and lng in [13.35199, 13.351, 13.350144] do\n    {:ok,\n     %{\n       city: nil,\n       country: \"Germany\",\n       county: nil,\n       display_name: \"1, Großer Stern, Tiergarten, Mitte, Berlin, 10787, Germany\",\n       house_number: \"1\",\n       latitude: \"52.5145069\",\n       longitude: \"13.3501101\",\n       name: nil,\n       neighbourhood: \"Tiergarten\",\n       osm_id: 89_721_012,\n       osm_type: \"way\",\n       postcode: \"10787\",\n       raw: %{\n         \"city_district\" => \"Mitte\",\n         \"country\" => \"Germany\",\n         \"country_code\" => \"de\",\n         \"house_number\" => \"1\",\n         \"postcode\" => \"10787\",\n         \"road\" => \"Großer Stern\",\n         \"state\" => \"Berlin\",\n         \"suburb\" => \"Tiergarten\"\n       },\n       road: \"Großer Stern\",\n       state: \"Berlin\",\n       state_district: nil\n     }}\n  end\n\n  def reverse_lookup(52.394246, 13.542552, _lang) do\n    {:ok,\n     %{\n       city: nil,\n       country: \"Germany\",\n       county: nil,\n       display_name:\n         \"Tesla Store & Service Center Berlin, 24-26, Alexander-Meißner-Straße, Altglienicke, Treptow-Köpenick, Berlin, 12526, Germany\",\n       house_number: \"24-26\",\n       latitude: \"52.3941049\",\n       longitude: \"13.5425707\",\n       name: \"Tesla Store & Service Center Berlin\",\n       neighbourhood: \"Altglienicke\",\n       osm_id: 64_445_009,\n       osm_type: \"way\",\n       postcode: \"12526\",\n       raw: %{\n         \"car\" => \"Tesla Store & Service Center Berlin\",\n         \"city_district\" => \"Treptow-Köpenick\",\n         \"country\" => \"Germany\",\n         \"country_code\" => \"de\",\n         \"house_number\" => \"24-26\",\n         \"postcode\" => \"12526\",\n         \"road\" => \"Alexander-Meißner-Straße\",\n         \"state\" => \"Berlin\",\n         \"suburb\" => \"Altglienicke\"\n       },\n       road: \"Alexander-Meißner-Straße\",\n       state: \"Berlin\",\n       state_district: nil\n     }}\n  end\n\n  def reverse_lookup(-25.066188, -130.100502, _lang) do\n    {:ok,\n     %{\n       city: \"Adamstown\",\n       country: \"Pitcairn Islands\",\n       county: nil,\n       display_name: \"Adamstown, Pitcairn Islands\",\n       house_number: nil,\n       latitude: \"-25.0661235097694\",\n       longitude: \"-130.100512324384\",\n       name: nil,\n       neighbourhood: nil,\n       osm_id: 246_879_822,\n       osm_type: \"way\",\n       postcode: nil,\n       raw: %{\n         \"country\" => \"Pitcairn Islands\",\n         \"country_code\" => \"pn\",\n         \"town\" => \"Adamstown\"\n       },\n       road: nil,\n       state: nil,\n       state_district: nil\n     }}\n  end\n\n  def reverse_lookup(lat, lon, _lang) when is_number(lat) and is_number(lon) do\n    {:ok,\n     %{\n       city: \"Bielefeld\",\n       country: \"Deutschland\",\n       county: nil,\n       display_name:\n         \"Von-der-Recke-Straße, Mitte, Bielefeld, Regierungsbezirk Detmold, Nordrhein-Westfalen, 33602, Deutschland\",\n       house_number: nil,\n       latitude: \"52.0196010141104\",\n       longitude: \"8.52631835353143\",\n       name: \"Von-der-Recke-Straße\",\n       neighbourhood: \"Mitte\",\n       osm_id: 103_619_766,\n       osm_type: \"way\",\n       postcode: \"33602\",\n       raw: %{\n         \"city\" => \"Bielefeld\",\n         \"country\" => \"Deutschland\",\n         \"country_code\" => \"de\",\n         \"postcode\" => \"33602\",\n         \"road\" => \"Von-der-Recke-Straße\",\n         \"state\" => \"Nordrhein-Westfalen\",\n         \"state_district\" => \"Regierungsbezirk Detmold\",\n         \"suburb\" => \"Mitte\"\n       },\n       road: \"Von-der-Recke-Straße\",\n       state: \"Nordrhein-Westfalen\"\n     }}\n  end\n\n  def details(addresses, lang) do\n    {:ok,\n     Enum.map(addresses, fn\n       %Address{display_name: \"error\"} ->\n         throw({:error, :boom})\n\n       %Address{} = address ->\n         address\n         |> Map.from_struct()\n         |> Map.update(:name, \"\", fn val -> \"#{val}_#{lang}\" end)\n         |> Map.update(:state, \"\", fn val -> \"#{val}_#{lang}\" end)\n         |> Map.update(:country, \"\", fn _ -> \"#{lang}\" end)\n     end)}\n  catch\n    {:error, :boom} ->\n      {:error, :boom}\n  end\nend\n"
  },
  {
    "path": "test/support/mocks/locations.ex",
    "content": "defmodule LocationsMock do\n  use GenServer\n\n  defstruct [:pid]\n  alias __MODULE__, as: State\n\n  alias TeslaMate.Locations.GeoFence\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: Keyword.fetch!(opts, :name))\n  end\n\n  def find_geofence(name, point) do\n    GenServer.call(name, {:find_geofence, point})\n  end\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    {:ok, %State{pid: Keyword.fetch!(opts, :pid)}}\n  end\n\n  @impl true\n  def handle_call({:find_geofence, %{latitude: 90, longitude: 45}}, _from, state) do\n    geofence = %GeoFence{id: 0, name: \"South Pole\", latitude: 90, longitude: 45, radius: 100}\n    {:reply, geofence, state}\n  end\n\n  def handle_call({:find_geofence, %{latitude: _, longitude: _}}, _from, state) do\n    {:reply, nil, state}\n  end\nend\n"
  },
  {
    "path": "test/support/mocks/log.ex",
    "content": "defmodule LogMock do\n  use GenServer\n\n  defstruct [:pid, :last_update]\n  alias __MODULE__, as: State\n\n  alias TeslaMate.Log.{Drive, ChargingProcess, Update, Car, Position}\n  alias TeslaMate.Log\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: Keyword.fetch!(opts, :name))\n  end\n\n  def start_state(name, car, state, opts) do\n    GenServer.call(name, {:start_state, car, state, opts})\n  end\n\n  def get_current_state(name, car), do: GenServer.call(name, {:get_current_state, car})\n\n  def start_drive(name, car), do: GenServer.call(name, {:start_drive, car})\n  def close_drive(name, drive, opts \\\\ []), do: GenServer.call(name, {:close_drive, drive, opts})\n\n  def start_update(name, car, opts), do: GenServer.call(name, {:start_update, car, opts})\n  def cancel_update(name, update), do: GenServer.call(name, {:cancel_update, update})\n\n  def finish_update(name, update, vsn, opts) do\n    GenServer.call(name, {:finish_update, update, vsn, opts})\n  end\n\n  def get_latest_update(name, car) do\n    GenServer.call(name, {:get_latest_update, car})\n  end\n\n  def insert_missed_update(name, car, vsn, opts) do\n    GenServer.call(name, {:insert_missed_update, car, vsn, opts})\n  end\n\n  def start_charging_process(name, car, position_attrs, opts \\\\ []) do\n    GenServer.call(name, {:start_charging_process, car, position_attrs, opts})\n  end\n\n  def complete_charging_process(name, cproc) do\n    GenServer.call(name, {:complete_charging_process, cproc})\n  end\n\n  def insert_position(name, car_or_drive, attrs) do\n    GenServer.call(name, {:insert_position, car_or_drive, attrs})\n  end\n\n  def insert_charge(name, cproc, attrs) do\n    GenServer.call(name, {:insert_charge, cproc, attrs})\n  end\n\n  def get_positions_without_elevation(name, min_id, opts) do\n    GenServer.call(name, {:get_positions_without_elevation, min_id, opts})\n  end\n\n  def update_car(name, car, attrs, opts) do\n    GenServer.call(name, {:update_car, car, attrs, opts})\n  end\n\n  def get_latest_position(name, car) do\n    GenServer.call(name, {:get_latest_position, car})\n  end\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    state = %State{\n      pid: Keyword.fetch!(opts, :pid),\n      last_update: Keyword.fetch!(opts, :last_update)\n    }\n\n    {:ok, state}\n  end\n\n  @impl true\n  def handle_call({:start_state, _car, s, _} = action, _from, %State{pid: pid} = state) do\n    send(pid, action)\n    {:reply, {:ok, %Log.State{state: s, start_date: DateTime.utc_now()}}, state}\n  end\n\n  def handle_call({:get_current_state, _}, _from, state) do\n    {:reply, {:ok, %Log.State{state: :online, start_date: DateTime.from_unix!(0)}}, state}\n  end\n\n  def handle_call({:insert_position, _, attrs} = action, _from, %State{pid: pid} = state) do\n    send(pid, action)\n    {:reply, {:ok, struct!(Log.Position, attrs)}, state}\n  end\n\n  def handle_call({:insert_charge, _, _attrs} = action, _from, %State{pid: pid} = state) do\n    send(pid, action)\n    {:reply, {:ok, %Log.Charge{id: 222}}, state}\n  end\n\n  def handle_call({:start_charging_process, _, _, _} = action, _from, %State{pid: pid} = state) do\n    send(pid, action)\n    {:reply, {:ok, %ChargingProcess{id: 99, start_date: DateTime.utc_now()}}, state}\n  end\n\n  def handle_call(\n        {:complete_charging_process, %ChargingProcess{} = cproc} = action,\n        _from,\n        %State{} = state\n      ) do\n    send(state.pid, action)\n    new_cproc = %{cproc | charge_energy_added: 45, end_date: DateTime.utc_now()}\n    {:reply, {:ok, new_cproc}, state}\n  end\n\n  def handle_call({:start_drive, _car} = action, _from, %State{pid: pid} = state) do\n    send(pid, action)\n    {:reply, {:ok, %Drive{id: 111}}, state}\n  end\n\n  def handle_call({:close_drive, _drive, _} = action, _from, %State{pid: pid} = state) do\n    send(pid, action)\n    {:reply, {:ok, %Drive{duration_min: 10, distance: 20.0}}, state}\n  end\n\n  def handle_call({:start_update, _car, _} = action, _from, %State{pid: pid} = state) do\n    send(pid, action)\n    {:reply, {:ok, %Update{id: 111}}, state}\n  end\n\n  def handle_call({:cancel_update, _update} = action, _from, %State{pid: pid} = state) do\n    send(pid, action)\n    {:reply, {:ok, %Update{}}, state}\n  end\n\n  def handle_call({:finish_update, _, _, _} = action, _from, %State{pid: pid} = state) do\n    send(pid, action)\n    {:reply, {:ok, %Update{}}, state}\n  end\n\n  def handle_call({:get_latest_update, _car}, _from, %State{last_update: update} = state) do\n    {:reply, update, state}\n  end\n\n  def handle_call({:insert_missed_update, _, _, _} = action, _from, %State{pid: pid} = state) do\n    send(pid, action)\n    {:reply, {:ok, %Update{}}, state}\n  end\n\n  def handle_call({:get_positions_without_elevation, min_id, _opts}, _from, state) do\n    send(state.pid, {:get_positions_without_elevation, min_id})\n    {:reply, {[], nil}, state}\n  end\n\n  def handle_call({:update_car, car, attrs, _opts} = _action, _from, %State{pid: _pid} = state) do\n    result =\n      car\n      |> Car.changeset(attrs)\n      |> Ecto.Changeset.apply_changes()\n\n    {:reply, {:ok, result}, state}\n  end\n\n  def handle_call({:get_latest_position, _car}, _from, state) do\n    {:reply, %Position{latitude: 0.0, longitude: 0.0}, state}\n  end\n\n  def handle_call(action, _from, %State{pid: pid} = state) do\n    send(pid, action)\n    {:reply, :ok, state}\n  end\nend\n"
  },
  {
    "path": "test/support/mocks/mqtt_publisher.ex",
    "content": "defmodule MqttPublisherMock do\n  use GenServer\n\n  defstruct [:pid]\n  alias __MODULE__, as: State\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: Keyword.fetch!(opts, :name))\n  end\n\n  def publish(name, topic, msg, opts), do: GenServer.call(name, {:publish, topic, msg, opts})\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    {:ok, %State{pid: Keyword.fetch!(opts, :pid)}}\n  end\n\n  @impl true\n  def handle_call({:publish, _topic, _msg, _opts} = action, _from, %State{pid: pid} = state) do\n    send(pid, {MqttPublisherMock, action})\n    {:reply, :ok, state}\n  end\nend\n"
  },
  {
    "path": "test/support/mocks/pubsub.ex",
    "content": "defmodule PubSubMock do\n  use GenServer\n\n  defstruct [:pid, :last_event]\n  alias __MODULE__, as: State\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: Keyword.fetch!(opts, :name))\n  end\n\n  def broadcast(name, server, topic, message) do\n    GenServer.call(name, {:broadcast, server, topic, message})\n  end\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    {:ok, %State{pid: Keyword.fetch!(opts, :pid)}}\n  end\n\n  @impl true\n\n  def handle_call({:broadcast, _, \"Elixir.TeslaMate.Vehicles.Vehicle/fetch/\" <> _, _}, _, state) do\n    {:reply, :ok, state}\n  end\n\n  def handle_call({:broadcast, _, _, _} = event, _from, %State{last_event: event} = state) do\n    {:reply, :ok, state}\n  end\n\n  def handle_call({:broadcast, _, _, _} = event, _from, %State{pid: pid} = state) do\n    send(pid, {:pubsub, event})\n    {:reply, :ok, %State{state | last_event: event}}\n  end\nend\n"
  },
  {
    "path": "test/support/mocks/settings.ex",
    "content": "defmodule SettingsMock do\n  use GenServer\n\n  defstruct [:pid]\n  alias __MODULE__, as: State\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: Keyword.fetch!(opts, :name))\n  end\n\n  def subscribe_to_changes(name, car) do\n    GenServer.call(name, {:subscribe_to_changes, car})\n  end\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    {:ok, %State{pid: Keyword.fetch!(opts, :pid)}}\n  end\n\n  @impl true\n\n  def handle_call({:subscribe_to_changes = event, _car}, _from, %State{pid: pid} = state) do\n    send(pid, {__MODULE__, event})\n    {:reply, :ok, state}\n  end\nend\n"
  },
  {
    "path": "test/support/mocks/srtm.ex",
    "content": "defmodule SRTMMock do\n  use GenServer\n\n  defstruct [:pid, :responses]\n  alias __MODULE__, as: State\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: Keyword.fetch!(opts, :name))\n  end\n\n  def get_elevation(name, lat, lng, opts \\\\ []) do\n    GenServer.call(name, {:get_elevation, lat, lng, opts})\n  end\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    {:ok, %State{pid: Keyword.fetch!(opts, :pid), responses: Keyword.fetch!(opts, :responses)}}\n  end\n\n  @impl true\n  def handle_call({:get_elevation, lat, lng, opts}, _, %State{responses: r} = state) do\n    lat = with %Decimal{} <- lat, do: Decimal.to_float(lat)\n    lng = with %Decimal{} <- lng, do: Decimal.to_float(lng)\n\n    send(state.pid, {SRTM, {:get_elevation, lat, lng, opts}})\n\n    response =\n      with {:ok, elevation} <- Map.fetch!(r, {lat, lng}).() do\n        {:ok, elevation}\n      end\n\n    {:reply, response, state}\n  end\nend\n"
  },
  {
    "path": "test/support/mocks/terrain.ex",
    "content": "defmodule TerrainMock do\n  def get_elevation({_lat, _lng}) do\n    nil\n  end\nend\n"
  },
  {
    "path": "test/support/mocks/vehicle.ex",
    "content": "defmodule VehicleMock do\n  alias TeslaMate.Vehicles.Vehicle\n\n  def child_spec(arg) do\n    arg = Keyword.put(arg, :deps_api, {ApiMock, :api_vehicle})\n\n    %{\n      id: :\"#{VehicleMock}_#{Keyword.fetch!(arg, :car).id}\",\n      start: {Vehicle, :start_link, [arg]}\n    }\n  end\nend\n"
  },
  {
    "path": "test/support/mocks/vehicles.ex",
    "content": "defmodule VehiclesMock do\n  use GenServer\n\n  defstruct [:pid]\n  alias __MODULE__, as: State\n\n  # API\n\n  def start_link(opts) do\n    GenServer.start_link(__MODULE__, opts, name: Keyword.fetch!(opts, :name))\n  end\n\n  def kill(name), do: GenServer.call(name, :kill)\n  def restart(name), do: GenServer.call(name, :restart)\n\n  def subscribe_to_summary(name, car_id) do\n    GenServer.call(name, {:subscribe_to_summary, car_id})\n  end\n\n  # Callbacks\n\n  @impl true\n  def init(opts) do\n    {:ok, %State{pid: Keyword.fetch!(opts, :pid)}}\n  end\n\n  @impl true\n  def handle_call({:subscribe_to_summary, _car_id} = action, _from, %State{pid: pid} = state) do\n    send(pid, {VehiclesMock, action})\n    {:reply, :ok, state}\n  end\n\n  def handle_call(:kill, _from, %State{pid: pid} = state) do\n    send(pid, {VehiclesMock, :kill})\n    {:reply, true, state}\n  end\n\n  def handle_call(:restart, _from, %State{pid: pid} = state) do\n    send(pid, {VehiclesMock, :restart})\n    {:reply, :ok, state}\n  end\nend\n"
  },
  {
    "path": "test/support/test_helper.ex",
    "content": "defmodule TestHelper do\n  def eventually(fun, opts \\\\ []) do\n    eventually(fun, Keyword.get(opts, :attempts, 10), Keyword.get(opts, :delay, 100))\n  end\n\n  defp eventually(fun, attempts, delay) do\n    fun.()\n  rescue\n    e in [ExUnit.AssertionError] ->\n      if attempts == 1, do: reraise(e, __STACKTRACE__)\n      Process.sleep(delay)\n      eventually(fun, attempts - 1, delay)\n  end\n\n  defmacro decimal(value) do\n    value\n    |> to_string()\n    |> Decimal.new()\n    |> Macro.escape()\n  end\nend\n"
  },
  {
    "path": "test/support/vehicle_case.ex",
    "content": "defmodule TeslaMate.VehicleCase do\n  use ExUnit.CaseTemplate\n\n  using do\n    quote do\n      import Ecto\n      import Ecto.Changeset\n      import Ecto.Query\n      import TeslaMate.VehicleCase\n    end\n  end\n\n  setup tags do\n    pid = Ecto.Adapters.SQL.Sandbox.start_owner!(TeslaMate.Repo, shared: not tags[:async])\n    on_exit(fn -> Ecto.Adapters.SQL.Sandbox.stop_owner(pid) end)\n    :ok\n  rescue\n    e in [MatchError] ->\n      case e.term do\n        {:error, {{:badmatch, :already_shared}, _}} -> :ok\n        _ -> reraise e, __STACKTRACE__\n      end\n  end\n\n  alias TeslaMate.Vehicles.Vehicle\n  alias TeslaMate.Settings.CarSettings\n  alias TeslaMate.Log.{Car, Update}\n  alias TeslaApi.Vehicle.State\n\n  def start_vehicle(name, events, opts \\\\ []) when length(events) > 0 do\n    mock_log? = Keyword.get(opts, :log, true)\n    last = Keyword.get(opts, :last_update, %Update{version: \"9999.99.99.0 lasjas234\"})\n\n    log_name = :\"log_#{name}\"\n    api_name = :\"api_#{name}\"\n    settings_name = :\"settings_#{name}\"\n    locations_name = :\"locations_#{name}\"\n    vehicles_name = :\"vehicles_#{name}\"\n    pubsub_name = :\"pubsub_#{name}\"\n\n    {:ok, _pid} = start_supervised({LogMock, name: log_name, pid: self(), last_update: last})\n    {:ok, _pid} = start_supervised({ApiMock, name: api_name, events: events, pid: self()})\n    {:ok, _pid} = start_supervised({SettingsMock, name: settings_name, pid: self()})\n    {:ok, _pid} = start_supervised({VehiclesMock, name: vehicles_name, pid: self()})\n    {:ok, _pid} = start_supervised({PubSubMock, name: pubsub_name, pid: self()})\n    {:ok, _pid} = start_supervised({LocationsMock, name: locations_name, pid: self()})\n\n    opts =\n      Keyword.put_new_lazy(opts, :car, fn ->\n        settings =\n          Keyword.get(opts, :settings, %{})\n          |> Map.put_new(:req_no_shift_state_reading, false)\n          |> Map.put_new(:req_no_temp_reading, false)\n          |> Map.put_new(:req_not_unlocked, true)\n\n        %Car{\n          id: :rand.uniform(65536),\n          eid: 0,\n          vid: 1000,\n          vin: \"1000\",\n          model: \"3\",\n          settings: struct(CarSettings, settings)\n        }\n      end)\n\n    deps =\n      [\n        name: name,\n        deps_log: {LogMock, log_name},\n        deps_api: {ApiMock, api_name},\n        deps_settings: {SettingsMock, settings_name},\n        deps_locations: {LocationsMock, locations_name},\n        deps_vehicles: {VehiclesMock, vehicles_name},\n        deps_pubsub: {PubSubMock, pubsub_name}\n      ]\n      |> Enum.filter(fn\n        {:deps_log, _} -> mock_log?\n        _ -> true\n      end)\n\n    {:ok, _pid} = start_supervised({Vehicle, Keyword.merge(opts, deps)})\n\n    assert_receive {SettingsMock, :subscribe_to_changes}\n\n    :ok\n  end\n\n  def online_event(opts \\\\ []) do\n    now = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    drive_state =\n      Keyword.get(opts, :drive_state, %{latitude: 0.0, longitude: 0.0})\n      |> Map.update(:timestamp, now, fn\n        nil -> now\n        ts -> ts\n      end)\n\n    charge_state = Keyword.get(opts, :charge_state, %{timestamp: 0})\n    climate_state = Keyword.get(opts, :climate_state, %{timestamp: 0})\n    vehicle_state = Keyword.get(opts, :vehicle_state, %{timestamp: 0, car_version: \"\"})\n    vehicle_config = Keyword.get(opts, :vehicle_config, %{timestamp: 0, car_type: \"model3\"})\n\n    %TeslaApi.Vehicle{\n      state: \"online\",\n      display_name: Keyword.get(opts, :display_name),\n      charge_state: struct(State.Charge, charge_state),\n      drive_state: struct(State.Drive, drive_state),\n      climate_state: struct(State.Climate, climate_state),\n      vehicle_state: struct(State.VehicleState, vehicle_state),\n      vehicle_config: struct(State.VehicleConfig, vehicle_config)\n    }\n  end\n\n  def drive_event(ts, shift_state, speed_mph) do\n    online_event(\n      drive_state: %{\n        timestamp: ts,\n        latitude: 0.1,\n        longitude: 0.1,\n        shift_state: shift_state,\n        speed: speed_mph\n      }\n    )\n  end\n\n  def charging_event(ts, charging_state, charge_energy_added, opts \\\\ []) do\n    range = Keyword.get(opts, :range)\n\n    online_event(\n      charge_state: %{\n        timestamp: ts,\n        charging_state: charging_state,\n        charge_energy_added: charge_energy_added,\n        ideal_battery_range: range,\n        battery_range: range\n      },\n      drive_state: %{timestamp: ts, latitude: 0.0, longitude: 0.0}\n    )\n  end\n\n  def update_event(ts, state, car_version, opts \\\\ []) do\n    alias TeslaApi.Vehicle.State.VehicleState.SoftwareUpdate\n\n    update_version = Keyword.get(opts, :update_version)\n\n    online_event(\n      vehicle_state: %{\n        timestamp: ts,\n        car_version: car_version,\n        software_update: %SoftwareUpdate{\n          expected_duration_sec: 2700,\n          status: state,\n          version: update_version\n        }\n      },\n      drive_state: %{timestamp: ts, latitude: 0.0, longitude: 0.0}\n    )\n  end\nend\n"
  },
  {
    "path": "test/teslamate/api_test.exs",
    "content": "defmodule TeslaMate.ApiTest do\n  use TeslaMate.DataCase\n\n  alias TeslaMate.Api\n  alias TeslaMate.Auth.Tokens\n\n  import Mock\n\n  def start_api(name, opts \\\\ []) do\n    auth_name = :\"auth_#{name}\"\n    vehicles_name = :\"vehicles_#{name}\"\n\n    start_auth? = !!Keyword.get(opts, :start_auth, true)\n\n    if start_auth? do\n      tokens = Keyword.get(opts, :tokens)\n      {:ok, _pid} = start_supervised({AuthMock, name: auth_name, tokens: tokens, pid: self()})\n    end\n\n    {:ok, _pid} = start_supervised({VehiclesMock, name: vehicles_name, pid: self()})\n\n    opts = [\n      {:name, name},\n      {:vehicles, {VehiclesMock, vehicles_name}}\n      | if(start_auth?, do: [auth: {AuthMock, auth_name}], else: [])\n    ]\n\n    with {:ok, _} <- start_supervised({Api, opts}) do\n      :ok\n    end\n  end\n\n  defp vehicle_mock(pid) do\n    {TeslaApi.Vehicle, [],\n     [\n       list: fn auth ->\n         send(pid, {TeslaApi.Vehicle, {:list, auth}})\n         {:ok, [%TeslaApi.Vehicle{}]}\n       end,\n       get: fn auth, id ->\n         send(pid, {TeslaApi.Vehicle, {:get, auth, id}})\n         {:ok, %TeslaApi.Vehicle{id: id}}\n       end,\n       get_with_state: fn auth, id ->\n         send(pid, {TeslaApi.Vehicle, {:get_with_state, auth, id}})\n         {:ok, %TeslaApi.Vehicle{id: id}}\n       end\n     ]}\n  end\n\n  defp auth_mock(pid) do\n    {TeslaApi.Auth, [],\n     [\n       refresh: fn\n         %{token: \"cannot_be_refreshed\", refresh_token: \"cannot_be_refreshed\"} = auth ->\n           send(pid, {TeslaApi.Auth, {:refresh, auth}})\n           {:error, %TeslaApi.Error{reason: :induced_error, message: \"foo\"}}\n\n         auth ->\n           send(pid, {TeslaApi.Auth, {:refresh, auth}})\n           {:ok, %TeslaApi.Auth{token: \"$token\", refresh_token: \"$token\", expires_in: 10_000_000}}\n       end\n     ]}\n  end\n\n  @valid_tokens %Tokens{access: \"$access\", refresh: \"$refresh\"}\n\n  setup do\n    start_supervised!(TeslaMate.Vault)\n    :ok\n  end\n\n  describe \"sign in\" do\n    test \"starts without tokens\", %{test: name} do\n      with_mocks [auth_mock(self()), vehicle_mock(self())] do\n        :ok = start_api(name, tokens: nil)\n\n        assert false == Api.signed_in?(name)\n        assert {:error, :not_signed_in} = Api.list_vehicles(name)\n        assert {:error, :not_signed_in} = Api.get_vehicle(name, 0)\n        assert {:error, :not_signed_in} = Api.get_vehicle_with_state(name, 0)\n\n        refute_receive _\n      end\n    end\n\n    test \"starts if tokens are valid\", %{test: name} do\n      with_mocks [auth_mock(self()), vehicle_mock(self())] do\n        :ok = start_api(name, tokens: @valid_tokens)\n\n        assert_receive {TeslaApi.Auth,\n                        {:refresh, %TeslaApi.Auth{refresh_token: \"$refresh\", token: \"$access\"}}}\n\n        assert_receive {AuthMock, {:save, %TeslaApi.Auth{}}}\n\n        assert true == Api.signed_in?(name)\n\n        refute_receive _\n      end\n    end\n\n    @tag :capture_log\n    test \"uses the tokens from the database if the refresh fails\", %{test: name} do\n      with_mocks [auth_mock(self()), vehicle_mock(self())] do\n        :ok =\n          start_api(name,\n            tokens: %Tokens{access: \"cannot_be_refreshed\", refresh: \"cannot_be_refreshed\"}\n          )\n\n        assert_receive {TeslaApi.Auth,\n                        {:refresh,\n                         %TeslaApi.Auth{\n                           refresh_token: \"cannot_be_refreshed\",\n                           token: \"cannot_be_refreshed\"\n                         }}}\n\n        assert true == Api.signed_in?(name)\n\n        refute_receive _\n      end\n    end\n\n    test \"allows sign in with API tokens\", %{test: name} do\n      with_mocks [auth_mock(self()), vehicle_mock(self())] do\n        :ok = start_api(name, tokens: nil)\n\n        assert false == Api.signed_in?(name)\n\n        assert :ok = Api.sign_in(name, @valid_tokens)\n\n        assert_receive {TeslaApi.Auth,\n                        {:refresh, %TeslaApi.Auth{refresh_token: \"$refresh\", token: \"$access\"}}}\n\n        assert_receive {AuthMock, {:save, %TeslaApi.Auth{}}}\n        assert_receive {VehiclesMock, :restart}\n        assert true == Api.signed_in?(name)\n\n        refute_receive _\n      end\n    end\n\n    test \"fails if already signed in\", %{test: name} do\n      with_mocks [auth_mock(self()), vehicle_mock(self())] do\n        :ok = start_api(name, tokens: @valid_tokens)\n\n        assert_receive {TeslaApi.Auth, {:refresh, %TeslaApi.Auth{}}}\n        assert_receive {AuthMock, {:save, %TeslaApi.Auth{}}}\n        assert true == Api.signed_in?(name)\n\n        assert {:error, :already_signed_in} = Api.sign_in(name, @valid_tokens)\n\n        refute_receive _\n      end\n    end\n\n    test \"fails if api returns error\", %{test: name} do\n      with_mock TeslaApi.Auth,\n        refresh: fn _tokens ->\n          {:error, %TeslaApi.Error{reason: :unauthorized, env: %Finch.Response{}}}\n        end do\n        :ok = start_api(name, start_auth: false)\n\n        assert {:error, %TeslaApi.Error{reason: :unauthorized}} = Api.sign_in(name, @valid_tokens)\n      end\n    end\n  end\n\n  describe \"refresh\" do\n    test \"refreshes tokens\", %{test: name} do\n      with_mocks [auth_mock(self()), vehicle_mock(self())] do\n        :ok = start_api(name, tokens: @valid_tokens)\n\n        assert_receive {TeslaApi.Auth, {:refresh, %TeslaApi.Auth{}}}\n        assert_receive {AuthMock, {:save, %TeslaApi.Auth{}}}\n        assert true == Api.signed_in?(name)\n\n        send(name, :refresh_auth)\n\n        assert_receive {TeslaApi.Auth, {:refresh, %TeslaApi.Auth{}}}\n        assert_receive {AuthMock, {:save, %TeslaApi.Auth{}}}\n\n        refute_receive _\n      end\n    end\n  end\n\n  describe \"Vehicle API\" do\n    test \"get_vehicle/1\", %{test: name} do\n      with_mocks [auth_mock(self()), vehicle_mock(self())] do\n        :ok = start_api(name, tokens: @valid_tokens)\n        assert_receive {TeslaApi.Auth, {:refresh, _}}\n        assert_receive {AuthMock, {:save, %TeslaApi.Auth{}}}\n\n        assert {:ok, %TeslaApi.Vehicle{id: 0}} = Api.get_vehicle(name, 0)\n        assert_receive {TeslaApi.Vehicle, {:get, %TeslaApi.Auth{}, 0}}\n\n        refute_receive _\n      end\n    end\n\n    test \"get_vehicle_with_state/1\", %{test: name} do\n      with_mocks [auth_mock(self()), vehicle_mock(self())] do\n        :ok = start_api(name, tokens: @valid_tokens)\n        assert_receive {TeslaApi.Auth, {:refresh, _}}\n        assert_receive {AuthMock, {:save, %TeslaApi.Auth{}}}\n\n        assert {:ok, %TeslaApi.Vehicle{id: 0}} = Api.get_vehicle_with_state(name, 0)\n        assert_receive {TeslaApi.Vehicle, {:get_with_state, %TeslaApi.Auth{}, 0}}\n\n        refute_receive _\n      end\n    end\n\n    test \"list_vehicles/0\", %{test: name} do\n      with_mocks [auth_mock(self()), vehicle_mock(self())] do\n        :ok = start_api(name, tokens: @valid_tokens)\n        assert_receive {TeslaApi.Auth, {:refresh, _}}\n        assert_receive {AuthMock, {:save, %TeslaApi.Auth{}}}\n\n        assert {:ok, [%TeslaApi.Vehicle{}]} = Api.list_vehicles(name)\n        assert_receive {TeslaApi.Vehicle, {:list, %TeslaApi.Auth{}}}\n\n        refute_receive _\n      end\n    end\n\n    @tag :capture_log\n    test \"signs out if the API repeatedly returns a 401 response\", %{test: name} do\n      parent_pid = self()\n\n      vehicle_mock =\n        {TeslaApi.Vehicle, [],\n         [\n           list: fn _ ->\n             {:error, %TeslaApi.Error{reason: :unauthorized, env: %Finch.Response{}}}\n           end,\n           get: fn _, _ ->\n             {:error, %TeslaApi.Error{reason: :unauthorized, env: %Finch.Response{}}}\n           end,\n           get_with_state: fn _, _ ->\n             {:error, %TeslaApi.Error{reason: :unauthorized, env: %Finch.Response{}}}\n           end\n         ]}\n\n      auth_mock =\n        {TeslaApi.Auth, [],\n         [\n           refresh: fn\n             %TeslaApi.Auth{token: \"continue_token\"} ->\n               auth = %TeslaApi.Auth{\n                 token: \"$token\",\n                 refresh_token: \"$token\",\n                 expires_in: 10_000_000\n               }\n\n               {:ok, auth}\n\n             auth ->\n               send(parent_pid, {TeslaApi.Auth, {:refresh, auth}})\n               {:error, %TeslaApi.Error{reason: :induced_error, message: \"foo\"}}\n           end\n         ]}\n\n      with_mocks [auth_mock, vehicle_mock] do\n        :ok = start_api(name, start_auth: false)\n\n        refute_receive _\n\n        for api_fn <- [\n              fn -> Api.list_vehicles(name) end,\n              fn -> Api.get_vehicle(name, 0) end,\n              fn -> Api.get_vehicle_with_state(name, 0) end\n            ] do\n          # Sign in …\n          assert :ok = Api.sign_in(name, %Tokens{access: \"continue_token\"})\n\n          # retry until the fuse metls and we're signed out\n          assert :ok ==\n                   Enum.reduce_while(1..10, nil, fn _, _ ->\n                     case api_fn.() do\n                       {:error, :unauthorized} ->\n                         assert_receive {TeslaApi.Auth, {:refresh, _}}\n                         {:cont, nil}\n\n                       {:error, :not_signed_in} ->\n                         {:halt, :ok}\n                     end\n                   end)\n        end\n      end\n    end\n\n    test \"returns :not_signed_in if Api GenServer is not found\", %{test: name} do\n      assert {:error, :not_signed_in} = Api.list_vehicles(name)\n    end\n\n    test \"handles unknown messages gracefully\", %{test: name} do\n      vehicle_mock =\n        {TeslaApi.Vehicle, [],\n         [\n           list: fn _ ->\n             {:error, %TeslaApi.Error{reason: :unauthorized, env: %Finch.Response{}}}\n           end,\n           get: fn _, _ ->\n             {:error, %TeslaApi.Error{reason: :unauthorized, env: %Finch.Response{}}}\n           end,\n           get_with_state: fn _, _ ->\n             {:error, %TeslaApi.Error{reason: :unauthorized, env: %Finch.Response{}}}\n           end\n         ]}\n\n      with_mocks [auth_mock(self()), vehicle_mock] do\n        :ok = start_api(name, start_auth: false)\n\n        true =\n          name\n          |> Process.whereis()\n          |> Process.link()\n\n        send(name, :boom)\n\n        refute_receive _\n      end\n    end\n\n    @tag :capture_log\n    test \":vehicle_not_found\", %{test: name} do\n      api_error = %TeslaApi.Error{reason: :vehicle_not_found, env: %Finch.Response{}}\n\n      vehicle_mock =\n        {TeslaApi.Vehicle, [],\n         [\n           get: fn _auth, _id -> {:error, api_error} end,\n           get_with_state: fn _auth, _id -> {:error, api_error} end\n         ]}\n\n      with_mocks [auth_mock(self()), vehicle_mock] do\n        :ok = start_api(name, start_auth: false)\n\n        assert :ok = Api.sign_in(name, @valid_tokens)\n        assert {:error, :vehicle_not_found} = Api.get_vehicle(name, 0)\n        assert {:error, :vehicle_not_found} = Api.get_vehicle_with_state(name, 0)\n      end\n    end\n\n    @tag :capture_log\n    test \":too_many_requests\", %{test: name} do\n      api_error = %TeslaApi.Error{\n        reason: :too_many_requests,\n        message: 300\n      }\n\n      vehicle_mock =\n        {TeslaApi.Vehicle, [],\n         [\n           get: fn _auth, _id -> {:error, api_error} end,\n           get_with_state: fn _auth, _id -> {:error, api_error} end\n         ]}\n\n      with_mocks [auth_mock(self()), vehicle_mock] do\n        :ok = start_api(name, start_auth: false)\n\n        assert :ok = Api.sign_in(name, @valid_tokens)\n        assert {:error, :too_many_requests} = Api.get_vehicle(name, 0)\n        assert {:error, :too_many_requests} = Api.get_vehicle_with_state(name, 0)\n      end\n    end\n\n    @tag :capture_log\n    test \"other error with Env\", %{test: name} do\n      api_error = %TeslaApi.Error{\n        reason: :unknown,\n        message: \"\",\n        env: %Finch.Response{status: 503, body: \"\"}\n      }\n\n      vehicle_mock =\n        {TeslaApi.Vehicle, [],\n         [\n           list: fn _auth -> {:error, api_error} end,\n           get: fn _auth, _id -> {:error, api_error} end,\n           get_with_state: fn _auth, _id -> {:error, api_error} end\n         ]}\n\n      with_mocks [auth_mock(self()), vehicle_mock] do\n        :ok = start_api(name, start_auth: false)\n\n        assert :ok = Api.sign_in(name, @valid_tokens)\n\n        assert {:error, :unknown} = Api.list_vehicles(name)\n        assert {:error, :unknown} = Api.get_vehicle(name, 0)\n        assert {:error, :unknown} = Api.get_vehicle_with_state(name, 0)\n      end\n    end\n\n    @tag :capture_log\n    test \"other error without Env\", %{test: name} do\n      api_error = %TeslaApi.Error{reason: :closed, message: \"foo\"}\n\n      vehicle_mock =\n        {TeslaApi.Vehicle, [],\n         [\n           list: fn _auth -> {:error, api_error} end,\n           get: fn _auth, _id -> {:error, api_error} end,\n           get_with_state: fn _auth, _id -> {:error, api_error} end\n         ]}\n\n      with_mocks [auth_mock(self()), vehicle_mock] do\n        :ok = start_api(name, start_auth: false)\n\n        assert :ok = Api.sign_in(name, @valid_tokens)\n        assert {:error, :closed} = Api.list_vehicles(name)\n        assert {:error, :closed} = Api.get_vehicle(name, 0)\n        assert {:error, :closed} = Api.get_vehicle_with_state(name, 0)\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/auth_test.exs",
    "content": "defmodule TeslaMate.AuthTest do\n  use TeslaMate.DataCase\n\n  alias TeslaMate.Auth\n\n  setup do\n    start_supervised!(TeslaMate.Vault)\n    :ok\n  end\n\n  describe \"tokens\" do\n    @valid_attrs %{refresh_token: \"some refresh token\", token: \"some access token\"}\n    @update_attrs %{\n      refresh_token: \"some updated refresh token\",\n      token: \"some updated access token\"\n    }\n    @invalid_attrs %{refresh_token: nil, token: nil}\n\n    test \"save/1 with valid data creates or updates the tokens\" do\n      assert Auth.get_tokens() == nil\n\n      assert :ok = Auth.save(@valid_attrs)\n      assert tokens = Auth.get_tokens()\n      assert tokens.refresh == \"some refresh token\"\n      assert tokens.access == \"some access token\"\n\n      assert :ok = Auth.save(@update_attrs)\n      assert tokens = Auth.get_tokens()\n      assert tokens.refresh == \"some updated refresh token\"\n      assert tokens.access == \"some updated access token\"\n    end\n\n    test \"save/1 with invalid data returns error changeset\" do\n      assert {:error, %Ecto.Changeset{} = changeset} = Auth.save(@invalid_attrs)\n\n      assert %{refresh: [\"can't be blank\"], access: [\"can't be blank\"]} ==\n               errors_on(changeset)\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/http_test.exs",
    "content": "defmodule TeslaMate.HTTPTest do\n  use ExUnit.Case, async: true\n  import ExUnit.CaptureLog\n\n  setup do\n    on_exit(fn -> System.delete_env(\"NOMINATIM_PROXY\") end)\n    :ok\n  end\n\n  test \"no env -> nominatim has only size: 3\" do\n    System.delete_env(\"NOMINATIM_PROXY\")\n    pools = TeslaMate.HTTP.pools()\n    assert pools[\"https://nominatim.openstreetmap.org\"] == [size: 3]\n  end\n\n  test \"valid http proxy -> nominatim has conn_opts\" do\n    System.put_env(\"NOMINATIM_PROXY\", \"http://127.0.0.1:7890\")\n    pools = TeslaMate.HTTP.pools()\n\n    assert pools[\"https://nominatim.openstreetmap.org\"] ==\n             [size: 3, conn_opts: [proxy: {:http, \"127.0.0.1\", 7890, []}]]\n  end\n\n  test \"invalid scheme -> fallback to no proxy and logs warning\" do\n    log =\n      capture_log(fn ->\n        System.put_env(\"NOMINATIM_PROXY\", \"socks5://127.0.0.1:1080\")\n        pools = TeslaMate.HTTP.pools()\n        assert pools[\"https://nominatim.openstreetmap.org\"] == [size: 3]\n      end)\n\n    assert log =~ \"unsupported scheme\"\n    assert log =~ \"fallback: no proxy\"\n  end\nend\n"
  },
  {
    "path": "test/teslamate/import_test.exs",
    "content": "defmodule TeslaMate.ImportTest do\n  use TeslaMate.DataCase\n\n  alias TeslaMate.Log.{Car, Drive, ChargingProcess, State, Update}\n  alias TeslaMate.{Repo, Log, Repair}\n\n  alias TeslaMate.Import.Status\n  alias TeslaMate.Import\n\n  import TestHelper, only: [decimal: 1]\n  import Mock\n\n  @dir \"./test/fixtures/import\"\n\n  setup do\n    [pid: self()]\n  end\n\n  test \"logs drives, charges, states and updates\", %{pid: pid} do\n    {:ok, _pid} = start_supervised({Import, directory: \"#{@dir}/01_complete\"})\n\n    assert %Import.Status{files: [f0, f1], message: nil, state: :idle} = Import.get_status()\n    assert f0 == %{complete: false, date: [2016, 6], path: \"#{@dir}/01_complete/TeslaFi62016.csv\"}\n    assert f1 == %{complete: false, date: [2016, 7], path: \"#{@dir}/01_complete/TeslaFi72016.csv\"}\n\n    with_mock Repair, trigger_run: fn -> ok_fn(:trigger_run, pid) end do\n      assert :ok = Import.subscribe()\n      assert :ok = Import.run(\"America/Los_Angeles\")\n\n      for {f0, f1} <- [{false, false}, {false, false}, {true, false}, {true, true}] do\n        assert_receive %Status{files: [%{complete: ^f0}, %{complete: ^f1}], state: :running}, 3000\n      end\n\n      assert_receive %Status{\n                       files: [\n                         %{complete: true, date: [2016, 6]},\n                         %{complete: true, date: [2016, 7]}\n                       ],\n                       state: :complete\n                     },\n                     1000\n\n      assert_receive :trigger_run\n      assert_receive :trigger_run\n      assert_receive :trigger_run\n\n      refute_receive _\n    end\n\n    assert [\n             %Car{\n               id: car_id,\n               name: \"82420\",\n               eid: _random,\n               vid: 1_111_111_111,\n               vin: \"1YYSA1YYYFF08YYYY\",\n               efficiency: nil,\n               model: nil,\n               trim_badging: nil,\n               settings_id: _\n             }\n           ] = all(Car)\n\n    assert [\n             %Drive{\n               car_id: ^car_id,\n               distance: 1.2049430000006396,\n               duration_min: 3,\n               start_date: ~U[2016-06-26 18:12:28.000000Z],\n               end_date: ~U[2016-06-26 18:15:28.000000Z],\n               start_address_id: nil,\n               end_address_id: nil,\n               start_geofence_id: nil,\n               end_geofence_id: nil,\n               start_ideal_range_km: decimal(311.73),\n               end_ideal_range_km: decimal(311.73),\n               start_km: 22414.090164,\n               end_km: 22415.295107,\n               start_position_id: _,\n               end_position_id: _,\n               start_rated_range_km: decimal(247.24),\n               end_rated_range_km: decimal(247.24),\n               inside_temp_avg: decimal(26.5),\n               outside_temp_avg: decimal(19.3),\n               power_max: nil,\n               power_min: nil,\n               speed_max: 55\n             },\n             %Drive{\n               car_id: ^car_id,\n               distance: 4.962514999999257,\n               duration_min: 12,\n               start_date: ~U[2016-06-26 19:22:28.000000Z],\n               end_date: ~U[2016-06-26 19:34:09.000000Z],\n               start_address_id: nil,\n               end_address_id: nil,\n               start_geofence_id: nil,\n               end_geofence_id: nil,\n               start_km: 22415.344102,\n               end_km: 22420.306617,\n               start_position_id: _,\n               end_position_id: _,\n               start_rated_range_km: decimal(246.07),\n               end_rated_range_km: decimal(239.05),\n               start_ideal_range_km: decimal(310.27),\n               end_ideal_range_km: decimal(301.41),\n               inside_temp_avg: decimal(28.8),\n               outside_temp_avg: decimal(20.1),\n               power_max: nil,\n               power_min: nil,\n               speed_max: 58\n             }\n           ] = all(Drive)\n\n    assert [\n             %ChargingProcess{\n               car_id: ^car_id,\n               charge_energy_added: decimal(10.11),\n               charge_energy_used: decimal(10.65),\n               address_id: nil,\n               cost: nil,\n               duration_min: 70,\n               start_battery_level: 57,\n               end_battery_level: 70,\n               start_date: ~U[2016-06-26 23:04:32.000000Z],\n               end_date: ~U[2016-06-27 00:14:32.000000Z],\n               start_ideal_range_km: decimal(298.44),\n               end_ideal_range_km: decimal(369.17),\n               start_rated_range_km: decimal(236.69),\n               end_rated_range_km: decimal(292.79),\n               geofence_id: nil,\n               outside_temp_avg: decimal(23.5)\n             }\n           ] = all(ChargingProcess)\n\n    assert [\n             %Update{\n               car_id: ^car_id,\n               start_date: ~U[2016-06-26 14:59:31.000000Z],\n               end_date: ~U[2016-06-26 14:59:31.000000Z],\n               version: \"2.20.30\"\n             }\n           ] = all(Update)\n\n    assert [\n             %State{\n               car_id: ^car_id,\n               start_date: ~U[2016-06-26 14:59:31.000000Z],\n               end_date: ~U[2016-07-01 07:25:33.000000Z],\n               state: :online\n             },\n             %State{\n               car_id: ^car_id,\n               start_date: ~U[2016-07-01 07:25:33.000000Z],\n               end_date: nil,\n               state: :asleep\n             }\n           ] = all(State)\n  end\n\n  test \"handles overlap\", %{pid: pid} do\n    {:ok, %Car{id: car_id} = car} =\n      Log.create_car(%{\n        name: \"82420\",\n        eid: 42,\n        vid: 1_111_111_111,\n        vin: \"1YYSA1YYYFF08YYYY\"\n      })\n\n    {:ok, _} = Log.start_state(car, :asleep, date: ~U[2016-06-26 19:22:28.000000Z])\n    {:ok, _} = Log.start_state(car, :online, date: ~U[2016-06-26 20:00:10.000000Z])\n\n    {:ok, _pid} = start_supervised({Import, directory: \"#{@dir}/01_complete\"})\n\n    assert %Import.Status{files: [f0, f1], message: nil, state: :idle} = Import.get_status()\n    assert f0 == %{complete: false, date: [2016, 6], path: \"#{@dir}/01_complete/TeslaFi62016.csv\"}\n    assert f1 == %{complete: false, date: [2016, 7], path: \"#{@dir}/01_complete/TeslaFi72016.csv\"}\n\n    with_mock Repair, trigger_run: fn -> ok_fn(:trigger_run, pid) end do\n      assert :ok = Import.subscribe()\n      assert :ok = Import.run(\"America/Los_Angeles\")\n\n      for {f0, f1} <- [{false, false}, {false, false}, {true, false}] do\n        assert_receive %Status{files: [%{complete: ^f0}, %{complete: ^f1}], state: :running}, 3000\n      end\n\n      assert_receive %Status{\n                       files: [\n                         %{complete: true, date: [2016, 6]},\n                         %{complete: false, date: [2016, 7]}\n                       ],\n                       state: :complete\n                     },\n                     1000\n\n      assert_receive :trigger_run\n      assert_receive :trigger_run\n\n      refute_receive _\n    end\n\n    assert [\n             %Drive{\n               car_id: ^car_id,\n               duration_min: 3,\n               start_date: ~U[2016-06-26 18:12:28.000000Z],\n               end_date: ~U[2016-06-26 18:15:28.000000Z]\n             }\n           ] = all(Drive)\n\n    assert [] = all(ChargingProcess)\n\n    assert [\n             %Update{\n               car_id: ^car_id,\n               start_date: ~U[2016-06-26 14:59:31.000000Z],\n               end_date: ~U[2016-06-26 14:59:31.000000Z],\n               version: \"2.20.30\"\n             }\n           ] = all(Update)\n\n    assert [\n             %State{\n               car_id: ^car_id,\n               start_date: ~U[2016-06-26 19:22:28.000000Z],\n               end_date: ~U[2016-06-26 20:00:10.000000Z],\n               state: :asleep\n             },\n             %State{\n               car_id: ^car_id,\n               start_date: ~U[2016-06-26 20:00:10.000000Z],\n               end_date: nil,\n               state: :online\n             },\n             %State{\n               car_id: ^car_id,\n               start_date: ~U[2016-06-26 14:59:31.000000Z],\n               end_date: ~U[2016-06-26 19:22:28.000000Z],\n               state: :online\n             }\n           ] = all(State)\n  end\n\n  describe \"uses the locale time zone\" do\n    test \"America/Los_Angeles\", %{pid: pid} do\n      {:ok, _pid} = start_supervised({Import, directory: \"#{@dir}/02_timezone\"})\n\n      assert %Import.Status{files: [f], message: nil, state: :idle} = Import.get_status()\n\n      assert f == %{\n               complete: false,\n               date: [2019, 9],\n               path: \"#{@dir}/02_timezone/TeslaFi92019.csv\"\n             }\n\n      with_mock Repair, trigger_run: fn -> ok_fn(:trigger_run, pid) end do\n        assert :ok = Import.subscribe()\n        assert :ok = Import.run(\"America/Los_Angeles\")\n\n        assert_receive %Status{files: [%{complete: false}], state: :running}, 3000\n        assert_receive %Status{files: [%{complete: false}], state: :running}, 3000\n        assert_receive %Status{files: [%{complete: true}], state: :running}, 3000\n        assert_receive %Status{files: [%{complete: true}], state: :complete}, 3000\n\n        assert_receive :trigger_run\n        assert_receive :trigger_run\n\n        refute_receive _\n      end\n\n      assert [\n               %State{\n                 car_id: car_id,\n                 start_date: ~U[2019-09-01 10:18:11.000000Z],\n                 end_date: ~U[2019-09-01 15:55:12.000000Z],\n                 state: :asleep\n               },\n               %State{\n                 car_id: car_id,\n                 start_date: ~U[2019-09-01 15:55:12.000000Z],\n                 end_date: ~U[2019-09-01 22:49:11.000000Z],\n                 state: :online\n               },\n               %State{\n                 car_id: car_id,\n                 start_date: ~U[2019-09-01 22:49:11.000000Z],\n                 end_date: ~U[2019-09-01 23:34:12.000000Z],\n                 state: :asleep\n               },\n               %State{\n                 car_id: car_id,\n                 start_date: ~U[2019-09-01 23:34:12.000000Z],\n                 end_date: nil,\n                 state: :online\n               }\n             ] = all(State)\n\n      assert [] = all(Drive)\n      assert [] = all(ChargingProcess)\n    end\n\n    test \"Europe/Berlin\", %{pid: pid} do\n      {:ok, _pid} = start_supervised({Import, directory: \"#{@dir}/02_timezone\"})\n\n      assert %Import.Status{files: [f], message: nil, state: :idle} = Import.get_status()\n\n      assert f == %{\n               complete: false,\n               date: [2019, 9],\n               path: \"#{@dir}/02_timezone/TeslaFi92019.csv\"\n             }\n\n      with_mock Repair, trigger_run: fn -> ok_fn(:trigger_run, pid) end do\n        assert :ok = Import.subscribe()\n        assert :ok = Import.run(\"Europe/Berlin\")\n\n        assert_receive %Status{files: [%{complete: false}], state: :running}, 1000\n        assert_receive %Status{files: [%{complete: false}], state: :running}, 1000\n        assert_receive %Status{files: [%{complete: true}], state: :running}, 10000\n        assert_receive %Status{files: [%{complete: true}], state: :complete}, 1000\n\n        assert_receive :trigger_run\n        assert_receive :trigger_run\n\n        refute_receive _\n      end\n\n      assert [\n               %State{\n                 car_id: car_id,\n                 start_date: ~U[2019-09-01 01:18:11.000000Z],\n                 end_date: ~U[2019-09-01 06:55:12.000000Z],\n                 state: :asleep\n               },\n               %State{\n                 car_id: car_id,\n                 start_date: ~U[2019-09-01 06:55:12.000000Z],\n                 end_date: ~U[2019-09-01 13:49:11.000000Z],\n                 state: :online\n               },\n               %State{\n                 car_id: car_id,\n                 start_date: ~U[2019-09-01 13:49:11.000000Z],\n                 end_date: ~U[2019-09-01 14:34:12.000000Z],\n                 state: :asleep\n               },\n               %State{\n                 car_id: car_id,\n                 start_date: ~U[2019-09-01 14:34:12.000000Z],\n                 end_date: nil,\n                 state: :online\n               }\n             ] = all(State)\n\n      assert [] = all(Drive)\n      assert [] = all(ChargingProcess)\n    end\n\n    test \"DST change\", %{pid: pid} do\n      {:ok, _pid} = start_supervised({Import, directory: \"#{@dir}/05_dst\"})\n\n      assert %Import.Status{files: [f], message: nil, state: :idle} = Import.get_status()\n\n      assert f == %{\n               complete: false,\n               date: [2019, 10],\n               path: \"#{@dir}/05_dst/TeslaFi102019.csv\"\n             }\n\n      with_mock Repair, trigger_run: fn -> ok_fn(:trigger_run, pid) end do\n        assert :ok = Import.subscribe()\n        assert :ok = Import.run(\"Europe/Berlin\")\n\n        assert_receive %Status{files: [%{complete: false}], state: :running}, 1000\n        assert_receive %Status{files: [%{complete: false}], state: :running}, 1000\n        assert_receive %Status{files: [%{complete: true}], state: :running}, 10000\n        assert_receive %Status{files: [%{complete: true}], state: :complete}, 1000\n\n        assert_receive :trigger_run\n        assert_receive :trigger_run\n\n        refute_receive _\n      end\n\n      assert [\n               %TeslaMate.Log.State{\n                 car_id: car_id,\n                 start_date: ~U[2019-10-26 23:30:40.000000Z],\n                 end_date: ~U[2019-10-27 02:14:44.000000Z],\n                 state: :asleep\n               },\n               %TeslaMate.Log.State{\n                 car_id: car_id,\n                 start_date: ~U[2019-10-27 02:14:44.000000Z],\n                 end_date: nil,\n                 state: :online\n               }\n             ] = all(State)\n\n      assert [] = all(Drive)\n      assert [] = all(ChargingProcess)\n    end\n  end\n\n  test \"car war permanently unreachable\", %{pid: pid} do\n    {:ok, _pid} = start_supervised({Import, directory: \"#{@dir}/03_empty\"})\n\n    assert %Import.Status{files: [f0, f1], message: nil, state: :idle} = Import.get_status()\n    assert f0 == %{complete: false, date: [2018, 5], path: \"#{@dir}/03_empty/TeslaFi52018.csv\"}\n    assert f1 == %{complete: false, date: [2018, 6], path: \"#{@dir}/03_empty/TeslaFi62018.csv\"}\n\n    with_mock Repair, trigger_run: fn -> ok_fn(:trigger_run, pid) end do\n      assert :ok = Import.subscribe()\n      assert :ok = Import.run(\"Europe/Berlin\")\n\n      {t, f} = {true, false}\n      assert_receive %Status{files: [%{complete: ^f}, %{complete: ^f}], state: :running}, 1500\n      assert_receive %Status{files: [%{complete: ^f}, %{complete: ^f}], state: :running}, 1500\n      assert_receive %Status{files: [%{complete: ^t}, %{complete: ^f}], state: :running}, 1500\n      assert_receive %Status{files: [%{complete: ^t}, %{complete: ^t}], state: :running}, 1500\n      assert_receive %Status{files: [%{complete: ^t}, %{complete: ^t}], state: :complete}, 1500\n\n      assert_receive :trigger_run\n      assert_receive :trigger_run\n      assert_receive :trigger_run\n\n      refute_receive _\n    end\n\n    assert [\n             %State{\n               car_id: car_id,\n               end_date: ~U[2018-06-01 05:27:14.000000Z],\n               start_date: ~U[2018-04-30 22:00:14.000000Z],\n               state: :asleep\n             },\n             %State{\n               car_id: car_id,\n               start_date: ~U[2018-06-01 05:27:14.000000Z],\n               end_date: nil,\n               state: :online\n             }\n           ] = all(State)\n\n    assert [] = all(Drive)\n    assert [] = all(ChargingProcess)\n  end\n\n  @tag :capture_log\n  test \"detects if file contains data for more than one car\", %{pid: pid} do\n    {:ok, _pid} = start_supervised({Import, directory: \"#{@dir}/06_two_cars\"})\n\n    assert %Import.Status{files: [f0], message: nil, state: :idle} = Import.get_status()\n    assert f0 == %{complete: false, date: [2020, 6], path: \"#{@dir}/06_two_cars/TeslaFi62020.csv\"}\n\n    with_mock Repair, trigger_run: fn -> ok_fn(:trigger_run, pid) end do\n      assert :ok = Import.subscribe()\n      assert :ok = Import.run(\"America/New_York\")\n\n      assert_receive %Status{files: [%{complete: false}], state: :running}, 1500\n      assert_receive %Status{files: [%{complete: false}], state: :running}, 1500\n      assert_receive %Status{files: [%{complete: true}], state: :running}, 1500\n      assert_receive %Status{files: [%{complete: true}], state: :complete}, 1500\n\n      assert_receive :trigger_run\n      assert_receive :trigger_run\n\n      refute_receive _\n    end\n\n    assert [] = all(State)\n  end\n\n  @tag :capture_log\n  test \"accepts newer teslafi format where vin and id may not be defined\", %{pid: pid} do\n    {:ok, _pid} = start_supervised({Import, directory: \"#{@dir}/07_alternative_variant\"})\n\n    assert %Import.Status{files: [f], message: nil, state: :idle} = Import.get_status()\n\n    assert f == %{\n             complete: false,\n             date: [2023, 11],\n             path: \"#{@dir}/07_alternative_variant/112023.csv\"\n           }\n\n    with_mock Repair, trigger_run: fn -> ok_fn(:trigger_run, pid) end do\n      assert :ok = Import.subscribe()\n      assert :ok = Import.run(\"America/Los_Angeles\")\n\n      assert_receive %Status{files: [%{complete: false}], state: :running}, 3000\n      assert_receive %Status{files: [%{complete: false}], state: :running}, 3000\n      assert_receive %Status{files: [%{complete: true}], state: :running}, 3000\n      assert_receive %Status{files: [%{complete: true}], state: :complete}, 3000\n\n      assert_receive :trigger_run\n      assert_receive :trigger_run\n\n      refute_receive _\n    end\n  end\n\n  @tag :capture_log\n  test \"captures errors of the vehicle process\", %{pid: _pid} do\n    {:ok, _pid} = start_supervised({Import, directory: \"#{@dir}/04_error\"})\n\n    assert %Import.Status{files: [_, _, _], message: nil, state: :idle} = Import.get_status()\n\n    assert :ok = Import.subscribe()\n    assert :ok = Import.run(\"Europe/Berlin\")\n\n    assert_receive %Status{\n                     files: [%{complete: false}, %{complete: false}, %{complete: false}],\n                     state: :running\n                   },\n                   1000\n\n    assert_receive %Status{\n                     files: [%{complete: false}, %{complete: false}, %{complete: false}],\n                     state: :running\n                   },\n                   1000\n\n    assert_receive %Status{\n                     files: [%{complete: true}, %{complete: false}, %{complete: false}],\n                     state: :running\n                   },\n                   1000\n\n    assert_receive %Status{\n                     files: [%{complete: true}, %{complete: true}, %{complete: false}],\n                     state: :running\n                   },\n                   1000\n\n    assert_receive %Status{\n                     files: [%{complete: true}, %{complete: true}, %{complete: false}],\n                     state: :error,\n                     message: msg\n                   },\n                   1000\n\n    assert {{:badmatch,\n             {:error,\n              %Ecto.Changeset{\n                action: :insert,\n                changes: %{date: ~U[2017-12-01 13:36:14.000000Z]},\n                errors: [\n                  latitude: {\"is invalid\", [type: :decimal, validation: :cast]},\n                  longitude: {\"is invalid\", [type: :decimal, validation: :cast]}\n                ],\n                data: %Log.Position{},\n                valid?: false\n              }}}, [_ | _]} = msg\n\n    refute_receive _\n  end\n\n  defp ok_fn(name, pid) do\n    send(pid, name)\n    :ok\n  end\n\n  defp all(struct) do\n    struct\n    |> order_by(:id)\n    |> Repo.all()\n  end\nend\n"
  },
  {
    "path": "test/teslamate/locations/addresses_test.exs",
    "content": "defmodule TeslaMate.LocationsAddressesTest do\n  use TeslaMate.DataCase\n\n  alias TeslaMate.{Locations, Repo}\n  alias TeslaMate.Locations.Address\n\n  describe \"addresses\" do\n    @valid_attrs %{\n      city: \"some city\",\n      county: \"some county\",\n      country: \"some country\",\n      display_name: \"some display_name\",\n      house_number: \"some house_number\",\n      latitude: 20.5,\n      longitude: 120.5,\n      name: \"some name\",\n      neighbourhood: \"some neighbourhood\",\n      osm_id: 42,\n      osm_type: \"way\",\n      postcode: \"some postcode\",\n      raw: %{},\n      road: \"some road\",\n      state: \"some state\",\n      state_district: \"some state_district\"\n    }\n    @update_attrs %{\n      city: \"some updated city\",\n      county: \"some updated county\",\n      country: \"some updated country\",\n      display_name: \"some updated display_name\",\n      house_number: \"some updated house_number\",\n      latitude: -20.7,\n      longitude: -112.7,\n      name: \"some updated name\",\n      neighbourhood: \"some updated neighbourhood\",\n      osm_id: 43,\n      osm_type: \"road\",\n      postcode: \"some updated postcode\",\n      raw: %{},\n      road: \"some updated road\",\n      state: \"some updated state\",\n      state_district: \"some updated state_district\"\n    }\n    @invalid_attrs %{\n      city: nil,\n      county: nil,\n      country: nil,\n      display_name: nil,\n      house_number: nil,\n      latitude: nil,\n      longitude: nil,\n      name: nil,\n      neighbourhood: nil,\n      osm_id: nil,\n      osm_type: nil,\n      postcode: nil,\n      raw: nil,\n      road: nil,\n      state: nil,\n      state_district: nil\n    }\n\n    def address_fixture(attrs \\\\ %{}) do\n      {:ok, address} =\n        attrs\n        |> Enum.into(@valid_attrs)\n        |> Locations.create_address()\n\n      address\n    end\n\n    test \"create_address/1 with valid data creates a address\" do\n      assert {:ok, %Address{} = address} = Locations.create_address(@valid_attrs)\n      assert address.city == \"some city\"\n      assert address.county == \"some county\"\n      assert address.country == \"some country\"\n      assert address.display_name == \"some display_name\"\n      assert address.house_number == \"some house_number\"\n      assert address.latitude == Decimal.new(\"20.500000\")\n      assert address.longitude == Decimal.new(\"120.500000\")\n      assert address.name == \"some name\"\n      assert address.neighbourhood == \"some neighbourhood\"\n      assert address.osm_id == 42\n      assert address.osm_type == \"way\"\n      assert address.postcode == \"some postcode\"\n      assert address.raw == %{}\n      assert address.road == \"some road\"\n      assert address.state == \"some state\"\n      assert address.state_district == \"some state_district\"\n    end\n\n    test \"create_address/1 with invalid data returns error changeset\" do\n      assert {:error, %Ecto.Changeset{} = changeset} = Locations.create_address(@invalid_attrs)\n\n      assert errors_on(changeset) == %{\n               display_name: [\"can't be blank\"],\n               latitude: [\"can't be blank\"],\n               longitude: [\"can't be blank\"],\n               osm_id: [\"can't be blank\"],\n               osm_type: [\"can't be blank\"],\n               raw: [\"can't be blank\"]\n             }\n    end\n\n    test \"update_address/2 with valid data updates the address\" do\n      address = address_fixture()\n      assert {:ok, %Address{} = address} = Locations.update_address(address, @update_attrs)\n      assert address.city == \"some updated city\"\n      assert address.county == \"some updated county\"\n      assert address.country == \"some updated country\"\n      assert address.display_name == \"some updated display_name\"\n      assert address.house_number == \"some updated house_number\"\n      assert address.latitude == Decimal.new(\"-20.700000\")\n      assert address.longitude == Decimal.new(\"-112.700000\")\n      assert address.name == \"some updated name\"\n      assert address.neighbourhood == \"some updated neighbourhood\"\n      assert address.osm_id == 43\n      assert address.osm_type == \"road\"\n      assert address.postcode == \"some updated postcode\"\n      assert address.raw == %{}\n      assert address.road == \"some updated road\"\n      assert address.state == \"some updated state\"\n      assert address.state_district == \"some updated state_district\"\n    end\n\n    test \"update_address/2 with invalid data returns error changeset\" do\n      address = address_fixture()\n      assert {:error, %Ecto.Changeset{}} = Locations.update_address(address, @invalid_attrs)\n    end\n  end\n\n  describe \"find_address/1 \" do\n    test \"looks up and creates a new address\" do\n      assert {:ok, %Address{} = address} =\n               Locations.find_address(%{latitude: 52.019596, longitude: 8.526318})\n\n      assert address.osm_id == 103_619_766\n      assert address.city == \"Bielefeld\"\n\n      assert [maddress] = Repo.all(Address)\n      assert address == maddress\n\n      assert {:ok, %Address{} = ^address} =\n               Locations.find_address(%{latitude: 52.019687, longitude: 8.526041})\n\n      assert [^address] = Repo.all(Address)\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/locations/geocoder_test.exs",
    "content": "defmodule TeslaMate.Locations.GeocoderTest do\n  use ExUnit.Case, async: false\n\n  alias TeslaMate.Locations.Geocoder\n\n  import Mock\n\n  defp geocoder_mock(lat, lon, body) do\n    {Tesla.Adapter.Finch, [],\n     call: fn %Tesla.Env{} = env, _opts ->\n       assert env.url == \"https://nominatim.openstreetmap.org/reverse\"\n\n       assert env.query == [\n                {:format, :jsonv2},\n                {:addressdetails, 1},\n                {:extratags, 1},\n                {:namedetails, 1},\n                {:zoom, 19},\n                {:lat, lat},\n                {:lon, lon}\n              ]\n\n       env = %Tesla.Env{\n         body: body,\n         headers: [\n           {\"date\", \"Sun, 01 Sep 2019 21:03:23 GMT\"},\n           {\"server\", \"Apache/2.4.29 (Ubuntu)\"},\n           {\"access-control-allow-origin\", \"*\"},\n           {\"access-control-allow-methods\", \"OPTIONS,GET\"},\n           {\"strict-transport-security\", \"max-age=31536000; includeSubDomains; preload\"},\n           {\"expect-ct\",\n            \"max-age=0, report-uri=\\\"https://openstreetmap.report-uri.com/r/d/ct/reportOnly\\\"\"},\n           {\"content-type\", \"application/json; charset=UTF-8\"}\n         ],\n         status: 200\n       }\n\n       {:ok, env}\n     end}\n  end\n\n  test \"does a reverse lookup of the given coordinates\" do\n    with_mocks [\n      geocoder_mock(37.889602, 41.129182, %{\n        \"address\" => %{\n          \"cafe\" => \"Kahve Deryası\",\n          \"city\" => \"Batman merkez\",\n          \"country\" => \"Turkey\",\n          \"country_code\" => \"tr\",\n          \"postcode\" => \"72060\",\n          \"residential\" => \"Batman\",\n          \"road\" => \"Cihan Kavşağı\",\n          \"state\" => \"Southeastern Anatolia Region\",\n          \"suburb\" => \"Ziyagökalp Mahallesi\"\n        },\n        \"addresstype\" => \"amenity\",\n        \"boundingbox\" => [\"37.8894442\", \"37.8896442\", \"41.1287167\", \"41.1289167\"],\n        \"category\" => \"amenity\",\n        \"display_name\" =>\n          \"Kahve Deryası, Cihan Kavşağı, Batman, Ziyagökalp Mahallesi, Batman merkez, Batman, Southeastern Anatolia Region, 72060, Turkey\",\n        \"extratags\" => %{},\n        \"importance\" => 0,\n        \"lat\" => \"37.8895442\",\n        \"licence\" => \"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright\",\n        \"lon\" => \"41.1288167\",\n        \"name\" => \"Kahve Deryası\",\n        \"namedetails\" => %{\"name\" => \"Kahve Deryası\"},\n        \"osm_id\" => 5_983_038_298,\n        \"osm_type\" => \"node\",\n        \"place_id\" => 241_575_531,\n        \"place_rank\" => 30,\n        \"type\" => \"cafe\"\n      })\n    ] do\n      assert Geocoder.reverse_lookup(37.889602, 41.129182) ==\n               {:ok,\n                %{\n                  city: \"Batman merkez\",\n                  country: \"Turkey\",\n                  county: nil,\n                  display_name:\n                    \"Kahve Deryası, Cihan Kavşağı, Batman, Ziyagökalp Mahallesi, Batman merkez, Batman, Southeastern Anatolia Region, 72060, Turkey\",\n                  house_number: nil,\n                  latitude: \"37.8895442\",\n                  longitude: \"41.1288167\",\n                  name: \"Kahve Deryası\",\n                  neighbourhood: \"Ziyagökalp Mahallesi\",\n                  osm_id: 5_983_038_298,\n                  osm_type: \"node\",\n                  postcode: \"72060\",\n                  road: \"Cihan Kavşağı\",\n                  state: \"Southeastern Anatolia Region\",\n                  state_district: nil,\n                  raw: %{\n                    \"address\" => %{\n                      \"cafe\" => \"Kahve Deryası\",\n                      \"city\" => \"Batman merkez\",\n                      \"country\" => \"Turkey\",\n                      \"country_code\" => \"tr\",\n                      \"postcode\" => \"72060\",\n                      \"residential\" => \"Batman\",\n                      \"road\" => \"Cihan Kavşağı\",\n                      \"state\" => \"Southeastern Anatolia Region\",\n                      \"suburb\" => \"Ziyagökalp Mahallesi\"\n                    },\n                    \"addresstype\" => \"amenity\",\n                    \"boundingbox\" => [\"37.8894442\", \"37.8896442\", \"41.1287167\", \"41.1289167\"],\n                    \"category\" => \"amenity\",\n                    \"display_name\" =>\n                      \"Kahve Deryası, Cihan Kavşağı, Batman, Ziyagökalp Mahallesi, Batman merkez, Batman, Southeastern Anatolia Region, 72060, Turkey\",\n                    \"extratags\" => %{},\n                    \"importance\" => 0,\n                    \"lat\" => \"37.8895442\",\n                    \"licence\" =>\n                      \"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright\",\n                    \"lon\" => \"41.1288167\",\n                    \"name\" => \"Kahve Deryası\",\n                    \"namedetails\" => %{\"name\" => \"Kahve Deryası\"},\n                    \"osm_id\" => 5_983_038_298,\n                    \"osm_type\" => \"node\",\n                    \"place_id\" => 241_575_531,\n                    \"place_rank\" => 30,\n                    \"type\" => \"cafe\"\n                  }\n                }}\n    end\n  end\n\n  test \"returns a dummy address if the location cannot be geocoded\" do\n    with_mock Tesla.Adapter.Finch,\n      call: fn %Tesla.Env{} = env, _opts ->\n        assert env.url == \"https://nominatim.openstreetmap.org/reverse\"\n\n        assert env.query == [\n                 format: :jsonv2,\n                 addressdetails: 1,\n                 extratags: 1,\n                 namedetails: 1,\n                 zoom: 19,\n                 lat: 37.889602,\n                 lon: 41.129182\n               ]\n\n        {:ok, %Tesla.Env{body: %{\"error\" => \"Unable to geocode\"}, headers: [], status: 200}}\n      end do\n      assert Geocoder.reverse_lookup(37.889602, 41.129182) ==\n               {:ok,\n                %{\n                  display_name: \"Unknown\",\n                  raw: %{\"error\" => \"Unable to geocode\"},\n                  latitude: 0.0,\n                  longitude: 0.0,\n                  osm_id: 0,\n                  osm_type: \"unknown\"\n                }}\n    end\n  end\n\n  test \"handles errors\" do\n    with_mock Tesla.Adapter.Finch,\n      call: fn\n        %Tesla.Env{} = env, _opts ->\n          assert env.url == \"https://nominatim.openstreetmap.org/reverse\"\n\n          assert env.query == [\n                   format: :jsonv2,\n                   addressdetails: 1,\n                   extratags: 1,\n                   namedetails: 1,\n                   zoom: 19,\n                   lat: 37.889602,\n                   lon: 41.129182\n                 ]\n\n          {:ok, %Tesla.Env{body: %{\"error\" => \"failure\"}, headers: [], status: 200}}\n      end do\n      assert Geocoder.reverse_lookup(37.889602, 41.129182) ==\n               {:error, {:geocoding_failed, \"failure\"}}\n    end\n  end\n\n  describe \"address formatting\" do\n    test \"village aliases are ranked higher than municipality aliases\" do\n      with_mocks [\n        geocoder_mock(46.2806871, 6.0134696, %{\n          \"address\" => %{\n            \"country\" => \"France\",\n            \"country_code\" => \"fr\",\n            \"county\" => \"Loire\",\n            \"municipality\" => \"Montbrison\",\n            \"postcode\" => \"42130\",\n            \"road\" => \"Avenue des Bourgs\",\n            \"state\" => \"Auvergne-Rhône-Alpes\",\n            \"village\" => \"Sainte-Agathe-la-Bouteresse\"\n          },\n          \"addresstype\" => \"road\",\n          \"boundingbox\" => [\"45.7342628\", \"45.7370163\", \"4.0417286\", \"4.0555069\"],\n          \"category\" => \"highway\",\n          \"display_name\" =>\n            \"Avenue des Bourgs, Sainte-Agathe-la-Bouteresse, Montbrison, Loire, Auvergne-Rhône-Alpes, Metropolitan France, 42130, France\",\n          \"extratags\" => %{},\n          \"importance\" => 0.09999999999999998,\n          \"lat\" => \"45.734272456977024\",\n          \"licence\" => \"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright\",\n          \"lon\" => \"4.055428979909518\",\n          \"name\" => \"Avenue des Bourgs\",\n          \"namedetails\" => %{\"name\" => \"Avenue des Bourgs\"},\n          \"osm_id\" => 192_323_453,\n          \"osm_type\" => \"way\",\n          \"place_id\" => 136_861_009,\n          \"place_rank\" => 26,\n          \"type\" => \"unclassified\"\n        })\n      ] do\n        assert {:ok,\n                %{\n                  city: \"Sainte-Agathe-la-Bouteresse\",\n                  country: \"France\",\n                  county: \"Loire\",\n                  display_name:\n                    \"Avenue des Bourgs, Sainte-Agathe-la-Bouteresse, Montbrison, Loire, Auvergne-Rhône-Alpes, Metropolitan France, 42130, France\",\n                  house_number: nil,\n                  name: \"Avenue des Bourgs\",\n                  neighbourhood: nil,\n                  postcode: \"42130\",\n                  road: \"Avenue des Bourgs\",\n                  state: \"Auvergne-Rhône-Alpes\",\n                  state_district: nil\n                }} = Geocoder.reverse_lookup(46.2806871, 6.0134696)\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/locations/geofences_test.exs",
    "content": "defmodule TeslaMate.LocationsGeofencesTest do\n  use TeslaMate.DataCase\n\n  alias TeslaMate.{Locations, Log, Repo}\n  alias TeslaMate.Locations.GeoFence\n  alias Log.{Drive, ChargingProcess}\n\n  @valid_attrs %{\n    name: \"foo\",\n    latitude: 52.514521,\n    longitude: 13.350144,\n    radius: 42,\n    billing_type: :per_kwh,\n    cost_per_unit: nil,\n    session_fee: nil\n  }\n  @update_attrs %{\n    name: \"bar\",\n    latitude: 53.514521,\n    longitude: 14.350144,\n    radius: 43,\n    billing_type: :per_minute,\n    cost_per_unit: 0.0079,\n    session_fee: 5.0\n  }\n  @invalid_attrs %{\n    name: nil,\n    latitude: nil,\n    longitude: nil,\n    radius: nil,\n    billing_type: :per_hour,\n    session_fee: -0.01\n  }\n\n  describe \"geofences\" do\n    test \"list_geofences/0 returns all geofences\" do\n      geofence = geofence_fixture()\n\n      geofences = Locations.list_geofences()\n\n      assert geofences == [geofence]\n    end\n\n    test \"get_geofence!/1 returns the geofence with given id\" do\n      geofence = geofence_fixture()\n      assert Locations.get_geofence!(geofence.id) == geofence\n    end\n\n    test \"create_geofence/1 with valid data creates a geofence\" do\n      assert {:ok, %GeoFence{} = geofence} = Locations.create_geofence(@valid_attrs)\n      assert geofence.name == \"foo\"\n      assert geofence.latitude == Decimal.from_float(52.514521)\n      assert geofence.longitude == Decimal.from_float(13.350144)\n      assert geofence.radius == 42\n      assert geofence.billing_type == :per_kwh\n      assert geofence.cost_per_unit == nil\n      assert geofence.session_fee == nil\n    end\n\n    test \"create_geofence/1 with invalid data returns error changeset\" do\n      assert {:error, %Ecto.Changeset{} = changeset} = Locations.create_geofence(@invalid_attrs)\n\n      assert errors_on(changeset) == %{\n               latitude: [\"can't be blank\"],\n               longitude: [\"can't be blank\"],\n               name: [\"can't be blank\"],\n               radius: [\"can't be blank\"],\n               billing_type: [\"is invalid\"],\n               session_fee: [\"must be greater than or equal to 0\"]\n             }\n\n      assert {:error, %Ecto.Changeset{} = changeset} =\n               Locations.create_geofence(%{\n                 latitude: \"wat\",\n                 longitude: \"wat\"\n               })\n\n      assert %{\n               latitude: [\"is invalid\"],\n               longitude: [\"is invalid\"]\n             } = errors_on(changeset)\n    end\n\n    test \"create_geofence/1 with trims the name\" do\n      attrs = put_in(@valid_attrs.name, \"  foo  \\n\")\n      assert {:ok, geofence} = Locations.create_geofence(attrs)\n      assert geofence.name == \"foo\"\n    end\n\n    test \"create_geofence/1 links the geofence with drives and charging processes\" do\n      car = car_fixture()\n\n      %ChargingProcess{id: cproc_id} =\n        create_charging_process(car, %{latitude: 52.51500, longitude: 13.35100})\n\n      %Drive{id: drive_id, start_geofence_id: nil, end_geofence_id: nil} =\n        create_drive(car, %{latitude: 52.51500, longitude: 13.35100}, %{\n          latitude: 51.22,\n          longitude: 13.95\n        })\n\n      assert {:ok, %GeoFence{id: start_geofence_id}} =\n               Locations.create_geofence(%{\n                 name: \"foo\",\n                 latitude: 52.514521,\n                 longitude: 13.350144,\n                 radius: 250\n               })\n\n      assert %Drive{start_geofence_id: ^start_geofence_id, end_geofence_id: nil} =\n               Repo.get(Drive, drive_id)\n\n      assert %ChargingProcess{geofence_id: ^start_geofence_id} =\n               Repo.get(ChargingProcess, cproc_id)\n\n      assert {:ok, %GeoFence{id: end_geofence_id}} =\n               Locations.create_geofence(%{\n                 name: \"bar\",\n                 latitude: 51.2201,\n                 longitude: 13.9501,\n                 radius: 50\n               })\n\n      assert %Drive{start_geofence_id: ^start_geofence_id, end_geofence_id: ^end_geofence_id} =\n               Repo.get(Drive, drive_id)\n    end\n\n    test \"find_geofence/1 return the geo-fence at the given point\" do\n      %GeoFence{id: id} =\n        geofence_fixture(%{latitude: 52.514521, longitude: 13.350144, radius: 250})\n\n      assert %GeoFence{id: ^id} =\n               Locations.find_geofence(%{latitude: 52.514521, longitude: 13.350144})\n\n      assert %GeoFence{id: ^id} =\n               Locations.find_geofence(%{latitude: 52.51599, longitude: 13.35199})\n\n      assert %GeoFence{id: ^id} =\n               Locations.find_geofence(%{latitude: 52.51500, longitude: 13.35100})\n\n      assert nil == Locations.find_geofence(%{latitude: 52.5, longitude: 13.3})\n    end\n\n    test \"update_geofence/2 with valid data updates the geofence\" do\n      geofence = geofence_fixture()\n\n      assert {:ok, %GeoFence{id: _id} = geofence} =\n               Locations.update_geofence(geofence, @update_attrs)\n\n      assert geofence.name == \"bar\"\n      assert geofence.latitude == Decimal.from_float(53.514521)\n      assert geofence.longitude == Decimal.from_float(14.350144)\n      assert geofence.radius == 43\n      assert geofence.billing_type == :per_minute\n      assert geofence.cost_per_unit == Decimal.from_float(0.0079)\n      assert geofence.session_fee == Decimal.new(\"5.00\")\n\n      assert {:ok, %GeoFence{} = geofence} =\n               Locations.update_geofence(geofence, %{cost_per_unit: nil, session_fee: nil})\n\n      assert geofence.cost_per_unit == nil\n      assert geofence.session_fee == nil\n    end\n\n    test \"update_geofence/2 with invalid data returns error changeset\" do\n      geofence = geofence_fixture()\n      assert {:error, %Ecto.Changeset{}} = Locations.update_geofence(geofence, @invalid_attrs)\n      assert geofence == Locations.get_geofence!(geofence.id)\n    end\n\n    test \"update_geofence/1 links the geofence with drives and charging processes\" do\n      car = car_fixture()\n\n      %ChargingProcess{id: cproc_id} =\n        create_charging_process(car, %{latitude: 52.51500, longitude: 13.35100})\n\n      %Drive{id: drive_id, start_geofence_id: nil, end_geofence_id: nil} =\n        create_drive(\n          car,\n          %{latitude: 52.51500, longitude: 13.35100},\n          %{latitude: 51.22, longitude: 13.95}\n        )\n\n      assert {:ok, %GeoFence{id: geofence_id} = geofence} =\n               Locations.create_geofence(%{\n                 name: \"foo\",\n                 latitude: 52.514521,\n                 longitude: 13.350144,\n                 radius: 250\n               })\n\n      assert %Drive{start_geofence_id: ^geofence_id} = Repo.get(Drive, drive_id)\n\n      assert %ChargingProcess{geofence_id: ^geofence_id} = Repo.get(ChargingProcess, cproc_id)\n\n      # Reduce radius\n\n      assert {:ok, %GeoFence{id: ^geofence_id}} =\n               Locations.update_geofence(geofence, %{radius: 10})\n\n      assert %Drive{start_geofence_id: nil} = Repo.get(Drive, drive_id)\n      assert %ChargingProcess{geofence_id: nil} = Repo.get(ChargingProcess, cproc_id)\n\n      # Move geo-fence\n\n      assert {:ok, %GeoFence{id: ^geofence_id}} =\n               Locations.update_geofence(geofence, %{latitude: 52.51500, longitude: 13.35100})\n\n      assert %Drive{start_geofence_id: ^geofence_id} = Repo.get(Drive, drive_id)\n\n      assert %ChargingProcess{geofence_id: ^geofence_id} = Repo.get(ChargingProcess, cproc_id)\n    end\n\n    test \"delete_geofence/1 deletes the geofence\" do\n      geofence = geofence_fixture()\n      assert {:ok, %GeoFence{}} = Locations.delete_geofence(geofence)\n      assert_raise Ecto.NoResultsError, fn -> Locations.get_geofence!(geofence.id) end\n    end\n\n    test \"change_geofence/1 returns a geofence changeset\" do\n      geofence = geofence_fixture()\n      assert %Ecto.Changeset{} = Locations.change_geofence(geofence)\n    end\n  end\n\n  describe \"overlapping geo-fences\" do\n    test \"are handled correctly\" do\n      [\n        %{\n          name: \"huge\",\n          radius: 1658,\n          latitude: 40.725633,\n          longitude: -73.994207\n        },\n        %{\n          name: \"top\",\n          radius: 544,\n          latitude: 40.734413,\n          longitude: -73.983865\n        },\n        %{\n          name: \"middle\",\n          radius: 359,\n          latitude: 40.724982,\n          longitude: -73.999057\n        },\n        %{\n          name: \"bottom\",\n          radius: 614,\n          latitude: 40.713728,\n          longitude: -74.001288\n        }\n      ]\n      |> Enum.map(&geofence_fixture/1)\n\n      assert %GeoFence{name: \"huge\"} =\n               Locations.find_geofence(%{latitude: 40.725307, longitude: -73.995838})\n\n      assert %GeoFence{name: \"huge\"} =\n               Locations.find_geofence(%{latitude: 40.717534, longitude: -73.978589})\n\n      assert %GeoFence{name: \"top\"} =\n               Locations.find_geofence(%{latitude: 40.737047, longitude: -73.980817})\n\n      assert %GeoFence{name: \"top\"} =\n               Locations.find_geofence(%{latitude: 40.731324, longitude: -73.988155})\n\n      assert %GeoFence{name: \"middle\"} =\n               Locations.find_geofence(%{latitude: 40.723551, longitude: -74.000687})\n\n      assert %GeoFence{name: \"middle\"} =\n               Locations.find_geofence(%{latitude: 40.722608, longitude: -73.997211})\n\n      assert %GeoFence{name: \"bottom\"} =\n               Locations.find_geofence(%{latitude: 40.709532, longitude: -74.00502})\n\n      assert %GeoFence{name: \"bottom\"} =\n               Locations.find_geofence(%{latitude: 40.715289, longitude: -74.007682})\n\n      assert nil == Locations.find_geofence(%{latitude: 40.714737, longitude: -74.009142})\n      assert nil == Locations.find_geofence(%{latitude: 40.715062, longitude: -73.976703})\n    end\n\n    test \"deletes overlapping geo-fences\" do\n      car = car_fixture()\n\n      position = %{latitude: 52.513619, longitude: 13.335633}\n      charger_0 = %{latitude: 52.512955, longitude: 13.329694}\n      charger_1 = %{latitude: 52.520344, longitude: 13.345496}\n\n      assert %ChargingProcess{id: c0_id, geofence_id: nil} =\n               create_charging_process(car, charger_1)\n\n      # create initial geo-fence\n\n      {:ok, _tiergarten = %GeoFence{id: t_id}} =\n        Locations.create_geofence(%{\n          name: \"tiergarten\",\n          latitude: 52.514549,\n          longitude: 13.350019,\n          radius: 1658\n        })\n\n      assert %ChargingProcess{geofence_id: ^t_id} = Repo.get!(ChargingProcess, c0_id)\n\n      # create drive & charge\n\n      assert %ChargingProcess{id: c1_id, geofence_id: ^t_id} =\n               create_charging_process(car, charger_0)\n\n      assert %Drive{id: d0_id, start_geofence_id: ^t_id, end_geofence_id: ^t_id} =\n               create_drive(car, position, position)\n\n      # create new geo-fence that overlaps with the previous one\n\n      {:ok, straße = %GeoFence{id: s_id}} =\n        Locations.create_geofence(%{\n          name: \"Straße des 17. Juni\",\n          latitude: 52.513361,\n          longitude: 13.332489,\n          radius: 250\n        })\n\n      assert %ChargingProcess{geofence_id: ^t_id} = Repo.get!(ChargingProcess, c0_id)\n      assert %ChargingProcess{geofence_id: ^s_id} = Repo.get!(ChargingProcess, c1_id)\n      assert %Drive{start_geofence_id: ^s_id, end_geofence_id: ^s_id} = Repo.get!(Drive, d0_id)\n\n      # Delete geo-fence\n\n      assert {:ok, %GeoFence{}} = Locations.delete_geofence(straße)\n      assert %ChargingProcess{geofence_id: ^t_id} = Repo.get!(ChargingProcess, c0_id)\n      assert %ChargingProcess{geofence_id: ^t_id} = Repo.get!(ChargingProcess, c1_id)\n      assert %Drive{start_geofence_id: ^t_id, end_geofence_id: ^t_id} = Repo.get!(Drive, d0_id)\n    end\n\n    test \"updates overlapping geo-fences\" do\n      car = car_fixture()\n\n      position = %{latitude: 52.513619, longitude: 13.335633}\n      charger_0 = %{latitude: 52.512955, longitude: 13.329694}\n      charger_1 = %{latitude: 52.520344, longitude: 13.345496}\n\n      # create drive & charge\n\n      assert %ChargingProcess{id: c0_id, geofence_id: nil} =\n               create_charging_process(car, charger_1)\n\n      assert %ChargingProcess{id: c1_id, geofence_id: nil} =\n               create_charging_process(car, charger_0)\n\n      assert %Drive{id: d0_id, start_geofence_id: nil, end_geofence_id: nil} =\n               create_drive(car, position, position)\n\n      # create geo-fences\n\n      {:ok, tiergarten = %GeoFence{id: t_id}} =\n        Locations.create_geofence(%{\n          name: \"tiergarten\",\n          latitude: 52.514549,\n          longitude: 13.350019,\n          radius: 721\n        })\n\n      assert %ChargingProcess{geofence_id: ^t_id} = Repo.get!(ChargingProcess, c0_id)\n      assert %ChargingProcess{geofence_id: nil} = Repo.get!(ChargingProcess, c1_id)\n      assert %Drive{start_geofence_id: nil, end_geofence_id: nil} = Repo.get!(Drive, d0_id)\n\n      {:ok, straße = %GeoFence{id: s_id}} =\n        Locations.create_geofence(%{\n          name: \"Straße des 17. Juni\",\n          latitude: 52.513361,\n          longitude: 13.332489,\n          radius: 250\n        })\n\n      assert %ChargingProcess{geofence_id: ^t_id} = Repo.get!(ChargingProcess, c0_id)\n      assert %ChargingProcess{geofence_id: ^s_id} = Repo.get!(ChargingProcess, c1_id)\n      assert %Drive{start_geofence_id: ^s_id, end_geofence_id: ^s_id} = Repo.get!(Drive, d0_id)\n\n      # update geo-fence so that it overlaps with the other one\n\n      assert {:ok, tiergarten} = Locations.update_geofence(tiergarten, %{radius: 1658})\n\n      assert %ChargingProcess{geofence_id: ^t_id} = Repo.get!(ChargingProcess, c0_id)\n      assert %ChargingProcess{geofence_id: ^s_id} = Repo.get!(ChargingProcess, c1_id)\n      assert %Drive{start_geofence_id: ^s_id, end_geofence_id: ^s_id} = Repo.get!(Drive, d0_id)\n\n      # decrease radius of geo-fences\n\n      assert {:ok, _straße} = Locations.update_geofence(straße, %{radius: 20})\n      assert %ChargingProcess{geofence_id: ^t_id} = Repo.get!(ChargingProcess, c0_id)\n      assert %ChargingProcess{geofence_id: ^t_id} = Repo.get!(ChargingProcess, c1_id)\n      assert %Drive{start_geofence_id: ^t_id, end_geofence_id: ^t_id} = Repo.get!(Drive, d0_id)\n\n      assert {:ok, _tiergarten} = Locations.update_geofence(tiergarten, %{radius: 20})\n      assert %ChargingProcess{geofence_id: nil} = Repo.get!(ChargingProcess, c0_id)\n      assert %ChargingProcess{geofence_id: nil} = Repo.get!(ChargingProcess, c1_id)\n      assert %Drive{start_geofence_id: nil, end_geofence_id: nil} = Repo.get!(Drive, d0_id)\n    end\n\n    test \"creates overlapping geo-fences\" do\n      car = car_fixture()\n\n      position = %{latitude: 52.513619, longitude: 13.335633}\n      charger = %{latitude: 52.512955, longitude: 13.329694}\n\n      assert %ChargingProcess{id: cproc_id, geofence_id: nil} =\n               create_charging_process(car, charger)\n\n      {:ok, %GeoFence{}} =\n        Locations.create_geofence(%{\n          name: \"tiergarten\",\n          latitude: 52.514549,\n          longitude: 13.350019,\n          radius: 1658\n        })\n\n      {:ok, %GeoFence{id: id}} =\n        Locations.create_geofence(%{\n          name: \"Straße des 17. Juni\",\n          latitude: 52.513361,\n          longitude: 13.332489,\n          radius: 250\n        })\n\n      assert %ChargingProcess{geofence_id: ^id} = Repo.get!(ChargingProcess, cproc_id)\n\n      assert %Drive{id: _drive_id, start_geofence_id: ^id, end_geofence_id: ^id} =\n               create_drive(car, position, position)\n    end\n  end\n\n  defp geofence_fixture(attrs \\\\ %{}) do\n    {:ok, geofence} =\n      attrs\n      |> Enum.into(@valid_attrs)\n      |> Locations.create_geofence()\n\n    geofence\n  end\n\n  defp car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(%{efficiency: 0.153, eid: 11, model: \"M3\", vid: 111, vin: \"32532\"})\n      |> Log.create_car()\n\n    car\n  end\n\n  defp create_drive(\n         car,\n         %{latitude: start_lat, longitude: start_lng},\n         %{latitude: end_lat, longitude: end_lng}\n       ) do\n    positions = [\n      %{\n        date: \"2019-04-06 10:19:02\",\n        latitude: start_lat,\n        longitude: start_lng,\n        speed: 23,\n        power: 15,\n        odometer: 284.85156,\n        ideal_battery_range_km: 338.8,\n        rated_battery_range_km: 308.8,\n        battery_level: 68,\n        outside_temp: 19.2,\n        inside_temp: 21.0\n      },\n      %{\n        date: \"2019-04-06 10:23:25\",\n        latitude: end_lat,\n        longitude: end_lng,\n        speed: 39,\n        power: 36,\n        odometer: 288.045561,\n        ideal_battery_range_km: 334.8,\n        rated_battery_range_km: 304.8,\n        battery_level: 68,\n        outside_temp: 18.0,\n        inside_temp: 21.0\n      }\n    ]\n\n    {:ok, drive} = Log.start_drive(car)\n\n    for p <- positions do\n      {:ok, _} = Log.insert_position(drive, p)\n    end\n\n    {:ok, drive} = Log.close_drive(drive)\n\n    drive\n  end\n\n  defp create_charging_process(car, %{latitude: lat, longitude: lng}) do\n    {:ok, charging_process_id} =\n      Log.start_charging_process(car, %{\n        date: DateTime.utc_now(),\n        latitude: lat,\n        longitude: lng\n      })\n\n    charges = [\n      %{\n        date: \"2019-04-05 16:01:27\",\n        battery_level: 50,\n        charge_energy_added: 0.41,\n        charger_actual_current: 5,\n        charger_phases: 3,\n        charger_pilot_current: 16,\n        charger_power: 4,\n        charger_voltage: 234,\n        ideal_battery_range_km: 266.6,\n        rated_battery_range_km: 206.6,\n        outside_temp: 16\n      },\n      %{\n        date: \"2019-04-05 16:05:40\",\n        battery_level: 54,\n        charge_energy_added: 0.72,\n        charger_actual_current: 5,\n        charger_phases: 3,\n        charger_pilot_current: 16,\n        charger_power: 4,\n        charger_voltage: 234,\n        ideal_battery_range_km: 268.6,\n        rated_battery_range_km: 208.6,\n        outside_temp: 14.5\n      }\n    ]\n\n    for c <- charges do\n      {:ok, %Log.Charge{}} = Log.insert_charge(charging_process_id, c)\n    end\n\n    {:ok, %ChargingProcess{} = cproc} = Log.complete_charging_process(charging_process_id)\n\n    cproc\n  end\nend\n"
  },
  {
    "path": "test/teslamate/log/log_car_test.exs",
    "content": "defmodule TeslaMate.LogCarTest do\n  use TeslaMate.DataCase, async: true\n\n  alias TeslaMate.Log.Car\n  alias TeslaMate.{Log, Repo}\n\n  @valid_attrs %{\n    efficiency: 0.153,\n    eid: 42,\n    model: \"S\",\n    vid: 42,\n    name: \"foo\",\n    trim_badging: \"P100D\",\n    vin: \"12345F\",\n    exterior_color: \"White\",\n    spoiler_type: \"None\",\n    wheel_type: \"AeroTurbine19\",\n    display_priority: 1\n  }\n  @update_attrs %{\n    efficiency: 0.190,\n    model: \"S\",\n    eid: 43,\n    vid: 43,\n    name: \"bar\",\n    trim_badging: \"100D\",\n    vin: \"6789R\",\n    exterior_color: \"MetallicBlack\",\n    spoiler_type: \"Passive\",\n    wheel_type: \"AeroTurbine20\",\n    display_priority: 2\n  }\n  @invalid_attrs %{\n    efficiency: nil,\n    eid: nil,\n    model: nil,\n    vid: nil,\n    name: 1,\n    trim_badging: 2,\n    vin: 3,\n    exterior_color: 1,\n    spoiler_type: 2,\n    wheel_type: 3\n  }\n\n  def car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(@valid_attrs)\n      |> Log.create_car()\n\n    car\n  end\n\n  test \"list_cars/0 returns all cars\" do\n    car = car_fixture()\n    assert Log.list_cars() |> Enum.map(&Repo.preload(&1, :settings)) == [car]\n  end\n\n  test \"get_car!/1 returns the car with given id\" do\n    car = car_fixture()\n    assert Log.get_car!(car.id) |> Repo.preload(:settings) == car\n  end\n\n  test \"create_or_update_car/1 with valid data creates a car\" do\n    alias TeslaMate.Settings.CarSettings\n\n    assert {:ok, %Car{} = car} =\n             %Car{eid: @valid_attrs.eid, vid: @valid_attrs.vid, settings: %CarSettings{}}\n             |> Car.changeset(@valid_attrs)\n             |> Log.create_or_update_car()\n\n    assert car.efficiency == 0.153\n    assert car.eid == 42\n    assert car.model == \"S\"\n    assert car.vid == 42\n    assert car.name == \"foo\"\n    assert car.trim_badging == \"P100D\"\n    assert car.vin == \"12345F\"\n    assert car.exterior_color == \"White\"\n    assert car.spoiler_type == \"None\"\n    assert car.wheel_type == \"AeroTurbine19\"\n    assert car.display_priority == 1\n  end\n\n  test \"create_or_update_car/1 with invalid data returns error changeset\" do\n    assert {:error, %Ecto.Changeset{} = changeset} =\n             Car.changeset(%Car{}, @invalid_attrs) |> Log.create_or_update_car()\n\n    assert %{\n             eid: [\"can't be blank\"],\n             name: [\"is invalid\"],\n             trim_badging: [\"is invalid\"],\n             exterior_color: [\"is invalid\"],\n             spoiler_type: [\"is invalid\"],\n             wheel_type: [\"is invalid\"],\n             vid: [\"can't be blank\"],\n             vin: [\"is invalid\"]\n           } == errors_on(changeset)\n  end\n\n  test \"create_or_update_car/2 with valid data updates the car\" do\n    car = car_fixture()\n\n    assert {:ok, %Car{} = car} = Car.changeset(car, @update_attrs) |> Log.create_or_update_car()\n\n    assert car.efficiency == 0.190\n    assert car.model == \"S\"\n    assert car.eid == 43\n    assert car.vid == 43\n    assert car.name == \"bar\"\n    assert car.trim_badging == \"100D\"\n    assert car.vin == \"6789R\"\n    assert car.exterior_color == \"MetallicBlack\"\n    assert car.spoiler_type == \"Passive\"\n    assert car.wheel_type == \"AeroTurbine20\"\n    assert car.display_priority == 2\n  end\n\n  test \"create_or_update_car/2 with invalid data returns error changeset\" do\n    car = car_fixture()\n\n    assert {:error, %Ecto.Changeset{}} =\n             Car.changeset(car, @invalid_attrs) |> Log.create_or_update_car()\n\n    assert car == Log.get_car!(car.id) |> Repo.preload(:settings)\n  end\nend\n"
  },
  {
    "path": "test/teslamate/log/log_charging_test.exs",
    "content": "defmodule TeslaMate.LogChargingTest do\n  use TeslaMate.DataCase, async: true\n\n  alias TeslaMate.Log.{Car, ChargingProcess, Charge, Position}\n  alias TeslaMate.{Log, Repo, Locations}\n\n  @valid_attrs %{\n    date: DateTime.utc_now(),\n    charger_power: 50,\n    charger_phases: 3,\n    charge_energy_added: 0.160,\n    ideal_battery_range_km: 250\n  }\n\n  @valid_pos_attrs %{date: DateTime.utc_now(), latitude: 0.0, longitude: 0.0}\n\n  def car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(%{eid: 42, model: \"M3\", vid: 42, vin: \"xxxxx\"})\n      |> Log.create_car()\n\n    car\n  end\n\n  defp log_charging_process(charges, opts \\\\ []) do\n    car =\n      Keyword.get_lazy(opts, :car, fn ->\n        id = :rand.uniform(1024)\n        car_fixture(%{eid: id, vid: id, vin: \"vin_#{id}\"})\n      end)\n\n    attrs = Keyword.get(opts, :attrs, @valid_pos_attrs)\n\n    {:ok, cproc} = Log.start_charging_process(car, attrs)\n\n    for {date, added, power, range, phases, current, voltage, fc_type} <- charges do\n      {:ok, %Charge{}} =\n        Log.insert_charge(cproc, %{\n          date: date,\n          charge_energy_added: added,\n          charger_power: power,\n          ideal_battery_range_km: range,\n          charger_phases: phases,\n          charger_actual_current: current,\n          charger_voltage: voltage,\n          fast_charger_type: fc_type\n        })\n    end\n\n    {:ok, %ChargingProcess{}} = Log.complete_charging_process(cproc)\n  end\n\n  describe \"start_charging_process/2\" do\n    test \"with valid data creates a position\" do\n      car = car_fixture()\n\n      assert {:ok, cproc} = Log.start_charging_process(car, @valid_pos_attrs)\n      assert cproc.car_id == car.id\n      assert cproc.position.latitude == Decimal.new(\"0.000000\")\n      assert cproc.position.longitude == Decimal.new(\"0.000000\")\n      assert cproc.position.date == @valid_pos_attrs.date\n      assert %DateTime{} = cproc.start_date\n      assert cproc.address.city == \"Bielefeld\"\n      assert cproc.address.osm_id == 103_619_766\n    end\n\n    test \"with invalid data returns error changeset\" do\n      assert {:error, %Ecto.Changeset{} = changeset} =\n               Log.start_charging_process(%Car{}, %{latitude: 0, longitude: 0})\n\n      assert errors_on(changeset) == %{\n               car_id: [\"can't be blank\"],\n               position: %{\n                 car_id: [\"can't be blank\"],\n                 date: [\"can't be blank\"]\n               }\n             }\n    end\n\n    @tag :capture_log\n    test \"leaves address blank if resolving failed\" do\n      car = car_fixture()\n\n      assert {:ok, cproc} =\n               Log.start_charging_process(car, %{\n                 date: DateTime.utc_now(),\n                 latitude: 99.9,\n                 longitude: 99.9\n               })\n\n      assert cproc.car_id == car.id\n      assert cproc.position.latitude == Decimal.new(\"99.900000\")\n      assert cproc.position.longitude == Decimal.new(\"99.900000\")\n      assert cproc.address_id == nil\n      assert cproc.address == nil\n    end\n\n    test \"saves dummy address if geocoding failed\" do\n      car = car_fixture()\n\n      assert {:ok, cproc} =\n               Log.start_charging_process(car, %{\n                 date: DateTime.utc_now(),\n                 latitude: -99.9,\n                 longitude: -99.9\n               })\n\n      assert cproc.car_id == car.id\n      assert cproc.position.latitude == Decimal.new(\"-99.900000\")\n      assert cproc.position.longitude == Decimal.new(\"-99.900000\")\n      assert not is_nil(cproc.address_id)\n\n      assert %Locations.Address{\n               osm_id: 0,\n               osm_type: \"unknown\",\n               display_name: \"Unknown\",\n               latitude: latitude,\n               longitude: longitude,\n               raw: %{\"error\" => \"Unable to geocode\"}\n             } = cproc.address\n\n      assert latitude == Decimal.new(\"0.000000\")\n      assert longitude == Decimal.new(\"0.000000\")\n    end\n  end\n\n  describe \"insert_charge/2\" do\n    test \"with valid data creates a position\" do\n      car = car_fixture()\n\n      assert {:ok, cproc} = Log.start_charging_process(car, @valid_pos_attrs)\n      assert {:ok, %Charge{} = charge} = Log.insert_charge(cproc, @valid_attrs)\n\n      assert charge.charging_process_id == cproc.id\n      assert charge.date == @valid_attrs.date\n      assert charge.charger_phases == @valid_attrs.charger_phases\n      assert charge.charger_power == @valid_attrs.charger_power\n\n      assert charge.charge_energy_added ==\n               @valid_attrs.charge_energy_added |> Decimal.from_float()\n\n      assert charge.ideal_battery_range_km == Decimal.new(\"250.00\")\n    end\n\n    test \"with invalid data returns error changeset\" do\n      car = car_fixture()\n\n      assert {:ok, cproc} = Log.start_charging_process(car, @valid_pos_attrs)\n\n      assert {:error, %Ecto.Changeset{} = changeset} =\n               Log.insert_charge(cproc, %{charger_phases: 0})\n\n      assert errors_on(changeset) == %{\n               charger_phases: [\"must be greater than 0\"],\n               charge_energy_added: [\"can't be blank\"],\n               charger_power: [\"can't be blank\"],\n               date: [\"can't be blank\"],\n               ideal_battery_range_km: [\"can't be blank\"]\n             }\n    end\n  end\n\n  describe \"complete_charging_process/1\" do\n    test \"aggregates charging data\" do\n      car = car_fixture()\n      assert {:ok, cproc} = Log.start_charging_process(car, @valid_pos_attrs)\n\n      charges = [\n        %{\n          date: \"2019-04-05 16:01:27\",\n          battery_level: 50,\n          charge_energy_added: 0.41,\n          charger_actual_current: 5,\n          charger_phases: 3,\n          charger_pilot_current: 16,\n          charger_power: 4,\n          charger_voltage: 234,\n          ideal_battery_range_km: 266.6,\n          rated_battery_range_km: 206.6,\n          outside_temp: 16\n        },\n        %{\n          date: \"2019-04-05 16:02:28\",\n          battery_level: 51,\n          charge_energy_added: 0.51,\n          charger_actual_current: 5,\n          charger_phases: 3,\n          charger_pilot_current: 16,\n          charger_power: 4,\n          charger_voltage: 234,\n          ideal_battery_range_km: 267.3,\n          rated_battery_range_km: 207.6,\n          outside_temp: 15.5\n        },\n        %{\n          date: \"2019-04-05 16:04:34\",\n          battery_level: 52,\n          charge_energy_added: 0.72,\n          charger_actual_current: 5,\n          charger_phases: 3,\n          charger_pilot_current: 16,\n          charger_power: 4,\n          charger_voltage: 234,\n          ideal_battery_range_km: 268.6,\n          rated_battery_range_km: 208.6,\n          outside_temp: 15\n        },\n        %{\n          date: \"2019-04-05 16:05:40\",\n          battery_level: 54,\n          charge_energy_added: 0.72,\n          charger_actual_current: 5,\n          charger_phases: 3,\n          charger_pilot_current: 16,\n          charger_power: 4,\n          charger_voltage: 234,\n          ideal_battery_range_km: 268.6,\n          rated_battery_range_km: 208.6,\n          outside_temp: 14.5\n        }\n      ]\n\n      for c <- charges do\n        assert {:ok, %Charge{} = _charge} = Log.insert_charge(cproc, c)\n      end\n\n      assert {:ok, %ChargingProcess{} = cproc} = Log.complete_charging_process(cproc)\n\n      assert %DateTime{} = cproc.start_date\n      assert %DateTime{} = cproc.end_date\n      assert cproc.charge_energy_added == Decimal.from_float(0.31)\n      assert cproc.duration_min == 4\n      assert cproc.end_battery_level == 54\n      assert cproc.start_battery_level == 50\n      assert cproc.start_ideal_range_km == Decimal.new(\"266.60\")\n      assert cproc.end_ideal_range_km == Decimal.new(\"268.60\")\n      assert cproc.start_rated_range_km == Decimal.new(\"206.60\")\n      assert cproc.end_rated_range_km == Decimal.new(\"208.60\")\n      assert cproc.outside_temp_avg == Decimal.from_float(15.3)\n\n      Process.sleep(100)\n\n      # calling it a 2nd time won't overwrite the end_date\n      assert {:ok, ^cproc} = Log.complete_charging_process(cproc)\n    end\n\n    test \"closes charging process with zero charges \" do\n      car = car_fixture()\n\n      assert {:ok, cproc} = Log.start_charging_process(car, @valid_pos_attrs)\n\n      assert {:ok, %ChargingProcess{} = cproc} = Log.complete_charging_process(cproc)\n      assert %DateTime{} = cproc.start_date\n      assert %DateTime{} = cproc.end_date\n    end\n\n    test \"set nil if charge_energy_added is negative\" do\n      charges = charges_fixture(:negative_energy_added)\n\n      assert {:ok, cproc} = log_charging_process(charges)\n      assert cproc.charge_energy_added == nil\n      assert cproc.charge_energy_used == Decimal.from_float(12.58)\n      assert cproc.duration_min == 48\n    end\n\n    test \"uses max instead of last charge_energy_added if necessary\" do\n      charges = [\n        {\"2020-01-22 10:07:44.843\", 0, 0, 230.4, 3, 16, 241, \"<invalid>\"},\n        {\"2020-01-22 10:08:12.109\", 0, 11, 230.4, 3, 16, 239, \"<invalid>\"},\n        {\"2020-01-22 10:09:36.568\", 0.21, 11, 231.4, 3, 16, 239, \"<invalid>\"},\n        {\"2020-01-22 10:11:01.313\", 0.53, 11, 232.4, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:12:25.325\", 0.74, 11, 233.4, 3, 16, 239, \"<invalid>\"},\n        {\"2020-01-22 10:13:51.237\", 0.95, 11, 234.9, 3, 16, 239, \"<invalid>\"},\n        {\"2020-01-22 10:15:16.959\", 1.26, 11, 235.8, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:16:40.722\", 1.47, 11, 237.3, 3, 16, 239, \"<invalid>\"},\n        {\"2020-01-22 10:18:05.355\", 1.69, 11, 238.3, 3, 16, 237, \"<invalid>\"},\n        {\"2020-01-22 10:19:30.293\", 1.9, 11, 239.3, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:20:53.012\", 2.21, 11, 240.3, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:22:15.884\", 2.42, 11, 241.8, 3, 16, 237, \"<invalid>\"},\n        {\"2020-01-22 10:23:39.886\", 2.63, 11, 242.8, 3, 16, 237, \"<invalid>\"},\n        {\"2020-01-22 10:25:03.659\", 2.95, 11, 243.8, 3, 16, 237, \"<invalid>\"},\n        {\"2020-01-22 10:26:26.947\", 3.16, 10, 244.7, 3, 14, 238, \"<invalid>\"},\n        {\"2020-01-22 10:27:50.703\", 3.37, 11, 245.7, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:29:15.39\", 3.58, 11, 247.2, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:30:50.514\", 3.9, 11, 248.2, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:32:15.901\", 4.11, 11, 249.2, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:33:40.844\", 4.42, 11, 250.7, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:35:04.851\", 4.63, 11, 251.7, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:36:29.838\", 4.84, 11, 253.2, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:38:25.125\", 5.16, 10, 254.6, 3, 14, 239, \"<invalid>\"},\n        {\"2020-01-22 10:39:48.877\", 5.37, 11, 255.6, 3, 16, 237, \"<invalid>\"},\n        {\"2020-01-22 10:41:35.732\", 5.69, 11, 256.6, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:43:00.226\", 5.9, 11, 257.6, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:44:23.892\", 6.21, 11, 259.1, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:45:50.474\", 6.42, 11, 260.1, 3, 16, 239, \"<invalid>\"},\n        {\"2020-01-22 10:47:16.234\", 6.64, 11, 261.6, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:48:45.226\", 6.95, 11, 262.5, 3, 16, 237, \"<invalid>\"},\n        {\"2020-01-22 10:50:10.469\", 7.16, 11, 263.5, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:51:34.798\", 7.37, 11, 264.5, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:52:58.478\", 7.69, 11, 266, 3, 16, 239, \"<invalid>\"},\n        {\"2020-01-22 10:54:32.061\", 7.9, 10, 267, 3, 14, 239, \"<invalid>\"},\n        {\"2020-01-22 10:55:56.615\", 8.11, 11, 268, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:57:23.599\", 8.43, 11, 269.5, 3, 16, 238, \"<invalid>\"},\n        {\"2020-01-22 10:58:47.438\", 8.64, 11, 270.5, 3, 16, 239, \"<invalid>\"},\n        {\"2020-01-22 11:00:12.74\", 8.85, 11, 271.9, 3, 16, 239, \"<invalid>\"},\n        {\"2020-01-22 11:01:40.436\", 9.16, 11, 272.9, 3, 16, 235, \"<invalid>\"},\n        {\"2020-01-22 11:03:04.127\", 9.37, 11, 273.9, 3, 16, 235, \"<invalid>\"},\n        {\"2020-01-22 11:04:28.536\", 9.58, 11, 274.9, 3, 16, 236, \"<invalid>\"},\n        {\"2020-01-22 11:05:52.939\", 9.79, 11, 275.9, 3, 16, 234, \"<invalid>\"},\n        {\"2020-01-22 11:07:16.42\", 10.01, 11, 277.4, 3, 16, 235, \"<invalid>\"},\n        {\"2020-01-22 11:08:40.085\", 10.32, 11, 278.4, 3, 16, 234, \"<invalid>\"},\n        {\"2020-01-22 11:10:04.71\", 10.53, 11, 279.4, 3, 16, 236, \"<invalid>\"},\n        {\"2020-01-22 11:11:59.287\", 10.85, 11, 280.8, 3, 16, 236, \"<invalid>\"},\n        {\"2020-01-22 11:13:47.923\", 11.16, 11, 282.3, 3, 16, 234, \"<invalid>\"},\n        {\"2020-01-22 11:15:11.586\", 11.37, 11, 283.3, 3, 16, 235, \"<invalid>\"},\n        {\"2020-01-22 11:16:36.854\", 11.59, 11, 284.8, 3, 16, 235, \"<invalid>\"},\n        {\"2020-01-22 11:18:01.857\", 11.9, 11, 285.3, 3, 16, 234, \"<invalid>\"},\n        {\"2020-01-22 11:19:26.632\", 12.11, 11, 286.3, 3, 16, 235, \"<invalid>\"},\n        {\"2020-01-22 11:20:50.537\", 12.32, 11, 287.8, 3, 16, 235, \"<invalid>\"},\n        {\"2020-01-22 11:23:00.723\", 12.64, 11, 289.3, 3, 16, 234, \"<invalid>\"},\n        {\"2020-01-22 11:24:25.183\", 12.95, 11, 290.7, 3, 16, 234, \"<invalid>\"},\n        {\"2020-01-22 11:25:49.861\", 13.16, 11, 291.7, 3, 16, 236, \"<invalid>\"},\n        {\"2020-01-22 11:27:17.549\", 13.38, 11, 292.7, 3, 16, 236, \"<invalid>\"},\n        {\"2020-01-22 11:28:41.387\", 13.59, 11, 293.7, 3, 16, 237, \"<invalid>\"},\n        {\"2020-01-22 11:30:08.548\", 13.9, 11, 294.7, 3, 16, 237, \"<invalid>\"},\n        {\"2020-01-22 11:31:40.833\", 14.11, 11, 296.2, 3, 16, 236, \"<invalid>\"},\n        {\"2020-01-22 11:33:06.332\", 14.43, 11, 297.2, 3, 16, 236, \"<invalid>\"},\n        {\"2020-01-22 11:34:46.017\", 14.64, 11, 298.6, 3, 16, 235, \"<invalid>\"},\n        {\"2020-01-22 11:36:26.489\", 14.96, 11, 300.1, 3, 16, 235, \"<invalid>\"},\n        {\"2020-01-22 11:37:08.28\", 15.06, 11, 300.6, 3, 16, 235, \"<invalid>\"},\n        {\"2020-01-22 11:38:32.559\", 15.27, 10, 301.6, 3, 14, 237, \"<invalid>\"},\n        {\"2020-01-22 11:39:57.376\", 15.59, 11, 302.6, 3, 16, 236, \"<invalid>\"},\n        {\"2020-01-22 11:41:23.626\", 15.8, 11, 303.6, 3, 16, 236, \"<invalid>\"},\n        {\"2020-01-22 11:42:48.114\", 16.01, 11, 305.1, 3, 16, 236, \"<invalid>\"},\n        {\"2020-01-22 11:44:13.379\", 16.22, 11, 306.1, 3, 16, 234, \"<invalid>\"},\n        {\"2020-01-22 11:45:37.073\", 16.54, 11, 307.1, 3, 16, 235, \"<invalid>\"},\n        {\"2020-01-22 11:46:40.012\", 16.64, 11, 308, 3, 16, 236, \"<invalid>\"},\n        {\"2020-01-22 11:47:01.369\", 0, 0, 308, nil, 16, 1, \"<invalid>\"}\n      ]\n\n      assert {:ok, cproc} = log_charging_process(charges)\n      assert cproc.charge_energy_added == Decimal.from_float(16.64)\n      assert cproc.charge_energy_used == Decimal.from_float(18.59)\n      assert cproc.duration_min == 99\n    end\n  end\n\n  describe \"geo-fencing\" do\n    alias TeslaMate.Locations.GeoFence\n    alias TeslaMate.Locations\n\n    def geofence_fixture(attrs \\\\ %{}) do\n      {:ok, geofence} =\n        attrs\n        |> Enum.into(%{name: \"foo\", latitude: 52.514521, longitude: 13.350144, radius: 42})\n        |> Locations.create_geofence()\n\n      geofence\n    end\n\n    test \"links to the nearby geo-fence\" do\n      car = car_fixture()\n\n      charges = [\n        %{\n          date: \"2019-04-05 16:01:27\",\n          battery_level: 50,\n          charge_energy_added: 0.41,\n          charger_actual_current: 5,\n          charger_phases: 3,\n          charger_pilot_current: 16,\n          charger_power: 4,\n          charger_voltage: 234,\n          ideal_battery_range_km: 266.6,\n          rated_battery_range_km: 206.6,\n          outside_temp: 16\n        },\n        %{\n          date: \"2019-04-05 16:05:40\",\n          battery_level: 54,\n          charge_energy_added: 0.72,\n          charger_actual_current: 5,\n          charger_phases: 3,\n          charger_pilot_current: 16,\n          charger_power: 4,\n          charger_voltage: 234,\n          ideal_battery_range_km: 268.6,\n          rated_battery_range_km: 208.6,\n          outside_temp: 14.5\n        }\n      ]\n\n      ###\n\n      assert %GeoFence{id: id} =\n               geofence_fixture(%{latitude: 50.1121, longitude: 11.597, radius: 50})\n\n      {:ok, cproc} =\n        Log.start_charging_process(car, %{\n          date: DateTime.utc_now(),\n          latitude: 50.112198,\n          longitude: 11.597669\n        })\n\n      for c <- charges, do: {:ok, %Charge{}} = Log.insert_charge(cproc, c)\n\n      assert {:ok, %ChargingProcess{geofence_id: ^id}} = Log.complete_charging_process(cproc)\n    end\n\n    test \"calculates the charge costs based on the price per kwh\" do\n      car = car_fixture()\n\n      assert %GeoFence{id: _id} =\n               geofence_fixture(%{\n                 latitude: 50.1121,\n                 longitude: 11.597,\n                 radius: 50,\n                 cost_per_unit: 0.25,\n                 billing_type: :per_kwh\n               })\n\n      assert {:ok, cproc} =\n               log_charging_process(charges_fixture(:phases_nil),\n                 car: car,\n                 attrs: %{\n                   date: DateTime.utc_now(),\n                   latitude: 50.112198,\n                   longitude: 11.597669\n                 }\n               )\n\n      assert cproc.charge_energy_added == Decimal.from_float(12.77)\n      assert cproc.charge_energy_used == Decimal.from_float(12.46)\n      assert cproc.cost == Decimal.from_float(3.19)\n    end\n\n    test \"calculates the charge costs based on the price per minute\" do\n      car = car_fixture()\n\n      assert %GeoFence{id: _id} =\n               geofence_fixture(%{\n                 latitude: 50.1121,\n                 longitude: 11.597,\n                 radius: 50,\n                 cost_per_unit: 0.33,\n                 billing_type: :per_minute\n               })\n\n      assert {:ok, cproc} =\n               log_charging_process(charges_fixture(:phases_nil),\n                 car: car,\n                 attrs: %{\n                   date: DateTime.utc_now(),\n                   latitude: 50.112198,\n                   longitude: 11.597669\n                 }\n               )\n\n      assert cproc.charge_energy_added == Decimal.from_float(12.77)\n      assert cproc.charge_energy_used == Decimal.from_float(12.46)\n      assert cproc.duration_min == 19\n      assert cproc.cost == Decimal.from_float(6.27)\n    end\n\n    test \"calculates the charge costs based on the session fee\" do\n      car = car_fixture()\n\n      assert %GeoFence{id: _id} =\n               geofence_fixture(%{\n                 latitude: 50.1121,\n                 longitude: 11.597,\n                 radius: 50,\n                 session_fee: 7.00\n               })\n\n      assert {:ok, cproc} =\n               log_charging_process(charges_fixture(:phases_nil),\n                 car: car,\n                 attrs: %{\n                   date: DateTime.utc_now(),\n                   latitude: 50.112198,\n                   longitude: 11.597669\n                 }\n               )\n\n      assert cproc.charge_energy_added == Decimal.from_float(12.77)\n      assert cproc.charge_energy_used == Decimal.from_float(12.46)\n      assert cproc.cost == Decimal.new(\"7.00\")\n    end\n\n    test \"calculates the charge costs based on the session fee and energy used\" do\n      car = car_fixture()\n\n      assert %GeoFence{id: _id} =\n               geofence_fixture(%{\n                 latitude: 50.1121,\n                 longitude: 11.597,\n                 radius: 50,\n                 cost_per_unit: 0.25,\n                 session_fee: 4.79\n               })\n\n      assert {:ok, cproc} =\n               log_charging_process(charges_fixture(:phases_nil),\n                 car: car,\n                 attrs: %{\n                   date: DateTime.utc_now(),\n                   latitude: 50.112198,\n                   longitude: 11.597669\n                 }\n               )\n\n      assert cproc.charge_energy_added == Decimal.from_float(12.77)\n      assert cproc.charge_energy_used == Decimal.from_float(12.46)\n      assert cproc.cost == Decimal.from_float(7.98)\n    end\n\n    test \"fees can be zero\" do\n      car = car_fixture()\n\n      assert %GeoFence{id: _id} =\n               geofence_fixture(%{\n                 latitude: 50.1121,\n                 longitude: 11.597,\n                 radius: 50,\n                 cost_per_unit: 0.0,\n                 session_fee: 0.0\n               })\n\n      assert {:ok, cproc} =\n               log_charging_process(charges_fixture(:negative_energy_added),\n                 car: car,\n                 attrs: %{\n                   date: DateTime.utc_now(),\n                   latitude: 50.112198,\n                   longitude: 11.597669\n                 }\n               )\n\n      assert cproc.charge_energy_added == nil\n      assert cproc.charge_energy_used == Decimal.from_float(12.58)\n      assert cproc.cost == Decimal.new(\"0.00\")\n    end\n\n    test \"cost per unit can be negative\" do\n      car = car_fixture()\n\n      assert %GeoFence{id: _id} =\n               geofence_fixture(%{\n                 latitude: 50.1121,\n                 longitude: 11.597,\n                 radius: 50,\n                 cost_per_unit: -0.15,\n                 session_fee: 0.0\n               })\n\n      assert {:ok, cproc} =\n               log_charging_process(charges_fixture(:phases_nil),\n                 car: car,\n                 attrs: %{\n                   date: DateTime.utc_now(),\n                   latitude: 50.112198,\n                   longitude: 11.597669\n                 }\n               )\n\n      assert cproc.charge_energy_added == Decimal.from_float(12.77)\n      assert cproc.charge_energy_used == Decimal.from_float(12.46)\n      assert cproc.cost == Decimal.new(\"-1.92\")\n    end\n\n    test \"sets charge cost to zero if free supercharging is enabled\" do\n      alias TeslaMate.Settings\n\n      car = car_fixture()\n\n      {:ok, _} =\n        car\n        |> Settings.get_car_settings!()\n        |> Settings.update_car_settings(%{free_supercharging: true})\n\n      assert %GeoFence{id: _id} =\n               geofence_fixture(%{\n                 latitude: 50.1121,\n                 longitude: 11.597,\n                 radius: 50,\n                 cost_per_unit: 0.33\n               })\n\n      assert {:ok, cproc} =\n               log_charging_process(charges_fixture(:phases_nil, \"Tesla\"),\n                 car: car,\n                 attrs: %{\n                   date: DateTime.utc_now(),\n                   latitude: 50.112198,\n                   longitude: 11.597669\n                 }\n               )\n\n      assert cproc.charge_energy_added == Decimal.from_float(12.77)\n      assert cproc.charge_energy_used == Decimal.from_float(12.46)\n      assert cproc.cost == Decimal.new(\"0.00\")\n    end\n  end\n\n  describe \"efficiency factor\" do\n    test \"recalculates the efficiency factor after completing a charging session\" do\n      alias TeslaMate.Settings\n\n      data = [\n        {293.9, 293.9, 0.0, 59, 59, 0},\n        {293.2, 303.4, 1.65, 59, 61, 33},\n        {302.5, 302.5, 0.0, 61, 61, 0},\n        {302.5, 302.5, 0.0, 61, 61, 0},\n        {302.1, 309.5, 1.14, 61, 62, 23},\n        {71.9, 350.5, 42.21, 14, 70, 27},\n        {181.0, 484.0, 46.13, 36, 97, 46},\n        {312.3, 324.9, 1.75, 63, 65, 6},\n        {325.6, 482.7, 23.71, 65, 97, 34},\n        {80.5, 412.4, 50.63, 16, 83, 70},\n        {259.7, 426.2, 25.56, 52, 85, 36},\n        {105.5, 361.4, 38.96, 21, 72, 22},\n        {143.1, 282.5, 21.11, 29, 57, 15},\n        {111.6, 406.9, 44.93, 22, 82, 36},\n        {115.0, 453.2, 51.49, 23, 91, 38},\n        {112.5, 112.5, 0.0, 23, 23, 1},\n        {109.7, 139.7, 4.57, 22, 28, 26},\n        {63.9, 142.3, 11.82, 13, 29, 221},\n        {107.9, 450.1, 52.1, 22, 90, 40}\n      ]\n\n      assert %Car{efficiency: nil} = car_0 = car_fixture(eid: 3_453, vid: 3240, vin: \"slkf\")\n      assert %Car{efficiency: nil} = car_1 = car_fixture(eid: 3_904, vid: 9403, vin: \"salk\")\n\n      for {range, car} <- [{:ideal, car_0}, {:rated, car_1}] do\n        {:ok, _} =\n          Settings.get_global_settings!()\n          |> Settings.update_global_settings(%{preferred_range: range})\n\n        :ok = insert_charging_process_fixtures(car, data, range)\n\n        assert %Car{efficiency: 0.152} = Log.get_car!(car.id)\n      end\n    end\n\n    test \"makes an estimate with up to 4 decimal places\" do\n      assert %Car{efficiency: nil} = car = car_fixture()\n\n      data = [\n        {330.8, 379.0, 7.34, 66, 76, 47},\n        {98.6, 372.8, 41.96, 20, 75, 60},\n        {374.8, 448.6, 11.33, 75, 90, 20},\n        {148.5, 329.9, 28.13, 30, 66, 277},\n        {163.6, 287.4, 18.94, 33, 58, 109},\n        {148.0, 334.4, 28.37, 30, 67, 166},\n        {195.7, 429.1, 35.53, 39, 86, 25},\n        {217.9, 436.5, 33.28, 44, 87, 46},\n        {99.2, 251.1, 23.12, 20, 50, 133},\n        {223.5, 354.4, 20.04, 45, 71, 28},\n        {239.3, 239.6, 0.05, 48, 48, 0},\n        {76.4, 372.3, 44.95, 15, 75, 26},\n        {81.1, 385.3, 46.31, 16, 77, 27},\n        {97.6, 288.1, 29.1, 20, 58, 16},\n        {72.5, 454.2, 57.99, 15, 91, 42},\n        {289.4, 294.6, 0.52, 58, 59, 19},\n        {294.6, 294.6, 0.0, 59, 59, 0},\n        {285.8, 294.6, 1.34, 57, 59, 24},\n        {312.3, 324.9, 1.75, 63, 65, 6},\n        {325.6, 482.7, 23.71, 65, 97, 34},\n        {80.5, 412.4, 50.63, 16, 83, 70},\n        {259.7, 426.2, 25.56, 52, 85, 36},\n        {105.5, 361.4, 38.96, 21, 72, 22},\n        {143.1, 282.5, 21.11, 29, 57, 15},\n        {111.6, 406.9, 44.93, 22, 82, 36},\n        {115.0, 453.2, 51.49, 23, 91, 38},\n        {364.2, 369.0, 0.73, 73, 74, 5},\n        {332.2, 353.5, 3.25, 67, 71, 5}\n      ]\n\n      :ok = insert_charging_process_fixtures(car, data)\n\n      assert %Car{efficiency: 0.1522} = Log.get_car!(car.id)\n    end\n\n    test \"makes a rough estimate starting at two values\" do\n      ## 2x\n      assert %Car{efficiency: nil} = car = car_fixture(eid: 666, vid: 667, vin: \"668\")\n\n      data = [\n        {283.1, 353.9, 10.57, 57, 71, 60}\n      ]\n\n      :ok = insert_charging_process_fixtures(car, data)\n\n      assert %Car{efficiency: nil} = Log.get_car!(car.id)\n\n      ## 3x\n\n      assert %Car{efficiency: nil} = car = car_fixture(eid: 886, vid: 887, vin: \"888\")\n\n      data = [\n        {283.1, 353.9, 10.57, 57, 71, 60},\n        {259.7, 426.2, 25.56, 52, 85, 36}\n      ]\n\n      :ok = insert_charging_process_fixtures(car, data)\n\n      assert %Car{efficiency: 0.15} = Log.get_car!(car.id)\n    end\n\n    test \"handles NULL\" do\n      assert %Car{efficiency: nil} = car = car_fixture()\n\n      data = [\n        {262.8, 263.5, 0.0, 53, 53, 0},\n        {176.8, 177.5, 0.0, 35, 36, 3},\n        {294.6, 294.6, 0.0, 59, 59, 0}\n      ]\n\n      :ok = insert_charging_process_fixtures(car, data)\n\n      assert %Car{efficiency: nil} = Log.get_car!(car.id)\n    end\n\n    test \"rejects zero\" do\n      assert %Car{efficiency: nil} = car = car_fixture()\n\n      data = [\n        {262.8, 263.5, 0.0, 53, 53, 20},\n        {176.8, 177.5, 0.0, 35, 36, 20},\n        {294.6, 294.6, 0.0, 59, 59, 45}\n      ]\n\n      :ok = insert_charging_process_fixtures(car, data)\n\n      assert %Car{efficiency: nil} = Log.get_car!(car.id)\n    end\n\n    defp insert_charging_process_fixtures(car, data, range \\\\ :rated) do\n      {:ok, %Position{id: position_id}} = Log.insert_position(car, @valid_pos_attrs)\n\n      {start_range, end_range} =\n        case range do\n          :ideal -> {:start_ideal_range_km, :end_ideal_range_km}\n          :rated -> {:start_rated_range_km, :end_rated_range_km}\n        end\n\n      data =\n        for {sr, er, ca, sl, el, d} <- data do\n          %{\n            car_id: car.id,\n            start_date: DateTime.utc_now(),\n            position_id: position_id,\n            charge_energy_added: ca,\n            start_battery_level: sl,\n            end_battery_level: el,\n            duration_min: d\n          }\n          |> Map.put(start_range, sr)\n          |> Map.put(end_range, er)\n        end\n\n      {_, nil} = Repo.insert_all(ChargingProcess, data)\n\n      {:ok, cproc} = Log.start_charging_process(car, @valid_pos_attrs)\n\n      charges = [\n        %{\n          date: \"2019-04-05 16:01:27\",\n          battery_level: 50,\n          charge_energy_added: 0.41,\n          charger_actual_current: 5,\n          charger_phases: 3,\n          charger_pilot_current: 16,\n          charger_power: 4,\n          charger_voltage: 234,\n          ideal_battery_range_km: 266.6,\n          rated_battery_range_km: 206.6,\n          outside_temp: 16\n        },\n        %{\n          date: \"2019-04-05 16:05:40\",\n          battery_level: 54,\n          charge_energy_added: 0.72,\n          charger_actual_current: 5,\n          charger_phases: 3,\n          charger_pilot_current: 16,\n          charger_power: 4,\n          charger_voltage: 234,\n          ideal_battery_range_km: 268.6,\n          rated_battery_range_km: 208.6,\n          outside_temp: 14.5\n        }\n      ]\n\n      for c <- charges do\n        {:ok, %Charge{}} = Log.insert_charge(cproc, c)\n      end\n\n      {:ok, %ChargingProcess{}} = Log.complete_charging_process(cproc)\n\n      :ok\n    end\n  end\n\n  describe \"charge energy used\" do\n    test \"calculates the energy used [P]\" do\n      charges = charges_fixture(:phases_nil)\n\n      assert {:ok, cproc} = log_charging_process(charges)\n      assert cproc.charge_energy_added == Decimal.from_float(12.77)\n      assert cproc.charge_energy_used == Decimal.from_float(12.46)\n      assert cproc.duration_min == 19\n      assert cproc.start_ideal_range_km == Decimal.new(\"235.90\")\n      assert cproc.end_ideal_range_km == Decimal.new(\"320.50\")\n    end\n\n    test \"calculates the energy used with phase correction\" do\n      charges = charges_fixture(:phase_correction_2_to_3)\n      assert {:ok, cproc} = log_charging_process(charges)\n      assert cproc.charge_energy_added == Decimal.from_float(1.68)\n      assert cproc.charge_energy_used == Decimal.from_float(1.78)\n      assert cproc.duration_min == 13\n      assert cproc.start_ideal_range_km == Decimal.new(\"288.90\")\n      assert cproc.end_ideal_range_km == Decimal.new(\"299.90\")\n\n      charges = charges_fixture(:phase_correction_2_to_1)\n      assert {:ok, cproc} = log_charging_process(charges)\n      assert cproc.charge_energy_added == Decimal.from_float(12.64)\n      assert cproc.charge_energy_used == Decimal.from_float(14.76)\n      assert cproc.duration_min == 640\n      assert cproc.start_ideal_range_km == Decimal.new(\"180.10\")\n      assert cproc.end_ideal_range_km == Decimal.new(\"262.50\")\n    end\n\n    test \"calculates the energy used with voltage correction\" do\n      charges = charges_fixture(:voltage_correction_220_to_127_p1)\n      assert {:ok, cproc} = log_charging_process(charges)\n      assert cproc.charge_energy_added == Decimal.from_float(8.48)\n      assert cproc.charge_energy_used == Decimal.from_float(8.92)\n      assert cproc.duration_min == 74\n      assert cproc.start_ideal_range_km == Decimal.new(\"384.60\")\n      assert cproc.end_ideal_range_km == Decimal.new(\"440.30\")\n\n      charges = charges_fixture(:voltage_correction_220_to_127_p2)\n      assert {:ok, cproc} = log_charging_process(charges)\n      assert cproc.charge_energy_added == Decimal.new(\"38.44\")\n      assert cproc.charge_energy_used == Decimal.new(\"40.70\")\n      assert cproc.duration_min == 330\n      assert cproc.start_ideal_range_km == Decimal.new(\"189.20\")\n      assert cproc.end_ideal_range_km == Decimal.new(\"441.70\")\n    end\n\n    test \"handles a bad connection\" do\n      charges =\n        charges_fixture(:phases_nil)\n        |> Enum.with_index()\n        |> Enum.filter(fn {_, i} -> rem(i, 3) == 0 end)\n        |> Enum.map(fn {c, _} -> c end)\n\n      assert {:ok, cproc} = log_charging_process(charges)\n      assert cproc.charge_energy_added == Decimal.from_float(12.67)\n      assert cproc.charge_energy_used == Decimal.from_float(12.45)\n      assert cproc.duration_min == 18\n      assert cproc.start_ideal_range_km == Decimal.new(\"235.90\")\n      assert cproc.end_ideal_range_km == Decimal.new(\"319.80\")\n    end\n\n    test \"handles data gaps\" do\n      {c1, c2} = charges_fixture(:phases_nil) |> Enum.split(100)\n\n      charges =\n        c1 ++\n          Enum.map(c2, fn {date, added, _, _, _, _, _, _} = data ->\n            new_date =\n              date\n              |> String.split(\" \")\n              |> Enum.join(\"T\")\n              |> Kernel.<>(\"Z\")\n              |> DateTime.from_iso8601()\n              |> elem(1)\n              |> DateTime.add(2 * 60, :second)\n              |> DateTime.to_iso8601()\n\n            data\n            |> put_elem(0, new_date)\n            |> put_elem(1, added + 1)\n          end)\n\n      assert {:ok, cproc} = log_charging_process(charges)\n      assert cproc.charge_energy_added == Decimal.from_float(13.77)\n      assert cproc.charge_energy_used == Decimal.from_float(13.82)\n      assert cproc.duration_min == 21\n    end\n\n    defp charges_fixture(fixture, fast_charger_type \\\\ \"<invalid>\")\n\n    defp charges_fixture(:phases_nil, fast_charger_type) do\n      [\n        {\"2019-10-24 06:43:48.022\", 0, -1, 235.9, nil, 0, 1, \"<invalid>\"},\n        {\"2019-10-24 06:43:53.806\", 0, -1, 236.6, nil, 0, 1, \"<invalid>\"},\n        {\"2019-10-24 06:43:59.474\", 0, 43, 235.9, nil, 0, 1, \"<invalid>\"},\n        {\"2019-10-24 06:44:05.025\", 0, 41, 236.6, nil, 0, 1, \"<invalid>\"},\n        {\"2019-10-24 06:44:10.538\", 0.1, 41, 237.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:44:16.098\", 0.1, 40, 237.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:44:21.755\", 0.1, 40, 237.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:44:27.265\", 0.21, 40, 238, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:44:32.821\", 0.21, 40, 238, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:44:38.338\", 0.31, 39, 238.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:44:43.858\", 0.42, 40, 239.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:44:49.63\", 0.52, 41, 240, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:44:55.11\", 0.63, 40, 240.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:45:00.585\", 0.63, 40, 240.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:45:06.106\", 0.63, 40, 240.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:45:11.625\", 0.73, 40, 241.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:45:17.145\", 0.73, 41, 241.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:45:22.666\", 0.84, 41, 242.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:45:28.33\", 1.04, 40, 243.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:45:33.857\", 1.04, 40, 243.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:45:39.384\", 1.05, 40, 243.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:45:44.899\", 1.15, 40, 244.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:45:50.425\", 1.15, 40, 244.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:45:56.023\", 1.26, 41, 244.8, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:46:01.543\", 1.36, 41, 245.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:46:07.057\", 1.36, 40, 245.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:46:12.581\", 1.57, 40, 245.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:46:18.06\", 1.57, 40, 246.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:46:23.698\", 1.47, 40, 246.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:46:29.219\", 1.68, 40, 247.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:46:34.736\", 1.67, 40, 247.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:46:40.278\", 1.78, 40, 248.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:46:45.733\", 1.88, 41, 248.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:46:51.181\", 1.88, 40, 248.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:46:56.662\", 1.88, 40, 248.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:47:02.179\", 1.99, 40, 249.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:47:07.67\", 1.99, 40, 249.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:47:13.225\", 2.2, 41, 251, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:47:18.737\", 2.3, 41, 251.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:47:24.257\", 2.3, 40, 251.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:47:29.802\", 2.3, 40, 251.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:47:35.299\", 2.41, 40, 252.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:47:40.826\", 2.41, 40, 252.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:47:46.337\", 2.51, 41, 253.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:47:51.802\", 2.72, 40, 253.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:47:57.295\", 2.72, 40, 254.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:48:02.766\", 2.72, 40, 254.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:48:08.256\", 2.83, 40, 255.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:48:14.425\", 2.83, 40, 255.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:48:20.012\", 2.93, 40, 255.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:48:25.619\", 3.04, 40, 256.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:48:31.138\", 3.04, 40, 256.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:48:36.657\", 3.14, 40, 257.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:48:42.179\", 3.25, 40, 257.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:48:47.701\", 3.25, 41, 257.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:48:53.3\", 3.35, 40, 258.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:48:58.824\", 3.46, 40, 258.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:49:04.358\", 3.46, 40, 259.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:49:09.938\", 3.46, 40, 259.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:49:15.548\", 3.66, 40, 260.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:49:21.058\", 3.66, 40, 260.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:49:26.531\", 3.77, 40, 261.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:49:32.273\", 3.87, 41, 262, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:49:37.78\", 3.87, 40, 262, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:49:43.298\", 3.87, 40, 262, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:49:48.826\", 3.98, 40, 262.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:49:54.358\", 3.98, 40, 262.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:49:59.961\", 4.08, 41, 263.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:50:05.49\", 4.29, 40, 263.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:50:11.098\", 4.29, 40, 264.8, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:50:16.591\", 4.29, 40, 264.8, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:50:22.12\", 4.4, 40, 265.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:50:27.631\", 4.4, 40, 265.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:50:33.227\", 4.5, 41, 266.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:50:38.739\", 4.71, 40, 266.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:50:44.263\", 4.71, 40, 267.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:50:49.949\", 4.61, 40, 266.8, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:50:55.474\", 4.82, 40, 268.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:51:00.991\", 4.82, 41, 268.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:51:06.501\", 4.92, 41, 268.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:51:12.027\", 4.92, 40, 268.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:51:17.54\", 5.03, 40, 269.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:51:23.071\", 5.03, 41, 269.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:51:28.669\", 5.24, 41, 271, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:51:34.19\", 5.24, 40, 271, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:51:39.941\", 5.24, 40, 271, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:51:45.467\", 5.34, 40, 271.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:51:50.982\", 5.44, 40, 272.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:51:56.503\", 5.44, 41, 272.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:52:02.027\", 5.55, 40, 273, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:52:07.541\", 5.55, 40, 273, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:52:13.308\", 5.55, 40, 273, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:52:18.899\", 5.76, 41, 274.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:52:24.422\", 5.86, 41, 275.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:52:29.94\", 5.86, 40, 275.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:52:35.385\", 5.86, 40, 275.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:52:40.898\", 5.97, 40, 275.8, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:52:46.42\", 5.97, 40, 275.8, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:52:52.025\", 6.07, 40, 276.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:52:57.548\", 6.28, 41, 277.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:53:03.22\", 6.28, 41, 277.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:53:08.666\", 6.28, 41, 277.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:53:14.162\", 6.39, 41, 278.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:53:19.61\", 6.49, 40, 279.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:53:25.62\", 6.49, 41, 279.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:53:31.221\", 6.59, 41, 279.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:53:36.662\", 6.59, 40, 279.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:53:42.182\", 6.59, 40, 279.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:53:47.86\", 6.8, 40, 280.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:53:53.378\", 6.91, 40, 282, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:53:58.91\", 6.91, 40, 282, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:54:04.497\", 6.91, 41, 282, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:54:10.034\", 7.01, 41, 282.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:54:15.548\", 7.01, 41, 282.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:54:21.086\", 7.12, 41, 283.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:54:26.578\", 7.22, 41, 283.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:54:32.156\", 7.22, 40, 284, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:54:37.67\", 7.22, 41, 284, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:54:43.291\", 7.43, 41, 285.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:54:48.758\", 7.54, 41, 286.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:54:54.25\", 7.54, 41, 286.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:54:59.778\", 7.54, 40, 286.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:55:05.299\", 7.64, 41, 286.8, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:55:10.901\", 7.64, 41, 286.8, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:55:16.42\", 7.75, 40, 287.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:55:21.939\", 7.75, 41, 287.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:55:27.461\", 7.96, 41, 288.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:55:32.984\", 7.95, 40, 288.8, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:55:38.5\", 8.06, 41, 289.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:55:44.024\", 8.16, 41, 290.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:55:49.498\", 8.16, 41, 290.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:55:55.464\", 8.16, 40, 290.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:56:00.982\", 8.27, 41, 290.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:56:06.495\", 8.48, 40, 292.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:56:12.022\", 8.48, 41, 292.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:56:17.563\", 8.48, 41, 292.3, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 06:56:23.143\", 8.58, 41, 293, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:56:28.664\", 8.58, 41, 293, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:56:34.188\", 8.69, 41, 293.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:56:39.789\", 8.69, 41, 293.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:56:45.305\", 8.9, 41, 295, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:56:50.821\", 8.9, 41, 294.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:56:56.423\", 9, 41, 295.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:57:02.023\", 9.11, 41, 296.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:57:07.544\", 9.11, 41, 296.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:57:13.059\", 9.11, 41, 296.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:57:18.659\", 9.21, 41, 297.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:57:24.105\", 9.42, 41, 297.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:57:30.26\", 9.42, 41, 298.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:57:35.859\", 9.32, 41, 297.8, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:57:41.379\", 9.53, 41, 299.2, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 06:57:46.898\", 9.53, 41, 299.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:57:52.419\", 9.63, 41, 299.9, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 06:57:57.949\", 9.63, 41, 299.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:58:03.545\", 9.74, 41, 300.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:58:09.059\", 9.74, 41, 300.6, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 06:58:14.66\", 9.94, 41, 301.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:58:20.102\", 9.95, 41, 301.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:58:25.597\", 10.05, 41, 301.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:58:31.302\", 10.05, 41, 302.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:58:36.823\", 10.15, 41, 303.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:58:42.26\", 10.26, 41, 303.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:58:47.782\", 10.26, 41, 304, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:58:53.239\", 10.26, 41, 304, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 06:58:58.719\", 10.47, 41, 305.4, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 06:59:04.252\", 10.57, 41, 304.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:59:09.785\", 10.57, 41, 306, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 06:59:15.422\", 10.57, 41, 306, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:59:20.907\", 10.68, 41, 306.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:59:26.421\", 10.78, 41, 306.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:59:31.939\", 10.78, 41, 307.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:59:37.422\", 10.78, 41, 307.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:59:42.979\", 10.89, 41, 307.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:59:48.59\", 10.99, 41, 308.8, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 06:59:54.109\", 10.99, 41, 308.8, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 06:59:59.625\", 11.1, 41, 309.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:00:05.3\", 11.2, 40, 309.5, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:00:10.821\", 11.2, 40, 310.2, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:00:17.875\", 11.31, 41, 310.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:00:26.183\", 11.41, 41, 310.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:00:32.1\", 11.41, 41, 311.6, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 07:00:38.35\", 11.41, 40, 311.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:00:43.818\", 11.62, 40, 312.9, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 07:00:49.286\", 11.73, 40, 312.9, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:00:54.772\", 11.73, 40, 313.6, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 07:01:00.459\", 11.73, 40, 313.6, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:01:05.963\", 11.83, 40, 314.3, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:01:14.562\", 12.04, 40, 315.7, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:01:20.426\", 11.94, 40, 315, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:01:26.025\", 12.15, 40, 315, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:01:31.633\", 12.25, 40, 316.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:01:37.14\", 12.25, 41, 317.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:01:42.602\", 12.25, 41, 317.1, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:01:48.099\", 12.35, 41, 317.1, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 07:01:53.78\", 12.46, 41, 317.7, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 07:01:59.309\", 12.56, 40, 318.4, nil, 0, 1, fast_charger_type},\n        {\"2019-10-24 07:02:04.822\", 12.56, 40, 318.4, nil, 0, 2, fast_charger_type},\n        {\"2019-10-24 07:02:10.34\", 12.67, 40, 319.1, nil, 0, 1, \"<invalid>\"},\n        {\"2019-10-24 07:02:15.861\", 12.67, 40, 319.8, nil, 0, 2, \"<invalid>\"},\n        {\"2019-10-24 07:02:21.326\", 12.77, 40, 320.5, nil, 0, 2, \"<invalid>\"}\n      ]\n    end\n\n    defp charges_fixture(:phase_correction_2_to_3, _fast_charger_type) do\n      [\n        {\"2019-10-19 18:26:44\", 0, 0, 288.9, 2, 0, 233, \"<invalid>\"},\n        {\"2019-10-19 18:26:50\", 0, 0, 288.9, 2, 2, 234, \"<invalid>\"},\n        {\"2019-10-19 18:26:56\", 0, 2, 288.9, 2, 5, 234, \"<invalid>\"},\n        {\"2019-10-19 18:27:02\", 0, 4, 288.9, 2, 8, 235, \"<invalid>\"},\n        {\"2019-10-19 18:27:07\", 0, 8, 288.9, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:27:13\", 0, 8, 288.9, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:27:18\", 0, 8, 288.9, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:27:24\", 0, 8, 288.9, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:27:30\", 0, 8, 288.9, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:27:35\", 0, 8, 288.9, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:27:41\", 0.1, 8, 289.6, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:27:46\", 0.1, 8, 289.6, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:27:52\", 0.1, 8, 289.6, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:27:57\", 0.1, 8, 289.6, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:28:03\", 0.1, 8, 289.6, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:28:09\", 0.1, 8, 289.6, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:28:15\", 0.1, 8, 289.6, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:28:20\", 0.1, 8, 289.6, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:28:26\", 0.1, 8, 289.6, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:28:31\", 0.1, 8, 289.6, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:28:37\", 0.21, 8, 290.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:28:43\", 0.21, 8, 290.3, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:28:48\", 0.21, 8, 290.3, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:28:54\", 0.21, 8, 290.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:28:59\", 0.21, 8, 290.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:29:05\", 0.21, 8, 290.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:29:11\", 0.21, 8, 290.3, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:29:16\", 0.21, 8, 290.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:29:22\", 0.21, 8, 290.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:29:28\", 0.21, 8, 290.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:29:33\", 0.42, 8, 291.6, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:29:39\", 0.42, 8, 291.6, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:29:44\", 0.42, 8, 291.6, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:29:50\", 0.42, 8, 291.6, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:29:56\", 0.42, 8, 291.6, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:30:01\", 0.42, 8, 291.6, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:30:07\", 0.42, 8, 291.6, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:30:12\", 0.42, 8, 291.6, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:30:18\", 0.31, 8, 290.9, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:30:24\", 0.31, 8, 290.9, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:30:29\", 0.31, 8, 290.9, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:30:35\", 0.52, 8, 292.3, 2, 12, 229, \"<invalid>\"},\n        {\"2019-10-19 18:30:41\", 0.52, 8, 292.3, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:30:46\", 0.52, 8, 292.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:30:52\", 0.52, 8, 292.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:30:58\", 0.52, 8, 292.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:31:03\", 0.52, 8, 292.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:31:09\", 0.52, 8, 292.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:31:15\", 0.52, 8, 292.3, 2, 12, 229, \"<invalid>\"},\n        {\"2019-10-19 18:31:20\", 0.52, 8, 292.3, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:31:26\", 0.52, 8, 292.3, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:31:32\", 0.63, 8, 293, 2, 12, 229, \"<invalid>\"},\n        {\"2019-10-19 18:31:37\", 0.63, 8, 293, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:31:43\", 0.63, 8, 293, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:31:49\", 0.63, 8, 293, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:31:55\", 0.63, 8, 293, 2, 12, 232, \"<invalid>\"},\n        {\"2019-10-19 18:32:00\", 0.63, 8, 293, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:32:06\", 0.63, 8, 293, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:32:12\", 0.63, 8, 293, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:32:17\", 0.63, 8, 293, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:32:23\", 0.63, 8, 293, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:32:28\", 0.73, 8, 293.7, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:32:34\", 0.73, 8, 293.7, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:32:40\", 0.73, 8, 293.7, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:32:46\", 0.73, 8, 293.7, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:32:51\", 0.73, 8, 293.7, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:32:57\", 0.73, 8, 293.7, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:33:03\", 0.73, 8, 293.7, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:33:08\", 0.73, 8, 293.7, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:33:14\", 0.73, 8, 293.7, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:33:20\", 0.73, 8, 293.7, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:33:25\", 0.94, 8, 295.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:33:31\", 0.84, 8, 294.4, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:33:37\", 0.84, 8, 294.4, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:33:42\", 0.94, 8, 295.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:33:48\", 0.94, 8, 295.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:33:54\", 0.94, 8, 295.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:33:59\", 0.84, 8, 294.4, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:34:05\", 0.84, 8, 294.4, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:34:11\", 0.84, 8, 295.8, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:34:16\", 1.05, 8, 295.8, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:34:22\", 1.05, 8, 295.8, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:34:28\", 1.05, 8, 295.8, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:34:33\", 1.05, 8, 295.8, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:34:39\", 1.05, 8, 295.8, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:34:45\", 1.05, 8, 295.8, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:34:50\", 1.05, 8, 295.8, 2, 12, 232, \"<invalid>\"},\n        {\"2019-10-19 18:34:56\", 1.05, 8, 295.8, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:35:02\", 1.05, 8, 295.8, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:35:07\", 1.05, 8, 295.8, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:35:13\", 1.15, 8, 296.4, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:35:18\", 1.15, 8, 296.4, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:35:24\", 1.15, 8, 296.4, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:35:30\", 1.15, 8, 296.4, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:35:36\", 1.15, 8, 296.4, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:35:41\", 1.15, 8, 296.4, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:35:47\", 1.15, 8, 296.4, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:35:52\", 1.15, 8, 296.4, 2, 12, 233, \"<invalid>\"},\n        {\"2019-10-19 18:35:58\", 1.15, 8, 296.4, 2, 12, 232, \"<invalid>\"},\n        {\"2019-10-19 18:36:04\", 1.15, 8, 296.4, 2, 12, 232, \"<invalid>\"},\n        {\"2019-10-19 18:36:10\", 1.26, 8, 297.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:36:16\", 1.26, 8, 297.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:36:21\", 1.26, 8, 297.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:36:27\", 1.26, 8, 297.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:36:33\", 1.26, 8, 297.1, 2, 12, 232, \"<invalid>\"},\n        {\"2019-10-19 18:36:38\", 1.26, 8, 297.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:36:44\", 1.26, 8, 297.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:36:49\", 1.26, 8, 297.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:36:55\", 1.26, 8, 297.1, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:37:01\", 1.26, 8, 297.1, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:37:06\", 1.47, 8, 298.5, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:37:12\", 1.36, 8, 297.8, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:37:18\", 1.36, 8, 297.8, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:37:24\", 1.36, 8, 297.8, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:37:29\", 1.47, 8, 298.5, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:37:35\", 1.47, 8, 298.5, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:37:40\", 1.36, 8, 297.8, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:37:46\", 1.36, 8, 297.8, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:37:51\", 1.36, 8, 297.8, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:37:57\", 1.47, 8, 298.5, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:38:03\", 1.57, 8, 299.2, 2, 12, 229, \"<invalid>\"},\n        {\"2019-10-19 18:38:08\", 1.57, 8, 299.2, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:38:14\", 1.57, 8, 299.2, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:38:19\", 1.57, 8, 299.2, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:38:25\", 1.57, 8, 299.2, 2, 12, 232, \"<invalid>\"},\n        {\"2019-10-19 18:38:31\", 1.57, 8, 299.2, 2, 12, 232, \"<invalid>\"},\n        {\"2019-10-19 18:38:36\", 1.57, 8, 299.2, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:38:42\", 1.57, 8, 299.2, 2, 12, 232, \"<invalid>\"},\n        {\"2019-10-19 18:38:48\", 1.57, 8, 299.2, 2, 12, 233, \"<invalid>\"},\n        {\"2019-10-19 18:38:53\", 1.57, 8, 299.2, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:38:59\", 1.68, 8, 299.9, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:39:05\", 1.68, 8, 299.9, 2, 12, 232, \"<invalid>\"},\n        {\"2019-10-19 18:39:10\", 1.68, 8, 299.9, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:39:16\", 1.68, 8, 299.9, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:39:21\", 1.68, 8, 299.9, 2, 12, 232, \"<invalid>\"},\n        {\"2019-10-19 18:39:27\", 1.68, 8, 299.9, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:39:33\", 1.68, 8, 299.9, 2, 12, 230, \"<invalid>\"},\n        {\"2019-10-19 18:39:38\", 1.68, 8, 299.9, 2, 12, 231, \"<invalid>\"},\n        {\"2019-10-19 18:39:44\", 1.68, 8, 299.9, 2, 12, 232, \"<invalid>\"},\n        {\"2019-10-19 18:39:49\", 1.68, 0, 299.9, nil, 0, 6, 4, \"<invalid>\"}\n      ]\n    end\n\n    defp charges_fixture(:phase_correction_2_to_1, _fast_charger_type) do\n      [\n        {\"2019-06-15 09:28:19\", 0.51, 2, 180.8, 2, 9, 224, \"<invalid>\"},\n        {\"2019-06-15 09:29:51\", 0.51, 2, 180.8, 2, 9, 224, \"<invalid>\"},\n        {\"2019-06-15 09:23:43\", 0.41, 2, 180.1, 2, 9, 223, \"<invalid>\"},\n        {\"2019-06-15 09:26:16\", 0.51, 2, 180.1, 2, 9, 221, \"<invalid>\"},\n        {\"2019-06-15 09:35:28\", 0.71, 2, 181.5, 2, 9, 223, \"<invalid>\"},\n        {\"2019-06-15 09:41:36\", 0.92, 2, 183.5, 2, 9, 223, \"<invalid>\"},\n        {\"2019-06-15 09:45:43\", 1.02, 2, 184.2, 2, 9, 225, \"<invalid>\"},\n        {\"2019-06-15 09:49:49\", 1.12, 2, 184.8, 2, 9, 224, \"<invalid>\"},\n        {\"2019-06-15 09:53:55\", 1.22, 2, 185.5, 2, 9, 225, \"<invalid>\"},\n        {\"2019-06-15 09:58:01\", 1.43, 2, 186.8, 2, 9, 226, \"<invalid>\"},\n        {\"2019-06-15 10:14:27\", 1.94, 2, 189.5, 2, 9, 223, \"<invalid>\"},\n        {\"2019-06-15 11:15:50\", 2.96, 1, 196.2, 2, 5, 228, \"<invalid>\"},\n        {\"2019-06-15 10:07:48\", 1.63, 2, 188.2, 2, 9, 224, \"<invalid>\"},\n        {\"2019-06-15 11:08:40\", 2.75, 1, 194.9, 2, 5, 228, \"<invalid>\"},\n        {\"2019-06-15 10:01:36\", 1.53, 2, 186.8, 2, 9, 226, \"<invalid>\"},\n        {\"2019-06-15 11:02:30\", 2.65, 1, 194.9, 2, 5, 228, \"<invalid>\"},\n        {\"2019-06-15 10:02:07\", 1.53, 2, 187.5, 2, 9, 223, \"<invalid>\"},\n        {\"2019-06-15 10:56:21\", 2.55, 1, 194.2, 2, 5, 231, \"<invalid>\"},\n        {\"2019-06-15 12:01:27\", 3.57, 1, 200.9, 2, 5, 229, \"<invalid>\"},\n        {\"2019-06-15 11:03:02\", 2.65, 1, 194.9, 2, 5, 227, \"<invalid>\"},\n        {\"2019-06-15 12:01:58\", 3.57, 1, 200.9, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 10:57:22\", 2.65, 1, 194.2, 2, 5, 230, \"<invalid>\"},\n        {\"2019-06-15 11:55:48\", 3.57, 1, 200.2, 2, 5, 228, \"<invalid>\"},\n        {\"2019-06-15 10:50:13\", 2.55, 1, 193.5, 2, 5, 231, \"<invalid>\"},\n        {\"2019-06-15 11:56:19\", 3.57, 1, 200.2, 2, 5, 229, \"<invalid>\"},\n        {\"2019-06-15 10:50:44\", 2.55, 1, 193.5, 2, 5, 231, \"<invalid>\"},\n        {\"2019-06-15 11:56:50\", 3.57, 1, 200.2, 2, 5, 229, \"<invalid>\"},\n        {\"2019-06-15 10:51:14\", 2.55, 1, 193.5, 2, 5, 231, \"<invalid>\"},\n        {\"2019-06-15 11:57:21\", 3.57, 1, 200.2, 2, 5, 228, \"<invalid>\"},\n        {\"2019-06-15 10:58:55\", 2.65, 1, 194.2, 2, 5, 230, \"<invalid>\"},\n        {\"2019-06-15 12:04:31\", 3.67, 1, 200.9, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 10:59:25\", 2.65, 1, 194.2, 2, 5, 230, \"<invalid>\"},\n        {\"2019-06-15 12:05:01\", 3.67, 1, 200.9, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 10:53:17\", 2.55, 1, 194.2, 2, 5, 231, \"<invalid>\"},\n        {\"2019-06-15 11:58:54\", 3.57, 1, 200.9, 2, 5, 229, \"<invalid>\"},\n        {\"2019-06-15 10:53:48\", 2.55, 1, 194.2, 2, 5, 230, \"<invalid>\"},\n        {\"2019-06-15 11:52:12\", 3.47, 1, 200.2, 2, 5, 230, \"<invalid>\"},\n        {\"2019-06-15 10:52:46\", 2.55, 1, 194.2, 2, 5, 229, \"<invalid>\"},\n        {\"2019-06-15 11:51:11\", 3.47, 1, 200.2, 2, 5, 230, \"<invalid>\"},\n        {\"2019-06-15 10:46:39\", 2.45, 1, 193.5, 2, 5, 228, \"<invalid>\"},\n        {\"2019-06-15 11:45:03\", 3.26, 1, 198.9, 2, 5, 230, \"<invalid>\"},\n        {\"2019-06-15 12:08:36\", 3.67, 1, 201.6, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 12:12:42\", 3.87, 1, 202.9, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 12:16:47\", 3.98, 1, 202.9, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 12:20:52\", 3.98, 1, 203.6, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 12:51:38\", 4.59, 1, 207.6, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 13:51:03\", 5.71, 1, 215, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 12:23:25\", 4.08, 1, 203.6, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 13:29:02\", 5.4, 1, 211.6, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 14:29:30\", 6.52, 1, 219, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 13:00:21\", 4.69, 1, 208.3, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 13:56:09\", 5.81, 1, 215, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 12:39:21\", 4.28, 1, 205.6, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 13:45:55\", 5.61, 1, 214.3, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 12:24:59\", 4.08, 1, 203.6, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 13:24:24\", 5.2, 1, 210.9, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 14:17:12\", 6.22, 1, 218.3, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 12:54:43\", 4.59, 1, 207.6, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 13:54:07\", 5.71, 1, 215, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 12:33:42\", 4.18, 1, 204.9, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 13:39:47\", 5.51, 1, 213.6, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 14:32:34\", 6.52, 1, 220.3, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 13:02:54\", 4.89, 1, 208.3, 2, 6, 225, \"<invalid>\"},\n        {\"2019-06-15 13:58:12\", 5.81, 1, 215.6, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 12:27:02\", 4.08, 1, 204.2, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 13:25:57\", 5.2, 1, 211.6, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 14:26:25\", 6.32, 1, 219, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 13:03:56\", 4.89, 1, 208.3, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 14:06:23\", 6.01, 1, 217, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 12:42:56\", 4.49, 1, 206.3, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 13:59:44\", 5.81, 1, 215.6, 2, 6, 225, \"<invalid>\"},\n        {\"2019-06-15 12:43:26\", 4.49, 1, 205.6, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 13:42:20\", 5.61, 1, 213.6, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 12:36:46\", 4.38, 1, 204.9, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 13:35:09\", 5.51, 1, 212.9, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 14:27:58\", 6.52, 1, 219.6, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 13:13:39\", 5, 1, 210.3, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 14:28:28\", 6.52, 1, 219, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 13:15:11\", 5.1, 1, 210.3, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 14:15:40\", 6.22, 1, 217.6, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 14:48:33\", 6.83, 1, 221.7, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 14:52:38\", 6.83, 1, 222.3, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 14:56:44\", 7.03, 1, 223.7, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 15:00:49\", 7.14, 1, 223.7, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 15:31:36\", 7.65, 1, 227.7, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 16:46:08\", 9.18, 1, 237.1, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 17:43:05\", 10.19, 1, 244.4, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 16:00:22\", 8.26, 1, 231, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 16:53:49\", 9.28, 1, 237.7, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 15:03:53\", 7.14, 1, 224.3, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 16:00:52\", 8.26, 1, 231, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 17:01:31\", 9.38, 1, 238.4, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 15:12:07\", 7.24, 1, 225, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 16:15:47\", 8.56, 1, 233.7, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 17:08:43\", 9.58, 1, 240.4, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 15:26:58\", 7.65, 1, 227, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 16:30:07\", 8.77, 1, 235, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 17:38:28\", 10.19, 1, 243.8, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 15:55:44\", 8.16, 1, 230.4, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 17:03:04\", 9.48, 1, 239.1, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 15:27:59\", 7.65, 1, 227, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 16:24:28\", 8.67, 1, 234.4, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 17:17:28\", 9.68, 1, 241.1, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 15:42:23\", 7.85, 1, 228.4, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 16:49:43\", 9.18, 1, 237.7, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 15:06:59\", 7.24, 1, 224.3, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 16:03:57\", 8.26, 1, 231.7, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 16:57:55\", 9.28, 1, 238.4, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 15:21:51\", 7.54, 1, 226.3, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 16:50:45\", 9.18, 1, 237.7, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 15:08:00\", 7.24, 1, 224.3, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 16:04:29\", 8.26, 1, 231.7, 2, 6, 226, \"<invalid>\"},\n        {\"2019-06-15 16:58:56\", 9.38, 1, 238.4, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 15:16:13\", 7.34, 1, 225, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 16:19:52\", 8.67, 1, 233.7, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 17:34:22\", 10.09, 1, 243.8, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 15:51:39\", 8.05, 1, 230.4, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 16:52:17\", 9.28, 1, 237.7, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 15:09:33\", 7.24, 1, 224.3, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 16:06:02\", 8.36, 1, 231.7, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 16:59:59\", 9.38, 1, 238.4, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 15:32:38\", 7.75, 1, 227.7, 2, 6, 227, \"<invalid>\"},\n        {\"2019-06-15 16:41:27\", 9.07, 1, 235.7, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 17:45:09\", 10.3, 1, 244.4, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 17:49:14\", 10.3, 1, 245.1, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 17:53:20\", 10.4, 1, 245.1, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 17:57:25\", 10.6, 1, 245.8, 2, 6, 228, \"<invalid>\"},\n        {\"2019-06-15 18:06:46\", 10.7, 1, 247.8, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 19:19:39\", 12.13, 1, 257.2, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 18:14:57\", 10.81, 1, 248.5, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 19:12:56\", 12.03, 1, 255.8, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 18:08:18\", 10.7, 1, 247.8, 2, 6, 232, \"<invalid>\"},\n        {\"2019-06-15 19:13:58\", 11.93, 1, 255.8, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 18:16:29\", 10.91, 1, 248.5, 2, 6, 232, \"<invalid>\"},\n        {\"2019-06-15 19:21:41\", 12.23, 1, 257.2, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 18:23:41\", 11.11, 1, 249.8, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 19:22:12\", 12.23, 1, 257.2, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 18:17:01\", 10.91, 1, 248.5, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 19:15:31\", 12.13, 1, 255.8, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 18:10:21\", 10.81, 1, 247.8, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 19:08:18\", 12.03, 1, 255.1, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 18:04:38\", 10.7, 1, 247.1, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 19:01:38\", 11.83, 1, 254.5, 2, 6, 232, \"<invalid>\"},\n        {\"2019-06-15 18:05:08\", 10.7, 1, 247.1, 2, 6, 229, \"<invalid>\"},\n        {\"2019-06-15 19:02:08\", 11.83, 1, 254.5, 2, 6, 232, \"<invalid>\"},\n        {\"2019-06-15 20:01:11\", 12.95, 1, 261.8, 2, 6, 232, \"<invalid>\"},\n        {\"2019-06-15 19:04:11\", 11.83, 1, 254.5, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 20:03:14\", 13.05, 1, 262.5, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 18:57:01\", 11.72, 1, 253.8, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 19:56:32\", 12.85, 1, 261.8, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 18:58:33\", 11.72, 1, 254.5, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 19:27:49\", 12.34, 1, 257.8, 2, 6, 232, \"<invalid>\"},\n        {\"2019-06-15 18:33:55\", 11.21, 1, 251.1, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 19:31:55\", 12.34, 1, 258.5, 2, 6, 232, \"<invalid>\"},\n        {\"2019-06-15 18:34:25\", 11.21, 1, 251.1, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 19:32:25\", 12.34, 1, 258.5, 2, 6, 230, \"<invalid>\"},\n        {\"2019-06-15 18:20:05\", 11.01, 1, 249.1, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 19:25:16\", 12.23, 1, 257.8, 2, 6, 231, \"<invalid>\"},\n        {\"2019-06-15 20:02:43\", 12.95, 1, 262.5, 2, 6, 232, \"<invalid>\"}\n      ]\n    end\n\n    # 127/220V three-phase net\n    defp charges_fixture(:voltage_correction_220_to_127_p1, _fast_charger_type) do\n      [\n        {\"2019-12-02 21:18:54.708\", 0, 0, 384.6, 3, 0, 236, \"<invalid>\"},\n        {\"2019-12-02 21:19:22.967\", 0, 7, 383.2, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-02 21:20:04.112\", 0, 7, 383.9, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-02 21:20:46.253\", 0.1, 7, 385.3, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-02 21:21:27.86\", 0.1, 7, 385.3, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-02 21:22:09.022\", 0.21, 7, 386, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-02 21:22:51.276\", 0.31, 7, 386.7, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-02 21:23:32.805\", 0.31, 7, 386.7, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-02 21:24:14.25\", 0.52, 7, 388, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-02 21:24:56.097\", 0.63, 7, 388.7, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-02 21:25:38.088\", 0.63, 7, 388.7, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-02 21:26:19.473\", 0.73, 7, 389.4, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-02 21:27:01.547\", 0.73, 7, 389.4, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-02 21:27:43.065\", 0.84, 7, 390.1, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:28:24.479\", 0.94, 7, 390.8, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:29:06.282\", 1.05, 7, 391.5, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-02 21:29:48.009\", 1.15, 7, 392.2, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-02 21:30:29.955\", 1.15, 7, 392.2, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:31:12.162\", 1.26, 7, 392.9, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:31:53.96\", 1.36, 7, 393.5, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:32:36.03\", 1.36, 7, 393.5, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-02 21:33:18.241\", 1.47, 7, 394.2, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:34:00.488\", 1.68, 7, 395.6, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:34:42.099\", 1.68, 7, 395.6, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:35:23.683\", 1.78, 7, 396.3, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-02 21:36:05.927\", 1.89, 7, 397, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:36:48.091\", 1.89, 7, 397, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:37:30.408\", 1.99, 7, 397.7, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-02 21:38:12.724\", 2.09, 7, 398.4, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:38:54.008\", 2.2, 7, 399.1, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:39:35.848\", 2.3, 7, 399.7, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:40:18.089\", 2.3, 7, 399.7, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 21:40:59.779\", 2.41, 7, 400.4, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-02 21:41:41.946\", 2.41, 7, 400.4, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:42:23.597\", 2.62, 7, 401.8, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:43:05.121\", 2.72, 7, 402.5, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 21:43:47.366\", 2.72, 7, 402.5, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:44:29.628\", 2.83, 7, 403.2, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:45:10.752\", 2.83, 7, 403.2, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:45:54.097\", 2.93, 7, 403.9, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:46:36.332\", 3.04, 7, 404.6, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 21:47:18.578\", 3.04, 7, 404.6, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:48:00.181\", 3.25, 7, 405.9, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 21:48:41.828\", 3.35, 7, 406.6, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 21:49:23.454\", 3.35, 7, 406.6, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:50:05.092\", 3.46, 7, 407.3, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 21:50:46.622\", 3.46, 7, 407.3, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:51:28.802\", 3.67, 7, 408.7, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:52:10.412\", 3.77, 7, 409.4, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:54:15.2\", 3.98, 7, 410.1, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:52:52.108\", 3.77, 7, 409.4, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:56:20.662\", 4.08, 7, 411.4, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:54:57.014\", 3.98, 7, 410.8, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:55:17.941\", 3.98, 7, 410.8, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:55:39.038\", 4.19, 7, 412.1, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:57:02.908\", 4.29, 7, 412.8, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 21:57:44.704\", 4.4, 7, 413.5, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:58:26.747\", 4.4, 7, 413.5, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:59:08.529\", 4.5, 7, 414.2, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-02 21:59:50.195\", 4.5, 7, 414.2, 3, 19, 217, \"<invalid>\"},\n        {\"2019-12-02 22:00:32.164\", 4.61, 7, 414.9, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:01:20.166\", 4.82, 7, 416.3, 3, 19, 217, \"<invalid>\"},\n        {\"2019-12-02 22:02:02.669\", 4.82, 7, 416.3, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:02:45.921\", 4.92, 7, 416.9, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:03:27.83\", 5.03, 7, 417.6, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:04:10.408\", 5.03, 7, 417.6, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:04:52.09\", 5.24, 7, 419, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:05:34.258\", 5.34, 7, 419.7, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:06:15.861\", 5.34, 7, 419.7, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:06:58.087\", 5.45, 7, 420.4, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:07:40.541\", 5.45, 7, 420.4, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:08:22.578\", 5.55, 7, 421.1, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:09:04.802\", 5.76, 7, 422.5, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:09:47.723\", 5.76, 7, 422.5, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:10:29.288\", 5.87, 7, 423.1, 3, 19, 217, \"<invalid>\"},\n        {\"2019-12-02 22:11:10.881\", 5.87, 7, 423.1, 3, 19, 217, \"<invalid>\"},\n        {\"2019-12-02 22:11:53.484\", 5.97, 7, 423.8, 3, 19, 217, \"<invalid>\"},\n        {\"2019-12-02 22:12:35.582\", 6.08, 7, 424.5, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:15:24.338\", 6.39, 7, 426.6, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:12:56.16\", 6.08, 7, 424.5, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:15:45.445\", 6.39, 7, 426.6, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:13:17.615\", 6.08, 7, 424.5, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:17:50.954\", 6.6, 7, 428, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:14:42.096\", 6.18, 7, 425.2, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:15:03.213\", 6.39, 7, 426.6, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:18:12.036\", 6.81, 7, 428, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:18:53.479\", 6.81, 7, 429.3, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:19:35.845\", 6.91, 7, 430, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:20:18.73\", 6.91, 7, 430, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:21:01.831\", 7.02, 7, 430.7, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:21:43.867\", 7.12, 7, 431.4, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:22:26.091\", 7.12, 7, 431.4, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:23:07.861\", 7.23, 7, 432.1, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:23:49.034\", 7.44, 7, 432.8, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:24:31.533\", 7.44, 7, 433.5, 3, 19, 217, \"<invalid>\"},\n        {\"2019-12-02 22:25:12.794\", 7.54, 7, 434.1, 3, 19, 217, \"<invalid>\"},\n        {\"2019-12-02 22:25:55.351\", 7.54, 7, 434.1, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:26:38.247\", 7.65, 7, 434.8, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:27:20.476\", 7.75, 7, 435.5, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:28:01.806\", 7.75, 7, 435.5, 3, 19, 217, \"<invalid>\"},\n        {\"2019-12-02 22:28:44.348\", 7.96, 7, 436.9, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:29:25.925\", 7.96, 7, 436.9, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:29:47.058\", 8.07, 7, 437.6, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:30:07.643\", 8.07, 7, 437.6, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-02 22:30:49.205\", 8.17, 7, 438.3, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:31:30.782\", 8.17, 7, 438.3, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:32:12.345\", 8.27, 7, 439, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:32:54.036\", 8.38, 7, 439.6, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-02 22:33:14.632\", 8.48, 0, 440.3, nil, 0, 1, \"<invalid>\"}\n      ]\n    end\n\n    defp charges_fixture(:voltage_correction_220_to_127_p2, _fast_charger_type) do\n      [\n        {\"2019-12-11 20:00:30.611\", 0, 7, 189.2, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-11 20:03:06.06\", 0.21, 7, 190.6, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-11 20:05:54.979\", 0.52, 7, 192.7, 3, 19, 225, \"<invalid>\"},\n        {\"2019-12-11 20:08:43.586\", 0.84, 7, 195.4, 3, 19, 225, \"<invalid>\"},\n        {\"2019-12-11 20:20:32.911\", 2.2, 7, 203.7, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-11 20:36:15.923\", 4.19, 7, 216.7, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-11 20:48:48.709\", 5.55, 7, 225.7, 3, 19, 224, \"<invalid>\"},\n        {\"2019-12-11 20:09:25.816\", 0.94, 7, 195.4, 3, 19, 225, \"<invalid>\"},\n        {\"2019-12-11 20:22:38.203\", 2.41, 7, 205, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-11 20:38:21.007\", 4.4, 7, 218.1, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-11 20:50:54.207\", 5.87, 7, 227.7, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-11 20:09:46.948\", 1.05, 7, 196.1, 3, 19, 225, \"<invalid>\"},\n        {\"2019-12-11 20:22:59.247\", 2.62, 7, 206.4, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-11 20:35:13.206\", 3.98, 7, 215.3, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-11 20:48:07.059\", 5.66, 7, 226.4, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-11 20:10:07.965\", 1.05, 7, 196.1, 3, 19, 225, \"<invalid>\"},\n        {\"2019-12-11 20:23:19.796\", 2.62, 7, 206.4, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-11 20:35:34.331\", 3.98, 7, 215.3, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-11 20:54:45.074\", 6.39, 7, 231.2, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-11 20:20:12.37\", 2.2, 7, 203.7, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-11 20:33:05.897\", 3.77, 7, 214, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-11 20:47:04.357\", 5.45, 7, 225, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-11 20:59:40.253\", 6.91, 7, 234.6, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-11 21:04:34.609\", 7.54, 7, 238.7, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-11 21:07:21.909\", 7.86, 7, 240.8, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-11 21:16:24.458\", 9.01, 7, 248.4, 3, 19, 225, \"<invalid>\"},\n        {\"2019-12-11 21:32:45.057\", 10.79, 7, 260.1, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-11 21:46:20.299\", 12.46, 7, 271.1, 3, 19, 217, \"<invalid>\"},\n        {\"2019-12-11 22:00:56.484\", 14.14, 7, 282.1, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-11 22:14:31.831\", 15.71, 7, 292.4, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 21:19:53.063\", 9.43, 7, 251.1, 3, 19, 225, \"<invalid>\"},\n        {\"2019-12-11 21:33:05.576\", 10.79, 7, 260.1, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-11 21:48:25.755\", 12.67, 7, 272.5, 3, 19, 216, \"<invalid>\"},\n        {\"2019-12-11 22:03:01.937\", 14.35, 7, 283.5, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 21:09:05.967\", 8.07, 7, 242.2, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-11 21:21:38.258\", 9.53, 7, 251.8, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-11 21:34:49.733\", 11.1, 7, 262.1, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-11 21:47:01.509\", 12.57, 7, 271.8, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-11 22:01:38.483\", 14.14, 7, 282.1, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-11 21:09:27.061\", 8.07, 7, 242.2, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-11 21:23:23.003\", 9.85, 7, 253.9, 3, 19, 225, \"<invalid>\"},\n        {\"2019-12-11 21:37:59.359\", 11.52, 7, 264.9, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-11 21:50:51.09\", 12.88, 7, 273.8, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-11 22:03:43.516\", 14.35, 7, 283.5, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 21:12:35.281\", 8.48, 7, 244.9, 3, 19, 224, \"<invalid>\"},\n        {\"2019-12-11 21:27:12.129\", 10.16, 7, 256, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-11 21:41:27.803\", 11.84, 7, 267, 3, 19, 218, \"<invalid>\"},\n        {\"2019-12-11 21:56:03.068\", 13.62, 7, 278.6, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 22:09:17.682\", 14.98, 7, 287.6, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-11 22:16:58.434\", 15.92, 7, 293.8, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 22:22:58.725\", 16.65, 7, 298.6, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 22:35:57.595\", 18.23, 7, 308.9, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-11 22:47:50.642\", 19.48, 7, 317.2, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-11 23:00:45.599\", 20.95, 7, 326.8, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 23:18:40.807\", 23.04, 7, 340.6, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 23:35:49.403\", 24.93, 7, 353, 3, 19, 223, \"<invalid>\"},\n        {\"2019-12-11 22:29:19.552\", 17.39, 7, 303.4, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-11 22:44:18.708\", 19.06, 7, 314.4, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 22:57:57.935\", 20.63, 7, 324.8, 3, 19, 222, \"<invalid>\"},\n        {\"2019-12-11 23:14:08.435\", 22.52, 7, 337.1, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-11 23:27:04.02\", 23.88, 7, 346.1, 3, 19, 222, \"<invalid>\"},\n        {\"2019-12-11 22:21:55.362\", 16.44, 7, 297.2, 3, 19, 219, \"<invalid>\"},\n        {\"2019-12-11 22:38:23.606\", 18.43, 7, 310.3, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 22:53:25.912\", 20.11, 7, 321.3, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 23:06:47.865\", 21.68, 7, 331.6, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-11 23:19:23.058\", 23.15, 7, 341.3, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 23:31:58.257\", 24.61, 7, 350.9, 3, 19, 223, \"<invalid>\"},\n        {\"2019-12-11 22:25:48.366\", 16.97, 7, 300.7, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 22:39:05.155\", 18.43, 7, 310.3, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-11 22:54:07.703\", 20.11, 7, 321.3, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 23:07:29.837\", 21.68, 7, 331.6, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-11 23:20:04.705\", 23.15, 7, 341.3, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 23:35:28.817\", 24.93, 7, 353, 3, 19, 223, \"<invalid>\"},\n        {\"2019-12-11 22:33:31.039\", 17.81, 7, 306.2, 3, 19, 221, \"<invalid>\"},\n        {\"2019-12-11 22:46:04.855\", 19.27, 7, 315.8, 3, 19, 222, \"<invalid>\"},\n        {\"2019-12-11 23:02:53.591\", 21.16, 7, 328.2, 3, 19, 220, \"<invalid>\"},\n        {\"2019-12-11 23:14:51.046\", 22.62, 7, 337.8, 3, 19, 222, \"<invalid>\"},\n        {\"2019-12-11 23:27:45.449\", 24.09, 7, 347.5, 3, 19, 222, \"<invalid>\"},\n        {\"2019-12-11 23:38:17.199\", 25.24, 7, 355, 3, 19, 223, \"<invalid>\"},\n        {\"2019-12-11 23:50:53.037\", 26.71, 7, 364.6, 3, 19, 223, \"<invalid>\"},\n        {\"2019-12-12 00:04:32.158\", 28.28, 7, 375, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-12 00:18:12.625\", 29.96, 7, 386, 3, 19, 225, \"<invalid>\"},\n        {\"2019-12-12 00:34:39.496\", 31.84, 7, 398.4, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 00:50:05.071\", 33.62, 7, 410.1, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-11 23:38:59.363\", 25.35, 7, 355.7, 3, 19, 223, \"<invalid>\"},\n        {\"2019-12-11 23:55:48.181\", 27.34, 7, 368.8, 3, 19, 222, \"<invalid>\"},\n        {\"2019-12-12 00:10:06.316\", 28.91, 7, 379.1, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-12 00:22:03.708\", 30.38, 7, 388.7, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-12 00:35:21.754\", 31.95, 7, 399.1, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 00:49:02.862\", 33.52, 7, 409.4, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-11 23:40:45.602\", 25.45, 7, 356.4, 3, 19, 224, \"<invalid>\"},\n        {\"2019-12-11 23:47:23.053\", 26.29, 7, 361.9, 3, 19, 222, \"<invalid>\"},\n        {\"2019-12-11 23:54:44.627\", 27.23, 7, 368.1, 3, 19, 224, \"<invalid>\"},\n        {\"2019-12-12 00:01:02.897\", 27.86, 7, 372.2, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-12 00:06:58.75\", 28.59, 7, 377, 3, 19, 225, \"<invalid>\"},\n        {\"2019-12-12 00:16:05.924\", 29.75, 7, 384.6, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-12 00:24:09.517\", 30.58, 7, 390.1, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 00:30:27.998\", 31.42, 7, 395.6, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-12 00:37:07.362\", 32.16, 7, 400.4, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 00:45:10.563\", 33.1, 7, 406.6, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 00:52:52.653\", 34.04, 7, 412.8, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 01:00:33.433\", 34.98, 7, 419, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-11 23:41:06.754\", 25.66, 7, 357.8, 3, 19, 224, \"<invalid>\"},\n        {\"2019-12-11 23:44:15.528\", 25.87, 7, 359.1, 3, 19, 222, \"<invalid>\"},\n        {\"2019-12-11 23:47:44.165\", 26.29, 7, 361.9, 3, 19, 223, \"<invalid>\"},\n        {\"2019-12-11 23:50:32.486\", 26.71, 7, 364.6, 3, 19, 224, \"<invalid>\"},\n        {\"2019-12-11 23:53:40.587\", 27.02, 7, 366.7, 3, 19, 224, \"<invalid>\"},\n        {\"2019-12-11 23:57:53.688\", 27.44, 7, 369.5, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-12 00:01:45.044\", 27.97, 7, 372.9, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-12 00:05:35.506\", 28.39, 7, 375.7, 3, 19, 225, \"<invalid>\"},\n        {\"2019-12-12 00:09:04.172\", 28.8, 7, 378.4, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-12 00:09:45.769\", 28.91, 7, 379.1, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-12 00:10:47.381\", 29.01, 7, 379.8, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-12 00:11:07.92\", 29.01, 7, 379.8, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-12 00:13:38.078\", 29.33, 7, 381.8, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-12 00:17:51.522\", 29.85, 7, 385.3, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-12 00:21:42.397\", 30.38, 7, 388.7, 3, 19, 226, \"<invalid>\"},\n        {\"2019-12-12 00:28:00.806\", 31, 7, 392.9, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 00:35:00.023\", 31.95, 7, 399.1, 3, 19, 227, \"<invalid>\"},\n        {\"2019-12-12 00:41:19.521\", 32.57, 7, 403.2, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 00:47:17.272\", 33.31, 7, 408, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-12 00:53:55.438\", 34.15, 7, 413.5, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-12 01:00:12.045\", 34.77, 7, 417.6, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-12 01:06:54.883\", 35.61, 7, 423.1, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 00:26:15.207\", 30.9, 7, 392.2, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 00:32:33.499\", 31.53, 7, 396.3, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 00:39:12.339\", 32.26, 7, 401.1, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 00:46:56.132\", 33.2, 7, 407.3, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 00:53:13.756\", 34.04, 7, 412.8, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-12 00:59:30.074\", 34.77, 7, 417.6, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 01:06:12.634\", 35.61, 7, 423.1, 3, 19, 228, \"<invalid>\"},\n        {\"2019-12-12 01:05:51.2\", 35.51, 7, 422.5, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 01:06:33.768\", 35.61, 7, 423.1, 3, 19, 231, \"<invalid>\"},\n        {\"2019-12-12 01:08:39.832\", 35.82, 7, 424.5, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 01:10:05.088\", 35.93, 7, 425.2, 3, 19, 231, \"<invalid>\"},\n        {\"2019-12-12 01:11:28.822\", 36.24, 7, 427.3, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 01:12:52.623\", 36.35, 7, 428, 3, 19, 231, \"<invalid>\"},\n        {\"2019-12-12 01:14:17.1\", 36.45, 7, 428.6, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 01:15:40.97\", 36.66, 7, 430, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 01:17:04.812\", 36.87, 7, 431.4, 3, 19, 231, \"<invalid>\"},\n        {\"2019-12-12 01:18:29.296\", 37.08, 7, 432.8, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 01:19:53.134\", 37.18, 7, 433.5, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 01:21:17.606\", 37.39, 7, 434.8, 3, 19, 231, \"<invalid>\"},\n        {\"2019-12-12 01:22:40.779\", 37.6, 7, 436.2, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 01:25:29.126\", 37.81, 7, 437.6, 3, 19, 229, \"<invalid>\"},\n        {\"2019-12-12 01:25:49.702\", 37.92, 7, 438.3, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 01:24:26.386\", 37.71, 7, 436.9, 3, 19, 230, \"<invalid>\"},\n        {\"2019-12-12 01:30:44.002\", 38.44, 7, 441.7, 3, 19, 233, \"<invalid>\"},\n        {\"2019-12-12 01:29:19.552\", 38.34, 7, 441, 3, 19, 232, \"<invalid>\"},\n        {\"2019-12-12 01:28:16.161\", 38.23, 7, 440.3, 3, 19, 232, \"<invalid>\"},\n        {\"2019-12-12 01:29:40.624\", 38.34, 7, 441, 3, 19, 231, \"<invalid>\"}\n      ]\n    end\n\n    defp charges_fixture(:negative_energy_added, _fast_charger_type) do\n      [\n        {\"2019-10-25 09:32:52\", 29.83, 0, 1607.7, 3, 1, 233, \"<invalid>\"},\n        {\"2019-10-25 09:32:59\", 29.83, 1, 1607.7, 3, 2, 231, \"<invalid>\"},\n        {\"2019-10-25 09:33:31\", 29.93, 16, 1607.7, 3, 24, 228, \"<invalid>\"},\n        {\"2019-10-25 09:34:02\", 30.04, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:34:32\", 30.14, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:35:04\", 30.25, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:35:35\", 30.46, 17, 1607.7, 3, 24, 231, \"<invalid>\"},\n        {\"2019-10-25 09:36:07\", 30.56, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:36:38\", 30.67, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:37:09\", 30.77, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:38:26\", 31.2, 17, 1607.7, 3, 24, 231, \"<invalid>\"},\n        {\"2019-10-25 09:39:13\", 31.3, 17, 1607.7, 3, 24, 232, \"<invalid>\"},\n        {\"2019-10-25 09:39:44\", 31.51, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:40:15\", 31.62, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:40:47\", 31.72, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:41:18\", 31.93, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:41:49\", 32.04, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:42:21\", 32.15, 16, 1607.7, 3, 24, 228, \"<invalid>\"},\n        {\"2019-10-25 09:42:53\", 32.25, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:43:24\", 32.46, 16, 1607.7, 3, 24, 228, \"<invalid>\"},\n        {\"2019-10-25 09:43:56\", 32.57, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:44:27\", 32.67, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:44:58\", 32.78, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:45:29\", 32.99, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:46:00\", 33.09, 16, 1607.7, 3, 24, 228, \"<invalid>\"},\n        {\"2019-10-25 09:46:32\", 33.2, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:47:02\", 33.41, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:47:33\", 33.52, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:48:04\", 33.62, 17, 1607.7, 3, 24, 231, \"<invalid>\"},\n        {\"2019-10-25 09:48:35\", 33.73, 16, 1607.7, 3, 24, 228, \"<invalid>\"},\n        {\"2019-10-25 09:49:08\", 33.83, 17, 1607.7, 3, 24, 232, \"<invalid>\"},\n        {\"2019-10-25 09:49:39\", 34.04, 17, 1607.7, 3, 24, 231, \"<invalid>\"},\n        {\"2019-10-25 09:50:10\", 34.15, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:50:40\", 34.25, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:51:14\", 34.46, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:51:45\", 34.57, 17, 1607.7, 3, 24, 231, \"<invalid>\"},\n        {\"2019-10-25 09:52:16\", 34.67, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:52:46\", 34.78, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:53:19\", 34.99, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:53:50\", 35.1, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:54:21\", 35.2, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:54:51\", 35.31, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:55:24\", 35.52, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:55:55\", 35.62, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 09:56:26\", 35.73, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:56:57\", 35.83, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:57:28\", 35.94, 17, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 09:58:00\", 36.15, 17, 1607.7, 3, 24, 231, \"<invalid>\"},\n        {\"2019-10-25 09:58:30\", 36.26, 17, 1607.7, 3, 24, 231, \"<invalid>\"},\n        {\"2019-10-25 09:59:01\", 36.36, 17, 1607.7, 3, 24, 232, \"<invalid>\"},\n        {\"2019-10-25 09:59:33\", 36.57, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:00:04\", 36.68, 17, 1607.7, 3, 24, 231, \"<invalid>\"},\n        {\"2019-10-25 10:00:37\", 36.78, 17, 1607.7, 3, 24, 231, \"<invalid>\"},\n        {\"2019-10-25 10:01:09\", 36.89, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:01:40\", 37.1, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:02:11\", 37.2, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:02:42\", 37.31, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:03:14\", 37.52, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:03:45\", 37.63, 17, 1607.7, 3, 24, 231, \"<invalid>\"},\n        {\"2019-10-25 10:04:16\", 37.73, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:04:47\", 37.84, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:05:18\", 0, 0, 1607.7, 3, 0, 233, \"<invalid>\"},\n        {\"2019-10-25 10:05:33\", 0.11, 13, 1607.7, 3, 19, 232, \"<invalid>\"},\n        {\"2019-10-25 10:06:04\", 0.21, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:06:37\", 0.32, 17, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:07:08\", 0.42, 17, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:07:39\", 0.53, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:08:10\", 0.74, 0, 1607.7, nil, 0, 1, \"<invalid>\"},\n        {\"2019-10-25 10:08:25\", 0, 2, 1607.7, 3, 2, 233, \"<invalid>\"},\n        {\"2019-10-25 10:08:58\", 0.11, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:09:30\", 0.21, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:10:01\", 0.32, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:10:33\", 0.42, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:11:04\", 0.63, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:11:35\", 0.74, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:12:06\", 0.84, 16, 1607.7, 3, 24, 228, \"<invalid>\"},\n        {\"2019-10-25 10:12:38\", 1.05, 16, 1607.7, 3, 24, 228, \"<invalid>\"},\n        {\"2019-10-25 10:13:09\", 1.16, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:13:40\", 1.26, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:14:11\", 1.37, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:14:43\", 1.58, 16, 1607.7, 3, 24, 228, \"<invalid>\"},\n        {\"2019-10-25 10:15:14\", 1.69, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:15:45\", 1.79, 16, 1607.7, 3, 24, 227, \"<invalid>\"},\n        {\"2019-10-25 10:16:16\", 1.9, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:16:48\", 2.11, 16, 1607.7, 3, 24, 227, \"<invalid>\"},\n        {\"2019-10-25 10:17:19\", 2.21, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:17:50\", 2.32, 16, 1607.7, 3, 24, 229, \"<invalid>\"},\n        {\"2019-10-25 10:18:21\", 2.42, 17, 1607.7, 3, 24, 231, \"<invalid>\"},\n        {\"2019-10-25 10:18:53\", 2.63, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:19:25\", 2.74, 17, 1607.7, 3, 24, 230, \"<invalid>\"},\n        {\"2019-10-25 10:19:56\", 2.85, 16, 1607.7, 3, 24, 227, \"<invalid>\"},\n        {\"2019-10-25 10:20:26\", 2.95, 0, 1607.7, nil, 0, 1, \"<invalid>\"}\n      ]\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/log/log_drive_test.exs",
    "content": "defmodule TeslaMate.LogDriveTest do\n  use TeslaMate.DataCase, async: true\n\n  alias TeslaMate.Log.{Car, Position, Drive}\n  alias TeslaMate.Log\n\n  @valid_attrs %{date: DateTime.utc_now(), latitude: 0.0, longitude: 0.0}\n\n  def car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(%{efficiency: 0.153, eid: 42, model: \"M3\", vid: 42, vin: \"xxxxx\"})\n      |> Log.create_car()\n\n    car\n  end\n\n  test \"start_drive/1 returns the drive\" do\n    %Car{id: id} = car = car_fixture()\n\n    assert {:ok, %Drive{car_id: ^id}} = Log.start_drive(car)\n  end\n\n  describe \"insert_position/1\" do\n    test \"with valid data creates a position\" do\n      car = car_fixture()\n\n      assert {:ok, %Position{} = position} = Log.insert_position(car, @valid_attrs)\n      assert %DateTime{} = position.date\n      assert position.car_id == car.id\n      assert position.longitude == Decimal.new(\"0.000000\")\n      assert position.latitude == Decimal.new(\"0.000000\")\n    end\n\n    test \"with invalid data returns error changeset\" do\n      assert {:error, %Ecto.Changeset{} = changeset} =\n               Log.insert_position(%Drive{}, %{latitude: nil, longitude: nil})\n\n      assert errors_on(changeset) == %{\n               car_id: [\"can't be blank\"],\n               date: [\"can't be blank\"],\n               latitude: [\"can't be blank\"],\n               longitude: [\"can't be blank\"]\n             }\n\n      assert {:error, %Ecto.Changeset{} = changeset} =\n               Log.insert_position(%Car{}, %{latitude: nil, longitude: nil})\n\n      assert errors_on(changeset) == %{\n               car_id: [\"can't be blank\"],\n               date: [\"can't be blank\"],\n               latitude: [\"can't be blank\"],\n               longitude: [\"can't be blank\"]\n             }\n    end\n  end\n\n  describe \"close_drive/2\" do\n    test \"aggregates drive data\" do\n      car = car_fixture()\n\n      positions = [\n        %{\n          date: \"2019-04-06 10:19:02\",\n          latitude: 50.112198,\n          longitude: 11.597669,\n          speed: 23,\n          power: 15,\n          odometer: 284.85156,\n          ideal_battery_range_km: 338.8,\n          rated_battery_range_km: 308.8,\n          battery_level: 68,\n          outside_temp: 19.2,\n          inside_temp: 21.0\n        },\n        %{\n          date: \"2019-04-06 10:20:08\",\n          latitude: 50.112214,\n          longitude: 11.598471,\n          speed: 42,\n          power: -4,\n          odometer: 285.90556,\n          ideal_battery_range_km: 337.8,\n          rated_battery_range_km: 307.8,\n          battery_level: 68,\n          outside_temp: 19.0,\n          inside_temp: 21.1\n        },\n        %{\n          date: \"2019-04-06 10:21:14\",\n          latitude: 50.112167,\n          longitude: 11.599395,\n          speed: 34,\n          power: -7,\n          odometer: 286.969561,\n          ideal_battery_range_km: 336.8,\n          rated_battery_range_km: 306.8,\n          battery_level: 68,\n          outside_temp: 21.0,\n          inside_temp: 21.2\n        },\n        %{\n          date: \"2019-04-06 10:22:20\",\n          latitude: 50.112118,\n          longitude: 11.599919,\n          speed: 21,\n          power: 1,\n          odometer: 287.00556,\n          ideal_battery_range_km: 335.8,\n          rated_battery_range_km: 305.8,\n          battery_level: 68,\n          outside_temp: 18,\n          inside_temp: 20.9\n        },\n        %{\n          date: \"2019-04-06 10:23:25\",\n          latitude: 50.11196,\n          longitude: 11.600445,\n          speed: 39,\n          power: 36,\n          odometer: 288.045561,\n          ideal_battery_range_km: 334.8,\n          rated_battery_range_km: 304.8,\n          battery_level: 68,\n          outside_temp: 18.0,\n          inside_temp: 21.0\n        }\n      ]\n\n      assert {:ok, drive} = Log.start_drive(car)\n\n      for p <- positions do\n        assert {:ok, _} = Log.insert_position(drive, p)\n      end\n\n      assert {:ok, drive} = Log.close_drive(drive)\n\n      assert {:ok, drive.end_date, 0} == DateTime.from_iso8601(\"2019-04-06 10:23:25.000000Z\")\n      assert drive.outside_temp_avg == Decimal.from_float(19.0)\n      assert drive.inside_temp_avg == Decimal.from_float(21.0)\n      assert drive.speed_max == 42\n      assert drive.power_max == 36.0\n      assert drive.power_min == -7.0\n      assert drive.start_km == 284.85156\n      assert drive.end_km == 288.045561\n      assert drive.distance == 3.1940010000000143\n      assert drive.start_ideal_range_km == Decimal.new(\"338.80\")\n      assert drive.end_ideal_range_km == Decimal.new(\"334.80\")\n      assert drive.start_rated_range_km == Decimal.new(\"308.80\")\n      assert drive.end_rated_range_km == Decimal.new(\"304.80\")\n      assert drive.duration_min == 4\n      assert is_number(drive.start_address_id)\n      assert addr_id = drive.start_address_id\n      assert ^addr_id = drive.end_address_id\n    end\n\n    test \"deletes a drive and if it has no positions\" do\n      car = car_fixture()\n\n      assert {:ok, %Drive{} = drive} = Log.start_drive(car)\n      assert {:ok, %Drive{id: id, distance: +0.0, duration_min: 0}} = Log.close_drive(drive)\n      assert nil == Repo.get(Drive, id)\n    end\n\n    test \"deletes a drive and its position if it has only one position\" do\n      car = car_fixture()\n\n      positions = [\n        %{date: \"2019-04-06 10:00:00\", latitude: +0.0, longitude: +0.0, odometer: 100}\n      ]\n\n      assert {:ok, drive} = Log.start_drive(car)\n\n      for p <- positions do\n        assert {:ok, _} = Log.insert_position(drive, p)\n      end\n\n      assert {:ok, %Drive{id: id, distance: +0.0, duration_min: 0}} = Log.close_drive(drive)\n      assert nil == Repo.get(Drive, id)\n    end\n\n    test \"deletes a drive and its position if the distance driven is 0\" do\n      car = car_fixture()\n\n      positions = [\n        %{\n          date: \"2019-04-06 10:00:00\",\n          latitude: +0.0,\n          longitude: +0.0,\n          odometer: 100,\n          ideal_battery_range_km: 300\n        },\n        %{\n          date: \"2019-04-06 10:05:00\",\n          latitude: +0.0,\n          longitude: +0.0,\n          odometer: 100,\n          ideal_battery_range_km: 300\n        }\n      ]\n\n      assert {:ok, drive} = Log.start_drive(car)\n\n      for p <- positions do\n        assert {:ok, _} = Log.insert_position(drive, p)\n      end\n\n      assert {:ok, %Drive{id: id, distance: +0.0}} = Log.close_drive(drive)\n      assert nil == Repo.get(Drive, id)\n    end\n  end\n\n  describe \"geo-fencing\" do\n    alias TeslaMate.Locations.GeoFence\n    alias TeslaMate.Locations\n\n    def geofence_fixture(attrs \\\\ %{}) do\n      {:ok, geofence} =\n        attrs\n        |> Enum.into(%{name: \"foo\", latitude: 52.514521, longitude: 13.350144, radius: 42})\n        |> Locations.create_geofence()\n\n      geofence\n    end\n\n    test \"links to the nearby geo-fence\" do\n      car = car_fixture()\n\n      positions = [\n        %{\n          date: \"2019-04-06 10:19:02\",\n          latitude: 50.112198,\n          longitude: 11.597669,\n          speed: 23,\n          power: 15,\n          odometer: 284.85156,\n          ideal_battery_range_km: 338.8,\n          rated_battery_range_km: 308.8,\n          battery_level: 68,\n          outside_temp: 19.2,\n          inside_temp: 21.0\n        },\n        %{\n          date: \"2019-04-06 10:23:25\",\n          latitude: 49.11196,\n          longitude: 11.222,\n          speed: 39,\n          power: 36,\n          odometer: 288.045561,\n          ideal_battery_range_km: 334.8,\n          rated_battery_range_km: 304.8,\n          battery_level: 68,\n          outside_temp: 18.0,\n          inside_temp: 21.0\n        }\n      ]\n\n      ###\n\n      assert %GeoFence{id: start_id} =\n               geofence_fixture(%{latitude: 50.1121, longitude: 11.597, radius: 100})\n\n      assert %GeoFence{id: end_id} =\n               geofence_fixture(%{latitude: 49.11161, longitude: 11.222, radius: 200})\n\n      {:ok, drive} = Log.start_drive(car)\n\n      for p <- positions,\n          do: {:ok, _} = Log.insert_position(drive, p)\n\n      assert {:ok, drive} = Log.close_drive(drive)\n      assert drive.start_geofence_id == start_id\n      assert drive.end_geofence_id == end_id\n    end\n  end\n\n  describe \"elevation calculation\" do\n    test \"calculates ascent and descent correctly\" do\n      car = car_fixture()\n\n      positions = [\n        %{\n          date: \"2019-04-06 10:19:02\",\n          latitude: 50.112198,\n          longitude: 11.597669,\n          ideal_battery_range_km: 338.8,\n          speed: 23,\n          odometer: 284.85156\n        },\n        %{\n          date: \"2019-04-06 10:20:08\",\n          latitude: 50.112214,\n          longitude: 11.598471,\n          elevation: 150,\n          speed: 42,\n          odometer: 285.90556\n        },\n        %{\n          date: \"2019-04-06 10:21:14\",\n          latitude: 50.112167,\n          longitude: 11.599395,\n          elevation: 120,\n          speed: 34,\n          odometer: 286.969561\n        },\n        %{\n          date: \"2019-04-06 10:22:20\",\n          latitude: 50.112118,\n          longitude: 11.599919,\n          elevation: 180,\n          speed: 21,\n          odometer: 287.00556\n        }\n      ]\n\n      assert {:ok, drive} = Log.start_drive(car)\n\n      for p <- positions do\n        assert {:ok, _} = Log.insert_position(drive, p)\n      end\n\n      assert {:ok, drive} = Log.close_drive(drive)\n\n      assert drive.ascent == 60\n      assert drive.descent == 30\n    end\n\n    test \"handles single elevation point gracefully\" do\n      car = car_fixture()\n\n      positions = [\n        %{\n          date: \"2019-04-06 10:19:02\",\n          latitude: 50.112198,\n          longitude: 11.597669,\n          elevation: 100,\n          speed: 23,\n          odometer: 284.85156\n        },\n        %{\n          date: \"2019-04-06 10:20:08\",\n          latitude: 50.112214,\n          longitude: 11.598471,\n          ideal_battery_range_km: 338.8,\n          speed: 42,\n          odometer: 285.90556\n        }\n      ]\n\n      assert {:ok, drive} = Log.start_drive(car)\n\n      for p <- positions do\n        assert {:ok, _} = Log.insert_position(drive, p)\n      end\n\n      assert {:ok, drive} = Log.close_drive(drive)\n\n      assert drive.ascent == 0\n      assert drive.descent == 0\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/log/log_state_test.exs",
    "content": "defmodule TeslaMate.LogStateTest do\n  use TeslaMate.DataCase, async: true\n\n  alias TeslaMate.Log.{State, Car}\n  alias TeslaMate.Log\n\n  def car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(%{efficiency: 0.153, eid: 42, model: \"M3\", vid: 42, vin: \"xxxxx\"})\n      |> Log.create_car()\n\n    car\n  end\n\n  describe \"create_state/1 \" do\n    test \"with valid data creates a state\" do\n      car = car_fixture()\n      assert {:ok, %State{} = state} = Log.start_state(car, :online)\n      assert state.car_id == car.id\n      assert %DateTime{} = state.start_date\n      assert state.end_date == nil\n      assert state.state == :online\n    end\n\n    test \"does not create a new state if the state is already open\" do\n      car = car_fixture()\n\n      assert {:ok, %State{state: :online, start_date: start_date, end_date: nil}} =\n               Log.start_state(car, :online)\n\n      assert {:ok, %State{state: :online, start_date: ^start_date, end_date: nil}} =\n               Log.start_state(car, :online)\n    end\n\n    test \"completes the previous state if the state changed\" do\n      car = car_fixture()\n\n      assert {:ok, %State{state: :online, start_date: start_date, end_date: nil}} =\n               Log.start_state(car, :online)\n\n      {:ok, %State{start_date: end_date}} =\n        TestHelper.eventually(\n          fn ->\n            assert {:ok, %State{state: :offline, end_date: nil}} = Log.start_state(car, :offline)\n          end,\n          delay: 10\n        )\n\n      assert [\n               %State{state: :online, start_date: ^start_date, end_date: ^end_date},\n               %State{state: :offline, start_date: ^end_date, end_date: nil}\n             ] = Repo.all(State)\n    end\n\n    test \"handles multiple cars\" do\n      car = car_fixture()\n\n      another_car = car_fixture(eid: 43, vid: 43, vin: \"yyyyy\")\n\n      assert {:ok, %State{state: :online, start_date: s0, end_date: nil}} =\n               Log.start_state(car, :online)\n\n      assert {:ok, %State{state: :online, start_date: s1, end_date: nil}} =\n               Log.start_state(another_car, :online)\n\n      Process.sleep(1010)\n\n      assert {:ok, %State{state: :asleep, start_date: e1, end_date: nil}} =\n               Log.start_state(another_car, :asleep)\n\n      assert {:ok, %State{state: :offline, start_date: e0, end_date: nil}} =\n               Log.start_state(car, :offline)\n\n      assert [state_0, state_1, state_2, state_3] = State |> order_by(asc: :id) |> Repo.all()\n      assert %State{state: :online, start_date: ^s0, end_date: ^e0} = state_0\n      assert %State{state: :online, start_date: ^s1, end_date: ^e1} = state_1\n      assert %State{state: :asleep, start_date: ^e1, end_date: nil} = state_2\n      assert %State{state: :offline, start_date: ^e0, end_date: nil} = state_3\n    end\n\n    test \"with invalid data returns error changeset\" do\n      assert {:error, %Ecto.Changeset{} = changeset} = Log.start_state(%Car{id: 404}, :foo)\n      assert errors_on(changeset) == %{state: [\"is invalid\"]}\n\n      assert {:error, %Ecto.Changeset{} = changeset} = Log.start_state(%Car{id: 404}, :asleep)\n      assert errors_on(changeset) == %{car_id: [\"does not exist\"]}\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/log/log_update_test.exs",
    "content": "defmodule TeslaMate.LogUpdateTest do\n  use TeslaMate.DataCase, async: true\n\n  alias TeslaMate.Log.{Car, Update}\n  alias TeslaMate.Log\n\n  def car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(%{efficiency: 0.153, eid: 42, model: \"M3\", vid: 42, vin: \"xxxxx\"})\n      |> Log.create_car()\n\n    car\n  end\n\n  describe \"start_update/2\" do\n    test \"creates an update entry with a start_date\" do\n      %Car{id: id} = car = car_fixture()\n\n      assert {:ok, %Update{car_id: ^id, start_date: %DateTime{}}} = Log.start_update(car)\n    end\n\n    test \"with invalid data returns error changeset\" do\n      assert {:error, %Ecto.Changeset{} = changeset} = Log.start_update(%Car{})\n      assert errors_on(changeset) == %{car_id: [\"can't be blank\"]}\n    end\n  end\n\n  describe \"cancel_update/1\" do\n    test \"deletes an update\" do\n      car = car_fixture()\n\n      assert {:ok, update} = Log.start_update(car)\n      assert {:ok, %Update{} = update} = Log.cancel_update(update)\n      assert nil == Repo.get(Update, update.id)\n    end\n  end\n\n  describe \"finish_update/1\" do\n    test \"logs an update including its version\" do\n      car = car_fixture()\n\n      assert {:ok, update} = Log.start_update(car)\n\n      version = \"2019.8.5 3aaa23d\"\n      assert {:ok, %Update{} = update} = Log.finish_update(update, version)\n\n      assert %DateTime{} = update.start_date\n      assert %DateTime{} = update.end_date\n      assert update.version == version\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/mqtt/pubsub/vehicle_subscriber_test.exs",
    "content": "defmodule TeslaMate.Mqtt.PubSub.VehicleSubscriberTest do\n  use TeslaMate.DataCase, async: true\n\n  alias TeslaMate.Mqtt.PubSub.VehicleSubscriber\n  alias TeslaMate.Vehicles.Vehicle.Summary\n  alias TeslaMate.Locations.GeoFence\n\n  defp start_subscriber(name, car_id, namespace \\\\ nil) do\n    publisher_name = :\"mqtt_publisher_#{name}\"\n    vehicles_name = :\"vehicles_#{name}\"\n\n    {:ok, _pid} = start_supervised({MqttPublisherMock, name: publisher_name, pid: self()})\n    {:ok, _pid} = start_supervised({VehiclesMock, name: vehicles_name, pid: self()})\n\n    start_supervised(\n      {VehicleSubscriber,\n       [\n         name: name,\n         car_id: car_id,\n         namespace: namespace,\n         deps_publisher: {MqttPublisherMock, publisher_name},\n         deps_vehicles: {VehiclesMock, vehicles_name}\n       ]}\n    )\n  end\n\n  test \"publishes vehicle data\", %{test: name} do\n    {:ok, pid} = start_subscriber(name, 0)\n\n    assert_receive {VehiclesMock, {:subscribe_to_summary, 0}}\n\n    summary = %Summary{\n      healthy: true,\n      display_name: \"Foo\",\n      odometer: 42_000,\n      windows_open: true,\n      doors_open: true,\n      shift_state: \"D\",\n      state: :online,\n      since: DateTime.utc_now(),\n      latitude: 37.889602,\n      longitude: 41.129182,\n      power: -9,\n      speed: 40,\n      heading: 340,\n      outside_temp: 15,\n      inside_temp: 20.0,\n      locked: true,\n      sentry_mode: false,\n      plugged_in: false,\n      version: \"2019.42\",\n      update_available: false,\n      update_version: \"2019.43\",\n      is_preconditioning: true,\n      is_user_present: false,\n      is_climate_on: true,\n      geofence: %GeoFence{id: 0, name: \"Home\", latitude: 0.0, longitude: 0.0, radius: 20},\n      model: \"S\",\n      trim_badging: \"P100D\",\n      exterior_color: \"White\",\n      spoiler_type: \"None\",\n      wheel_type: \"AeroTurbine19\",\n      frunk_open: true,\n      trunk_open: false,\n      elevation: 100\n    }\n\n    send(pid, summary)\n\n    for {key, val} <- Map.from_struct(summary),\n        not is_nil(val) and key not in [:since, :geofence] do\n      topic = \"teslamate/cars/0/#{key}\"\n      data = to_string(val)\n      retain = key not in [:healthy]\n      assert_receive {MqttPublisherMock, {:publish, ^topic, ^data, [retain: ^retain, qos: 1]}}\n    end\n\n    iso_time = DateTime.to_iso8601(summary.since)\n\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/cars/0/since\", ^iso_time, [retain: true, qos: 1]}}\n\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/cars/0/geofence\", \"Home\", [retain: true, qos: 1]}}\n\n    for key <- [\n          :charge_energy_added,\n          :charger_actual_current,\n          :charger_phases,\n          :charger_power,\n          :charger_voltage,\n          :scheduled_charging_start_time,\n          :time_to_full_charge\n        ] do\n      topic = \"teslamate/cars/0/#{key}\"\n      assert_receive {MqttPublisherMock, {:publish, ^topic, \"\", [retain: true, qos: 1]}}\n    end\n\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/cars/0/location\", data, [retain: true, qos: 1]}}\n\n    assert Jason.decode!(data) == %{\n             \"latitude\" => 37.889602,\n             \"longitude\" => 41.129182\n           }\n\n    # Published as nil\n    for key <- [\n          :active_route_destination,\n          :active_route_longitude,\n          :active_route_latitude\n        ] do\n      topic = \"teslamate/cars/0/#{key}\"\n      assert_receive {MqttPublisherMock, {:publish, ^topic, \"nil\", [retain: true, qos: 1]}}\n    end\n\n    # Published as nil\n    for key <- [\n          :active_route\n        ] do\n      topic = \"teslamate/cars/0/#{key}\"\n      assert_receive {MqttPublisherMock, {:publish, ^topic, data, [retain: true, qos: 1]}}\n      assert Jason.decode!(data) == %{\"error\" => \"No active route available\"}\n    end\n\n    # The healthy topic is published with retain: true to clean up previously retained messages\n    # See: https://github.com/teslamate-org/teslamate/pull/4817\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/cars/0/healthy\", \"\", [retain: true, qos: 1]}}\n\n    refute_receive _\n  end\n\n  test \"publishes charging data\", %{test: name} do\n    {:ok, pid} = start_subscriber(name, 0)\n\n    assert_receive {VehiclesMock, {:subscribe_to_summary, 0}}\n\n    summary = %Summary{\n      plugged_in: false,\n      battery_level: 60.0,\n      usable_battery_level: 59,\n      charge_energy_added: 25,\n      charge_limit_soc: 90,\n      charge_port_door_open: false,\n      charger_actual_current: 42,\n      charger_phases: 3,\n      charger_power: 50,\n      charger_voltage: 16,\n      est_battery_range_km: 220.05,\n      ideal_battery_range_km: 230.52,\n      rated_battery_range_km: 230.52,\n      scheduled_charging_start_time: DateTime.utc_now() |> DateTime.add(60 * 60 * 10, :second),\n      time_to_full_charge: 2.5\n    }\n\n    send(pid, summary)\n\n    # The healthy topic is published with retain: true to clean up previously retained messages\n    # See: https://github.com/teslamate-org/teslamate/pull/4817\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/cars/0/healthy\", \"\", [retain: true, qos: 1]}}\n\n    for {key, val} <- Map.from_struct(summary),\n        not is_nil(val) and key != :scheduled_charging_start_time do\n      topic = \"teslamate/cars/0/#{key}\"\n      data = to_string(val)\n      retain = key not in [:healthy]\n      assert_receive {MqttPublisherMock, {:publish, ^topic, ^data, [retain: ^retain, qos: 1]}}\n    end\n\n    # Formatted dates\n    iso_time = DateTime.to_iso8601(summary.scheduled_charging_start_time)\n\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/cars/0/scheduled_charging_start_time\", ^iso_time,\n                     [retain: true, qos: 1]}}\n\n    # Always published\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/cars/0/shift_state\", \"\", [retain: true, qos: 1]}}\n\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/cars/0/geofence\", \"\", [retain: true, qos: 1]}}\n\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/cars/0/trim_badging\", \"\", [retain: true, qos: 1]}}\n\n    # Published as nil\n    for key <- [\n          :active_route_destination,\n          :active_route_longitude,\n          :active_route_latitude\n        ] do\n      topic = \"teslamate/cars/0/#{key}\"\n      assert_receive {MqttPublisherMock, {:publish, ^topic, \"nil\", [retain: true, qos: 1]}}\n    end\n\n    # Published as nil\n    for key <- [\n          :active_route\n        ] do\n      topic = \"teslamate/cars/0/#{key}\"\n      assert_receive {MqttPublisherMock, {:publish, ^topic, data, [retain: true, qos: 1]}}\n      assert Jason.decode!(data) == %{\"error\" => \"No active route available\"}\n    end\n\n    # The healthy topic is always published without retain to prevent stale status\n    # See: https://github.com/teslamate-org/teslamate/pull/4817\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/cars/0/healthy\", \"\", [retain: false, qos: 1]}}\n\n    refute_receive _\n  end\n\n  test \"publishes geofence only if it has changed\", %{test: name} do\n    {:ok, pid} = start_subscriber(name, 0)\n\n    assert_receive {VehiclesMock, {:subscribe_to_summary, 0}}\n\n    geofence = %GeoFence{id: 0, name: \"Home\", latitude: 0.0, longitude: 0.0, radius: 20}\n    other_geofence = %GeoFence{id: 0, name: \"Work\", latitude: 0.0, longitude: 0.0, radius: 20}\n\n    # Send geofence\n    send(pid, %Summary{geofence: geofence, version: \"1\"})\n    assert_receive {MqttPublisherMock, {:publish, \"teslamate/cars/0/geofence\", \"Home\", _}}\n    assert_receive {MqttPublisherMock, {:publish, \"teslamate/cars/0/version\", \"1\", _}}\n\n    # Send geofence again and expect no message\n    send(pid, %Summary{geofence: geofence, version: \"2\"})\n    refute_receive {MqttPublisherMock, {:publish, \"teslamate/cars/0/geofence\", _, _}}\n    assert_receive {MqttPublisherMock, {:publish, \"teslamate/cars/0/version\", \"2\", _}}\n\n    # Send another geofence\n    send(pid, %Summary{geofence: other_geofence, version: \"3\"})\n    assert_receive {MqttPublisherMock, {:publish, \"teslamate/cars/0/geofence\", \"Work\", _}}\n    assert_receive {MqttPublisherMock, {:publish, \"teslamate/cars/0/version\", \"3\", _}}\n  end\n\n  test \"allows namespaces\", %{test: name} do\n    {:ok, pid} = start_subscriber(name, 0, \"account_0\")\n\n    assert_receive {VehiclesMock, {:subscribe_to_summary, 0}}\n\n    summary = %Summary{\n      display_name: \"Foo\",\n      state: :online\n    }\n\n    send(pid, summary)\n\n    # The healthy topic is published with retain: true to clean up previously retained messages\n    # See: https://github.com/teslamate-org/teslamate/pull/4817\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/account_0/cars/0/healthy\", \"\", [retain: true, qos: 1]}}\n\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/account_0/cars/0/display_name\", \"Foo\",\n                     [retain: true, qos: 1]}}\n\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/account_0/cars/0/state\", \"online\",\n                     [retain: true, qos: 1]}}\n\n    # Always published\n    for key <- [\n          :charge_energy_added,\n          :charger_actual_current,\n          :charger_phases,\n          :charger_power,\n          :charger_voltage,\n          :scheduled_charging_start_time,\n          :time_to_full_charge,\n          :shift_state,\n          :geofence,\n          :trim_badging\n        ] do\n      topic = \"teslamate/account_0/cars/0/#{key}\"\n      assert_receive {MqttPublisherMock, {:publish, ^topic, \"\", [retain: true, qos: 1]}}\n    end\n\n    # Published as nil\n    for key <- [\n          :active_route_destination,\n          :active_route_longitude,\n          :active_route_latitude\n        ] do\n      topic = \"teslamate/account_0/cars/0/#{key}\"\n      assert_receive {MqttPublisherMock, {:publish, ^topic, \"nil\", [retain: true, qos: 1]}}\n    end\n\n    # Published as nil\n    for key <- [\n          :active_route\n        ] do\n      topic = \"teslamate/account_0/cars/0/#{key}\"\n      assert_receive {MqttPublisherMock, {:publish, ^topic, data, [retain: true, qos: 1]}}\n      assert Jason.decode!(data) == %{\"error\" => \"No active route available\"}\n    end\n\n    # The healthy topic is always published without retain to prevent stale status\n    # See: https://github.com/teslamate-org/teslamate/pull/4817\n    assert_receive {MqttPublisherMock,\n                    {:publish, \"teslamate/account_0/cars/0/healthy\", \"\", [retain: false, qos: 1]}}\n\n    refute_receive _\n  end\nend\n"
  },
  {
    "path": "test/teslamate/settings_test.exs",
    "content": "defmodule TeslaMate.SettingsTest do\n  use TeslaMate.DataCase, async: false\n\n  alias TeslaMate.Settings.{GlobalSettings, CarSettings}\n  alias TeslaMate.{Settings, Log}\n\n  import TestHelper, only: [decimal: 1]\n\n  defp car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(%{\n        efficiency: 0.153,\n        eid: 42,\n        model: \"S\",\n        vid: 42,\n        name: \"foo\",\n        trim_badging: \"P100D\",\n        vin: \"12345F\"\n      })\n      |> Log.create_car()\n\n    car\n  end\n\n  describe \"global_settings\" do\n    @update_attrs %{\n      unit_of_length: :mi,\n      unit_of_temperature: :F,\n      preferred_range: :rated,\n      base_url: \"https://testlamate.exmpale.com\",\n      grafana_url: \"https://grafana.exmpale.com\",\n      language: \"de\",\n      theme_mode: :dark\n    }\n    @invalid_attrs %{\n      unit_of_length: nil,\n      unit_of_temperature: nil,\n      preferred_range: nil,\n      base_url: nil,\n      grafana_url: nil,\n      language: \"foo\",\n      theme_mode: nil\n    }\n\n    test \"get_global_settings!/0 returns the settings\" do\n      assert settings = Settings.get_global_settings!()\n      assert settings.unit_of_length == :km\n      assert settings.unit_of_temperature == :C\n      assert settings.preferred_range == :rated\n      assert settings.base_url == nil\n      assert settings.grafana_url == nil\n      assert settings.language == \"en\"\n      assert settings.theme_mode == :system\n    end\n\n    test \"update_global_settings/2 with valid data updates the settings\" do\n      settings = Settings.get_global_settings!()\n\n      assert {:ok, %GlobalSettings{} = settings} =\n               Settings.update_global_settings(settings, @update_attrs)\n\n      assert settings.unit_of_length == :mi\n      assert settings.unit_of_temperature == :F\n      assert settings.preferred_range == :rated\n      assert settings.base_url == \"https://testlamate.exmpale.com\"\n      assert settings.grafana_url == \"https://grafana.exmpale.com\"\n      assert settings.language == \"de\"\n      assert settings.theme_mode == :dark\n    end\n\n    test \"update_global_settings/2 with invalid data returns error changeset\" do\n      settings = Settings.get_global_settings!()\n\n      assert {:error, %Ecto.Changeset{} = changeset} =\n               Settings.update_global_settings(settings, @invalid_attrs)\n\n      assert errors_on(changeset) == %{\n               unit_of_length: [\"can't be blank\"],\n               unit_of_temperature: [\"can't be blank\"],\n               preferred_range: [\"can't be blank\"],\n               language: [\"is not supported\"],\n               theme_mode: [\"can't be blank\"]\n             }\n\n      assert ^settings = Settings.get_global_settings!()\n    end\n\n    test \"validate the base url\" do\n      settings = Settings.get_global_settings!()\n\n      assert {:ok, %GlobalSettings{base_url: \"http://example.com\"}} =\n               Settings.update_global_settings(settings, %{base_url: \"http://example.com/\"})\n\n      assert {:ok, %GlobalSettings{base_url: \"http://example.com/foo\"}} =\n               Settings.update_global_settings(settings, %{base_url: \"  http://example.com/foo/ \"})\n\n      cases = [\n        {\"ftp://example\", \"invalid scheme\"},\n        {\"example.com\", \"is missing a scheme (e.g. https)\"},\n        {\"https://\", \"is missing a host\"}\n      ]\n\n      for {base_url, message} <- cases do\n        assert {:error, changeset} =\n                 Settings.update_global_settings(settings, %{base_url: base_url})\n\n        assert errors_on(changeset) == %{base_url: [message]}\n      end\n    end\n\n    test \"empty strings become nil\" do\n      assert {:ok,\n              %GlobalSettings{\n                base_url: \"https://testlamate.exmpale.com\",\n                grafana_url: \"https://grafana.exmpale.com\"\n              } = settings} =\n               Settings.get_global_settings!()\n               |> Settings.update_global_settings(@update_attrs)\n\n      assert {:ok, %GlobalSettings{grafana_url: nil, base_url: nil}} =\n               Settings.update_global_settings(settings, %{grafana_url: \"     \", base_url: \"\"})\n    end\n  end\n\n  describe \"car settings\" do\n    @update_attrs %{\n      suspend_min: 60,\n      suspend_after_idle_min: 60,\n      req_not_unlocked: true,\n      free_supercharging: true,\n      use_streaming_api: false,\n      enabled: true,\n      lfp_battery: false\n    }\n    @invalid_attrs %{\n      suspend_min: nil,\n      suspend_after_idle_min: nil,\n      req_not_unlocked: nil,\n      free_supercharging: nil,\n      use_streaming_api: nil,\n      enabled: nil,\n      lfp_battery: nil\n    }\n\n    test \"get_car_settings/0 returns the settings\" do\n      car = car_fixture()\n\n      assert [settings] = Settings.get_car_settings()\n      assert settings.id == car.settings_id\n      assert settings.suspend_min == 21\n      assert settings.suspend_after_idle_min == 15\n      assert settings.req_not_unlocked == false\n      assert settings.free_supercharging == false\n      assert settings.use_streaming_api == true\n      assert settings.enabled == true\n      assert settings.lfp_battery == false\n    end\n\n    test \"update_car_settings/2 with valid data updates the settings\" do\n      car = car_fixture()\n      [settings] = Settings.get_car_settings()\n\n      assert {:ok, %CarSettings{} = settings} =\n               Settings.update_car_settings(settings, @update_attrs)\n\n      assert settings.id == car.settings_id\n      assert settings.suspend_min == 60\n      assert settings.suspend_after_idle_min == 60\n      assert settings.req_not_unlocked == true\n      assert settings.free_supercharging == true\n      assert settings.use_streaming_api == false\n      assert settings.enabled == true\n      assert settings.lfp_battery == false\n    end\n\n    test \"update_car_settings/2 publishes the settings\" do\n      car = car_fixture()\n      :ok = Settings.subscribe_to_changes(car)\n\n      assert [settings] = Settings.get_car_settings()\n\n      assert {:ok, %CarSettings{} = settings} =\n               Settings.update_car_settings(settings, @update_attrs)\n\n      assert_receive ^settings\n    end\n\n    test \"update_car_settings/2 with invalid data returns error changeset\" do\n      _car = car_fixture()\n      [settings] = Settings.get_car_settings()\n\n      assert {:error, %Ecto.Changeset{} = changeset} =\n               Settings.update_car_settings(settings, @invalid_attrs)\n\n      assert errors_on(changeset) == %{\n               req_not_unlocked: [\"can't be blank\"],\n               suspend_after_idle_min: [\"can't be blank\"],\n               suspend_min: [\"can't be blank\"],\n               free_supercharging: [\"can't be blank\"],\n               use_streaming_api: [\"can't be blank\"],\n               enabled: [\"can't be blank\"],\n               lfp_battery: [\"can't be blank\"]\n             }\n\n      assert [^settings] = Settings.get_car_settings()\n    end\n  end\n\n  describe \"language\" do\n    alias TeslaMate.Locations.Address\n    alias TeslaMate.Locations\n\n    test \"refreshes all addresses when changfing the language\" do\n      settings = Settings.get_global_settings!()\n\n      {:ok, %Address{}} =\n        Locations.create_address(%{\n          display_name: \"foo\",\n          name: \"0\",\n          latitude: 0,\n          longitude: 0,\n          state: \"Berlin\",\n          country: \"Germany\",\n          osm_id: 0,\n          osm_type: \"way\",\n          raw: %{}\n        })\n\n      {:ok, %Address{}} =\n        Locations.create_address(%{\n          display_name: \"bar\",\n          name: \"1\",\n          latitude: 0,\n          longitude: 0,\n          state: \"Berlin\",\n          country: \"Germany\",\n          osm_id: 1,\n          osm_type: \"way\",\n          raw: %{}\n        })\n\n      assert {:ok, _} = Settings.update_global_settings(settings, %{language: \"nl\"})\n\n      assert [\n               %Address{\n                 name: \"0\",\n                 state: \"Berlin_nl\",\n                 country: \"nl\",\n                 latitude: decimal(\"0.000000\"),\n                 longitude: decimal(\"0.000000\")\n               },\n               %Address{\n                 name: \"1\",\n                 state: \"Berlin_nl\",\n                 country: \"nl\",\n                 latitude: decimal(\"0.000000\"),\n                 longitude: decimal(\"0.000000\")\n               }\n             ] = Repo.all(from a in Address, order_by: 1)\n    end\n\n    @tag :capture_log\n    test \"returns error tuple\" do\n      settings = Settings.get_global_settings!()\n\n      {:ok, %Address{} = a0} =\n        Locations.create_address(%{\n          display_name: \"foo\",\n          name: \"0\",\n          latitude: 0,\n          longitude: 0,\n          state: \"Berlin\",\n          country: \"Germany\",\n          osm_id: 0,\n          osm_type: \"way\",\n          raw: %{}\n        })\n\n      {:ok, %Address{} = a1} =\n        Locations.create_address(%{\n          display_name: \"error\",\n          name: \"1\",\n          latitude: 0,\n          longitude: 0,\n          state: \"Berlin\",\n          country: \"Germany\",\n          osm_id: 1,\n          osm_type: \"way\",\n          raw: %{}\n        })\n\n      assert {:error, :boom} = Settings.update_global_settings(settings, %{language: \"nl\"})\n\n      zero = Decimal.new(\"0.000000\")\n      assert [r0, r1] = Repo.all(from a in Address, order_by: 1)\n      assert r0 == %Address{a0 | latitude: zero, longitude: zero}\n      assert r1 == %Address{a1 | latitude: zero, longitude: zero}\n    end\n  end\n\n  describe \"efficiencies\" do\n    alias TeslaMate.Log.{Car, ChargingProcess, Position}\n    alias TeslaMate.Log\n\n    test \"triggers a recalculaten of efficiencies if the preferred range changes\" do\n      %Car{efficiency: nil} = car = car_fixture(%{efficiency: nil})\n\n      data = [\n        {293.9, 293.9, nil, nil, 0.0, 59, 59, 0},\n        {293.2, 303.4, nil, nil, 1.65, 59, 61, 33},\n        {302.5, 302.5, nil, nil, 0.0, 61, 61, 0},\n        {302.5, 302.5, nil, nil, 0.0, 61, 61, 0},\n        {302.1, 309.5, nil, nil, 1.14, 61, 62, 23},\n        {71.9, 350.5, nil, nil, 42.21, 14, 70, 27},\n        {181.0, 484.0, nil, nil, 46.13, 36, 97, 46},\n        {312.3, 324.9, nil, nil, 1.75, 63, 65, 6},\n        {325.6, 482.7, nil, nil, 23.71, 65, 97, 34},\n        {80.5, 412.4, nil, nil, 50.63, 16, 83, 70},\n        {259.7, 426.2, nil, nil, 25.56, 52, 85, 36},\n        {105.5, 361.4, nil, nil, 38.96, 21, 72, 22},\n        {143.1, 282.5, nil, nil, 21.11, 29, 57, 15},\n        {111.6, 406.9, nil, nil, 44.93, 22, 82, 36},\n        {115.0, 453.2, nil, nil, 51.49, 23, 91, 38},\n        {112.5, 112.5, 111.5, 112.5, 0.0, 23, 23, 1},\n        {109.7, 139.7, 108.7, 139.7, 4.57, 22, 28, 26},\n        {63.9, 142.3, 64.9, 142.3, 11.82, 13, 29, 221},\n        {107.9, 450.1, 108.9, 450.1, 52.1, 22, 90, 40}\n      ]\n\n      :ok = insert_charging_processes(car, data)\n      settings = Settings.get_global_settings!()\n\n      # no change\n      assert {:ok, settings} =\n               Settings.update_global_settings(settings, %{preferred_range: :rated})\n\n      assert %Car{efficiency: nil} = Log.get_car!(car.id)\n\n      # changed\n      assert {:ok, settings} =\n               Settings.update_global_settings(settings, %{preferred_range: :ideal})\n\n      assert %Car{efficiency: 0.152} = Log.get_car!(car.id)\n\n      # changed back\n      assert {:ok, _settings} =\n               Settings.update_global_settings(settings, %{preferred_range: :rated})\n\n      assert %Car{efficiency: 0.15} = Log.get_car!(car.id)\n    end\n\n    @valid_pos_attrs %{date: DateTime.utc_now(), latitude: 0.0, longitude: 0.0}\n\n    defp insert_charging_processes(car, data) do\n      {:ok, %Position{id: position_id}} = Log.insert_position(car, @valid_pos_attrs)\n\n      data =\n        for {sir, eir, srr, err, ca, sl, el, d} <- data do\n          %{\n            car_id: car.id,\n            start_date: DateTime.utc_now(),\n            position_id: position_id,\n            start_ideal_range_km: sir,\n            end_ideal_range_km: eir,\n            start_rated_range_km: srr,\n            end_rated_range_km: err,\n            charge_energy_added: ca,\n            start_battery_level: sl,\n            end_battery_level: el,\n            duration_min: d\n          }\n        end\n\n      {_, nil} = Repo.insert_all(ChargingProcess, data)\n\n      :ok\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/terrain/update_positions_test.exs",
    "content": "defmodule TeslaMate.Terrain.UpdatePositionsTest do\n  use TeslaMate.DataCase\n\n  alias TeslaMate.{Log, Terrain}\n  alias TeslaMate.Log.Position\n\n  defp start_terrain(name, responses) do\n    srtm_name = :\"srtm_#{name}\"\n\n    {:ok, _pid} = start_supervised({SRTMMock, name: srtm_name, pid: self(), responses: responses})\n\n    {:ok, _} =\n      start_supervised({Terrain, name: name, timeout: 100, deps_srtm: {SRTMMock, srtm_name}})\n\n    :ok\n  end\n\n  test \"return the elevation\", %{test: name} do\n    car = car_fixture()\n\n    {:ok, drive} = Log.start_drive(car)\n\n    positions =\n      %{date: DateTime.utc_now(), latitude: 0, longitude: 0}\n      |> List.duplicate(201)\n      |> List.replace_at(50, %{date: DateTime.utc_now(), latitude: 1, longitude: 1})\n      |> List.replace_at(150, %{date: DateTime.utc_now(), latitude: 1, longitude: 1})\n      |> Enum.map(fn position ->\n        {:ok, pos} = Log.insert_position(drive, position)\n        pos\n      end)\n\n    :ok =\n      start_terrain(name, %{\n        {0.0, 0.0} => fn -> {:ok, 42} end,\n        {1.0, 1.0} => fn ->\n          Process.sleep(100)\n          {:ok, 420}\n        end\n      })\n\n    # blocked\n    assert Terrain.get_elevation(name, {0, 0}) == nil\n    assert Terrain.get_elevation(name, {0, 0}) == nil\n    assert Terrain.get_elevation(name, {0, 0}) == nil\n\n    for {_, i} <- Enum.with_index(positions) do\n      if i in [50, 150] do\n        assert_receive {SRTM, {:get_elevation, 1.0, 1.0, _opts}}\n      else\n        assert_receive {SRTM, {:get_elevation, +0.0, +0.0, _opts}}\n      end\n    end\n\n    for {position, i} <- Enum.with_index(positions) do\n      if i in [50, 150] do\n        assert %Position{elevation: 420} = TeslaMate.Repo.get(Position, position.id)\n      else\n        assert %Position{elevation: 42} = TeslaMate.Repo.get(Position, position.id)\n      end\n    end\n\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"handles errors during update!\", %{test: name} do\n    car = car_fixture()\n\n    {:ok, drive} = Log.start_drive(car)\n\n    [p0, p1, p2, p3, p4, p5] =\n      [\n        %{date: DateTime.utc_now(), latitude: 0, longitude: 0},\n        %{date: DateTime.utc_now(), latitude: 1, longitude: 1},\n        %{date: DateTime.utc_now(), latitude: 42, longitude: 42},\n        %{date: DateTime.utc_now(), latitude: 42, longitude: 42},\n        %{date: DateTime.utc_now(), latitude: 42, longitude: 42},\n        %{date: DateTime.utc_now(), latitude: 0, longitude: 0}\n      ]\n      |> Enum.map(fn position ->\n        {:ok, pos} = Log.insert_position(drive, position)\n        pos\n      end)\n\n    ## Does not get elevation for non-drive positions\n\n    {:ok, _pos} =\n      Log.insert_position(car, %{date: DateTime.utc_now(), latitude: 69, longitude: 69})\n\n    {:ok, _pos} =\n      Log.insert_position(car, %{date: DateTime.utc_now(), latitude: 99, longitude: 99})\n\n    :ok =\n      start_terrain(name, %{\n        {0.0, 0.0} => fn -> {:ok, 42} end,\n        {1.0, 1.0} => fn -> {:error, :boom} end,\n        {42.0, 42.0} => fn ->\n          Process.sleep(100)\n          {:error, :kaputt}\n        end\n      })\n\n    assert_receive {SRTM, {:get_elevation, +0.0, +0.0, _opts}}\n    assert_receive {SRTM, {:get_elevation, 1.0, 1.0, _opts}}\n    assert_receive {SRTM, {:get_elevation, 42.0, 42.0, _opts}}\n    assert_receive {SRTM, {:get_elevation, 42.0, 42.0, _opts}}\n\n    # 4th and 5th are :unavailable\n\n    Process.sleep(300)\n\n    assert %Position{elevation: 42} = TeslaMate.Repo.get(Position, p0.id)\n    assert %Position{elevation: nil} = TeslaMate.Repo.get(Position, p1.id)\n    assert %Position{elevation: nil} = TeslaMate.Repo.get(Position, p2.id)\n    assert %Position{elevation: nil} = TeslaMate.Repo.get(Position, p3.id)\n    assert %Position{elevation: nil} = TeslaMate.Repo.get(Position, p4.id)\n    assert %Position{elevation: nil} = TeslaMate.Repo.get(Position, p5.id)\n\n    refute_receive _\n  end\n\n  defp car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(%{efficiency: 0.153, eid: 42, model: \"3\", vid: 42, vin: \"xxxxx\"})\n      |> Log.create_car()\n\n    car\n  end\nend\n"
  },
  {
    "path": "test/teslamate/terrain_test.exs",
    "content": "defmodule TeslaMate.TerrainTest do\n  use TeslaMate.DataCase, async: true\n\n  alias TeslaMate.Terrain\n\n  def start_terrain(name, responses \\\\ %{}) do\n    log_name = :\"log_#{name}\"\n    srtm_name = :\"srtm_#{name}\"\n\n    {:ok, _pid} = start_supervised({LogMock, name: log_name, pid: self(), last_update: nil})\n    {:ok, _pid} = start_supervised({SRTMMock, name: srtm_name, pid: self(), responses: responses})\n\n    opts = [\n      name: name,\n      timeout: 500,\n      deps_log: {LogMock, log_name},\n      deps_srtm: {SRTMMock, srtm_name}\n    ]\n\n    {:ok, _} = start_supervised({Terrain, opts})\n    assert_receive {:get_positions_without_elevation, 0}\n\n    :ok\n  end\n\n  describe \"get_elevation/1\" do\n    test \"return the elevation\", %{test: name} do\n      :ok = start_terrain(name, %{{0, 0} => fn -> {:ok, 42} end})\n\n      assert 42 == Terrain.get_elevation(name, {0, 0})\n      assert_received {SRTM, {:get_elevation, 0, 0, [disk_cache_path: \".srtm_cache\"]}}\n\n      refute_receive _\n    end\n\n    @tag :capture_log\n    test \"return nil if an error occurred\", %{test: name} do\n      :ok = start_terrain(name, %{{0, 0} => fn -> {:error, :kaputt} end})\n\n      assert Terrain.get_elevation(name, {0, 0}) == nil\n\n      TestHelper.eventually(fn ->\n        assert_received {SRTM, {:get_elevation, 0, 0, _opts}}\n      end)\n\n      refute_receive _\n    end\n\n    test \"returns nil if the task takes longer than 100ms\", %{test: name} do\n      :ok =\n        start_terrain(name, %{\n          {0, 0} => fn ->\n            Process.sleep(550)\n            {:ok, 42}\n          end\n        })\n\n      assert Terrain.get_elevation(name, {0, 0}) == nil\n\n      TestHelper.eventually(fn ->\n        assert_received {SRTM, {:get_elevation, 0, 0, _opts}}\n      end)\n\n      # still blocked\n      assert Terrain.get_elevation(name, {0, 0}) == nil\n\n      refute_receive _, 300\n    end\n\n    @tag :capture_log\n    test \"handles long running tasks that return with an error\", %{test: name} do\n      :ok =\n        start_terrain(name, %{\n          {1, 1} => fn ->\n            Process.sleep(101)\n            {:error, :kaputt}\n          end\n        })\n\n      assert Terrain.get_elevation(name, {1, 1}) == nil\n\n      TestHelper.eventually(fn ->\n        assert_received {SRTM, {:get_elevation, 1, 1, _opts}}\n      end)\n\n      refute_receive _\n    end\n\n    @tag :capture_log\n    test \"breaks circuit if too many queries fail\", %{test: name} do\n      :ok =\n        start_terrain(name, %{\n          {0, 0} => fn -> {:error, :kaputt} end\n        })\n\n      assert Terrain.get_elevation(name, {0, 0}) == nil\n      assert Terrain.get_elevation(name, {0, 0}) == nil\n      assert Terrain.get_elevation(name, {0, 0}) == nil\n      assert Terrain.get_elevation(name, {0, 0}) == nil\n      assert Terrain.get_elevation(name, {0, 0}) == nil\n\n      # circuit broke after 3 attempts\n      TestHelper.eventually(\n        fn ->\n          assert_received {SRTM, {:get_elevation, 0, 0, _opts}}\n          assert_received {SRTM, {:get_elevation, 0, 0, _opts}}\n          assert_received {SRTM, {:get_elevation, 0, 0, _opts}}\n        end,\n        attempts: 25\n      )\n\n      refute_receive _\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/updater_test.exs",
    "content": "defmodule TeslaMate.UpdaterTest do\n  use TeslaMate.DataCase, async: true\n\n  alias TeslaMate.Updater\n  import Mock\n\n  defmodule HTTPMocck do\n    def vsn(tag) do\n      json(%{\"tag_name\" => tag, \"prerelease\" => false, \"draft\" => false})\n    end\n\n    def json(data) do\n      response({:ok, %Tesla.Env{status: 200, body: data}})\n    end\n\n    def response(resp) do\n      [\n        {Tesla.Adapter.Finch, [],\n         call: fn %Tesla.Env{} = env, _opts ->\n           assert env.url ==\n                    \"https://api.github.com/repos/teslamate-org/teslamate/releases/latest\"\n\n           resp\n         end}\n      ]\n    end\n  end\n\n  defp start_updater(name, version, opts \\\\ []) do\n    id = Keyword.get(opts, :id, 0)\n\n    start_supervised(\n      {Updater, [name: :\"updater#{id}_#{name}}\", version: version, check_after: 0]},\n      id: id\n    )\n  end\n\n  test \"informs if an update is available\", %{test: name} do\n    with_mocks HTTPMocck.vsn(\"v5.1.2\") do\n      ## current_version > new_version\n      {:ok, pid} = start_updater(name, \"5.1.3-dev\", id: 0)\n      Process.sleep(100)\n      assert nil == Updater.get_update(pid)\n\n      ## current_version == new_version\n      {:ok, pid} = start_updater(name, \"5.1.2\", id: 1)\n      Process.sleep(100)\n      assert nil == Updater.get_update(pid)\n\n      ## current_version < new_version\n      {:ok, pid} = start_updater(name, \"4.99.0\", id: 2)\n      Process.sleep(100)\n      assert \"5.1.2\" == Updater.get_update(pid)\n    end\n  end\n\n  test \"returns early even though update check is still in progress\", %{test: name} do\n    with_mocks [{Tesla.Adapter.Finch, [], call: fn _, _ -> Process.sleep(1_000_000) end}] do\n      {:ok, pid} = start_updater(name, \"1.0.0\")\n      assert nil == Updater.get_update(pid)\n    end\n  end\n\n  @tag :capture_log\n  test \"handles invalid tags\", %{test: name} do\n    with_mocks HTTPMocck.vsn(\"2.0.0\") do\n      {:ok, pid} = start_updater(name, \"1.0.0\")\n      assert nil == Updater.get_update(pid)\n    end\n  end\n\n  @tag :capture_log\n  test \"handles invalid json\", %{test: name} do\n    with_mocks HTTPMocck.json(%{\"foo\" => \"bar\"}) do\n      {:ok, pid} = start_updater(name, \"1.0.0\")\n      assert nil == Updater.get_update(pid)\n    end\n  end\n\n  @tag :capture_log\n  test \"handles HTTP errors\", %{test: name} do\n    with_mocks HTTPMocck.response({:ok, %Tesla.Env{status: 404}}) do\n      {:ok, pid} = start_updater(name, \"1.0.0\", id: 0)\n      assert nil == Updater.get_update(pid)\n    end\n\n    with_mocks HTTPMocck.response({:error, :timeout}) do\n      {:ok, pid} = start_updater(name, \"1.0.0\", id: 1)\n      assert nil == Updater.get_update(pid)\n    end\n  end\n\n  test \"handles prereleases and drafts\", %{test: name} do\n    with_mocks HTTPMocck.json(%{\"tag_name\" => \"v99.0.0\", \"prerelease\" => true, \"draft\" => false}) do\n      {:ok, pid} = start_updater(name, \"1.0.0\", id: 0)\n      assert nil == Updater.get_update(pid)\n    end\n\n    with_mocks HTTPMocck.json(%{\"tag_name\" => \"v99.0.0\", \"prerelease\" => false, \"draft\" => true}) do\n      {:ok, pid} = start_updater(name, \"1.0.0\", id: 1)\n      assert nil == Updater.get_update(pid)\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vault_test.exs",
    "content": "defmodule TeslaMate.VaultTest do\n  use ExUnit.Case, async: false\n\n  alias TeslaMate.Vault\n\n  import Mock\n\n  defp key_equals?(key) do\n    with {:ok, config} <- Vault.Config |> Cloak.Vault.read_config() do\n      {_cipher_module, cipher_opts} =\n        config\n        |> Access.fetch!(:ciphers)\n        |> Access.fetch!(:default)\n\n      :crypto.hash(:sha256, key) == cipher_opts[:key]\n    end\n  end\n\n  setup context do\n    keys = context[:encryption_key] || %{}\n\n    config = Application.get_env(:teslamate, TeslaMate.Vault)\n    Application.put_env(:teslamate, TeslaMate.Vault, Keyword.put(config, :key, keys[:config]))\n    on_exit(fn -> Application.put_env(:teslamate, TeslaMate.Vault, config) end)\n\n    if encryption_key = keys[:tmp_dir] || keys[:import_dir] do\n      tmp_dir = context[:tmp_dir] || raise \"Add a :tmp_dir tag!\"\n      tmp_path = Path.join(tmp_dir, \"tm_encryption.key\")\n      File.write!(tmp_path, encryption_key)\n    end\n\n    :ok\n  end\n\n  @tag encryption_key: %{config: \"key_from_config\"}\n  test \"reads the encryption key from the application config\" do\n    start_supervised!(Vault)\n\n    assert key_equals?(\"key_from_config\")\n  end\n\n  @tag encryption_key: %{tmp_dir: \"key_from_tmp_dir\"},\n       tmp_dir: \"0\"\n  test \"falls back to reading the encryption key from the tmp dir\", %{tmp_dir: tmp_dir} do\n    with_mock System, [], tmp_dir: fn -> tmp_dir end do\n      start_supervised!(Vault)\n\n      assert key_equals?(\"key_from_tmp_dir\")\n      assert called(System.tmp_dir())\n    end\n  end\n\n  @tag encryption_key: %{import_dir: \"key_from_import_dir\"},\n       tmp_dir: \"0\"\n  test \"falls back to reading the encryption key from the import dir\", %{tmp_dir: tmp_dir} do\n    with_mock System, [],\n      tmp_dir: fn -> nil end,\n      get_env: fn \"IMPORT_DIR\", \"import\" -> tmp_dir end do\n      start_supervised!(Vault)\n\n      assert key_equals?(\"key_from_import_dir\")\n      assert called(System.get_env(\"IMPORT_DIR\", \"import\"))\n    end\n  end\n\n  @tag :capture_log\n  test \"generates a random key if no key could be restored\" do\n    start_supervised!(Vault)\n\n    assert {:ok, ciphertext} = Vault.encrypt(\"plaintext\")\n    assert {:ok, \"plaintext\"} = Vault.decrypt(ciphertext)\n\n    # Restart GenServer\n    stop_supervised!(Vault)\n    start_supervised!(Vault)\n\n    # decrypting the ciphertext won't work with the new key\n    assert {:ok, :error} = Vault.decrypt(ciphertext)\n  end\n\n  describe \"encryption_key_provided?/0\" do\n    @tag encryption_key: %{config: \"key\"}\n    test \"returns true if the encryption key was provided via the application config\" do\n      start_supervised!(Vault)\n\n      assert Vault.encryption_key_provided?()\n    end\n\n    @tag :capture_log\n    @tag encryption_key: %{config: nil}\n    test \"returns false if the encryption key was not provided\" do\n      start_supervised!(Vault)\n\n      refute Vault.encryption_key_provided?()\n    end\n  end\n\n  describe \"default_cipher/1\" do\n    test \"uses AES in GCM mode with a 12 byte IV-length\" do\n      assert {Cloak.Ciphers.AES.GCM, [tag: \"AES.GCM.V1\", key: \"$key\", iv_length: 12]} ==\n               Vault.default_cipher(\"$key\")\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vehicles/identification_test.exs",
    "content": "defmodule TeslaMate.Vehicles.Vehicle.IdentificationTest do\n  use TeslaMate.VehicleCase, async: false\n\n  alias TeslaMate.Log.Car\n  alias TeslaMate.Log\n\n  test \"identifies the vehicle\" do\n    events = [\n      {:ok,\n       online_event(\n         display_name: \"FooBar\",\n         vehicle_config: %{car_type: \"models\", trim_badging: \"p100d\"}\n       )}\n    ]\n\n    :ok = start_vehicles(events)\n\n    TestHelper.eventually(fn ->\n      assert %Car{name: \"FooBar\", model: \"S\", trim_badging: \"P100D\"} = Log.get_car_by(vid: 90211)\n    end)\n  end\n\n  test \"changes the car name\" do\n    ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    events = [\n      {:ok,\n       online_event(\n         display_name: \"FooBar\",\n         drive_state: %{timestamp: ts, latitude: 0, longitude: 0}\n       )},\n      {:ok,\n       online_event(\n         display_name: \"FooBar\",\n         drive_state: %{timestamp: ts + 1, latitude: 0, longitude: 0}\n       )},\n      {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n      {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n      {:ok,\n       online_event(\n         display_name: \"Bar\",\n         drive_state: %{timestamp: ts + 1_000_000, latitude: 0, longitude: 0}\n       )},\n      {:ok,\n       online_event(\n         display_name: \"Bar\",\n         drive_state: %{timestamp: ts + 1_000_001, latitude: 0, longitude: 0}\n       )}\n    ]\n\n    :ok = start_vehicles(events)\n\n    TestHelper.eventually(fn -> assert %Car{name: \"FooBar\"} = Log.get_car_by(vid: 90211) end,\n      delay: 10,\n      attempts: 50\n    )\n\n    TestHelper.eventually(fn -> assert %Car{name: \"Bar\"} = Log.get_car_by(vid: 90211) end,\n      delay: 50,\n      attempts: 20\n    )\n  end\n\n  def start_vehicles(events \\\\ []) do\n    {:ok, _pid} = start_supervised({ApiMock, name: :api_vehicle, events: events, pid: self()})\n\n    {:ok, _pid} =\n      start_supervised(\n        {TeslaMate.Vehicles,\n         vehicle: VehicleMock,\n         vehicles: [\n           %TeslaApi.Vehicle{\n             display_name: \"Foo\",\n             id: 11243,\n             vehicle_id: 90211,\n             vin: \"absadkalfs\"\n           }\n         ]}\n      )\n\n    :ok\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vehicles/vehicle/charging_sync_test.exs",
    "content": "defmodule TeslaMate.Vehicles.Vehicle.ChargingSyncTest do\n  use TeslaMate.VehicleCase, async: false\n\n  import ExUnit.CaptureLog\n\n  alias TeslaMate.Vehicles.Vehicle.Summary\n  alias TeslaMate.Log\n\n  @log_opts format: \"[$level] $message\\n\",\n            colors: [enabled: false]\n\n  @tag :capture_log\n  test \"handles invalid charge data\", %{test: name} do\n    %{eid: eid} = car = car_fixture()\n    now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, online_event(drive_state: %{timestamp: now_ts, latitude: 0.0, longitude: 0.0})},\n      {:ok, charging_event(now_ts, \"Charging\", 0.1, range: nil)},\n      {:ok, charging_event(now_ts, \"Charging\", 0.1, range: nil)},\n      {:ok, charging_event(now_ts, \"Charging\", 0.2, range: 10)}\n    ]\n\n    assert capture_log(@log_opts, fn ->\n             :ok = start_vehicle(name, events, car: car, log: false)\n\n             true =\n               name\n               |> Process.whereis()\n               |> Process.link()\n\n             assert_receive {ApiMock, {:stream, ^eid, _}}\n             assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n             assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n             assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n             assert_receive {:\"$websockex_cast\", :disconnect}\n\n             refute_receive _\n           end) =~\n             \"\"\"\n             [warning] Invalid charge data: %{ideal_battery_range_km: [\\\"can't be blank\\\"]}\n             \"\"\"\n  end\n\n  defp car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(%{\n        efficiency: 0.153,\n        eid: 13442,\n        model: \"S\",\n        vid: 13442,\n        name: \"foo\",\n        trim_badging: \"P100D\",\n        vin: \"13412345F\"\n      })\n      |> Log.create_car()\n\n    car\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vehicles/vehicle/charging_test.exs",
    "content": "defmodule TeslaMate.Vehicles.Vehicle.ChargingTest do\n  use TeslaMate.VehicleCase, async: false\n\n  alias TeslaMate.Vehicles.Vehicle.Summary\n  alias TeslaMate.Log.ChargingProcess\n\n  import ExUnit.CaptureLog\n\n  @log_opts format: \"[$level] $message\\n\",\n            colors: [enabled: false]\n\n  test \"logs a full charging cycle\", %{test: name} do\n    now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, online_event(drive_state: %{timestamp: now_ts, latitude: 0.0, longitude: 0.0})},\n      {:ok, charging_event(now_ts + 1, \"Starting\", 0.1, range: 1)},\n      {:ok, charging_event(now_ts + 2, \"Charging\", 0.2, range: 2)},\n      {:ok, charging_event(now_ts + 3, \"Charging\", 0.3, range: 3)},\n      {:ok, charging_event(now_ts + 4, \"Complete\", 0.4, range: 4)},\n      {:ok, charging_event(now_ts + 5, \"Complete\", 0.4, range: 4)},\n      {:ok, charging_event(now_ts + 6, \"Unplugged\", 0.4, range: 4)},\n      {:ok, online_event(drive_state: %{timestamp: now_ts + 7, latitude: 0.2, longitude: 0.2})},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^start_date}, 400\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, since: s0}}}\n\n    assert_receive {:start_charging_process, ^car, %{latitude: +0.0, longitude: +0.0},\n                    [lookup_address: true]}\n\n    assert_receive {:\"$websockex_cast\", :disconnect}\n\n    assert_receive {:insert_charge, %ChargingProcess{id: _process_id} = cproc,\n                    %{\n                      date: _,\n                      charge_energy_added: 0.1,\n                      rated_battery_range_km: 1.61,\n                      ideal_battery_range_km: 1.61\n                    }}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging, since: s1}}}\n    assert DateTime.diff(s0, s1, :nanosecond) < 0\n\n    assert_receive {:insert_charge, ^cproc,\n                    %{\n                      date: _,\n                      charge_energy_added: 0.2,\n                      rated_battery_range_km: 3.22,\n                      ideal_battery_range_km: 3.22\n                    }}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging, since: ^s1}}}\n\n    assert_receive {:insert_charge, ^cproc,\n                    %{\n                      date: _,\n                      charge_energy_added: 0.3,\n                      rated_battery_range_km: 4.83,\n                      ideal_battery_range_km: 4.83\n                    }}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging, since: ^s1}}}\n\n    assert_receive {:insert_position, ^car, %{}}\n\n    assert_receive {:insert_charge, ^cproc,\n                    %{\n                      date: _,\n                      charge_energy_added: 0.4,\n                      rated_battery_range_km: 6.44,\n                      ideal_battery_range_km: 6.44\n                    }}\n\n    # Completed\n    assert_receive {:complete_charging_process, ^cproc}\n\n    start_date = DateTime.from_unix!(now_ts + 4, :millisecond)\n    assert_receive {:start_state, ^car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, since: s2}}}\n    assert DateTime.diff(s1, s2, :nanosecond) < 0\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, since: ^s2}}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"handles a connection loss when charging\", %{test: name} do\n    now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, online_event(drive_state: %{timestamp: now_ts, latitude: +0.0, longitude: +0.0})},\n      {:ok, charging_event(now_ts + 1, \"Charging\", 0.1)},\n      {:ok, charging_event(now_ts + 2, \"Charging\", 0.2)},\n      {:error, :vehicle_unavailable},\n      {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n      {:error, :vehicle_unavailable},\n      {:ok, %TeslaApi.Vehicle{state: \"unknown\"}},\n      {:ok, charging_event(now_ts + 3, \"Charging\", 0.3)},\n      {:ok, charging_event(now_ts + 4, \"Complete\", 0.3)},\n      {:ok, charging_event(now_ts + 5, \"Complete\", 0.3)},\n      {:ok, charging_event(now_ts + 6, \"Unplugged\", 0.3)},\n      {:ok, online_event(drive_state: %{timestamp: now_ts + 7, latitude: 0.2, longitude: 0.2})},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert_receive {:start_charging_process, ^car, %{latitude: +0.0, longitude: +0.0},\n                    [lookup_address: true]}\n\n    assert_receive {:\"$websockex_cast\", :disconnect}\n\n    assert_receive {:insert_charge, %ChargingProcess{id: _cproc_id} = cproc,\n                    %{date: _, charge_energy_added: 0.1}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n\n    assert_receive {:insert_charge, ^cproc, %{date: _, charge_energy_added: 0.2}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n\n    assert_receive {:insert_charge, ^cproc, %{date: _, charge_energy_added: 0.3}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:insert_charge, ^cproc, %{date: _, charge_energy_added: 0.3}}\n    assert_receive {:complete_charging_process, ^cproc}\n\n    start_date = DateTime.from_unix!(now_ts + 4, :millisecond)\n    assert_receive {:start_state, ^car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n    refute_receive _\n  end\n\n  test \"handles a invalid charge data\", %{test: name} do\n    now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, online_event(drive_state: %{timestamp: now_ts, latitude: +0.0, longitude: +0.0})},\n      {:ok, charging_event(now_ts + 1, \"Charging\", 0.1)},\n      {:ok, %TeslaApi.Vehicle{state: \"online\", charge_state: nil}},\n      {:ok, %TeslaApi.Vehicle{state: \"online\", charge_state: nil}},\n      {:ok, %TeslaApi.Vehicle{state: \"online\", charge_state: nil}},\n      {:ok, charging_event(now_ts + 3, \"Charging\", 0.3)},\n      {:ok, charging_event(now_ts + 5, \"Complete\", 0.3)},\n      {:ok, online_event(drive_state: %{timestamp: now_ts + 6, latitude: 0.2, longitude: 0.2})},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert_receive {:start_charging_process, ^car, %{latitude: +0.0, longitude: +0.0},\n                    [lookup_address: true]}\n\n    assert_receive {:\"$websockex_cast\", :disconnect}\n\n    assert_receive {:insert_charge, cproc, %{date: _, charge_energy_added: 0.1}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n\n    assert capture_log(@log_opts, fn ->\n             assert_receive {:insert_charge, ^cproc, %{date: _, charge_energy_added: 0.3}}\n             assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n           end) =~ \"Discarded incomplete fetch result\"\n\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:insert_charge, ^cproc, %{date: _, charge_energy_added: 0.3}}\n    assert_receive {:complete_charging_process, ^cproc}\n\n    start_date = DateTime.from_unix!(now_ts + 5, :millisecond)\n    assert_receive {:start_state, ^car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    refute_receive _\n  end\n\n  test \"Transitions directly into charging state\", %{test: name} do\n    now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, charging_event(now_ts, \"Charging\", 22)},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert_receive {:start_charging_process, ^car, %{latitude: +0.0, longitude: +0.0},\n                    [lookup_address: true]}\n\n    assert_receive {:\"$websockex_cast\", :disconnect}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n    assert_receive {:insert_charge, _charging_event, %{date: _, charge_energy_added: 22}}\n\n    refute_received _\n  end\n\n  @tag :capture_log\n  test \"transitions into asleep state\", %{test: name} do\n    now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, online_event(drive_state: %{timestamp: now_ts, latitude: +0.0, longitude: +0.0})},\n      {:ok, charging_event(now_ts + 1, \"Charging\", 0.1)},\n      {:ok, charging_event(now_ts + 2, \"Charging\", 0.2)},\n      {:error, :vehicle_unavailable},\n      {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert_receive {:start_charging_process, ^car, %{latitude: +0.0, longitude: +0.0},\n                    [lookup_address: true]}\n\n    assert_receive {:\"$websockex_cast\", :disconnect}\n\n    assert_receive {:insert_charge, %ChargingProcess{id: _cproc_id} = cproc,\n                    %{date: _, charge_energy_added: 0.1}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n    assert_receive {:insert_charge, ^cproc, %{date: _, charge_energy_added: 0.2}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n    assert_receive {:complete_charging_process, ^cproc}\n    assert_receive {:start_state, ^car, :asleep, []}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :asleep}}}\n\n    refute_receive _\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vehicles/vehicle/driving_test.exs",
    "content": "defmodule TeslaMate.Vehicles.Vehicle.DrivingTest do\n  use TeslaMate.VehicleCase, async: false\n\n  alias TeslaMate.Vehicles.Vehicle.Summary\n  alias TeslaMate.Log.Drive\n\n  test \"logs a full drive\", %{test: name} do\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, drive_event(now_ts + 1, \"D\", 60)},\n      {:ok, drive_event(now_ts + 2, \"N\", 30)},\n      {:ok, drive_event(now_ts + 3, \"R\", -5)},\n      {:ok, online_event(drive_state: %{timestamp: now_ts + 4, latitude: 0.2, longitude: 0.2})}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    start_date = DateTime.from_unix!(now_ts + 1, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, since: s0}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving, since: s1}}}\n    assert DateTime.diff(s0, s1, :nanosecond) < 0\n\n    assert_receive {:start_drive, ^car}\n    assert_receive {:insert_position, drive, %{longitude: 0.1, speed: 97}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving, since: ^s1}}}\n\n    assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 48}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving, since: ^s1}}}\n\n    assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: -8}}\n    assert_receive {:insert_position, ^drive, %{longitude: 0.2}}\n    assert_receive {:close_drive, ^drive, lookup_address: true}\n\n    start_date = DateTime.from_unix!(now_ts + 4, :millisecond)\n    assert_receive {:start_state, ^car, :online, date: ^start_date}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, since: s2}}}\n    assert DateTime.diff(s1, s2, :nanosecond) < 0\n\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"handles a connection loss when driving\", %{test: name} do\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, online_event(drive_state: %{timestamp: now_ts, latitude: 0.0, longitude: 0.0})},\n      {:ok, drive_event(now_ts + 1, \"D\", 50)},\n      {:error, :vehicle_unavailable},\n      {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n      {:error, :vehicle_unavailable},\n      {:ok, %TeslaApi.Vehicle{state: \"unknown\"}},\n      {:ok, drive_event(now_ts + 2, \"D\", 55)},\n      {:ok, drive_event(now_ts + 3, \"D\", 40)},\n      {:ok, online_event(drive_state: %{timestamp: now_ts + 4, latitude: 0.2, longitude: 0.2})}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n\n    assert_receive {:start_drive, ^car}\n    assert_receive {:insert_position, drive, %{longitude: 0.1, speed: 80}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n    assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 89}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n    assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 64}}\n    assert_receive {:insert_position, ^drive, %{longitude: 0.2}}\n    assert_receive {:close_drive, ^drive, lookup_address: true}\n\n    start_date = DateTime.from_unix!(now_ts + 4, :millisecond)\n    assert_receive {:start_state, ^car, :online, date: ^start_date}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"handles an empty drive_state\", %{test: name} do\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, drive_event(now_ts + 0, \"D\", 5)},\n      {:ok, drive_event(now_ts + 1, \"D\", 50)},\n      {:ok, %TeslaApi.Vehicle{state: \"online\", drive_state: nil}},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n\n    assert_receive {:start_drive, ^car}\n    assert_receive {:insert_position, _drive, %{longitude: 0.1, speed: 8}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n    assert_receive {:insert_position, _drive, %{longitude: 0.1, speed: 80}}\n\n    refute_receive _\n  end\n\n  test \"transitions directly into driving state\", %{test: name} do\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, drive_event(now_ts, \"N\", 0)}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n\n    assert_receive {:start_drive, ^car}\n    assert_receive {:insert_position, drive, %{longitude: 0.1, speed: 0}}\n    assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 0}}\n    assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 0}}\n\n    # ...\n\n    refute_received _\n  end\n\n  test \"shift state P does not trigger driving state\", %{test: name} do\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, drive_event(now_ts, \"P\", 0)}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    refute_receive _\n  end\n\n  test \"shift_state P ends the drive\", %{test: name} do\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, drive_event(now_ts, \"D\", 5)},\n      {:ok, drive_event(now_ts + 1, \"D\", 15)},\n      {:ok, drive_event(now_ts + 2, \"P\", 0)}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^start_date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n\n    assert_receive {:start_drive, ^car}\n    assert_receive {:insert_position, %Drive{id: 111} = drive, %{longitude: 0.1, speed: 8}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n    assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 24}}\n    assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 0}}\n    assert_receive {:close_drive, ^drive, lookup_address: true}\n\n    start_date = DateTime.from_unix!(now_ts + 2, :millisecond)\n    assert_receive {:start_state, ^car, :online, date: ^start_date}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    refute_receive _\n  end\n\n  describe \"when offline\" do\n    defp drive_event(ts, pos, speed, lvl, range, added) do\n      {:ok,\n       online_event(\n         drive_state: %{\n           timestamp: ts,\n           latitude: pos,\n           longitude: pos,\n           shift_state: \"D\",\n           speed: speed\n         },\n         charge_state: %{\n           battery_level: lvl,\n           ideal_battery_range: range,\n           timestamp: ts,\n           charge_energy_added: added\n         }\n       )}\n    end\n\n    @tag :capture_log\n    test \"interprets a significant offline period while driving with SOC gains as charge session\",\n         %{test: name} do\n      now = DateTime.utc_now()\n      now_ts = DateTime.to_unix(now, :millisecond)\n\n      events =\n        [\n          {:ok, online_event()},\n          drive_event(now_ts, 0.1, 30, 20, 200, 0),\n          drive_event(now_ts + 1, 0.1, 30, 20, 200, 0)\n        ] ++\n          List.duplicate({:ok, %TeslaApi.Vehicle{state: \"offline\"}}, 20) ++\n          [\n            drive_event(now_ts + 1 + :timer.minutes(5), 0.2, 20, 80, 300, 45),\n            {:ok,\n             online_event(\n               drive_state: %{\n                 timestamp: now_ts + 1 + :timer.minutes(5) + 1,\n                 latitude: 0.3,\n                 longitude: 0.3\n               }\n             )}\n          ]\n\n      :ok = start_vehicle(name, events)\n\n      date = DateTime.from_unix!(now_ts, :millisecond)\n      assert_receive {:start_state, car, :online, date: ^date}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, drive, %{longitude: 0.1, speed: 48}}\n      assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 48}}\n\n      refute_receive _, 50\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :offline}}}\n\n      # Logs previous drive because of timeout\n      assert_receive {:close_drive, ^drive, lookup_address: true}, 300\n\n      # Logs a charge session based on the available data\n      start_date =\n        now\n        |> DateTime.add(1, :millisecond)\n        |> DateTime.truncate(:millisecond)\n\n      end_date =\n        now\n        |> DateTime.add(1, :millisecond)\n        |> DateTime.add(5 * 60, :second)\n        |> DateTime.truncate(:millisecond)\n\n      assert_receive {:start_charging_process, ^car, %{latitude: 0.1, longitude: 0.1},\n                      lookup_address: true}\n\n      assert_receive {:insert_charge, charging_id,\n                      %{date: ^start_date, charge_energy_added: 0, charger_power: 0}}\n\n      assert_receive {:insert_charge, ^charging_id,\n                      %{date: ^end_date, charge_energy_added: 45, charger_power: 0}}\n\n      assert_receive {:complete_charging_process, ^charging_id}\n\n      d1 = DateTime.from_unix!(now_ts + 1 + :timer.minutes(5), :millisecond)\n      assert_receive {:start_state, ^car, :online, date: ^d1}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, drive, %{longitude: 0.2, speed: 32}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n      assert_receive {:insert_position, ^drive, %{longitude: 0.3}}\n      assert_receive {:close_drive, ^drive, lookup_address: true}\n\n      d2 = DateTime.from_unix!(now_ts + 1 + :timer.minutes(5) + 1, :millisecond)\n      assert_receive {:start_state, ^car, :online, date: ^d2}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      refute_receive _\n    end\n\n    @tag :capture_log\n    test \"times out a drive when being offline for to long\",\n         %{test: name} do\n      now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n      events = [\n        {:ok, online_event()},\n        drive_event(now_ts, 0.1, 30, 20, 200, nil),\n        drive_event(now_ts, 0.1, 30, 20, 200, nil),\n        {:ok, %TeslaApi.Vehicle{state: \"offline\"}}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      date = DateTime.from_unix!(now_ts, :millisecond)\n      assert_receive {:start_state, car, :online, date: ^date}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, drive, %{longitude: 0.1, speed: 48}}\n      assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 48}}\n\n      # Timeout\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :offline}}}, 200\n      assert_receive {:close_drive, ^drive, lookup_address: true}, 1200\n\n      # After drive timeout, vehicle stays offline → state machine must transition to :offline\n      assert_receive {:start_state, ^car, :offline, []}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :offline}}}\n    end\n\n    @tag :capture_log\n    test \"transitions to offline state when vehicle stays offline after drive times out (underground parking)\",\n         %{test: name} do\n      now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n      # Vehicle loses network (underground parking) and never comes back online\n      events = [\n        {:ok, online_event()},\n        drive_event(now_ts, 0.1, 30, 20, 200, nil),\n        drive_event(now_ts, 0.1, 30, 20, 200, nil),\n        {:ok, %TeslaApi.Vehicle{state: \"offline\"}}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      date = DateTime.from_unix!(now_ts, :millisecond)\n      assert_receive {:start_state, car, :online, date: ^date}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, drive, %{longitude: 0.1, speed: 48}}\n      assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 48}}\n\n      # Drive is closed after timeout\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :offline}}}, 200\n      assert_receive {:close_drive, ^drive, lookup_address: true}, 1200\n\n      # Regression: state must transition to :offline, not stay stuck in :driving state\n      assert_receive {:start_state, ^car, :offline, []}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :offline}}}\n    end\n\n    test \"times out a drive when rececing sleep event\", %{test: name} do\n      now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n      events = [\n        {:ok, online_event()},\n        drive_event(now_ts, 0.1, 30, 20, 200, nil),\n        drive_event(now_ts + 1, 0.1, 30, 20, 200, nil),\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      date = DateTime.from_unix!(now_ts, :millisecond)\n      assert_receive {:start_state, car, :online, date: ^date}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, drive, %{longitude: 0.1, speed: 48}}\n      assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 48}}\n\n      # Timeout\n      assert_receive {:close_drive, ^drive, lookup_address: true}, 1200\n      assert_receive {:start_state, _car, :asleep, []}\n      assert_receive {:\"$websockex_cast\", :disconnect}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :asleep}}}\n\n      refute_receive _\n    end\n\n    @tag :capture_log\n    test \"logs a drive after a significant offline period while driving\",\n         %{test: name} do\n      now = DateTime.utc_now()\n      now_ts = DateTime.to_unix(now, :millisecond)\n\n      events =\n        [\n          {:ok, online_event()},\n          drive_event(now_ts, 0.1, 30, 20, 200, nil),\n          drive_event(now_ts + 1, 0.1, 30, 20, 200, nil)\n        ] ++\n          List.duplicate({:ok, %TeslaApi.Vehicle{state: \"offline\"}}, 20) ++\n          [\n            drive_event(now_ts + 1 + :timer.minutes(15), 0.2, 20, 19, 190, nil),\n            {:ok,\n             online_event(\n               drive_state: %{\n                 timestamp: now_ts + 1 + :timer.minutes(15) + 1,\n                 latitude: 0.3,\n                 longitude: 0.3\n               }\n             )}\n          ]\n\n      :ok = start_vehicle(name, events)\n\n      d0 = DateTime.from_unix!(now_ts, :millisecond)\n      assert_receive {:start_state, car, :online, date: ^d0}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, drive, %{longitude: 0.1, speed: 48}}\n      assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 48}}\n\n      refute_receive _, 100\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :offline}}}\n\n      # Logs previous drive\n      assert_receive {:close_drive, ^drive, lookup_address: true}, 250\n\n      d1 = DateTime.from_unix!(now_ts + 1 + :timer.minutes(15), :millisecond)\n      assert_receive {:start_state, ^car, :online, date: ^d1}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, _drive, %{longitude: 0.2, speed: 32}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n      assert_receive {:insert_position, drive, %{longitude: 0.3}}\n      assert_receive {:close_drive, ^drive, lookup_address: true}\n\n      d2 = DateTime.from_unix!(now_ts + 1 + :timer.minutes(15) + 1, :millisecond)\n      assert_receive {:start_state, ^car, :online, date: ^d2}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      refute_receive _\n    end\n\n    @tag :capture_log\n    test \"continues a drive after a short offline period while driving\",\n         %{test: name} do\n      now = DateTime.utc_now()\n      now_ts = DateTime.to_unix(now, :millisecond)\n\n      events =\n        [\n          {:ok, online_event()},\n          drive_event(now_ts, 0.1, 30, 20, 200, nil),\n          drive_event(now_ts + 1, 0.1, 30, 20, 200, nil)\n        ] ++\n          List.duplicate({:ok, %TeslaApi.Vehicle{state: \"offline\"}}, 16) ++\n          [\n            drive_event(now_ts + :timer.minutes(4), 0.2, 20, 19, 190, nil),\n            {:ok,\n             online_event(\n               drive_state: %{\n                 timestamp: now_ts + :timer.minutes(4) + 1,\n                 latitude: 0.3,\n                 longitude: 0.3\n               }\n             )}\n          ]\n\n      :ok = start_vehicle(name, events)\n\n      d0 = DateTime.from_unix!(now_ts, :millisecond)\n      assert_receive {:start_state, car, :online, date: ^d0}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, drive, %{longitude: 0.1, speed: 48}}\n      assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 48}}\n\n      refute_receive _, 50\n\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n      assert_receive {:insert_position, drive, %{longitude: 0.2, speed: 32}}\n      assert_receive {:insert_position, ^drive, %{longitude: 0.3}}\n      assert_receive {:close_drive, ^drive, lookup_address: true}\n\n      d1 = DateTime.from_unix!(now_ts + :timer.minutes(4) + 1, :millisecond)\n      assert_receive {:start_state, ^car, :online, date: ^d1}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      refute_receive _\n    end\n  end\n\n  describe \"geofencing\" do\n    alias TeslaMate.Locations.GeoFence\n\n    test \"changes geofence when enterling or leaving\", %{test: name} do\n      ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n      drive_event = fn s, lat, lng ->\n        online_event(drive_state: %{timestamp: ts, shift_state: s, latitude: lat, longitude: lng})\n      end\n\n      events = [\n        {:ok, online_event()},\n        {:ok, drive_event.(\"D\", 90, 45)},\n        {:ok, drive_event.(\"D\", 90, 45.1)},\n        {:ok, drive_event.(\"D\", 90, 45.2)},\n        {:ok, drive_event.(\"D\", 90, 45.1)},\n        {:ok, drive_event.(\"P\", 90, 45)}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{longitude: 45}}\n\n      assert_receive {:pubsub,\n                      {:broadcast, _, _,\n                       %Summary{state: :online, geofence: %GeoFence{name: \"South Pole\"}}}}\n\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, drive, %{longitude: 45}}\n\n      assert_receive {:pubsub,\n                      {:broadcast, _, _,\n                       %Summary{state: :driving, geofence: %GeoFence{name: \"South Pole\"}}}}\n\n      assert_receive {:insert_position, ^drive, %{longitude: 45.1}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving, geofence: nil}}}\n\n      assert_receive {:insert_position, ^drive, %{longitude: 45.2}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving, geofence: nil}}}\n\n      assert_receive {:insert_position, ^drive, %{longitude: 45.1}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving, geofence: nil}}}\n\n      assert_receive {:insert_position, ^drive, %{longitude: 45}}\n      assert_receive {:close_drive, ^drive, lookup_address: true}\n\n      assert_receive {:start_state, ^car, :online, date: _}\n      assert_receive {:insert_position, ^car, %{longitude: 45}}\n\n      assert_receive {:pubsub,\n                      {:broadcast, _, _,\n                       %Summary{state: :online, geofence: %GeoFence{name: \"South Pole\"}}}}\n\n      refute_receive _\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vehicles/vehicle/streaming_test.exs",
    "content": "defmodule TeslaMate.Vehicles.Vehicle.StreamingTest do\n  use TeslaMate.VehicleCase, async: false\n\n  import ExUnit.CaptureLog\n\n  alias TeslaMate.Vehicles.Vehicle.Summary\n  alias TeslaMate.Vehicles.Vehicle\n  alias TeslaApi.Stream\n\n  defp stream(name, data) do\n    base_attrs = %{\n      shift_state: nil,\n      est_lat: 42.10,\n      est_lng: 42.00,\n      speed: 0,\n      odometer: 1000,\n      elevation: 10,\n      est_heading: 120,\n      est_range: 200,\n      range: 180,\n      heading: 300,\n      power: 0,\n      soc: 60,\n      time: nil\n    }\n\n    send(name, {:stream, struct!(Stream.Data, Map.merge(base_attrs, data))})\n  end\n\n  describe \"driving\" do\n    @log_opts format: \"[$level] $message\n\",\n              colors: [enabled: false]\n\n    @tag :capture_log\n    test \"starts a drive\", %{test: name} do\n      me = self()\n      now = DateTime.utc_now()\n      now_ts = DateTime.to_unix(now, :millisecond)\n\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event(drive_state: %{timestamp: now_ts})},\n        fn ->\n          send(me, :continue?)\n\n          receive do\n            :continue -> {:error, :closed}\n          after\n            5_000 -> raise \"No :continue after 5s\"\n          end\n        end,\n        {:error, :closed},\n        {:error, :closed},\n        {:error, :closed},\n        {:error, :closed},\n        {:ok,\n         online_event(\n           drive_state: %{\n             timestamp: now_ts + 10,\n             latitude: 42.91,\n             longitude: 42.81,\n             shift_state: \"P\",\n             speed: 0,\n             power: 0\n           }\n         )},\n        fn -> Process.sleep(10_000) end\n      ]\n\n      :ok = start_vehicle(name, events, settings: %{use_streaming_api: true})\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {ApiMock, {:stream, _eid, func}} when is_function(func)\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      assert_receive :continue?\n      stream(name, %{shift_state: \"P\", time: now})\n      refute_receive _\n\n      stream(name, %{shift_state: \"D\", speed: 10, power: 5, elevation: 1, time: now})\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, drive, position}\n\n      assert_receive {:pubsub,\n                      {:broadcast, _, _,\n                       %Summary{state: :driving, speed: 16, power: 5, elevation: 1}}}\n\n      assert position == %{\n               latitude: 42.1,\n               longitude: 42.0,\n               speed: 16,\n               battery_level: 60,\n               date: now,\n               elevation: 1,\n               odometer: 1609.344,\n               power: 5\n             }\n\n      stream(name, %{\n        shift_state: \"D\",\n        speed: 15,\n        power: 10,\n        est_lat: 42.31,\n        elevation: 2,\n        time: now\n      })\n\n      assert_receive {:insert_position, ^drive,\n                      %{speed: 24, power: 10, latitude: 42.31, elevation: 2}}\n\n      assert_receive {:pubsub,\n                      {:broadcast, _, _, %Summary{state: :driving, speed: 24, power: 10}}}\n\n      stream(name, %{\n        shift_state: \"N\",\n        speed: 20,\n        power: 2,\n        est_lat: 42.32,\n        elevation: 3,\n        time: now\n      })\n\n      assert_receive {:insert_position, ^drive,\n                      %{speed: 32, power: 2, latitude: 42.32, elevation: 3}}\n\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving, speed: 32, power: 2}}}\n\n      stream(name, %{\n        shift_state: \"R\",\n        speed: 3,\n        power: 1,\n        est_lat: 42.33,\n        elevation: 4,\n        time: now\n      })\n\n      assert_receive {:insert_position, ^drive,\n                      %{speed: 5, power: 1, latitude: 42.33, elevation: 4}}\n\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving, speed: 5, power: 1}}}\n\n      send(:\"api_#{name}\", :continue)\n      stream(name, %{shift_state: \"P\", speed: nil, power: nil, elevation: 5, time: now})\n\n      assert_receive {:insert_position, ^drive, %{speed: 0, power: 0}}\n      assert_receive {:close_drive, ^drive, lookup_address: true}\n\n      assert_receive {:start_state, ^car, :online, date: _}\n\n      assert_receive {:insert_position, ^car, %{latitude: 42.91, longitude: 42.81, speed: 0}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, elevation: 4}}}\n\n      refute_receive _\n    end\n\n    test \"discards fetch result\", %{test: name} do\n      me = self()\n      now = DateTime.utc_now()\n      now_ts = DateTime.to_unix(now, :millisecond)\n\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event(drive_state: %{timestamp: now_ts})},\n        fn ->\n          send(me, :continue?)\n\n          receive do\n            :continue ->\n              {:ok,\n               online_event(\n                 drive_state: %{\n                   timestamp: now_ts + 0,\n                   latitude: 42.91,\n                   longitude: 42.81,\n                   shift_state: \"P\",\n                   speed: 0,\n                   power: 0\n                 }\n               )}\n          after\n            5_000 -> raise \"No :continue after 5s\"\n          end\n        end,\n        fn ->\n          send(me, :continue?)\n\n          receive do\n            :continue ->\n              {:ok,\n               online_event(\n                 drive_state: %{\n                   timestamp: now_ts + 4,\n                   latitude: 42.91,\n                   longitude: 42.81,\n                   shift_state: \"P\",\n                   speed: 0,\n                   power: 0\n                 }\n               )}\n          after\n            5_000 -> raise \"No :continue after 5s\"\n          end\n        end,\n        fn -> Process.sleep(10_000) end\n      ]\n\n      d1 = DateTime.from_unix!(now_ts + 1, :millisecond)\n      d2 = DateTime.from_unix!(now_ts + 2, :millisecond)\n      d3 = DateTime.from_unix!(now_ts + 2, :millisecond)\n      d4 = DateTime.from_unix!(now_ts + 4, :millisecond)\n\n      :ok = start_vehicle(name, events, settings: %{use_streaming_api: true})\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {ApiMock, {:stream, _eid, func}} when is_function(func)\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      stream(name, %{shift_state: \"D\", time: d1})\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, drive, %{date: ^d1}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving, elevation: 10}}}\n\n      stream(name, %{shift_state: \"D\", time: d2})\n      assert_receive {:insert_position, ^drive, %{date: ^d2}}\n\n      assert capture_log(@log_opts, fn ->\n               stream(name, %{shift_state: \"P\", speed: nil, power: nil, time: d3})\n               assert_receive :continue?\n               send(:\"api_#{name}\", :continue)\n\n               assert_receive :continue?\n               refute_receive _\n             end) =~ \"\"\"\n             Discarded stale fetch result: [\n               now: %TeslaApi.Vehicle.State.Drive{\n                 active_route_destination: nil,\n                 active_route_energy_at_arrival: nil,\n                 active_route_latitude: nil,\n                 active_route_longitude: nil,\n                 active_route_miles_to_arrival: nil,\n                 active_route_minutes_to_arrival: nil,\n                 active_route_traffic_minutes_delay: nil,\n                 gps_as_of: nil,\n                 heading: nil,\n                 latitude: 42.91,\n                 longitude: 42.81,\n                 native_latitude: nil,\n                 native_location_supported: nil,\n                 native_longitude: nil,\n                 native_type: nil,\n                 power: 0,\n                 shift_state: \\\"P\\\",\n                 speed: 0,\n                 timestamp: #{now_ts}\n               },\n               last: %TeslaApi.Vehicle.State.Drive{\n                 active_route_destination: nil,\n                 active_route_energy_at_arrival: nil,\n                 active_route_latitude: nil,\n                 active_route_longitude: nil,\n                 active_route_miles_to_arrival: nil,\n                 active_route_minutes_to_arrival: nil,\n                 active_route_traffic_minutes_delay: nil,\n                 gps_as_of: nil,\n                 heading: 120,\n                 latitude: 42.1,\n                 longitude: 42.0,\n                 native_latitude: nil,\n                 native_location_supported: nil,\n                 native_longitude: nil,\n                 native_type: nil,\n                 power: 0,\n                 shift_state: \\\"D\\\",\n                 speed: 0,\n                 timestamp: #{DateTime.to_unix(d1, :millisecond)}\n               }\n             ]\n             \"\"\"\n\n      send(:\"api_#{name}\", :continue)\n\n      assert_receive {:insert_position, ^drive, %{date: ^d4, speed: 0, power: 0}}\n      assert_receive {:close_drive, ^drive, lookup_address: true}\n\n      assert_receive {:start_state, ^car, :online, date: ^d4}\n      assert_receive {:insert_position, ^car, %{date: ^d4}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      refute_receive _\n    end\n\n    @tag :capture_log\n    test \"discards stale stream data\", %{test: name} do\n      now = DateTime.utc_now()\n\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event(drive_state: %{timestamp: DateTime.to_unix(now, :millisecond)})},\n        fn -> Process.sleep(10_000) end\n      ]\n\n      :ok = start_vehicle(name, events, settings: %{use_streaming_api: true})\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {ApiMock, {:stream, _eid, func}} when is_function(func)\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      assert capture_log(@log_opts, fn ->\n               stream(name, %{shift_state: \"P\", time: DateTime.add(now, -1, :second)})\n               refute_receive _\n             end) =~ \"Received stale stream data\"\n    end\n  end\n\n  describe \"charging\" do\n    @tag :capture_log\n    test \"starts charging\", %{test: name} do\n      me = self()\n      now = DateTime.utc_now()\n      now_ts = DateTime.to_unix(now, :millisecond)\n\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event(drive_state: %{timestamp: now_ts})},\n        fn ->\n          send(me, :continue?)\n\n          receive do\n            :continue -> {:error, :closed}\n          after\n            5_000 -> raise \"No :continue after 5s\"\n          end\n        end,\n        {:ok, charging_event(now_ts + 1, \"Charging\", 0.0)},\n        {:ok, charging_event(now_ts + 2, \"Charging\", 1.0)},\n        {:ok, charging_event(now_ts + 3, \"Stopped\", 1.1)},\n        fn -> Process.sleep(10_000) end\n      ]\n\n      :ok = start_vehicle(name, events, settings: %{use_streaming_api: true})\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {ApiMock, {:stream, _eid, func}} when is_function(func)\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      assert_receive :continue?\n      stream(name, %{shift_state: nil, power: -1, time: now})\n      send(:\"api_#{name}\", :continue)\n\n      assert_receive {:start_charging_process, ^car, %{latitude: +0.0}, [lookup_address: true]}\n      assert_receive {:insert_charge, cproc, %{date: _, charge_energy_added: +0.0}}\n      assert_receive {:\"$websockex_cast\", :disconnect}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n\n      assert_receive {:insert_charge, ^cproc, %{date: _, charge_energy_added: 1.0}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:insert_charge, ^cproc, %{date: _, charge_energy_added: 1.1}}\n      assert_receive {:complete_charging_process, ^cproc}\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {ApiMock, {:stream, _eid, func}} when is_function(func)\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      refute_receive _\n    end\n  end\n\n  describe \"suspended\" do\n    test \"fetches the vehicle state if the stream becomes inactive\", %{test: name} do\n      me = self()\n\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event()},\n        {:ok, online_event()},\n        fn ->\n          send(me, :continue?)\n\n          receive do\n            :continue -> {:ok, %TeslaApi.Vehicle{state: \"asleep\"}}\n          after\n            5_000 -> raise \"No :continue after 5s\"\n          end\n        end,\n        fn -> Process.sleep(10_000) end\n      ]\n\n      :ok =\n        start_vehicle(name, events,\n          settings: %{use_streaming_api: true, suspend_min: 999_999_999}\n        )\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {ApiMock, {:stream, _eid, func}} when is_function(func)\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      assert :ok = Vehicle.suspend_logging(name)\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :suspended}}}\n\n      send(name, {:stream, :inactive})\n\n      assert_receive :continue?\n      send(:\"api_#{name}\", :continue)\n\n      assert_receive {:start_state, ^car, :asleep, []}\n      assert_receive {:\"$websockex_cast\", :disconnect}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :asleep}}}\n\n      refute_receive _\n    end\n\n    @tag :capture_log\n    test \"discards stale stream data when suspended\", %{test: name} do\n      now = DateTime.utc_now()\n      now_ts = DateTime.to_unix(now, :millisecond)\n\n      events = [\n        {:ok, online_event(drive_state: %{timestamp: now_ts})},\n        {:ok, online_event(drive_state: %{timestamp: now_ts + 1})},\n        {:ok, online_event(drive_state: %{timestamp: now_ts + 2})},\n        fn -> Process.sleep(10_000) end\n      ]\n\n      :ok = start_vehicle(name, events, settings: %{use_streaming_api: true})\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {ApiMock, {:stream, _eid, func}} when is_function(func)\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      assert :ok = Vehicle.suspend_logging(name)\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :suspended}}}\n\n      assert capture_log(@log_opts, fn ->\n               stream(name, %{shift_state: \"D\", time: DateTime.add(now, 1, :millisecond)})\n               refute_receive _\n             end) =~ \"Received stale stream data\"\n    end\n  end\n\n  test \"resumes logging when starting a drive\", %{test: name} do\n    now = DateTime.utc_now()\n\n    events = [\n      {:ok, online_event()},\n      {:ok, online_event()},\n      {:ok, online_event()},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok =\n      start_vehicle(name, events, settings: %{use_streaming_api: true, suspend_min: 999_999_999})\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {ApiMock, {:stream, _eid, func}} when is_function(func)\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert :ok = Vehicle.suspend_logging(name)\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :suspended}}}\n\n    stream(name, %{shift_state: \"P\", speed: 0, power: 0, elevation: 50, time: now})\n    refute_receive _\n\n    stream(name, %{shift_state: \"D\", speed: 50, power: 5, elevation: 50, time: now})\n    assert_receive {:start_drive, ^car}\n    assert_receive {:insert_position, _drive, position}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _, _, %Summary{state: :driving, speed: 80, elevation: 50}}}\n\n    assert position == %{\n             latitude: 42.1,\n             longitude: 42.0,\n             speed: 80,\n             battery_level: 60,\n             date: now,\n             elevation: 50,\n             odometer: 1609.344,\n             power: 5\n           }\n\n    refute_receive _\n  end\n\n  test \"resumes logging when starting to charge\", %{test: name} do\n    me = self()\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event(drive_state: %{timestamp: now_ts})},\n      {:ok, online_event(drive_state: %{timestamp: now_ts + 1})},\n      {:ok, online_event(drive_state: %{timestamp: now_ts + 2})},\n      fn ->\n        send(me, :continue?)\n\n        receive do\n          :continue -> {:ok, charging_event(now_ts + 3, \"Charging\", 0.0)}\n        after\n          5_000 -> raise \"No :continue after 5s\"\n        end\n      end,\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events, settings: %{use_streaming_api: true})\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {ApiMock, {:stream, _eid, func}} when is_function(func)\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert :ok = Vehicle.suspend_logging(name)\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :suspended}}}\n\n    stream(name, %{shift_state: nil, power: -5, time: DateTime.add(now, 2, :millisecond)})\n    assert_receive :continue?\n    send(:\"api_#{name}\", :continue)\n\n    assert_receive {:start_charging_process, ^car, %{latitude: +0.0}, [lookup_address: true]},\n                   1000\n\n    assert_receive {:insert_charge, _cproc, %{date: _, charge_energy_added: +0.0}}\n    assert_receive {:\"$websockex_cast\", :disconnect}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n\n    refute_receive _\n  end\n\n  describe \"updating\" do\n    test \"disconnects stream\", %{test: name} do\n      now = DateTime.utc_now()\n      now_ts = DateTime.to_unix(now, :millisecond)\n\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event(drive_state: %{timestamp: now_ts})},\n        {:ok, update_event(now_ts + 10, \"installing\", \"2019.8.4 530d1d3\")},\n        fn -> Process.sleep(10_000) end\n      ]\n\n      :ok = start_vehicle(name, events, settings: %{use_streaming_api: true})\n\n      assert_receive {:start_state, car_id, :online, date: _}\n      assert_receive {:insert_position, ^car_id, %{}}\n      assert_receive {ApiMock, {:stream, _eid, func}} when is_function(func)\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      assert_receive {:start_update, ^car_id, date: _}\n      assert_receive {:\"$websockex_cast\", :disconnect}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :updating}}}\n\n      # Handles unexpected stream messages\n      stream(name, %{time: DateTime.utc_now()})\n\n      refute_receive _\n    end\n  end\n\n  describe \"offline\" do\n    test \"fetch state when stream get :vehicle_offline\", %{test: name} do\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event()},\n        fn -> Process.sleep(10_000) end\n      ]\n\n      :ok =\n        start_vehicle(name, events,\n          settings: %{use_streaming_api: true, suspend_min: 999_999_999}\n        )\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {ApiMock, {:stream, _eid, func}} when is_function(func)\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      assert capture_log(@log_opts, fn ->\n               send(name, {:stream, :vehicle_offline})\n               refute_receive _\n             end) =~ \"Stream reports vehicle as offline, fetching vehicle state ...\"\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vehicles/vehicle/suspend_logging_test.exs",
    "content": "defmodule TeslaMate.Vehicles.Vehicle.SuspendLoggingTest do\n  use TeslaMate.VehicleCase, async: false\n\n  alias TeslaMate.Vehicles.Vehicle.Summary\n  alias TeslaMate.Vehicles.Vehicle\n\n  test \"immediately returns :ok if asleep\", %{test: name} do\n    events = [\n      {:ok, %TeslaApi.Vehicle{state: \"asleep\"}}\n    ]\n\n    :ok = start_vehicle(name, events)\n    assert_receive {:start_state, _, :asleep, []}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :asleep}}}\n\n    assert :ok = Vehicle.suspend_logging(name)\n    refute_receive _\n  end\n\n  test \"immediately returns :ok if offline\", %{test: name} do\n    events = [\n      {:ok, %TeslaApi.Vehicle{state: \"offline\"}}\n    ]\n\n    :ok = start_vehicle(name, events)\n    assert_receive {:start_state, _, :offline, []}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :offline}}}\n\n    assert :ok = Vehicle.suspend_logging(name)\n    refute_receive _\n  end\n\n  test \"immediately returns :ok if already suspending\", %{test: name} do\n    events = [\n      {:ok, online_event()}\n    ]\n\n    :ok = start_vehicle(name, events)\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert :ok = Vehicle.suspend_logging(name)\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :suspended}}}\n    assert :ok = Vehicle.suspend_logging(name)\n\n    refute_receive _\n  end\n\n  test \"cannot be suspended if vehicle is preconditioning\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        climate_state: %{is_preconditioning: true}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :preconditioning} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended if user is present\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{is_user_present: true, car_version: \"\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :user_present} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended if a download is in progress\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{\n          software_update: %TeslaApi.Vehicle.State.VehicleState.SoftwareUpdate{\n            status: \"downloading\",\n            download_perc: 10\n          },\n          car_version: \"\"\n        }\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :downloading_update} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended if sentry mode is active\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{sentry_mode: true, car_version: \"\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :sentry_mode} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended if vehicle is unlocked\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{locked: false, car_version: \"\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    :ok = start_vehicle(name, events, settings: %{req_not_unlocked: true})\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :unlocked} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended if any of the doors are open\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{df: 0, dr: 0, pf: 1, pr: 0, car_version: \"\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    :ok = start_vehicle(name, events, settings: %{req_not_unlocked: true})\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :doors_open} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended if the rear or front trunk is open\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{rt: 1, ft: 1, car_version: \"\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    :ok = start_vehicle(name, events, settings: %{req_not_unlocked: true})\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :trunk_open} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended if shift_state is D\", %{test: name} do\n    not_suspendable =\n      online_event(drive_state: %{timestamp: 0, shift_state: \"D\", latitude: 0.0, longitude: 0.0})\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    :ok = start_vehicle(name, events)\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :vehicle_not_parked} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended if shift_state is R\", %{test: name} do\n    not_suspendable =\n      online_event(drive_state: %{timestamp: 0, shift_state: \"R\", latitude: 0.0, longitude: 0.0})\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    :ok = start_vehicle(name, events)\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :vehicle_not_parked} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended if shift_state is N\", %{test: name} do\n    not_suspendable =\n      online_event(drive_state: %{timestamp: 0, shift_state: \"N\", latitude: 0.0, longitude: 0.0})\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    :ok = start_vehicle(name, events)\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :vehicle_not_parked} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended while driving\", %{test: name} do\n    events = [\n      {:ok, online_event()},\n      {:ok, drive_event(0, \"D\", 0)}\n    ]\n\n    :ok = start_vehicle(name, events)\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :vehicle_not_parked} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended while updating\", %{test: name} do\n    now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, update_event(now_ts, \"installing\", \"2019.8.4 530d1d3\")}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^start_date}\n    assert_receive {:start_update, _car, date: ^start_date}\n\n    assert {:error, :update_in_progress} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended while charing is not complete\", %{test: name} do\n    events = [\n      {:ok, online_event()},\n      {:ok, charging_event(0, \"Charging\", 1.5)}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, _, :online, date: ^date}\n\n    assert {:error, :charging_in_progress} = Vehicle.suspend_logging(name)\n  end\n\n  test \"cannot be suspended if the data is incomplete\", %{test: name} do\n    events = [\n      {:ok, online_event()},\n      {:ok, online_event()},\n      {:ok, %TeslaApi.Vehicle{state: \"online\"}}\n    ]\n\n    :ok = start_vehicle(name, events)\n    assert_receive {:start_state, _, :online, date: _}\n\n    assert {:error, :gateway_error} = Vehicle.suspend_logging(name)\n  end\n\n  test \"suspends when charging is complete\", %{test: name} do\n    now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, charging_event(now_ts, \"Charging\", 1.5)},\n      {:ok, charging_event(now_ts + 1, \"Complete\", 1.5)},\n      {:ok, charging_event(now_ts + 2, \"Complete\", 1.5)},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    d0 = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^d0}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, since: s0}}}\n\n    assert_receive {:start_charging_process, ^car, %{latitude: +0.0, longitude: +0.0},\n                    [lookup_address: true]}\n\n    assert_receive {:\"$websockex_cast\", :disconnect}\n    assert_receive {:insert_charge, cproc, %{date: _, charge_energy_added: 1.5}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging, since: s1}}}\n    assert DateTime.diff(s0, s1, :nanosecond) < 0\n\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:insert_charge, ^cproc, %{date: _, charge_energy_added: 1.5}}\n    assert_receive {:complete_charging_process, ^cproc}\n\n    d1 = DateTime.from_unix!(now_ts + 1, :millisecond)\n    assert_receive {:start_state, ^car, :online, date: ^d1}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, since: s2}}}\n    assert DateTime.diff(s1, s2, :nanosecond) < 0\n\n    assert :ok = Vehicle.suspend_logging(name)\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :suspended, since: s3}}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert DateTime.diff(s2, s3, :nanosecond) < 0\n\n    refute_receive _\n  end\n\n  test \"is suspendable when idling\", %{test: name} do\n    events = [\n      {:ok, online_event()}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, since: s0}}}\n\n    assert :ok = Vehicle.suspend_logging(name)\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :suspended, since: s1}}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert DateTime.diff(s0, s1, :nanosecond) < 0\n\n    refute_receive _\n  end\n\n  test \"detects if vehicle was locked\", %{\n    test: name\n  } do\n    unlocked =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{locked: false, car_version: \"\"}\n      )\n\n    locked =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{locked: true}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, unlocked},\n      {:ok, unlocked},\n      {:ok, locked},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    date = DateTime.from_unix!(0, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^date}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n\n    assert {:error, :unlocked} = Vehicle.suspend_logging(name)\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{locked: false, state: :online}}}\n\n    assert :ok = Vehicle.suspend_logging(name)\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{locked: true, state: :suspended}}}\n\n    refute_receive _\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vehicles/vehicle/suspend_test.exs",
    "content": "defmodule TeslaMate.Vehicles.Vehicle.SuspendTest do\n  use TeslaMate.VehicleCase, async: false\n\n  alias TeslaMate.Vehicles.Vehicle.Summary\n\n  test \"suspends when idling\", %{test: name} do\n    now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    suspendable = fn ts ->\n      online_event(\n        drive_state: %{timestamp: ts, latitude: 0.0, longitude: 0.0},\n        climate_state: %{is_preconditioning: false}\n      )\n    end\n\n    events = [\n      {:ok, suspendable.(now_ts + 0)},\n      {:ok, suspendable.(now_ts + 1)},\n      {:ok, suspendable.(now_ts + 2)},\n      {:ok, suspendable.(now_ts + 3)},\n      {:ok, suspendable.(now_ts + 4)},\n      {:ok, suspendable.(now_ts + 5)},\n      {:ok, suspendable.(now_ts + 6)},\n      {:ok, suspendable.(now_ts + 7)},\n      {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, since: s0}}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :suspended, since: s1}}}\n    assert DateTime.diff(s0, s1, :nanosecond) < 0\n    assert_receive {:insert_position, ^car, %{}}\n\n    assert_receive {:start_state, ^car, :asleep, []}\n    assert_receive {:\"$websockex_cast\", :disconnect}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :asleep, since: s2}}}\n    assert DateTime.diff(s1, s2, :nanosecond) < 0\n\n    refute_receive _\n  end\n\n  test \"counts how long it takes to fall asleep\", %{test: name} do\n    now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n    suspendable = fn ts, t ->\n      online_event(\n        drive_state: %{timestamp: ts, latitude: 0.0, longitude: 0.0},\n        climate_state: %{is_preconditioning: false, outside_temp: t}\n      )\n    end\n\n    events = [\n      {:ok, suspendable.(now_ts + 0, 10.0)},\n      {:ok, suspendable.(now_ts + 1, 10.1)},\n      {:ok, suspendable.(now_ts + 2, 10.2)},\n      {:ok, suspendable.(now_ts + 3, 10.3)},\n      {:ok, suspendable.(now_ts + 4, 10.4)},\n      {:ok, suspendable.(now_ts + 5, 10.5)},\n      {:ok, suspendable.(now_ts + 6, 10.6)},\n      {:ok, suspendable.(now_ts + 7, 10.7)},\n      {:ok, suspendable.(now_ts + 8, 10.8)},\n      {:ok, suspendable.(now_ts + 9, 10.9)},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _, _, %Summary{state: :online, since: s0, outside_temp: 10.1}}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _, _, %Summary{state: :online, since: ^s0, outside_temp: 10.2}}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _, _, %Summary{state: :online, since: ^s0, outside_temp: 10.3}}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _, _, %Summary{state: :online, since: ^s0, outside_temp: 10.4}}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _, _, %Summary{state: :online, since: ^s0, outside_temp: 10.5}}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _, _, %Summary{state: :online, since: ^s0, outside_temp: 10.6}}}\n\n    assert_receive {:insert_position, ^car, %{}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _, _, %Summary{state: :suspended, since: s1, outside_temp: 10.7}}}\n\n    assert DateTime.diff(s0, s1, :nanosecond) < 0\n\n    assert_receive {:insert_position, ^car, %{}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _, _,\n                     %Summary{state: :suspended, since: ^s1, outside_temp: 10.9}}}\n\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"does not suspend if preconditioning\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        climate_state: %{is_preconditioning: true}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    suspend_after_idle_ms = 10\n    suspend_ms = 100\n\n    :ok =\n      start_vehicle(name, events,\n        settings: %{\n          suspend_after_idle_min: round(suspend_after_idle_ms / 60),\n          suspend_min: suspend_ms\n        }\n      )\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n    refute_receive _, round(suspend_ms * 0.5)\n\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"does not suspend if dog mode is active\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        climate_state: %{climate_keeper_mode: \"dog\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    suspend_after_idle_ms = 10\n    suspend_ms = 100\n\n    :ok =\n      start_vehicle(name, events,\n        settings: %{\n          suspend_after_idle_min: round(suspend_after_idle_ms / 60),\n          suspend_min: suspend_ms\n        }\n      )\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n    refute_receive _, round(suspend_ms * 0.5)\n\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"does not suspend if user is present\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{is_user_present: true, car_version: \"\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    suspend_after_idle_ms = 10\n    suspend_ms = 100\n\n    :ok =\n      start_vehicle(name, events,\n        settings: %{\n          suspend_after_idle_min: round(suspend_after_idle_ms / 60),\n          suspend_min: suspend_ms\n        }\n      )\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n    refute_receive _, round(suspend_ms * 0.5)\n\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"does not suspend if a download is in progress\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{\n          software_update: %TeslaApi.Vehicle.State.VehicleState.SoftwareUpdate{\n            status: \"downloading\",\n            download_perc: 10\n          },\n          car_version: \"\"\n        }\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    suspend_after_idle_ms = 10\n    suspend_ms = 200\n\n    :ok =\n      start_vehicle(name, events,\n        settings: %{\n          suspend_after_idle_min: round(suspend_after_idle_ms / 60),\n          suspend_min: suspend_ms\n        }\n      )\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n    refute_receive _, round(suspend_ms * 0.5)\n\n    refute_receive _\n  end\n\n  test \"does not suspend if sentry mode is active\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{sentry_mode: true, car_version: \"\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    suspend_after_idle_ms = 10\n    suspend_ms = 100\n\n    :ok =\n      start_vehicle(name, events,\n        settings: %{\n          suspend_after_idle_min: round(suspend_after_idle_ms / 60),\n          suspend_min: suspend_ms\n        }\n      )\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, sentry_mode: true}}}\n\n    refute_receive _, round(suspend_ms * 0.5)\n\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"does not suspend if any of the doors are open\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{df: 0, dr: 0, pf: 1, pr: 0, car_version: \"\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    suspend_after_idle_ms = 10\n    suspend_ms = 100\n\n    :ok =\n      start_vehicle(name, events,\n        settings: %{\n          suspend_after_idle_min: round(suspend_after_idle_ms / 60),\n          suspend_min: suspend_ms\n        }\n      )\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, doors_open: true}}}\n\n    refute_receive _, round(suspend_ms * 0.5)\n\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"does not suspend if the rear or front trunk is open\", %{test: name} do\n    not_suspendable =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{rt: 0, ft: 1, car_version: \"\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, not_suspendable}\n    ]\n\n    suspend_after_idle_ms = 10\n    suspend_ms = 100\n\n    :ok =\n      start_vehicle(name, events,\n        settings: %{\n          suspend_after_idle_min: round(suspend_after_idle_ms / 60),\n          suspend_min: suspend_ms\n        }\n      )\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, frunk_open: true}}}\n\n    refute_receive _, round(suspend_ms * 0.5)\n\n    refute_receive _\n  end\n\n  test \"suspends if charging is complete\", %{test: name} do\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, charging_event(now_ts + 1, \"Charging\", 0.1)},\n      {:ok, charging_event(now_ts + 2, \"Complete\", 0.2)},\n      {:ok, charging_event(now_ts + 3, \"Complete\", 0.3)},\n      {:ok, charging_event(now_ts + 3, \"Complete\", 0.3)},\n      {:ok, charging_event(now_ts + 3, \"Complete\", 0.3)},\n      {:ok, charging_event(now_ts + 3, \"Complete\", 0.3)},\n      {:ok, charging_event(now_ts + 3, \"Complete\", 0.3)},\n      {:ok, charging_event(now_ts + 3, \"Complete\", 0.3)},\n      {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    d0 = DateTime.from_unix!(now_ts + 1, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^d0}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert_receive {:start_charging_process, ^car, %{latitude: +0.0, longitude: +0.0},\n                    [lookup_address: true]}\n\n    assert_receive {:\"$websockex_cast\", :disconnect}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:insert_charge, charge_id, %{date: _, charge_energy_added: 0.1}}\n    assert_receive {:insert_charge, ^charge_id, %{date: _, charge_energy_added: 0.2}}\n    assert_receive {:complete_charging_process, ^charge_id}\n\n    assert_receive {:start_state, ^car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    # ...\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :suspended}}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:start_state, ^car, :asleep, []}, 50\n    assert_receive {:\"$websockex_cast\", :disconnect}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :asleep}}}\n\n    refute_receive _\n  end\n\n  test \"continues charging if suspending wasn't successful\", %{test: name} do\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, charging_event(now_ts + 0, \"Charging\", 0.1)},\n      {:ok, charging_event(now_ts + 1, \"Charging\", 0.1)},\n      {:ok, charging_event(now_ts + 2, \"Complete\", 0.15)},\n      {:ok, charging_event(now_ts + 3, \"Complete\", 0.15)},\n      {:ok, charging_event(now_ts + 4, \"Complete\", 0.15)},\n      {:ok, charging_event(now_ts + 5, \"Complete\", 0.15)},\n      {:ok, charging_event(now_ts + 6, \"Complete\", 0.15)},\n      {:ok, charging_event(now_ts + 7, \"Complete\", 0.15)},\n      {:ok, charging_event(now_ts + 8, \"Complete\", 0.15)},\n      {:ok, charging_event(now_ts + 9, \"Charging\", 0.2)},\n      {:ok, charging_event(now_ts + 10, \"Charging\", 0.2)},\n      {:ok, charging_event(now_ts + 11, \"Charging\", 0.3)}\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    d0 = DateTime.from_unix!(now_ts + 0, :millisecond)\n    assert_receive {:start_state, car, :online, date: ^d0}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert_receive {:start_charging_process, ^car, %{latitude: +0.0, longitude: +0.0},\n                    [lookup_address: true]}\n\n    assert_receive {:insert_charge, cproc_0, %{date: _, charge_energy_added: 0.1}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n\n    assert_receive {:insert_charge, ^cproc_0, %{date: _, charge_energy_added: 0.15}}\n    assert_receive {:complete_charging_process, ^cproc_0}\n\n    d1 = DateTime.from_unix!(now_ts + 2, :millisecond)\n    assert_receive {:start_state, ^car, :online, date: ^d1}\n    assert_receive {:insert_position, ^car, %{}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :suspended}}}\n\n    # new charging session\n\n    TestHelper.eventually(\n      fn -> assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}} end,\n      delay: 50,\n      attempts: 3\n    )\n\n    assert_receive {:insert_charge, cproc_1, %{date: _, charge_energy_added: 0.2}}\n    assert cproc_0 != cproc_1\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :charging}}}\n    assert_receive {:insert_charge, ^cproc_1, %{date: _, charge_energy_added: 0.3}}\n\n    # ...\n  end\n\n  test \"broadcasts if vehicle gets (un)locked when idling\", %{test: name} do\n    unlocked =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{locked: false, car_version: \"\"}\n      )\n\n    locked =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{locked: true, car_version: \"\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, unlocked},\n      {:ok, locked},\n      {:ok, unlocked},\n      {:ok, locked},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events)\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, locked: false}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, locked: true}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, locked: false}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, locked: true}}}\n\n    refute_receive _\n  end\n\n  test \"broadcasts if sentry mode gets turned on/off\", %{test: name} do\n    sentry_mode_on =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{sentry_mode: true, car_version: \"\"}\n      )\n\n    sentry_mode_off =\n      online_event(\n        drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n        vehicle_state: %{sentry_mode: false, car_version: \"\"}\n      )\n\n    events = [\n      {:ok, online_event()},\n      {:ok, sentry_mode_on},\n      {:ok, sentry_mode_off},\n      {:ok, sentry_mode_on},\n      {:ok, sentry_mode_off}\n    ]\n\n    :ok =\n      start_vehicle(name, events,\n        settings: %{\n          suspend_after_idle_min: 100_000,\n          suspend_min: 1000\n        }\n      )\n\n    assert_receive {:start_state, car, :online, date: _}\n    assert_receive {ApiMock, {:stream, 1000, _}}\n    assert_receive {:insert_position, ^car, %{}}\n\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, sentry_mode: true}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, sentry_mode: false}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, sentry_mode: true}}}\n    assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, sentry_mode: false}}}\n\n    refute_receive _\n  end\n\n  describe \"req_not_unlocked\" do\n    @tag :capture_log\n    test \"does not suspend if vehicle is unlocked\", %{test: name} do\n      not_suspendable =\n        online_event(\n          drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n          vehicle_state: %{locked: false, car_version: \"\"}\n        )\n\n      events = [\n        {:ok, online_event()},\n        {:ok, not_suspendable}\n      ]\n\n      suspend_after_idle_ms = 10\n      suspend_ms = 100\n\n      :ok =\n        start_vehicle(name, events,\n          settings: %{\n            req_not_unlocked: true,\n            suspend_after_idle_min: round(suspend_after_idle_ms / 60),\n            suspend_min: suspend_ms\n          }\n        )\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, locked: false}}}\n\n      refute_receive _, round(suspend_ms * 0.5)\n\n      refute_receive _\n    end\n\n    @tag :capture_log\n    test \"w/o does suspend if vehicle is unlocked\", %{test: name} do\n      now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n      not_suspendable = fn ts ->\n        online_event(\n          drive_state: %{timestamp: ts, latitude: 0.0, longitude: 0.0},\n          vehicle_state: %{locked: false, car_version: \"\"}\n        )\n      end\n\n      events = [\n        {:ok, not_suspendable.(now_ts + 0)},\n        {:ok, not_suspendable.(now_ts + 1)},\n        {:ok, not_suspendable.(now_ts + 2)},\n        {:ok, not_suspendable.(now_ts + 3)},\n        {:ok, not_suspendable.(now_ts + 4)},\n        {:ok, not_suspendable.(now_ts + 5)},\n        {:ok, not_suspendable.(now_ts + 6)},\n        {:ok, not_suspendable.(now_ts + 7)},\n        {:ok, not_suspendable.(now_ts + 8)},\n        {:ok, not_suspendable.(now_ts + 9)},\n        {:ok, not_suspendable.(now_ts + 10)},\n        {:ok, not_suspendable.(now_ts + 11)},\n        {:ok, not_suspendable.(now_ts + 12)},\n        fn -> Process.sleep(10_000) end\n      ]\n\n      :ok = start_vehicle(name, events, settings: %{req_not_unlocked: false})\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, since: s0}}}\n\n      d0 = DateTime.from_unix!(now_ts + 7, :millisecond)\n      assert_receive {:insert_position, ^car, %{date: ^d0}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :suspended, since: s1}}}\n      assert DateTime.diff(s0, s1, :nanosecond) < 0\n\n      d1 = DateTime.from_unix!(now_ts + 9, :millisecond)\n      assert_receive {:insert_position, ^car, %{date: ^d1}}\n\n      d2 = DateTime.from_unix!(now_ts + 11, :millisecond)\n      assert_receive {:insert_position, ^car, %{date: ^d2}}\n\n      refute_receive _, 500\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vehicles/vehicle/updating_test.exs",
    "content": "defmodule TeslaMate.Vehicles.Vehicle.UpdatingTest do\n  use TeslaMate.VehicleCase, async: false\n\n  alias TeslaMate.Vehicles.Vehicle.Summary\n\n  @tag :capture_log\n  test \"logs an update cycle\", %{test: name} do\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, update_event(now_ts - 1, \"available\", nil, update_version: \"2019.8.5 3aaa23d\")},\n      {:ok, update_event(now_ts, \"installing\", \"2019.8.4 530d1d3\")},\n      {:ok, update_event(now_ts + 1, \"installing\", \"2019.8.4 530d1d3\")},\n      {:ok, update_event(now_ts + 2, \"installing\", \"2019.8.4 530d1d3\")},\n      {:ok, %TeslaApi.Vehicle{state: \"online\", vehicle_state: nil}},\n      {:error, :vehicle_unavailable},\n      {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n      {:ok, update_event(now_ts + 5, \"installing\", \"2019.8.4 530d1d3\")},\n      {:ok, update_event(now_ts + 6, \"\", \"2019.8.5 3aaa23d\")},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    end_date = DateTime.from_unix!(now_ts + 6, :millisecond)\n\n    :ok = start_vehicle(name, events, settings: %{use_streaming_api: false})\n\n    d0 = DateTime.from_unix!(now_ts - 1, :millisecond)\n    assert_receive {:start_state, car_id, :online, date: ^d0}, 600\n    assert_receive {:insert_position, ^car_id, %{}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _server, _topic,\n                     %Summary{\n                       state: :online,\n                       since: s0,\n                       update_available: true,\n                       update_version: \"2019.8.5\"\n                     }}}\n\n    assert_receive {:start_update, ^car_id, [date: ^start_date]}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _server, _topic,\n                     %Summary{state: :updating, since: s1, version: \"2019.8.4\"}}}\n\n    assert DateTime.diff(s0, s1, :nanosecond) < 0\n    assert_receive {:finish_update, _update_id, \"2019.8.5 3aaa23d\", date: ^end_date}, 200\n\n    d1 = DateTime.from_unix!(now_ts + 6, :millisecond)\n    assert_receive {:start_state, ^car_id, :online, date: ^d1}\n    assert_receive {:insert_position, ^car_id, %{}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _server, _topic,\n                     %Summary{state: :online, since: s2, version: \"2019.8.5\"}}}\n\n    assert DateTime.diff(s1, s2, :nanosecond) < 0\n\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"logs an update if the status is not empty\", %{test: name} do\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok, update_event(now_ts - 1, \"available\", nil, update_version: \"2019.8.5 3aaa23d\")},\n      {:ok, update_event(now_ts, \"installing\", \"2019.8.4 530d1d3\")},\n      {:ok, update_event(now_ts + 1, \"foo\", \"2019.8.5 3aaa23d\")},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    start_date = DateTime.from_unix!(now_ts, :millisecond)\n    end_date = DateTime.from_unix!(now_ts + 1, :millisecond)\n\n    :ok = start_vehicle(name, events, settings: %{use_streaming_api: false})\n\n    d0 = DateTime.from_unix!(now_ts - 1, :millisecond)\n    assert_receive {:start_state, car_id, :online, date: ^d0}, 600\n    assert_receive {:insert_position, ^car_id, %{}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _server, _topic,\n                     %Summary{\n                       state: :online,\n                       since: s0,\n                       update_available: true,\n                       update_version: \"2019.8.5\"\n                     }}}\n\n    assert_receive {:start_update, ^car_id, date: ^start_date}\n    assert_receive {:pubsub, {:broadcast, _server, _topic, %Summary{state: :updating, since: s1}}}\n    assert DateTime.diff(s0, s1, :nanosecond) < 0\n    assert_receive {:finish_update, _update_id, \"2019.8.5 3aaa23d\", date: ^end_date}, 200\n\n    d1 = DateTime.from_unix!(now_ts + 1, :millisecond)\n    assert_receive {:start_state, ^car_id, :online, date: ^d1}\n    assert_receive {:insert_position, ^car_id, %{}}\n    assert_receive {:pubsub, {:broadcast, _server, _topic, %Summary{state: :online, since: s2}}}\n    assert DateTime.diff(s1, s2, :nanosecond) < 0\n\n    refute_receive _\n  end\n\n  @tag :capture_log\n  test \"cancels an update\", %{test: name} do\n    now = DateTime.utc_now()\n    now_ts = DateTime.to_unix(now, :millisecond)\n\n    events = [\n      {:ok, online_event()},\n      {:ok,\n       update_event(now_ts, \"installing\", \"2019.8.4 530d1d3\", update_version: \"2019.8.5 3aaa23d\")},\n      {:ok,\n       update_event(now_ts + 10, \"available\", \"2019.8.4 530d1d3\",\n         update_version: \"2019.8.5 3aaa23d\"\n       )},\n      fn -> Process.sleep(10_000) end\n    ]\n\n    :ok = start_vehicle(name, events, settings: %{use_streaming_api: false})\n\n    d0 = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_state, car_id, :online, date: ^d0}\n    assert_receive {:insert_position, ^car_id, %{}}\n    assert_receive {:pubsub, {:broadcast, _server, _topic, %Summary{state: :online}}}\n\n    date = DateTime.from_unix!(now_ts, :millisecond)\n    assert_receive {:start_update, ^car_id, date: ^date}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _server, _topic,\n                     %Summary{state: :updating, version: \"2019.8.4\", update_version: \"2019.8.5\"}}}\n\n    assert_receive {:cancel_update, _update_id}, 200\n\n    d1 = DateTime.from_unix!(now_ts + 10, :millisecond)\n    assert_receive {:start_state, ^car_id, :online, date: ^d1}, 600\n    assert_receive {:insert_position, ^car_id, %{}}\n\n    assert_receive {:pubsub,\n                    {:broadcast, _server, _topic,\n                     %Summary{state: :online, version: \"2019.8.4\", update_version: \"2019.8.5\"}}}\n\n    refute_receive _\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vehicles/vehicle_sync_test.exs",
    "content": "defmodule TeslaMate.Vehicles.VehicleSyncTest do\n  use TeslaMate.VehicleCase, async: false\n\n  describe \"Summary\" do\n    alias TeslaMate.Vehicles.Vehicle.Summary\n    alias TeslaMate.Mqtt.PubSub.VehicleSubscriber\n    alias TeslaMate.Log.Car\n    alias TeslaMate.Log\n\n    defp start_subscriber(name, %Car{id: car_id}) do\n      publisher_name = :\"mqtt_publisher_#{name}\"\n\n      {:ok, _pid} = start_supervised({MqttPublisherMock, name: publisher_name, pid: self()})\n\n      start_supervised(\n        {VehicleSubscriber,\n         [\n           name: name,\n           car_id: car_id,\n           namespace: nil,\n           deps_publisher: {MqttPublisherMock, publisher_name}\n         ]}\n      )\n    end\n\n    test \"restores and publishes last known values\", %{test: name} do\n      events = [\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\", display_name: \"bar\"}},\n        fn -> Process.sleep(10_000) end\n      ]\n\n      {:ok, car} =\n        Log.create_car(%{\n          eid: 43_903_421,\n          model: \"S\",\n          vid: 43_903_421,\n          name: \"foo\",\n          trim_badging: \"P100D\",\n          vin: \"19023450213412345F\"\n        })\n\n      {:ok, _} =\n        Log.insert_position(\n          car,\n          %{\n            date: DateTime.utc_now(),\n            latitude: 37.8895442,\n            longitude: 41.1288167,\n            speed: nil,\n            power: 0,\n            odometer: 91887.725564,\n            ideal_battery_range_km: 315.06,\n            battery_level: 64,\n            outside_temp: 16.5,\n            elevation: nil,\n            fan_status: 0,\n            driver_temp_setting: 15.0,\n            passenger_temp_setting: 15.0,\n            is_climate_on: false,\n            is_rear_defroster_on: false,\n            is_front_defroster_on: false,\n            inside_temp: 20.1,\n            battery_heater: false,\n            battery_heater_on: false,\n            battery_heater_no_power: nil,\n            est_battery_range_km: 268.07,\n            rated_battery_range_km: 315.06,\n            usable_battery_level: 64\n          }\n        )\n\n      :ok = start_vehicle(name, events, car: car, log: false)\n      {:ok, subscriber} = start_subscriber(name, car)\n\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :asleep} = summary}}\n\n      assert summary == %Summary{\n               battery_level: 64,\n               car: car,\n               charge_energy_added: :unknown,\n               charge_limit_soc: nil,\n               charge_port_door_open: :unknown,\n               charger_actual_current: :unknown,\n               charger_phases: :unknown,\n               charger_power: :unknown,\n               charger_voltage: :unknown,\n               display_name: \"bar\",\n               doors_open: nil,\n               elevation: nil,\n               est_battery_range_km: 268.07,\n               exterior_color: nil,\n               frunk_open: nil,\n               geofence: nil,\n               heading: nil,\n               healthy: true,\n               ideal_battery_range_km: 315.06,\n               inside_temp: Decimal.from_float(20.1),\n               is_climate_on: nil,\n               is_preconditioning: nil,\n               is_user_present: nil,\n               latitude: Decimal.from_float(37.889544),\n               locked: nil,\n               longitude: Decimal.from_float(41.128817),\n               model: \"S\",\n               odometer: 91887.73,\n               outside_temp: Decimal.from_float(16.5),\n               plugged_in: :unknown,\n               rated_battery_range_km: 315.06,\n               scheduled_charging_start_time: :unknown,\n               sentry_mode: nil,\n               shift_state: :unknown,\n               since: summary.since,\n               speed: nil,\n               spoiler_type: nil,\n               state: :asleep,\n               time_to_full_charge: :unknown,\n               trim_badging: \"P100D\",\n               trunk_open: nil,\n               update_available: nil,\n               usable_battery_level: 64,\n               version: nil,\n               wheel_type: nil,\n               windows_open: nil\n             }\n\n      send(subscriber, summary)\n\n      for {key, val} <- [\n            battery_level: 64,\n            display_name: \"bar\",\n            est_battery_range_km: 268.07,\n            geofence: nil,\n            healthy: true,\n            ideal_battery_range_km: 315.06,\n            inside_temp: 20.1,\n            latitude: 37.889544,\n            longitude: 41.128817,\n            model: \"S\",\n            odometer: 91887.73,\n            outside_temp: 16.5,\n            rated_battery_range_km: 315.06,\n            since: DateTime.to_iso8601(summary.since),\n            state: :asleep,\n            trim_badging: \"P100D\",\n            usable_battery_level: 64\n          ] do\n        topic = \"teslamate/cars/#{car.id}/#{key}\"\n        data = to_string(val)\n        retain = key not in [:healthy]\n        assert_receive {MqttPublisherMock, {:publish, ^topic, ^data, [retain: ^retain, qos: 1]}}\n      end\n\n      # Handle the healthy message that's published separately with retain: true\n      topic = \"teslamate/cars/#{car.id}/healthy\"\n      assert_receive {MqttPublisherMock, {:publish, ^topic, \"\", [retain: true, qos: 1]}}\n\n      topic = \"teslamate/cars/#{car.id}/location\"\n      assert_receive {MqttPublisherMock, {:publish, ^topic, data, [retain: true, qos: 1]}}\n\n      assert Jason.decode!(data) == %{\n               \"latitude\" => 37.889544,\n               \"longitude\" => 41.128817\n             }\n\n      # Published as nil\n      for key <- [\n            :active_route_destination,\n            :active_route_longitude,\n            :active_route_latitude\n          ] do\n        topic = \"teslamate/cars/#{car.id}/#{key}\"\n        assert_receive {MqttPublisherMock, {:publish, ^topic, \"nil\", [retain: true, qos: 1]}}\n      end\n\n      # Published as nil\n      for key <- [\n            :active_route\n          ] do\n        topic = \"teslamate/cars/#{car.id}/#{key}\"\n        assert_receive {MqttPublisherMock, {:publish, ^topic, data, [retain: true, qos: 1]}}\n        assert Jason.decode!(data) == %{\"error\" => \"No active route available\"}\n      end\n\n      refute_receive _\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vehicles/vehicle_test.exs",
    "content": "defmodule TeslaMate.Vehicles.VehicleTest do\n  use TeslaMate.VehicleCase, async: true\n\n  alias TeslaMate.Vehicles.Vehicle.Summary\n  alias TeslaMate.Vehicles.Vehicle\n  alias TeslaMate.Log.{Car, Update}\n\n  describe \"starting\" do\n    @tag :capture_log\n    test \"handles unknown and faulty states\", %{test: name} do\n      events = [\n        {:ok, %TeslaApi.Vehicle{state: \"unknown\"}},\n        {:error, %TeslaApi.Error{reason: :boom, message: \"boom\"}}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :unavailable, healthy: true}}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{healthy: false, state: :unavailable}}}\n\n      refute_receive _\n    end\n\n    test \"handles online state\", %{test: name} do\n      events = [\n        {:ok, online_event()}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      refute_receive _\n    end\n\n    test \"handles offline state\", %{test: name} do\n      events = [\n        {:ok, %TeslaApi.Vehicle{state: \"offline\"}}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      assert_receive {:start_state, _car, :offline, []}\n      assert_receive {:pubsub, {:broadcast, _server, _topic, %Summary{state: :offline}}}\n\n      refute_receive _\n    end\n\n    test \"handles asleep state\", %{test: name} do\n      events = [\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      assert_receive {:start_state, _car, :asleep, []}\n      assert_receive {:pubsub, {:broadcast, _server, _topic, %Summary{state: :asleep}}}\n\n      refute_receive _\n    end\n  end\n\n  describe \"resume_logging/1\" do\n    alias TeslaMate.Vehicles.Vehicle\n\n    test \"does nothing of already online\", %{test: name} do\n      events = [\n        {:ok, online_event()}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      assert_receive {:start_state, car, :online, date: _}, 100\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      assert :ok = Vehicle.resume_logging(name)\n\n      refute_receive _\n    end\n\n    test \"increases polling frequency if asleep\", %{test: name} do\n      events = [\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, online_event()}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      assert_receive {:start_state, car, :asleep, []}\n      assert_receive {:pubsub, {:broadcast, _server, _topic, %Summary{state: :asleep}}}\n\n      assert :ok = Vehicle.resume_logging(name)\n\n      assert_receive {:start_state, ^car, :online, date: _}, 100\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      refute_receive _\n    end\n\n    test \"increases polling frequency if offline\", %{test: name} do\n      events = [\n        {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"offline\"}},\n        {:ok, online_event()}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      assert_receive {:start_state, car, :offline, []}\n      assert_receive {:pubsub, {:broadcast, _server, _topic, %Summary{state: :offline}}}\n\n      assert :ok = Vehicle.resume_logging(name)\n\n      assert_receive {:start_state, ^car, :online, date: _}, 100\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      refute_receive _\n    end\n  end\n\n  describe \"settings change\" do\n    alias TeslaMate.Vehicles.Vehicle\n    alias TeslaMate.Settings.CarSettings\n\n    test \"applies new sleep settings\", %{test: name} do\n      events = [\n        {:ok, online_event()}\n      ]\n\n      :ok =\n        start_vehicle(name, events,\n          settings: %{\n            suspend_after_idle_min: 999_999_999,\n            suspend_min: 10_000,\n            use_streaming_api: false\n          }\n        )\n\n      # Online\n      assert_receive {:start_state, %Car{id: car_id} = car, :online, date: _}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _server, _topic, %Summary{state: :online}}}\n\n      refute_receive _, 500\n\n      # Reduce suspend_after_idle_min\n      send(name, %CarSettings{\n        suspend_after_idle_min: 1,\n        suspend_min: 10_000,\n        use_streaming_api: false\n      })\n\n      assert_receive {:pubsub, {:broadcast, _server, _topic, %Summary{state: :suspended}}}\n\n      assert_receive {:insert_position,\n                      %Car{\n                        id: ^car_id,\n                        settings: %CarSettings{suspend_after_idle_min: 1, suspend_min: 10_000}\n                      }, %{}}\n\n      refute_receive _\n    end\n  end\n\n  describe \"error handling\" do\n    @tag :capture_log\n    test \"restarts if the eid changed\", %{test: name} do\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event()},\n        {:error, :vehicle_not_found}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      # Online\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, healthy: true}}}\n\n      # Too many errors\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, healthy: false}}}\n\n      # Killed\n      assert_receive {VehiclesMock, :kill}\n    end\n\n    @tag :capture_log\n    test \"reports the health status\", %{test: name} do\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event()},\n        {:error, :unknown}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, healthy: true}}}\n\n      # ...\n\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, healthy: false}}}, 1000\n    end\n\n    @tag :capture_log\n    test \"handles timeout errors\", %{test: name} do\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event()},\n        {:error, :timeout},\n        {:error, :timeout},\n        {:error, :timeout},\n        {:error, :timeout},\n        {:ok, online_event()},\n        {:ok, online_event()},\n        {:error, :timeout},\n        {:error, :timeout},\n        {:error, :closed},\n        {:error, :closed},\n        {:error, :timeout},\n        {:ok, online_event()},\n        {:ok, online_event()}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      # Online\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, healthy: true}}}\n\n      refute_receive _, 100\n    end\n\n    @tag :capture_log\n    test \"notices if vehicle is in service \", %{test: name} do\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event()},\n        {:error, :vehicle_in_service},\n        {:error, :vehicle_in_service},\n        {:ok, online_event()},\n        fn -> Process.sleep(10_000) end\n      ]\n\n      :ok = start_vehicle(name, events, settings: %{use_streaming_api: false})\n\n      # Online\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, healthy: true}}}\n\n      refute_receive _, 400\n    end\n\n    test \"ends a drive if vehicle is in service\", %{test: name} do\n      now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n      events = [\n        {:ok, online_event()},\n        {:ok, drive_event(now_ts + 0, \"D\", 5)},\n        {:ok, drive_event(now_ts + 1, \"D\", 50)},\n        {:error, :vehicle_in_service},\n        fn -> Process.sleep(10_000) end\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n\n      assert_receive {:start_drive, ^car}\n      assert_receive {:insert_position, drive, %{longitude: 0.1, speed: 8}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :driving}}}\n      assert_receive {:insert_position, ^drive, %{longitude: 0.1, speed: 80}}\n      assert_receive {:close_drive, ^drive, []}\n      assert_receive {:\"$websockex_cast\", :disconnect}\n\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :start}}}\n\n      refute_receive _\n    end\n\n    @tag :capture_log\n    test \"stops polling if signed out\", %{test: name} do\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event()},\n        {:error, :not_signed_in},\n        # next events shall just show that polling stops\n        {:ok, online_event()},\n        {:ok, online_event()}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      # Online\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online, healthy: true}}}\n\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :start, healthy: false}}}\n\n      refute_receive _\n    end\n\n    @tag :capture_log\n    test \"broadcasts the summary when the health check succeeds again\", %{test: name} do\n      events = [\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}}\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      fuse_name =\n        TestHelper.eventually(\n          fn ->\n            assert %Summary{state: :asleep, healthy: true, car: %Car{id: id}} =\n                     Vehicle.summary(name)\n\n            :\"#{Vehicle}_#{id}_api_error\"\n          end,\n          delay: 10\n        )\n\n      assert_receive {:start_state, _car, :asleep, []}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :asleep, healthy: true}}}\n\n      :ok = :fuse.circuit_disable(fuse_name)\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :asleep, healthy: false}}}\n\n      :ok = :fuse.circuit_enable(fuse_name)\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :asleep, healthy: true}}}\n\n      refute_receive _\n    end\n  end\n\n  describe \"summary\" do\n    test \"returns the summary if no api request was completed yet\", %{test: name} do\n      events = [\n        fn ->\n          Process.sleep(10_000)\n          {:ok, online_event()}\n        end\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      for _ <- 1..10 do\n        assert %Summary{state: :unavailable, healthy: true} = Vehicle.summary(name)\n      end\n    end\n\n    test \"returns the summary even if the api call is blocked\", %{test: name} do\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event()},\n        fn ->\n          Process.sleep(10_000)\n          {:ok, online_event()}\n        end\n      ]\n\n      :ok = start_vehicle(name, events)\n\n      assert_receive {:start_state, _car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n\n      for _ <- 1..10 do\n        assert %Summary{state: :online, healthy: true} = Vehicle.summary(name)\n      end\n    end\n  end\n\n  describe \"updates\" do\n    test \"logs the current software version at first startup\", %{test: name} do\n      now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n      events = [\n        {:ok,\n         online_event(vehicle_state: %{timestamp: now_ts, car_version: \"42.42.42.0 b2ab650\"})}\n      ]\n\n      :ok = start_vehicle(name, events, last_update: nil)\n      date = DateTime.from_unix!(now_ts, :millisecond)\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:insert_missed_update, ^car, \"42.42.42.0 b2ab650\", date: ^date}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      refute_receive _\n    end\n\n    test \"logs missing updates\", %{test: name} do\n      now_ts = DateTime.utc_now() |> DateTime.to_unix(:millisecond)\n\n      events = [\n        {:ok,\n         online_event(vehicle_state: %{timestamp: now_ts, car_version: \"2020.12.10 e0ccfda3d911\"})}\n      ]\n\n      :ok = start_vehicle(name, events, last_update: %Update{version: \"2020.12.5 e2179e0650f0\"})\n      date = DateTime.from_unix!(now_ts, :millisecond)\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:insert_missed_update, ^car, \"2020.12.10 e0ccfda3d911\", date: ^date}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      refute_receive _\n    end\n\n    test \"does not log updates <= current version\", %{test: name} do\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event(vehicle_state: %{car_version: \"2019.40.10.7 ad132c7b057e\"})},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, online_event()},\n        {:ok, online_event(vehicle_state: %{car_version: \"2019.40.10.6\"})},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, online_event()},\n        {:ok, online_event(vehicle_state: %{car_version: \"2019.40.2.6\"})},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, online_event()},\n        {:ok, online_event(vehicle_state: %{car_version: \"2019.40.9\"})},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}},\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\"}}\n      ]\n\n      :ok =\n        start_vehicle(name, events, last_update: %Update{version: \"2019.40.10.7 ad132c7b057e\"})\n\n      for _ <- 1..4 do\n        assert_receive {:start_state, car, :online, date: _}\n        assert_receive {ApiMock, {:stream, 1000, _}}\n        assert_receive {:insert_position, ^car, %{}}\n        assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n        assert_receive {:start_state, ^car, :asleep, []}\n        assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :asleep}}}\n        assert_receive {:\"$websockex_cast\", :disconnect}\n      end\n\n      refute_receive _\n    end\n\n    @tag :capture_log\n    test \"handles unexpected :car_version's\", %{test: name} do\n      events = [\n        {:ok, online_event(vehicle_state: %{car_version: nil})}\n      ]\n\n      :ok = start_vehicle(name, events, last_update: nil)\n\n      assert_receive {:start_state, car, :online, date: _}\n      assert_receive {ApiMock, {:stream, 1000, _}}\n      assert_receive {:insert_position, ^car, %{}}\n      assert_receive {:pubsub, {:broadcast, _, _, %Summary{state: :online}}}\n\n      refute_receive _\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate/vehicles_test.exs",
    "content": "defmodule TeslaMate.VehiclesTest do\n  use TeslaMate.VehicleCase\n  use TeslaMate.DataCase\n\n  alias TeslaMate.Vehicles.Vehicle\n  alias TeslaMate.Vehicles\n\n  @tag :capture_log\n  test \"kill/0\" do\n    {:ok, _} = start_supervised({Vehicles, vehicles: []})\n    ref = Process.monitor(Vehicles)\n\n    assert true = Vehicles.kill()\n    assert_receive {:DOWN, ^ref, :process, {Vehicles, :nonode@nohost}, :killed}\n\n    refute_receive _\n  end\n\n  test \"restart/0\" do\n    {:ok, _pid} =\n      start_supervised(\n        {ApiMock, name: :api_vehicle, events: [{:ok, online_event()}], pid: self()}\n      )\n\n    {:ok, _pid} =\n      start_supervised(\n        {Vehicles,\n         vehicle: VehicleMock,\n         vehicles: [\n           %TeslaApi.Vehicle{\n             display_name: \"foo\",\n             id: 424_242,\n             vehicle_id: 4040,\n             vin: \"zzzzzzz\"\n           }\n         ]}\n      )\n\n    assert_receive {ApiMock, {:stream, 4040, _}}\n\n    ref = Process.monitor(Vehicles)\n\n    assert :ok = Vehicles.restart()\n    assert_receive {:DOWN, ^ref, :process, {Vehicles, :nonode@nohost}, :normal}\n    assert_receive {ApiMock, {:stream, 4040, _}}\n\n    refute_receive _\n  end\n\n  describe \"uses fallback vehicles\" do\n    alias TeslaMate.Settings.CarSettings\n    alias TeslaMate.{Log, Api}\n    alias TeslaMate.Log.Car\n\n    import Mock\n\n    @tag :capture_log\n    test \"empty list\" do\n      {:ok, %Car{id: id}} =\n        %Car{settings: %CarSettings{}}\n        |> Car.changeset(%{vid: 333_333, eid: 2_222_222, vin: \"1234\"})\n        |> Log.create_or_update_car()\n\n      with_mock Api, list_vehicles: fn -> {:ok, []} end do\n        {:ok, _pid} =\n          start_supervised(\n            {ApiMock, name: :api_vehicle, events: [{:ok, online_event()}], pid: self()}\n          )\n\n        {:ok, _pid} = start_supervised({Vehicles, vehicle: VehicleMock})\n\n        assert true = Vehicle.healthy?(id)\n      end\n    end\n\n    @tag :capture_log\n    test \"not signed in\" do\n      {:ok, %Car{id: id}} =\n        %Car{settings: %CarSettings{}}\n        |> Car.changeset(%{vid: 333_333, eid: 2_222_222, vin: \"1234\"})\n        |> Log.create_or_update_car()\n\n      with_mock Api, list_vehicles: fn -> {:error, :not_signed_in} end do\n        {:ok, _pid} =\n          start_supervised(\n            {ApiMock, name: :api_vehicle, events: [{:ok, online_event()}], pid: self()}\n          )\n\n        start_supervised!({Vehicles, vehicle: VehicleMock})\n\n        assert true = Vehicle.healthy?(id)\n      end\n    end\n  end\n\n  describe \"car settings\" do\n    alias TeslaMate.Settings.CarSettings\n    alias TeslaApi.Vehicle.State.VehicleConfig\n    alias TeslaMate.{Log, Repo}\n    alias TeslaMate.Vehicles.Vehicle.Summary\n\n    import Ecto.Query\n\n    @tag :capture_log\n    test \"lowers the suspend min for vehicles with modern MCU\" do\n      {:ok, _pid} =\n        start_supervised(\n          {ApiMock, name: :api_vehicle, events: [{:ok, online_event()}], pid: self()}\n        )\n\n      {:ok, _pid} =\n        start_supervised({Vehicles,\n         vehicle: VehicleMock,\n         vehicles: [\n           %TeslaApi.Vehicle{\n             display_name: \"S LR\",\n             id: 999_001,\n             vehicle_id: 999_001,\n             vin: \"999001\",\n             vehicle_config: %VehicleConfig{car_type: \"models2\", trim_badging: nil}\n           },\n           %TeslaApi.Vehicle{\n             display_name: \"3 AWD\",\n             id: 999_003,\n             vehicle_id: 999_003,\n             vin: \"999003\",\n             vehicle_config: %VehicleConfig{car_type: \"model3\", trim_badging: nil}\n           },\n           %TeslaApi.Vehicle{\n             display_name: \"X LR\",\n             id: 999_002,\n             vehicle_id: 999_002,\n             vin: \"999002\",\n             vehicle_config: %VehicleConfig{car_type: \"tamarind\", trim_badging: \"P100D\"}\n           },\n           %TeslaApi.Vehicle{\n             display_name: \"Y\",\n             id: 999_004,\n             vehicle_id: 999_004,\n             vin: \"999004\",\n             vehicle_config: %VehicleConfig{car_type: \"modely\", trim_badging: nil}\n           },\n           # ---------------------------------------------------------------------\n           %TeslaApi.Vehicle{\n             display_name: \"S\",\n             id: 999_005,\n             vehicle_id: 999_005,\n             vin: \"999005\",\n             vehicle_config: %VehicleConfig{car_type: \"models\", trim_badging: \"p100d\"}\n           },\n           %TeslaApi.Vehicle{\n             display_name: \"X\",\n             id: 999_006,\n             vehicle_id: 999_006,\n             vin: \"999006\",\n             vehicle_config: %VehicleConfig{car_type: \"modelx\", trim_badging: \"p100d\"}\n           },\n           # ---------------------------------------------------------------------\n           %TeslaApi.Vehicle{\n             display_name: \"asleep\",\n             id: 999_007,\n             vehicle_id: 999_007,\n             vin: \"999007\",\n             vehicle_config: nil\n           }\n         ]})\n\n      assert [s, e, x, y | rest] =\n               from(c in Log.Car, preload: :settings, order_by: :id)\n               |> Repo.all()\n\n      assert_suspend_min(s, 12)\n      assert_suspend_min(e, 12)\n      assert_suspend_min(x, 12)\n      assert_suspend_min(y, 12)\n      # ---------------------------------\n      assert [s, x | rest] = rest\n      assert_suspend_min(s, 21)\n      assert_suspend_min(x, 21)\n      # ---------------------------------\n      assert [asleep] = rest\n      assert_suspend_min(asleep, 21)\n    end\n\n    defp assert_suspend_min(car, suspend_min) do\n      assert car.settings.suspend_min == suspend_min\n\n      assert %Summary{car: %Log.Car{settings: %CarSettings{suspend_min: ^suspend_min}}} =\n               Vehicle.summary(car.id)\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate_web/controllers/car_controller_test.exs",
    "content": "defmodule TeslaMateWeb.CarControllerTest do\n  use TeslaMateWeb.ConnCase\n  use TeslaMate.VehicleCase\n\n  alias TeslaMate.Settings.CarSettings\n  alias TeslaMate.{Log, Settings, Repo}\n  alias TeslaMate.Log.Car\n\n  defp table_row(html, key, value, opts \\\\ []) do\n    assert {\"tr\", _, [{\"td\", _, [td_key]}, {\"td\", [], [td_value]}]} =\n             html\n             |> Floki.parse_document!()\n             |> Floki.find(\"tr\")\n             |> Enum.find(fn ele ->\n               Floki.text(ele) =~ key\n             end)\n\n    assert Floki.text(td_key) |> String.trim() == key\n\n    case Keyword.get(opts, :tooltip) do\n      nil ->\n        assert Floki.text(value) == Floki.text(td_value) |> String.trim()\n\n      str ->\n        assert {\"span\", [_, {\"data-tooltip\", ^str}], [ele]} = td_value\n        assert Floki.text(ele) |> String.trim() == value\n    end\n  end\n\n  defp icon(html, tooltip, icon) do\n    icon_class = \"mdi mdi-#{icon}\"\n\n    assert {\"span\", _, [{\"span\", [{\"class\", ^icon_class}], _}]} =\n             html\n             |> Floki.parse_document!()\n             |> Floki.find(\".icons .icon\")\n             |> Enum.find(&match?({\"span\", [_, {\"data-tooltip\", ^tooltip}], _}, &1))\n  end\n\n  defp car_fixture(settings) do\n    {:ok, car} =\n      Log.create_car(%{\n        efficiency: 0.153,\n        eid: 4242,\n        vid: 404,\n        vin: \"xxxxx\",\n        model: \"S\",\n        name: \"foo\",\n        trim_badging: \"P100D\"\n      })\n\n    {:ok, _settings} =\n      car.settings\n      |> Repo.preload(:car)\n      |> Settings.update_car_settings(settings)\n\n    car\n  end\n\n  describe \"index\" do\n    test \"redirects if not signed in\", %{conn: conn} do\n      assert conn = get(conn, Routes.car_path(conn, :index))\n      assert redirected_to(conn, 302) == Routes.live_path(conn, TeslaMateWeb.SignInLive.Index)\n    end\n\n    @tag :signed_in\n    test \"lists all active vehicles\", %{conn: conn} do\n      {:ok, _pid} =\n        start_supervised(\n          {ApiMock, name: :api_vehicle, events: [{:ok, online_event()}], pid: self()}\n        )\n\n      {:ok, _pid} =\n        start_supervised(\n          {TeslaMate.Vehicles,\n           vehicle: VehicleMock,\n           vehicles: [\n             %TeslaApi.Vehicle{display_name: \"f00o\", id: 4241, vehicle_id: 11111, vin: \"1221\"},\n             %TeslaApi.Vehicle{display_name: \"foo0\", id: 1242, vehicle_id: 22222, vin: \"2112\"}\n           ]}\n        )\n\n      conn = get(conn, Routes.car_path(conn, :index))\n      html = response(conn, 200)\n\n      assert [\n               {\"div\", [{\"class\", \"car card\"}], _},\n               {\"div\", [{\"class\", \"car card\"}], _}\n             ] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".car\")\n    end\n\n    @tag :signed_in\n    test \"renders last known vehicle stats\", %{conn: conn} do\n      events = [\n        {:ok, %TeslaApi.Vehicle{state: \"asleep\", display_name: \"FooCar\"}}\n      ]\n\n      {:ok, car} =\n        %Car{settings: %CarSettings{}}\n        |> Car.changeset(%{vid: 404, eid: 404, vin: \"xxxxx\"})\n        |> Log.create_or_update_car()\n\n      {:ok, _position} =\n        Log.insert_position(car, %{\n          date: DateTime.utc_now(),\n          longitude: 0,\n          latitude: 0,\n          rated_battery_range_km: 380.25,\n          est_battery_range_km: 401.52,\n          ideal_battery_range_km: 175.1,\n          battery_level: 80,\n          outside_temp: 20.1,\n          inside_temp: 21.0\n        })\n\n      :ok = start_vehicles(events)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert html =~ ~r/<p class=\"title is-5\">FooCar<\\/p>/\n      assert table_row(html, \"Status\", \"asleep\")\n      assert table_row(html, \"Range (rated)\", \"380.26 km\")\n      assert table_row(html, \"Range (est.)\", \"401.52 km\")\n      assert table_row(html, \"State of Charge\", \"80%\", tooltip: \"≈ 475 km at 100%\")\n      assert table_row(html, \"Outside Temperature\", \"20.1 °C\")\n      assert table_row(html, \"Inside Temperature\", \"21.0 °C\")\n    end\n\n    @tag :signed_in\n    test \"displays the friendly name\", %{conn: conn} do\n      now = (DateTime.utc_now() |> DateTime.to_unix()) * 1000\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{timestamp: now, latitude: 0.0, longitude: 0.0},\n           vehicle_config: %{car_type: \"model3\", trim_badging: \"p74d\"}\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      Process.sleep(250)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n\n      assert \"Model 3 LR AWD Performance\" ==\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".car .subtitle\")\n               |> Floki.text()\n               # Trim all whitespace\n               |> String.trim()\n               |> String.replace(~r/(\\n)+/, \" \")\n               |> String.replace(~r/(\\s)+/, \" \")\n               |> String.replace(~r/(\\t)+/, \" \")\n    end\n\n    @tag :signed_in\n    test \"renders current vehicle stats [:online]\", %{conn: conn} do\n      now = (DateTime.utc_now() |> DateTime.to_unix()) * 1000\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{timestamp: now, latitude: 0.0, longitude: 0.0},\n           charge_state: %{\n             battery_range: 200,\n             est_battery_range: 180,\n             ideal_battery_range: 175,\n             usable_battery_level: 67,\n             battery_level: 69\n           },\n           climate_state: %{is_preconditioning: true, outside_temp: 24, inside_temp: 23.2},\n           vehicle_state: %{\n             timestamp: 0,\n             car_version: \"2019.40.50.7 ad132c7b057e\",\n             software_update: %{status: \"available\", version: \"2020.4.1 4a4ad401858f\"},\n             locked: true,\n             sentry_mode: true,\n             fd_window: 1,\n             fp_window: 0,\n             rd_window: 0,\n             rp_window: 0,\n             df: 0,\n             dr: 0,\n             pf: 1,\n             pr: 0,\n             is_user_present: true,\n             odometer: 26097.59\n           },\n           vehicle_config: %{car_type: \"models2\", trim_badging: \"p90d\"}\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      Process.sleep(250)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert html =~ ~r/<p class=\"title is-5\">FooCar<\\/p>/\n\n      assert \"Model S P90D\" ==\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".car .subtitle\")\n               |> Floki.text()\n               |> String.trim()\n               |> String.replace(~r/(\\n)+/, \" \")\n               |> String.replace(~r/(\\s)+/, \" \")\n\n      assert table_row(html, \"Status\", \"online\")\n      assert table_row(html, \"Range (rated)\", \"321.87 km\")\n      assert table_row(html, \"Range (est.)\", \"289.68 km\")\n      assert table_row(html, \"State of Charge\", \"67% (69%)\", tooltip: \"≈ 480 km at 100%\")\n      assert icon(html, \"Locked\", \"lock\")\n      assert icon(html, \"Driver present\", \"account\")\n      assert icon(html, \"Preconditioning\", \"air-conditioner\")\n      assert icon(html, \"Sentry Mode\", \"shield-check\")\n      assert icon(html, \"Windows open\", \"window-open\")\n      assert icon(html, \"Doors open\", \"car-door\")\n      assert icon(html, \"Software Update available (2020.4.1)\", \"gift-outline\")\n      assert table_row(html, \"Outside Temperature\", \"24 °C\")\n      assert table_row(html, \"Inside Temperature\", \"23.2 °C\")\n      assert table_row(html, \"Mileage\", \"42000 km\")\n\n      assert table_row(\n               html,\n               \"Version\",\n               {\"a\",\n                [\n                  {\"href\",\n                   \"https://www.notateslaapp.com/software-updates/version/2019.40.50.7/release-notes\"},\n                  {\"rel\", \"noopener noreferrer\"},\n                  {\"target\", \"_blank\"}\n                ], [\"2019.40.50.7\"]}\n             )\n    end\n\n    @tag :signed_in\n    test \"renders current vehicle stats [:charging]\", %{conn: conn} do\n      car = car_fixture(%{})\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n           charge_state: %{\n             timestamp: 0,\n             charger_power: 11,\n             charger_phases: 3,\n             charger_voltage: 229,\n             charger_actual_current: 16,\n             battery_range: 200,\n             est_battery_range: 180,\n             ideal_battery_range: 175,\n             charging_state: \"Charging\",\n             charge_energy_added: 4.32,\n             charge_port_latch: \"Engaged\",\n             charge_port_door_open: true,\n             charge_port_cold_weather_mode: false,\n             scheduled_charging_start_time: 1_565_620_707,\n             charge_limit_soc: 85,\n             time_to_full_charge: 1.83\n           }\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert html =~ ~r/<p class=\"title is-5\">FooCar<\\/p>/\n      assert table_row(html, \"Status\", \"charging\")\n      assert table_row(html, \"Remaining Time\", \"1 h, 49 min\")\n      assert icon(html, \"Plugged In\", \"power-plug\")\n      assert table_row(html, \"Range (rated)\", \"321.87 km\")\n      assert table_row(html, \"Range (est.)\", \"289.68 km\")\n      assert table_row(html, \"Charged\", \"4.32 kWh\")\n      assert table_row(html, \"Charger Power\", \"11 kW\")\n\n      assert table_row(\n               html,\n               \"Scheduled Charging\",\n               {\"span\",\n                [\n                  {\"data-date\", \"2019-08-12T14:38:27Z\"},\n                  {\"id\", \"scheduled_start_time_#{car.id}\"},\n                  {\"phx-hook\", \"LocalTime\"}\n                ], []}\n             )\n\n      assert table_row(html, \"Charge Limit\", \"85%\")\n    end\n\n    @tag :signed_in\n    test \"does not render remaining seconds\", %{conn: conn} do\n      events = [\n        {:ok,\n         online_event(\n           drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n           charge_state: %{\n             timestamp: 0,\n             charging_state: \"Charging\",\n             charge_energy_added: \"4.32\",\n             ideal_battery_range: 200,\n             time_to_full_charge: 0.33\n           }\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert table_row(html, \"Remaining Time\", \"19 min\")\n    end\n\n    @tag :signed_in\n    test \"renders current vehicle stats [:driving]\", %{conn: conn} do\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{\n             timestamp: 0,\n             latitude: 0.0,\n             longitude: 0.0,\n             shift_state: \"D\",\n             speed: 30\n           }\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert html =~ ~r/<p class=\"title is-5\">FooCar<\\/p>/\n      assert table_row(html, \"Status\", \"driving\")\n      assert table_row(html, \"Speed\", \"48 km/h\")\n    end\n\n    @tag :signed_in\n    test \"renders current vehicle stats [:updating]\", %{conn: conn} do\n      alias TeslaApi.Vehicle.State.VehicleState.SoftwareUpdate\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           vehicle_state: %{\n             timestamp: 0,\n             car_version: \"2019.8.4 530d1d3\",\n             software_update: %SoftwareUpdate{expected_duration_sec: 2700, status: \"installing\"}\n           }\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert html =~ ~r/<p class=\"title is-5\">FooCar<\\/p>/\n      assert table_row(html, \"Status\", \"updating\")\n    end\n\n    @tag :signed_in\n    test \"renders current vehicle stats [:asleep]\", %{conn: conn} do\n      events = [\n        {:ok, %TeslaApi.Vehicle{display_name: \"FooCar\", state: \"asleep\"}}\n      ]\n\n      :ok = start_vehicles(events)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert html =~ ~r/<p class=\"title is-5\">FooCar<\\/p>/\n      assert table_row(html, \"Status\", \"asleep\")\n    end\n\n    @tag :signed_in\n    test \"renders current vehicle stats [:offline]\", %{conn: conn} do\n      events = [\n        {:ok, %TeslaApi.Vehicle{display_name: \"FooCar\", state: \"offline\"}}\n      ]\n\n      :ok = start_vehicles(events)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert html =~ ~r/<p class=\"title is-5\">FooCar<\\/p>/\n      assert table_row(html, \"Status\", \"offline\")\n    end\n\n    @tag :signed_in\n    test \"renders current vehicle stats [:falling asleep]\", %{conn: conn} do\n      _car = car_fixture(%{suspend_min: 60, suspend_after_idle_min: 1, use_streaming_api: false})\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n           climate_state: %{is_preconditioning: false}\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      Process.sleep(100)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert html =~ ~r/<p class=\"title is-5\">FooCar<\\/p>/\n      assert table_row(html, \"Status\", \"falling asleep\")\n    end\n\n    @tag :capture_log\n    @tag :signed_in\n    test \"renders current vehicle stats [:unavailable]\", %{conn: conn} do\n      events = [\n        {:error, :unknown}\n      ]\n\n      :ok = start_vehicles(events)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert html =~ ~r/<p class=\"title is-5\"><\\/p>/\n      assert table_row(html, \"Status\", \"unavailable\")\n    end\n\n    @tag :signed_in\n    test \"displays the rated range if preferred\", %{conn: conn} do\n      {:ok, _} =\n        Settings.get_global_settings!()\n        |> Settings.update_global_settings(%{preferred_range: :rated})\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n           charge_state: %{\n             ideal_battery_range: 200,\n             est_battery_range: 180,\n             battery_range: 175,\n             battery_level: 69\n           },\n           climate_state: %{is_preconditioning: false, outside_temp: 24, inside_temp: 23.2},\n           vehicle_state: %{timestamp: 0, locked: true, sentry_mode: true, car_version: \"\"},\n           vehicle_config: %{car_type: \"models2\", trim_badging: \"p90d\"}\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      Process.sleep(250)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert html =~ ~r/<p class=\"title is-5\">FooCar<\\/p>/\n      assert table_row(html, \"Range (rated)\", \"281.64 km\")\n      assert table_row(html, \"Range (est.)\", \"289.68 km\")\n    end\n\n    @tag :signed_in\n    @tag :capture_log\n    test \"displays imperial units\", %{conn: conn} do\n      {:ok, _} =\n        Settings.get_global_settings!()\n        |> Settings.update_global_settings(%{unit_of_length: :mi, unit_of_temperature: :F})\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{\n             timestamp: 0,\n             latitude: 0.0,\n             longitude: 0.0,\n             shift_state: \"D\",\n             speed: 30\n           },\n           charge_state: %{\n             battery_range: 200,\n             est_battery_range: 180,\n             ideal_battery_range: 175,\n             usable_battery_level: 67,\n             battery_level: 69\n           },\n           climate_state: %{\n             is_preconditioning: false,\n             outside_temp: 24,\n             inside_temp: 23.2\n           },\n           vehicle_state: %{\n             odometer: 42000\n           }\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      conn = get(conn, Routes.car_path(conn, :index))\n\n      assert html = response(conn, 200)\n      assert html =~ ~r/<p class=\"title is-5\">FooCar<\\/p>/\n      assert table_row(html, \"Status\", \"driving\")\n      assert table_row(html, \"Range (rated)\", \"200.0 mi\")\n      assert table_row(html, \"Range (est.)\", \"180.0 mi\")\n      assert table_row(html, \"State of Charge\", \"67% (69%)\", tooltip: \"≈ 299 mi at 100%\")\n      assert table_row(html, \"Speed\", \"30 mph\")\n      assert table_row(html, \"Outside Temperature\", \"75.2 °F\")\n      assert table_row(html, \"Inside Temperature\", \"73.8 °F\")\n      assert table_row(html, \"Mileage\", \"42000 mi\")\n    end\n  end\n\n  describe \"suspend\" do\n    setup %{conn: conn} do\n      {:ok, conn: put_req_header(conn, \"accept\", \"application/json\")}\n    end\n\n    test \"suspends logging\", %{conn: conn} do\n      _car = car_fixture(%{suspend_min: 60, suspend_after_idle_min: 60, use_streaming_api: false})\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n           climate_state: %{is_preconditioning: false}\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      %Car{id: id} = Log.get_car_by(vin: \"xxxxx\")\n\n      conn = put(conn, Routes.car_path(conn, :suspend_logging, id))\n\n      assert \"\" == response(conn, 204)\n    end\n\n    test \"returns error if suspending is not possible\", %{conn: conn} do\n      _car = car_fixture(%{suspend_min: 60, suspend_after_idle_min: 60, use_streaming_api: false})\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n           climate_state: %{is_preconditioning: true}\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      %Car{id: id} = Log.get_car_by(vin: \"xxxxx\")\n\n      conn = put(conn, Routes.car_path(conn, :suspend_logging, id))\n      assert \"preconditioning\" == json_response(conn, 412)[\"error\"]\n    end\n  end\n\n  describe \"resume\" do\n    test \"resumes logging\", %{conn: conn} do\n      alias TeslaMate.Vehicles.Vehicle.Summary\n\n      _car = car_fixture(%{suspend_min: 60, suspend_after_idle_min: 1, use_streaming_api: false})\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{timestamp: 0, latitude: 0.0, longitude: 0.0},\n           climate_state: %{is_preconditioning: false}\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n      Process.sleep(100)\n\n      %Car{id: id} = Log.get_car_by(vin: \"xxxxx\")\n      assert %Summary{state: :suspended} = TeslaMate.Vehicles.summary(id)\n\n      conn = put(conn, Routes.car_path(conn, :resume_logging, id))\n      assert \"\" == response(conn, 204)\n    end\n  end\n\n  def start_vehicles(events \\\\ []) do\n    {:ok, _pid} = start_supervised({ApiMock, name: :api_vehicle, events: events, pid: self()})\n\n    {:ok, _pid} =\n      start_supervised(\n        {TeslaMate.Vehicles,\n         vehicle: VehicleMock,\n         vehicles: [\n           %TeslaApi.Vehicle{\n             display_name: \"foo\",\n             id: 4242,\n             vehicle_id: 404,\n             vin: \"xxxxx\"\n           }\n         ]}\n      )\n\n    :ok\n  end\nend\n"
  },
  {
    "path": "test/teslamate_web/controllers/drive_controller_test.exs",
    "content": "defmodule TeslaMateWeb.DriveControllerTest do\n  use TeslaMateWeb.ConnCase\n\n  alias TeslaMate.Log\n  alias TeslaMate.Repo\n\n  def car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(%{efficiency: 0.153, eid: 42, model: \"M3\", vid: 42, vin: \"xxxxx\"})\n      |> Log.create_car()\n\n    car\n  end\n\n  defp drive_fixture(car) do\n    {:ok, drive} = Log.start_drive(car)\n\n    Log.insert_position(drive, %{\n      date: DateTime.utc_now(),\n      latitude: 5.0,\n      longitude: 5.0,\n      elevation: 100\n    })\n\n    Log.insert_position(drive, %{\n      date: DateTime.utc_now(),\n      latitude: 10.0,\n      longitude: 10.0,\n      elevation: 200\n    })\n\n    Log.insert_position(drive, %{\n      date: DateTime.utc_now() |> DateTime.add(-1800, :second),\n      latitude: 0.0,\n      longitude: 0.0,\n      elevation: nil\n    })\n\n    Log.insert_position(drive, %{\n      date: DateTime.utc_now() |> DateTime.add(-3600, :second),\n      latitude: 0.0,\n      longitude: 0.0,\n      elevation: 50\n    })\n\n    drive |> Repo.preload(:positions)\n  end\n\n  describe \"GET /drive/:id/gpx\" do\n    test \"sets xml and content-disposition headers\", %{conn: conn} do\n      drive = drive_fixture(car_fixture())\n      assert conn = get(conn, Routes.drive_path(conn, :gpx, drive.id))\n\n      headers = Enum.into(conn.resp_headers, %{})\n      assert headers[\"content-disposition\"] == ~s(attachment; filename=\"#{drive.start_date}.gpx\")\n      assert response_content_type(conn, :xml) =~ \"charset=utf-8\"\n    end\n\n    test \"renders gpx\", %{conn: conn} do\n      drive = drive_fixture(car_fixture())\n      assert conn = get(conn, Routes.drive_path(conn, :gpx, drive.id))\n      xml = response(conn, 200)\n\n      assert xml =~\n               ~s(<?xml version=\"1.0\"?>\\n<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" version=\"1.1\" creator=\"Teslamate\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">)\n\n      document = Floki.parse_document!(xml)\n      xml_trackpoints = get_trackpoints(document)\n\n      drive_trackpoints = drive_trackpoints_to_trackpoints(drive) |> Enum.sort_by(& &1.time)\n\n      assert xml_trackpoints == drive_trackpoints\n\n      track_name = document |> Floki.find(\"name\") |> Floki.text()\n      assert track_name == DateTime.to_iso8601(drive.start_date)\n    end\n\n    test \"returns 404 on drive not found\", %{conn: conn} do\n      assert conn = get(conn, Routes.drive_path(conn, :gpx, \"4\"))\n      assert conn.status == 404\n    end\n\n    defp drive_trackpoints_to_trackpoints(drive) do\n      Enum.map(drive.positions, fn pos ->\n        if is_nil(pos.elevation) do\n          %{\n            latitude: pos.latitude |> Decimal.to_string(),\n            longitude: pos.longitude |> Decimal.to_string(),\n            time: pos.date |> DateTime.to_iso8601()\n          }\n        else\n          %{\n            latitude: pos.latitude |> Decimal.to_string(),\n            longitude: pos.longitude |> Decimal.to_string(),\n            time: pos.date |> DateTime.to_iso8601(),\n            elevation: pos.elevation |> Integer.to_string()\n          }\n        end\n      end)\n    end\n\n    defp get_trackpoints(document) do\n      document\n      |> Floki.find(\"gpx trk trkseg trkpt\")\n      |> Enum.map(&parse_trackpoint/1)\n    end\n\n    defp parse_trackpoint(trkpt) do\n      latitude = Floki.attribute(trkpt, \"lat\")\n      longitude = Floki.attribute(trkpt, \"lon\")\n      time = Floki.find(trkpt, \"time\") |> Floki.text()\n      elevation = Floki.find(trkpt, \"ele\") |> Floki.text()\n\n      if elevation === \"\" do\n        %{\n          latitude: Enum.at(latitude, 0),\n          longitude: Enum.at(longitude, 0),\n          time: time\n        }\n      else\n        %{\n          latitude: Enum.at(latitude, 0),\n          longitude: Enum.at(longitude, 0),\n          time: time,\n          elevation: elevation\n        }\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate_web/live/car_index_live_test.exs",
    "content": "defmodule TeslaMateWeb.CarLive.Indextest do\n  use TeslaMateWeb.ConnCase\n  use TeslaMate.VehicleCase\n\n  alias TeslaMate.Settings.GlobalSettings\n  alias TeslaMate.Settings\n\n  describe \"base URL\" do\n    @tag :signed_in\n    test \"sets the base URL\", %{conn: conn} do\n      :ok = start_vehicles([{:ok, online_event()}])\n\n      assert %GlobalSettings{base_url: nil} = Settings.get_global_settings!()\n\n      assert {:ok, _parent_view, _html} =\n               conn\n               |> put_connect_params(%{\"baseUrl\" => \"http://example.com \"})\n               |> live(\"/\")\n\n      assert %GlobalSettings{base_url: \"http://example.com\"} = Settings.get_global_settings!()\n    end\n\n    @tag :signed_in\n    test \"does not update the base URL if exists already\", %{conn: conn} do\n      :ok = start_vehicles([{:ok, online_event()}])\n\n      assert {:ok, _settings} =\n               Settings.get_global_settings!()\n               |> Settings.update_global_settings(%{base_url: \"https://example.com\"})\n\n      assert {:ok, _parent_view, _html} =\n               conn\n               |> put_connect_params(%{\"baseUrl\" => \"http://foo.bar/ \"})\n               |> live(\"/\")\n\n      assert %GlobalSettings{base_url: \"https://example.com\"} = Settings.get_global_settings!()\n    end\n\n    @tag :signed_in\n    @tag :capture_log\n    test \"handles invalid base URLs\", %{conn: conn} do\n      :ok = start_vehicles([{:ok, online_event()}])\n\n      for base_url <- [nil, \"udp://10.0.0.1\", \"\", \"example.com\"] do\n        assert {:ok, _parent_view, _html} =\n                 conn\n                 |> put_connect_params(%{\"baseUrl\" => base_url})\n                 |> live(\"/\")\n      end\n\n      assert %GlobalSettings{base_url: nil} = Settings.get_global_settings!()\n    end\n  end\n\n  defp start_vehicles(events) do\n    {:ok, _pid} = start_supervised({ApiMock, name: :api_vehicle, events: events, pid: self()})\n\n    {:ok, _pid} =\n      start_supervised(\n        {TeslaMate.Vehicles,\n         vehicle: VehicleMock,\n         vehicles: [\n           %TeslaApi.Vehicle{\n             display_name: \"Foo\",\n             id: 11243,\n             vehicle_id: 90211,\n             vin: \"absadkalfs\"\n           }\n         ]}\n      )\n\n    :ok\n  end\nend\n"
  },
  {
    "path": "test/teslamate_web/live/car_summary_live_test.exs",
    "content": "defmodule TeslaMateWeb.CarLive.SummaryTest do\n  use TeslaMateWeb.ConnCase\n  use TeslaMate.VehicleCase\n\n  alias TeslaApi.Vehicle.State.VehicleState.SoftwareUpdate\n  alias TeslaMate.{Settings, Log, Repo}\n\n  defp table_row(html, key, value, opts \\\\ []) do\n    assert {\"tr\", _, [{\"td\", _, [^key]}, {\"td\", [], [v]}]} =\n             html\n             |> Floki.parse_document!()\n             |> Floki.find(\"tr\")\n             |> Enum.find(&match?({\"tr\", _, [{\"td\", _, [^key]}, _td]}, &1))\n\n    case Keyword.get(opts, :tooltip) do\n      nil ->\n        assert value == String.trim(v)\n\n      str ->\n        assert {\"span\", [_, {\"data-tooltip\", ^str}], [text]} = v\n        assert String.trim(text) == value\n    end\n  end\n\n  defp car_fixture(settings) do\n    {:ok, car} =\n      Log.create_car(%{\n        efficiency: 0.153,\n        eid: 4242,\n        vid: 404,\n        vin: \"xxxxx\",\n        model: \"S\",\n        name: \"foo\",\n        trim_badging: \"P100D\"\n      })\n\n    {:ok, _settings} =\n      car.settings\n      |> Repo.preload(:car)\n      |> Settings.update_car_settings(settings)\n\n    car\n  end\n\n  defp now, do: (DateTime.utc_now() |> DateTime.to_unix()) * 1000\n\n  describe \"suspend\" do\n    @tag :signed_in\n    test \"suspends logging\", %{conn: conn} do\n      _car =\n        car_fixture(%{\n          suspend_min: 60_000,\n          suspend_after_idle_min: 60_000,\n          use_streaming_api: false\n        })\n\n      now = now()\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{timestamp: now, latitude: 0.0, longitude: 0.0},\n           climate_state: %{timestamp: now, is_preconditioning: false, climate_keeper_mode: \"off\"},\n           vehicle_state: %{timestamp: now, sentry_mode: false, locked: true, car_version: \"\"}\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      assert {:ok, parent_view, _html} =\n               conn\n               |> put_connect_params(%{\"baseUrl\" => \"http://localhost\"})\n               |> live(\"/\")\n\n      [view] = live_children(parent_view)\n      html = render(view)\n\n      assert table_row(html, \"Status\", \"online\")\n\n      assert \"try to sleep\" ==\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"a[phx-click=suspend_logging]\")\n               |> Floki.text()\n\n      # Suspend\n      view\n      |> element(\".button\", \"try to sleep\")\n      |> render_click()\n\n      TestHelper.eventually(\n        fn ->\n          assert view |> render() |> table_row(\"Status\", \"falling asleep\")\n        end,\n        delay: 5\n      )\n    end\n\n    for {msg, status, settings, attrs} <- [\n          {\"Car is unlocked\", \"online\", %{req_not_unlocked: true},\n           vehicle_state: %{timestamp: 0, locked: false, car_version: \"\"}},\n          {\"Doors are open\", \"online\", %{},\n           vehicle_state: %{timestamp: 0, df: 1, dr: 0, pf: 0, pr: 0, car_version: \"\"}},\n          {\"Trunk is open\", \"online\", %{},\n           vehicle_state: %{timestamp: 0, rt: 1, ft: 0, car_version: \"\"}},\n          {\"Sentry mode is enabled\", \"online\", %{},\n           vehicle_state: %{timestamp: 0, sentry_mode: true, locked: true, car_version: \"\"}},\n          {\"Preconditioning\", \"online\", %{}, climate_state: %{is_preconditioning: true}},\n          {\"Dog mode is enabled\", \"online\", %{}, climate_state: %{climate_keeper_mode: \"dog\"}},\n          {\"Driver present\", \"online\", %{},\n           vehicle_state: %{timestamp: 0, is_user_present: true, car_version: \"\"}},\n          {\"Update in progress\", \"updating\", %{},\n           vehicle_state: %{\n             timestamp: 0,\n             car_version: \"v9\",\n             software_update: %SoftwareUpdate{expected_duration_sec: 2700, status: \"installing\"}\n           }}\n        ] do\n      @tag :signed_in\n      test \"shows warning if suspending is not possible [#{msg}]\", %{conn: conn} do\n        settings =\n          Map.merge(\n            %{suspend_min: 60_000, suspend_after_idle_min: 60_000, use_streaming_api: false},\n            unquote(Macro.escape(settings))\n          )\n\n        _car = car_fixture(settings)\n        now = now()\n\n        events = [\n          {:ok,\n           online_event(\n             Keyword.merge(\n               [\n                 display_name: \"FooCar\",\n                 drive_state: %{timestamp: now, latitude: 0.0, longitude: 0.0},\n                 vehicle_state: %{\n                   timestamp: now,\n                   sentry_mode: false,\n                   locked: true,\n                   car_version: \"\"\n                 }\n               ],\n               unquote(Macro.escape(attrs))\n             )\n           )}\n        ]\n\n        :ok = start_vehicles(events)\n\n        assert {:ok, parent_view, _html} =\n                 conn\n                 |> put_connect_params(%{\"baseUrl\" => \"http://localhost\"})\n                 |> live(\"/\")\n\n        [view] = live_children(parent_view)\n        render_click(view, :suspend_logging)\n\n        assert html = render(view)\n        assert table_row(html, \"Status\", unquote(Macro.escape(status)))\n\n        assert [{\"a\", [_, {\"disabled\", \"disabled\"}, _], [unquote(msg)]}] =\n                 html\n                 |> Floki.parse_document!()\n                 |> Floki.find(\".button.is-danger\")\n      end\n    end\n  end\n\n  describe \"resume\" do\n    @tag :signed_in\n    test \"resumes logging\", %{conn: conn} do\n      _car =\n        car_fixture(%{\n          suspend_min: 60_000,\n          suspend_after_idle_min: 60_000,\n          use_streaming_api: false\n        })\n\n      now = now()\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{timestamp: now, latitude: 0.0, longitude: 0.0},\n           climate_state: %{timestamp: now, is_preconditioning: false, climate_keeper_mode: \"off\"},\n           vehicle_state: %{timestamp: now, sentry_mode: false, locked: true, car_version: \"\"}\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      assert {:ok, parent_view, html} =\n               conn\n               |> put_connect_params(%{\"baseUrl\" => \"http://localhost\"})\n               |> live(\"/\")\n\n      assert table_row(html, \"Status\", \"online\")\n\n      assert \"try to sleep\" ==\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"a[phx-click=suspend_logging]\")\n               |> Floki.text()\n\n      [view] = live_children(parent_view)\n\n      # Suspend\n      view\n      |> element(\".button\", \"try to sleep\")\n      |> render_click()\n\n      TestHelper.eventually(\n        fn ->\n          assert html = render(view)\n          assert table_row(html, \"Status\", \"falling asleep\")\n\n          assert \"cancel sleep attempt\" ==\n                   html\n                   |> Floki.parse_document!()\n                   |> Floki.find(\"a[phx-click=resume_logging]\")\n                   |> Floki.text()\n        end,\n        delay: 5\n      )\n\n      # Resume\n      view\n      |> element(\".button\", \"cancel sleep attempt\")\n      |> render_click()\n\n      assert html = render(view)\n      assert table_row(html, \"Status\", \"online\")\n    end\n  end\n\n  describe \"health status\" do\n    @tag :signed_in\n    @tag :capture_log\n    test \"reports health status\", %{conn: conn} do\n      events = [\n        {:ok, online_event(display_name: \"FooCar\")},\n        {:ok, online_event(display_name: \"FooCar\")},\n        {:error, :unknown}\n      ]\n\n      :ok = start_vehicles(events)\n\n      Process.sleep(300)\n\n      assert {:ok, _parent_view, html} =\n               conn\n               |> put_connect_params(%{\"baseUrl\" => \"http://localhost\"})\n               |> live(\"/\")\n\n      assert {\"span\", _, [{\"span\", [{\"class\", \"mdi mdi-alert-box\"}], _}]} =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".icons .icon\")\n               |> Enum.find(\n                 &match?({\"span\", [_, {\"data-tooltip\", \"Health check failed\"}], _}, &1)\n               )\n    end\n  end\n\n  describe \"spinner\" do\n    @tag :signed_in\n    @tag :capture_log\n    test \"shows spinner if fetching vehicle data on first render\", %{conn: conn} do\n      events = [\n        fn ->\n          :timer.sleep(10_0000)\n          {:ok, online_event()}\n        end\n      ]\n\n      :ok = start_vehicles(events)\n\n      assert {:ok, _view, html} =\n               conn\n               |> put_connect_params(%{\"baseUrl\" => \"http://localhost\"})\n               |> live(\"/\")\n\n      assert [\n               {\"span\",\n                [\n                  {\"class\", \"spinner has-tooltip-top has-tooltip-left-mobile\"},\n                  {\"data-tooltip\", \"Fetching vehicle data ...\"}\n                ], _}\n             ] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".icons .spinner\")\n    end\n\n    @tag :signed_in\n    @tag :capture_log\n    test \"shows spinner while fetching vehicle data\", %{conn: conn} do\n      events = [\n        {:ok, online_event()},\n        fn ->\n          :timer.sleep(50)\n          {:ok, online_event()}\n        end\n      ]\n\n      :ok = start_vehicles(events)\n\n      assert {:ok, view, _html} =\n               conn\n               |> put_connect_params(%{\"baseUrl\" => \"http://localhost\"})\n               |> live(\"/\")\n\n      TestHelper.eventually(\n        fn ->\n          html = render(view)\n\n          assert [\n                   {\"span\",\n                    [\n                      {\"class\", \"spinner has-tooltip-top has-tooltip-left-mobile\"},\n                      {\"data-tooltip\", \"Fetching vehicle data ...\"}\n                    ], _}\n                 ] =\n                   html\n                   |> Floki.parse_document!()\n                   |> Floki.find(\".icons .spinner\")\n        end,\n        delay: 20\n      )\n    end\n  end\n\n  describe \"tags\" do\n    @tag :signed_in\n    @tag :capture_log\n    test \"shows spinner while fetching vehicle data \", %{conn: conn} do\n      events = [\n        {:ok, online_event()},\n        fn ->\n          :timer.sleep(50)\n          {:ok, online_event()}\n        end\n      ]\n\n      :ok = start_vehicles(events)\n\n      assert {:ok, view, _html} =\n               conn\n               |> put_connect_params(%{\"baseUrl\" => \"http://localhost\"})\n               |> live(\"/\")\n\n      TestHelper.eventually(\n        fn ->\n          html = render(view)\n\n          assert [\n                   {\"span\",\n                    [\n                      {\"class\", \"spinner has-tooltip-top has-tooltip-left-mobile\"},\n                      {\"data-tooltip\", \"Fetching vehicle data ...\"}\n                    ], _}\n                 ] =\n                   html\n                   |> Floki.parse_document!()\n                   |> Floki.find(\".icons .spinner\")\n        end,\n        delay: 20\n      )\n    end\n\n    @tag :signed_in\n    @tag :capture_log\n    test \"shows tag if update is available \", %{conn: conn} do\n      events = [\n        {:ok, online_event()},\n        {:ok,\n         update_event(0, \"available\", \"2019.8.4 530d1d3\", update_version: \"2019.8.5 3aaad23\")},\n        {:error, :unknown}\n      ]\n\n      :ok = start_vehicles(events)\n\n      Process.sleep(300)\n\n      assert {:ok, _parent_view, html} =\n               conn\n               |> put_connect_params(%{\"baseUrl\" => \"http://localhost\"})\n               |> live(\"/\")\n\n      assert {\"span\", _, [{\"span\", [{\"class\", \"mdi mdi-gift-outline\"}], _}]} =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".icons .icon\")\n               |> Enum.find(\n                 &match?(\n                   {\"span\", [_, {\"data-tooltip\", \"Software Update available (2019.8.5)\"}], _},\n                   &1\n                 )\n               )\n    end\n\n    @tag :signed_in\n    @tag :capture_log\n    test \"shows snowflake if usable_battery_level differs from battery_level\", %{conn: conn} do\n      events = [\n        {:ok, online_event()},\n        {:ok, online_event(charge_state: %{battery_level: 73, usable_battery_level: 70})},\n        {:error, :unknown}\n      ]\n\n      :ok = start_vehicles(events)\n\n      Process.sleep(300)\n\n      assert {:ok, _parent_view, html} =\n               conn\n               |> put_connect_params(%{\"baseUrl\" => \"http://localhost\"})\n               |> live(\"/\")\n\n      assert {\"span\", _, [{\"span\", [{\"class\", \"mdi mdi-snowflake\"}], _}]} =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".icons .icon\")\n               |> Enum.find(\n                 &match?({\"span\", [_, {\"data-tooltip\", \"Reduced Battery Range\"}], _}, &1)\n               )\n    end\n\n    @tag :signed_in\n    test \"View car location on Google Maps with correct coordinates\", %{conn: conn} do\n      _car =\n        car_fixture(%{\n          suspend_min: 60_000,\n          suspend_after_idle_min: 60_000,\n          use_streaming_api: false\n        })\n\n      now = now()\n      test_latitude = 52.3950657\n      test_longitude = 13.78956\n\n      events = [\n        {:ok,\n         online_event(\n           display_name: \"FooCar\",\n           drive_state: %{timestamp: now, latitude: test_latitude, longitude: test_longitude},\n           climate_state: %{timestamp: now, is_preconditioning: false, climate_keeper_mode: \"off\"},\n           vehicle_state: %{timestamp: now, sentry_mode: false, locked: true, car_version: \"\"}\n         )}\n      ]\n\n      :ok = start_vehicles(events)\n\n      assert {:ok, parent_view, html} =\n               conn\n               |> put_connect_params(%{\"baseUrl\" => \"http://localhost\"})\n               |> live(\"/\")\n\n      # Check if the map marker icon is present\n      parsed_html = Floki.parse_document!(html)\n      assert Floki.find(parsed_html, \"a.icon span.mdi.mdi-map-marker\") != []\n\n      # Check if the link to Google Maps is present\n      [view] = live_children(parent_view)\n      html = render(view)\n\n      [link] =\n        html\n        |> Floki.parse_document!()\n        |> Floki.find(\"a[href*='google.com/maps']\")\n\n      {\"a\", attrs, [_icon_html]} = link\n      attrs_map = Map.new(attrs)\n\n      expected_href = \"https://www.google.com/maps?q=#{test_latitude},#{test_longitude}\"\n      assert attrs_map[\"href\"] == expected_href\n      assert attrs_map[\"target\"] == \"_blank\"\n      assert attrs_map[\"rel\"] == \"noopener noreferrer\"\n      assert attrs_map[\"class\"] =~ \"icon\"\n      assert attrs_map[\"data-tooltip\"] == \"View car location on Google Maps\"\n    end\n  end\n\n  def start_vehicles(events \\\\ []) do\n    {:ok, _pid} = start_supervised({ApiMock, name: :api_vehicle, events: events, pid: self()})\n\n    {:ok, _pid} =\n      start_supervised(\n        {TeslaMate.Vehicles,\n         vehicle: VehicleMock,\n         vehicles: [\n           %TeslaApi.Vehicle{\n             display_name: \"foo\",\n             id: 4242,\n             vehicle_id: 404,\n             vin: \"xxxxx\"\n           }\n         ]}\n      )\n\n    :ok\n  end\nend\n"
  },
  {
    "path": "test/teslamate_web/live/charge_cost_live_test.exs",
    "content": "defmodule TeslaMateWeb.ChargeLive.CostTest do\n  use TeslaMateWeb.ConnCase, async: false\n  use TeslaMate.VehicleCase, async: false\n\n  alias TeslaMate.Log.ChargingProcess\n  alias TeslaMate.{Log, Locations, Repo}\n\n  import TestHelper, only: [decimal: 1]\n\n  describe \"metadata\" do\n    test \"hides the date if the charge has no end_date\", %{conn: conn} do\n      car = car_fixture()\n\n      # incomplete\n\n      {:ok, %ChargingProcess{id: id} = cp} =\n        Log.start_charging_process(car, %{date: DateTime.utc_now(), latitude: 0, longitude: 0})\n\n      assert {:ok, _view, html} = live(conn, \"/charge-cost/#{id}\")\n\n      assert [] ==\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#date-tag\")\n\n      # complete\n\n      assert {:ok, %ChargingProcess{start_date: start_date, end_date: end_date}} =\n               Log.complete_charging_process(cp)\n\n      assert {:ok, _view, html} = live(conn, \"/charge-cost/#{id}\")\n\n      assert [tag] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#date-tag\")\n\n      assert tag\n             |> Floki.find(\"[data-start-date]\")\n             |> Floki.attribute(\"data-start-date\") == [DateTime.to_iso8601(start_date)]\n\n      assert tag\n             |> Floki.find(\"[data-end-date]\")\n             |> Floki.attribute(\"data-end-date\") == [DateTime.to_iso8601(end_date)]\n    end\n\n    test \"shows the duration in minutes\", %{conn: conn} do\n      %ChargingProcess{id: id} = charging_process_fixture(car_fixture(), %{duration_min: 30})\n      assert {:ok, _view, html} = live(conn, \"/charge-cost/#{id}\")\n\n      assert [\n               {\"div\", _,\n                [\n                  {\"span\", _, [{\"span\", _, [{\"span\", [{\"class\", \"mdi mdi-clock\"}], _}]}]},\n                  {\"span\", _, [\"30 min\"]}\n                ]}\n             ] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#duration-tag\")\n    end\n\n    test \"shows either charge_energy_used or charge_energy_added\", %{conn: conn} do\n      cases = [\n        {%{charge_energy_used: 50.0, charge_energy_added: 48.1}, \"50.00 kWh\"},\n        {%{charge_energy_used: 50.0, charge_energy_added: 50.5}, \"50.50 kWh\"},\n        {%{charge_energy_used: nil, charge_energy_added: 50.0}, \"50.00 kWh\"}\n      ]\n\n      for {attrs, tag_str} <- cases do\n        rnd = :rand.uniform(65536)\n        car = car_fixture(eid: rnd, vid: rnd, vin: to_string(rnd))\n        %ChargingProcess{id: id} = charging_process_fixture(car, attrs)\n\n        assert {:ok, _view, html} = live(conn, \"/charge-cost/#{id}\")\n\n        assert [\n                 {\"div\", _,\n                  [\n                    {\"span\", _, [{\"span\", _, [{\"span\", [{\"class\", \"mdi mdi-flash\"}], _}]}]},\n                    {\"span\", _, [text]}\n                  ]}\n               ] =\n                 html\n                 |> Floki.parse_document!()\n                 |> Floki.find(\"#energy-tag\")\n\n        assert String.trim(text) == tag_str\n      end\n\n      # both nil\n\n      attrs = %{charge_energy_used: nil, charge_energy_added: nil}\n      %ChargingProcess{id: id} = charging_process_fixture(car_fixture(), attrs)\n      assert {:ok, _view, html} = live(conn, \"/charge-cost/#{id}\")\n\n      assert [] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#energy-tag\")\n    end\n\n    test \"shows the car name\", %{conn: conn} do\n      %ChargingProcess{id: id} = charging_process_fixture(car_fixture(name: \"joe\"))\n      assert {:ok, _view, html} = live(conn, \"/charge-cost/#{id}\")\n\n      assert [\n               {\"div\", _,\n                [\n                  {\"span\", _, [{\"span\", _, [{\"span\", [{\"class\", \"mdi mdi-car\"}], _}]}]},\n                  {\"span\", _, [\"joe\"]}\n                ]}\n             ] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#car-tag\")\n    end\n\n    test \"shows the geo-fence name\", %{conn: conn} do\n      {:ok, geofence} =\n        Locations.create_geofence(%{\n          name: \"Post Office\",\n          latitude: -25.066188,\n          longitude: -130.100502,\n          radius: 100\n        })\n\n      %ChargingProcess{id: id} =\n        charging_process_fixture(car_fixture(), %{geofence_id: geofence.id})\n\n      assert {:ok, _view, html} = live(conn, \"/charge-cost/#{id}\")\n\n      assert [\n               {\"div\", _,\n                [\n                  {\"span\", _, [{\"span\", _, [{\"span\", [{\"class\", \"mdi mdi-map-marker\"}], _}]}]},\n                  {\"span\", _, [location_text]}\n                ]}\n             ] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#location-tag\")\n\n      assert String.trim(location_text) == \"Post Office\"\n    end\n\n    test \"shows the address name\", %{conn: conn} do\n      {:ok, address} =\n        Locations.create_address(%{\n          display_name:\n            \"Beelitz Supercharger, Dr.-Herrmann-Straße, Beelitz-Heilstätten, Beelitz, Potsdam-Mittelmark, Brandenburg, 14547, Deutschland\",\n          osm_id: 66_385_359,\n          osm_type: \"way\",\n          latitude: 52.2668097,\n          longitude: 12.9223251,\n          name: \"Beelitz Supercharger\",\n          house_number: nil,\n          road: \"Dr.-Herrmann-Straße\",\n          neighbourhood: \"Beelitz-Heilstätten\",\n          city: \"Beelitz\",\n          county: \"Potsdam-Mittelmark\",\n          postcode: \"14547\",\n          state: \"Brandenburg\",\n          state_district: nil,\n          country: \"Deutschland\",\n          raw: %{}\n        })\n\n      %ChargingProcess{id: id} =\n        charging_process_fixture(car_fixture(), %{address_id: address.id})\n\n      assert {:ok, _view, html} = live(conn, \"/charge-cost/#{id}\")\n\n      assert [\n               {\"div\", _,\n                [\n                  {\"span\", _, [{\"span\", _, [{\"span\", [{\"class\", \"mdi mdi-map-marker\"}], _}]}]},\n                  {\"span\", _, [location_text]}\n                ]}\n             ] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#location-tag\")\n\n      assert String.trim(location_text) == \"Beelitz Supercharger, Beelitz\"\n    end\n  end\n\n  describe \"editing\" do\n    test \"saves the charge cost\", %{conn: conn} do\n      %ChargingProcess{id: id} =\n        charging_process_fixture(car_fixture(), %{\n          cost: nil,\n          charge_energy_added: 8,\n          charge_energy_used: 10\n        })\n\n      assert {:ok, view, html} = live(conn, \"/charge-cost/#{id}\")\n\n      assert [] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#charging_process_cost\")\n               |> Floki.attribute(\"value\")\n\n      html =\n        render_submit(view, :save, %{charging_process: %{cost: 42.12}})\n        |> Floki.parse_document!()\n\n      assert \"Total\" =\n               html |> Floki.find(\"#charging_process_mode option[selected]\") |> Floki.text()\n\n      assert [\"42.12\"] = html |> Floki.find(\"#charging_process_cost\") |> Floki.attribute(\"value\")\n      assert %ChargingProcess{cost: decimal(\"42.12\")} = Repo.get(ChargingProcess, id)\n\n      html =\n        render_submit(view, :save, %{charging_process: %{cost: nil}})\n        |> Floki.parse_document!()\n\n      assert [] = html |> Floki.find(\"#charging_process_cost\") |> Floki.attribute(\"value\")\n      assert nil == Repo.get(ChargingProcess, id).cost\n    end\n\n    test \"allows to enter the cost per kWh\", %{conn: conn} do\n      %ChargingProcess{id: id} =\n        charging_process_fixture(car_fixture(), %{\n          cost: nil,\n          charge_energy_added: 8,\n          charge_energy_used: 10\n        })\n\n      assert {:ok, view, html} = live(conn, \"/charge-cost/#{id}\")\n\n      assert [] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#charging_process_cost\")\n               |> Floki.attribute(\"value\")\n\n      html =\n        render_submit(view, :save, %{charging_process: %{cost: 0.12, mode: \"per_kwh\"}})\n        |> Floki.parse_document!()\n\n      assert \"Total\" =\n               html |> Floki.find(\"#charging_process_mode option[selected]\") |> Floki.text()\n\n      assert [\"1.20\"] = html |> Floki.find(\"#charging_process_cost\") |> Floki.attribute(\"value\")\n      assert %ChargingProcess{cost: decimal(\"1.20\")} = Repo.get(ChargingProcess, id)\n\n      html =\n        render_submit(view, :save, %{charging_process: %{cost: nil}})\n        |> Floki.parse_document!()\n\n      assert [] = html |> Floki.find(\"#charging_process_cost\") |> Floki.attribute(\"value\")\n      assert nil == Repo.get(ChargingProcess, id).cost\n    end\n\n    test \"allows negative charge cost\", %{conn: conn} do\n      %ChargingProcess{id: id} =\n        charging_process_fixture(car_fixture(), %{\n          cost: nil,\n          charge_energy_added: 8,\n          charge_energy_used: 10\n        })\n\n      assert {:ok, view, html} = live(conn, \"/charge-cost/#{id}\")\n\n      assert [] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#charging_process_cost\")\n               |> Floki.attribute(\"value\")\n\n      html =\n        render_submit(view, :save, %{charging_process: %{cost: -0.029, mode: \"per_kwh\"}})\n        |> Floki.parse_document!()\n\n      assert \"Total\" =\n               html |> Floki.find(\"#charging_process_mode option[selected]\") |> Floki.text()\n\n      assert [\"-0.29\"] = html |> Floki.find(\"#charging_process_cost\") |> Floki.attribute(\"value\")\n      assert %ChargingProcess{cost: decimal(\"-0.29\")} = Repo.get(ChargingProcess, id)\n\n      html =\n        render_submit(view, :save, %{charging_process: %{cost: nil}})\n        |> Floki.parse_document!()\n\n      assert [] = html |> Floki.find(\"#charging_process_cost\") |> Floki.attribute(\"value\")\n      assert nil == Repo.get(ChargingProcess, id).cost\n    end\n\n    test \"allows to enter the cost per Minute\", %{conn: conn} do\n      %ChargingProcess{id: id} =\n        charging_process_fixture(car_fixture(), %{\n          cost: nil,\n          charge_energy_added: 8,\n          charge_energy_used: 10,\n          duration_min: 15\n        })\n\n      assert {:ok, view, html} = live(conn, \"/charge-cost/#{id}\")\n\n      assert [] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#charging_process_cost\")\n               |> Floki.attribute(\"value\")\n\n      html =\n        render_submit(view, :save, %{charging_process: %{cost: 0.10, mode: \"per_minute\"}})\n        |> Floki.parse_document!()\n\n      assert \"Total\" =\n               html |> Floki.find(\"#charging_process_mode option[selected]\") |> Floki.text()\n\n      assert [\"1.50\"] = html |> Floki.find(\"#charging_process_cost\") |> Floki.attribute(\"value\")\n      assert %ChargingProcess{cost: decimal(\"1.50\")} = Repo.get(ChargingProcess, id)\n    end\n  end\n\n  describe \"back button\" do\n    test \"redirects to the original referrer\", %{conn: conn} do\n      %ChargingProcess{id: id} = charging_process_fixture(car_fixture())\n\n      assert {:ok, _view, html} =\n               conn\n               |> put_connect_params(%{\"referrer\" => \"http://grafana.example.com/d/xyz/12\"})\n               |> live(\"/charge-cost/#{id}\")\n\n      assert [\"http://grafana.example.com/d/xyz/12\"] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".control a\")\n               |> Floki.attribute(\"href\")\n    end\n\n    test \"redirects to home page if there is no referrer\", %{conn: conn} do\n      %ChargingProcess{id: id} = charging_process_fixture(car_fixture())\n\n      assert {:ok, _view, html} =\n               conn\n               |> put_connect_params(%{\"referrer\" => nil})\n               |> live(\"/charge-cost/#{id}\")\n\n      assert [\"/\"] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".control a\")\n               |> Floki.attribute(\"href\")\n    end\n  end\n\n  defp car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(%{\n        efficiency: 0.153,\n        eid: 42,\n        model: \"s\",\n        vid: 42,\n        name: \"foo\",\n        trim_badging: \"p100d\",\n        vin: \"12345f\"\n      })\n      |> Log.create_car()\n\n    car\n  end\n\n  defp charging_process_fixture(car, attrs \\\\ %{}) do\n    attrs =\n      attrs\n      |> Enum.into(%{\n        start_date: DateTime.utc_now(),\n        position: %{date: DateTime.utc_now(), latitude: 0, longitude: 0, car_id: car.id}\n      })\n\n    {:ok, charging_process} =\n      %ChargingProcess{car_id: car.id}\n      |> ChargingProcess.changeset(attrs)\n      |> Repo.insert()\n\n    charging_process\n  end\nend\n"
  },
  {
    "path": "test/teslamate_web/live/geofence_live_test.exs",
    "content": "defmodule TeslaMateWeb.GeoFenceLiveTest do\n  use TeslaMateWeb.ConnCase\n\n  alias TeslaMate.{Locations, Settings, Log, Repo}\n  alias TeslaMate.Locations.GeoFence\n\n  import TestHelper, only: [decimal: 1]\n  import Ecto.Query\n\n  def geofence_fixture(attrs \\\\ %{}) do\n    {:ok, address} =\n      attrs\n      |> Enum.into(%{radius: 100})\n      |> Locations.create_geofence()\n\n    address\n  end\n\n  defp car_fixture(attrs \\\\ %{}) do\n    {:ok, car} =\n      attrs\n      |> Enum.into(%{\n        efficiency: 0.153,\n        eid: 42,\n        model: \"S\",\n        vid: 42,\n        name: \"foo\",\n        trim_badging: \"P100D\",\n        vin: \"12345F\"\n      })\n      |> Log.create_car()\n\n    car\n  end\n\n  describe \"Index\" do\n    test \"renders all geo-fences\", %{conn: conn} do\n      _gf1 =\n        geofence_fixture(%{name: \"Post office\", latitude: -25.066188, longitude: -130.100502})\n\n      _gf2 =\n        geofence_fixture(%{name: \"Service Center\", latitude: 52.394246, longitude: 13.542552})\n\n      _gf3 =\n        geofence_fixture(%{name: \"Victory Column\", latitude: 52.514521, longitude: 13.350144})\n\n      assert {:ok, _view, html} = live(conn, \"/geo-fences\")\n\n      assert [\n               _,\n               [\"Post office\", \"-25.066188, -130.100502\", \"100 m\", _],\n               [\"Service Center\", \"52.394246, 13.542552\", \"100 m\", _],\n               [\"Victory Column\", \"52.514521, 13.350144\", \"100 m\", _]\n             ] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"tr\")\n               |> Enum.map(fn row ->\n                 row |> Floki.find(\"td\") |> Enum.map(&Floki.text/1) |> Enum.map(&String.trim/1)\n               end)\n    end\n\n    test \"displays radius in ft\", %{conn: conn} do\n      {:ok, _settings} =\n        Settings.get_global_settings!() |> Settings.update_global_settings(%{unit_of_length: :mi})\n\n      _gf1 =\n        geofence_fixture(%{\n          name: \"Post office\",\n          latitude: -25.066188,\n          longitude: -130.100502,\n          radius: 100\n        })\n\n      assert {:ok, _view, html} = live(conn, \"/geo-fences\")\n\n      assert [\"Post office\", \"-25.066188, -130.100502\", \"328 ft\", _] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"td\")\n               |> Enum.map(&Floki.text/1)\n               |> Enum.map(&String.trim/1)\n    end\n\n    test \"allows deletion of a geo-fence\", %{conn: conn} do\n      %GeoFence{id: id} =\n        geofence_fixture(%{name: \"Victory Column\", latitude: 52.514521, longitude: 13.350144})\n\n      assert {:ok, view, html} = live(conn, \"/geo-fences\")\n\n      assert [\"Victory Column\", \"52.514521, 13.350144\", \"100 m\", _] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"td\")\n               |> Enum.map(&Floki.text/1)\n               |> Enum.map(&String.trim/1)\n\n      assert [{\"a\", _, _}] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"[data-id=#{id}]\")\n\n      assert [{\"tbody\", _, []}] =\n               view\n               |> render_click(:delete, %{\"id\" => \"#{id}\"})\n               |> Floki.parse_document!()\n               |> Floki.find(\"tbody\")\n    end\n  end\n\n  describe \"Edit\" do\n    test \"validates changes when editing of a geo-fence\", %{conn: conn} do\n      %GeoFence{id: id} =\n        geofence_fixture(%{\n          name: \"Post office\",\n          latitude: -25.066188,\n          longitude: -130.100502,\n          billing_type: :per_kwh,\n          cost_per_unit: 0.2599,\n          session_fee: 5.49\n        })\n\n      assert {:ok, view, html} = live(conn, \"/geo-fences/#{id}/edit\")\n      html = Floki.parse_document!(html)\n\n      name = Floki.find(html, \"#geo_fence_name\")\n      assert [\"Post office\"] = Floki.attribute(name, \"value\")\n\n      latitude = Floki.find(html, \"#geo_fence_latitude\")\n      assert [\"-25.066188\"] = Floki.attribute(latitude, \"value\")\n\n      longitude = Floki.find(html, \"#geo_fence_longitude\")\n      assert [\"-130.100502\"] = Floki.attribute(longitude, \"value\")\n\n      radius = Floki.find(html, \"#geo_fence_radius\")\n      assert [\"100\"] = Floki.attribute(radius, \"value\")\n\n      radius = Floki.find(html, \"#geo_fence_cost_per_unit\")\n      assert [\"0.2599\"] = Floki.attribute(radius, \"value\")\n\n      radius = Floki.find(html, \"#geo_fence_session_fee\")\n      assert [\"5.49\"] = Floki.attribute(radius, \"value\")\n\n      html =\n        render_submit(view, :save, %{geo_fence: %{name: \"\", radius: \"\"}})\n        |> Floki.parse_document!()\n\n      assert [\"\"] = html |> Floki.find(\"#geo_fence_name\") |> Floki.attribute(\"value\")\n\n      for kind <- [\"name\", \"radius\"] do\n        error_html =\n          html\n          |> Floki.find(\".field-body .field\")\n          |> Enum.filter(fn field ->\n            Floki.find(field, \"input[name=\\\"geo_fence[#{kind}]\\\"]\") |> length() == 1\n          end)\n          |> Enum.map(fn field -> Floki.find(field, \"span.help.is-danger.pl-15\") end)\n          |> List.flatten()\n          |> Enum.map(&Floki.raw_html(&1, encode: false))\n          |> Enum.join()\n\n        assert error_html ==\n                 \"<span class=\\\"help is-danger pl-15\\\" phx-feedback-for=\\\"geo_fence[#{kind}]\\\">can't be blank</span>\"\n      end\n    end\n\n    test \"allows editing of a geo-fence\", %{conn: conn} do\n      %GeoFence{id: id} =\n        geofence_fixture(%{name: \"Post office\", latitude: -25.066188, longitude: -130.100502})\n\n      assert {:ok, view, html} = live(conn, \"/geo-fences/#{id}/edit\")\n      html = Floki.parse_document!(html)\n\n      name = Floki.find(html, \"#geo_fence_name\")\n      assert [\"Post office\"] = Floki.attribute(name, \"value\")\n\n      latitude = Floki.find(html, \"#geo_fence_latitude\")\n      assert [\"-25.066188\"] = Floki.attribute(latitude, \"value\")\n\n      longitude = Floki.find(html, \"#geo_fence_longitude\")\n      assert [\"-130.100502\"] = Floki.attribute(longitude, \"value\")\n\n      radius = Floki.find(html, \"#geo_fence_radius\")\n      assert [\"100\"] = Floki.attribute(radius, \"value\")\n\n      render_submit(view, :save, %{\n        geo_fence: %{name: \"Adamstown\", longitude: 0, latitude: 0, radius: 20}\n      })\n\n      assert_redirect(view, \"/geo-fences\")\n\n      assert {:ok, _view, html} = live(conn, \"/geo-fences\")\n\n      assert [\"Adamstown\", \"0.000000, 0.000000\", \"20 m\", _] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"td\")\n               |> Enum.map(&Floki.text/1)\n               |> Enum.map(&String.trim/1)\n    end\n  end\n\n  describe \"New\" do\n    test \"pre-fills the coordinates with the most recent position\", %{conn: conn} do\n      car = car_fixture()\n\n      assert {:ok, _} =\n               Log.insert_position(car, %{\n                 date: DateTime.utc_now(),\n                 latitude: 48.067612,\n                 longitude: 12.862226\n               })\n\n      assert {:ok, _view, html} = live(conn, \"/geo-fences/new\")\n      html = Floki.parse_document!(html)\n\n      latitude = Floki.find(html, \"#geo_fence_latitude\")\n      longitude = Floki.find(html, \"#geo_fence_longitude\")\n\n      assert [\"48.067612\"] = Floki.attribute(latitude, \"value\")\n      assert [\"12.862226\"] = Floki.attribute(longitude, \"value\")\n    end\n\n    test \"validates changes when creating a new geo-fence\", %{conn: conn} do\n      assert {:ok, view, _html} = live(conn, \"/geo-fences/new\")\n\n      html =\n        render_submit(view, :save, %{\n          geo_fence: %{\n            name: \"\",\n            longitude: nil,\n            latitude: nil,\n            radius: \"\",\n            billing_type: :per_kwh,\n            cost_per_unit: \"wat\",\n            session_fee: \"wat\"\n          }\n        })\n        |> Floki.parse_document!()\n\n      assert [\"\"] = html |> Floki.find(\"#geo_fence_name\") |> Floki.attribute(\"value\")\n      assert [\"\"] = html |> Floki.find(\"#geo_fence_latitude\") |> Floki.attribute(\"value\")\n      assert [\"\"] = html |> Floki.find(\"#geo_fence_longitude\") |> Floki.attribute(\"value\")\n      assert [\"\"] = html |> Floki.find(\"#geo_fence_radius\") |> Floki.attribute(\"value\")\n      assert [\"wat\"] = html |> Floki.find(\"#geo_fence_cost_per_unit\") |> Floki.attribute(\"value\")\n      assert [\"wat\"] = html |> Floki.find(\"#geo_fence_session_fee\") |> Floki.attribute(\"value\")\n\n      assert [\n               field_position,\n               field_name,\n               field_cost_per_unit,\n               field_session_fee,\n               _\n             ] = Floki.find(html, \".field.is-horizontal\")\n\n      assert [\"can't be blank\", \"can't be blank\", \"can't be blank\"] =\n               field_position |> Floki.find(\"span\") |> Enum.map(&Floki.text/1)\n\n      assert [\"can't be blank\"] = field_name |> Floki.find(\"span\") |> Enum.map(&Floki.text/1)\n\n      assert \"Per kWh\" =\n               field_cost_per_unit\n               |> Floki.find(\"#geo_fence_billing_type option[selected]\")\n               |> Floki.text()\n\n      assert \"is invalid\" =\n               field_cost_per_unit\n               |> Floki.find(\"span.help\")\n               |> Floki.text()\n\n      assert \"is invalid\" =\n               field_session_fee\n               |> Floki.find(\"span\")\n               |> Floki.text()\n\n      html =\n        render_submit(view, :save, %{\n          geo_fence: %{\n            name: \"foo\",\n            longitude: \"wot\",\n            latitude: \"wat\",\n            radius: \"40\",\n            billing_type: :per_minute,\n            cost_per_unit: 0.25,\n            session_fee: 4.79\n          }\n        })\n        |> Floki.parse_document!()\n\n      assert [\"foo\"] = html |> Floki.find(\"#geo_fence_name\") |> Floki.attribute(\"value\")\n      assert [\"wat\"] = html |> Floki.find(\"#geo_fence_latitude\") |> Floki.attribute(\"value\")\n      assert [\"wot\"] = html |> Floki.find(\"#geo_fence_longitude\") |> Floki.attribute(\"value\")\n      assert [\"40\"] = html |> Floki.find(\"#geo_fence_radius\") |> Floki.attribute(\"value\")\n      assert [\"0.25\"] = html |> Floki.find(\"#geo_fence_cost_per_unit\") |> Floki.attribute(\"value\")\n      assert [\"4.79\"] = html |> Floki.find(\"#geo_fence_session_fee\") |> Floki.attribute(\"value\")\n\n      assert [\n               field_position,\n               field_name,\n               field_cost_per_unit,\n               field_session_fee,\n               _\n             ] = Floki.find(html, \".field.is-horizontal\")\n\n      assert [\"is invalid\", \"is invalid\"] =\n               field_position |> Floki.find(\"span\") |> Enum.map(&Floki.text/1)\n\n      assert [] =\n               field_name\n               |> Floki.find(\"span\")\n               |> Enum.map(&Floki.text/1)\n\n      assert \"Per Minute\" =\n               field_cost_per_unit\n               |> Floki.find(\"#geo_fence_billing_type option[selected]\")\n               |> Floki.text()\n\n      assert \"\" =\n               field_cost_per_unit\n               |> Floki.find(\"span.help\")\n               |> Floki.text()\n\n      assert \"\" =\n               field_session_fee\n               |> Floki.find(\"span\")\n               |> Floki.text()\n    end\n\n    test \"creates a new geo-fence\", %{conn: conn} do\n      assert {:ok, view, html} = live(conn, \"/geo-fences/new\")\n\n      # Default radius of 20m\n      assert html\n             |> Floki.parse_document!()\n             |> Floki.find(\"#geo_fence_radius\")\n             |> Floki.attribute(\"value\") == [\"20\"]\n\n      render_submit(view, :save, %{\n        geo_fence: %{\n          name: \"post office\",\n          latitude: -25.066188,\n          longitude: -130.100502,\n          radius: 25\n        }\n      })\n\n      assert_redirect(view, \"/geo-fences\")\n\n      assert {:ok, _view, html} = live(conn, \"/geo-fences\")\n\n      assert [\"post office\", \"-25.066188, -130.100502\", \"25 m\", _] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"td\")\n               |> Enum.map(&Floki.text/1)\n               |> Enum.map(&String.trim/1)\n    end\n\n    test \"allows creating of a geo-fence with radius being displayed in ft\", %{conn: conn} do\n      {:ok, _settings} =\n        Settings.get_global_settings!() |> Settings.update_global_settings(%{unit_of_length: :mi})\n\n      assert {:ok, view, _html} = live(conn, \"/geo-fences/new\")\n\n      render_submit(view, :save, %{\n        geo_fence: %{\n          name: \"post office\",\n          latitude: -25.066188,\n          longitude: -130.100502,\n          radius: 15\n        }\n      })\n\n      assert_redirect(view, \"/geo-fences\")\n\n      assert {:ok, _view, html} = live(conn, \"/geo-fences\")\n\n      assert [\"post office\", \"-25.066188, -130.100502\", \"49 ft\", _] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"td\")\n               |> Enum.map(&Floki.text/1)\n               |> Enum.map(&String.trim/1)\n\n      {:ok, _settings} =\n        Settings.get_global_settings!() |> Settings.update_global_settings(%{unit_of_length: :km})\n\n      assert {:ok, _view, html} = live(conn, \"/geo-fences\")\n\n      assert [\"post office\", \"-25.066188, -130.100502\", \"15 m\", _] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"td\")\n               |> Enum.map(&Floki.text/1)\n               |> Enum.map(&String.trim/1)\n    end\n  end\n\n  describe \"grafana URL\" do\n    alias TeslaMate.Settings.GlobalSettings\n\n    test \"sets the base URL\", %{conn: conn} do\n      assert %GlobalSettings{grafana_url: nil} = Settings.get_global_settings!()\n\n      assert {:ok, _parent_view, _html} =\n               conn\n               |> put_connect_params(%{\"referrer\" => \"http://grafana.example.com/d/xyz/12\"})\n               |> live(\"/geo-fences/new?lat=0.0&lng=0.0\")\n\n      assert %GlobalSettings{grafana_url: \"http://grafana.example.com\"} =\n               Settings.get_global_settings!()\n    end\n\n    test \"handles weird referrers\", %{conn: conn} do\n      assert %GlobalSettings{grafana_url: nil} = Settings.get_global_settings!()\n\n      for referrer <- [nil, \"\", \"example.com\", \"http://example.com\", \"http://example.com/\"] do\n        assert {:ok, _parent_view, _html} =\n                 conn\n                 |> put_connect_params(%{\"referrer\" => referrer})\n                 |> live(\"/geo-fences/new?lat=0.0&lng=0.0\")\n\n        assert %GlobalSettings{grafana_url: nil} = Settings.get_global_settings!()\n      end\n    end\n\n    test \"keeps the path\", %{conn: conn} do\n      assert %GlobalSettings{grafana_url: nil} = Settings.get_global_settings!()\n\n      assert {:ok, _parent_view, _html} =\n               conn\n               |> put_connect_params(%{\"referrer\" => \"http://example.com:9090/grafana/d/xyz/12\"})\n               |> live(\"/geo-fences/new?lat=0.0&lng=0.0\")\n\n      assert %GlobalSettings{grafana_url: \"http://example.com:9090/grafana\"} =\n               Settings.get_global_settings!()\n    end\n\n    test \"does not update the base URL if exists already\", %{conn: conn} do\n      assert {:ok, _settings} =\n               Settings.get_global_settings!()\n               |> Settings.update_global_settings(%{grafana_url: \"https://grafana.example.com\"})\n\n      assert {:ok, _parent_view, _html} =\n               conn\n               |> put_connect_params(%{\"referrer\" => \"http://grafana.foo.com/d/xyz/12\"})\n               |> live(\"/geo-fences/new?lat=0.0&lng=0.0\")\n\n      assert %GlobalSettings{grafana_url: \"https://grafana.example.com\"} =\n               Settings.get_global_settings!()\n    end\n  end\n\n  describe \"charging cost\" do\n    alias TeslaMate.Log.{ChargingProcess, Position}\n    alias TeslaMate.Log\n\n    test \"shows modal if cost per kWh was entered\", %{conn: conn} do\n      car = car_fixture()\n\n      lat = 47.81444104508753\n      lng = 12.367612123489382\n\n      params = %{\n        name: \"Supercharger\",\n        latitude: 47.814441,\n        longitude: 12.367768,\n        radius: 30,\n        billing_type: :per_kwh,\n        cost_per_unit: 0.33,\n        session_fee: nil\n      }\n\n      # Does not show modal if there aren't any charging sessions at this location\n\n      assert {:ok, view, _html} = live(conn, \"/geo-fences/new\")\n      render_submit(view, :save, %{geo_fence: params})\n      assert_redirect(view, \"/geo-fences\")\n\n      # Insert charging sessions ...\n\n      :ok = insert_charging_processes(car, {lat, lng})\n      assert {:ok, view, html} = live(conn, \"/geo-fences/new\")\n\n      assert [] == html |> Floki.parse_document!() |> Floki.find(\".modal.is-active\")\n\n      html =\n        render_submit(view, :save, %{geo_fence: params})\n        |> Floki.parse_document!()\n\n      modal = Floki.find(html, \".modal.is-active\")\n\n      assert \"3 charging sessions\" =\n               modal |> Floki.find(\".modal-card-body strong\") |> Floki.text()\n\n      assert [\"Continue\", \"Add costs retroactively\"] =\n               modal\n               |> Floki.find(\".modal-card-foot button\")\n               |> Enum.map(&Floki.text/1)\n               |> Enum.map(&String.trim/1)\n    end\n\n    test \"shows modal if a session fee was entered\", %{conn: conn} do\n      car = car_fixture()\n      lat = 47.81444104508753\n      lng = 12.367612123489382\n      :ok = insert_charging_processes(car, {lat, lng})\n\n      assert {:ok, view, html} = live(conn, \"/geo-fences/new\")\n\n      assert [] == html |> Floki.parse_document!() |> Floki.find(\".modal.is-active\")\n\n      html =\n        render_submit(view, :save, %{\n          geo_fence: %{\n            name: \"Supercharger\",\n            latitude: 47.814441,\n            longitude: 12.367768,\n            radius: 30,\n            billing_type: :per_kwh,\n            cost_per_unit: nil,\n            session_fee: 4.69\n          }\n        })\n        |> Floki.parse_document!()\n\n      modal = Floki.find(html, \".modal.is-active\")\n\n      assert \"3 charging sessions\" =\n               modal |> Floki.find(\".modal-card-body strong\") |> Floki.text()\n\n      assert [\"Continue\", \"Add costs retroactively\"] =\n               modal\n               |> Floki.find(\".modal-card-foot button\")\n               |> Enum.map(&Floki.text/1)\n               |> Enum.map(&String.trim/1)\n    end\n\n    test \"shows modal if the position changed\", %{conn: conn} do\n      car = car_fixture()\n\n      %GeoFence{id: id} =\n        geofence_fixture(%{\n          name: \"Supercharger\",\n          latitude: 47.814441,\n          longitude: 12.367768,\n          radius: 30,\n          billing_type: :per_kwh,\n          cost_per_unit: nil,\n          session_fee: 4.69\n        })\n\n      :ok = insert_charging_processes(car, {47.81444104508753, 12.367612123489382})\n\n      # Edit geofence\n\n      assert {:ok, view, h} = live(conn, \"/geo-fences/#{id}/edit\")\n      h = Floki.parse_document!(h)\n\n      assert [] == Floki.find(h, \".modal.is-active\")\n      assert [\"47.814441\"] = h |> Floki.find(\"#geo_fence_latitude\") |> Floki.attribute(\"value\")\n      assert [\"12.367768\"] = h |> Floki.find(\"#geo_fence_longitude\") |> Floki.attribute(\"value\")\n\n      html =\n        render_submit(view, :save, %{geo_fence: %{latitude: 47.814451, longitude: 12.367761}})\n        |> Floki.parse_document!()\n\n      modal = Floki.find(html, \".modal.is-active\")\n\n      assert \"3 charging sessions\" =\n               modal |> Floki.find(\".modal-card-body strong\") |> Floki.text()\n\n      assert [\"Continue\", \"Add costs retroactively\"] =\n               modal\n               |> Floki.find(\".modal-card-foot button\")\n               |> Enum.map(&Floki.text/1)\n               |> Enum.map(&String.trim/1)\n    end\n\n    test \"shows modal if the radius changed\", %{conn: conn} do\n      car = car_fixture()\n\n      %GeoFence{id: id} =\n        geofence_fixture(%{\n          name: \"Supercharger\",\n          latitude: 47.814441,\n          longitude: 12.367768,\n          radius: 30,\n          billing_type: :per_kwh,\n          cost_per_unit: 0.42,\n          session_fee: nil\n        })\n\n      :ok = insert_charging_processes(car, {47.81444104508753, 12.367612123489382})\n\n      # Edit geofence\n\n      assert {:ok, view, h} = live(conn, \"/geo-fences/#{id}/edit\")\n      h = Floki.parse_document!(h)\n\n      assert [] == Floki.find(h, \".modal.is-active\")\n      assert [\"47.814441\"] = h |> Floki.find(\"#geo_fence_latitude\") |> Floki.attribute(\"value\")\n      assert [\"12.367768\"] = h |> Floki.find(\"#geo_fence_longitude\") |> Floki.attribute(\"value\")\n\n      html =\n        render_submit(view, :save, %{geo_fence: %{radius: 50}})\n        |> Floki.parse_document!()\n\n      modal = Floki.find(html, \".modal.is-active\")\n\n      assert \"3 charging sessions\" =\n               modal |> Floki.find(\".modal-card-body strong\") |> Floki.text()\n\n      assert [\"Continue\", \"Add costs retroactively\"] =\n               modal\n               |> Floki.find(\".modal-card-foot button\")\n               |> Enum.map(&Floki.text/1)\n               |> Enum.map(&String.trim/1)\n    end\n\n    test \"adds charging costs\", %{conn: conn} do\n      car = car_fixture()\n      :ok = insert_charging_processes(car, {47.81444104508753, 12.367612123489382})\n      :ok = insert_charging_processes(car, {42.0, 69.0})\n\n      assert {:ok, view, html} = live(conn, \"/geo-fences/new\")\n      assert [] == html |> Floki.parse_document!() |> Floki.find(\".modal.is-active\")\n\n      html =\n        render_submit(view, :save, %{\n          geo_fence: %{\n            name: \"Supercharger\",\n            latitude: 47.814441,\n            longitude: 12.367768,\n            radius: 30,\n            billing_type: :per_kwh,\n            cost_per_unit: 0.33,\n            session_fee: 5.00\n          }\n        })\n        |> Floki.parse_document!()\n\n      assert [\n               {\"button\", [_, {\"phx-click\", \"calc-costs\"}, {\"phx-value-result\", \"no\"}],\n                [no_button_text]},\n               {\"button\", [_, {\"phx-click\", \"calc-costs\"}, {\"phx-value-result\", \"yes\"}],\n                [yes_button_text]}\n             ] = html |> Floki.find(\".modal.is-active\") |> Floki.find(\".modal-card-foot button\")\n\n      assert \"Continue\" == String.trim(no_button_text)\n      assert \"Add costs retroactively\" == String.trim(yes_button_text)\n\n      view\n      |> element(\".modal button\", \"Add costs retroactively\")\n      |> render_click()\n\n      assert_redirect(view, \"/geo-fences\")\n\n      assert [\n               %ChargingProcess{\n                 geofence_id: id,\n                 charge_energy_added: decimal(50.63),\n                 charge_energy_used: nil,\n                 cost: decimal(\"99.00\")\n               },\n               %ChargingProcess{\n                 geofence_id: id,\n                 charge_energy_added: decimal(4.57),\n                 charge_energy_used: nil,\n                 cost: decimal(6.51)\n               },\n               %ChargingProcess{\n                 geofence_id: id,\n                 charge_energy_added: decimal(11.82),\n                 charge_energy_used: nil,\n                 cost: decimal(\"8.90\")\n               },\n               %ChargingProcess{\n                 geofence_id: id,\n                 charge_energy_added: decimal(\"52.10\"),\n                 charge_energy_used: nil,\n                 cost: decimal(22.19)\n               },\n               %ChargingProcess{geofence_id: nil, cost: decimal(\"99.00\")},\n               %ChargingProcess{geofence_id: nil, cost: nil},\n               %ChargingProcess{geofence_id: nil, cost: nil},\n               %ChargingProcess{geofence_id: nil, cost: nil}\n             ] = Repo.all(from c in ChargingProcess, order_by: c.id)\n\n      assert %GeoFence{\n               name: \"Supercharger\",\n               latitude: decimal(47.814441),\n               longitude: decimal(12.367768),\n               radius: 30,\n               billing_type: :per_kwh,\n               cost_per_unit: decimal(\"0.3300\"),\n               session_fee: decimal(\"5.00\")\n             } = Repo.get(GeoFence, id)\n    end\n\n    test \"skips adding charging costs\", %{conn: conn} do\n      car = car_fixture()\n      :ok = insert_charging_processes(car, {47.81444104508753, 12.367612123489382})\n\n      assert {:ok, view, _html} = live(conn, \"/geo-fences/new\")\n\n      html =\n        render_submit(view, :save, %{\n          geo_fence: %{\n            name: \"Supercharger\",\n            latitude: 47.814441,\n            longitude: 12.367768,\n            radius: 30,\n            billing_type: :per_kwh,\n            cost_per_unit: 0.33,\n            session_fee: 5.00\n          }\n        })\n        |> Floki.parse_document!()\n\n      assert [\n               {\"button\", [_, {\"phx-click\", \"calc-costs\"}, {\"phx-value-result\", \"no\"}],\n                [no_button_text]},\n               {\"button\", [_, {\"phx-click\", \"calc-costs\"}, {\"phx-value-result\", \"yes\"}],\n                [yes_button_text]}\n             ] = html |> Floki.find(\".modal.is-active\") |> Floki.find(\".modal-card-foot button\")\n\n      assert String.trim(no_button_text) == \"Continue\"\n      assert String.trim(yes_button_text) == \"Add costs retroactively\"\n\n      view\n      |> element(\".modal button\", \"Continue\")\n      |> render_click()\n\n      assert_redirect(view, \"/geo-fences\")\n\n      assert [\n               %ChargingProcess{geofence_id: id, cost: decimal(\"99.00\")},\n               %ChargingProcess{geofence_id: id, cost: nil},\n               %ChargingProcess{geofence_id: id, cost: nil},\n               %ChargingProcess{geofence_id: id, cost: nil}\n             ] = Repo.all(from c in ChargingProcess, order_by: c.id)\n\n      assert %GeoFence{\n               name: \"Supercharger\",\n               latitude: decimal(47.814441),\n               longitude: decimal(12.367768),\n               radius: 30,\n               billing_type: :per_kwh,\n               cost_per_unit: decimal(\"0.3300\"),\n               session_fee: decimal(\"5.00\")\n             } = Repo.get(GeoFence, id)\n    end\n\n    defp insert_charging_processes(car, {lat, lng}) do\n      {:ok, %Position{id: position_id}} =\n        Log.insert_position(car, %{date: DateTime.utc_now(), latitude: lat, longitude: lng})\n\n      data =\n        for {sir, eir, srr, err, ca, sl, el, d, c} <- [\n              {80.5, 412.4, nil, nil, 50.63, 16, 83, 70, 99.0},\n              {109.7, 139.7, 108.7, 139.7, 4.57, 22, 28, 26, nil},\n              {63.9, 142.3, 64.9, 142.3, 11.82, 13, 29, 221, nil},\n              {107.9, 450.1, 108.9, 450.1, 52.1, 22, 90, 40, nil}\n            ] do\n          %{\n            car_id: car.id,\n            start_date: DateTime.utc_now(),\n            position_id: position_id,\n            start_ideal_range_km: sir,\n            end_ideal_range_km: eir,\n            start_rated_range_km: srr,\n            end_rated_range_km: err,\n            charge_energy_added: ca,\n            start_battery_level: sl,\n            end_battery_level: el,\n            duration_min: d,\n            cost: c\n          }\n        end\n\n      {_, nil} = Repo.insert_all(ChargingProcess, data)\n\n      :ok\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate_web/live/import_test.exs",
    "content": "defmodule TeslaMateWeb.ImportLiveTest do\n  use TeslaMateWeb.ConnCase\n\n  alias TeslaMate.{Import, Repair}\n\n  test \"imports files\", %{conn: conn} do\n    {:ok, _} = start_supervised({Import, directory: \"./test/fixtures/import/01_complete\"})\n    {:ok, _} = start_supervised(Repair)\n\n    assert {:ok, view, html} = live(conn, \"/import\")\n\n    # Table\n    assert [\n             {\"tr\", _, [{\"td\", _, [\"06/2016\"]}, {\"td\", _, [path_00]}, _]},\n             {\"tr\", _, [{\"td\", _, [\"07/2016\"]}, {\"td\", _, [path_01]}, _]}\n           ] =\n             html\n             |> Floki.parse_document!()\n             |> Floki.find(\"table tr\")\n\n    assert String.ends_with?(path_00, \"/test/fixtures/import/01_complete/TeslaFi62016.csv\")\n    assert String.ends_with?(path_01, \"/test/fixtures/import/01_complete/TeslaFi72016.csv\")\n\n    # Time Zone\n\n    assert html\n           |> Floki.parse_document!()\n           |> Floki.find(\"#settings_timezone option\")\n           |> Enum.find(fn {\"option\", _, [label]} -> label == \"Europe/Berlin\" end)\n\n    assert render_change(view, :change, %{settings: %{timezone: \"America/Los_Angeles\"}})\n           |> Floki.parse_document!()\n           |> Floki.find(\"#settings_timezone option[selected]\")\n           |> Floki.attribute(\"value\") == [\"America/Los_Angeles\"]\n\n    # Import!\n\n    assert [\n             {\"tr\", [],\n              [\n                {\"td\", _, [\"06/2016\"]},\n                {\"td\", _, [_]},\n                {\"td\", _, [{\"span\", _, [{\"span\", [{\"class\", \"is-loading\"}], _}]}]}\n              ]},\n             {\"tr\", _,\n              [\n                {\"td\", _, [\"07/2016\"]},\n                {\"td\", _, [_]},\n                {\"td\", _, [{\"span\", _, [{\"span\", [{\"class\", \"is-loading\"}], []}]}]}\n              ]}\n           ] =\n             render_submit(view, :import, %{settings: %{timezone: \"America/Los_Angeles\"}})\n             |> Floki.parse_document!()\n             |> Floki.find(\"table tr\")\n\n    TestHelper.eventually(\n      fn ->\n        assert [\n                 {\"tr\", [],\n                  [\n                    {\"td\", _, [\"06/2016\"]},\n                    {\"td\", _, [_]},\n                    {\"td\", _,\n                     [\n                       {\"span\", _,\n                        [\n                          {\"span\", [{\"class\", \"icon has-text-success\"}],\n                           [{\"span\", [{\"class\", \"mdi mdi-check-bold\"}], _}]}\n                        ]}\n                     ]}\n                  ]},\n                 {\"tr\", [],\n                  [\n                    {\"td\", _, [\"07/2016\"]},\n                    {\"td\", _, [_]},\n                    {\"td\", _,\n                     [\n                       {\"span\", _,\n                        [\n                          {\"span\", [{\"class\", \"icon has-text-success\"}],\n                           [{\"span\", [{\"class\", \"mdi mdi-check-bold\"}], _}]}\n                        ]}\n                     ]}\n                  ]}\n               ] =\n                 render(view)\n                 |> Floki.parse_document!()\n                 |> Floki.find(\"table tr\")\n      end,\n      delay: 250,\n      attempts: 10\n    )\n  end\nend\n"
  },
  {
    "path": "test/teslamate_web/live/settings_test.exs",
    "content": "defmodule TeslaMateWeb.SettingsLiveTest do\n  use TeslaMateWeb.ConnCase\n\n  alias TeslaMate.{Settings, Locations, Repo}\n\n  import TestHelper, only: [decimal: 1]\n\n  describe \"units\" do\n    test \"unit of length: shows 'km' by default\", %{conn: conn} do\n      assert {:ok, view, html} = live(conn, \"/settings\")\n\n      assert [\n               {\"select\", _,\n                [\n                  {\"option\", [{\"selected\", \"selected\"}, {\"value\", \"km\"}], [\"km\"]},\n                  {\"option\", [{\"value\", \"mi\"}], [\"mi\"]}\n                ]}\n             ] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#global_settings_unit_of_length\")\n\n      assert [\n               {\"select\", _,\n                [\n                  {\"option\", [{\"value\", \"km\"}], [\"km\"]},\n                  {\"option\", [{\"selected\", \"selected\"}, {\"value\", \"mi\"}], [\"mi\"]}\n                ]}\n             ] =\n               render_change(view, :change, %{global_settings: %{unit_of_length: :mi}})\n               |> Floki.parse_document!()\n               |> Floki.find(\"#global_settings_unit_of_length\")\n\n      assert settings = Settings.get_global_settings!()\n      assert settings.unit_of_length == :mi\n    end\n\n    test \"unit of temperature: shows '°C' by default\", %{conn: conn} do\n      assert {:ok, view, html} = live(conn, \"/settings\")\n\n      assert [\n               {\"select\", _,\n                [\n                  {\"option\", [{\"selected\", \"selected\"}, {\"value\", \"C\"}], [\"°C\"]},\n                  {\"option\", [{\"value\", \"F\"}], [\"°F\"]}\n                ]}\n             ] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#global_settings_unit_of_temperature\")\n\n      assert [\n               {\"select\", _,\n                [\n                  {\"option\", [{\"value\", \"C\"}], [\"°C\"]},\n                  {\"option\", [{\"selected\", \"selected\"}, {\"value\", \"F\"}], [\"°F\"]}\n                ]}\n             ] =\n               render_change(view, :change, %{global_settings: %{unit_of_temperature: :F}})\n               |> Floki.parse_document!()\n               |> Floki.find(\"#global_settings_unit_of_temperature\")\n\n      assert settings = Settings.get_global_settings!()\n      assert settings.unit_of_temperature == :F\n    end\n\n    test \"unit of pressure: shows 'bar' by default\", %{conn: conn} do\n      assert {:ok, view, html} = live(conn, \"/settings\")\n\n      assert [\n               {\"select\", _,\n                [\n                  {\"option\", [{\"selected\", \"selected\"}, {\"value\", \"bar\"}], [\"bar\"]},\n                  {\"option\", [{\"value\", \"psi\"}], [\"psi\"]}\n                ]}\n             ] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#global_settings_unit_of_pressure\")\n\n      assert [\n               {\"select\", _,\n                [\n                  {\"option\", [{\"value\", \"bar\"}], [\"bar\"]},\n                  {\"option\", [{\"selected\", \"selected\"}, {\"value\", \"psi\"}], [\"psi\"]}\n                ]}\n             ] =\n               render_change(view, :change, %{global_settings: %{unit_of_pressure: :psi}})\n               |> Floki.parse_document!()\n               |> Floki.find(\"#global_settings_unit_of_pressure\")\n\n      assert settings = Settings.get_global_settings!()\n      assert settings.unit_of_pressure == :psi\n    end\n  end\n\n  describe \"global settings\" do\n    test \"shows :rated by default\", %{conn: conn} do\n      assert {:ok, _view, html} = live(conn, \"/settings\")\n\n      assert [\n               {\"select\", _,\n                [\n                  {\"option\", [{\"value\", \"ideal\"}], [\"ideal\"]},\n                  {\"option\", [{\"selected\", \"selected\"}, {\"value\", \"rated\"}], [\"rated\"]}\n                ]}\n             ] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#global_settings_preferred_range\")\n    end\n\n    test \"changes base_url\", %{conn: conn} do\n      assert {:ok, view, _html} = live(conn, \"/settings\")\n\n      assert render_change(view, :change, %{global_settings: %{base_url: nil}})\n             |> Floki.parse_document!()\n             |> Floki.find(\"#global_settings_base_url\")\n             |> Floki.attribute(\"value\") == []\n\n      assert Settings.get_global_settings!().base_url == nil\n\n      assert render_change(view, :change, %{\n               global_settings: %{base_url: \" https://example.com/  \"}\n             })\n             |> Floki.parse_document!()\n             |> Floki.find(\"#global_settings_base_url\")\n             |> Floki.attribute(\"value\") == [\"https://example.com\"]\n\n      assert Settings.get_global_settings!().base_url == \"https://example.com\"\n    end\n\n    test \"changes grafana_url\", %{conn: conn} do\n      assert {:ok, view, _html} = live(conn, \"/settings\")\n\n      assert render_change(view, :change, %{global_settings: %{grafana_url: nil}})\n             |> Floki.parse_document!()\n             |> Floki.find(\"#global_settings_grafana_url\")\n             |> Floki.attribute(\"value\") == []\n\n      assert Settings.get_global_settings!().grafana_url == nil\n\n      assert render_change(view, :change, %{\n               global_settings: %{grafana_url: \" https://example.com/  \"}\n             })\n             |> Floki.parse_document!()\n             |> Floki.find(\"#global_settings_grafana_url\")\n             |> Floki.attribute(\"value\") == [\"https://example.com\"]\n\n      assert Settings.get_global_settings!().grafana_url == \"https://example.com\"\n    end\n  end\n\n  describe \"language\" do\n    alias Locations.Address\n\n    test \"changes language\", %{conn: conn} do\n      {:ok, %Address{id: address_id}} =\n        Locations.create_address(%{\n          display_name: \"foo\",\n          name: \"bar\",\n          latitude: 0,\n          longitude: 0,\n          osm_id: 0,\n          osm_type: \"way\",\n          raw: %{}\n        })\n\n      assert {:ok, view, html} = live(conn, \"/settings\")\n\n      assert [{\"option\", [{\"selected\", \"selected\"}, {\"value\", \"en\"}], [\"English\"]}] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#global_settings_language option[selected]\")\n\n      render_change(view, :change, %{global_settings: %{language: \"de\"}})\n\n      TestHelper.eventually(fn ->\n        assert [{\"option\", [{\"selected\", \"selected\"}, {\"value\", \"de\"}], [\"German\"]}] =\n                 render(view)\n                 |> Floki.parse_document!()\n                 |> Floki.find(\"#global_settings_language option[selected]\")\n\n        assert %Address{country: \"de\"} = Repo.get(Address, address_id)\n      end)\n    end\n\n    @tag :capture_log\n    test \"shows error\", %{conn: conn} do\n      {:ok, %Address{id: address_id}} =\n        Locations.create_address(%{\n          display_name: \"error\",\n          name: \"bar\",\n          latitude: 0,\n          longitude: 0,\n          osm_id: 0,\n          osm_type: \"way\",\n          raw: %{}\n        })\n\n      assert {:ok, view, html} = live(conn, \"/settings\")\n\n      assert [{\"option\", [{\"selected\", \"selected\"}, {\"value\", \"en\"}], [\"English\"]}] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#global_settings_language option[selected]\")\n\n      render_change(view, :change, %{global_settings: %{language: \"de\"}})\n\n      TestHelper.eventually(fn ->\n        html = render(view)\n\n        assert \"There was a problem retrieving data from OpenStreetMap. Please try again later.\" =\n                 html\n                 |> Floki.parse_document!()\n                 |> Floki.find(\"form .field-body\")\n                 |> Floki.find(\"p.help\")\n                 |> Floki.text()\n\n        assert [{\"option\", [{\"selected\", \"selected\"}, {\"value\", \"en\"}], [\"English\"]}] =\n                 html\n                 |> Floki.parse_document!()\n                 |> Floki.find(\"#global_settings_language option[selected]\")\n\n        assert %Address{\n                 display_name: \"error\",\n                 name: \"bar\",\n                 latitude: decimal(\"0.000000\"),\n                 longitude: decimal(\"0.000000\"),\n                 osm_id: 0,\n                 osm_type: \"way\",\n                 raw: %{}\n               } = Repo.get(Address, address_id)\n      end)\n    end\n\n    test \"adds a query param when changing the UI language\", %{conn: conn} do\n      assert {:ok, view, html} = live(conn, \"/settings\")\n\n      assert [{\"option\", [{\"selected\", \"selected\"}, {\"value\", \"en\"}], [\"English\"]}] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#global_settings_ui option[selected]\")\n\n      render_change(view, :change, %{global_settings: %{ui: \"de\"}})\n      assert_redirect(view, path = \"/settings?locale=de\")\n\n      assert {:ok, _view, html} = live(conn, path)\n\n      assert [{\"option\", [{\"selected\", \"selected\"}, {\"value\", \"de\"}], [\"German\"]}] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#global_settings_ui option[selected]\")\n    end\n  end\n\n  describe \"car settings\" do\n    alias TeslaMate.{Log, Settings}\n\n    defp car_fixture(attrs) do\n      attrs =\n        Enum.into(attrs, %{\n          efficiency: 0.153,\n          eid: 42,\n          model: \"S\",\n          vid: 42,\n          name: \"foo\",\n          trim_badging: \"P100D\",\n          vin: \"12345F\",\n          settings: %{}\n        })\n\n      {:ok, car} = Log.create_car(attrs)\n\n      {:ok, _} =\n        car\n        |> Settings.get_car_settings!()\n        |> Settings.update_car_settings(attrs.settings)\n\n      car\n    end\n\n    test \"hides most of the sleep mode settings if streaming is enabled\", %{conn: conn} do\n      car = car_fixture(settings: %{use_streaming_api: true})\n\n      assert {:ok, _view, html} = live(conn, \"/settings\")\n      html = Floki.parse_document!(html)\n\n      assert [] = Floki.find(html, \"#car_settings_#{car.id}_suspend_min\")\n      assert [] = Floki.find(html, \"#car_settings_#{car.id}_suspend_after_idle_min\")\n\n      assert [] =\n               html\n               |> Floki.find(\"#car_settings_#{car.id}_req_not_unlocked\")\n               |> Floki.attribute(\"checked\")\n    end\n\n    test \"shows 21 and 15 minutes by default if streaming is disabled\", %{conn: conn} do\n      car = car_fixture(settings: %{use_streaming_api: false})\n\n      assert {:ok, _view, html} = live(conn, \"/settings\")\n      html = Floki.parse_document!(html)\n\n      assert [\n               {\"option\", [{\"value\", \"12\"}], [\"12 min\"]},\n               {\"option\", [{\"value\", \"15\"}], [\"15 min\"]},\n               {\"option\", [{\"value\", \"18\"}], [\"18 min\"]},\n               {\"option\", [{\"selected\", \"selected\"}, {\"value\", \"21\"}], [\"21 min\"]},\n               {\"option\", [{\"value\", \"24\"}], [\"24 min\"]},\n               {\"option\", [{\"value\", \"27\"}], [\"27 min\"]},\n               {\"option\", [{\"value\", \"30\"}], [\"30 min\"]},\n               {\"option\", [{\"value\", \"35\"}], [\"35 min\"]},\n               {\"option\", [{\"value\", \"40\"}], [\"40 min\"]},\n               {\"option\", [{\"value\", \"45\"}], [\"45 min\"]},\n               {\"option\", [{\"value\", \"50\"}], [\"50 min\"]},\n               {\"option\", [{\"value\", \"55\"}], [\"55 min\"]},\n               {\"option\", [{\"value\", \"60\"}], [\"60 min\"]},\n               {\"option\", [{\"value\", \"65\"}], [\"65 min\"]},\n               {\"option\", [{\"value\", \"70\"}], [\"70 min\"]},\n               {\"option\", [{\"value\", \"75\"}], [\"75 min\"]},\n               {\"option\", [{\"value\", \"80\"}], [\"80 min\"]},\n               {\"option\", [{\"value\", \"85\"}], [\"85 min\"]},\n               {\"option\", [{\"value\", \"90\"}], [\"90 min\"]}\n             ] = Floki.find(html, \"#car_settings_#{car.id}_suspend_min option\")\n\n      assert [\n               {\"option\", [{\"value\", \"3\"}], [\"3 min\"]},\n               {\"option\", [{\"value\", \"5\"}], [\"5 min\"]},\n               {\"option\", [{\"value\", \"10\"}], [\"10 min\"]},\n               {\"option\", [{\"selected\", \"selected\"}, {\"value\", \"15\"}], [\"15 min\"]},\n               {\"option\", [{\"value\", \"20\"}], [\"20 min\"]},\n               {\"option\", [{\"value\", \"25\"}], [\"25 min\"]},\n               {\"option\", [{\"value\", \"30\"}], [\"30 min\"]},\n               {\"option\", [{\"value\", \"35\"}], [\"35 min\"]},\n               {\"option\", [{\"value\", \"40\"}], [\"40 min\"]},\n               {\"option\", [{\"value\", \"45\"}], [\"45 min\"]},\n               {\"option\", [{\"value\", \"50\"}], [\"50 min\"]},\n               {\"option\", [{\"value\", \"55\"}], [\"55 min\"]},\n               {\"option\", [{\"value\", \"60\"}], [\"60 min\"]}\n             ] = Floki.find(html, \"#car_settings_#{car.id}_suspend_after_idle_min option\")\n    end\n\n    test \"By default, the vehicle must be locked to fall asleep\", %{conn: conn} do\n      car = car_fixture(settings: %{req_not_unlocked: true})\n\n      assert {:ok, _view, html} = live(conn, \"/settings\")\n      html = Floki.parse_document!(html)\n\n      assert [\"checked\"] =\n               html\n               |> Floki.find(\"#car_settings_#{car.id}_req_not_unlocked\")\n               |> Floki.attribute(\"checked\")\n    end\n\n    test \"reacts to change events\", %{conn: conn} do\n      car =\n        car_fixture(\n          settings: %{\n            suspend_min: 21,\n            suspend_after_idle_min: 15,\n            req_not_unlocked: true,\n            free_supercharging: false,\n            use_streaming_api: false\n          }\n        )\n\n      assert {:ok, view, _html} = live(conn, \"/settings\")\n\n      assert [{\"option\", [{\"selected\", \"selected\"}, {\"value\", \"90\"}], [\"90 min\"]}] =\n               render_change(view, :change, %{\n                 \"car_settings_#{car.id}\" => %{suspend_min: 90, use_streaming_api: false}\n               })\n               |> Floki.parse_document!()\n               |> Floki.find(\"#car_settings_#{car.id}_suspend_min option[selected]\")\n\n      assert [settings] = Settings.get_car_settings()\n      assert settings.suspend_min == 90\n\n      assert [{\"option\", [{\"selected\", \"selected\"}, {\"value\", \"30\"}], [\"30 min\"]}] =\n               render_change(view, :change, %{\n                 \"car_settings_#{car.id}\" => %{\n                   suspend_after_idle_min: 30,\n                   use_streaming_api: false\n                 }\n               })\n               |> Floki.parse_document!()\n               |> Floki.find(\"#car_settings_#{car.id}_suspend_after_idle_min option[selected]\")\n\n      assert [settings] = Settings.get_car_settings()\n      assert settings.suspend_after_idle_min == 30\n\n      html =\n        render_change(view, :change, %{\"car_settings_#{car.id}\" => %{req_not_unlocked: false}})\n        |> Floki.parse_document!()\n\n      assert [] =\n               html\n               |> Floki.find(\"#car_settings_#{car.id}_req_not_unlocked\")\n               |> Floki.attribute(\"checked\")\n\n      assert [settings] = Settings.get_car_settings()\n      assert settings.req_not_unlocked == false\n\n      ## Charge cost\n\n      assert [] ==\n               html\n               |> Floki.find(\"#car_settings_#{car.id}_free_supercharging\")\n               |> Floki.attribute(\"checked\")\n\n      html =\n        render_change(view, :change, %{\"car_settings_#{car.id}\" => %{free_supercharging: true}})\n        |> Floki.parse_document!()\n\n      assert [\"checked\"] ==\n               html\n               |> Floki.find(\"#car_settings_#{car.id}_free_supercharging\")\n               |> Floki.attribute(\"checked\")\n\n      assert [settings] = Settings.get_car_settings()\n      assert settings.free_supercharging == true\n\n      ## Streaming API\n\n      assert [] ==\n               html\n               |> Floki.find(\"#car_settings_#{car.id}_use_streaming_api\")\n               |> Floki.attribute(\"checked\")\n\n      assert [\"checked\"] ==\n               render_change(view, :change, %{\n                 \"car_settings_#{car.id}\" => %{use_streaming_api: true}\n               })\n               |> Floki.parse_document!()\n               |> Floki.find(\"#car_settings_#{car.id}_use_streaming_api\")\n               |> Floki.attribute(\"checked\")\n\n      assert [settings] = Settings.get_car_settings()\n      assert settings.use_streaming_api == true\n    end\n\n    test \"changes between cars\", %{conn: conn} do\n      one = car_fixture(id: 10001, name: \"one\", eid: 10001, vid: 1001, vin: \"10001\")\n      two = car_fixture(id: 10002, name: \"two\", eid: 10002, vid: 1002, vin: \"10002\")\n\n      assert {:ok, view, html} = live(conn, \"/settings\")\n\n      assert one.name ==\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".tabs .is-active\")\n               |> Floki.text()\n\n      # change settings of car \"one\"\n\n      assert [{\"option\", [{\"selected\", \"selected\"}, {\"value\", \"90\"}], [\"90 min\"]}] =\n               render_change(view, :change, %{\n                 \"car_settings_#{one.id}\" => %{suspend_min: 90, use_streaming_api: false}\n               })\n               |> Floki.parse_document!()\n               |> Floki.find(\"#car_settings_#{one.id}_suspend_min option[selected]\")\n\n      assert [settings, _] = Settings.get_car_settings()\n      assert settings.suspend_min == 90\n\n      # change car\n      view\n      |> element(\".tabs li a\", two.name)\n      |> render_click()\n\n      assert_redirect(view, path = \"/settings?car=#{two.id}\")\n      assert {:ok, view, html} = live(conn, path)\n\n      assert two.name ==\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".tabs .is-active\")\n               |> Floki.text()\n\n      assert [] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#car_settings_#{one.id}_suspend_min option[selected]\")\n\n      # change settings of car \"two\"\n\n      assert [{\"option\", [{\"selected\", \"selected\"}, {\"value\", \"60\"}], [\"60 min\"]}] =\n               render_change(view, :change, %{\n                 \"car_settings_#{two.id}\" => %{suspend_min: 60, use_streaming_api: false}\n               })\n               |> Floki.parse_document!()\n               |> Floki.find(\"#car_settings_#{two.id}_suspend_min option[selected]\")\n\n      # change back\n\n      view\n      |> element(\".tabs li a\", one.name)\n      |> render_click()\n\n      assert_redirect(view, path = \"/settings?car=#{one.id}\")\n      assert {:ok, _view, html} = live(conn, path)\n\n      assert one.name ==\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\".tabs .is-active\")\n               |> Floki.text()\n\n      assert [{\"option\", [{\"selected\", \"selected\"}, {\"value\", \"90\"}], [\"90 min\"]}] =\n               html\n               |> Floki.parse_document!()\n               |> Floki.find(\"#car_settings_#{one.id}_suspend_min option[selected]\")\n    end\n  end\n\n  describe \"updates\" do\n    alias TeslaMate.Updater\n\n    import Mock\n\n    def github_mock do\n      release = %{\"tag_name\" => \"v1.1.3\", \"prerelease\" => false, \"draft\" => false}\n      resp = %Tesla.Env{status: 200, body: release}\n      {Tesla.Adapter.Finch, [], call: fn _, _ -> {:ok, resp} end}\n    end\n\n    test \"informs if an update is available\", %{conn: conn} do\n      with_mocks [github_mock()] do\n        _pid = start_supervised!({Updater, version: \"1.0.0\", check_after: 0})\n\n        Process.sleep(1000)\n\n        assert {:ok, _view, html} = live(conn, \"/settings\")\n        html = Floki.parse_document!(html)\n\n        assert \"#{Application.spec(:teslamate, :vsn)} (Update available: 1.1.3)\" ==\n                 html\n                 |> Floki.find(\".about tr:first-child td\")\n                 |> Floki.text()\n                 |> String.trim()\n\n        assert [\n                 {\"a\",\n                  [_, {\"href\", \"https://github.com/teslamate-org/teslamate/releases\"}, _, _, _],\n                  [_, {_, _, [\"Update available: 1.1.3\"]}]}\n               ] = Floki.find(html, \".footer a\")\n      end\n    end\n  end\n\n  describe \"sign-out\" do\n    import Mock\n\n    test \"tba\", %{conn: conn} do\n      with_mocks [{TeslaMate.Api, [], signed_in?: fn -> true end, sign_out: fn -> :ok end}] do\n        assert {:ok, view, _html} = live(conn, \"/settings\")\n\n        view\n        |> element(\"button\", \"Sign out\")\n        |> render_click()\n\n        assert_redirect(view, \"/\")\n\n        assert_called(TeslaMate.Api.sign_out())\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "test/teslamate_web/live/sign_in_test.exs",
    "content": "defmodule TeslaMateWeb.SignInLiveTest do\n  use TeslaMateWeb.ConnCase\n\n  defp start_api(name) do\n    api_name = :\"api_#{name}\"\n\n    {:ok, _pid} = start_supervised({ApiMock, name: api_name, pid: self()})\n\n    %{api: {ApiMock, api_name}}\n  end\n\n  setup %{test: name, conn: conn} do\n    params = start_api(name)\n    conn = put_connect_params(conn, params)\n    [conn: conn]\n  end\n\n  test \"signs in with api tokens\", %{conn: conn} do\n    assert {:ok, view, _html} = live(conn, \"/sign_in\")\n\n    render_change(view, :validate, %{tokens: %{access: \"$access\", refresh: \"$refresh\"}})\n    render_submit(view, :sign_in, %{})\n\n    assert_receive {ApiMock,\n                    {:sign_in, %TeslaMate.Auth.Tokens{access: \"$access\", refresh: \"$refresh\"}}}\n\n    assert_redirect(view, \"/\", 1000)\n  end\nend\n"
  },
  {
    "path": "test/teslamate_web/views/error_view_test.exs",
    "content": "defmodule TeslaMateWeb.ErrorViewTest do\n  use TeslaMateWeb.ConnCase, async: true\n\n  # Bring render/3 and render_to_string/3 for testing custom views\n  import Phoenix.View\n\n  test \"renders 404.html\" do\n    assert render_to_string(TeslaMateWeb.ErrorView, \"404.html\", []) == \"Not Found\"\n  end\n\n  test \"renders 500.html\" do\n    assert render_to_string(TeslaMateWeb.ErrorView, \"500.html\", []) == \"Internal Server Error\"\n  end\nend\n"
  },
  {
    "path": "test/teslamate_web/views/layout_view_test.exs",
    "content": "defmodule TeslaMateWeb.LayoutViewTest do\n  use TeslaMateWeb.ConnCase, async: true\nend\n"
  },
  {
    "path": "test/teslamate_web/views/page_view_test.exs",
    "content": "defmodule TeslaMateWeb.PageViewTest do\n  use TeslaMateWeb.ConnCase, async: true\nend\n"
  },
  {
    "path": "test/test_helper.exs",
    "content": "# FIXME Workaround to apply the logger config when running the tests with\n# \"--no-start\". This looks like a bug in Elixir v1.11.0\nApplication.stop(:logger)\nApplication.start(:logger)\n\nApplication.load(:teslamate)\n\nfor app <- Application.spec(:teslamate, :applications) do\n  {:ok, _} = Application.ensure_all_started(app)\nend\n\nTeslaMate.Repo.start_link()\nPhoenix.PubSub.Supervisor.start_link(name: TeslaMate.PubSub)\n\nassert_timeout = String.to_integer(System.get_env(\"ELIXIR_ASSERT_TIMEOUT\") || \"300\")\nExUnit.start(assert_receive_timeout: assert_timeout)\n"
  },
  {
    "path": "treefmt.toml",
    "content": "# One CLI to format the code tree - https://git.numtide.com/numtide/treefmt\n\n[global]\nexcludes = [\n    \"*.gitignore\",\n    \"*.dockerignore\",\n    \".envrc\",\n    \"*.node-version\",\n    \"CONTRIBUTING\",\n    \"Dockerfile\",\n    \"grafana/Dockerfile\",\n    \"Makefile\",\n    \"VERSION\",\n    \"LICENSE\",\n    \"*.metadata\",\n    \"*.manifest\",\n    \"*.webmanifest\",\n    \"*.dat\",\n    \"*.lock\",\n    \"*.txt\",\n    \"*.csv\",\n    \"*.ico\",\n    \"*.png\",\n    \"*.svg\",\n    \"*.properties\",\n    \"*.xml\",\n    \"*.po\",\n    \"*.pot\",\n    \"*.json.example\",\n    \"*.typos.toml\",\n    \"treefmt.toml\",\n    \"grafana/dashboards/*.json\", #we use the grafana export style\n    ]\n\n[formatter.mix-format]\ncommand = \"mix\"\nexcludes = []\nincludes = [\"*.ex\", \"*.exs\" ,\"*.{heex,eex}\"]\noptions = [\"format\"]\n\n# run shellcheck first\n[formatter.shellcheck]\ncommand = \"shellcheck\"\nincludes = [\"*.sh\"]\npriority = 0    # default is 0, but we set it here for clarity\n\n# shfmt second\n[formatter.shfmt]\ncommand = \"shfmt\"\noptions = [\"-s\", \"-w\"]\nincludes = [\"*.sh\"]\npriority = 1\n\n[formatter.prettier]\ncommand = \"prettier\"\nexcludes = []\nincludes = [\"*.cjs\", \"*.css\", \"*.html\", \"*.js\", \"*.json\", \"*.json5\", \"*.jsx\", \"*.md\", \"*.mdx\", \"*.mjs\", \"*.scss\", \"*.ts\", \"*.tsx\", \"*.vue\", \"*.yaml\", \"*.yml\"]\noptions = [\"--write\"]\n\n[formatter.nixfmt]\ncommand = \"nixfmt\"\nexcludes = []\nincludes = [\"*.nix\"]\noptions = []"
  },
  {
    "path": "website/.gitignore",
    "content": "# Dependencies\n/node_modules\n\n# Production\n/build\n\n# Generated files\n.docusaurus\n.cache-loader\n\n# Misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "website/README.md",
    "content": "# Website\n\nThis website is built using [Docusaurus 2](https://v2.docusaurus.io/), a modern static website generator and automatically deployed to [docs.teslamate.org](https://docs.teslamate.org).\n\n## Installation\n\n```console\nnpm i\n```\n\n### Local Development\n\n```console\nnpm start\n```\n\nThis command starts a local development server and open up a browser window. Most changes are reflected live without having to restart the server.\n\n### Build\n\n```console\nnpm run build\n```\n\nThis command generates static content into the `build` directory and can be served using any static contents hosting service.\n\n### Deployment\n\n```console\nGIT_USER=<Your GitHub username> USE_SSH=true npm run deploy\n```\n\nIf you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.\n"
  },
  {
    "path": "website/docs/advanced_guides/apache.md",
    "content": "---\ntitle: Advanced install with Apache2, TLS, HTTP Basic Auth\n---\n\nIn case you wish to make TeslaMate publicly available on the Internet, it is strongly recommended to secure the web interface and allow access to Grafana only with a password. This guide provides **an example** _[docker-compose.yml](#docker-composeyml)_ which differs from the simple installation in the following aspects:\n\n- Both publicly accessible services, TeslaMate and Grafana, sit behind a reverse proxy (Apache2) which terminates HTTPS traffic\n- Ports 3000 (Grafana) and 4000 (TeslaMate) are only exposed locally\n- The TeslaMate service is protected by HTTP Basic Authentication\n- Custom configuration was moved into a separate `.env` file\n- Grafana is configured to require a login\n\n## Requirements\n\n- An already installed Apache2 with the following modules:\n  - `mod_proxy`\n  - `mod_proxy_http`\n  - `mod_proxy_wstunnel`\n  - `mod_rewrite`\n  - `mod_ssl`\n- Two FQDN, for example `teslamate.example.com` and `grafana.example.com`\n- An existing SSL certificate including the two above in `/etc/letsencrypt/live/teslamate.<your domain>`\n\n## Instructions\n\nCreate the following files:\n\n### docker-compose.yml\n\n```yml title=\"docker-compose.yml\"\nservices:\n  teslamate:\n    image: teslamate/teslamate:latest\n    restart: always\n    environment:\n      - ENCRYPTION_KEY=${TM_ENCRYPTION_KEY}\n      - DATABASE_USER=${TM_DB_USER}\n      - DATABASE_PASS=${TM_DB_PASS}\n      - DATABASE_NAME=${TM_DB_NAME}\n      - DATABASE_HOST=database\n      - MQTT_HOST=mosquitto\n      - VIRTUAL_HOST=${FQDN_TM}\n      - CHECK_ORIGIN=true\n      - TZ=${TM_TZ}\n    volumes:\n      - ./import:/opt/app/import\n    ports:\n      - 127.0.0.1:4000:4000\n    cap_drop:\n      - all\n\n  database:\n    image: postgres:18-trixie\n    restart: always\n    environment:\n      - POSTGRES_USER=${TM_DB_USER}\n      - POSTGRES_PASSWORD=${TM_DB_PASS}\n      - POSTGRES_DB=${TM_DB_NAME}\n    volumes:\n      - teslamate-db:/var/lib/postgresql\n\n  grafana:\n    image: teslamate/grafana:latest\n    restart: always\n    environment:\n      - DATABASE_USER=${TM_DB_USER}\n      - DATABASE_PASS=${TM_DB_PASS}\n      - DATABASE_NAME=${TM_DB_NAME}\n      - DATABASE_HOST=database\n      - GRAFANA_PASSWD=${GRAFANA_PW}\n      - GF_SECURITY_ADMIN_USER=${GRAFANA_USER}\n      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PW}\n      - GF_AUTH_BASIC_ENABLED=true\n      - GF_AUTH_ANONYMOUS_ENABLED=false\n      - GF_SERVER_ROOT_URL=https://${FQDN_GRAFANA}\n    ports:\n      - 127.0.0.1:3000:3000\n    volumes:\n      - teslamate-grafana-data:/var/lib/grafana\n\n  mosquitto:\n    image: eclipse-mosquitto:2\n    restart: always\n    command: mosquitto -c /mosquitto-no-auth.conf\n    ports:\n      - 127.0.0.1:1883:1883\n    volumes:\n      - mosquitto-conf:/mosquitto/config\n      - mosquitto-data:/mosquitto/data\n\nvolumes:\n  teslamate-db:\n  teslamate-grafana-data:\n  mosquitto-conf:\n  mosquitto-data:\n```\n\n### .env\n\nThis file should reside in the same folder as the docker-compose.yml file.\n\n```plaintext title=\".env\"\nTM_ENCRYPTION_KEY= #your secure key to encrypt your Tesla API tokens\nTM_DB_USER=teslamate\nTM_DB_PASS= #your secure password!\nTM_DB_NAME=teslamate\n\nGRAFANA_USER=admin\nGRAFANA_PW=admin\n\nFQDN_GRAFANA=grafana.example.com\nFQDN_TM=teslamate.example.com\n\nTM_TZ=Europe/Berlin\n\nLETSENCRYPT_EMAIL=yourperson@example.com\n```\n\n### teslamate.conf\n\nThis file contains the definition of the virtual hosts `teslamate.example.com` and `grafana.example.com`. It has to be enabled via `a2ensite teslamate`.\n\nThis assumes, that you have the SSL certificate files residing in `/etc/letsencrypt/live/teslamate.example.com`. If it is somewhere else, you need to adapt the file accordingly.\n\n```apacheconf title=\"/etc/apache2/sites-available/teslamate.conf\"\nDefine MYDOMAIN example.com\nDefine LOG access.teslamate.log\n\n<VirtualHost *:80>\n    ProxyPreserveHost On\n    ServerName teslamate.${MYDOMAIN}\n    CustomLog /var/log/apache2/${LOG} combined\n    RewriteEngine on\n    RewriteCond %{SERVER_NAME} =teslamate.${MYDOMAIN}\n    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]\n</VirtualHost>\n\n<VirtualHost *:80>\n    ProxyPreserveHost On\n    ServerName grafana.${MYDOMAIN}\n    CustomLog /var/log/apache2/${LOG} combined\n    RewriteEngine on\n    RewriteCond %{SERVER_NAME} =grafana.${MYDOMAIN}\n    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]\n</VirtualHost>\n\n<IfModule mod_ssl.c>\n    <VirtualHost *:443>\n        ProxyPreserveHost On\n        ServerName teslamate.${MYDOMAIN}\n        ProxyPass /live/websocket ws://127.0.0.1:4000/live/websocket\n        ProxyPassReverse /live/websocket ws://127.0.0.1:4000/live/websocket\n        ProxyPass / http://127.0.0.1:4000/\n        ProxyPassReverse / http://127.0.0.1:4000/\n        CustomLog /var/log/apache2/${LOG} combined\n        <Proxy *>\n            Authtype Basic\n            Authname \"Password Required\"\n            AuthUserFile /etc/apache2/.htpasswd\n            <RequireAny>\n                <RequireAll>\n                    Require expr %{REQUEST_URI} =~ m#^/live/websocket.*#\n                </RequireAll>\n                Require valid-user\n            </RequireAny>\n        </Proxy>\n        SSLCertificateFile /etc/letsencrypt/live/teslamate.${MYDOMAIN}/fullchain.pem\n        SSLCertificateKeyFile /etc/letsencrypt/live/teslamate.${MYDOMAIN}/privkey.pem\n        Include /etc/letsencrypt/options-ssl-apache.conf\n    </VirtualHost>\n</IfModule>\n\n<IfModule mod_ssl.c>\n    <VirtualHost *:443>\n        ProxyPreserveHost On\n        ServerName grafana.${MYDOMAIN}\n        ProxyPass / http://127.0.0.1:3000/\n        ProxyPassReverse / http://127.0.0.1:3000/\n        CustomLog /var/log/apache2/${LOG} combined\n        SSLCertificateFile /etc/letsencrypt/live/grafana.${MYDOMAIN}/fullchain.pem\n        SSLCertificateKeyFile /etc/letsencrypt/live/grafana.${MYDOMAIN}/privkey.pem\n        Include /etc/letsencrypt/options-ssl-apache.conf\n    </VirtualHost>\n</IfModule>\n```\n\n### .htpasswd\n\nThis file contains a user and password for accessing TeslaMate (Basic-auth), note this is NOT your tesla.com password. You can generate it on the web if you don't have the [Apache tools](https://www.cyberciti.biz/faq/create-update-user-authentication-files/) installed (e.g. with [htaccesstools](http://www.htaccesstools.com/htpasswd-generator/)). Use BCrypt encryption mode.\n\n**Example:**\n\n```apacheconf title=\"/etc/apache2/.htpasswd\"\nteslamate:$2y$10$f7PB3UF3PNzqMIXZmf1dIefOkrv/15Xt6Xw3pzc6mkS/B5qoWBdAG\n```\n\n## Usage\n\nStart the stack with `docker compose up` run in the same directory, where the docker-compose.yml resides.\n\n1. Open the web interface [teslamate.example.com](https://teslamate.example.com)\n2. Sign in with your Tesla account\n3. The Grafana dashboards are available at [grafana.example.com](https://grafana.example.com).\n"
  },
  {
    "path": "website/docs/advanced_guides/traefik.md",
    "content": "---\ntitle: Advanced installation with Traefik, Let's Encrypt & HTTP Basic Auth\n---\n\nIn case you wish to make TeslaMate publicly available on the Internet, it is strongly recommended to secure the web interface and allow access to Grafana only with a password. This guide provides a _[docker-compose.yml](#docker-composeyml)_ which differs from the basic installation in the following aspects:\n\n- Both publicly accessible services, TeslaMate and Grafana, sit behind a reverse proxy (Traefik) which terminates HTTPS traffic\n- The TeslaMate service is protected by HTTP Basic Authentication\n- Custom configuration is held in a separate `.env` file\n- A Let's Encrypt certificate is automatically acquired by Traefik\n- Grafana is configured to require a login\n\n> Please note that this is only **an example** of how TeslaMate can be used in a more advanced scenario. Depending on your use case, you may need to make some adjustments, primarily to the traefik configuration. For more information, see the [traefik docs](https://docs.traefik.io/).\n\n## Requirements\n\n- One public FQDN, for example `teslamate.example.com` (substitute your domainname throughout the examples below)\n\n## Instructions\n\nCreate the following three files:\n\n### docker-compose.yml\n\n```yml title=\"docker-compose.yml\"\nservices:\n  teslamate:\n    image: teslamate/teslamate:latest\n    restart: always\n    depends_on:\n      - database\n    environment:\n      - ENCRYPTION_KEY=${TM_ENCRYPTION_KEY}\n      - DATABASE_USER=${TM_DB_USER}\n      - DATABASE_PASS=${TM_DB_PASS}\n      - DATABASE_NAME=${TM_DB_NAME}\n      - DATABASE_HOST=database\n      - MQTT_HOST=mosquitto\n      - VIRTUAL_HOST=${FQDN_TM}\n      - CHECK_ORIGIN=true\n      - TZ=${TM_TZ}\n    volumes:\n      - ./import:/opt/app/import\n    labels:\n      traefik.enable: \"true\"\n      traefik.http.services.teslamate.loadbalancer.server.port: \"4000\"\n      traefik.http.middlewares.redirect.redirectscheme.scheme: \"https\"\n      traefik.http.middlewares.teslamate-auth.basicauth.realm: \"teslamate\"\n      traefik.http.middlewares.teslamate-auth.basicauth.usersfile: \"/auth/.htpasswd\"\n      traefik.http.routers.teslamate-insecure.rule: \"Host(`${FQDN_TM}`)\"\n      traefik.http.routers.teslamate-insecure.middlewares: \"redirect\"\n      traefik.http.routers.teslamate.rule: \"Host(`${FQDN_TM}`)\"\n      traefik.http.routers.teslamate.middlewares: \"teslamate-auth\"\n      traefik.http.routers.teslamate.entrypoints: \"websecure\"\n      traefik.http.routers.teslamate.tls.certresolver: \"tmhttpchallenge\"\n    cap_drop:\n      - ALL\n\n  database:\n    image: postgres:18-trixie\n    restart: always\n    environment:\n      - POSTGRES_USER=${TM_DB_USER}\n      - POSTGRES_PASSWORD=${TM_DB_PASS}\n      - POSTGRES_DB=${TM_DB_NAME}\n    volumes:\n      - teslamate-db:/var/lib/postgresql\n\n  grafana:\n    image: teslamate/grafana:latest\n    restart: always\n    environment:\n      - DATABASE_USER=${TM_DB_USER}\n      - DATABASE_PASS=${TM_DB_PASS}\n      - DATABASE_NAME=${TM_DB_NAME}\n      - DATABASE_HOST=database\n      - GRAFANA_PASSWD=${GRAFANA_PW}\n      - GF_SECURITY_ADMIN_USER=${GRAFANA_USER}\n      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PW}\n      - GF_AUTH_ANONYMOUS_ENABLED=false\n      - GF_SERVER_DOMAIN=${FQDN_TM}\n      - GF_SERVER_ROOT_URL=https://%(domain)s/grafana\n      - GF_SERVER_SERVE_FROM_SUB_PATH=true\n\n    volumes:\n      - teslamate-grafana-data:/var/lib/grafana\n    labels:\n      traefik.enable: \"true\"\n      traefik.http.services.grafana.loadbalancer.server.port: \"3000\"\n      traefik.http.middlewares.redirect.redirectscheme.scheme: \"https\"\n      traefik.http.routers.grafana-insecure.rule: \"Host(`${FQDN_TM}`)\"\n      traefik.http.routers.grafana-insecure.middlewares: \"redirect\"\n      traefik.http.routers.grafana.rule: \"Host(`${FQDN_TM}`) && (Path(`/grafana`) || PathPrefix(`/grafana/`))\"\n      traefik.http.routers.grafana.entrypoints: \"websecure\"\n      traefik.http.routers.grafana.tls.certresolver: \"tmhttpchallenge\"\n\n  mosquitto:\n    image: eclipse-mosquitto:2\n    restart: always\n    command: mosquitto -c /mosquitto-no-auth.conf\n    ports:\n      - \"127.0.0.1:1883:1883\"\n    volumes:\n      - mosquitto-conf:/mosquitto/config\n      - mosquitto-data:/mosquitto/data\n\n  proxy:\n    image: traefik:v3.6\n    restart: always\n    command:\n      - \"--global.sendAnonymousUsage=false\"\n      - \"--providers.docker\"\n      - \"--providers.docker.exposedByDefault=false\"\n      - \"--entrypoints.web.address=:80\"\n      - \"--entrypoints.websecure.address=:443\"\n      - \"--entrypoints.websecure.http3.advertisedPort=443\"\n      - \"--certificatesresolvers.tmhttpchallenge.acme.httpchallenge=true\"\n      - \"--certificatesresolvers.tmhttpchallenge.acme.httpchallenge.entrypoint=web\"\n      - \"--certificatesresolvers.tmhttpchallenge.acme.email=${LETSENCRYPT_EMAIL}\"\n      - \"--certificatesresolvers.tmhttpchallenge.acme.storage=/etc/acme/acme.json\"\n    ports:\n      - \"80:80\"\n      - \"443:443/tcp\"\n      - \"443:443/udp\"\n    volumes:\n      - ./.htpasswd:/auth/.htpasswd\n      - ./acme/:/etc/acme/\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n\nvolumes:\n  teslamate-db:\n  teslamate-grafana-data:\n  mosquitto-conf:\n  mosquitto-data:\n```\n\n> If you are upgrading from the [simple Docker setup](../installation/docker.md) make sure that you are using the same Postgres version as before. To upgrade to a new version see [Upgrading PostgreSQL](../maintenance/upgrading_postgres.md).\n\n### .env\n\n```plaintext title=\".env\"\nTM_ENCRYPTION_KEY= #your secure key to encrypt your Tesla API tokens\nTM_DB_USER=teslamate\nTM_DB_PASS= #your secure password!\nTM_DB_NAME=teslamate\n\nGRAFANA_USER=admin\nGRAFANA_PW=admin\n\nFQDN_TM=teslamate.example.com\n\nTM_TZ=Europe/Berlin\n\nLETSENCRYPT_EMAIL=yourperson@example.com\n```\n\n> If you are upgrading from the [simple Docker setup](../installation/docker.md) make sure to use the same database and Grafana credentials as before.\n\n### .htpasswd\n\nThis file contains a user and password for accessing TeslaMate (Basic-auth); note that this is **not** your tesla.com password. You can generate it on the web if you don't have the [Apache tools](https://www.cyberciti.biz/faq/create-update-user-authentication-files/) installed (e.g. with [htaccesstools](http://www.htaccesstools.com/htpasswd-generator/)). Use BCrypt encryption mode.\n\n**Example:**\n\n```apacheconf title=\".htpasswd\"\nteslamate:$2y$10$f7PB3UF3PNzqMIXZmf1dIefOkrv/15Xt6Xw3pzc6mkS/B5qoWBdAG\n```\n\n## Usage\n\nStart the stack with `docker compose up -d`.\n\n1. Open the web interface `https://teslamate.example.com`\n2. Sign in with your Tesla account\n3. In the _Settings_ page, update the _URLs_ fields. Set _Web App_ to `https://teslamate.example.com` and _Dashboards_ to `https://teslamate.example.com/grafana`\n\n> If you have difficulty logging into your Grafana, e.g. you cannot login with the credentials from either the simple setup or the values stored in the .env file, reset the admin password with the following command:\n\n```bash\ndocker compose exec grafana grafana-cli admin reset-admin-password\n```\n"
  },
  {
    "path": "website/docs/advanced_guides/unix_domain_sockets.md",
    "content": "---\ntitle: Using Unix Domain Sockets with a reverse-proxy\n---\n\nIt is possible to configure TeslaMate to communicate over unix-domain sockets (UDS) instead of a typical network socket.\nThis can be useful to improve security by restricting which applications can communicate to the application. A typical configuration would be to use a UDS between a reverse-proxy (like Nginx) and TeslaMate.\nWhen paired with something like rootless-podman and [socket-activation](https://github.com/containers/podman/blob/main/docs/tutorials/socket_activation.md), Nginx can be configured with `--network=none` providing external access to TeslaMate without the Nginx container having any networking at all.\nWhile setting up socket-activation and Podman is beyond the scope of this document, it will explain how to configure UDS between TeslaMate and an Nginx reverse-proxy.\n\n## Requirements\n\n- Linux system configured with TeslaMate installed and working\n  - These instructions will document the procedure for using a UDS with docker-compose, but it is not difficult to adapt them to a system running TeslaMate natively via systemd.\n- Nginx configured as a reverse proxy\n\n## Instructions\n\nNginx requires that the UDS exist when it is started, but TeslaMate will (re)create the UDS on startup.\nThis means that TeslaMate must be configured to start before Nginx, or Nginx must be configured to detect a socket change and reload (for example the [socket-gen](https://github.com/PhracturedBlue/socket-gen) utility designed for this purpose). Additionally, because docker-compose does not provide a method to run host-commands prior to starting a container, the directory containing the UDS must be manually created before TeslaMate starts.\nIt is easiest to manually create this directory on a persistent volume.\n\n- Create a directory for the UDS:\n  `mkdir -p /opt/nginx_uds/teslamate`\n- Allow Nginx to access the directory:\n  `chown <nginx user> /opt/nginx_uds/teslamate`\n- Allow Teslamate to create the UDS:\n  `chgrp 10001 /opt/nginx_uds/teslamate`\n  `chmod 770 /opt/nginx_uds/teslamate`\n  An alternative to using owner/group access would be to use [ACLs](https://wiki.debian.org/Permissions#Access_Control_Lists_in_Linux) to control access to the UDS directory.\n\nNext configure TeslaMate to use the UDS. Modify the `teslamate` service in `docker-compose.yml` to include:\n\n```yml\nvolumes: ...\n  - /opt/nginx_uds/teslamate:/uds\nenvironment: ...\n  - HTTP_BINDING_ADDRESS=/uds/teslamate.sock\n  - SOCKET_PERM=666\n# ports:\n# - 4000:4000\n```\n\nLastly, configure the Nginx reverse-proxy to forward connections to the UDS. The relevant configuration would look something like:\n\n```configfile\nupstream teslamate.uds {\n    server unix:/opt/nginx_uds/teslamate/teslamate.sock;\n}\n\nserver {\n    server_name teslamate;\n    http2 on;\n    listen 80 ;\n    location / {\n        proxy_pass http://teslamate.uds;\n        set $upstream_keepalive false;\n    }\n}\n```\n"
  },
  {
    "path": "website/docs/configuration/api.md",
    "content": "---\ntitle: Using the Tesla Fleet API and Telemetry Streaming (only for business fleet users)\n---\n\n## Official Tesla APIs\n\n### Why Tesla Fleet and Telemetry only have drawbacks\n\nAs far as we know, using the Tesla Fleet API and Telemetry API as a user has only drawbacks. The only reason to use them is if you are a Tesla Business Fleet user and therefore the Owner API is no longer available for you.\n\n### When Tesla Fleet API and Telemetry API are needed\n\nBy default, TeslaMate uses the \"_unofficial_\" Owner API and streaming.\n\nTesla now provides official APIs: the Fleet API and the Telemetry API, which replace the Owner API and streaming respectively. But come with limitations and drawbacks.\n\n**Migration to the new API depends on your Tesla account type:**\n\n1. **_[Tesla Business Fleet users](https://www.tesla.com/fleet):_** the Owner API is [being shut down](https://developer.tesla.com/docs/fleet-api#2024-03-26-shutting-down-legacy-vehicle-api-endpoints). Fleet vehicles are upgraded gradually and an error message means that they must now use the official API.\n\n2. **_Individual users:_** the Owner API is currently still accessible.\n\n**Resume: if you are a Tesla Business Fleet user, you should migrate to the official API ASAP!** The official Tesla API will only become mandatory when the Owner API shuts down for all users. Until then you can and should continue to use the Owner API, as it is more feature-rich and has higher resolution streaming.\n\n### Impacts/Limitations of New Endpoints\n\n#### Tesla Fleet API: very limited recording resolution\n\nThe [Fleet API](https://developer.tesla.com/docs/fleet-api) is similar to the Owner API but more comprehensive. However, retrieving vehicle information (`vehicle_data`) or sending commands is limited. The limits on the Owner API were historically much higher. It is likely that [these limits](https://developer.tesla.com/docs/fleet-api#membership-levels) will also be applied soon to the API Owner.\n\n#### Tesla Fleet Telemetry: non compatible by default\n\nThe [Tesla Fleet Telemetry](https://github.com/teslamotors/fleet-telemetry) differs from the \"Owner\" streaming. By default, metrics are sent to message queues instead of a websocket as streaming did. Historical streaming could send events every second, whereas Fleet Telemetry will only send information every minute at the minimum.\n\n#### How to Use Tesla APIs\n\nThe setup to use the official Tesla APIs ([described below](#tesla-fleet-api)) is complex.\nYou can use a [third-party providers](#guide-for-third-party-providers) to easily access these APIs.\n\n## Guide for Third-Party Providers\n\nEnvironment variables allow changing the API and streaming endpoints.\nYou must use the `URL` and the `TOKEN` given by the third party API provider.\n\n### [MyTeslaMate](https://www.myteslamate.com) (free)\n\n#### MyTeslaMate Fleet API\n\n1. Log in the [MyTeslaMate](https://app.myteslamate.com) website **with your Tesla account** and go to the [MyTeslaMate Fleet](https://app.myteslamate.com/fleet) page to get your `TOKEN`.\n1. Add the following environment variables (using your `TOKEN` instead of _`xxxx-xxxx-xxxx-xxxx`_):\n\n```yml\n# API Fleet\n- TOKEN=?token=xxxx-xxxx-xxxx-xxxx\n- TESLA_API_HOST=https://api.myteslamate.com\n- TESLA_AUTH_HOST=https://api.myteslamate.com\n- TESLA_AUTH_PATH=/api/oauth2/v3\n```\n\n#### MyTeslaMate Streaming\n\nMyTeslaMate also provides streaming by [reproducing the old streaming from the data sent by Fleet Telemetry](https://github.com/MyTeslaMate/websocket).\n\n1. You need to \"_Pair your vehicle(s)_\" on the [fleet](https://app.myteslamate.com/fleet) page\n1. Use the following dedicated environment variables:\n\n   ```yml\n   - TESLA_WSS_HOST=wss://streaming.myteslamate.com\n   - TESLA_WSS_TLS_ACCEPT_INVALID_CERTS=true\n   - TESLA_WSS_USE_VIN=true\n   ```\n\n1. Restart your instance\n\n### [Teslemetry](https://teslemetry.com/pricing) (paid)\n\n#### Teslemetry Fleet API\n\n**_Important: Teslemetry's vehicle data polling is [pay-per-use](https://teslemetry.com/blog/road-away-from-polling)._**\n\n1. Log in the [Teslemetry website](https://teslemetry.com) and create your `TOKEN`.\n1. Use this `TOKEN` instead of _`xxxx-xxxx-xxxx-xxxx`_ and add the following environment variables:\n\n   ```yml\n   - TOKEN=?token=xxxx-xxxx-xxxx-xxxx\n   - TESLA_API_HOST=https://api.teslemetry.com\n   - TESLA_AUTH_HOST=https://api.teslemetry.com\n   - TESLA_AUTH_PATH=/api/oauth2/v3\n   ```\n\n1. Restart your instance\n\n#### Teslemetry Streaming\n\n**_Important: Teslemetry's streaming is incompatible with Teslamate, you MUST disable manually the streaming in Teslamate settings._**\n\n## Guide to using the official Tesla API directly (free)\n\n### Requirements\n\n- Advanced IT skills\n- A dedicated public hosting\n- A [free Tesla Fleet API plan](https://developer.tesla.com/docs/fleet-api#membership-levels)\n\n### Tesla Fleet API\n\n1. Set up a third-party account at [developer.tesla.com](https://developer.tesla.com) as described on the [Tesla docs](https://developer.tesla.com/docs/fleet-api#setup)\n1. Add the following environment variable with your own domain :\n   1. Use [the correct region](https://developer.tesla.com/docs/fleet-api#endpoints-and-regional-requirements) in the `TESLA_API_HOST` field:\n      - North America, Asia-Pacific (excluding China): [https://fleet-api.prd.na.vn.cloud.tesla.com](https://fleet-api.prd.na.vn.cloud.tesla.com)\n      - Europe, Middle East, Africa: [https://fleet-api.prd.eu.vn.cloud.tesla.com](https://fleet-api.prd.eu.vn.cloud.tesla.com)\n      - China: [https://fleet-api.prd.cn.vn.cloud.tesla.cn](https://fleet-api.prd.cn.vn.cloud.tesla.cn)\n   1. Update the `TESLA_AUTH_CLIENT_ID` with the client ID of your Tesla application.\n\n   ```yml\n   # API Fleet\n   - TESLA_API_HOST=https://fleet-api.prd.eu.vn.cloud.tesla.com\n   - TESLA_AUTH_HOST=https://auth.tesla.com\n   - TESLA_AUTH_PATH=/oauth2/v3\n   - TESLA_AUTH_CLIENT_ID=xxxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx\n   ```\n\n1. (Optional) If you want to send commands or use Tesla Telemetry:\n   1. Send drivers a \"Pairing request\" to be able to use your own [Tesla Vehicle Command Protocol http proxy to send commands](https://github.com/teslamotors/vehicle-command?tab=readme-ov-file#using-the-http-proxy)\n   2. Send test commands or setup Telemetry to [stream it to your Teslamate](#streaming-via-tesla-telemetry)\n\n#### Switching from Owners API to Fleet API\n\n1. Sign out from the current Owners API by visiting the teslamate settings page\n2. Follow step 1&2 from [Tesla Fleet API](https://docs.teslamate.org/docs/guides/api#tesla-fleet-api)\n3. Restart your docker instance to make the change in effect\n4. With proper setup, your teslamate instance will sign in automatically with your client ID after restart\n\n### Streaming via Tesla Telemetry\n\n**_Important: if you don't setup your own streaming, you MUST disable manually the streaming in Teslamate settings._**\n\nTo setup your own streaming server, you can follow these steps:\n\n1. Setup a [Tesla Fleet Telemetry](https://github.com/teslamotors/fleet-telemetry) instance on a public domain (eg: _telemetry.mydomain.com_)\n1. Add a [Google pubsub dispatcher](https://github.com/teslamotors/fleet-telemetry?tab=readme-ov-file#backendsdispatchers) to your own GCP PubSub.\n1. Setup a [MyTeslaMate Streaming Server from Fleet Telemetry Events](https://github.com/MyTeslaMate/websocket) on a public domain (eg: _streaming.mydomain.com_)\n1. Manually create a subscription to the `telemetry_V` created in PubSub by the Tesla Telemetry with:\n   - Delivery type: Push\n   - Endpoint URL: [https://streaming.mydomain.com](https://streaming.mydomain.com)\n1. Update your environment variables:\n\n   ```yml\n   - TESLA_WSS_HOST=wss://streaming.mydomain.com\n   - TESLA_WSS_TLS_ACCEPT_INVALID_CERTS=true\n   - TESLA_WSS_USE_VIN=true\n   ```\n\n1. Restart your instance\n"
  },
  {
    "path": "website/docs/configuration/environment_variables.md",
    "content": "---\nid: environment_variables\ntitle: Environment Variables\nsidebar_label: Environment Variables\n---\n\nTeslaMate accepts the following environment variables for runtime configuration:\n\n| Variable Name                          | Description                                                                                                                                                                                                                                                                                                      | Default Value                                                                                                                                                       |\n| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **ENCRYPTION_KEY**                     | A key used to encrypt the Tesla API tokens (**required**)                                                                                                                                                                                                                                                        |                                                                                                                                                                     |\n| **DATABASE_USER**                      | Username                                                                                                                                                                                                                                                                                                         |                                                                                                                                                                     |\n| **DATABASE_PASS**                      | User password                                                                                                                                                                                                                                                                                                    |                                                                                                                                                                     |\n| **DATABASE_NAME**                      | The database to connect to                                                                                                                                                                                                                                                                                       |                                                                                                                                                                     |\n| **DATABASE_HOST**                      | Hostname of the database server                                                                                                                                                                                                                                                                                  |                                                                                                                                                                     |\n| **DATABASE_PORT**                      | Port of the database server                                                                                                                                                                                                                                                                                      | 5432                                                                                                                                                                |\n| **DATABASE_SOCKET_DIR**                | Local path containing UNIX socket for database if that connection mechanic is preferred. Provide one of `DATABASE_SOCKET_DIR` and `DATABASE_(USER\\|PASS\\|HOST)`                                                                                                                                                  |                                                                                                                                                                     |\n| **DATABASE_POOL_SIZE**                 | Size of the database connection pool                                                                                                                                                                                                                                                                             | 10                                                                                                                                                                  |\n| **DATABASE_TIMEOUT**                   | The time in milliseconds to wait for database query calls to finish                                                                                                                                                                                                                                              | 60000                                                                                                                                                               |\n| **DATABASE_SSL**                       | Set to `true` if SSL should be enabled or `noverify` if certificate verification should not be performed.                                                                                                                                                                                                        | false                                                                                                                                                               |\n| **DATABASE_SSL_CA_CERT_FILE**          | Path to a file containing PEM-encoded CA certificates (required if `DATABASE_SSL` is set to `true`)                                                                                                                                                                                                              |                                                                                                                                                                     |\n| **DATABASE_SSL_SNI**                   | set SNI for host undel ssl mode                                                                                                                                                                                                                                                                                  |                                                                                                                                                                     |\n| **DATABASE_IPV6**                      | Set to `true` if IPv6 should be used                                                                                                                                                                                                                                                                             | false                                                                                                                                                               |\n| **VIRTUAL_HOST**                       | Host part used for generating URLs throughout the app                                                                                                                                                                                                                                                            | localhost                                                                                                                                                           |\n| **URL_PATH**                           | Path used for generating URLs (can be used with a reverse proxy)                                                                                                                                                                                                                                                 | /                                                                                                                                                                   |\n| **CHECK_ORIGIN**                       | Configures whether to check the origin header or not. May be `true` (**recommended**), `false` (_default_) or a comma-separated list of hosts that are allowed (e.g. `https://example.com,//another.com:8080`). Hosts also support wildcards. If `true`, it will check against the host value in `VIRTUAL_HOST`. | false                                                                                                                                                               |\n| **PORT**                               | Port where the web interface is exposed                                                                                                                                                                                                                                                                          | 4000                                                                                                                                                                |\n| **HTTP_BINDING_ADDRESS**               | IP address where the web interface is exposed, or blank (_default_) meaning all addresses.                                                                                                                                                                                                                       |                                                                                                                                                                     |\n| **DISABLE_MQTT**                       | Disables the MQTT feature if `true`                                                                                                                                                                                                                                                                              | false                                                                                                                                                               |\n| **MQTT_HOST**                          | Hostname of the broker (**required** unless DISABLE_MQTT is `true`)                                                                                                                                                                                                                                              |                                                                                                                                                                     |\n| **MQTT_PORT**                          | Port of the broker                                                                                                                                                                                                                                                                                               | 1883 (8883 for MQTT over TLS)                                                                                                                                       |\n| **MQTT_USERNAME**                      | Username                                                                                                                                                                                                                                                                                                         |                                                                                                                                                                     |\n| **MQTT_PASSWORD**                      | Password                                                                                                                                                                                                                                                                                                         |                                                                                                                                                                     |\n| **MQTT_TLS**                           | Enables TLS if `true`                                                                                                                                                                                                                                                                                            | false                                                                                                                                                               |\n| **MQTT_TLS_ACCEPT_INVALID_CERTS**      | Accepts invalid certificates if `true`                                                                                                                                                                                                                                                                           | false                                                                                                                                                               |\n| **MQTT_IPV6**                          | Set to `true` if IPv6 should be used                                                                                                                                                                                                                                                                             | false                                                                                                                                                               |\n| **MQTT_NAMESPACE**                     | Inserts a custom namespace into the MQTT topic. For example, with `MQTT_NAMESPACE=account_0`: `teslamate/account_0/cars/$car_id/state`.                                                                                                                                                                          |                                                                                                                                                                     |\n| **IMPORT_DIR**                         | The path of the directory for the import of data (e.g. TeslaFi)                                                                                                                                                                                                                                                  | ./import                                                                                                                                                            |\n| **TZ**                                 | Used to establish the local time zone, e.g. to use the local time in logs. See [List of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).                                                                                                                                   |                                                                                                                                                                     |\n| **DEFAULT_GEOFENCE**                   | The default GEOFENCE to send via GEOFENCE if car not in geofence. Overrides the default of \"\" which will delete any retained value.                                                                                                                                                                              | \"\" (no quotes)                                                                                                                                                      |\n| **TESLAFI_IMPORT_VEHICLE_ID**          | The default Vehicle ID used when importing from TeslaFi. If it is not defined and the import source does not contain the data, 1 is used.                                                                                                                                                                        |                                                                                                                                                                     |\n| **TESLA_API_HOST**                     | Hostname of the Tesla API                                                                                                                                                                                                                                                                                        | [https://owner-api.teslamotors.com](https://owner-api.teslamotors.com) (or for chinese: [https://owner-api.vn.cloud.tesla.cn](https://owner-api.vn.cloud.tesla.cn)) |\n| **TESLA_API_POOL_SIZE**                | HTTP pool size limit for `TESLA_API_HOST` domain API                                                                                                                                                                                                                                                             | 10                                                                                                                                                                  |\n|                                        |\n| **TESLA_AUTH_HOST**                    | Hostname of the Tesla authentication API                                                                                                                                                                                                                                                                         | [https://auth.tesla.com](https://auth.tesla.com)                                                                                                                    |\n| **TESLA_AUTH_PATH**                    | The Tesla authentication path                                                                                                                                                                                                                                                                                    | /oauth2/v3                                                                                                                                                          |\n| **TESLA_AUTH_CLIENT_ID**               | Client ID of the application registered on [developer.tesla.com](https://developer.tesla.com)                                                                                                                                                                                                                    | ownerapi                                                                                                                                                            |\n| **TESLA_WSS_HOST**                     | Hostname of the Tesla streaming                                                                                                                                                                                                                                                                                  | wss://streaming.vn.teslamotors.com (or for chinese: wss://streaming.vn.cloud.tesla.cn)                                                                              |\n| **TESLA_WSS_TLS_ACCEPT_INVALID_CERTS** | Accepts invalid certificates on TESLA_WSS_HOST if `true`                                                                                                                                                                                                                                                         |                                                                                                                                                                     |\n| **TESLA_WSS_USE_VIN**                  | Use the `vin` field instead of `vid` to connect stream if `true`                                                                                                                                                                                                                                                 |                                                                                                                                                                     |\n| **TOKEN**                              | Token given by a third party Tesla API provider. This `TOKEN` is added to each API request and the format must be `?token=xxxx-xxxx-xxxx`                                                                                                                                                                        |                                                                                                                                                                     |\n| **POLLING_ASLEEP_INTERVAL**            | Interval between API fetch when the vehicle is asleep (in seconds). **Important: Do not alter this setting unless you are certain of the implications.**                                                                                                                                                         | 30                                                                                                                                                                  |\n| **POLLING_CHARGING_INTERVAL**          | Minimum interval between API fetch when the vehicle is charging (in seconds). **Important: Do not alter this setting unless you are certain of the implications.**                                                                                                                                               | 5                                                                                                                                                                   |\n| **POLLING_DRIVING_INTERVAL**           | Interval between API fetch when the vehicle is driving (in seconds). **Important: Do not alter this setting unless you are certain of the implications.**                                                                                                                                                        | 2.5                                                                                                                                                                 |\n| **POLLING_ONLINE_INTERVAL**            | Interval between API fetch when the vehicle is online (in seconds). **Important: Do not alter this setting unless you are certain of the implications.**                                                                                                                                                         | 60                                                                                                                                                                  |\n| **POLLING_DEFAULT_INTERVAL**           | Default interval between API fetch (in seconds). **Important: Do not alter this setting unless you are certain of the implications.**                                                                                                                                                                            | 15                                                                                                                                                                  |\n| **POLLING_MINIMUM_INTERVAL**           | Minimum interval between API fetch. No minimum by default. **Important: Do not alter this setting unless you are certain of the implications.**                                                                                                                                                                  | 0                                                                                                                                                                   |\n| **HTTP_POOL_SIZE**                     | The default size of the HTTP connection pool for domains other than `TESLA_API_HOST`, `nominatim.openstreetmap.org`, and `api.github.com`. This setting determines the maximum number of simultaneous connections allowed for these domains.                                                                     | 5                                                                                                                                                                   |\n| **HTTP_POOL_TIMEOUT**                  | The maximum time (in microseconds) to wait for a connection from the HTTP pool before timing out. This setting helps prevent indefinite waits when the pool is exhausted.                                                                                                                                        | 10000                                                                                                                                                               |\n| **ULIMIT_MAX_NOFILE**                  | Sets the maximum number of open file descriptors for the TeslaMate process. This can prevent memory bloat in environments with very high default `ulimit` values. Set to `0` to disable this feature.                                                                                                            | 65536                                                                                                                                                               |\n| **NOMINATIM_PROXY**                    | HTTP proxy for OpenStreetMap Nominatim API requests (e.g. `http://127.0.0.1:7897`, HTTP only). Similar to [`nominatim_http_proxy`](https://nominatim.org/release-docs/latest/customize/Settings/#nominatim_http_proxy).                                                                                          |                                                                                                                                                                     |\n"
  },
  {
    "path": "website/docs/development.mdx",
    "content": "---\nid: development\ntitle: Development and Contributing\nsidebar_label: Development and Contributing\n---\n\n## Requirements\n\nTeslaMate officially supports the versions listed below. However, TeslaMate aims to maintain compatibility with the last three major releases of Erlang and Postgres, as well as the last three minor releases of Elixir.\nWhen contributing, please use the versions listed below, which match those used in official TeslaMate distributions.\n\n- **Elixir** >= 1.19.5-otp-26\n- **Postgres** >= 18.0\n- **Grafana** = 12.4.0\n- An **MQTT broker** e.g. mosquitto (_optional_)\n- **NodeJS** >= 22.22.0\n\nor [Nix](https://nixos.org/download/). You can then use the nix devenv (via direnv) setup.\n\n## Initial Setup\n\nTo run the TeslaMate test suite you need a database named `teslamate_test`:\n\n```bash\n# download dependencies, create the dev database and run migrations\nmix setup\n\n# create the test database\nMIX_ENV=test mix ecto.setup\n```\n\n## Running locally\n\nStart an iex session in another terminal window:\n\n```elixir\niex -S mix phx.server\n```\n\nThen sign in with a Tesla account.\n\n## Hot reloading\n\nTo immediately apply your local changes open or reload [http://localhost:4000](http://localhost:4000). You can also reload specific modules via `iex`, for example:\n\n```elixir\niex> r TeslaMate.Vehicles.Vehicle\n```\n\nTo only compile the changes:\n\n```bash\nmix compile\n```\n\n## Code formatting\n\n### Format all files\n\nInstall [Treefmt](https://github.com/numtide/treefmt/releases) or use nix develop or the nix devenv (via direnv) setup.\n\n```bash\ntreefmt\n```\n\nor with nix, when not using direnv:\n\n```bash\nnix develop --override-input devenv-root \"file+file://\"<(printf %s \"$PWD\") . --command treefmt\n```\n\nYou can even use a VS Code extension like [treefmt](https://marketplace.visualstudio.com/items?itemName=ibecker.treefmt-vscode) to format the files on save.\n\n### Only format elixir files\n\n```bash\nmix format\n```\n\n## Update pot files (extract messages for translation)\n\n```bash\nmix gettext.extract --merge\n```\n\n## Testing\n\nTo ensure a commit passes CI you should run `mix ci` locally, which executes the following commands:\n\n- Check formatting (`mix format --check-formatted`)\n- Run all tests (`mix test`)\n\n### Testing with our CI which builds the Docker images automatically per PR\n\nOur CI automatically builds the Docker images for each PR (only for repo own PRs, not for external PRs). To test the changes introduce by a PR you can edit your docker-compose.yml file as follows (replace `pr-3836` with the PR number):\n\nFor TeslaMate:\n\n```yml\nteslamate:\n  # image: teslamate/teslamate:latest\n  image: ghcr.io/teslamate-org/teslamate:pr-3836\n```\n\nFor Grafana:\n\n```yml\ngrafana:\n  # image: teslamate/grafana:latest\n  image: ghcr.io/teslamate-org/teslamate/grafana:pr-3836\n```\n\n## Making Changes to Grafana Dashboards\n\nTo update dashboards you need Grafana running locally. The following _docker-compose.yml_ can be used for this purpose:\n\n```yml\nservices:\n  grafana:\n    image: teslamate/grafana:latest\n    environment:\n      - DATABASE_USER=postgres\n      - DATABASE_PASS=postgres\n      - DATABASE_NAME=teslamate_dev\n      - DATABASE_HOST=host.docker.internal\n    ports:\n      - 3000:3000\n    volumes:\n      - grafana-data:/var/lib/grafana\n\nvolumes:\n  grafana-data:\n```\n\n_(on Linux use the actual IP address of the host as `DATABASE_HOST`instead of `host.docker.internal`)_\n\nThen build the image with `make grafana` and run the container via `docker compose up grafana`.\n\nAccess the Grafana at [http://localhost:3000](http://localhost:3000) and sign in with the default user `admin` and password `admin`.\n\nThen edit the respective dashboard(s) locally. To export a dashboard hit the 'Save' button and select `Save JSON to file`. The final JSON file belongs in the directory `./grafana/dashboards/`. To apply the changes rebuild the image and start the container.\n\nWhen making larger changes to Grafana Dashboards please include updated screenshots (1920x1080 @ x2, Grafana running in Kiosk mode) in `./website/static/screenshots`. Ensure to blur sensitive information.\n\n## Best Practices\n\n### Queries involving timestamp columns\n\nDatetime values are currently stored in columns of type `timestamp`. [This is NOT recommended](https://wiki.postgresql.org/wiki/Don't_Do_This#Don.27t_use_timestamp_.28without_time_zone.29_to_store_UTC_times).\n\nWhile [Grafana macros](https://grafana.com/docs/grafana/latest/datasources/postgres/#macros) like `$__timeFilter` & `$__timeGroup` are working PostgreSQL functions like `DATE_TRUNC()` require additional treatment.\n\nGrafana is not setting the PostgreSQL session timezone. To ensure truncation is done with respect to the Grafana timezone setting, set the [optional time_zone argument](https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC) for `DATE_TRUNC()`.\n\n```sql\nDATE_TRUNC('day', TIMEZONE('UTC', date), '$__timezone')\n```\n\nIn addition, ensure to compare either values with or without time zone.\n\n### Streaming API data / positions table usage in dashboard queries\n\nWhen Streaming API is enabled roughly 1 GB of data is gathered per car and 30 000 km. Most of that data (95+ percent) is stored in positions table. For optimal dashboard performance these recommendations should be followed:\n\n- only query positions table when really needed\n- if data in 15 second intervals is sufficient consider excluding streaming data by adding `ideal_battery_range_km IS NOT NULL and car_id = $car_id` as WHERE conditions\n\nBefore opening pull requests please diagnose index usage & query performance by making use of `EXPLAIN ANALYZE`.\n\n### Enable _pg_stat_statements_ to collect query statistics\n\nTo quickly identify performance bottlenecks we encourage all contributors to enable the pg_stat_statements extension in their instance. For docker based installs you can follow these steps:\n\n- Enable the pg_stat_statements module\n\n  ```yml\n  services:\n    database:\n      image: postgres:18-trixie\n      ...\n      command: postgres -c shared_preload_libraries=pg_stat_statements\n      ...\n  ```\n\n- Create Extension to enable `pg_stat_statements` view\n\n  ```sql\n  CREATE EXTENSION IF NOT EXISTS pg_stat_statements;\n  ```\n\n- Identify potentially slow queries (mean_exec_time)\n\n  ```sql\n  SELECT query, calls, mean_exec_time, total_exec_time FROM pg_stat_statements ORDER BY mean_exec_time DESC LIMIT 10;\n  ```\n\n- Identify frequently executed queries (calls)\n\n  ```sql\n  SELECT query, calls, mean_exec_time, total_exec_time FROM pg_stat_statements ORDER BY calls DESC LIMIT 10;\n  ```\n\nAdditional details about pg_stat_statements can be found [in the PostgreSQL docs](https://www.postgresql.org/docs/current/pgstatstatements.html)\n\n## Entity Relationship Model (ERM)\n\nimport useBaseUrl from \"@docusaurus/useBaseUrl\";\n\n<img\n  alt=\"Entity Relationship Model\"\n  src={useBaseUrl(\"img/entity_relationship_model.png\")}\n/>\n\n## Contributing to TeslaMate\n\nWe welcome contributions! To keep the project sustainable and legally protected, we have two main requirements for all Pull Requests:\n\n### 1. License (AGPLv3)\n\nBy contributing to TeslaMate, you agree that your contributions will be licensed under the **GNU Affero General Public License v3 (AGPLv3)**. This ensures that the software remains free and open, even when offered as a service over a network.\n\n### 2. Contributor License Agreement (CLA)\n\nBefore we can merge your first Pull Request, you must sign our **Fiduciary License Agreement (FLA 2.0)**.\n\n- **Why?** This gives the `teslamate-org` the legal standing to protect the project (e.g., against trademark misuse or license violations) and guarantees that the project will **always remain Free Software**.\n- **How?** When you open a PR, our `@cla-assistant` bot will post a comment with a link to sign the agreement using your GitHub account. It only takes a few seconds.\n- **More Info:** You can find the full text and further details in our [Legal Repository](https://github.com/teslamate-org/legal).\n\n## Pre-Merge Checks for Dependency Updates\n\nWhen reviewing a pull request that updates dependencies, it's crucial to verify that the changes are correct and don't break the Nix-based development environment. After checking out the branch of the PR, run the following commands:\n\n- `nix flake check ...`: Verifies the flake's integrity across different systems.\n- `nix build ...`: Ensures the project builds successfully with the new dependencies.\n- `nix develop ... --command treefmt`: Checks if the code formatting still runs.\n- `devenv up`: Confirms that the development environment starts up as expected.\n\n```bash\n# Run these commands to ensure everything works as expected\nnix flake check --override-input devenv-root \"file+file://\"<(printf %s \"$PWD\") . --all-systems\nnix build --override-input devenv-root \"file+file://\"<(printf %s \"$PWD\")\nnix develop --override-input devenv-root \"file+file://\"<(printf %s \"$PWD\") . --command treefmt\ndevenv up\n```\n\nIt is most likely you need to change the hash in `./nix/flake-modules/package.nix`. This could be `mixFodDeps`, `npmDepsHash`, or the `sha256` for `cldr`.\n\n:::note\nA `cldr` version update is particularly critical. The old hashes will still appear to work if you previously built using the old hash. But will silently get the old file not the new file.\n:::\n"
  },
  {
    "path": "website/docs/faq.md",
    "content": "---\ntitle: Frequently Asked Questions\nsidebar_label: FAQ\n---\n\n## How to generate your own tokens\n\nThere are multiple apps available to securely generate access tokens yourself, for example:\n\n- [Tesla Auth (macOS, Linux, Windows)](https://github.com/adriankumpf/tesla_auth)\n- [Auth app for Tesla (iOS, macOS)](https://apps.apple.com/us/app/auth-app-for-tesla/id1552058613)\n\n## Why are no consumption values displayed in Grafana?\n\nUnfortunately the Tesla API does not return consumption values for a trip. In order to still be able to display values TeslaMate estimates the consumption on the basis of the recorded (charging) data.\nIt takes **at least two** charging sessions before the first estimate can be displayed. Charging sessions have to be longer than 10 minutes and less than 95% state-of-charge (SoC). Each future charging session will slightly improve the accuracy of the estimate, which is applied retroactively to all data.\n\n## Why \"null\" is displayed above the panels in Grafana?\n\nIf you have not customized the name of your Tesla, Teslamate saves an empty value in the PostgreSQL database. When Grafana is reading from the database, the value `null` is the value for the variable car_id in Grafana.\n\nGive your Tesla a name via car touchscreen and wait for Teslamate to synchronize it.\n\n## What is the geo-fence feature for?\n\nAt the moment geo-fences are a way to create custom locations like `🏡 Home` or `🛠️ Work` That may be particularly useful if the addresses (which are provided by [OpenStreetMap](https://www.openstreetmap.org)) in your region are inaccurate or if you street-park at locations where the exact address may vary.\n\n## Help, my car does not fall asleep\n\nThe accessory power functionality prevents your car from going to sleep even if no accessory is connected. You can disable it by setting Controls > Charging > Keep Accessory Power Off.\n\nCars with Media Control Unit version 1 (MCU1) require certain settings to be able to fall asleep. Model S and Model X cars built before 3/2018 have the MCU1 unit, this can also be checked from the Software -> Additional vehicle information. If the 'Infotainment processor' is 'NVIDIA Tegra', the car is equipped with MCU1.\n\nThe settings needed to enable the sleep mode with MCU1 are:\n\n- 'Display' -> 'Energy saving' -> ON\n- 'Display' -> 'Always connected' -> unchecked\n- 'Safety & security' -> 'Cabin overheat protection' -> OFF\n\nWith these settings the MCU1 cars should fall asleep within some 15 minutes of inactivity. This is what you should see in the log when streaming mode is enabled in TeslaMate\n\n- `[info] Suspending logging` after 3 minutes of inactivity (doors locked)\n- `[info] Fetching vehicle state ...` about 21 minutes later. The car should have fallen asleep during this period\n\nIn this example the driver's door was opened and closed:\n\n```bash\nteslamate_1     | 2021-03-16 11:41:19.336 car_id=1 [info] Start / :online\nteslamate_1     | 2021-03-16 11:41:19.603 car_id=1 [info] Connecting ...\nteslamate_1     | 2021-03-16 11:44:41.380 car_id=1 [info] Suspending logging\nteslamate_1     | 2021-03-16 12:03:27.356 car_id=1 [info] Fetching vehicle state ...\nteslamate_1     | 2021-03-16 12:03:28.123 car_id=1 [info] Start / :asleep\nteslamate_1     | 2021-03-16 12:03:28.139 car_id=1 [info] Disconnecting ...\n```\n\n![image](https://user-images.githubusercontent.com/2128464/111361149-38238380-8696-11eb-950d-aba298206d2d.png)\n\n**Note!** If you are using some other data logger like TeslaFi at the same time, the sleep attempts probably fail as the other data logger is keeping the car awake. Especially calling the [Vehicle Data API](https://www.teslaapi.io/vehicles/state-and-settings#vehicle-data) will reset the car's inactivity timer.\n\n## Why am I missing data when not using the Streaming API?\n\nThe problem with the polling mode is that the car does not fall asleep before it have been inactive for some 15 minutes. TeslaMate will suspend all polling after the car has been idle for 3 minutes (the 'Idle Time Before Trying to Sleep' setting), and will resume polling 15 minutes later (the 'Time to Try Sleeping' setting).\nAny activity during this 15 minutes can't be detected, as calling the [Vehicle Data API](https://www.teslaapi.io/vehicles/state-and-settings#vehicle-data) would reset the car's inactivity timer, preventing the car from falling asleep.\n\nCalling the [Vehicle API](https://www.teslaapi.io/vehicles/list#vehicle) does not reset the inactivity timer, but it only tells if the car is either online (driving, charging, idle, about to fall asleep) or asleep. It can't tell if an idle car started driving during the 'Time to Try Sleeping' period.\n\n## Why are my Docker timestamp logs different than my machine?\n\nDocker container timezones default to UTC. To set the timezone for your container, use the `TZ` Environment Variable in your YML file. More information found at [Environment Variables](https://docs.teslamate.org/docs/configuration/environment_variables)\n\n## Which network flows must be authorized?\n\n⚠️ This is for advanced users!\n\nYou might want to prohibit all network flows except those necessary for teslamate.\nThis is a common practice to harden an installation (e.g., to reduce the risk of data leakage).\n\nThe following flows must be authorized (egress traffic and DNS resolution):\n\nHTTPS (TCP/443)  \nauth.tesla.com  \nowner-api.teslamotors.com  \nstreaming.vn.teslamotors.com  \nnominatim.openstreetmap.org\n\nHTTP (TCP/80)  \nstep.esa.int\n\nNote: This may change when Teslamate is updated!\n"
  },
  {
    "path": "website/docs/import/tesla_apiscraper.md",
    "content": "---\ntitle: Import from tesla-apiscraper (BETA)\nsidebar_label: tesla-apiscraper\n---\n\nThis is a multi-step process to export your data from a [tesla-apiscraper](https://github.com/lephisto/tesla-apiscraper) InfluxDB backend, convert it to a format that can be imported into TeslaMate (specifically TeslaFi CSV) while fixing up some typical data glitches the scraper produces, and then import it.\n\n## Requirements\n\n- A copy of the data stored by `tesla-apiscraper` - specifically the `/opt/apiscraper/influxdb` folder mounted in the standard apiscraper Docker configuration. **Create a backup of this** before attempting the export and conversion, just in case.\n\n- A system running Docker with sufficient RAM for InfluxDB to perform the CSV export. This does **not** need to be the same machine where API Scraper and/or TeslaMate was/is running - you can do the export and conversion on your PC/Mac. The important thing is to give the Docker machine more than 2GB of RAM, otherwise the InfluxDB export may fail.\n\n- **CREATE A [BACKUP](../maintenance/backup_restore.mdx) OF YOUR DATA** before attempting to import anything into TeslaMate. This is all highly experimental and has only been successfully done once :)\n\n## Instructions\n\n:::note Troubleshooting\nAll of this is experimental and has not been extensively tested. If you encounter an error during Part 1 or Part 2, please create an issue in the [tesla-apiscraper-to-teslafi-export](https://github.com/olexs/tesla-apiscraper-to-teslafi-export) project on GitHub, since it's not directly related to TeslaMate.\n:::\n\n### Part 1: Exporting the API Scraper InfluxDB data into CSV\n\n1. Download or clone the [tesla-apiscraper-to-teslafi-export](https://github.com/olexs/tesla-apiscraper-to-teslafi-export) repository into a folder on your machine.\n\n2. Place the `tesla-apiscraper` data folder _contents_ (_data_, _meta_ and _wal_ folders) into the `influxdb-data` folder, next to the `influxdb-export.sh` file. The folder structure must look like this:\n\n   ```console\n   .\n   ├── influxdb-export.sh\n   ├── influxdb-export.bat\n   ├── (other stuff)\n   └── influxdb-data\n       ├── README.md\n       ├── data\n       ├── meta\n       └── wal\n   ```\n\n3. Run the `influxdb-export.sh` script (or `influxdb-export.bat` if you're on Windows). You may need to `sudo` it / run it in an Administrator command line prompt if your Docker install needs root. It will do the following:\n   - Create the `influxdb-csv` output folder, if it doesn't exist yet\n   - Start an InfluxDB Docker container with the `influxdb-data` and `influxdb-csv` folders mounted (on Windows, you may need to allow your Docker to access the drive you are working on for the mounts to work)\n   - Wait for the container to report as _healthy_\n   - Execute the export commands for all data stored by apiscraper, putting the CSV files inside the `influxdb-csv` folder\n   - Stop and delete the InfluxDB container\n\n   This may take a little while. After the process has finished, if there are no errors reported, continue with the next part of the instructions.\n\n### Part 2: Converting exported InfluxDB CSV files to TeslaFi CSV\n\n1. Obtain your Tesla's **vehicle ID** number. It's a 10- or 11-digit number that uniquely identifies your car, and is part of the TeslaFi data format, but it's not included in tesla-apiscraper data - so you need to source it separately. There are several ways you can get it:\n   - Manually using the Tesla API. The number is listed under `vehicle_id` in the `vehicles` response, as documented here: [https://tesla-api.timdorr.com/api-basics/vehicles](https://tesla-api.timdorr.com/api-basics/vehicles).\n   - From the database of another Tesla API tracker you're already using, such as TeslaMate (**docker compose exec database psql teslamate teslamate -c 'select vid from cars;'**).\n\n2. Run the `teslafi-convert.sh` script (or `teslafi-convert.bat` if you're on Windows). You may need to `sudo` it / run it in an Administrator command line prompt if your Docker install needs root. It will do the following:\n   - Create the `teslafi-csv` output folder, if it doesn't exist yet\n   - Build and start a Docker container with the `converter` app and its few dependencies, with the `influxdb-csv` and `teslafi-csv` folders mounted (on Windows, you may need to allow your Docker to access the drive you are working on for the mounts to work)\n   - Ask you for the vehicle ID mentioned above\n   - Process the CSV files in the `influxdb-csv` folder. This may take a couple minutes. Progress is displayed as the converter works its way through the files\n   - Stop and delete the Docker container\n\n   The finished TeslaFi-compatible CSV files are now located in the `teslafi-csv` folder.\n\n### Part 3: Importing the processed CSV data into TeslaMate\n\n- Proceed with the [TeslaFi import](teslafi.md) steps using the CSV files you just created.\n"
  },
  {
    "path": "website/docs/import/teslafi.md",
    "content": "---\ntitle: Import from TeslaFi (BETA)\nsidebar_label: TeslaFi\n---\n\n## Requirements\n\n- **CREATE A [BACKUP](../maintenance/backup_restore.mdx) OF YOUR DATA‼️**\n\n- If you have been using TeslaMate since before the 1.16 release, the [docker-compose.yml](../installation/docker.md) needs to be updated. Add the following volume mapping to the `teslamate` service:\n\n  ```yml {4-5}\n  services:\n    teslamate:\n      # ...\n      volumes:\n        - ./import:/opt/app/import\n  ```\n\n- Export your TeslaFi data (for one car) as CSV by month: `Settings -> Advanced -> Download TeslaFi Data`.\n\n<details>\n  <summary>If you have a ton of TeslaFi data and don't want to deal with the UI, you can run this python script to export all data</summary>\n\n```python\n# https://gist.github.com/TheLinuxGuy/e8c85e59226014087159c5d36c0a1272\nimport requests\nimport csv\nfrom io import StringIO\nfrom lxml.html import fromstring\n\nusername = 'username'\npassword = 'password'\nyears = [2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025] # array of years you want to export\nmonths = [1,2,3,4,5,6,7,8,9,10,11,12] # I assume all the months, up to you\ncookie = ''\n\n# Set the proper delimiter\nCSV_DELIMITER = ','\n\ndef login():\n    url = \"https://teslafi.com/userlogin.php\"\n    response = requests.request(\"GET\", url, headers={}, data={})\n\n    cookies = \"\"\n    for key in response.cookies.keys():\n        this_cookie = key + \"=\" + response.cookies.get(key)\n        if cookies == \"\":\n            cookies = this_cookie\n        else:\n            cookies += \"; \" + this_cookie\n\n    token = fromstring(response.text).forms[0].fields['token']\n    global cookie\n    cookie = cookies\n    payload = {'username': username,'password': password,'remember': '1','submit': 'Login','token': token}\n    headers = {\"Cookie\": cookies}\n    l = requests.request(\"POST\", url, headers=headers, data=payload)\n    return True\n\ndef getdata(m,y):\n    url = \"https://teslafi.com/exportMonth.php\"\n    headers = {'Content-Type': 'application/x-www-form-urlencoded','Cookie': cookie}\n    response = requests.request(\"POST\", url, headers=headers, data=pl(m,y))\n    return response\n\ndef detect_delimiter(text):\n    \"\"\"Detects the most likely delimiter in the CSV data\"\"\"\n    if not text or '\\n' not in text:\n        return ','\n\n    # Sample the first line to detect delimiter\n    first_line = text.split('\\n', 1)[0]\n    delimiters = [(',', first_line.count(',')),\n                 (';', first_line.count(';')),\n                 ('\\t', first_line.count('\\t'))]\n\n    # Sort by frequency, highest first\n    delimiters.sort(key=lambda x: x[1], reverse=True)\n\n    # Return the most common delimiter, or comma if none found\n    return delimiters[0][0] if delimiters[0][1] > 0 else ','\n\ndef normalize_battery_level(rows, header):\n    \"\"\"\n    Normalize battery_level values to integers without decimal points:\n    - Always convert to integer representation\n    - If decimal part < 0.50, round down\n    - If decimal part >= 0.50, round up\n\n    Args:\n        rows: List of CSV rows (lists)\n        header: List of column names\n\n    Returns:\n        Tuple of (modified_rows, normalization_count)\n    \"\"\"\n    # Find the index of the battery_level column\n    try:\n        battery_level_index = header.index('battery_level')\n    except ValueError:\n        # If battery_level column doesn't exist, return original rows\n        return rows, 0\n\n    normalization_count = 0\n\n    # Iterate through all rows\n    for i, row in enumerate(rows):\n        # Skip if row is too short or battery_level is empty\n        if len(row) <= battery_level_index or not row[battery_level_index].strip():\n            continue\n\n        try:\n            # Try to convert the battery_level to a float\n            value = float(row[battery_level_index])\n\n            # Get the integer value (either rounded up or down based on decimal part)\n            if value - int(value) < 0.5:\n                new_value = int(value)  # Round down\n            else:\n                new_value = int(value) + 1  # Round up\n\n            # Convert to string representation of integer\n            new_value_str = str(new_value)\n\n            # Only count as normalization if we actually changed the value\n            if row[battery_level_index] != new_value_str:\n                row[battery_level_index] = new_value_str\n                normalization_count += 1\n\n        except (ValueError, TypeError):\n            # Skip if conversion fails\n            continue\n\n    return rows, normalization_count\n\ndef savefile(response, m, y):\n    try:\n        # Detect what delimiter the API is using\n        input_delimiter = detect_delimiter(response.text)\n\n        # Read the CSV data with the detected delimiter\n        csv_data = StringIO(response.text)\n        reader = csv.reader(csv_data, delimiter=input_delimiter)\n        rows = list(reader)\n\n        # Extract the header and data rows\n        if not rows:\n            print(f\"Skipped creating {fname(m,y)} for year {y} and month number {m} due to lack of data from TeslaFi.\")\n            return\n\n        header = rows[0]\n        data_rows = rows[1:]\n\n        # Check if there are any data rows\n        if not data_rows:\n            print(f\"Skipped creating {fname(m,y)} for year {y} and month number {m} due to lack of data from TeslaFi.\")\n            return\n\n        # Normalize battery_level values\n        normalized_rows, normalization_count = normalize_battery_level(data_rows, header)\n\n        # If normalizations occurred, show only the summary\n        if normalization_count > 0:\n            print(f\"Detected `battery_level` column malformed, {normalization_count} rows of data have been autocorrected\")\n\n        # Write the standardized CSV with the correct delimiter\n        with open(fname(m,y), \"w\", newline='', encoding='utf-8') as file:\n            writer = csv.writer(file, delimiter=CSV_DELIMITER, quoting=csv.QUOTE_MINIMAL)\n            writer.writerow(header)\n            writer.writerows(normalized_rows)\n\n        print(f\"Saved: {fname(m,y)}\")\n\n    except Exception as e:\n        print(f\"Error processing CSV: {str(e)}\")\n    return\n\ndef fname(m,y):\n    return(\"TeslaFi\" + str(m) + str(y) + \".csv\")\n\ndef pl(m,y):\n    url = 'https://teslafi.com/export2.php'\n    response = requests.request(\"GET\", url, headers={\"Cookie\": cookie})\n    magic = fromstring(response.text).forms[0].fields['__csrf_magic']\n    return('__csrf_magic=' + magic + '&Month=' + str(m) + '&Year=' + str(y))\n\ndef go():\n    login()\n    for year in years:\n        for month in months:\n            print(f\"Processing: {month}/{year}\")\n            d = getdata(month, year)\n            savefile(d, month, year)\n\ngo()\n```\n\n</details>\n\n## Instructions\n\n1. Copy the exported CSV files (in the format \"TeslaFixxxxxx.csv\") into a **directory named `import`** next to the _docker-compose.yml_:\n\n   ```console\n   .\n   ├── docker-compose.yml\n   └── import\n       ├── TeslaFi82019.csv\n       ├── TeslaFi92019.csv\n       ├── TeslaFi102019.csv\n       ├── TeslaFi112019.csv\n       └── TeslaFi122019.csv\n   ```\n\n   :::tip\n   The path of the import directory can be customized with the **IMPORT_DIR** [environment variable](../configuration/environment_variables.md).\n   :::\n\n2. **Restart** the teslamate service and open the TeslaMate admin interface. Now the import form should be displayed instead of the vehicle summary.\n3. Since the raw data is in the local timezone (assigned by the home address in the TeslaFi settings page) you need to **select your local timezone**. Then start the import. On low-end hardware like the Raspberry Pi, importing a large data set spanning several years will take a couple of hours.\n4. After the import is complete, **empty the `import` directory** (or remove but ensure docker doesn't have a volume mapping) and **restart** the `teslamate` service.\n5. Reindex PostgreSQL data: `REINDEX TABLE positions;`\n\n:::note\nIf there is an overlap between the already existing TeslaMate and TeslaFi data, only the data prior to the first TeslaMate data will be imported.\n:::\n\n:::note\nIf the CSV files are missing the vehicle ID, the imported will default to `1`. You can alter this behavior by setting the environment variable `TESLAFI_IMPORT_VEHICLE_ID`.\n:::\n\n:::note\nSince the exported CSV files do not contain addresses, they are added automatically during and after the import. So please note that not all addresses are visible immediately after the import/restarting. Depending on the amount of data imported, it may take a while before they appear. The same applies to elevation data.\n:::\n"
  },
  {
    "path": "website/docs/installation/docker.md",
    "content": "---\ntitle: Docker install\nsidebar_label: Docker\n---\n\nThis document provides the necessary steps for installation of TeslaMate on any system that runs Docker. You run NixOS? We got you covered, see [NixOS install](nixos.md).\n\nThis setup is recommended only if you are running TeslaMate **on your home network**, as otherwise your Tesla API tokens might be at risk.\nIf you intend to access TeslaMate from the Internet, the recommended way is to use a secure connection (such as a VPN, Cloudflare Tunnel, Tailscale, Zero Tier and a reverse proxy for portless access) for secured access to your TeslaMate instance outside your home network.\nAlternatively, you can use a reverse proxy (such as Traefik, Apache2 or Caddy) with appropriate hardening to secure your TeslaMate instance before expose it to the internet, check out the [advanced guides with Traefik](../advanced_guides/traefik.md) for an example how to use Traefik with TeslaMate. Or you can use the [advanced guides with Apache](../advanced_guides/apache.md) to set up TeslaMate with Apache2, TLS and HTTP Basic Auth.\n\n## Requirements\n\n- Docker _(if you are new to Docker, see [Installing Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/linux/))_\n- A Machine that's always on, so TeslaMate can continually fetch data\n- At least 1 GB of RAM on the machine for the installation to succeed. It is recommended to have at least 2 GB of RAM for optimal operation.\n- External internet access, to talk to tesla.com\n\n## Instructions\n\n1. Create a file called `docker-compose.yml` with the following content:\n\n   ```yml title=\"docker-compose.yml\"\n   services:\n     teslamate:\n       image: teslamate/teslamate:latest\n       restart: always\n       environment:\n         - ENCRYPTION_KEY=secretkey #replace with a secure key to encrypt your Tesla API tokens\n         - DATABASE_USER=teslamate\n         - DATABASE_PASS=password #insert your secure database password!\n         - DATABASE_NAME=teslamate\n         - DATABASE_HOST=database\n         - MQTT_HOST=mosquitto\n       ports:\n         - 4000:4000\n       volumes:\n         - ./import:/opt/app/import\n       cap_drop:\n         - all\n\n     database:\n       image: postgres:18-trixie\n       restart: always\n       environment:\n         - POSTGRES_USER=teslamate\n         - POSTGRES_PASSWORD=password #insert your secure database password!\n         - POSTGRES_DB=teslamate\n       volumes:\n         - teslamate-db:/var/lib/postgresql\n\n     grafana:\n       image: teslamate/grafana:latest\n       restart: always\n       environment:\n         - DATABASE_USER=teslamate\n         - DATABASE_PASS=password #insert your secure database password!\n         - DATABASE_NAME=teslamate\n         - DATABASE_HOST=database\n       ports:\n         - 3000:3000\n       volumes:\n         - teslamate-grafana-data:/var/lib/grafana\n\n     mosquitto:\n       image: eclipse-mosquitto:2\n       restart: always\n       command: mosquitto -c /mosquitto-no-auth.conf\n       # ports:\n       #   - 1883:1883\n       volumes:\n         - mosquitto-conf:/mosquitto/config\n         - mosquitto-data:/mosquitto/data\n\n   volumes:\n     teslamate-db:\n     teslamate-grafana-data:\n     mosquitto-conf:\n     mosquitto-data:\n   ```\n\n2. **Choose a secure encryption key** that will be used to encrypt your Tesla API tokens (insert as `ENCRYPTION_KEY`).\n3. **Choose your secure database password** and insert it at every occurrence of `DATABASE_PASS` and `POSTGRES_PASSWORD`\n4. Start the docker containers with `docker compose up`. To run the containers in the background add the `-d` flag:\n\n   ```bash\n   docker compose up -d\n   ```\n\n### MCU2 upgraded car\n\nIf you have a MCU2 upgraded car, you can replace `image: teslamate/teslamate:latest` with `image: ghcr.io/teslamate-org/teslamate:pr-4453` to get the latest version of TeslaMate that supports MCU2 upgraded cars (improved sleeping behavior for MCU2 upgraded cars).\n\n## Usage\n\n1. Open the web interface [http://your-ip-address:4000](http://localhost:4000)\n2. Sign in with your Tesla Account\n3. The Grafana dashboards are available at [http://your-ip-address:3000](http://localhost:3000). Log in with the default user `admin` (initial password `admin`) and enter a secure password.\n\n## Update\n\nTo update the running TeslaMate configuration to the latest version, follow: [Upgrading to a new version](../upgrading.mdx)\n"
  },
  {
    "path": "website/docs/installation/nixos.md",
    "content": "---\ntitle: NixOS install\nsidebar_label: NixOS\n---\n\nThis document provides the necessary steps for installation of TeslaMate on [NixOS](https://nixos.org/).\n\nThis setup is recommended only if you are running TeslaMate **on your home network**, as otherwise your Tesla API tokens might be at risk.\n\nIf you intend to access TeslaMate from the Internet, the recommended way is to use a secure connection (such as a VPN, Cloudflare Tunnel, Tailscale, Zero Tier and a reverse proxy for portless access like [Caddy](https://nixos.wiki/wiki/Caddy)) for secured access to your TeslaMate instance outside your home network.\nAlternatively, you can use a reverse proxy (such as Traefik or [Caddy](https://nixos.wiki/wiki/Caddy)) with appropriate hardening to secure your TeslaMate instance before expose it to the internet.\n\n## Requirements\n\n- NixOS _(if you are new to NixOS, see [NixOS getting started](https://nixos.org/learn/))_\n- A Machine that's always on, so TeslaMate can continually fetch data\n- At least 1 GB of RAM on the machine for the installation to succeed. It is recommended to have at least 2 GB of RAM for optimal operation.\n- External internet access, to talk to tesla.com\n\n## Instructions\n\nWe provide a flake module that can be used to install TeslaMate on NixOS. To use it, you need to have Nix flakes enabled. If you don't have them enabled yet, follow the [NixOS documentation](https://nixos.wiki/wiki/Flakes).\n\nThe options for the module are documented in the [module.nix](https://github.com/teslamate-org/teslamate/blob/48fb4fa2675ed742bf1b125a784dbbbcb1aceb24/nix/module.nix).\n\nIn the `inputs` section of your flake add:\n\n```nix\nteslamate.url = \"github:teslamate-org/teslamate/main\";\n```\n\nIf you would like to pin to a specific version, you can do so for example like this:\n\n```nix\nteslamate.url = \"github:teslamate-org/teslamate?rev=c37638b320e0beea97c5d51fea51cd9fdbd07ce0\"; # v2.0.0\n```\n\nIf you have a MCU2 upgraded car, you can use the following URL instead to get the latest version of TeslaMate that supports MCU2 upgraded cars (improved sleeping behavior for MCU2 upgraded cars):\n\n```nix\nteslamate.url = \"github:teslamate-org/teslamate/mcu2-upgraded-cars\";\n```\n\nTo enable the TeslaMate service, your config could look like this (note: this will conflict with any existing PostgreSQL/Grafana servers, because NixOS modules do not support multiple instances).\n\n```nix\n{\n  config,\n  lib,\n  inputs,\n  ...\n}:\n{\nimports = [ inputs.teslamate.nixosModules.default ];\n\nconfig = services.teslamate = {\n      enable = true;\n      secretsFile = \"/run/secrets/teslamate.env\"; # you can use agenix for sure: config.age.secrets.teslamateEnv.path;\n      # the secrets file must contain at least:\n      #  - `ENCRYPTION_KEY` - encryption key used to encrypt database\n      #  - `DATABASE_PASS` - password used to authenticate to database\n      #  - `RELEASE_COOKIE` - unique value used by elixir for clustering\n      autoStart = true;\n      listenAddress = \"127.0.0.1\";\n      port = 4000;\n      virtualHost = \"$[your-domain]\";\n      urlPath = \"/\";\n\n      postgres = {\n        enable_server = true;\n        user = \"teslamate\";\n        database = \"teslamate\";\n        host = \"127.0.0.1\";\n        port = 5432;\n      };\n\n      grafana = {\n        enable = true;\n        listenAddress = \"127.0.0.1\";\n        port = 3000;\n        urlPath = \"/\";\n      };\n\n      mqtt = {\n        enable = true;\n        host = \"127.0.0.1\";\n        port = 1883;\n      };\n    };\n}\n```\n\nIf you want to use the TeslaMate web interface via a reverse proxy, you can use the following snippet if you have already Caddy service running:\n\n```nix\n{\n    services.caddy.virtualHosts.\"[your-sub-domain for TeslaMate]\" = {\n      useACMEHost = \"[your-baseDomain]\";\n      extraConfig = ''\n        reverse_proxy http://127.0.0.1:4000\n      '';\n    };\n\n    services.caddy.virtualHosts.\"[your-sub-domain for grafana]\" = {\n      useACMEHost = \"[your-baseDomain]\";\n      extraConfig = ''\n        reverse_proxy http://127.0.0.1:3000\n      '';\n    };\n}\n```\n"
  },
  {
    "path": "website/docs/installation/unsupported/debian.md",
    "content": "---\ntitle: Manual install - Debian (no support)\nsidebar_label: Manual - Debian (no support)\n---\n\nThis document provides the necessary steps for installation of TeslaMate on a vanilla Debian or Ubuntu system. The **recommended and most straightforward installation approach is through the use of [Docker](../docker.md)**, however this walkthrough provides the necessary steps for manual installation in an aptitude (Debian/Ubuntu) environment.\n\n## Requirements\n\nClick on the following items to view detailed installation steps.\n\nNote that in very recent distributions, you might have the required versions already packaged. However, the contents or naming of the Debian/Ubuntu packages might slightly differ than the ones from upstream, so you might need to install extra packages or do other tweaks.\n\n<details>\n  <summary>Postgres (v16.7+, v17.3+ or v18.0+)</summary>\n\nEither upstream:\n\n```bash\nwget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -\necho \"deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main\" | sudo tee /etc/apt/sources.list.d/pgdg.list\nsudo apt-get update\nsudo apt-get install -y postgresql-18 postgresql-client-18\n```\n\nSource: [postgresql.org/download](https://www.postgresql.org/download/)\n\nOr if you run a recent enough distribution (e.g. Debian Trixie:):\n\n```bash\nsudo apt install postgresql-17 postgresql-client-17\n```\n\n</details>\n\n<details>\n  <summary>Elixir (v1.17+)</summary>\n\nEither from upstream:\n\n```bash\nwget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb && sudo dpkg -i erlang-solutions_2.0_all.deb\nsudo apt-get update\nsudo apt-get install -y elixir esl-erlang\n```\n\nSource: [erlang.org/downloads](https://www.erlang.org/downloads#prebuilt)\n\nOr if you run a recent enough distribution (e.g. Debian Trixie:):\n\n```bash\nsudo apt install erlang erlang-dev erlang-syntax-tools elixir\n```\n\n</details>\n\n<details>\n  <summary>Grafana (v12.4.0+)</summary>\n\n```bash\nsudo apt-get install -y apt-transport-https software-properties-common\nsudo add-apt-repository \"deb https://packages.grafana.com/oss/deb stable main\"\nwget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -\nsudo apt-get update\nsudo apt-get install -y grafana\nsudo systemctl start grafana-server\nsudo systemctl enable grafana-server.service # to start Grafana at boot time\n```\n\nSource: [grafana.com/docs/installation](https://grafana.com/docs/grafana/latest/installation/)\n\n[Import the Grafana dashboards](#import-grafana-dashboards) after [cloning the TeslaMate git repository](#clone-teslamate-git-repository).\n\n</details>\n\n<details>\n  <summary>An MQTT Broker (e.g. Mosquitto)</summary>\n\n```bash\nsudo apt-get install -y mosquitto\n```\n\nSource: [mosquitto.org/download](https://mosquitto.org/download/)\n\n</details>\n\n<details>\n  <summary>Node.js (v22+)</summary>\n\nEither from upstream:\n\n```bash\ncurl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash -\nsudo apt-get install -y nodejs\n```\n\nSource: [nodejs.org/en/download/package-manager](https://nodejs.org/en/download/package-manager/all#debian-and-ubuntu-based-linux-distributions)\n\nOr if you run a recent enough distribution (e.g. Debian Trixie:):\n\n```bash\nsudo apt install nodejs npm\n```\n\n</details>\n\n## Clone TeslaMate git repository\n\nThe following command will clone the source files for the TeslaMate project. This should be run in an appropriate directory within which you would like to install TeslaMate. You should also record this path and provide them to the startup scripts proposed at the end of this guide.\n\n```bash\ncd /usr/src\n\ngit clone https://github.com/teslamate-org/teslamate.git\ncd teslamate\n\ngit checkout $(git describe --tags `git rev-list --tags --max-count=1`) # Checkout the latest stable version\n```\n\n## Create PostgreSQL database\n\nThe following commands will create a database called `teslamate` on the PostgreSQL database server, and a user called `teslamate`. When creating the `teslamate` user, you will be prompted to enter a password for the user interactively. This password should be recorded and provided as an environment variable in the startup script at the end of this guide.\n\n```console\nsudo -u postgres psql\npostgres=# create database teslamate;\npostgres=# create user teslamate with encrypted password 'your_secure_password_here';\npostgres=# grant all privileges on database teslamate to teslamate;\npostgres=# ALTER USER teslamate WITH SUPERUSER;\npostgres=# \\q\n```\n\n_Note: The superuser privileges can be revoked after running the initial database migrations._\n\n## Compile Elixir Project\n\n```bash\nmix local.hex --force; mix local.rebar --force\n\nmix deps.get --only prod\nnpm install --prefix ./assets && npm run deploy --prefix ./assets\n\nMIX_ENV=prod mix do phx.digest, release --overwrite\n```\n\n### Set your system locale\n\nYou may need to set your system locale. If you get an error when running the TeslaMate service which indicates that you don't have a UTF-8 capable system locale set, run the following commands to set the locale on your system:\n\n```bash\nsudo locale-gen en_US.UTF-8\nsudo localectl set-locale LANG=en_US.UTF-8\n```\n\n## Starting TeslaMate at boot time\n\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n<Tabs\ndefaultValue=\"systemd\"\nvalues={[\n{ label: 'systemd', value: 'systemd', },\n{ label: 'screen', value: 'screen', },\n]}>\n<TabItem value=\"systemd\">\n\nCreate a systemd service at `/etc/systemd/system/teslamate.service`:\n\n```ini\n[Unit]\nDescription=TeslaMate\nAfter=network.target\nAfter=postgresql.service\n\n[Service]\nType=simple\n# User=username\n# Group=groupname\n\nRestart=on-failure\nRestartSec=5\n\nEnvironment=\"HOME=/usr/src/teslamate\"\nEnvironment=\"LANG=en_US.UTF-8\"\nEnvironment=\"LC_CTYPE=en_US.UTF-8\"\nEnvironment=\"TZ=Europe/Berlin\"\nEnvironment=\"PORT=4000\"\nEnvironment=\"ENCRYPTION_KEY=your_secure_encryption_key_here\"\nEnvironment=\"DATABASE_USER=teslamate\"\nEnvironment=\"DATABASE_PASS=#your secure password!\nEnvironment=\"DATABASE_NAME=teslamate\"\nEnvironment=\"DATABASE_HOST=127.0.0.1\"\nEnvironment=\"MQTT_HOST=127.0.0.1\"\n\nWorkingDirectory=/usr/src/teslamate\n\nExecStartPre=/usr/src/teslamate/_build/prod/rel/teslamate/bin/teslamate eval \"TeslaMate.Release.migrate\"\nExecStart=/usr/src/teslamate/_build/prod/rel/teslamate/bin/teslamate start\nExecStop=/usr/src/teslamate/_build/prod/rel/teslamate/bin/teslamate stop\n\n[Install]\nWantedBy=multi-user.target\n```\n\n- `MQTT_HOST` should be the IP address of your MQTT broker. If you do not have one installed, the MQTT functionality can be disabled with `DISABLE_MQTT=true`.\n- `TZ` should be your local timezone. Work out your timezone name using the [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) in the linked Wikipedia page.\n\nStart the service:\n\n```bash\nsudo systemctl start teslamate\n```\n\nAnd automatically get it to start on boot:\n\n```bash\nsudo systemctl enable teslamate\n```\n\n</TabItem>\n<TabItem value=\"screen\">\n\nCreate the following file: `/usr/local/bin/teslamate-start.sh`\n\nYou should at least substitute the following details:\n\n- `MQTT_HOST` should be the IP address of your MQTT broker. If you do not have one installed, the MQTT functionality can be disabled with 'DISABLE_MQTT=true'.\n- `TZ` should be your local timezone. Work out your timezone name using the [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) in the linked Wikipedia page.\n- `TESLAMATEPATH` should be the path that you ran the `git clone` within.\n\n```bash\nexport ENCRYPTION_KEY=\"your_secure_encryption_key_here\"\nexport DATABASE_USER=\"teslamate\"\nexport DATABASE_PASS=\"your_secure_password_here\"\nexport DATABASE_HOST=\"127.0.0.1\"\nexport DATABASE_NAME=\"teslamate\"\nexport MQTT_HOST=\"127.0.0.1\"\nexport MQTT_USERNAME=\"teslamate\"\nexport MQTT_PASSWORD=\"teslamate\"\nexport MQTT_TLS=\"false\"\nexport TZ=\"Europe/Berlin\"\nexport TESLAMATEPATH=/usr/src/teslamate\n\n$TESLAMATEPATH/_build/prod/rel/teslamate/bin/teslamate start\n```\n\nThe following command needs to be run once during the installation process in order to create the database schema for the TeslaMate installation:\n\n```bash\nexport ENCRYPTION_KEY=\"your_secure_encryption_key_here\"\nexport DATABASE_USER=\"teslamate\"\nexport DATABASE_PASS=\"your_secure_password_here\"\nexport DATABASE_HOST=\"127.0.0.1\"\nexport DATABASE_NAME=\"teslamate\"\n_build/prod/rel/teslamate/bin/teslamate eval \"TeslaMate.Release.migrate\"\n```\n\nAdd the following to /etc/rc.local, to start a screen session at boot time and run the TeslaMate server within a screen session. This lets you interactively connect to the session if needed.\n\n```bash\n# Start TeslaMate\ncd /usr/src/teslamate\nscreen -S teslamate -L -dm bash -c \"cd /usr/src/teslamate; ./start.sh; exec sh\"\n```\n\n</TabItem>\n</Tabs>\n\n## Import Grafana Dashboards\n\n1. Visit [localhost:3000](http://localhost:3000) and log in. The default credentials are: `admin:admin`.\n\n2. Create a data source with the name \"TeslaMate\":\n\n   ```grafana\n   Type: PostgreSQL\n   Default: YES\n   Name: TeslaMate\n   Host: localhost\n   Database: teslamate\n   User: teslamate  Password: your_secure_password_here\n   SSL-Mode: disable\n   Version: 10\n   ```\n\n3. Install `jq`:\n\n   ```bash\n   sudo apt install jq\n   ```\n\n4. [Manually import](https://grafana.com/docs/reference/export_import/#importing-a-dashboard) the dashboard [files](https://github.com/teslamate-org/teslamate/tree/main/grafana/dashboards) or use the `dashboards.sh` script. First create a \"Service Account\" called `TeslaMate` under Grafana's Administration > User and access menu. Then create an API token for this service account (in place of `<mytoken>` below) and run the script:\n\n   ```bash\n   $ env GRAFANA_API_TOKEN=<mytoken> ./grafana/dashboards.sh restore\n\n   URL:                    http://localhost:3000\n   GRAFANA_API_TOKEN:      mytoken\n   DASHBOARDS_DIRECTORY:   ./grafana/dashboards\n   GRAFANA_ORG_NAMESPACE:  default\n\n   RESTORED locations.json into Grafana folder 'TeslaMate' ...\n   RESTORED drive-stats.json into Grafana folder 'TeslaMate' ...\n   ...\n   ```\n\n   :::tip\n   To point to a different Grafana instance use the URL variable:\n\n   ```bash\n   env URL=https://mygrafana.example.net GRAFANA_API_TOKEN=<mytoken> ./grafana/dashboards.sh restore\n   ```\n\n   :::\n\n   :::tip\n   In case you use a Grafana installation that runs on a separate server (for\n   example, an already existing Grafana install), set the `URL` variable to\n   point to it (the default points to `http://localhost:3000`, use a full URL,\n   including protocol, host and port):\n\n   ```bash\n   URL=<your-grafana-instance-url> ./grafana/dashboards.sh restore\n   ```\n\n   :::\n"
  },
  {
    "path": "website/docs/installation/unsupported/freebsd.md",
    "content": "---\ntitle: Manual install - FreeBSD (no support)\nsidebar_label: Manual - FreeBSD (no support)\n---\n\nThis document provides the necessary steps for installation of TeslaMate in a FreeBSD jail. The **recommended and most straightforward installation approach is through the use of [Docker](../docker.md)**, however this walkthrough provides the necessary steps for manual installation in a FreeBSD 13.0 environment.\nIt assumes that pre-requisites are met and only basic instructions are provided and should also work in FreeBSD before 13.0.\n\n## Requirements\n\nClick on the following items to view detailed installation steps.\n\n<details>\n  <summary>bash & jq</summary>\n\n```bash\npkg install bash jq\nbash\n```\n\nFor simplicity reasons, follow the rest of the tutorial in bash rather the csh.\n\n</details>\n\n<details>\n  <summary>git</summary>\n\n```bash\npkg install git\n```\n\n</details>\n\n<details>\n  <summary>Erlang (v26+)</summary>\n\n```bash\npkg install erlang\n```\n\n</details>\n\n<details>\n  <summary>Elixir (v1.17+)</summary>\n\n```bash\npkg install elixir\n```\n\n</details>\n\n<details>\n  <summary>Postgres (v16.7+, v17.3+ or v18.0+)</summary>\n\n```bash\npkg install postgresql18-server\npkg install postgresql18-contrib\necho postgres_enable=\"yes\" >> /etc/rc.conf\n```\n\n</details>\n\n<details>\n  <summary>Initialize the database</summary>\n\n```bash\nservice postgresql initdb\n```\n\n</details>\n\n<details>\n  <summary>Grafana (v12.3.0+)</summary>\n\n```bash\npkg install grafana\necho grafana_enable=\"yes\" >> /etc/rc.conf\n```\n\n</details>\n\n<details>\n  <summary>An MQTT Broker (e.g. Mosquitto)</summary>\n\n```bash\npkg install mosquitto\necho mosquitto_enable=\"yes\" >> /etc/rc.conf\n```\n\n</details>\n\n<details>\n  <summary>Node.js (v22+)</summary>\n\n```bash\npkg install node22\npkg install npm-node22\n```\n\n</details>\n\n## Clone TeslaMate git repository\n\nThe following command will clone the source files for the TeslaMate project. This should be run in an appropriate directory within which you would like to install TeslaMate. You should also record this path and provide them to the startup scripts proposed at the end of this guide.\n\n```bash\ncd /usr/local/src\n\ngit clone https://github.com/teslamate-org/teslamate.git\ncd teslamate\n\ngit checkout $(git describe --tags `git rev-list --tags --max-count=1`) # Checkout the latest stable version\n```\n\n## Create PostgreSQL database\n\nThe following commands will create a database called `teslamate` on the PostgreSQL database server, and a user called `teslamate`. When creating the `teslamate` user, you will be prompted to enter a password for the user interactively. This password should be recorded and provided as an environment variable in the startup script at the end of this guide. Use 'su - postgres' if unable to enter psql console from current user.\n\n```console\npsql\npostgres=# create database teslamate;\npostgres=# create user teslamate with encrypted password 'your_secure_password_here';\npostgres=# grant all privileges on database teslamate to teslamate;\npostgres=# ALTER USER teslamate WITH SUPERUSER;\npostgres=# \\q\n```\n\n_Note: The superuser privileges can be revoked after running the initial database migrations._\n\n## Compile Elixir Project\n\n```bash\nmix local.hex --force; mix local.rebar --force\n\nmix deps.get --only prod\nnpm install --prefix ./assets && npm run deploy --prefix ./assets\n\nexport MIX_ENV=prod\nmix do phx.digest, release --overwrite\n```\n\n## Starting TeslaMate at boot time\n\n### Create FreeBSD service definition _/usr/local/etc/rc.d/teslamate_\n\n```console\n#!/bin/sh\n# PROVIDE: teslamate\n# REQUIRE: DAEMON\n# KEYWORD: teslamate,tesla\n\n. /etc/rc.subr\n\nname=teslamate\nrcvar=teslamate_enable\n\nload_rc_config $name\n\nuser=teslamate\ngroup=teslamate\n\n#\n# DO NOT CHANGE THESE DEFAULT VALUES HERE\n# SET THEM IN THE /etc/rc.conf FILE\n#\nteslamate_enable=${teslamate_enable-\"NO\"}\npidfile=${teslamate_pidfile-\"/var/run/${name}.pid\"}\n\nteslamate_enable_mqtt=${teslamate_enable_mqtt-\"FALSE\"}\nteslamate_db_port=${teslamate_db_port-\"5432\"}\n\nHTTP_BINDING_ADDRESS=\"0.0.0.0\"; export HTTP_BINDING_ADDRESS\nHOME=\"/usr/local/src/teslamate\"; export HOME\nPORT=${teslamate_port-\"4000\"}; export PORT\nTZ=${teslamate_timezone-\"Europe/Berlin\"}; export TZ\nLANG=${teslamate_locale-\"en_US.UTF-8\"}; export LANG\nLC_CTYPE=${teslamate_locale-\"en_US.UTF-8\"}; export LC_TYPE\nDATABASE_NAME=${teslamate_db-\"teslamate\"}; export DATABASE_NAME\nDATABASE_HOST=${teslamate_db_host-\"localhost\"}; export DATABASE_HOST\nDATABASE_USER=${teslamate_db_user-\"teslamate\"}; export DATABASE_USER\nDATABASE_PASS=${teslamate_db_pass}; export DATABASE_PASS\nENCRYPTION_KEY=${teslamate_encryption_key}; export ENCRYPTION_KEY\nDISABLE_MQTT=${teslamate_mqtt_enable-\"FALSE\"}; export DISABLE_MQTT\nMQTT_HOST=${teslamate_mqtt_host-\"localhost\"}; export MQTT_HOST\n# Uncomment if you need these\n#MQTT_USERNAME=${teslamate_mqtt_user-\"teslamate\"}; export MQTT_USERNAME\n#MQTT_PASSWORD=${teslamate_mqtt_pass-\"mqttpassword\"}; export MQTT_PASSWORD\nVIRTUAL_HOST=${teslamate_virtual_host-\"teslamate.example.com\"}; export VIRTUAL_HOST\n\nCOMMAND=${teslamate_command-\"${HOME}/_build/prod/rel/teslamate/bin/teslamate\"}\n\nteslamate_start()\n{\n  ${COMMAND} eval \"TeslaMate.Release.migrate\"\n  ${COMMAND} daemon\n}\n\nstart_cmd=\"${name}_start\"\nstop_cmd=\"${COMMAND} stop\"\nstatus_cmd=\"${COMMAND} pid\"\n\nrun_rc_command \"$1\"\n```\n\n### Update _/etc/rc.conf_\n\n```bash\necho teslamate_enable=\"YES\" >> /etc/rc.conf\necho teslamate_db_host=\"localhost\"  >> /etc/rc.conf\necho teslamate_db_port=\"5432\"  >> /etc/rc.conf\necho teslamate_db_pass=\"<super secret>\" >> /etc/rc.conf\necho teslamate_encryption_key=\"<super secret encryption key>\" >> /etc/rc.conf\necho teslamate_disable_mqtt=\"true\" >> /etc/rc.conf\necho teslamate_timezone=\"<TZ Database>\" >> /etc/rc.conf #i.e. Europe/Berlin, America/Los_Angeles\n```\n\n### Start service\n\n```bash\nchmod +x /usr/local/etc/rc.d/teslamate\nservice teslamate start\n```\n\n## Import Grafana Dashboards\n\n1. Visit [localhost:3000](http://localhost:3000) and log in (don't forget to start the service: service grafana start). The default credentials are: `admin:admin`.\n\n2. Create a data source with the name \"TeslaMate\":\n\n   ```grafana\n   Type: PostgreSQL\n   Default: YES\n   Name: TeslaMate\n   Host: localhost\n   Database: teslamate\n   User: teslamate  Password: your_secure_password_here\n   SSL-Mode: disable\n   Version: 10\n   ```\n\n3. [Manually import](https://grafana.com/docs/reference/export_import/#importing-a-dashboard) the dashboard [files](https://github.com/teslamate-org/teslamate/tree/main/grafana/dashboards) or use the `dashboards.sh` script. First create a \"Service Account\" called `TeslaMate` under Grafana's Administration > User and access menu. Then create an API token for this service account (in place of `<mytoken>` below) and run the script:\n\n   ```bash\n   $ env GRAFANA_API_TOKEN=<mytoken> ./grafana/dashboards.sh restore\n\n   URL:                    http://localhost:3000\n   GRAFANA_API_TOKEN:      mytoken\n   DASHBOARDS_DIRECTORY:   ./grafana/dashboards\n   GRAFANA_ORG_NAMESPACE:  default\n\n   RESTORED locations.json into Grafana folder 'TeslaMate' ...\n   RESTORED drive-stats.json into Grafana folder 'TeslaMate' ...\n   ...\n   ```\n\n   :::tip\n   To point to a different Grafana instance use the URL variable:\n\n   ```bash\n   env URL=https://mygrafana.example.net GRAFANA_API_TOKEN=<mytoken> ./grafana/dashboards.sh restore\n   ```\n\n   :::\n"
  },
  {
    "path": "website/docs/installation/unsupported/unraid.md",
    "content": "---\ntitle: Unraid install (no support)\nsidebar_label: Unraid (no support)\n---\n\nThis document provides the necessary steps for installation of TeslaMate on Unraid. You can either:\n\n- use [Docker Compose for Unraid](https://docs.ibracorp.io/docker-compose/docker-compose-for-unraid) and follow the [Docker Compose installation guide](installation/docker.md) to set up TeslaMate, which is the recommended method and is supported,\n- or install the containers individually using the Unraid Community Apps store, without any support.\n\n## Requirements\n\n- Existing Unraid install on v6 or higher with Docker service enabled\n- Community Apps store installed\n- appdata share configured\n- External internet access, to talk to tesla.com\n\n## Installation\n\nUnlike the Compose installation which sets up the following containers in one go, you can install and configure each container individually from Community Apps.\n\n### Postgres\n\n1. Go to the Apps tab for the Community Apps and search for postgresql17 (current version supported) and click install.\n2. Verify that no other applications are running on port `5432`\n3. Pick a password of your choosing for the database\n4. Set `POSTGRES_USER` to `teslamate`\n5. Set `POSTGRES_DB` to `teslamate`\n6. Click apply and set the container to autostart.\n\n### Mosquitto\n\n1. Go to the Apps tab for the Community Apps and search for mosquitto (for example cmccambridge repository) and click install.\n2. Verify that no other applications are running on port `1883`\n3. Default template options are mostly fine.\n4. Click apply and set the container to autostart.\n\n### TeslaMate\n\n1. Go to the Apps tab for the Community Apps and search for TeslaMate and click install.\n2. Verify that no other applications are running on port `4000`\n3. **Choose a secure encryption key** that will be used to encrypt your Tesla API tokens (insert as `ENCRYPTION_KEY`).\n4. Set the postgres user to `teslamate` and the postgres password to your password from the postgres setup\n5. Set the database `teslamate` to match the previous config\n6. Set the MQTT host to the IP address of your Unraid server\n7. Create an MQTT user and password (required since the default setup is secure)\n8. Click apply and optionally set the container to autostart\n\n### TeslaMate-Grafana\n\n1. Go to the Apps tab for the Community Apps and search for TeslaMate Grafana and click install.\n2. Verify that no other applications are running on port `3000` (such as another Grafana instance). If so, specify a different port like 3333\n3. Specify the teslamate database name, username, and password\n4. Set the IP of your Unraid server for the host.\n5. Click apply and optionally set the container to autostart\n\n## Usage\n\n1. Open the web interface [http://your-ip-address:4000](http://localhost:4000) or click on the TeslaMate icon and select WebUI.\n2. Sign in with your Tesla Account\n3. The Grafana dashboards are available at [http://your-ip-address:3000](http://localhost:3000). Log in with the default user `admin` (initial password `admin`) and enter a secure password.\n\n## Update\n\nCheck out the [release notes](https://github.com/teslamate-org/teslamate/releases) before upgrading!\nTo update the running TeslaMate configuration to the latest version, go back to the Apps tab and wait for the Action Center to notify of new updates. Under no circumstances use the Auto Update Applications plugin, as it can easily break your setup, and you won't get any support.\n\n## Unraid Backup and Restore when choosing the individual installation method\n\n### User Scripts Plugin\n\nGo to the Apps tab and search for the User Scripts plugin and install. The plugin can then be accessed from the Settings menu.\n\n### Backup\n\nIn the User Scripts plugin, click the Add New Script button. Give the script a name such as `TeslaMate Backup`\n\nClick the gear icon next to the name and Edit Script.\n\nCopy and paste in the following script:\n\n```bash\n#!/bin/bash\n\n# Check if array is started\nls /mnt/disk[1-9]* 1>/dev/null 2>/dev/null\nif [ $? -ne 0 ]\nthen\n   echo \"ERROR:  Array must be started before using this script\"\n   exit\nfi\n\n\nBACKUP_DIR=\"/mnt/user/backups/SQL/postgres17\"\n\ndatabases=`docker exec postgresql17 psql -U teslamate teslamate -l -t | cut -d'|' -f1 | sed -e 's/ //g' -e '/^$/d'`\n\nfor db in $databases; do  if [ \"$db\" != \"postgres\" ] && [ \"$db\" != \"template0\" ] && [ \"$db\" != \"template1\" ] && [ \"$db\" != \"template_postgis\" ]; then\n    FOLDER=$BACKUP_DIR/$db\n\n    echo \"Backing up $db\"\n    mkdir -p \"$FOLDER\"\n\n    FILENAME=${db}_$(date +%A).sql\n    FILEPATH=$FOLDER/$FILENAME\n    docker exec postgresql17 pg_dump --clean -h 127.0.0.1 -U teslamate -d $db > $FILEPATH\n    tar czf $FILEPATH.tgz -C $FOLDER $FILENAME\n    rm $FILEPATH\n    fi\ndone\n\nfind $BACKUP_DIR/ -type f -name '*.tgz' -mtime +7 -exec rm {} \\;\n```\n\n:::note\nChange the `BACKUP_DIR` path to a share on your server where you want to save backups. Make sure you have the mover settings configured correctly on your share or also have some other backup process for these files since they are still on your server.\n:::\n\n:::note\nIf you changed `DB_USER` in the template from one of the advanced guides, make sure to replace the first instance of `teslamate` and again after the -U in in the above command.\n:::\n\nClick **RUN SCRIPT** to test and verify that it works. If you are satisfied, you can select Scheduled Daily from the drop-down to run the cron job every day and create a backup file every day with the day of the week in the file name. Make sure to the click **Run in Background**\n\n### Restore\n\n1. Manually stop all TeslaMate docker containers (TeslaMate-Grafana, TeslaMate).\n2. In the User Scripts plugin, click the Add New Script button. Give the script a name such as `TeslaMate Restore`\n3. Click the gear icon next to the name and Edit Script.\n4. Copy and paste the following script and then Click **RUN SCRIPT**\n\n```bash\n#!/bin/bash\n\n# Define backup directory\nBACKUP_DIR=\"/mnt/user/backups/SQL/postgres17\"\nDB_CONTAINER=\"postgresql17\"\nDB_NAME=\"teslamate\"\nDB_USER=\"teslamate\"\n\n# Check if array is started\nls /mnt/disk[1-9]* 1>/dev/null 2>/dev/null\nif [ $? -ne 0 ]; then\n  echo \"ERROR: Array must be started before using this script\"\n  exit 1\nfi\n\n# Check if backup directory exists\nif [ ! -d \"$BACKUP_DIR\" ]; then\n  echo \"ERROR: Backup directory $BACKUP_DIR does not exist\"\n  exit 1\nfi\n\n# Find the most recent backup\necho \"Finding the most recent backup...\"\nSELECTED_BACKUP=$(find \"$BACKUP_DIR\" -type f -name '*.tgz' -printf '%T@ %p\\n' | sort -n | tail -1 | cut -d' ' -f2-)\n\nif [ -z \"$SELECTED_BACKUP\" ]; then\n  echo \"No backups found.\"\n  exit 1\nfi\n\necho \"Selected backup: $SELECTED_BACKUP\"\n\n# Create a temporary directory for restore\nTMP_DIR=$(mktemp -d)\n\necho \"Extracting backup...\"\ntar xzf \"$SELECTED_BACKUP\" -C \"$TMP_DIR\"\nSQL_FILE=$(find \"$TMP_DIR\" -name '*.sql')\n\nif [ ! -f \"$SQL_FILE\" ]; then\n  echo \"ERROR: SQL file not found after extracting backup.\"\n  rm -r \"$TMP_DIR\"\n  exit 1\nfi\n\n# Stop the application container to avoid conflicts\necho \"Stopping TeslaMate container...\"\ndocker stop teslamate\n\n# Drop and recreate public schema\necho \"Resetting database...\"\ndocker exec -i \"$DB_CONTAINER\" psql -U \"$DB_USER\" \"$DB_NAME\" <<SQL\nDROP SCHEMA public CASCADE;\nDROP SCHEMA private CASCADE;\nCREATE SCHEMA public;\nCREATE EXTENSION cube WITH SCHEMA public;\nCREATE EXTENSION earthdistance WITH SCHEMA public;\nSQL\n\nif [ $? -ne 0 ]; then\n  echo \"ERROR: Database reset failed. Aborting restore.\"\n  docker start teslamate\n  rm -r \"$TMP_DIR\"\n  exit 1\nfi\n\n# Restore the backup\necho \"Restoring backup...\"\ndocker exec -i \"$DB_CONTAINER\" psql -U \"$DB_USER\" \"$DB_NAME\" < \"$SQL_FILE\"\n\n# Restart the application container\necho \"Starting TeslaMate container...\"\ndocker start teslamate\n\n# Clean up\nrm -r \"$TMP_DIR\"\n\necho \"Restore completed successfully.\"\n```\n\n:::note\nReplace the `BACKUP_DIR` value with the value defined in the previous backup file.\n:::\n\n:::note\nReplace the `DB_CONTAINER` value with the name of the container you want the restore to go **to**.\n:::\n\n:::note\nReplace the default `teslamate` value below with the value defined in the template if you have one (DB_USER and DB_NAME)\n:::\n\n### Postgres Upgrade\n\n1. Run the Backup script\n2. Go to the Apps tab and search for the latest recommended postgres version and install a new container instance. Then shut it down.\n3. Edit the Restore script `DB_CONTAINER` with the name of the new postgres container you just installed and specify the `BACKUP_DIR`\n4. Click RUN SCRIPT\n5. Select the backup file you want to restore.\n6. Start the new postgres, TeslaMate, and TeslaMate-Grafana containers and verify that your data is correct.\n7. When you are certain everything is working as expected, you can delete the old postgres container and image (optional)\n"
  },
  {
    "path": "website/docs/integrations/Node-RED/Teslamate-flows.json.example",
    "content": "[{\r\n        \"id\": \"868e4cd7.9fc578\",\r\n        \"type\": \"tab\",\r\n        \"label\": \"Car Dashboards\",\r\n        \"disabled\": false,\r\n        \"info\": \"\"\r\n    }, {\r\n        \"id\": \"88633c3e.1b273\",\r\n        \"type\": \"tab\",\r\n        \"label\": \"Notifications\",\r\n        \"disabled\": false,\r\n        \"info\": \"\"\r\n    }, {\r\n        \"id\": \"f017ed81.199d2\",\r\n        \"type\": \"ui_tab\",\r\n        \"name\": \"Tesla\",\r\n        \"icon\": \"dashboard\",\r\n        \"order\": 1,\r\n        \"disabled\": false,\r\n        \"hidden\": false\r\n    }, {\r\n        \"id\": \"2cca3d1a.be10ba\",\r\n        \"type\": \"ui_group\",\r\n        \"name\": \"Charge Status\",\r\n        \"tab\": \"f017ed81.199d2\",\r\n        \"order\": 2,\r\n        \"disp\": true,\r\n        \"width\": \"6\",\r\n        \"collapse\": false\r\n    }, {\r\n        \"id\": \"51eafba7.ffc054\",\r\n        \"type\": \"ui_group\",\r\n        \"name\": \"Car Status\",\r\n        \"tab\": \"f017ed81.199d2\",\r\n        \"order\": 1,\r\n        \"disp\": true,\r\n        \"width\": \"8\",\r\n        \"collapse\": false\r\n    }, {\r\n        \"id\": \"ed12f72a.03fad\",\r\n        \"type\": \"telegram bot\",\r\n        \"botname\": \"pmb_tesla_bot\",\r\n        \"usernames\": \"\",\r\n        \"chatids\": \"\",\r\n        \"baseapiurl\": \"\",\r\n        \"updatemode\": \"polling\",\r\n        \"pollinterval\": \"300\",\r\n        \"usesocks\": false,\r\n        \"sockshost\": \"\",\r\n        \"socksport\": \"6667\",\r\n        \"socksusername\": \"anonymous\",\r\n        \"sockspassword\": \"\",\r\n        \"bothost\": \"\",\r\n        \"botpath\": \"\",\r\n        \"localbotport\": \"8443\",\r\n        \"publicbotport\": \"8443\",\r\n        \"privatekey\": \"\",\r\n        \"certificate\": \"\",\r\n        \"useselfsignedcertificate\": false,\r\n        \"sslterminated\": false,\r\n        \"verboselogging\": false,\r\n        \"info\": \"159696647614\"\r\n    }, {\r\n        \"id\": \"acbce132.6eef4\",\r\n        \"type\": \"mqtt-broker\",\r\n        \"name\": \"mosquitto\",\r\n        \"broker\": \"mosquitto\",\r\n        \"port\": \"1883\",\r\n        \"clientid\": \"\",\r\n        \"usetls\": false,\r\n        \"protocolVersion\": \"4\",\r\n        \"keepalive\": \"60\",\r\n        \"cleansession\": true,\r\n        \"birthTopic\": \"\",\r\n        \"birthQos\": \"0\",\r\n        \"birthPayload\": \"\",\r\n        \"birthMsg\": {},\r\n        \"closeTopic\": \"\",\r\n        \"closeQos\": \"0\",\r\n        \"closePayload\": \"\",\r\n        \"closeMsg\": {},\r\n        \"willTopic\": \"\",\r\n        \"willQos\": \"0\",\r\n        \"willPayload\": \"\",\r\n        \"willMsg\": {},\r\n        \"sessionExpiry\": \"\"\r\n    }, {\r\n        \"id\": \"405404f2.d8a094\",\r\n        \"type\": \"ui_base\",\r\n        \"theme\": {\r\n            \"name\": \"theme-light\",\r\n            \"lightTheme\": {\r\n                \"default\": \"#0094CE\",\r\n                \"baseColor\": \"#0094CE\",\r\n                \"baseFont\": \"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif\",\r\n                \"edited\": true,\r\n                \"reset\": false\r\n            },\r\n            \"darkTheme\": {\r\n                \"default\": \"#097479\",\r\n                \"baseColor\": \"#097479\",\r\n                \"baseFont\": \"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif\",\r\n                \"edited\": false\r\n            },\r\n            \"customTheme\": {\r\n                \"name\": \"Untitled Theme 1\",\r\n                \"default\": \"#4B7930\",\r\n                \"baseColor\": \"#4B7930\",\r\n                \"baseFont\": \"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif\"\r\n            },\r\n            \"themeState\": {\r\n                \"base-color\": {\r\n                    \"default\": \"#0094CE\",\r\n                    \"value\": \"#0094CE\",\r\n                    \"edited\": false\r\n                },\r\n                \"page-titlebar-backgroundColor\": {\r\n                    \"value\": \"#0094CE\",\r\n                    \"edited\": false\r\n                },\r\n                \"page-backgroundColor\": {\r\n                    \"value\": \"#fafafa\",\r\n                    \"edited\": false\r\n                },\r\n                \"page-sidebar-backgroundColor\": {\r\n                    \"value\": \"#ffffff\",\r\n                    \"edited\": false\r\n                },\r\n                \"group-textColor\": {\r\n                    \"value\": \"#1bbfff\",\r\n                    \"edited\": false\r\n                },\r\n                \"group-borderColor\": {\r\n                    \"value\": \"#ffffff\",\r\n                    \"edited\": false\r\n                },\r\n                \"group-backgroundColor\": {\r\n                    \"value\": \"#ffffff\",\r\n                    \"edited\": false\r\n                },\r\n                \"widget-textColor\": {\r\n                    \"value\": \"#111111\",\r\n                    \"edited\": false\r\n                },\r\n                \"widget-backgroundColor\": {\r\n                    \"value\": \"#0094ce\",\r\n                    \"edited\": false\r\n                },\r\n                \"widget-borderColor\": {\r\n                    \"value\": \"#ffffff\",\r\n                    \"edited\": false\r\n                },\r\n                \"base-font\": {\r\n                    \"value\": \"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif\"\r\n                }\r\n            },\r\n            \"angularTheme\": {\r\n                \"primary\": \"indigo\",\r\n                \"accents\": \"blue\",\r\n                \"warn\": \"red\",\r\n                \"background\": \"grey\",\r\n                \"palette\": \"light\"\r\n            }\r\n        },\r\n        \"site\": {\r\n            \"name\": \"Node-RED Dashboard\",\r\n            \"hideToolbar\": \"false\",\r\n            \"allowSwipe\": \"false\",\r\n            \"lockMenu\": \"false\",\r\n            \"allowTempTheme\": \"true\",\r\n            \"dateFormat\": \"DD/MM/YYYY\",\r\n            \"sizes\": {\r\n                \"sx\": 48,\r\n                \"sy\": 48,\r\n                \"gx\": 6,\r\n                \"gy\": 6,\r\n                \"cx\": 6,\r\n                \"cy\": 6,\r\n                \"px\": 0,\r\n                \"py\": 0\r\n            }\r\n        }\r\n    }, {\r\n        \"id\": \"94fe8f4d.0557d\",\r\n        \"type\": \"function\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"make time remaining string\",\r\n        \"func\": \"var t = global.get('state');\\nvar remaining = msg.payload.split('.');\\nvar minutes = Math.ceil(60 * Number(\\\".\\\" + remaining[1]));\\nif(t[0] != 'charging'){\\n    msg.payload = \\\"Not charging\\\";\\n} else if(remaining[0] > 0){\\n    msg.payload = `${remaining[0]} hours ${minutes} minutes`\\n} else {\\n    msg.payload = `${minutes} minutes`\\n}\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"x\": 740,\r\n        \"y\": 220,\r\n        \"wires\": [[\"efe44f3.124a93\"]]\r\n    }, {\r\n        \"id\": \"d09c3311.862ff\",\r\n        \"type\": \"function\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"get time\",\r\n        \"func\": \"var d = new Date();\\nmsg.payload = d;\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"x\": 180,\r\n        \"y\": 380,\r\n        \"wires\": [[\"7b0d22a9.903e24\"]]\r\n    }, {\r\n        \"id\": \"2e575816.e13368\",\r\n        \"type\": \"link in\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"update-time\",\r\n        \"links\": [\"8491f8d1.1365f8\"],\r\n        \"x\": 85,\r\n        \"y\": 381,\r\n        \"wires\": [[\"d09c3311.862ff\"]]\r\n    }, {\r\n        \"id\": \"8491f8d1.1365f8\",\r\n        \"type\": \"link out\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"topic-stored\",\r\n        \"links\": [\"2e575816.e13368\", \"cb1580bf.27615\"],\r\n        \"x\": 395,\r\n        \"y\": 240,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"22bcecd8.fac734\",\r\n        \"type\": \"switch\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"\",\r\n        \"property\": \"topic\",\r\n        \"propertyType\": \"msg\",\r\n        \"rules\": [{\r\n                \"t\": \"eq\",\r\n                \"v\": \"charge_limit_soc\",\r\n                \"vt\": \"str\"\r\n            }, {\r\n                \"t\": \"eq\",\r\n                \"v\": \"usable_battery_level\",\r\n                \"vt\": \"str\"\r\n            }, {\r\n                \"t\": \"cont\",\r\n                \"v\": \"battery_range_km\",\r\n                \"vt\": \"str\"\r\n            }, {\r\n                \"t\": \"eq\",\r\n                \"v\": \"time_to_full_charge\",\r\n                \"vt\": \"str\"\r\n            }, {\r\n                \"t\": \"else\"\r\n            }, {\r\n                \"t\": \"regex\",\r\n                \"v\": \"charger_*\",\r\n                \"vt\": \"str\",\r\n                \"case\": false\r\n            }\r\n        ],\r\n        \"checkall\": \"true\",\r\n        \"repair\": false,\r\n        \"outputs\": 6,\r\n        \"x\": 490,\r\n        \"y\": 140,\r\n        \"wires\": [[\"dda683ce.b5166\"], [\"3db79d48.c4c322\"], [\"cc9cc37a.5f4a78\"], [\"94fe8f4d.0557d\", \"4e84bee.72facc\"], [\"5599954f.8ecf84\"], [\"cc9cc37a.5f4a78\"]]\r\n    }, {\r\n        \"id\": \"4123d5c1.d02dcc\",\r\n        \"type\": \"mqtt in\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"\",\r\n        \"topic\": \"teslamate/cars/1/#\",\r\n        \"qos\": \"2\",\r\n        \"datatype\": \"auto\",\r\n        \"broker\": \"acbce132.6eef4\",\r\n        \"nl\": false,\r\n        \"rap\": false,\r\n        \"x\": 120,\r\n        \"y\": 140,\r\n        \"wires\": [[\"892aaba0.903858\"]]\r\n    }, {\r\n        \"id\": \"892aaba0.903858\",\r\n        \"type\": \"function\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"store topic\",\r\n        \"func\": \"var short_topic = msg.topic.substring(17);\\n\\n// create object to be used by Grafana data source\\nvar tmp = [];\\ntmp.push(msg.payload);\\ntmp.push(parseInt(new Date().getTime()));\\nglobal.set(short_topic,tmp);\\nmsg.topic = short_topic;\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"x\": 310,\r\n        \"y\": 140,\r\n        \"wires\": [[\"22bcecd8.fac734\", \"8491f8d1.1365f8\"]]\r\n    }, {\r\n        \"id\": \"ce57ad0f.660c1\",\r\n        \"type\": \"switch\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"\",\r\n        \"property\": \"topic\",\r\n        \"propertyType\": \"msg\",\r\n        \"rules\": [{\r\n                \"t\": \"regex\",\r\n                \"v\": \"est_*\",\r\n                \"vt\": \"str\",\r\n                \"case\": false\r\n            }, {\r\n                \"t\": \"regex\",\r\n                \"v\": \"ideal_*\",\r\n                \"vt\": \"str\",\r\n                \"case\": false\r\n            }, {\r\n                \"t\": \"regex\",\r\n                \"v\": \"charger_actual_*\",\r\n                \"vt\": \"str\",\r\n                \"case\": false\r\n            }, {\r\n                \"t\": \"regex\",\r\n                \"v\": \"charger_power*\",\r\n                \"vt\": \"str\",\r\n                \"case\": false\r\n            }\r\n        ],\r\n        \"checkall\": \"true\",\r\n        \"repair\": false,\r\n        \"outputs\": 4,\r\n        \"x\": 872,\r\n        \"y\": 178,\r\n        \"wires\": [[\"ad15c026.1d1d6\"], [\"6ab267e6.5e4b78\"], [\"2ec008a.2fb84f8\"], [\"23ca2a1b.ce5fce\"]]\r\n    }, {\r\n        \"id\": \"5599954f.8ecf84\",\r\n        \"type\": \"function\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"fill state table\",\r\n        \"func\": \"var interesting = [\\n    'state',\\n    'odometer',\\n    'locked',\\n    'shift_state',\\n    'is_user_present'\\n    ];\\nvar tmp = [];\\nvar keys = global.keys().sort();\\nfor (var key in keys ) {\\n    //if(!interesting.includes(keys[key]))\\n      //  next;\\n    var t = global.get(keys[key]);\\n    var row = {\\n        \\\"key\\\": keys[key],\\n        \\\"value\\\": t[0]\\n    }\\n    tmp.push(row);\\n}   \\nmsg.payload = tmp;\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"x\": 690,\r\n        \"y\": 275,\r\n        \"wires\": [[\"366025db.df598a\"]]\r\n    }, {\r\n        \"id\": \"4e84bee.72facc\",\r\n        \"type\": \"link out\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"Charge time remaining\",\r\n        \"links\": [\"cb1580bf.27615\"],\r\n        \"x\": 815,\r\n        \"y\": 360,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"5bf1c557.464144\",\r\n        \"type\": \"function\",\r\n        \"z\": \"88633c3e.1b273\",\r\n        \"name\": \"state changes\",\r\n        \"func\": \"var new_state = msg.payload;\\nvar previous_state = \\\"\\\";\\n\\nnode.warn(msg.topic + \\\": \\\" + msg.payload);\\n\\nswitch(msg.topic){\\n\\tcase 'state':\\n\\t\\tprevious_state = flow.get('state');\\n\\t\\tflow.set('state',new_state);\\n        if(new_state != 'driving' && previous_state != 'driving') \\n            return;\\n\\t\\tif(previous_state != new_state)\\n\\t\\t\\tmsg.topic = `Tesla state changed from *${previous_state}* to *${new_state}*`\\n\\t\\telse\\n\\t\\t\\treturn;\\n\\t\\tbreak;\\n/*\\tcase 'shift_state':\\n\\t    if(msg.payload === \\\"\\\") return;\\n        msg.topic = `Tesla changed gear to ${msg.payload}`\\n\\t\\tbreak;\\n*/\\n    case 'is_user_present':\\n\\t\\tprevious_state = flow.get('is_user_present');\\n\\t\\tnew_state = msg.payload;\\n\\t\\tflow.set('is_user_present',new_state);\\n\\n\\t\\tif(previous_state != new_state)\\n\\t\\t\\tmsg.topic = `Tesla driver is present: *${new_state}*`\\n\\t\\telse return;\\n\\t\\tbreak;\\n    case 'time_to_full_charge':\\n\\t\\tvar previous = flow.get('time_to_full_charge');\\n        if(flow.get('state') != 'charging' || \\n            previous.timeleft === msg.payload){\\n                node.warn('returned from 1 ' + flow.get('state'))\\n                return;\\n        }\\n        var now = Math.round(Date.now()/1000);\\n\\t\\tvar current = { timestamp: now, timeleft: msg.payload};\\n        var remaining = msg.payload.split('.');\\n        var minutes = Math.ceil(60 * Number(\\\".\\\" + remaining[1]));\\n        \\n        // If more than 1 hour remaining, print max 1 time per 15 minutes\\n        if(remaining[0] > 0 && (now - previous.timestamp)/60 <= 15)\\n            return;\\n        // If less than 1 hour remaining, print max 1 time per 5 minutes\\n        if(remaining[0] == 0 && (now - previous.timestamp)/60 < 5)\\n            return;\\n            \\n        var how_long = \\\"\\\";\\n        if(remaining[0] > 0){\\n            how_long = `${remaining[0]} hours ${minutes} minutes`\\n        } else {\\n            how_long = `${minutes} minutes`\\n        }\\n\\t\\tflow.set('time_to_full_charge',current);\\n\\t\\tmsg.topic = `Time to full charge: *${how_long}*`;\\n\\t\\tbreak;\\n\\tdefault:\\n\\t\\treturn;\\n}\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"// Code added here will be run once\\n// whenever the node is deployed.\\nflow.set('state','initial');\\nflow.set('is_user_present','initial');\\nflow.set('time_to_full_charge',{timestamp:0,timeleft:0});\\n\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 340,\r\n        \"y\": 60,\r\n        \"wires\": [[\"8094b1d4.32f968\"]]\r\n    }, {\r\n        \"id\": \"cb1580bf.27615\",\r\n        \"type\": \"link in\",\r\n        \"z\": \"88633c3e.1b273\",\r\n        \"name\": \"process state changes\",\r\n        \"links\": [\"8491f8d1.1365f8\", \"4e84bee.72facc\"],\r\n        \"x\": 175,\r\n        \"y\": 80,\r\n        \"wires\": [[\"5bf1c557.464144\", \"72d2c21.f2a2e3c\"]]\r\n    }, {\r\n        \"id\": \"72d2c21.f2a2e3c\",\r\n        \"type\": \"function\",\r\n        \"z\": \"88633c3e.1b273\",\r\n        \"name\": \"geofence\",\r\n        \"func\": \"/* show when car enters and leaves geofences */\\nif(msg.topic != 'geofence') return;\\n/* temporarly disable */\\n//return;\\n\\nvar previous_fence = flow.get('geofence');\\nvar new_fence = msg.payload;\\nflow.set('geofence',new_fence);\\nmsg.topic = '';\\n\\nif(previous_fence !== new_fence){\\n    if(previous_fence !== \\\"\\\")\\n        msg.topic = `Tesla left Geofence *${previous_fence}*`;\\n    if(new_fence !== \\\"\\\"){\\n        if(previous_fence !== \\\"\\\")\\n            msg.topic += ' and ';\\n        else\\n            msg.topic += 'Tesla ';\\n        msg.topic += `entered Geofence *${new_fence}*`;\\n    }\\n} else return null;\\nreturn msg;\\n\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"// Code added here will be run once\\n// whenever the node is deployed.\\nflow.set('geofence','');\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 320,\r\n        \"y\": 100,\r\n        \"wires\": [[\"8094b1d4.32f968\"]]\r\n    }, {\r\n        \"id\": \"1da8704b.f78728\",\r\n        \"type\": \"inject\",\r\n        \"z\": \"88633c3e.1b273\",\r\n        \"name\": \"\",\r\n        \"props\": [{\r\n                \"p\": \"payload\"\r\n            }\r\n        ],\r\n        \"repeat\": \"\",\r\n        \"crontab\": \"\",\r\n        \"once\": false,\r\n        \"onceDelay\": 0.1,\r\n        \"topic\": \"\",\r\n        \"payload\": \"Test from *Node\\\\-RED*\",\r\n        \"payloadType\": \"str\",\r\n        \"x\": 210,\r\n        \"y\": 980,\r\n        \"wires\": [[\"a9c28815.0191c\"]]\r\n    }, {\r\n        \"id\": \"a9c28815.0191c\",\r\n        \"type\": \"function\",\r\n        \"z\": \"88633c3e.1b273\",\r\n        \"name\": \"create Bot message\",\r\n        \"func\": \"msg.payload = {\\n    chatId: '1596966476',\\n    type: 'message',    \\n    content: msg.payload\\n}\\nmsg.payload.options = {parse_mode : \\\"MarkdownV2\\\"};\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 440,\r\n        \"y\": 980,\r\n        \"wires\": [[\"df6e0dc2.ac982\"]]\r\n    }, {\r\n        \"id\": \"8094b1d4.32f968\",\r\n        \"type\": \"function\",\r\n        \"z\": \"88633c3e.1b273\",\r\n        \"name\": \"Format message\",\r\n        \"func\": \"msg.payload = {\\n    chatId: '1596966476',\\n    type: 'message',\\n    content: msg.topic\\n}\\nmsg.payload.options = {parse_mode : \\\"MarkdownV2\\\"};\\n\\nreturn msg;\",\r\n        \"outputs\": 1,\r\n        \"noerr\": 0,\r\n        \"initialize\": \"\",\r\n        \"finalize\": \"\",\r\n        \"libs\": [],\r\n        \"x\": 550,\r\n        \"y\": 80,\r\n        \"wires\": [[\"eb20a524.af3ba\"]]\r\n    }, {\r\n        \"id\": \"cc9cc37a.5f4a78\",\r\n        \"type\": \"calculator\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"\",\r\n        \"inputMsgField\": \"payload\",\r\n        \"outputMsgField\": \"payload\",\r\n        \"operation\": \"round\",\r\n        \"constant\": \"\",\r\n        \"round\": false,\r\n        \"decimals\": 0,\r\n        \"x\": 700,\r\n        \"y\": 178,\r\n        \"wires\": [[\"ce57ad0f.660c1\"]]\r\n    }, {\r\n        \"id\": \"7b0d22a9.903e24\",\r\n        \"type\": \"simpletime\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"\",\r\n        \"mydate\": true,\r\n        \"myymd\": true,\r\n        \"myyear\": true,\r\n        \"mymonth\": true,\r\n        \"mymonthn\": true,\r\n        \"mydom\": true,\r\n        \"mydoy\": true,\r\n        \"myday\": true,\r\n        \"myhourpm\": true,\r\n        \"myhour\": true,\r\n        \"mytime\": true,\r\n        \"mytimes\": true,\r\n        \"myminute\": true,\r\n        \"myminutes\": true,\r\n        \"mysecond\": true,\r\n        \"mymillis\": true,\r\n        \"myepoch\": true,\r\n        \"myrawdate\": true,\r\n        \"mypm\": true,\r\n        \"x\": 332,\r\n        \"y\": 380,\r\n        \"wires\": [[\"37af1984.d722ae\"]]\r\n    }, {\r\n        \"id\": \"366025db.df598a\",\r\n        \"type\": \"ui_table\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"group\": \"51eafba7.ffc054\",\r\n        \"name\": \"State Table\",\r\n        \"order\": 3,\r\n        \"width\": \"8\",\r\n        \"height\": \"16\",\r\n        \"columns\": [{\r\n                \"field\": \"key\",\r\n                \"title\": \"Parameter\",\r\n                \"width\": \"50%\",\r\n                \"align\": \"left\",\r\n                \"formatter\": \"plaintext\",\r\n                \"formatterParams\": {\r\n                    \"target\": \"_blank\"\r\n                }\r\n            }, {\r\n                \"field\": \"value\",\r\n                \"title\": \"Value\",\r\n                \"width\": \"45%\",\r\n                \"align\": \"right\",\r\n                \"formatter\": \"plaintext\",\r\n                \"formatterParams\": {\r\n                    \"target\": \"_blank\"\r\n                }\r\n            }\r\n        ],\r\n        \"outputs\": 0,\r\n        \"cts\": false,\r\n        \"x\": 890,\r\n        \"y\": 275,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"efe44f3.124a93\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"group\": \"2cca3d1a.be10ba\",\r\n        \"order\": 1,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"name\": \"Time to Full Charge\",\r\n        \"label\": \"Time to Full Charge\",\r\n        \"format\": \"{{msg.payload}}\",\r\n        \"layout\": \"row-spread\",\r\n        \"x\": 1110,\r\n        \"y\": 260,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"ad15c026.1d1d6\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"group\": \"2cca3d1a.be10ba\",\r\n        \"order\": 7,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"name\": \"\",\r\n        \"label\": \"Estimated battery range\",\r\n        \"format\": \"{{msg.payload}}\",\r\n        \"layout\": \"row-spread\",\r\n        \"x\": 1070,\r\n        \"y\": 100,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"6ab267e6.5e4b78\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"group\": \"2cca3d1a.be10ba\",\r\n        \"order\": 6,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"name\": \"\",\r\n        \"label\": \"Ideal battery range\",\r\n        \"format\": \"{{msg.payload}}\",\r\n        \"layout\": \"row-spread\",\r\n        \"x\": 1050,\r\n        \"y\": 140,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"37af1984.d722ae\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"group\": \"51eafba7.ffc054\",\r\n        \"order\": 1,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"name\": \"\",\r\n        \"label\": \"Last update time\",\r\n        \"format\": \"{{msg.mydate}}, {{msg.mytime}}\",\r\n        \"layout\": \"row-spread\",\r\n        \"x\": 500,\r\n        \"y\": 379,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"2ec008a.2fb84f8\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"group\": \"2cca3d1a.be10ba\",\r\n        \"order\": 4,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"name\": \"charger_actual_current\",\r\n        \"label\": \"Charging current\",\r\n        \"format\": \"{{msg.payload}} amps\",\r\n        \"layout\": \"row-spread\",\r\n        \"x\": 1070,\r\n        \"y\": 180,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"23ca2a1b.ce5fce\",\r\n        \"type\": \"ui_text\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"group\": \"2cca3d1a.be10ba\",\r\n        \"order\": 5,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"name\": \"charger_power\",\r\n        \"label\": \"Charging power\",\r\n        \"format\": \"{{msg.payload}} kw\",\r\n        \"layout\": \"row-spread\",\r\n        \"x\": 1050,\r\n        \"y\": 220,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"3db79d48.c4c322\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"Battery Level\",\r\n        \"group\": \"2cca3d1a.be10ba\",\r\n        \"order\": 3,\r\n        \"width\": \"0\",\r\n        \"height\": \"0\",\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Battery Level\",\r\n        \"label\": \"%\",\r\n        \"format\": \"{{value}}\",\r\n        \"min\": 0,\r\n        \"max\": \"100\",\r\n        \"colors\": [\"#ffff09\", \"#00ff00\", \"#ff8000\"],\r\n        \"seg1\": \"20\",\r\n        \"seg2\": \"80\",\r\n        \"x\": 690,\r\n        \"y\": 133,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"dda683ce.b5166\",\r\n        \"type\": \"ui_gauge\",\r\n        \"z\": \"868e4cd7.9fc578\",\r\n        \"name\": \"\",\r\n        \"group\": \"2cca3d1a.be10ba\",\r\n        \"order\": 2,\r\n        \"width\": 0,\r\n        \"height\": 0,\r\n        \"gtype\": \"gage\",\r\n        \"title\": \"Charge Limit\",\r\n        \"label\": \"%\",\r\n        \"format\": \"{{value}}\",\r\n        \"min\": 0,\r\n        \"max\": \"100\",\r\n        \"colors\": [\"#000000\", \"#000000\", \"#000000\"],\r\n        \"seg1\": \"\",\r\n        \"seg2\": \"\",\r\n        \"x\": 691,\r\n        \"y\": 91,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"dea66ad4.245ca\",\r\n        \"type\": \"e-mail\",\r\n        \"z\": \"88633c3e.1b273\",\r\n        \"server\": \"mail.bloggs.com\",\r\n        \"port\": \"465\",\r\n        \"secure\": true,\r\n        \"tls\": true,\r\n        \"name\": \"joe@bloggs.com\",\r\n        \"dname\": \"Email\",\r\n        \"x\": 710,\r\n        \"y\": 140,\r\n        \"wires\": []\r\n    }, {\r\n        \"id\": \"df6e0dc2.ac982\",\r\n        \"type\": \"telegram sender\",\r\n        \"z\": \"88633c3e.1b273\",\r\n        \"name\": \"Test sender\",\r\n        \"bot\": \"ed12f72a.03fad\",\r\n        \"haserroroutput\": false,\r\n        \"outputs\": 1,\r\n        \"x\": 630,\r\n        \"y\": 980,\r\n        \"wires\": [[]]\r\n    }, {\r\n        \"id\": \"eb20a524.af3ba\",\r\n        \"type\": \"telegram sender\",\r\n        \"z\": \"88633c3e.1b273\",\r\n        \"name\": \"Status messages\",\r\n        \"bot\": \"ed12f72a.03fad\",\r\n        \"haserroroutput\": false,\r\n        \"outputs\": 1,\r\n        \"x\": 750,\r\n        \"y\": 80,\r\n        \"wires\": [[]]\r\n    }\r\n]\r\n"
  },
  {
    "path": "website/docs/integrations/Node-RED.md",
    "content": "---\ntitle: Node-RED Integration\nsidebar_label: Node-RED\n---\n\n## Overview\n\nFrom the Node-RED website:\n\n> Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.\n>\n> It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.\n\nThe high-level logic \"flow\" is coded by wiring \"nodes\" in the user interface. Low-level logic can be coded in JavaScript. Visit the [Node-RED website](https://nodered.org) for a good introduction on its homepage.\n\n|                    **Node-RED UI**                    |\n| :---------------------------------------------------: |\n| ![Node-RED Flow example](./Node-RED/example-flow.png) |\n\nThis integration guide assumes that TeslaMate is deployed on docker and that Node-RED will not be exposed to the internet.\nOf course, you can install Node-RED outside of Docker and on another server, if that suits. The integration with TeslaMate is entirely via MQTT. Notifications included in the examples are sent using available Node-RED modules for email and Telegram. Other notifications (e.g. Slack) are relatively simple by replacing the final node in the Notifications flow. One could also integrate with public tools such as IFTT.\nOr get really creative and integrate with Alexa or Google Assistant to control the car by voice. :)\n\nCreation of the Telegram bot is not covered in this guide; there is plenty of documentation on the net explaining how to do this (links are provided in the _Requirements_ section below). However, the configuration of the Telgram node in Node-RED is described below.\n\nIncluded are Node-RED flows with two examples:\n\n- A simple Node-RED dashboard with Car Status and Charge Status panels\n- Notification logic for state changes, entering/exiting geofences and time remaining to charge.\n\n|                 **Node-RED Dashboard**                  |\n| :-----------------------------------------------------: |\n| ![Node-RED Dashboard example](./Node-RED/dashboard.png) |\n\n|          **Example Telegram Notifications**           |\n| :---------------------------------------------------: |\n| ![Node-RED Telegram example](./Node-RED/Telegram.png) |\n\n## Requirements\n\n- Teslmate environment, preferably installed in Docker (if you are new to Docker, see Installing Docker and Docker Compose)\n- Access by Node-RED to the internet to send notifications\n- A mobile device with [Telegram](https://telegram.org/) client installed or use Telegram's browser interface\n- your own Telegram Bot, see [Creating a new telegram bot](https://core.telegram.org/bots#6-botfather)\n- your own Telegram chat id, see [Get your Telegram chat ID](https://docs.influxdata.com/kapacitor/v1.5/event_handlers/telegram/#get-your-telegram-chat-id)\n\n## Installing Node-RED\n\nVisit the Node-RED [Getting Started](https://nodered.org/docs/getting-started/) page for the various deployment options. If you are using Docker, the following section should suffice to get running.\n\n### Docker Entries\n\nAdd the following parameters to your `docker-compose.yml` file. It's assumed that your timezone in set in the .env file's TM_TZ environment variable.\n\n```yaml title=\"docker-compose.yml\"\nservices:\n  node-red:\n    image: nodered/node-red:latest\n    restart: always\n    environment:\n      - TZ=${TM_TZ}\n    volumes:\n      - node-red-data:/data\n    ports:\n      - \"1880:1880\"\n\nvolumes:\n  node-red-data:\n```\n\nBuild and start the docker container with `docker compose up`. To run the containers in the background, add the `-d` flag:\n\n```bash\ndocker compose up -d\n```\n\n## Node-RED Configuration\n\nThere are two flows in the example exports provided. The first flow creates a simple dashboard with some of the MQTT values. The second flow sends notifications to Telegram.\nThe flow names are \"Car Dashboard\" and \"Notifications\".\n\n### Required Modules\n\nAfter bringing up the Node-RED container the first time, save the following shell script to a file (e.g. named _add-nr-modules.sh_, then run `bash ./add-nr-modules.sh`) to install modules required for the example flows:\n\n```bash title=\"add-nr-modules.sh\"\n#!/bin/sh\n\nMODULES=\"node-red-contrib-calc\nnode-red-contrib-simpletime\nnode-red-dashboard\nnode-red-node-email\nnode-red-contrib-telegrambot\nnode-red-node-ui-table\"\nset -x\nfor MODULE in $MODULES\ndo\ndocker compose exec -T node-red npm install --no-audit --no-update-notifier --no-fund --save --prefix=/data --production $MODULE\ndone\ndocker compose stop node-red\ndocker compose start node-red\n```\n\nNote that if your function nodes need additional NPM packages, you can add those into 'MODULES'. You can import those in the function node 'Setup' page, like add module 'linq-js' and import it as variable 'Enumerable'.\n\n### Import Flows\n\n- Download the example JSON file [Node-RED-Teslamate-flows.json](./Node-RED/Teslamate-flows.json.example)\n- Go to Node-RED's hamburger menu in the upper right corner and select `Import`\n- Use the `select file to import` button on the pop-up to upload the JSON file.\n\n### MQTT Configuration\n\nIf you are using the standard MQTT docker configuration as per the TeslaMate installation guide, after you import the flows Node-RED should automatically connect. Otherwise, open the `teslamate/cars/1/#` node in the Car Dashboard flow, select the pencil icon next to the `Server` field in the panel, then edit the MQTT server's parameters. Click Update, Done and Deploy.\n\n### Telegram Configuration\n\nTo enter your Telegram Bot's parameters:\n\n- Edit the `Status Messages` Telegram node in the Notifications flow, then select the pencil icon next to the `Bot` name.\n- Replace the `Bot-Name` field with the name of your Telegram bot\n- Fill the `Token` field with the value that you copied from setting up your bot.\n\n|                     **Telegram configuration pop-up**                      |\n| :------------------------------------------------------------------------: |\n| ![Node-RED Telegram configuration example](./Node-RED/telegram-wizard.png) |\n\n- Click `Update`, then `Done`\n- Edit the `Format messages` node in the Notifications flow\n- Replace the value for `chatId` with the chatId that you obtained setting up the bot.\n- Click `Done`\n- Click `Deploy` to re-deploy your flows. \"Connected\" should now display beneath the `Status Messages` node.\n\n### Email configuration\n\nIf you want to quickly try out this implementation without Telegram, you can simply remove the connection between the `Format Messages` and `Status Messages` nodes, then connect `Format Messages` with the `email` node. Edit the email node to set your parameters to send emails. After you re-deploy you should get at least one message as per the note below.\n\n### Notes\n\n- When you re-deploy your flows, a _Tesla entered Geofence ..._ message and a _Tesla Driver is present:_ notification may be sent. Some might consider this a bug. Or a test that the notification channel is working. :)\n"
  },
  {
    "path": "website/docs/integrations/home_assistant.md",
    "content": "---\ntitle: Home Assistant Integration\nsidebar_label: Home Assistant\n---\n\n## Introduction\n\nWhilst Home Assistant provides an official component for Tesla vehicles, the component has not been updated recently, and does not have the sophistication of TeslaMate's polling mechanism, resulting in the component's default values keeping the vehicle awake and draining the battery.\n\nThe ultimate goal of this guide is to consume as much of the TeslaMate polling data as possible to replace the majority of the official Tesla component's polling functionality.\n\nIf your intention is to only use read-only sensor values, those provided by TeslaMate via MQTT are sufficient, and you do not need to utilise the official Tesla component. If however you would like to be able to write values to the Tesla API (Lock/Unlock Doors or automate Climate), there is a solution which involves configuring an extremely high polling interval for the Tesla component and using automation to populate the values from the TeslaMate MQTT parameters.\n\n### Screenshots\n\nimport useBaseUrl from '@docusaurus/useBaseUrl';\n\n<img alt=\"HASS Screenshot\" src={useBaseUrl('img/hass-dashboard.png')} />\n\n### Current Status\n\n- Sensors: All sensors exposed by the Tesla component are available\n- Locks: Not implemented\n- Climate: Not implemented\n\n## Configuration\n\nThe following configurations assume a car ID of 1 (`teslamate/cars/1`). It usually starts at 1, but it can be different if you have multiple cars in TeslaMate for example.\n\n### configuration.yaml\n\nProximity sensors allow us to calculate the proximity of the Tesla `device_tracker` to defined zones. This can be useful for:\n\n- Automatic Garage Door opening when you arrive home\n- Notifications when the vehicle is arriving\n\n```yml title=\"configuration.yaml\"\nautomation: !include automation.yaml\n\nproximity:\n  home_tesla:\n    zone: home\n    devices:\n      - device_tracker.tesla_location\n    tolerance: 10\n    unit_of_measurement: km\n\ntesla:\n  username: !secret tesla_username\n  password: !secret tesla_password\n  scan_interval: 3600\n\nmqtt: !include mqtt_sensors.yaml\n```\n\n### mqtt_sensors.yaml (mqtt: section of configuration.yaml)\n\nDon't forget to replace `<teslamate url>`, `<your tesla model>` and `<your tesla name>` with correct corresponding values.\n\n```yml title=\"mqtt_sensors.yaml\"\n- sensor:\n    name: Display Name\n    default_entity_id: sensor.tesla_display_name # entity_id\n    unique_id: teslamate_1_display_name # internal id, used for device grouping\n    device: &teslamate_device_info\n      identifiers: [teslamate_car_1]\n      configuration_url: <teslamate url> # update this with your teslamate URL, e.g. https://teslamate.example.com/\n      manufacturer: Tesla\n      model: <your tesla model> # update this with your car model, e.g. Model 3\n      name: <your tesla name> # update this with your car name, e.g. Tesla Model 3\n    state_topic: \"teslamate/cars/1/display_name\"\n    icon: mdi:car\n\n- device_tracker:\n    name: Location\n    default_entity_id: device_tracker.tesla_location\n    unique_id: teslamate_1_location\n    device: *teslamate_device_info\n    json_attributes_topic: \"teslamate/cars/1/location\"\n    icon: mdi:crosshairs-gps\n\n- device_tracker:\n    name: Active route location\n    default_entity_id: device_tracker.tesla_active_route_location\n    unique_id: teslamate_1_active_route_location\n    availability: &teslamate_active_route_availability\n      - topic: \"teslamate/cars/1/active_route\"\n        value_template: \"{{ 'offline' if value_json.error else 'online' }}\"\n    device: *teslamate_device_info\n    json_attributes_topic: \"teslamate/cars/1/active_route\"\n    json_attributes_template: >\n      {% if not value_json.error and value_json.location %}\n        {{ value_json.location | tojson }}\n      {% else %}\n        {}\n      {% endif %}\n    icon: mdi:crosshairs-gps\n\n- sensor:\n    name: State\n    default_entity_id: sensor.tesla_state\n    unique_id: teslamate_1_state\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/state\"\n    icon: mdi:car-connected\n\n- sensor:\n    name: Since\n    default_entity_id: sensor.tesla_since\n    unique_id: teslamate_1_since\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/since\"\n    device_class: timestamp\n    icon: mdi:clock-outline\n\n- sensor:\n    name: Version\n    default_entity_id: sensor.tesla_version\n    unique_id: teslamate_1_version\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/version\"\n    icon: mdi:alphabetical\n\n- sensor:\n    name: Update Version\n    default_entity_id: sensor.tesla_update_version\n    unique_id: teslamate_1_update_version\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/update_version\"\n    icon: mdi:alphabetical\n\n- sensor:\n    name: Model\n    default_entity_id: sensor.tesla_model\n    unique_id: teslamate_1_model\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/model\"\n\n- sensor:\n    name: Trim Badging\n    default_entity_id: sensor.tesla_trim_badging\n    unique_id: teslamate_1_trim_badging\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/trim_badging\"\n    icon: mdi:shield-star-outline\n\n- sensor:\n    name: Exterior Color\n    default_entity_id: sensor.tesla_exterior_color\n    unique_id: teslamate_1_exterior_color\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/exterior_color\"\n    icon: mdi:palette\n\n- sensor:\n    name: Wheel Type\n    default_entity_id: sensor.tesla_wheel_type\n    unique_id: teslamate_1_wheel_type\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/wheel_type\"\n\n- sensor:\n    name: Spoiler Type\n    default_entity_id: sensor.tesla_spoiler_type\n    unique_id: teslamate_1_spoiler_type\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/spoiler_type\"\n    icon: mdi:car-sports\n\n- sensor:\n    name: Geofence\n    default_entity_id: sensor.tesla_geofence\n    unique_id: teslamate_1_geofence\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/geofence\"\n    icon: mdi:earth\n\n- sensor:\n    name: Shift State\n    default_entity_id: sensor.tesla_shift_state\n    unique_id: teslamate_1_shift_state\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/shift_state\"\n    icon: mdi:car-shift-pattern\n\n- binary_sensor:\n    name: Parking Brake\n    default_entity_id: sensor.tesla_park_brake\n    unique_id: teslamate_1_park_brake\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/shift_state\"\n    value_template: >-\n      {% if value == 'P' %}\n          ON\n      {% else %}\n          OFF\n      {% endif %}\n    icon: mdi:car-brake-parking\n\n- sensor:\n    name: Power\n    default_entity_id: sensor.tesla_power\n    unique_id: teslamate_1_power\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/power\"\n    device_class: power\n    unit_of_measurement: kW\n    icon: mdi:flash\n\n- sensor:\n    name: Speed\n    default_entity_id: sensor.tesla_speed\n    unique_id: teslamate_1_speed\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/speed\"\n    device_class: speed\n    unit_of_measurement: \"km/h\"\n    icon: mdi:speedometer\n\n- sensor:\n    name: Heading\n    default_entity_id: sensor.tesla_heading\n    unique_id: teslamate_1_heading\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/heading\"\n    unit_of_measurement: °\n    icon: mdi:compass\n\n- sensor:\n    name: Elevation\n    default_entity_id: sensor.tesla_elevation\n    unique_id: teslamate_1_elevation\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/elevation\"\n    device_class: distance\n    unit_of_measurement: m\n    icon: mdi:image-filter-hdr\n\n- sensor:\n    name: Inside Temp\n    default_entity_id: sensor.tesla_inside_temp\n    unique_id: teslamate_1_inside_temp\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/inside_temp\"\n    device_class: temperature\n    unit_of_measurement: °C\n    icon: mdi:thermometer-lines\n\n- sensor:\n    name: Outside Temp\n    default_entity_id: sensor.tesla_outside_temp\n    unique_id: teslamate_1_outside_temp\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/outside_temp\"\n    device_class: temperature\n    unit_of_measurement: °C\n    icon: mdi:thermometer-lines\n\n- sensor:\n    name: Odometer\n    default_entity_id: sensor.tesla_odometer\n    unique_id: teslamate_1_odometer\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/odometer\"\n    device_class: distance\n    unit_of_measurement: km\n    icon: mdi:counter\n\n- sensor:\n    name: Est Battery Range\n    default_entity_id: sensor.tesla_est_battery_range\n    unique_id: teslamate_1_est_battery_range\n    device: *teslamate_device_info\n    device_class: distance\n    state_topic: \"teslamate/cars/1/est_battery_range_km\"\n    unit_of_measurement: km\n    icon: mdi:gauge\n\n- sensor:\n    name: Rated Battery Range\n    default_entity_id: sensor.tesla_rated_battery_range\n    unique_id: teslamate_1_rated_battery_range\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/rated_battery_range_km\"\n    device_class: distance\n    unit_of_measurement: km\n    icon: mdi:gauge\n\n- sensor:\n    name: Ideal Battery Range\n    default_entity_id: sensor.tesla_ideal_battery_range\n    unique_id: teslamate_1_ideal_battery_range\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/ideal_battery_range_km\"\n    device_class: distance\n    unit_of_measurement: km\n    icon: mdi:gauge\n\n- sensor:\n    name: Battery Level\n    default_entity_id: sensor.tesla_battery_level\n    unique_id: teslamate_1_battery_level\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/battery_level\"\n    device_class: battery\n    unit_of_measurement: \"%\"\n    icon: mdi:battery-80\n\n- sensor:\n    name: Usable Battery Level\n    default_entity_id: sensor.tesla_usable_battery_level\n    unique_id: teslamate_1_usable_battery_level\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/usable_battery_level\"\n    device_class: battery\n    unit_of_measurement: \"%\"\n    icon: mdi:battery-80\n\n- sensor:\n    name: Charge Energy Added\n    default_entity_id: sensor.tesla_charge_energy_added\n    unique_id: teslamate_1_charge_energy_added\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/charge_energy_added\"\n    device_class: energy\n    state_class: total\n    unit_of_measurement: kWh\n    icon: mdi:battery-charging\n\n- sensor:\n    name: Charge Limit Soc\n    default_entity_id: sensor.tesla_charge_limit_soc\n    unique_id: teslamate_1_charge_limit_soc\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/charge_limit_soc\"\n    device_class: battery\n    unit_of_measurement: \"%\"\n    icon: mdi:battery-charging-100\n\n- sensor:\n    name: Charger Actual Current\n    default_entity_id: sensor.tesla_charger_actual_current\n    unique_id: teslamate_1_charger_actual_current\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/charger_actual_current\"\n    device_class: current\n    unit_of_measurement: A\n    icon: mdi:lightning-bolt\n\n- sensor:\n    name: Charger Phases\n    default_entity_id: sensor.tesla_charger_phases\n    unique_id: teslamate_1_charger_phases\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/charger_phases\"\n    icon: mdi:sine-wave\n\n- sensor:\n    name: Charger Power\n    default_entity_id: sensor.tesla_charger_power\n    unique_id: teslamate_1_charger_power\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/charger_power\"\n    device_class: power\n    unit_of_measurement: kW\n    icon: mdi:lightning-bolt\n\n- sensor:\n    name: Charger Voltage\n    default_entity_id: sensor.tesla_charger_voltage\n    unique_id: teslamate_1_charger_voltage\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/charger_voltage\"\n    device_class: voltage\n    unit_of_measurement: V\n    icon: mdi:lightning-bolt\n\n- sensor:\n    name: Scheduled Charging Start Time\n    default_entity_id: sensor.tesla_scheduled_charging_start_time\n    unique_id: teslamate_1_scheduled_charging_start_time\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/scheduled_charging_start_time\"\n    device_class: timestamp\n    icon: mdi:clock-outline\n\n- sensor:\n    name: Time To Full Charge\n    default_entity_id: sensor.tesla_time_to_full_charge\n    unique_id: teslamate_1_time_to_full_charge\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/time_to_full_charge\"\n    device_class: duration\n    unit_of_measurement: h\n    icon: mdi:clock-outline\n\n- sensor:\n    name: TPMS Pressure Front Left\n    default_entity_id: sensor.tesla_tpms_pressure_fl\n    unique_id: teslamate_1_tpms_pressure_fl\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/tpms_pressure_fl\"\n    device_class: pressure\n    unit_of_measurement: bar\n    icon: mdi:car-tire-alert\n\n- sensor:\n    name: TPMS Pressure Front Left (psi)\n    default_entity_id: sensor.tesla_tpms_pressure_fl_psi\n    unique_id: teslamate_1_tpms_pressure_fl_psi\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/tpms_pressure_fl\"\n    device_class: pressure\n    unit_of_measurement: psi\n    icon: mdi:car-tire-alert\n    value_template: \"{{ value | float * 14.50377 }}\"\n    suggested_display_precision: 2\n\n- sensor:\n    name: TPMS Pressure Front Right\n    default_entity_id: sensor.tesla_tpms_pressure_fr\n    unique_id: teslamate_1_tpms_pressure_fr\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/tpms_pressure_fr\"\n    device_class: pressure\n    unit_of_measurement: bar\n    icon: mdi:car-tire-alert\n\n- sensor:\n    name: TPMS Pressure Front Right (psi)\n    default_entity_id: sensor.tesla_tpms_pressure_fr_psi\n    unique_id: teslamate_1_tpms_pressure_fr_psi\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/tpms_pressure_fr\"\n    device_class: pressure\n    unit_of_measurement: psi\n    icon: mdi:car-tire-alert\n    value_template: \"{{ value | float * 14.50377 }}\"\n    suggested_display_precision: 2\n\n- sensor:\n    name: TPMS Pressure Rear Left\n    default_entity_id: sensor.tesla_tpms_pressure_rl\n    unique_id: teslamate_1_tpms_pressure_rl\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/tpms_pressure_rl\"\n    device_class: pressure\n    unit_of_measurement: bar\n    icon: mdi:car-tire-alert\n\n- sensor:\n    name: TPMS Pressure Rear Left (psi)\n    default_entity_id: sensor.tesla_tpms_pressure_rl_psi\n    unique_id: teslamate_1_tpms_pressure_rl_psi\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/tpms_pressure_rl\"\n    device_class: pressure\n    unit_of_measurement: psi\n    icon: mdi:car-tire-alert\n    value_template: \"{{ value | float * 14.50377 }}\"\n    suggested_display_precision: 2\n\n- sensor:\n    name: TPMS Pressure Rear Right\n    default_entity_id: sensor.tesla_tpms_pressure_rr\n    unique_id: teslamate_1_tpms_pressure_rr\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/tpms_pressure_rr\"\n    device_class: pressure\n    unit_of_measurement: bar\n    icon: mdi:car-tire-alert\n\n- sensor:\n    name: TPMS Pressure Rear Right (psi)\n    default_entity_id: sensor.tesla_tpms_pressure_rr_psi\n    unique_id: teslamate_1_tpms_pressure_rr_psi\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/tpms_pressure_rr\"\n    device_class: pressure\n    unit_of_measurement: psi\n    icon: mdi:car-tire-alert\n    value_template: \"{{ value | float * 14.50377 }}\"\n    suggested_display_precision: 2\n\n- sensor:\n    name: Active route destination\n    default_entity_id: sensor.tesla_active_route_destination\n    unique_id: teslamate_1_active_route_destination\n    availability: *teslamate_active_route_availability\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/active_route\"\n    value_template: >\n      {% if not value_json.error and value_json.destination %}\n        {{ value_json.destination }}\n      {% endif %}\n    icon: mdi:map-marker\n\n- sensor:\n    name: Active route energy at arrival\n    default_entity_id: sensor.tesla_active_route_energy_at_arrival\n    unique_id: teslamate_1_active_route_energy_at_arrival\n    availability: *teslamate_active_route_availability\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/active_route\"\n    value_template: >\n      {% if not value_json.error and value_json.energy_at_arrival %}\n        {{ value_json.energy_at_arrival }}\n      {% endif %}\n    device_class: battery\n    unit_of_measurement: \"%\"\n    icon: mdi:battery-80\n\n- sensor:\n    name: Active route distance to arrival\n    default_entity_id: sensor.tesla_active_route_distance_to_arrival\n    unique_id: teslamate_1_active_route_distance_to_arrival\n    availability: *teslamate_active_route_availability\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/active_route\"\n    value_template: >\n      {% if not value_json.error and value_json.miles_to_arrival %}\n        {{ (value_json.miles_to_arrival | float * 1.60934) | round(2) }}\n      {% endif %}\n    device_class: distance\n    unit_of_measurement: km\n    icon: mdi:map-marker-distance\n\n- sensor:\n    name: Active route minutes to arrival\n    default_entity_id: sensor.tesla_active_route_minutes_to_arrival\n    unique_id: teslamate_1_active_route_minutes_to_arrival\n    availability: *teslamate_active_route_availability\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/active_route\"\n    value_template: >\n      {% if not value_json.error and value_json.minutes_to_arrival %}\n        {{ value_json.minutes_to_arrival }}\n      {% endif %}\n    device_class: duration\n    unit_of_measurement: min\n    icon: mdi:clock-outline\n\n- sensor:\n    name: Active route traffic minutes delay\n    default_entity_id: sensor.tesla_active_route_traffic_minutes_delay\n    unique_id: teslamate_1_active_route_traffic_minutes_delay\n    availability: *teslamate_active_route_availability\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/active_route\"\n    value_template: >\n      {% if not value_json.error and value_json.traffic_minutes_delay %}\n        {{ value_json.traffic_minutes_delay }}\n      {% endif %}\n    device_class: duration\n    unit_of_measurement: min\n    icon: mdi:clock-alert-outline\n\n- binary_sensor:\n    name: Healthy\n    default_entity_id: binary_sensor.tesla_healthy\n    unique_id: teslamate_1_healthy\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/healthy\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:heart-pulse\n\n- binary_sensor:\n    name: Update Available\n    default_entity_id: binary_sensor.tesla_update_available\n    unique_id: teslamate_1_update_available\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/update_available\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:alarm\n\n- binary_sensor:\n    name: Locked\n    default_entity_id: binary_sensor.tesla_locked\n    unique_id: teslamate_1_locked\n    device: *teslamate_device_info\n    device_class: lock\n    state_topic: \"teslamate/cars/1/locked\"\n    payload_on: \"false\"\n    payload_off: \"true\"\n\n- binary_sensor:\n    name: Sentry Mode\n    default_entity_id: binary_sensor.tesla_sentry_mode\n    unique_id: teslamate_1_sentry_mode\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/sentry_mode\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:cctv\n\n- binary_sensor:\n    name: Windows Open\n    default_entity_id: binary_sensor.tesla_windows_open\n    unique_id: teslamate_1_windows_open\n    device: *teslamate_device_info\n    device_class: window\n    state_topic: \"teslamate/cars/1/windows_open\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:car-door\n\n- binary_sensor:\n    name: Doors Open\n    default_entity_id: binary_sensor.tesla_doors_open\n    unique_id: teslamate_1_doors_open\n    device: *teslamate_device_info\n    device_class: door\n    state_topic: \"teslamate/cars/1/doors_open\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:car-door\n\n- binary_sensor:\n    name: Trunk Open\n    default_entity_id: binary_sensor.tesla_trunk_open\n    unique_id: teslamate_1_trunk_open\n    device: *teslamate_device_info\n    device_class: opening\n    state_topic: \"teslamate/cars/1/trunk_open\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:car-side\n\n- binary_sensor:\n    name: Frunk Open\n    default_entity_id: binary_sensor.tesla_frunk_open\n    unique_id: teslamate_1_frunk_open\n    device: *teslamate_device_info\n    device_class: opening\n    state_topic: \"teslamate/cars/1/frunk_open\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:car-side\n\n- binary_sensor:\n    name: Is User Present\n    default_entity_id: binary_sensor.tesla_is_user_present\n    unique_id: teslamate_1_is_user_present\n    device: *teslamate_device_info\n    device_class: presence\n    state_topic: \"teslamate/cars/1/is_user_present\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:human-greeting\n\n- binary_sensor:\n    name: Is Climate On\n    default_entity_id: binary_sensor.tesla_is_climate_on\n    unique_id: teslamate_1_is_climate_on\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/is_climate_on\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:fan\n\n- binary_sensor:\n    name: Is Preconditioning\n    default_entity_id: binary_sensor.tesla_is_preconditioning\n    unique_id: teslamate_1_is_preconditioning\n    device: *teslamate_device_info\n    state_topic: \"teslamate/cars/1/is_preconditioning\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:fan\n\n- binary_sensor:\n    name: Plugged In\n    default_entity_id: binary_sensor.tesla_plugged_in\n    unique_id: teslamate_1_plugged_in\n    device: *teslamate_device_info\n    device_class: plug\n    state_topic: \"teslamate/cars/1/plugged_in\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:ev-station\n\n- binary_sensor:\n    name: Charge Port Door OPEN\n    default_entity_id: binary_sensor.tesla_charge_port_door_open\n    unique_id: teslamate_1_charge_port_door_open\n    device: *teslamate_device_info\n    device_class: opening\n    state_topic: \"teslamate/cars/1/charge_port_door_open\"\n    payload_on: \"true\"\n    payload_off: \"false\"\n    icon: mdi:ev-plug-tesla\n```\n\n### ui-lovelace.yaml\n\nThe below is the Lovelace UI configuration used to make the example screenshot above. You will obviously want to configure this to your liking, however the example contains all of the sensors and values presented via MQTT and could be used as the basis of UI configuration.\n\n```yml title=\"ui-lovelace.yaml\"\nviews:\n  - path: car\n    title: Car\n    badges: []\n    icon: mdi:car-connected\n    cards:\n      - type: vertical-stack\n        cards:\n          - type: glance\n            entities:\n              - entity: sensor.tesla_battery_level\n                name: Battery Level\n              - entity: sensor.tesla_state\n                name: Car State\n              - entity: binary_sensor.tesla_plugged_in\n                name: Plugged In\n          - type: glance\n            entities:\n              - entity: binary_sensor.tesla_park_brake\n                name: Park Brake\n              - entity: binary_sensor.tesla_sentry_mode\n                name: Sentry Mode\n              - entity: sensor.tesla_speed\n                name: Speed\n          - type: glance\n            entities:\n              - entity: binary_sensor.tesla_healthy\n                name: Car Health\n              - entity: binary_sensor.tesla_windows_open\n                name: Window Status\n          - type: horizontal-stack\n            cards:\n              - type: button\n                entity: binary_sensor.tesla_locked\n                name: Charger Door\n                show_state: true\n                state:\n                  - value: locked\n                    icon: mdi:lock\n                    color: green\n                    tap_action:\n                      action: call-service\n                      service: lock.unlock\n                      service_data:\n                        entity_id: lock.tesla_model_3_charger_door_lock\n                  - value: unlocked\n                    icon: mdi:lock-open\n                    color: red\n                    tap_action:\n                      action: call-service\n                      service: lock.lock\n                      service_data:\n                        entity_id: lock.tesla_model_3_charger_door_lock\n              - type: button\n                entity: lock.tesla_door_lock\n                name: Car Door\n                show_state: true\n                state:\n                  - value: locked\n                    icon: mdi:lock\n                    color: green\n                    tap_action:\n                      action: call-service\n                      service: lock.unlock\n                      service_data:\n                        entity_id: lock.tesla_model_3_door_lock\n                  - value: unlocked\n                    icon: mdi:lock-open\n                    color: red\n                    tap_action:\n                      action: call-service\n                      service: lock.lock\n                      service_data:\n                        entity_id: lock.tesla_model_3_door_lock\n      - type: vertical-stack\n        cards:\n          - type: map\n            dark_mode: true\n            default_zoom: 12\n            entities:\n              - device_tracker.tesla_location\n          - type: thermostat\n            entity: climate.tesla_model_3_hvac_climate_system\n      - type: entities\n        entities:\n          - entity: sensor.tesla_display_name\n            name: Name\n          - entity: sensor.tesla_state\n            name: Status\n          - entity: sensor.tesla_since\n            name: Last Status Change\n          - entity: binary_sensor.tesla_healthy\n            name: Logger Healthy\n          - entity: sensor.tesla_version\n            name: Software Version\n          - entity: binary_sensor.tesla_update_available\n            name: Available Update Status\n          - entity: sensor.tesla_update_version\n            name: Available Update Version\n          - entity: sensor.tesla_model\n            name: Tesla Model\n          - entity: sensor.tesla_trim_badging\n            name: Trim Badge\n          - entity: sensor.tesla_exterior_color\n            name: Exterior Color\n          - entity: sensor.tesla_wheel_type\n            name: Wheel Type\n          - entity: sensor.tesla_spoiler_type\n            name: Spoiler Type\n          - entity: sensor.tesla_geofence\n            name: Geo-fence Name\n          - entity: proximity.home_tesla\n            name: Distance to Home\n          - entity: sensor.tesla_shift_state\n            name: Shifter State\n          - entity: sensor.tesla_speed\n            name: Speed\n          - entity: sensor.tesla_heading\n            name: Heading\n          - entity: sensor.tesla_elevation\n            name: Elevation\n          - entity: binary_sensor.tesla_locked\n            name: Locked\n          - entity: binary_sensor.tesla_sentry_mode\n            name: Sentry Mode Enabled\n          - entity: binary_sensor.tesla_windows_open\n            name: Windows Open\n          - entity: binary_sensor.tesla_doors_open\n            name: Doors Open\n          - entity: binary_sensor.tesla_trunk_open\n            name: Trunk Open\n          - entity: binary_sensor.tesla_frunk_open\n            name: Frunk Open\n          - entity: binary_sensor.tesla_is_user_present\n            name: User Present\n          - entity: binary_sensor.tesla_is_climate_on\n            name: Climate On\n          - entity: sensor.tesla_inside_temp\n            name: Inside Temperature\n          - entity: sensor.tesla_outside_temp\n            name: Outside Temperature\n          - entity: binary_sensor.tesla_is_preconditioning\n            name: Preconditioning\n          - entity: sensor.tesla_odometer\n            name: Odometer\n          - entity: sensor.tesla_est_battery_range\n            name: Battery Range\n          - entity: sensor.tesla_rated_battery_range\n            name: Rated Battery Range\n          - entity: sensor.tesla_ideal_battery_range\n            name: Ideal Battery Range\n          - entity: sensor.tesla_battery_level\n            name: Battery Level\n          - entity: sensor.tesla_usable_battery_level\n            name: Usable Battery Level\n          - entity: binary_sensor.tesla_plugged_in\n            name: Plugged In\n          - entity: sensor.tesla_charge_energy_added\n            name: Charge Energy Added\n          - entity: sensor.tesla_charge_limit_soc\n            name: Charge Limit\n          - entity: binary_sensor.tesla_charge_port_door_open\n            name: Charge Port Door Open\n          - entity: sensor.tesla_charger_actual_current\n            name: Charger Current\n          - entity: sensor.tesla_charger_phases\n            name: Charger Phases\n          - entity: sensor.tesla_charger_power\n            name: Charger Power\n          - entity: sensor.tesla_charger_voltage\n            name: Charger Voltage\n          - entity: sensor.tesla_scheduled_charging_start_time\n            name: Scheduled Charging Start Time\n          - entity: sensor.tesla_time_to_full_charge\n            name: Time To Full Charge\n          - entity: sensor.tesla_tpms_pressure_fl\n            name: Front Left Tire Pressure (bar)\n          - entity: sensor.tesla_tpms_pressure_fl_psi\n            name: Front Left Tire Pressure (psi)\n          - entity: sensor.tesla_tpms_pressure_fr\n            name: Front Right Tire Pressure (bar)\n          - entity: sensor.tesla_tpms_pressure_fr_psi\n            name: Front Right Tire Pressure (psi)\n          - entity: sensor.tesla_tpms_pressure_rl\n            name: Rear Left Tire Pressure (bar)\n          - entity: sensor.tesla_tpms_pressure_rl_psi\n            name: Rear Left Tire Pressure (psi)\n          - entity: sensor.tesla_tpms_pressure_rr\n            name: Rear Right Tire Pressure (bar)\n          - entity: sensor.tesla_tpms_pressure_rr_psi\n            name: Rear Right Tire Pressure (psi)\n          - entity: sensor.tesla_active_route_destination\n            name: Active Route Destination\n          - entity: sensor.tesla_active_route_energy_at_arrival\n            name: Active Route Energy at Arrival\n          - entity: sensor.tesla_active_route_distance_to_arrival\n            name: Active Route Distance to Arrival\n          - entity: sensor.tesla_active_route_minutes_to_arrival\n            name: Active Route Minutes to Arrival\n          - entity: sensor.tesla_active_route_traffic_minutes_delay\n            name: Active Route Traffic Minutes Delay\n```\n\n## Useful Automations\n\nThe below automations leverage TeslaMate MQTT topics to provide some useful automations\n\n### Garage Door Automation based on Tesla location\n\nThis automation triggers when the Tesla transitions from not_home to home. This means that the vehicle would have had to have been outside of the home zone previously, and returned home. You may want to add conditions here to improve accuracy, such as time of day.\n\n```yml title=\"automation.yaml\"\n- alias: Open garage if car returns home\n  initial_state: on\n  trigger:\n    - platform: state\n      entity_id: device_tracker.tesla_location\n      from: \"not_home\"\n      to: \"home\"\n  action:\n    - service: switch.turn_on\n      entity_id: switch.garage_door_switch\n```\n\n### Notification for Doors and Windows left open\n\nThe following set of automations and scripts will detect when a Tesla door, frunk, trunk or window is left open. The script will notify you after the defined time period (by default, 5 minutes). If you would like to customize how the notification is performed, you can edit the `notify_tesla_open` script which is called by all of the four notifications.\n\nBy default, the script will repeatedly notify every 5 minutes. Remove the recursive `script.turn_on` sequence in the `notify_tesla_open` script if you'd only like to be informed once.\n\nWe add the random 30 second interval after each notification to avoid clobbering the notification script when we have multiple things open at once.\nFor example, opening the door will open the door and the window. If we don't delay the calls, we will only get a message about the window (as it is the last call to the script) and if we then close the window, we won't get notifications about other things left open. This results in more notifications but less chance on missing out on knowing something was left open.\n\n#### automation.yaml\n\n```yml title=\"automation.yaml\"\n- alias: Set timer if teslamate reports something is open to alert us\n  initial_state: on\n  trigger:\n    - platform: mqtt\n      topic: teslamate/cars/1/windows_open\n      payload: \"true\"\n    - platform: mqtt\n      topic: teslamate/cars/1/doors_open\n      payload: \"true\"\n    - platform: mqtt\n      topic: teslamate/cars/1/trunk_open\n      payload: \"true\"\n    - platform: mqtt\n      topic: teslamate/cars/1/frunk_open\n      payload: \"true\"\n  action:\n    - service: script.turn_on\n      data_template:\n        entity_id: script.notify_tesla_{{trigger.topic.split('/')[3]}}\n\n- alias: Cancel notification if said door/window is closed\n  initial_state: on\n  trigger:\n    - platform: mqtt\n      topic: teslamate/cars/1/windows_open\n      payload: \"false\"\n    - platform: mqtt\n      topic: teslamate/cars/1/doors_open\n      payload: \"false\"\n    - platform: mqtt\n      topic: teslamate/cars/1/trunk_open\n      payload: \"false\"\n    - platform: mqtt\n      topic: teslamate/cars/1/frunk_open\n      payload: \"false\"\n  action:\n    - service: script.turn_off\n      data_template:\n        entity_id: script.notify_tesla_{{trigger.topic.split('/')[3]}}\n```\n\n#### script.yaml\n\n```yml title=\"script.yaml\"\nnotify_tesla_open:\n  alias: \"Notify when something on the tesla is left open\"\n  sequence:\n    - service: notify.notify_group\n      data_template:\n        title: \"Tesla Notification\"\n        message: \"You have left the {{ whatsopen }} open on the Tesla!\"\n    - service: script.turn_on\n      data_template:\n        entity_id: script.notify_tesla_{{ whatsopen }}_open\n\nnotify_tesla_doors_open:\n  sequence:\n    - delay:\n        minutes: 5\n    - delay:\n        seconds: \"{{ range(0, 30)|random|int }}\"\n    - service: script.turn_on\n      entity_id: script.notify_tesla_open\n      data:\n        variables:\n          whatsopen: \"doors\"\n\nnotify_tesla_frunk_open:\n  sequence:\n    - delay:\n        minutes: 5\n    - delay:\n        seconds: \"{{ range(0, 30)|random|int }}\"\n    - service: script.turn_on\n      entity_id: script.notify_tesla_open\n      data:\n        variables:\n          whatsopen: \"frunk\"\n\nnotify_tesla_trunk_open:\n  sequence:\n    - delay:\n        minutes: 5\n    - delay:\n        seconds: \"{{ range(0, 30)|random|int }}\"\n    - service: script.turn_on\n      entity_id: script.notify_tesla_open\n      data:\n        variables:\n          whatsopen: \"trunk\"\n\nnotify_tesla_windows_open:\n  sequence:\n    - delay:\n        minutes: 5\n    - delay:\n        seconds: \"{{ range(0, 30)|random|int }}\"\n    - service: script.turn_on\n      entity_id: script.notify_tesla_open\n      data:\n        variables:\n          whatsopen: \"windows\"\n\n- id: plugin-tesla-notify\n  alias: Notify if Tesla not plugged in at night\n  trigger:\n  - platform: time\n    at: '19:30:00'\ncondition: and\nconditions:\n  - condition: state\n    entity_id: sensor.tesla_plugged_in\n    state: 'false'\n  action:\n  - service: notify.mobile_app_pixel_6_pro\n    data:\n      title: 🔌 Plug in your car 🚙\n      message: 'Tesla: {{states(''sensor.tesla_battery_level'')}}% - {{states(''sensor.tesla_ideal_range'')|round(0)}}\n        km'\n  initial_state: true\n  mode: single\n```\n"
  },
  {
    "path": "website/docs/integrations/mqtt.md",
    "content": "---\ntitle: MQTT Integration\nsidebar_label: MQTT\n---\n\nThe MQTT function within TeslaMate allows useful values to be published to an MQTT broker. This is useful in allowing other automation platforms to consume data from TeslaMate.\n\n## MQTT Topics\n\nVehicle data will be published to the following topics:\n\n| Topic                                                  | Example                                                                                     | Description                                                                           |\n| ------------------------------------------------------ | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |\n| `teslamate/cars/$car_id/display_name`                  | Blue Thunder                                                                                | Vehicle Name                                                                          |\n| `teslamate/cars/$car_id/state`                         | asleep                                                                                      | Status of the vehicle (e.g. `online`, `asleep`, `charging`)                           |\n| `teslamate/cars/$car_id/since`                         | 2019-02-29T23:00:07Z                                                                        | Date of the last status change                                                        |\n| `teslamate/cars/$car_id/healthy`                       | true                                                                                        | Health status of the logger for that vehicle                                          |\n| `teslamate/cars/$car_id/version`                       | 2019.32.12.2                                                                                | Software Version                                                                      |\n| `teslamate/cars/$car_id/update_available`              | false                                                                                       | Indicates if a software update is available                                           |\n| `teslamate/cars/$car_id/update_version`                | 2019.32.12.3                                                                                | Software version of the available update                                              |\n|                                                        |                                                                                             |                                                                                       |\n| `teslamate/cars/$car_id/model`                         | 3                                                                                           | Either \"S\", \"3\", \"X\" or \"Y\"                                                           |\n| `teslamate/cars/$car_id/trim_badging`                  | P100D                                                                                       | Trim badging                                                                          |\n| `teslamate/cars/$car_id/exterior_color`                | DeepBlue                                                                                    | The exterior color                                                                    |\n| `teslamate/cars/$car_id/wheel_type`                    | Pinwheel18                                                                                  | The wheel type                                                                        |\n| `teslamate/cars/$car_id/spoiler_type`                  | None                                                                                        | The spoiler type                                                                      |\n|                                                        |                                                                                             |                                                                                       |\n| `teslamate/cars/$car_id/geofence`                      | 🏡 Home                                                                                     | The name of the Geo-fence, if one exists at the current position                      |\n|                                                        |                                                                                             |                                                                                       |\n| `teslamate/cars/$car_id/latitude`                      | 35.278131                                                                                   | DEPRECATED: Last reported car latitude                                                |\n| `teslamate/cars/$car_id/longitude`                     | 29.744801                                                                                   | DEPRECATED: Last reported car longitude                                               |\n| `teslamate/cars/$car_id/location`                      | <pre lang=\"json\">\\{<br /> \"latitude\": 35.278131,<br /> \"longitude\": 29.744801<br />\\}</pre> | Last reported car location (json blob)                                                |\n| `teslamate/cars/$car_id/shift_state`                   | D                                                                                           | Current/Last Shift State (D/N/R/P)                                                    |\n| `teslamate/cars/$car_id/power`                         | -9                                                                                          | Current battery power in watts. Positive value on discharge, negative value on charge |\n| `teslamate/cars/$car_id/speed`                         | 12                                                                                          | Current Speed in km/h                                                                 |\n| `teslamate/cars/$car_id/heading`                       | 340                                                                                         | Last reported car direction                                                           |\n| `teslamate/cars/$car_id/elevation`                     | 70                                                                                          | Current elevation above sea level in meters                                           |\n|                                                        |                                                                                             |                                                                                       |\n| `teslamate/cars/$car_id/locked`                        | true                                                                                        | Indicates if the car is locked                                                        |\n| `teslamate/cars/$car_id/sentry_mode`                   | false                                                                                       | Indicates if Sentry Mode is active                                                    |\n| `teslamate/cars/$car_id/windows_open`                  | false                                                                                       | Indicates if any of the windows are open                                              |\n| `teslamate/cars/$car_id/doors_open`                    | false                                                                                       | Indicates if any of the doors are open                                                |\n| `teslamate/cars/$car_id/driver_front_door_open`        | false                                                                                       | Indicates if the driver-side front door is open                                       |\n| `teslamate/cars/$car_id/driver_rear_door_open`         | false                                                                                       | Indicates if the driver-side rear door is open                                        |\n| `teslamate/cars/$car_id/passenger_front_door_open`     | false                                                                                       | Indicates if the passenger-side front door is open                                    |\n| `teslamate/cars/$car_id/passenger_rear_door_open`      | false                                                                                       | Indicates if the passenger-side rear door is open                                     |\n| `teslamate/cars/$car_id/trunk_open`                    | false                                                                                       | Indicates if the trunk is open                                                        |\n| `teslamate/cars/$car_id/frunk_open`                    | false                                                                                       | Indicates if the frunk is open                                                        |\n| `teslamate/cars/$car_id/is_user_present`               | false                                                                                       | Indicates if a user is present in the vehicle                                         |\n|                                                        |                                                                                             |                                                                                       |\n| `teslamate/cars/$car_id/is_climate_on`                 | true                                                                                        | Indicates if the climate control is on                                                |\n| `teslamate/cars/$car_id/inside_temp`                   | 20.8                                                                                        | Inside Temperature in °C                                                              |\n| `teslamate/cars/$car_id/outside_temp`                  | 18.4                                                                                        | Temperature in °C                                                                     |\n| `teslamate/cars/$car_id/is_preconditioning`            | false                                                                                       | Indicates if the vehicle is being preconditioned                                      |\n|                                                        |                                                                                             |                                                                                       |\n| `teslamate/cars/$car_id/odometer`                      | 1653                                                                                        | Car odometer in km                                                                    |\n| `teslamate/cars/$car_id/est_battery_range_km`          | 372.5                                                                                       | Estimated Range in km                                                                 |\n| `teslamate/cars/$car_id/rated_battery_range_km`        | 401.63                                                                                      | Rated Range in km                                                                     |\n| `teslamate/cars/$car_id/ideal_battery_range_km`        | 335.79                                                                                      | Ideal Range in km                                                                     |\n|                                                        |                                                                                             |                                                                                       |\n| `teslamate/cars/$car_id/battery_level`                 | 88                                                                                          | Battery Level Percentage                                                              |\n| `teslamate/cars/$car_id/usable_battery_level`          | 85                                                                                          | Usable battery level percentage                                                       |\n| `teslamate/cars/$car_id/plugged_in`                    | true                                                                                        | If car is currently plugged into a charger                                            |\n| `teslamate/cars/$car_id/charging_state`                | Charging                                                                                    | The cars charging state (Charging, Disconnected, Stopped, NoPower, Complete)          |\n| `teslamate/cars/$car_id/charge_energy_added`           | 5.06                                                                                        | Last added energy in kWh                                                              |\n| `teslamate/cars/$car_id/charge_limit_soc`              | 90                                                                                          | Charge Limit Configured in Percentage                                                 |\n| `teslamate/cars/$car_id/charge_port_door_open`         | true                                                                                        | Indicates if the charger door is open                                                 |\n| `teslamate/cars/$car_id/charger_actual_current`        | 2.05                                                                                        | Current amperage supplied by charger                                                  |\n| `teslamate/cars/$car_id/charger_phases`                | 3                                                                                           | Number of charger power phases (1-3)                                                  |\n| `teslamate/cars/$car_id/charger_power`                 | 48.9                                                                                        | Charger Power                                                                         |\n| `teslamate/cars/$car_id/charger_voltage`               | 240                                                                                         | Charger Voltage                                                                       |\n| `teslamate/cars/$car_id/charge_current_request`        | 40                                                                                          | How many amps the car wants                                                           |\n| `teslamate/cars/$car_id/charge_current_request_max`    | 40                                                                                          | How many amps the car can have                                                        |\n| `teslamate/cars/$car_id/scheduled_charging_start_time` | 2019-02-29T23:00:07Z                                                                        | Start time of the scheduled charge                                                    |\n| `teslamate/cars/$car_id/time_to_full_charge`           | 1.83                                                                                        | Hours remaining to full charge                                                        |\n| `teslamate/cars/$car_id/tpms_pressure_fl`              | 2.9                                                                                         | Tire pressure measure in BAR, front left tire                                         |\n| `teslamate/cars/$car_id/tpms_pressure_fr`              | 2.8                                                                                         | Tire pressure measure in BAR, front right tire                                        |\n| `teslamate/cars/$car_id/tpms_pressure_rl`              | 2.9                                                                                         | Tire pressure measure in BAR, rear left tire                                          |\n| `teslamate/cars/$car_id/tpms_pressure_rr`              | 2.8                                                                                         | Tire pressure measure in BAR, rear right tire                                         |\n| `teslamate/cars/$car_id/tpms_soft_warning_fl`          | true                                                                                        | Indicates if the Tire pressure measure is soft warning, front left tire               |\n| `teslamate/cars/$car_id/tpms_soft_warning_fr`          | false                                                                                       | Indicates if the Tire pressure measure is soft warning, front right tire              |\n| `teslamate/cars/$car_id/tpms_soft_warning_rl`          | false                                                                                       | Indicates if the Tire pressure measure is soft warning, rear left tire                |\n| `teslamate/cars/$car_id/tpms_soft_warning_rr`          | false                                                                                       | Indicates if the Tire pressure measure is soft warning, rear right tire               |\n| `teslamate/cars/$car_id/active_route_destination`      | Home                                                                                        | DEPRECATED: Navigation destination name (or \"nil\")                                    |\n| `teslamate/cars/$car_id/active_route_latitude`         | 35.278131                                                                                   | DEPRECATED: Navigation destination latitude (or \"nil\")                                |\n| `teslamate/cars/$car_id/active_route_longitude`        | 29.744801                                                                                   | DEPRECATED: Navigation destination longitude (or \"nil\")                               |\n| `teslamate/cars/$car_id/active_route`                  | _See below_                                                                                 | Navigation details (json blob)                                                        |\n| `teslamate/cars/$car_id/center_display_state`          | 0                                                                                           | Center Display State                                                                  |\n\n:::note\n`$car_id` usually starts at 1\n:::\n\n### `active_route` payload examples\n\nRouting to a destination.\n\n```json\n{\n  \"destination\": \"Home\",\n  \"energy_at_arrival\": 73,\n  \"miles_to_arrival\": 6.485299,\n  \"minutes_to_arrival\": 23.466667,\n  \"traffic_minutes_delay\": 0.0,\n  \"location\": {\n    \"latitude\": 35.278131,\n    \"longitude\": 29.744801\n  },\n  \"error\": null\n}\n```\n\nNot routing to a destination.\n\n```json\n{\n  \"error\": \"No active route available\"\n}\n```\n"
  },
  {
    "path": "website/docs/maintenance/backup_restore.mdx",
    "content": "---\ntitle: Backup and Restore\n---\n\n:::note\nIf you are using `docker-compose`, you are using Docker Compose v1, which has been deprecated. Docker Compose commands refer to Docker Compose v2. Consider upgrading your docker setup, see [Migrate to Compose V2](https://docs.docker.com/compose/migrate/)\n:::\n\n## Backup\n\nCreate backup file `teslamate.bck`:\n\nimport Tabs from \"@theme/Tabs\";\nimport TabItem from \"@theme/TabItem\";\n\n<Tabs\ndefaultValue=\"dockerCompose\"\ngroupId=\"type\"\nvalues={[\n    { label: 'Docker Compose', value: 'dockerCompose', },\n    { label: 'NixOS', value: 'nixos', },\n]}>\n<TabItem value=\"dockerCompose\">\n\n```bash\ndocker compose exec -T database pg_dump -U teslamate teslamate > ./teslamate.bck\n```\n\n:::note\n`-T` is important if you add this line a crontab or the backup will not work because docker will generate this error `the input device is not a TTY`\n:::\n\n:::note\nBe absolutely certain to move the `teslamate.bck` file to another safe location, as you may lose that backup file if you use a docker-compose GUI to upgrade your teslamate configuration. Some GUIs delete the folder that holds the `docker-compose.yml` when updating.\n:::\n\n:::note\nIf you get the error `No such service: database`, update your _docker-compose.yml_ or use `db` instead of `database` in the above command.\n:::\n\n:::note\nIf you changed `TM_DB_USER` in the .env file from one of the advanced guides, make sure to replace the first instance of `teslamate` to the value of `TM_DB_USER` in the above command.\n:::\n\n</TabItem>\n<TabItem value=\"nixos\">\n\nYou can use the idiomatic backup script:\n\n```bash\nteslamate-backup teslamate_$(date +%Y%m%d-%H%M).bck\n```\n\n</TabItem>\n</Tabs>\n\n## Restore\n\n<Tabs\ndefaultValue=\"dockerCompose\"\ngroupId=\"type\"\nvalues={[\n    { label: 'Docker Compose', value: 'dockerCompose', },\n    { label: 'NixOS', value: 'nixos', },\n]}>\n<TabItem value=\"dockerCompose\">\n\n:::note\nReplace the default `teslamate` value below with the value defined in the .env file if you have one (TM_DB_USER and TM_DB_NAME)\n:::\n\n```bash\n# Stop the teslamate container to avoid write conflicts\ndocker compose stop teslamate\n\n# Drop existing data and reinitialize (Don't forget to replace first teslamate if using different TM_DB_USER)\ndocker compose exec -T database psql -U teslamate teslamate << .\nDROP SCHEMA public CASCADE;\nDROP SCHEMA private CASCADE;\nCREATE SCHEMA public;\nCREATE EXTENSION cube WITH SCHEMA public;\nCREATE EXTENSION earthdistance WITH SCHEMA public;\n.\n\n# Restore\ndocker compose exec -T database psql -U teslamate -d teslamate < teslamate.bck\n\n# Restart the teslamate container\ndocker compose start teslamate\n```\n\n</TabItem>\n<TabItem value=\"nixos\">\n\nYou can use the idiomatic restore script, for example:\n\n```bash\nteslamate-restore teslamate_20250805-1622.bck\n```\n\n</TabItem>\n</Tabs>\n"
  },
  {
    "path": "website/docs/maintenance/manually_fixing_data.mdx",
    "content": "---\ntitle: Manually fixing data\n---\n\n:::note\nIf you are using `docker-compose`, you are using Docker Compose v1, which has been deprecated. Docker Compose commands refer to Docker Compose v2. Consider upgrading your docker setup, see [Migrate to Compose V2](https://docs.docker.com/compose/migrate/)\n:::\n\n## Get the ID\n\nFirst you need to find out the ID of the drive or charge:\n\nimport Tabs from \"@theme/Tabs\";\nimport TabItem from \"@theme/TabItem\";\n\n<Tabs\ndefaultValue=\"drive\"\ngroupId=\"type\"\nvalues={[\n    { label: 'Drive', value: 'drive', },\n    { label: 'Charge', value: 'charge', },\n]}>\n<TabItem value=\"drive\">\n\n- Open the `Drives` dashboard and click on the start date of the drive.\n- The URL will contain the drive ID, for example `&var-drive_id=9999`.\n\n</TabItem>\n<TabItem value=\"charge\">\n\n- Open the `Charges` dashboard and click on the start date of the charge.\n- The URL will contain the charge id, for example `&var-charging_process_id=9999`.\n\n</TabItem>\n</Tabs>\n\n## Terminate a drive or charge\n\nIf for some reason a drive or charge hasn't been fully recorded, for example due to a bug or an unexpected restart, you can terminate it manually. Among other things, this assigns an end date to the drive/charge.\n\nReplace `9999` with the actual ID then run the command while the TeslaMate container is running:\n\n<Tabs\ndefaultValue=\"drive\"\ngroupId=\"type\"\nvalues={[\n    { label: 'Drive', value: 'drive', },\n    { label: 'Charge', value: 'charge', },\n    { label: 'Drive (NixOS)', value: 'drive-nixos', },\n    { label: 'Charge (NixOS)', value: 'charge-nixos', },\n]}>\n<TabItem value=\"drive\">\n\n```bash\ndocker compose exec teslamate bin/teslamate rpc \\\n    \"TeslaMate.Repo.get!(TeslaMate.Log.Drive, 9999) |> TeslaMate.Log.close_drive()\"\n```\n\n</TabItem>\n<TabItem value=\"charge\">\n\n```bash\ndocker compose exec teslamate bin/teslamate rpc \\\n    \"TeslaMate.Repo.get!(TeslaMate.Log.ChargingProcess, 9999) |> TeslaMate.Log.complete_charging_process()\"\n```\n\n</TabItem>\n<TabItem value=\"drive-nixos\">\n\n```bash\nteslamate-close-drive 9999\n```\n\n</TabItem>\n<TabItem value=\"charge-nixos\">\n\n```bash\nteslamate-close-charge 9999\n```\n\n</TabItem>\n</Tabs>\n\n## Delete a drive or charge\n\nIf for some reason a drive or charge was recorded incorrectly, you can delete it.\n\n<Tabs\ndefaultValue=\"drive\"\ngroupId=\"type\"\nvalues={[\n    { label: 'Drive', value: 'drive', },\n    { label: 'Charge', value: 'charge', },\n    { label: 'Drive (NixOS)', value: 'drive-nixos', },\n    { label: 'Charge (NixOS)', value: 'charge-nixos', },\n]}>\n<TabItem value=\"drive\">\n\n1.  Attach to the **running** database container:\n\n    ```bash\n    docker compose exec database psql teslamate teslamate\n    ```\n\n    :::note\n    If you get the error `No such service: database`, update your _docker-compose.yml_ or use `db` instead of `database` in the above command.\n    :::\n\n2.  Afterwards replace `9999` with the actual ID then run the query:\n\n                ```sql\n                DELETE FROM drives WHERE id = 9999;\n                ```\n\n</TabItem>\n<TabItem value=\"charge\">\n\n1.  Attach to the **running** database container:\n\n    ```bash\n    docker compose exec database psql teslamate teslamate\n    ```\n\n    :::note\n    If you get the error `No such service: database`, update your _docker-compose.yml_ or use `db` instead of `database` in the above command.\n    :::\n\n2.  Afterwards replace `9999` with the actual ID then run the query:\n\n    ```sql\n    DELETE FROM charging_processes WHERE id = 9999;\n    ```\n\n</TabItem>\n\n<TabItem value=\"drive-nixos\">\n\nYou can use the idiomatic maintenance script:\n\n    ```bash\n    teslamate-delete-drive 9999\n    ```\n\n</TabItem>\n<TabItem value=\"charge-nixos\">\n\nYou can use the idiomatic maintenance script:\n\n    ```bash\n    teslamate-delete-charge 9999\n    ```\n\n</TabItem>\n</Tabs>\n\n## Remove a vehicle from the database\n\n**NOTE:** Always [backup](https://docs.teslamate.org/docs/maintenance/backup_restore \"backup\") your data before performing any database changes.\n\n1. Connect to your running TeslaMate database\n\n   ```bash\n   docker compose exec database psql teslamate teslamate\n   ```\n\n   :::note\n   If you get the error `No such service: database`, update your _docker-compose.yml_ or use `db` instead of `database` in the above command.\n   :::\n\n2. Identify the right car ID in the database to remove\n\n```sql\nSELECT id, vin FROM cars;\n```\n\n3. Based upon the output, run the following command replacing `num` with the ID from the previous command.\n\n```sql\nDELETE FROM cars WHERE id = num;\nDELETE FROM car_settings WHERE id = num;\nDELETE FROM charging_processes WHERE car_id = num;\nDELETE from charges WHERE charging_process_id in (select id from charging_processes where car_id = num);\nDELETE FROM drives WHERE car_id = num;\nDELETE FROM positions WHERE car_id = num;\nDELETE FROM states WHERE car_id = num;\nDELETE FROM updates WHERE car_id = num;\n```\n\n## Reindex Database\n\n**NOTE:** If your database experiences a lot of updates or deletions, like importing data from other sources or deleting a loaner car or some other similar situation, you might encounter index bloat, which can degrade performance. In such cases, reindexing could be beneficial.\n\nIn summary, you don't necessarily need to run REINDEX periodically unless your database workload involves significant amounts of updates and deletions, if so, you may you may proceed as indicated in the following steps:\n\n1. Connect to your running TeslaMate database\n\n   ```bash\n   docker compose exec -T database psql teslamate teslamate\n   ```\n\n   :::note\n   If you get the error `No such service: database`, update your _docker-compose.yml_ or use `db` instead of `database` in the above command.\n   :::\n\n2. Run the following script (copy and paste)\n\n   ```sql\n   REINDEX DATABASE teslamate\n   ```\n\n3. Exit the prompt by typing:\n\n   ```bash\n   \\q  (or press CTRL + C)\n   ```\n"
  },
  {
    "path": "website/docs/maintenance/upgrading_postgres.md",
    "content": "---\ntitle: Upgrading PostgreSQL to a new major version\nsidebar_label: Upgrading PostgreSQL\n---\n\n1. Create a [backup](backup_restore.mdx)\n2. Stop all TeslaMate containers\n\n   ```bash\n   docker compose down\n   ```\n\n3. Delete the database volume. **Be careful**, this will delete all your previously recorded data! Make sure that your backup can be restored before you start.\n\n   ```bash\n   docker volume rm \"$(basename \"$PWD\")_teslamate-db\"\n   ```\n\n4. Change the postgres version and ensure your volume mount is [configured correctly](https://hub.docker.com/_/postgres#pgdata) in docker-compose.yml and start the container\n\n   ```yml {2}\n   database:\n     image: postgres:18-trixie\n     ...\n     volumes:\n       - teslamate-db:/var/lib/postgresql\n   ```\n\n   ```bash\n   docker compose up -d database\n   ```\n\n5. [Restore](backup_restore.mdx) the backup\n"
  },
  {
    "path": "website/docs/projects.md",
    "content": "---\ntitle: Projects using TeslaMate\n---\n\nHere are some projects that use **TeslaMate** as a data source to enrich its functionality and that can be useful depending on your setup.\n\n## [TeslaMate ABRP](https://fetzu.github.io/teslamate-abrp/)\n\nA python script (also available as a lightweight docker image) that pushes car status data to [ABetterRoutePlanner](https://abetterrouteplanner.com) based on contents of TeslaMate MQTT's topic.\n\nLINK: [github.com/fetzu/teslamate-abrp](https://github.com/fetzu/teslamate-abrp)\n\n## [TeslaMateAgile](https://github.com/MattJeanes/TeslaMateAgile)\n\nA TeslaMate integration for calculating cost of charges. This application will automatically update your cost for charge sessions in TeslaMate within a specified geofence (usually home) using data from your smart electricity tariff.\n\nThe supported energy providers / tarriffs are either [Octopus Agile](https://octopus.energy/agile/), [Tibber](https://tibber.com/en/), [aWATTar](https://www.awattar.de/) or fixed pricing (manually specified).\n\nLINK: [github.com/MattJeanes/TeslaMateAgile](https://github.com/MattJeanes/TeslaMateAgile)\n\n## [TeslaMateApi](https://github.com/tobiasehlert/teslamateapi)\n\nTeslaMateApi is a RESTful API to get data collected by self-hosted data logger TeslaMate in JSON.\n\nThe application is written in Golang and data is received from both PostgreSQL and Mosquitto and presented in various endpoints.\n\nLINK: [github.com/tobiasehlert/TeslaMateApi](https://github.com/tobiasehlert/teslamateapi)\n\n## [TeslaMate Custom Dashboards](https://github.com/jheredianet/Teslamate-CustomGrafanaDashboards)\n\nTeslamate Custom Grafana Dashboards, including: Amortization Tracker, Battery Health, Browse Charges, Charging Costs Stats, Charging CurveStats, Continuous Trips, Current State, Database Information, DC Charging Curves By Carrier, Incomplete Data, Range Degradation, Mileage Stats, Speed Rates, Speed & Temperature, Tracking Drives and more.\nAlso, there are two dashboards (Current Charge & Drive View) that could be browsed on the car while driving or charging.\n\nLINK: [github.com/jheredianet/Teslamate-CustomGrafanaDashboards](https://github.com/jheredianet/Teslamate-CustomGrafanaDashboards)\n\n## [TeslaMate Guru on Gurubase](https://gurubase.io/g/teslamate)\n\nTeslaMate Guru is a TeslaMate-focused AI to answer your questions. It primarily uses the TeslaMate documentation and the TeslaMate GitHub repository to generate responses.\n\nLINK: [https://gurubase.io/g/teslamate](https://gurubase.io/g/teslamate)\n\n## [Tesla Home Assistant Integration](https://github.com/alandtse/tesla)\n\nThe Tesla Home Assistant integration can use the data from the TeslaMate MQTT integration to update car data in near-real time.\n\nLINK: [github.com/alandtse/tesla](https://github.com/alandtse/tesla)\n\nLINK: [Wiki How-To](https://github.com/alandtse/tesla/wiki/Teslamate-MQTT-Integration)\n\n## [TeslaMate Telegram Bot](https://github.com/JakobLichterfeld/TeslaMate-Telegram-Bot)\n\nThis is a telegram bot written in Python to notify by Telegram message when a new SW update for your Tesla is available. It uses the MQTT topic which TeslaMate offers.\n\nLINK: [github.com/JakobLichterfeld/TeslaMate-Telegram-Bot](https://github.com/JakobLichterfeld/TeslaMate-Telegram-Bot)\n\n## [CustomGrafanaDashboards](https://github.com/CarlosCuezva/dashboards-Grafana-Teslamate)\n\nCollection of custom dashboards for Grafana.\n\nLINK: [github.com/CarlosCuezva/dashboards-Grafana-Teslamate](https://github.com/CarlosCuezva/dashboards-Grafana-Teslamate)\n\n## [Gaussmeter](https://github.com/gaussmeter/gaussmeter)\n\nAn LED illuminated acrylic Tesla Model 3. Its color and scale of light depend on the cars current state.\n\nLINK: [github.com/gaussmeter/gaussmeter](https://github.com/gaussmeter/gaussmeter)\n\n## [Home Assistant Addon](https://github.com/lildude/ha-addon-teslamate)\n\nAn unofficial Home Assistant addon for TeslaMate, with a PostgreSQL addon too. Works with the existing community Grafana and Mosquitto addons to provide a complete solution.\n\nLINK: [github.com/lildude/ha-addon-teslamate](https://github.com/lildude/ha-addon-teslamate)\n\n## [MateDroid](https://github.com/vide/matedroid)\n\nMateDroid is a native Android app for viewing Tesla vehicle data from your self-hosted TeslaMate instance. It uses the [TeslaMate API](https://github.com/tobiasehlert/teslamateapi) project to retrieve the data and display it in a beautiful and clean way.\n\nLINK: [https://github.com/vide/matedroid](https://github.com/vide/matedroid)\n\n## [MMM-Teslamate](https://github.com/denverquane/MMM-Teslamate)\n\nA [Magic Mirror](https://magicmirror.builders/) Module for TeslaMate.\n\nLINK: [github.com/denverquane/MMM-Teslamate](https://github.com/denverquane/MMM-Teslamate)\n\n## [MyTeslaMate](https://www.myteslamate.com)\n\nFor those who do not wish to install their own instance, MyTeslaMate provides a managed instance of TeslaMate ready to use in one minute, with a security overlay (Authelia), 30-day backups, and the possibility of importing a backup to migrate easily.\n\nFor all [TeslaMate](https://www.myteslamate.com) users, MyTeslaMate also provides for free a [Fleet API](https://app.myteslamate.com/fleet) endpoint and a streaming server based on Tesla Telemetry events.\n\nLINK: [MyTeslaMate Website](https://www.myteslamate.com)\n\nLINK: [Follow this guide](/docs/configuration/api#myteslamate-fleet-api) to use official Tesla APIs on your Teslamate.\n\n## [Tesla-GeoGDO](https://github.com/brchri/tesla-geogdo) (previously [Tesla-YouQ](https://github.com/brchri/tesla-youq))\n\nA lightweight app that will operate your smart garage door openers based on the location of your Tesla vehicles, automatically closing when you leave, and opening when you return. Supports multiple geofence types including circular, TeslaMate, and polygonal. Supports multiple vehicles and various smart garage door openers.\n\nLINK: [https://github.com/brchri/tesla-geogdo](https://github.com/brchri/tesla-geogdo)\n\n## [TeslaMate Achievements](https://github.com/crstian19/teslamate-achievements)\n\nA gamification add-on for TeslaMate that analyzes your historical data to unlock achievements. It features a collection of badges based on driving milestones, charging habits, efficiency, and phantom drain, turning your ownership statistics into a fun progression system.\n\nLINK: [github.com/crstian19/teslamate-achievements](https://github.com/crstian19/teslamate-achievements)\n"
  },
  {
    "path": "website/docs/screenshots.mdx",
    "content": "---\nid: screenshots\ntitle: Screenshots\nsidebar_label: Screenshots\n---\n\nimport useBaseUrl from \"@docusaurus/useBaseUrl\";\n\n:::info\nTeslaMate supports customizable themes. You can choose between light mode, dark mode, or system default (which automatically follows your device's appearance settings) in the Settings page.\n:::\n\n## Web Interface\n\n<img alt=\"Web Interface\" src={useBaseUrl(\"screenshots/web_interface.png\")} />\n\n## Battery Health\n\n<img\n  alt=\"Visited addresses\"\n  src={useBaseUrl(\"screenshots/battery-health.png\")}\n/>\n\n## Charge Level\n\n<img alt=\"Charge Level\" src={useBaseUrl(\"screenshots/charge-level.png\")} />\n\n## Charges\n\n<img alt=\"Charges\" src={useBaseUrl(\"screenshots/charging-history.png\")} />\n\n## Charge Details\n\n<img alt=\"Charge Details\" src={useBaseUrl(\"screenshots/charging.png\")} />\n\n## Charging Stats\n\n<img alt=\"Charge Stats\" src={useBaseUrl(\"screenshots/charging-stats.png\")} />\n\n## Database Information\n\n<img alt=\"Database Information\" src={useBaseUrl(\"screenshots/db-info.png\")} />\n\n## Drive Stats\n\n<img alt=\"Drive Stats\" src={useBaseUrl(\"screenshots/drive-stats.png\")} />\n\n## Drives\n\n<img alt=\"Drives\" src={useBaseUrl(\"screenshots/drives.png\")} />\n\n## Drive Details\n\n<img alt=\"Drive Details\" src={useBaseUrl(\"screenshots/drive.png\")} />\n\n## Efficiency\n\n<img alt=\"Efficiency\" src={useBaseUrl(\"screenshots/efficiency.png\")} />\n\n## Location (addresses)\n\n<img alt=\"Location (addresses)\" src={useBaseUrl(\"screenshots/locations.png\")} />\n\n## Mileage\n\n<img alt=\"Mileage\" src={useBaseUrl(\"screenshots/mileage.png\")} />\n\n## Overview\n\n<img alt=\"Overview\" src={useBaseUrl(\"screenshots/overview.png\")} />\n\n## Projected Range\n\n<img\n  alt=\"Projected Range\"\n  src={useBaseUrl(\"screenshots/projected-range.png\")}\n/>\n\n## States\n\n<img alt=\"States\" src={useBaseUrl(\"screenshots/states.png\")} />\n\n## Statistics\n\n<img alt=\"Statistics\" src={useBaseUrl(\"screenshots/statistics.png\")} />\n\n## Timeline\n\n<img alt=\"Timeline\" src={useBaseUrl(\"screenshots/timeline.png\")} />\n\n## Trip\n\n<img alt=\"Trip\" src={useBaseUrl(\"screenshots/trip.png\")} />\n\n## Updates\n\n<img alt=\"Updates\" src={useBaseUrl(\"screenshots/updates.png\")} />\n\n## Vampire Drain\n\n<img alt=\"Vampire Drain\" src={useBaseUrl(\"screenshots/vampire_drain.png\")} />\n\n## Visited (Lifetime driving map)\n\n<img\n  alt=\"Lifetime driving map\"\n  src={useBaseUrl(\"screenshots/lifetime_driving_map.png\")}\n/>\n"
  },
  {
    "path": "website/docs/upgrading.mdx",
    "content": "---\nid: upgrading\ntitle: Upgrading to a new version\nsidebar_label: Upgrading to a new version\n---\n\n:::info\nCheck out the [release notes](https://github.com/teslamate-org/teslamate/releases) before upgrading!\n:::\n\n:::note\nCreate a [backup](maintenance/backup_restore.mdx) before updating.\nIf you are using `docker-compose`, you are using Docker Compose v1, which has been deprecated. Docker Compose commands refer to Docker Compose v2. Consider upgrading your docker setup, see [Migrate to Compose V2](https://docs.docker.com/compose/migrate/)\n:::\n\nimport Tabs from \"@theme/Tabs\";\nimport TabItem from \"@theme/TabItem\";\n\n<Tabs\ndefaultValue=\"docker\"\nvalues={[\n{ label: 'Docker', value: 'docker', },\n{ label: 'Manual install (Debian)', value: 'manual_debian', },\n{ label: 'Manual install (FreeBSD)', value: 'manual_freebsd', },\n]}>\n<TabItem value=\"docker\">\n\nWithin the directory where the YML file is located, pull the new images:\n\n```bash\ndocker compose pull\n```\n\nand restart the stack with `docker compose up`. To run the containers in the background add the `-d` flag:\n\n```bash\ndocker compose up -d\n```\n\n</TabItem>\n<TabItem value=\"manual_debian\">\n\n1. Pull the new changes from the git repository, checkout the new version and then build the new release:\n\n   ```bash\n   git pull\n   git checkout $(git describe --tags `git rev-list --tags --max-count=1`)\n\n   mix deps.get --only prod\n   npm install --prefix ./assets && npm run deploy --prefix ./assets\n\n   rm -rf _build\n   MIX_ENV=prod mix do phx.digest, release --overwrite\n   ```\n\n2. Most upgrades requires to run new database migrations. If so continue with the following command:\n\n   ```bash\n    _build/prod/rel/teslamate/bin/teslamate eval \"TeslaMate.Release.migrate\"\n   ```\n\n   Note, you may need to include environment variables when running this step:\n\n   ```bash\n    DATABASE_USER=teslamate DATABASE_PASS=super_secret_password DATABASE_NAME=teslamate DATABASE_HOST=localhost MQTT_HOST=your_MQTT_host(HomeAssistant in my case) _build/prod/rel/teslamate/bin/teslamate eval \"TeslaMate.Release.migrate\"\n   ```\n\n3. Finally, re-import the Grafana dashboards:\n\n   ```bash\n   LOGIN=\"user:pass\" ./grafana/dashboards.sh restore\n   ```\n\n</TabItem>\n<TabItem value=\"manual_freebsd\">\n\n1. Pull the new changes from the git repository, checkout the new version and then build the new release:\n\n   ```bash\n   bash\n\n   git pull\n   git checkout $(git describe --tags `git rev-list --tags --max-count=1`)\n\n   mix deps.get --only prod\n   npm install --prefix ./assets && npm run deploy --prefix ./assets\n\n   rm -rf _build\n   export MIX_ENV=prod\n   mix do phx.digest, release --overwrite\n   ```\n\n2. Most upgrades requires to run new database migrations. If so continue with the following command:\n\n   ```bash\n    _build/prod/rel/teslamate/bin/teslamate eval \"TeslaMate.Release.migrate\"\n   ```\n\n   Note: you may need to include environment variables as part of this step:\n\n   ```bash\n    DATABASE_USER=teslamate DATABASE_PASS=super_secret_password DATABASE_NAME=teslamate DATABASE_HOST=localhost MQTT_HOST=your_MQTT_host(HomeAssistant in my case) _build/prod/rel/teslamate/bin/teslamate eval \"TeslaMate.Release.migrate\"\n   ```\n\n3. Finally, re-import the Grafana dashboards:\n\n   ```bash\n   bash\n   export LOGIN=\"user:pass\"\n   ./grafana/dashboards.sh restore\n   ```\n\n</TabItem>\n</Tabs>\n"
  },
  {
    "path": "website/docusaurus.config.js",
    "content": "module.exports = {\n  title: \"TeslaMate\",\n  tagline: \"A self-hosted data logger for your Tesla 🚘\",\n  url: \"https://docs.teslamate.org\",\n  baseUrl: \"/\",\n  favicon: \"img/favicon.ico\",\n  organizationName: \"teslamate-org\",\n  projectName: \"teslamate\",\n  themeConfig: {\n    navbar: {\n      title: \"TeslaMate\",\n      logo: {\n        alt: \"TeslaMate Logo\",\n        src: \"img/logo.svg\",\n      },\n      items: [\n        {\n          to: \"docs/installation/docker\",\n          activeBasePath: \"docs\",\n          label: \"Docs\",\n          position: \"left\",\n        },\n        // { to: \"blog\", label: \"Blog\", position: \"left\" },\n        {\n          href: \"https://github.com/teslamate-org/teslamate\",\n          label: \"GitHub\",\n          position: \"right\",\n        },\n      ],\n    },\n    // footer: {\n    //   style: \"dark\",\n    //   items: [\n    //     {\n    //       title: \"Community\",\n    //       items: [\n    //         {\n    //           label: \"Discord\",\n    //           href: \"https://discordapp.com/invite/docusaurus\",\n    //         },\n    //       ],\n    //     },\n    //   ],\n    //   copyright: `Copyright © ${new Date().getFullYear()} Adrian Kumpf`,\n    // },\n    prism: {\n      additionalLanguages: [\"apacheconf\", \"sql\"],\n    },\n  },\n  presets: [\n    [\n      \"@docusaurus/preset-classic\",\n      {\n        docs: {\n          // routeBasePath: \"\", // Docs-only\n          sidebarCollapsible: false,\n          sidebarPath: require.resolve(\"./sidebars.js\"),\n          editUrl:\n            \"https://github.com/teslamate-org/teslamate/edit/main/website/\",\n        },\n        theme: {\n          customCss: require.resolve(\"./src/css/custom.css\"),\n        },\n      },\n    ],\n  ],\n};\n"
  },
  {
    "path": "website/package.json",
    "content": "{\n  \"name\": \"teslamate\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"start\": \"docusaurus start\",\n    \"build\": \"docusaurus build\",\n    \"swizzle\": \"docusaurus swizzle\",\n    \"deploy\": \"docusaurus deploy\"\n  },\n  \"dependencies\": {\n    \"@docusaurus/core\": \"^3.9.2\",\n    \"@docusaurus/preset-classic\": \"^3.9.2\",\n    \"classnames\": \"^2.5.1\",\n    \"react\": \"^19.2.4\",\n    \"react-dom\": \"^19.2.4\"\n  },\n  \"overrides\": {\n    \"webpack-dev-server\": \"^5.2.1\",\n    \"node-forge\": \"^1.3.3\",\n    \"qs\": \"^6.14.1\",\n    \"minimatch\": \"^3.1.5\",\n    \"serialize-javascript\": \"7.0.3\"\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}\n"
  },
  {
    "path": "website/sidebars.js",
    "content": "module.exports = {\n  docs: [\n    {\n      type: \"category\",\n      label: \"Getting started\",\n      items: [\n        {\n          type: \"category\",\n          label: \"Installation\",\n          items: [\n            \"installation/docker\",\n            \"installation/nixos\",\n            {\n              type: \"category\",\n              label: \"unsupported Installation methods\",\n              items: [\n                \"installation/unsupported/debian\",\n                \"installation/unsupported/freebsd\",\n                \"installation/unsupported/unraid\",\n              ],\n            },\n          ],\n        },\n\n        \"faq\",\n        \"screenshots\",\n      ],\n    },\n    {\n      type: \"category\",\n      label: \"Advanced Guides\",\n      items: [\n        \"advanced_guides/traefik\",\n        \"advanced_guides/apache\",\n        \"advanced_guides/unix_domain_sockets\",\n      ],\n    },\n    {\n      type: \"category\",\n      label: \"Import\",\n      items: [\"import/teslafi\", \"import/tesla_apiscraper\"],\n    },\n    {\n      type: \"category\",\n      label: \"Integrations\",\n      items: [\n        \"integrations/home_assistant\",\n        \"integrations/mqtt\",\n        \"integrations/Node-RED\",\n      ],\n    },\n    {\n      type: \"category\",\n      label: \"Advanced Configuration\",\n      items: [\"configuration/environment_variables\", \"configuration/api\"],\n    },\n    {\n      type: \"category\",\n      label: \"Maintenance\",\n      items: [\n        \"upgrading\",\n        \"maintenance/backup_restore\",\n        \"maintenance/manually_fixing_data\",\n        \"maintenance/upgrading_postgres\",\n      ],\n    },\n    {\n      type: \"doc\",\n      id: \"projects\",\n    },\n    {\n      type: \"doc\",\n      id: \"development\",\n    },\n  ],\n};\n"
  },
  {
    "path": "website/src/css/custom.css",
    "content": "/* stylelint-disable docusaurus/copyright-header */\n/**\n * Any CSS included here will be global. The classic template\n * bundles Infima by default. Infima is a CSS framework designed to\n * work well for content-centric websites.\n */\n\n/* You can override the default Infima variables here. */\n:root {\n  /* --ifm-color-primary: #25c2a0; */\n  /* --ifm-color-primary-dark: rgb(33, 175, 144); */\n  /* --ifm-color-primary-darker: rgb(31, 165, 136); */\n  /* --ifm-color-primary-darkest: rgb(26, 136, 112); */\n  /* --ifm-color-primary-light: rgb(70, 203, 174); */\n  /* --ifm-color-primary-lighter: rgb(102, 212, 189); */\n  /* --ifm-color-primary-lightest: rgb(146, 224, 208); */\n  --ifm-color-primary: #33cc99;\n  --ifm-color-primary-dark: #2eb88a;\n  --ifm-color-primary-darker: #2bad82;\n  --ifm-color-primary-darkest: #248f6b;\n  --ifm-color-primary-light: #47d1a3;\n  --ifm-color-primary-lighter: #52d4a8;\n  --ifm-color-primary-lightest: #70dbb8;\n  --ifm-code-font-size: 95%;\n}\n\n.docusaurus-highlight-code-line {\n  background-color: rgb(72, 77, 91);\n  display: block;\n  margin: 0 calc(-1 * var(--ifm-pre-padding));\n  padding: 0 var(--ifm-pre-padding);\n}\n"
  },
  {
    "path": "website/src/pages/index.js",
    "content": "import React from \"react\";\n\nimport { Redirect } from \"@docusaurus/router\";\nimport useBaseUrl from \"@docusaurus/useBaseUrl\";\n\nfunction Home() {\n  return <Redirect to={useBaseUrl(\"/docs/installation/docker\")} />;\n}\n\nexport default Home;\n"
  },
  {
    "path": "website/src/pages/styles.module.css",
    "content": "/* stylelint-disable docusaurus/copyright-header */\n/**\n * CSS files with the .module.css suffix will be treated as CSS modules\n * and scoped locally.\n */\n\n.heroBanner {\n  padding: 4rem 0;\n  text-align: center;\n  position: relative;\n  overflow: hidden;\n}\n\n@media screen and (max-width: 966px) {\n  .heroBanner {\n    padding: 2rem;\n  }\n}\n\n.buttons {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.features {\n  display: flex;\n  align-items: center;\n  padding: 2rem 0;\n  width: 100%;\n}\n\n.featureImage {\n  height: 200px;\n  width: 200px;\n}\n"
  }
]