stromer-api


Namestromer-api JSON
Version 2.0.4 PyPI version JSON
download
home_pagehttps://github.com/elnkosc/stromer_api
SummaryStromer API for accessing data from your Stromer Speed Bike.
upload_time2023-07-15 18:45:06
maintainer
docs_urlNone
authorKoen
requires_python
licenseGPL
keywords stromer ebike python api
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Stromer API

This Python package contains the interfaces for interacting with the Stromer web API that is normally used by the Stromer mobile app. Using this API you can retrieve data of your bike. This is the most complete and simple to use package to connect to your Stromer Bike without the need to use the mobile app. On top of that it offers features that the app does not provide (including downloading of data).

Installation:

    pip install -r requirements.txt
    pip install stromer_api

Usage:

    from stromer_api import StromerBike
    mybike = StromerBike(<your username>, <your password>, <stromer client id>)

    # access available data easily
    print(mybike.state.trip_distance)
    print(mybike.position.latitude)

    # modify bike sensors
    mybike.sensors.user_torque_sensitivity = 10

    # Export data to excel
    mybike.week_stats(2022,1,52).excel_dump("exported_data")

The client_id you should intercept using a proxy (eg. mitm proxy) or maybe it can be obtained from decompiling the android apk of the Stromer OMNI app. Many discussions can be found on the internet how to get hold of it.

The following properties can be accessed.

StromerBike class - getters:
* `mybike.bikeid (int)`
* `mybike.nickname (str)`
* `mybike.bikemodel (str)`
* `mybike.biketype (str)`
* `mybike.color (str)`
* `mybike.size (str)`
* `mybike.hardware (str)`
* `mybike.connectivity (str)`
* `mybike.has_crash_detection (bool)`

StromerBike class - setters:
* `mybike.reset_trip_data()`
* `mybike.lock()`
* `mybike.unlock()`
* `mybike.light("on" | "off" | "flash" )`

BikeMaintenance class:
* `mybike.maintenance_feature (BikeMaintenance)`
* `mybike.maintenance_feature.display_maintenance_event`
* `mybike.maintenance_feature.next_maintenance_km`
* `mybike.maintenance_feature.next_maintenance_date`
* `mybike.maintenance_feature.next_maintenance_interval`
* `mybike.maintenance_feature.customer_enabled_maintenance`
* `mybike.maintenance_feature.last_maintenance_reset_km`
* `mybike.maintenance_feature.last_maintenance_reset_date`

BikeState class:
* `mybike.state (BikeState)`
* `mybike.state.trip_distance (float)`
* `mybike.state.suiversion (str)`
* `mybike.state.average_speed_trip (float)`
* `mybike.state.power_on_cycles (int)`
* `mybike.state.tntversion (str)`
* `mybike.state.atmospheric_pressure (int)`
* `mybike.state.battery_SOC (int)`
* `mybike.state.assistance_level (int)`
* `mybike.state.bike_speed (float)`
* `mybike.state.trip_time (int)`
* `mybike.state.trip_time_str (str)`
* `mybike.state.battery_health (int)`
* `mybike.state.theft_flag (bool)`
* `mybike.state.motor_temp (float)`
* `mybike.state.battery_temp (float)`
* `mybike.state.rcvts (int)`
* `mybike.state.rcvts_str (str)`
* `mybike.state.average_energy_consumption (int)`
* `mybike.state.total_time (int)`
* `mybike.state.total_time (str)`
* `mybike.state.total_distance (float)`
* `mybike.state.light_on (int)`
* `mybike.state.total_energy_consumption (int)`
* `mybike.state.lock_flag (bool)`

BikePosition class:
* `mybike.position (BikePosition)`
* `mybike.position.latitude (float)`
* `mybike.position.longitude (float)`
* `mybike.position.altitude (int)`
* `mybike.position.speed (float)`
* `mybike.position.timets (int)`
* `mybike.position.timets_str (str)`
* `mybike.position.rcvts (int)`
* `mybike.position.rcvts_str (str)`

