Giter Club home page Giter Club logo

hassrenaultze's Introduction

renault

GitHub Release GitHub Activity License

hacs Project Maintenance

Discord Community Forum

Component to integrate with Renault.

⚠️ The Renault integration was originally merged into core in 2021.8 and finalised in 2021.10. The use of this custom component has been deprecated since then and should no longer be used

This component will set up the following platforms.

Platform Description
binary_sensor Show car charge and plug status as True or False.
device_tracker Show car location.
sensor Show various information about the car status.

example

Requirements

This component requires Home Assistant version 0.115 or greater.

Installation

  1. Using the tool of choice open the directory (folder) for your HA configuration (where you find configuration.yaml).
  2. If you do not have a custom_components directory (folder) there, you need to create it.
  3. In the custom_components directory (folder) create a new folder called renault.
  4. Download all the files from the custom_components/renault/ directory (folder) in this repository.
  5. Place the files you downloaded in the new directory (folder) you created.
  6. Restart Home Assistant
  7. In the HA UI go to "Configuration" -> "Integrations" click "+" and search for "Renault"

Using your HA configuration directory (folder) as a starting point you should now also have this:

custom_components/renault/translations/en.json
custom_components/renault/translations/fr.json
custom_components/renault/translations/sensor.en.json
custom_components/renault/translations/sensor.fr.json
custom_components/renault/__init__.py
custom_components/renault/binary_sensor.py
custom_components/renault/config_flow.py
custom_components/renault/const.py
custom_components/renault/device_tracker.json
custom_components/renault/manifest.json
custom_components/renault/renault_coordinator.py
custom_components/renault/renault_entities.py
custom_components/renault/renault_hub.py
custom_components/renault/renault_vehicle.py
custom_components/renault/sensor.py
custom_components/renault/services.py
custom_components/renault/services.yaml
custom_components/renault/strings.json

Configuration

Configuration is done in the UI, but some cases need specific configuration.

Logging

If you are having issues with the component, please enable debug logging in your configuration.yaml, for example:

logger:
  default: error
  logs:
    renault_api: debug
    custom_components.renault: debug

Contributions are welcome!

If you want to contribute to this please read the Contribution guidelines


hassrenaultze's People

Contributors

epenet avatar giancky79 avatar jeedhome44 avatar johan12345 avatar oncleben31 avatar pysx avatar toby17780 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hassrenaultze's Issues

KeyError

Thanks for this great component!

I get the following error:

self._state = jsonresult['batteryLevel']
KeyError: 'batteryLevel'

The response I get from the API looks like this:

{'timestamp': '2020-03-10T21:06:19Z',
 'batteryTemperature': 20,
 'batteryCapacity': 0}

This might be a problem with my account since I just got my 🚗 the other day, but anyway I'd suggest using jsonresult.get('batteryLevel') to be more robust.

Disconnect frequently

Describe the bug

All sensors related to the Renault integration disconnect frequently. And display unavailable while being disconnected. Please see on the screenshots:
image
image
image

I do have the latest version v3.0.2 (no update available in HACS). I tried reloading the integration. What is suprising is that with the former way (writing in the yaml file), it still works fine:

image

Uppercase VIN and MODE + Problem action Calendar On

The VIN and the 2 load modes must be capitalized in the scripts to launch actions.

However, I cannot activate the calendar after having successfully deactivated it.
With version 2, it could be activated with the function to return the entire calendar.

unknown sensor status

Hello,

No more updates since July 1 at 12:30.
Renault changed something?

The status of my sensor is now unknown after a reboot.
However, I haven't changed anything on my MyRenault account. I renewed my services in June and it continued to work.

Allow translation of the entity `charge_state` and `plug_state`

Idea for improvement. You can add the following value in the string file to allow translation of the entity charge_state and plug_state:

_CHARGE_STATES = {
    0.0: ['Not charging', 'NOT_IN_CHARGE'],
    0.1: ['Waiting for planned charge', 'WAITING_FOR_PLANNED_CHARGE'],
    0.2: ['Charge ended', 'CHARGE_ENDED'],
    0.3: ['Waiting for current charge', 'WAITING_FOR_CURRENT_CHARGE'],
    0.4: ['Energy flap opened', 'ENERGY_FLAP_OPENED'],
    1.0: ['Charging', 'CHARGE_IN_PROGRESS'],
    # This next is more accurately "not charging" (<= ZE40) or "error" (ZE50).
    # But I don't want to include 'error' in the output text because people will
    # think that it's an error in Pyze when their ZE40 isn't plugged in...
    -1.0: ['Not charging or plugged in', 'CHARGE_ERROR'],
    -1.1: ['Not available', 'NOT_AVAILABLE']

_PLUG_STATES = {
    0: ['Unplugged', 'UNPLUGGED'],
    1: ['Plugged in', 'PLUGGED'],
    -1: ['Plug error', 'PLUG_ERROR'],
    -2147483648: ['Not available', 'NOT_AVAILABLE']

Originally posted by @oncleben31 in #30 (comment)

convert range to Miles depending on the country code

I know its simple enough to convert km to miles using a template sensor, but since the config-flow already knows the country code , it would be nice to have miles rather than Km

P.s the new integration is so much better, no errors, much quicker to load , stunning work thank-you

Error requesting hvac_status data

Version: v3.0.0-rc2
Getting Errror Messages with my Renault Zoe Phase 2
Im not getting any HVAC Informations...

Logger: custom_components.renault.pyzevehicleproxy
Source: helpers/update_coordinator.py:152
Integration: Renault (documentation)
First occurred: 21:55:16 (1 occurrences)
Last logged: 21:55:16

Error requesting VINXXXXXXXXXXXX hvac_status data: 502 Server Error: Bad Gateway for url: https://api-wired-prod-1-euw1.wrd-aws.com/commerce/v1/accounts/ACCOUNTXXXXXXXXXXXXXXX/kamereon/kca/car-adapter/v1/cars/VINXXXXXXXXXXXX/hvac-status?country=DE

Can't add integration in HA

I'have followed the installation steps in the readme:
Copied all files to 'custom_components\renault' and when i try to add the integration by clicking the '+' and typing 'Renault' it cannot find the integration.
When looking in the manifest i find the url 'https://www.home-assistant.io/integrations/renault' for the documentation but this page does not exist.
I want to add the integration manually but i require all the settings for this component, can you please provide this?

429 Too many requests

Hello,

I'm recently noticed on logs that renault api is giving me 429 HTTP Code, that corresponds to too many requests.
So, there is some kind of workarround tou fix this?

image

Here the blank spaces on the graph is when the error occurrs.
image

Thanks!

Typo in Readme

In the section 'Converting attributes to sensors' there is a typo in the example.
Sensor 'mycar_plugged' has "{{" too many.

value_template: "{{ {{ state_attr('sensor.mycar' , 'plugged') }}"
should be:
value_template: "{{ state_attr('sensor.mycar' , 'plugged') }}"

More informations and actions

Can we have this informations:

  • remaining time
  • load power
  • calendar status
  • preconditioning state

And can we also have these actions:

  • ignition of preconditioning
  • calendar activation
  • calendar deactivation

It's possible? With the Jeedom pluggin, before, i have this informations and actions :)

Implement new client from jamesremuscat

For the jamesremuscat module there is two ways of implementing it cliand api. So no need to use environment variables.
If we expect to have an official integration in HA, having a module installable by pip is a prerequisite.

Originally posted by @oncleben31 in #6 (comment)

sensor.zoe_range

Hello,

since ca. two weeks don’t work the “range” anymore. Other sensors (that I use) work fine.
In the logbook I can’t find any entries.

Version of the custom_component

3.0.3

Battery / Mileage update failed: Traceback (most recent call last)

Hallo zusammen,

seit 2 Tagen habe ich folgende Fehlermeldung im Log und es wird nichts mehr angezeigt:

2020-04-04 21:57:01 WARNING (SyncWorker_2) [custom_components.renaultze.sensor] Battery update failed: Traceback (most recent call last):
File "/config/custom_components/renaultze/sensor.py", line 152, in update
jsonresult = self._vehicle.battery_status()
File "/usr/local/lib/python3.7/site-packages/pyze/api/kamereon.py", line 204, in battery_status
return self._get('battery-status')
File "/usr/local/lib/python3.7/site-packages/pyze/api/kamereon.py", line 184, in _get
response.raise_for_status()
File "/usr/local/lib/python3.7/site-packages/requests/models.py", line 941, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://api-wired-prod-1-euw1.wrd-aws.com/commerce/v1/accounts/kmr/remote-services/car-adapter/v1/cars/VF1AG00000000000/battery-status

2020-04-04 21:57:01 WARNING (SyncWorker_2) [custom_components.renaultze.sensor] Mileage update failed: Traceback (most recent call last):
File "/config/custom_components/renaultze/sensor.py", line 159, in update
jsonresult = self._vehicle.mileage()
File "/usr/local/lib/python3.7/site-packages/pyze/api/kamereon.py", line 217, in mileage
return self._get('cockpit')
File "/usr/local/lib/python3.7/site-packages/pyze/api/kamereon.py", line 184, in _get
response.raise_for_status()
File "/usr/local/lib/python3.7/site-packages/requests/models.py", line 941, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://api-wired-prod-1-euw1.wrd-aws.com/commerce/v1/accounts/kmr/remote-services/car-adapter/v1/cars/VF1AG00000000000/cockpit

Noch jemand oder liegt es an meinem Account?

platform does not load - permission denied

Hi! Sorry to bother you, however I have an issue which I have both on version 0.89.2 and the latest release v0.99.3 (a brand new install within a FreeNas jail, in a virtual environment). I follow your installation guide, but the platform does not load when homeassistant starts. Here's the error message I get in the logs.

Error while setting up platform renaultze

Traceback (most recent call last):
File "/srv/homeassistant/lib/python3.6/site-packages/homeassistant/helpers/entity_platform.py", line 150, in _async_setup_platform
await asyncio.wait_for(asyncio.shield(task), SLOW_SETUP_MAX_WAIT)
File "/usr/local/lib/python3.6/asyncio/tasks.py", line 358, in wait_for
return fut.result()
File "/home/hass/homeassistant/custom_components/renaultze/sensor.py", line 68, in async_setup_platform
g = Gigya(api_key=g_key,root_url=g_url)
File "/srv/homeassistant/lib/python3.6/site-packages/pyze/api/gigya.py", line 23, in init
self.set_api_key(api_key)
File "/srv/homeassistant/lib/python3.6/site-packages/pyze/api/gigya.py", line 26, in set_api_key
self._credentials.store('gigya-api-key', api_key, None)
File "/srv/homeassistant/lib/python3.6/site-packages/pyze/api/credentials.py", line 70, in store
self._write()
File "/srv/homeassistant/lib/python3.6/site-packages/pyze/api/credentials.py", line 75, in _write
os.makedirs(dirname)
File "/srv/homeassistant/lib/python3.6/os.py", line 220, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/.credentials'

Is there a way that you could help me out? Many thanks!!! Markus

Wrong type of quotation marks in template sensors?

Hello,
I had to change some of the qoutation marks from double to single and vice versa.
This works for me in Home Assistant 0.86.3:

  • platform: template
    sensors:
    mycar_plugged:
    value_template: "{{ state_attr('sensor.mycarbattery' , 'plugged') }}"
    friendly_name: "Plugged"
  • platform: template
    sensors:
    mycar_charging:
    value_template: "{{ state_attr('sensor.mycarbattery' , 'charging') }}"
    friendly_name: "Charging"
  • platform: template
    sensors:
    mycar_remaining_range:
    value_template: "{{ state_attr('sensor.mycarbattery' , 'remaining_range') }}"
    friendly_name: "Range"
    unit_of_measurement: 'km'

Platform error sensor.renaultze - No module named 'pyze'

Hello,

i download the new git you upgrade tomorrow.
i do what README say in my configuration.yaml

But, when i test configuration before reboot, i have this:

Platform error sensor.renaultze - No module named 'pyze'

What i have to do?

Cannot update sensor

I have install hassRenaultZE, in order to monitor my Zoe .
In the home assistant log, I have the following traceback
2020-09-24 21:35:54 WARNING (SyncWorker_9) [custom_components.renaultze.sensor] Battery update failed: Traceback (most recent call last): File "/home/homeassistant/.homeassistant/custom_components/renaultze/sensor.py", line 252, in update jsonresult = self._vehicle.battery_status() File "/srv/homeassistant/lib/python3.7/site-packages/pyze/api/kamereon.py", line 193, in battery_status return self._get('battery-status', 2) File "/srv/homeassistant/lib/python3.7/site-packages/pyze/api/kamereon.py", line 166, in _get response.raise_for_status() File "/srv/homeassistant/lib/python3.7/site-packages/requests/models.py", line 941, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://api-wired-prod-1-euw1.wrd-aws.com/commerce/v1/accounts/abcd1234 /kamereon/kca/car-adapter/v2/cars/VF1AG000262186006/battery-status?country=GB

The sensor is always in "unknown state".

How can I get the hassRenaultZE working

Sensor not showing up

Hi and thanks for the nice contribution!

I followed all steps as you suggested but the sensor you mention is not showing up.
There is only a warning message:
You are using a custom integration for renaultze which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant. Connection lost. Reconnecting…
But besides from that no errors are showing up. Do you have any suggestions what to check?
Thank you!

last_update value.

Hi.

I would ask if it is possible to re-add the last_update value to the sensors.

Thanks for the great job.

Cri.

Actions HVAC and Charge

It's possible to add actions charge and HVAC please?

In the pyze document, we have that:

Writing data
Each of these expects a JSON object body of the form:

{
"data": {
"type": "SomeTypeName",
"attributes": {
(... the actual data ...)
}
}
}

In many cases, you'll be re-POSTing a similar object to that which you received for the corresponding GET method. A success response from the server tends to be the same object you just POSTed, with an ID added. I've listed the required attributes where I know them.

/actions/charge-mode (POST): sets the charge mode. (Type ChargeMode)
action: either schedule_mode or always_charging (possibly a third value - see above)
/actions/hvac-start (POST): Sets the preconditioning timer, or turns on preconditioning immediately. (Type HvacStart)
action: start
targetTemperature: in degrees Celsius. The app is hard-coded to use 21°C.
startDateTime: if supplied, should be of the form YYYY-MM-DDTHH:MM:SSZ - I'm not sure what would happen if you tried to use a different timezone offset. If not supplied, preconditioning will begin immediately.

Ignore charge_mode when not supported

I have this error:

2020-10-18 00:28:26 ERROR (MainThread) [custom_components.renault.pyzevehicleproxy] Error requesting VF1AG_REDACTED charge_mode data: 403 Client Error: Forbidden for url: https://api-wired-prod-1-euw1.wrd-aws.com/commerce/v1/accounts/REDACTED/kamereon/kca/car-adapter/v1/cars/VF1AG_REDACTED /charge-mode?country=FR

Is it related to 'direct charge' or using schedule ? If yes this is normal. I 've the Life version and I think the option is not compatible with this Zoé version

Originally posted by @oncleben31 in #30 (comment)

Gigya returned error 403007, error when setting up component

Restarted Home Assistant now without any changes to the ZE component and got the following error:

Error while setting up renaultze platform for sensor Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 179, in _async_setup_platform await asyncio.wait_for(asyncio.shield(task), SLOW_SETUP_MAX_WAIT) File "/usr/local/lib/python3.8/asyncio/tasks.py", line 483, in wait_for return fut.result() File "/config/custom_components/renaultze/sensor.py", line 102, in async_setup_platform g.account_info() File "/usr/local/lib/python3.8/site-packages/pyze/api/credentials.py", line 26, in inner return func(*args, **kwargs) File "/usr/local/lib/python3.8/site-packages/pyze/api/gigya.py", line 77, in account_info raise_gigya_errors(response_body) File "/usr/local/lib/python3.8/site-packages/pyze/api/gigya.py", line 123, in raise_gigya_errors raise RuntimeError( RuntimeError: Gigya returned error 403007: Invalid namespace &#39;accounts&#39; or method &#39;getAccountInfo&#39; or you do not have the required permissions to call it.

Anyone experienced this?

v3.0.0: unknown error when logging in

When setting up the new version with the config flow, it gives me the error message "Unknown error occurred". In the log, I find the following error:

File "/home/alarm/.homeassistant/custom_components/renault/config_flow.py", line 66, in async_step_credentials
    if not await self.pyzeproxy.attempt_login():
  File "/home/alarm/.homeassistant/custom_components/renault/pyzeproxy.py", line 69, in attempt_login
    self._gigya.login,
AttributeError: 'NoneType' object has no attribute 'login'

Warning message done by HA 0.109.x

Since the new release of HA we have this warning message:


Logger: homeassistant.util.async_
Source: util/async_.py:120
First occurred: 8:17:24 (2 occurrences)
Last logged: 8:17:25

Detected I/O inside the event loop. This is causing stability issues. Please report issue to the custom component author for renaultze doing I/O at custom_components/renaultze/sensor.py, line 83: config.get(CONF_PASSWORD)):
Detected I/O inside the event loop. This is causing stability issues. Please report issue to the custom component author for renaultze doing I/O at custom_components/renaultze/sensor.py, line 85: g.account_info()

It seems we need to optimize the code to reduce I/O when not expected.

Add Info sensor: Last get request to renault server

hello,

is it possible to have an information in a sensor which displays the date and time of the last consultation of the renault server?
that would allow to see at a glance if the info of such or such sensor is up to date or not.

in version 2.0 there was this information. I see that it is assigned in 2 different sensors but it is not the same value for the 2. Why? and it doesn't really show the last home assistant check.

New Reanault app and now I cannot connect anymore

Love your contribution to HA with this sensor. Today I got a message that the existing app is not supported anymore and after that the renaultze sensor cannot connect anymore. I get the following error message:

Update failed: 'RestrictedCountryException'
9:08 PM custom_components/renaultze/sensor.py (ERROR) - message first occured at 8:28 PM and shows up 41 times

Charge_mode on/off fails

Don't work:
Charge_mode on: KO > need lowercase
Charge_mode off: KO > need lowercase
Hvac off: KO > never work

Work:
Hvac on: OK
Calendar_set: OK > Activ Cal
Charge_go: OK > Deactiv Cal

I think the problem with charge_mode is the upper case letters in the script. if I put SCHEDULE_MODE or ALWAYS_CHARGING in lowercase, the script does not work. But I think we have to send lowercase to Renault. can you fix this problem?

Originally posted by @JeedHome44 in #83 (comment)

adaption needed for current home assistant

The sensor still works for me but I had to shuffle files around as home assistant now requires each custom component to be in it's own subdirectory.

custom_components/renaultze/renaultzeservice
custom_components/renaultze/renaultzeservice/__init__.py
custom_components/renaultze/renaultzeservice/renaultzeservice.py
custom_components/renaultze/sensor.py
custom_components/renaultze/__init__.py

the renaultze/init.py is crucial for the sensor to work with HA 0.92 and only contains a remark:

"""The renaultze sensor"""

slow return states

Hello,

is it normal that the return is slow to come back?

can we force a return of state after sending an action?

Move functionnality to PyPi package

For the renault integration to be allowed into HA core, we need to move some of the functionnality into a PyPi-hosted package.
PyZE is a very good starting point, but some functionnality is still missing.

Do you want me to improve GitHub Actions?

Is your feature request related to a problem? Please describe.
The only CI in here is Hassfest.

Describe the solution you'd like
I can contribute some advanced CI to your repository in a PR. Let me know if you want that.

Describe alternatives you've considered
Closing this issue.

Additional context
Add any other context or screenshots about the feature request here.

Add repo to HACS

For easy installation and updating it would be awesome if this repo would be available in HACS.
Any chance?

Add time unit

Can you add time unit here?

class RenaultChargingRemainingTimeSensor(RenaultBatteryDataEntity):
    """Charging Remaining Time sensor."""

    @property
    def state(self) -> Optional[int]:
        """Return the state of this entity."""
        return self.data.chargingRemainingTime

With:

add sensor.py line 16:

TIME_MINUTES,

add sensor.py line 160:

    @property
    def unit_of_measurement(self) -> str:
        """Return the unit of measurement of this entity."""
        return TIME_MINUTES

Multiple Kamereon accounts found

I see the following message in the Home Assistant logs.

WARNING: Multiple Kamereon accounts found:
- REDACTED
- REDACTED
Using the first of these. If that's not correct (perhaps you can't see your vehicle)
or to silence this message, run `pyze set-account` or set the KAMEREON_ACCOUNT_ID
environment variable to the account you want to use i.e.
    KAMEREON_ACCOUNT_ID=abcdef123456789 pyze ...
API users may instead call Kamereon#set_account_id().
This setting will persist until you next log in.

Any clue on how to solve this with the integration. As I using hassio I'm not sure to be able to run the command.

Do you want me to add GitHub Actions?

Is your feature request related to a problem? Please describe.
If you want, I can contribute some advanced CI to your repository in a PR. Right now it doesn't have any HACS or flake8, just hassfest.

Describe the solution you'd like
I can contribute some combined CI from https://KTibow/ha-blueprint#readme

Describe alternatives you've considered
I can also add some separate CI without relying on a 3rd party.

Additional context
Add any other context or screenshots about the feature request here.

Charging attribute : issue or feature ?

Hello,

"Charging" attribute is set to true or false if "Charge State" > 0 by : self._attrs[ATTR_CHARGING] = jsonresult['chargingStatus'] > 0

Is this a feature ? Because, charging status could have values between 0 and 1. And for my perception this values are "not charging" (charging = false). https://github.com/jamesremuscat/pyze/blob/05dbe5d28ff73ecf0553bc33c7ab5913cb786cfe/src/pyze/api/kamereon.py#L371
In my opinion only value 1.0 is "charging". But it could be a position to set "charging" to true when value > 0 and let people check "charge state" for the "real status".

What do you think about it ?
Thanks for your time.

Invalid credentials

When first configuring the component through the UI, I get the error "Invalid credentials."

Whilst I can login to https://my.renault.nl/ with the same credentials without any issue.

In the log there is this:

2020-10-30 15:11:33 ERROR (MainThread) [custom_components.renault.pyzeproxy] Login to Gigya failed: Gigya returned error 403042: invalid loginID or password

Im using version 3.0.0. Home Assistant version 0.117.0 (also checked 0.117.1). My locale is nl_NL. I used HACS to install the component.

batteryTemperature not available

Since the PR #12 is merged, you expect to have batteryTemperature in the json from the API.
I have an error related to that as it seems I don't have this key in the API response.
Perhaps link to the model.

Loss of adsl connection

Hello,

If I have an ADSL disconnection, Pyze no longer updates the information as soon as the ADSL has returned. The actions don't work too. I have to do a Hassio reboot for this to work.
Would there be a possible refresh solution through automation?

Thank you

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.