BikeStatistics class:
* `mybike.statistics (BikeStatistics)`
* `mybike.statistics.total_km (float)`
* `mybike.statistics.average_km (float)`
* `mybike.statistics.total_sec (int)`
* `mybike.statistics.total_time_str (str)`
* `mybike.statistics.average_sec (float)`
* `mybike.statistics.average_time_str (str)`
* `mybike.statistics.total_wh (int)`
* `mybike.statistics.average_wh (float)`
* `mybike.statistics.kmh (float)`
* `mybike.statistics.average_kmh (float)`
* `mybike.statistics.active_days (int)`
* `mybike.statistics.average_days (float)`

BikeSensors class - getters:
* `mybike.sensors (BikeSensors)`
* `mybike.sensors.user_torque_sensitivity (int)`
* `mybike.sensors.recup_level_user_offset (int)`

BikeSensors class - setters:
* `mybike.sensors.user_torque_sensitivity = <torque (int)>`
* `mybike.sensors.recup_level_user_offset = <recup (int)>`
* `mybike.sensors.set(<torque (int)>, <recup (int)>)`

BikeMotorTuning class - getters:
* `mybike.motor_tuning (BikeMotroTuning)`
* `mybike.motor_tuning.tuning_speed (int)`
* `mybike.motor_tuning.tuning_torque (int)`
* `mybike.motor_tuning.tuning_agility (int)`
* `mybike.motor_tuning.tuning_speed = <speed (int)>`
* `mybike.motor_tuning.tuning_torque = <torque (int)>`
* `mybike.motor_tuning.tuning_agility = <agility (int)>`
* `mybike.motor_tuning.set(<speed (int)>, <torque (int)>, <agility (int)>)`

BikeSettings class - getters:
* `mybike.settings (BikeSettings)`
* `mybike.settings.auto_lock_mode (bool)`
* `mybike.settings.auto_power_off_time (int)`
* `mybike.settings.clock_format (str)`
* `mybike.settings.date_format (str)`
* `mybike.settings.distance_unit (str)`
* `mybike.settings.language (str)`
* `mybike.settings.speed_unit (str)`
 
BikeSettings class - setters:
* `mybike.settings.auto_lock_mode = <mode (bool)>`
* `mybike.settings.auto_power_off_time = <time (int)>`
* `mybike.settings.clock_format = <format (str)>`
* `mybike.settings.date_format = <format (str)>`
* `mybike.settings.distance_unit = <unit (str)>`
* `mybike.settings.language = <language(str)>`
* `mybike.settings.speed_unit = <unit (str)>`
* `mybike.settings.set(<auto_lock_mode (bool)>, <auto_power_off_time (int)>, <clock_format (str)>, <date_format (str)>, <distance_unit (str)>, <language (str)>, <speed_unit (str)>)`

BikeUser class:
* `mybike.user (BikeUser)`
* `mybike.user.first_name (str)`
* `mybike.user.last_name (str)`
* `mybike.user.street_name (str)`
* `mybike.user.house_number (str)`
* `mybike.user.postal_code (str)`
* `mybike.user.city (str)`
* `mybike.user.country (str)`
* `mybike.user.phone (str)`
* `mybike.user.mobile (str)`
* `mybike.user.email (str)`
* `mybike.user.gender (str)`
* `mybike.user.size (float)`
* `mybike.user.weight (float)`
* `mybike.user.accepted_gdpr_version (str)`
* `mybike.user.may_receive_mails (bool)`

BikeShop class:
* `mybike.user.shop (BikeShop)`
* `mybike.user.shop.name (str)`
* `mybike.user.shop.street (str)`
* `mybike.user.shop.postal_code (str)`
* `mybike.user.shop.city (str)`
* `mybike.user.shop.country_code (str)`
* `mybike.user.shop.country_name (str)`
* `mybike.user.shop.phone (str)`
* `mybike.user.shop.latitude (float)`
* `mybike.user.shop.longitude (float)`
* `mybike.user.shop.debitor (float)`

ServiceInfo class:
* `mybike.service_info (ServiceInfo)`
* `mybike.service_info.shop (BikeShop)`
* `mybike.service_info.vin (str)`
* `mybike.service_info.serial (str)`
* `mybike.service_info.service_logs ([ServiceLog)]`
* `mybike.service_info.bike_parts ([BikePart)]`

ServiceLog class:
* `mybike.service_info.service_logs[] (ServiceLog)`
* `mybike.service_info.service_logs[].note (str)`
* `mybike.service_info.service_logs[].created_on (int)`

BikePart class:
* `mybike.service_info.bike_parts[] (BikePart)`
* `mybike.service_info.bike_parts[].serial (str)`
* `mybike.service_info.bike_parts[].name (str)`
* `mybike.service_info.bike_parts[].category (str)`

BikeShopList class:
* `mybike.shops.lookup(<part of shopname (str)>) (BikeShop)`
* `mybike.shops[i] (BikeShop)`

YearStats class:
* `mybike.year_stats(year (int), num_years (int)) (YearStats)`
* `mybike.year_stats(year (int), num_years (int)).start_date (str)`
* `mybike.year_stats(year (int), num_years (int)).end_date (str)`
* `mybike.year_stats(year (int), num_years (int)).total_years (int)`
* `mybike.year_stats(year (int), num_years (int)).km_avg_years_since_beginning (float)`
* `mybike.year_stats(year (int), num_years (int)).year_record (float)`
* `mybike.year_stats(year (int), num_years (int)).csv_dump()`
* `mybike.year_stats(year (int), num_years (int)).excel_dump()`
* `mybike.year_stats(year (int), num_years (int))[year (str)] (PeriodicInfo)`

MonthStats class:
* `mybike.month_stats(year (int), month (int), num_months (int)) (MonthStats)`
* `mybike.month_stats(year (int), month (int), num_months (int)).start_date (str)`
* `mybike.month_stats(year (int), month (int), num_months (int)).end_date (str)`
* `mybike.month_stats(year (int), month (int), num_months (int)).total_months (int)`
* `mybike.month_stats(year (int), month (int), num_months (int)).km_avg_12_months (float)`
* `mybike.month_stats(year (int), month (int), num_months (int)).month_record (float)`
* `mybike.monthg_stats(year (int), month (int), num_months (int)).csv_dump()`
* `mybike.monthg_stats(year (int), month (int), num_months (int)).excel_dump()`
* `mybike.monthg_stats(year (int), month (int), num_months (int))[month (str)] (PeriodicInfo)`

WeekStats class:
* `mybike.week_stats(year (int), week (int), num_weeks (int)) (WeekStats)`
* `mybike.week_stats(year (int), week (int), num_weeks (int)).start_date (str)`
* `mybike.week_stats(year (int), week (int), num_weeks (int)).end_date (str)`
* `mybike.week_stats(year (int), week (int), num_weeks (int)).total_weeks (int)`
* `mybike.week_stats(year (int), week (int), num_weeks (int)).km_avg_12_weeks (float)`
* `mybike.week_stats(year (int), week (int), num_weeks (int)).week_record (float)`
* `mybike.week_stats(year (int), week (int), num_weeks (int)).csv_dump()`
* `mybike.week_stats(year (int), week (int), num_weeks (int)).excel_dump()`
* `mybike.week_stats(year (int), week (int), num_weeks (int)).[week (str)] (PeriodicInfo)`

DayStats class:
* `mybike.day_stats(year (int), month (int), day (int), num_days (int)) (DayStats)`
* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).start_date (str)`
* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).end_date (str)`
* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).total_days (int)`
* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).km_avg_30_days (float)`
* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).day_record (float)`
* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).csv_dump()`
* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).excel_dump()`
* `mybike.day_stats(year (int), month (int), day (int), num_days (int))[day (str)] (PeriodicInfo)`

Any suggestions for additions are of course also very welcome!

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/elnkosc/stromer_api",
    "name": "stromer-api",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "Stromer,EBike,Python,API",
    "author": "Koen",
    "author_email": "koen@schilders.org",
    "download_url": "https://files.pythonhosted.org/packages/f5/68/9d99d8ab7c0c8684bfaf296881bb4ea1a563b38f7062baaafefb41e9b542/stromer_api-2.0.4.tar.gz",
    "platform": null,
    "description": "Stromer API\r\n\r\nThis Python package contains the interfaces for interacting with the Stromer web API that is normally used by the Stromer mobile app. Using this API you can retrieve data of your bike. This is the most complete and simple to use package to connect to your Stromer Bike without the need to use the mobile app. On top of that it offers features that the app does not provide (including downloading of data).\r\n\r\nInstallation:\r\n\r\n    pip install -r requirements.txt\r\n    pip install stromer_api\r\n\r\nUsage:\r\n\r\n    from stromer_api import StromerBike\r\n    mybike = StromerBike(<your username>, <your password>, <stromer client id>)\r\n\r\n    # access available data easily\r\n    print(mybike.state.trip_distance)\r\n    print(mybike.position.latitude)\r\n\r\n    # modify bike sensors\r\n    mybike.sensors.user_torque_sensitivity = 10\r\n\r\n    # Export data to excel\r\n    mybike.week_stats(2022,1,52).excel_dump(\"exported_data\")\r\n\r\nThe client_id you should intercept using a proxy (eg. mitm proxy) or maybe it can be obtained from decompiling the android apk of the Stromer OMNI app. Many discussions can be found on the internet how to get hold of it.\r\n\r\nThe following properties can be accessed.\r\n\r\nStromerBike class - getters:\r\n* `mybike.bikeid (int)`\r\n* `mybike.nickname (str)`\r\n* `mybike.bikemodel (str)`\r\n* `mybike.biketype (str)`\r\n* `mybike.color (str)`\r\n* `mybike.size (str)`\r\n* `mybike.hardware (str)`\r\n* `mybike.connectivity (str)`\r\n* `mybike.has_crash_detection (bool)`\r\n\r\nStromerBike class - setters:\r\n* `mybike.reset_trip_data()`\r\n* `mybike.lock()`\r\n* `mybike.unlock()`\r\n* `mybike.light(\"on\" | \"off\" | \"flash\" )`\r\n\r\nBikeMaintenance class:\r\n* `mybike.maintenance_feature (BikeMaintenance)`\r\n* `mybike.maintenance_feature.display_maintenance_event`\r\n* `mybike.maintenance_feature.next_maintenance_km`\r\n* `mybike.maintenance_feature.next_maintenance_date`\r\n* `mybike.maintenance_feature.next_maintenance_interval`\r\n* `mybike.maintenance_feature.customer_enabled_maintenance`\r\n* `mybike.maintenance_feature.last_maintenance_reset_km`\r\n* `mybike.maintenance_feature.last_maintenance_reset_date`\r\n\r\nBikeState class:\r\n* `mybike.state (BikeState)`\r\n* `mybike.state.trip_distance (float)`\r\n* `mybike.state.suiversion (str)`\r\n* `mybike.state.average_speed_trip (float)`\r\n* `mybike.state.power_on_cycles (int)`\r\n* `mybike.state.tntversion (str)`\r\n* `mybike.state.atmospheric_pressure (int)`\r\n* `mybike.state.battery_SOC (int)`\r\n* `mybike.state.assistance_level (int)`\r\n* `mybike.state.bike_speed (float)`\r\n* `mybike.state.trip_time (int)`\r\n* `mybike.state.trip_time_str (str)`\r\n* `mybike.state.battery_health (int)`\r\n* `mybike.state.theft_flag (bool)`\r\n* `mybike.state.motor_temp (float)`\r\n* `mybike.state.battery_temp (float)`\r\n* `mybike.state.rcvts (int)`\r\n* `mybike.state.rcvts_str (str)`\r\n* `mybike.state.average_energy_consumption (int)`\r\n* `mybike.state.total_time (int)`\r\n* `mybike.state.total_time (str)`\r\n* `mybike.state.total_distance (float)`\r\n* `mybike.state.light_on (int)`\r\n* `mybike.state.total_energy_consumption (int)`\r\n* `mybike.state.lock_flag (bool)`\r\n\r\nBikePosition class:\r\n* `mybike.position (BikePosition)`\r\n* `mybike.position.latitude (float)`\r\n* `mybike.position.longitude (float)`\r\n* `mybike.position.altitude (int)`\r\n* `mybike.position.speed (float)`\r\n* `mybike.position.timets (int)`\r\n* `mybike.position.timets_str (str)`\r\n* `mybike.position.rcvts (int)`\r\n* `mybike.position.rcvts_str (str)`\r\n\r\nBikeStatistics class:\r\n* `mybike.statistics (BikeStatistics)`\r\n* `mybike.statistics.total_km (float)`\r\n* `mybike.statistics.average_km (float)`\r\n* `mybike.statistics.total_sec (int)`\r\n* `mybike.statistics.total_time_str (str)`\r\n* `mybike.statistics.average_sec (float)`\r\n* `mybike.statistics.average_time_str (str)`\r\n* `mybike.statistics.total_wh (int)`\r\n* `mybike.statistics.average_wh (float)`\r\n* `mybike.statistics.kmh (float)`\r\n* `mybike.statistics.average_kmh (float)`\r\n* `mybike.statistics.active_days (int)`\r\n* `mybike.statistics.average_days (float)`\r\n\r\nBikeSensors class - getters:\r\n* `mybike.sensors (BikeSensors)`\r\n* `mybike.sensors.user_torque_sensitivity (int)`\r\n* `mybike.sensors.recup_level_user_offset (int)`\r\n\r\nBikeSensors class - setters:\r\n* `mybike.sensors.user_torque_sensitivity = <torque (int)>`\r\n* `mybike.sensors.recup_level_user_offset = <recup (int)>`\r\n* `mybike.sensors.set(<torque (int)>, <recup (int)>)`\r\n\r\nBikeMotorTuning class - getters:\r\n* `mybike.motor_tuning (BikeMotroTuning)`\r\n* `mybike.motor_tuning.tuning_speed (int)`\r\n* `mybike.motor_tuning.tuning_torque (int)`\r\n* `mybike.motor_tuning.tuning_agility (int)`\r\n* `mybike.motor_tuning.tuning_speed = <speed (int)>`\r\n* `mybike.motor_tuning.tuning_torque = <torque (int)>`\r\n* `mybike.motor_tuning.tuning_agility = <agility (int)>`\r\n* `mybike.motor_tuning.set(<speed (int)>, <torque (int)>, <agility (int)>)`\r\n\r\nBikeSettings class - getters:\r\n* `mybike.settings (BikeSettings)`\r\n* `mybike.settings.auto_lock_mode (bool)`\r\n* `mybike.settings.auto_power_off_time (int)`\r\n* `mybike.settings.clock_format (str)`\r\n* `mybike.settings.date_format (str)`\r\n* `mybike.settings.distance_unit (str)`\r\n* `mybike.settings.language (str)`\r\n* `mybike.settings.speed_unit (str)`\r\n \r\nBikeSettings class - setters:\r\n* `mybike.settings.auto_lock_mode = <mode (bool)>`\r\n* `mybike.settings.auto_power_off_time = <time (int)>`\r\n* `mybike.settings.clock_format = <format (str)>`\r\n* `mybike.settings.date_format = <format (str)>`\r\n* `mybike.settings.distance_unit = <unit (str)>`\r\n* `mybike.settings.language = <language(str)>`\r\n* `mybike.settings.speed_unit = <unit (str)>`\r\n* `mybike.settings.set(<auto_lock_mode (bool)>, <auto_power_off_time (int)>, <clock_format (str)>, <date_format (str)>, <distance_unit (str)>, <language (str)>, <speed_unit (str)>)`\r\n\r\nBikeUser class:\r\n* `mybike.user (BikeUser)`\r\n* `mybike.user.first_name (str)`\r\n* `mybike.user.last_name (str)`\r\n* `mybike.user.street_name (str)`\r\n* `mybike.user.house_number (str)`\r\n* `mybike.user.postal_code (str)`\r\n* `mybike.user.city (str)`\r\n* `mybike.user.country (str)`\r\n* `mybike.user.phone (str)`\r\n* `mybike.user.mobile (str)`\r\n* `mybike.user.email (str)`\r\n* `mybike.user.gender (str)`\r\n* `mybike.user.size (float)`\r\n* `mybike.user.weight (float)`\r\n* `mybike.user.accepted_gdpr_version (str)`\r\n* `mybike.user.may_receive_mails (bool)`\r\n\r\nBikeShop class:\r\n* `mybike.user.shop (BikeShop)`\r\n* `mybike.user.shop.name (str)`\r\n* `mybike.user.shop.street (str)`\r\n* `mybike.user.shop.postal_code (str)`\r\n* `mybike.user.shop.city (str)`\r\n* `mybike.user.shop.country_code (str)`\r\n* `mybike.user.shop.country_name (str)`\r\n* `mybike.user.shop.phone (str)`\r\n* `mybike.user.shop.latitude (float)`\r\n* `mybike.user.shop.longitude (float)`\r\n* `mybike.user.shop.debitor (float)`\r\n\r\nServiceInfo class:\r\n* `mybike.service_info (ServiceInfo)`\r\n* `mybike.service_info.shop (BikeShop)`\r\n* `mybike.service_info.vin (str)`\r\n* `mybike.service_info.serial (str)`\r\n* `mybike.service_info.service_logs ([ServiceLog)]`\r\n* `mybike.service_info.bike_parts ([BikePart)]`\r\n\r\nServiceLog class:\r\n* `mybike.service_info.service_logs[] (ServiceLog)`\r\n* `mybike.service_info.service_logs[].note (str)`\r\n* `mybike.service_info.service_logs[].created_on (int)`\r\n\r\nBikePart class:\r\n* `mybike.service_info.bike_parts[] (BikePart)`\r\n* `mybike.service_info.bike_parts[].serial (str)`\r\n* `mybike.service_info.bike_parts[].name (str)`\r\n* `mybike.service_info.bike_parts[].category (str)`\r\n\r\nBikeShopList class:\r\n* `mybike.shops.lookup(<part of shopname (str)>) (BikeShop)`\r\n* `mybike.shops[i] (BikeShop)`\r\n\r\nYearStats class:\r\n* `mybike.year_stats(year (int), num_years (int)) (YearStats)`\r\n* `mybike.year_stats(year (int), num_years (int)).start_date (str)`\r\n* `mybike.year_stats(year (int), num_years (int)).end_date (str)`\r\n* `mybike.year_stats(year (int), num_years (int)).total_years (int)`\r\n* `mybike.year_stats(year (int), num_years (int)).km_avg_years_since_beginning (float)`\r\n* `mybike.year_stats(year (int), num_years (int)).year_record (float)`\r\n* `mybike.year_stats(year (int), num_years (int)).csv_dump()`\r\n* `mybike.year_stats(year (int), num_years (int)).excel_dump()`\r\n* `mybike.year_stats(year (int), num_years (int))[year (str)] (PeriodicInfo)`\r\n\r\nMonthStats class:\r\n* `mybike.month_stats(year (int), month (int), num_months (int)) (MonthStats)`\r\n* `mybike.month_stats(year (int), month (int), num_months (int)).start_date (str)`\r\n* `mybike.month_stats(year (int), month (int), num_months (int)).end_date (str)`\r\n* `mybike.month_stats(year (int), month (int), num_months (int)).total_months (int)`\r\n* `mybike.month_stats(year (int), month (int), num_months (int)).km_avg_12_months (float)`\r\n* `mybike.month_stats(year (int), month (int), num_months (int)).month_record (float)`\r\n* `mybike.monthg_stats(year (int), month (int), num_months (int)).csv_dump()`\r\n* `mybike.monthg_stats(year (int), month (int), num_months (int)).excel_dump()`\r\n* `mybike.monthg_stats(year (int), month (int), num_months (int))[month (str)] (PeriodicInfo)`\r\n\r\nWeekStats class:\r\n* `mybike.week_stats(year (int), week (int), num_weeks (int)) (WeekStats)`\r\n* `mybike.week_stats(year (int), week (int), num_weeks (int)).start_date (str)`\r\n* `mybike.week_stats(year (int), week (int), num_weeks (int)).end_date (str)`\r\n* `mybike.week_stats(year (int), week (int), num_weeks (int)).total_weeks (int)`\r\n* `mybike.week_stats(year (int), week (int), num_weeks (int)).km_avg_12_weeks (float)`\r\n* `mybike.week_stats(year (int), week (int), num_weeks (int)).week_record (float)`\r\n* `mybike.week_stats(year (int), week (int), num_weeks (int)).csv_dump()`\r\n* `mybike.week_stats(year (int), week (int), num_weeks (int)).excel_dump()`\r\n* `mybike.week_stats(year (int), week (int), num_weeks (int)).[week (str)] (PeriodicInfo)`\r\n\r\nDayStats class:\r\n* `mybike.day_stats(year (int), month (int), day (int), num_days (int)) (DayStats)`\r\n* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).start_date (str)`\r\n* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).end_date (str)`\r\n* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).total_days (int)`\r\n* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).km_avg_30_days (float)`\r\n* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).day_record (float)`\r\n* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).csv_dump()`\r\n* `mybike.day_stats(year (int), month (int), day (int), num_days (int)).excel_dump()`\r\n* `mybike.day_stats(year (int), month (int), day (int), num_days (int))[day (str)] (PeriodicInfo)`\r\n\r\nAny suggestions for additions are of course also very welcome!\r\n",
    "bugtrack_url": null,
    "license": "GPL",
    "summary": "Stromer API for accessing data from your Stromer Speed Bike.",
    "version": "2.0.4",
    "project_urls": {
        "Homepage": "https://github.com/elnkosc/stromer_api"
    },
    "split_keywords": [
        "stromer",
        "ebike",
        "python",
        "api"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f5689d99d8ab7c0c8684bfaf296881bb4ea1a563b38f7062baaafefb41e9b542",
                "md5": "f67321bd6495e0e6ffe949f1cd00344c",
                "sha256": "4ffc3e4370beca7097c88086cf74c585ff880de2a7739dd34d0c1f1eda5ba26e"
            },
            "downloads": -1,
            "filename": "stromer_api-2.0.4.tar.gz",
            "has_sig": false,
            "md5_digest": "f67321bd6495e0e6ffe949f1cd00344c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 13953,
            "upload_time": "2023-07-15T18:45:06",
            "upload_time_iso_8601": "2023-07-15T18:45:06.719827Z",
            "url": "https://files.pythonhosted.org/packages/f5/68/9d99d8ab7c0c8684bfaf296881bb4ea1a563b38f7062baaafefb41e9b542/stromer_api-2.0.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-07-15 18:45:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "elnkosc",
    "github_project": "stromer_api",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "stromer-api"
}
        
Elapsed time: 0.12989s