Comments (22)
I'm not sure what is going on here, the error means that the device responded with a simple BAD REQUEST
message for some reason.
We are investigating something similar in #53, and one idea is that we need to add an artificial sleep between the API calls. If you have some spare time, you can try running the code in this PR that adds an extra delay. Maybe this solves your problem too.
from home-assistant-candy.
I am seeing similar symptoms but maybe not the same cause.
Not long after getting the new washing machine (last week), I tried using the CandySimplyFi-tool to successfully get the key and was able to use that key to read the json payload (properly). It worked for days.
At the weekend, I tried to set up this integration but it failed with similar symptoms to this issue. Then, when I tried the tool again, it also failed.
Tonight, I tried using curl directly and found that calling:
curl -s http://<ip>/http-read.json?encrypted=0
always returns {"response":"BAD REQUEST"}.
However, calling:
curl -s http://<ip>/http-read.json?encrypted=1 | xxd -r -p
returns
{
"statusLavatrice":{
"WiFiStatus":"0",
"Err":"255",
"MachMd":"2",
"Pr":"13",
"PrPh":"5",
"SLevel":"255",
"Temp":"0",
"SpinSp":"0",
"Opt1":"0",
"Opt2":"0",
"Opt3":"0",
"Opt4":"0",
"Opt5":"0",
"Opt6":"0",
"Opt7":"0",
"Opt8":"0",
"Steam":"0",
"DryT":"0",
"DelVal":"255",
"RemTime":"10",
"RecipeId":"0",
"CheckUpState":"0"
}
Thus, asking for encrypted doesn't return encrypted but asking for no encryption returns an error!
I guess that some kind of firmware update happened after it had been connected to the WIFI for a little while and the behaviour changed as a result?
from home-assistant-candy.
Ah, I see that the code already tries to handle this encrypted / not encrypted scenario. I tried commenting out everything in the first try block to make it skip the encrypted=0 case and I was able to add the integration but the sensor doesn't work. I then used the 5s sleep from the PR you linked (restoring the first try block) and it resulted in the same thing (integration was added, sensor fails to update). The logs in both cases are the same:
2022-02-16 20:16:09 INFO (MainThread) [custom_components.candy.client] Backing off status_with_retry(...) for 0.1s (aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected)
2022-02-16 20:16:11 DEBUG (MainThread) [custom_components.candy] Finished fetching candy data in 21.611 seconds (success: False)
2022-02-16 20:16:19 INFO (MainThread) [custom_components.candy.client] Backing off status_with_retry(...) for 0.7s (aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 192.168.18.154:80 ssl:default [Connect call failed ('192.168.18.154', 80)])
2022-02-16 20:16:27 INFO (MainThread) [custom_components.candy.client] Backing off status_with_retry(...) for 0.3s (aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected)
2022-02-16 20:16:29 DEBUG (MainThread) [custom_components.candy] Finished fetching candy data in 13.145 seconds (success: False)
2022-02-16 20:16:41 DEBUG (MainThread) [custom_components.candy] Finished fetching candy data in 1.615 seconds (success: False)
2022-02-16 20:17:02 DEBUG (MainThread) [custom_components.candy] Finished fetching candy data in 1.547 seconds (success: False)
2022-02-16 20:17:44 DEBUG (MainThread) [custom_components.candy] Finished fetching candy data in 1.552 seconds (success: False)
2022-02-16 20:19:05 DEBUG (MainThread) [custom_components.candy] Finished fetching candy data in 1.546 seconds (success: False)
2022-02-16 20:20:27 DEBUG (MainThread) [custom_components.candy] Finished fetching candy data in 1.705 seconds (success: False)
2022-02-16 20:21:49 DEBUG (MainThread) [custom_components.candy] Finished fetching candy data in 1.560 seconds (success: False)
2022-02-16 20:23:10 DEBUG (MainThread) [custom_components.candy] Finished fetching candy data in 1.545 seconds (success: False)
2022-02-16 20:24:32 DEBUG (MainThread) [custom_components.candy] Finished fetching candy data in 1.549 seconds (success: False)
2022-02-16 20:25:53 DEBUG (MainThread) [custom_components.candy] Finished fetching candy data in 1.581 seconds (success: False)
FWIW, I can rapidly and repeatedly curl the JSON status and there is no error.
from home-assistant-candy.
I am not sure how you go about testing a PR in HASS. Tried dumping the changed init.py into custom components but doesnt seem to like changes like that.
The delay issue is something I came across this morning when i threw together a python script to dump the data into a json file. A few runs in I got a BAD REQUEST response.
Except requests.exceptions.RequestException
reported too many API requests. Sticking a delay in seemed to resolve this.
from home-assistant-candy.
I think I fixed the problem with handling encrypted=1 but no key. The status() method assumed that key="" means not encrypted so I changed it to match the detect_encryption() logic where there is slightly different processing for encrypted with and without key as follows:
async def status(self) -> Union[WashingMachineStatus, TumbleDryerStatus, DishwasherStatus, OvenStatus]:
url = _status_url(self.device_ip, self.use_encryption)
async with self.session.get(url) as resp:
if self.use_encryption:
resp_hex = await resp.text() # Response is hex encoded encrypted data
if self.encryption_key != "":
decrypted_text = decrypt(self.encryption_key.encode(), bytes.fromhex(resp_hex))
else:
decrypted_text = bytes.fromhex(resp_hex)
resp_json = json.loads(decrypted_text)
else:
resp_json = await resp.json(content_type="text/html")
_LOGGER.debug(resp_json)
if "statusTD" in resp_json:
status = TumbleDryerStatus.from_json(resp_json["statusTD"])
elif "statusLavatrice" in resp_json:
status = WashingMachineStatus.from_json(resp_json["statusLavatrice"])
elif "statusForno" in resp_json:
status = OvenStatus.from_json(resp_json["statusForno"])
elif "statusDWash" in resp_json:
status = DishwasherStatus.from_json(resp_json["statusDWash"])
else:
raise Exception("Unable to detect machine type from API response", resp_json)
return status
I now have the sensors working in HA (though I note that the time remaining sensor is converting the input in minutes to hours but reporting it as minutes).
FWIW, I wonder whether there should be an explicit call to resp.close()
before the assert for BAD_REQUEST in detect_encryption(). I hacked together some python that repeatedly called the API in a loop and it worked without issue so it doesn't seem like timing ought to make a difference (though it does!). As the context manager is only releasing the connection, I just wondered whether release is not enough here (given that the washing machine itself always wants the connection closed after every request, the session is not really adding much value?).
from home-assistant-candy.
Thank you @gee-jay-bee for the very detailed investigation, that was indeed a bug in the status()
call. I fixed it and merged into main
, can you guys give it a try? You can install the main branch in HACS by selecting Redownload in the HACS menu, then selecting main
in the version dropdown.
The main branch doesn't have any sleep commands between the API calls yet, I'm hoping that this other fix is going to solve at least some of the problems.
from home-assistant-candy.
This did not resolve my issue. Updated HACS, HASS and Redownloaded your Candy integration, then a restart. After entering IP address in flow im still getting "Failed to detect encryption, check logs"
Logger: custom_components.candy.config_flow
Source: custom_components/candy/client/__init__.py:69
Integration: Candy ([documentation](https://github.com/ofalvai/home-assistant-candy), [issues](https://github.com/ofalvai/home-assistant-candy/issues))
First occurred: 19:45:50 (2 occurrences)
Last logged: 19:46:20
Server disconnected
Traceback (most recent call last):
File "/config/custom_components/candy/client/__init__.py", line 62, in detect_encryption
assert resp_json.get("response") != "BAD REQUEST"
AssertionError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/config/custom_components/candy/config_flow.py", line 45, in async_step_user
encryption_type, key = await detect_encryption(
File "/config/custom_components/candy/client/__init__.py", line 69, in detect_encryption
async with session.get(url) as resp:
File "/usr/local/lib/python3.9/site-packages/aiohttp/client.py", line 559, in _request
await resp.start(conn)
File "/usr/local/lib/python3.9/site-packages/aiohttp/client_reqrep.py", line 898, in start
message, payload = await protocol.read() # type: ignore[union-attr]
File "/usr/local/lib/python3.9/site-packages/aiohttp/streams.py", line 616, in read
await self._waiter
aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected
I can get the same output that curl | xxd gives before running it through xorknown.py in python using:
candyhex = requests.get(http://192.168.1.24/http-read.json?encrypted=1, timeout=10).text
bytes_object = bytes.fromhex(candyhex)
coded = bytes_object.decode("ASCII")
If I am reading your code correctly at this point in detect_encryption it tries connection without encryption and gets a bad response (line 62) but then fails the next get request with encryption after the except (line 69). I am very much a beginner and why this is happening I do not know.
from home-assistant-candy.
I have had to downgrade to Version 0.6.2 to enter the Encryption key to get this to work, the latest version gives an error message before asking so will wait for this to be fixed in V 0.8 or so.
The only issue is that it thinks that there is 10 minutes remaining when washing has finished so should show 0,
had to take the /60 (divide 60) out of the /config/custom_components/candy/client/model.py to stop it measuring in hours not minutes.
from home-assistant-candy.
Hi everyone
I have a Candy clothes washer model GVFWFL4139WHR-12.
I have downloaded the Candy SimplyFi addon from HACS, but when I want to add the integration, I receive the following error: "Failed to detect encryption".
I have the correct IP, it responds well to the sentence:
http://IP/http-read.json?encrypted=1
With encrypted=0 I receive as response
{"response":"BAD REQUEST"}
Trying to decode the response received with "encryption=1" on the website https://www.online-python.com/pm93n5Sqg4 I get no response.
The integration never asks me for the KEY in v0.7.0
Using v0.6.2 ask me for KEY but also with error message.
Now I do in master version also with error.
Thank you very much
http://192.x.y.z/http-read.json?encrypted=1
116F626D4E18190A101412290D100F11180B0B014E5116666E6868473B0F280C3916091019184F5146504349616C676C48271A164E514F5951544349616C676C482F0907042609495E435347406B646C634038164E514F5A56434D68666F67473A10380C4E514F5D464D6C6F656F4C3626071E010049574956545447406B646C63403C01011B4F51465354504E4A636F636B4A371C02033814435B475E535B47466F626D6549221B1050435F4E564C496768616D4E241D1F56435B475C444268606B6146231B1958465B43554E4A636F636B4A2B1C1F59495E435147406B646C63402714185E4F5146514349616C676C482D18105A49574954434D68666F674725121C534E514F5B464D6C6F656F4C2A1A16504656495D49486C6B6C65443D110F03054656495D49486C6B6C65442A1713364A5E4E5F4F47696B686C4E220B093C03044656495F5E51434D68666F674738070530050608495E435047406B646C63403A010F021D0E2D05435F4E564C496768616D4E28050E070A34153F120F110F4052465C4960616D1C6C6F11
from home-assistant-candy.
Same problem here , i tried with 0.7,main and 0.62 and same problem:
`Logger: custom_components.candy.config_flow
Source: custom_components/candy/client/init.py:69
Integration: candy (documentation, issues)
First occurred: 23:10:56 (2 occurrences)
Last logged: 23:11:33
Server disconnected
Traceback (most recent call last):
File "/config/custom_components/candy/client/init.py", line 62, in detect_encryption
assert resp_json.get("response") != "BAD REQUEST"
AssertionError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/config/custom_components/candy/config_flow.py", line 45, in async_step_user
encryption_type, key = await detect_encryption(
File "/config/custom_components/candy/client/init.py", line 69, in detect_encryption
async with session.get(url) as resp:
File "/usr/local/lib/python3.10/site-packages/aiohttp/client.py", line 559, in _request
await resp.start(conn)
File "/usr/local/lib/python3.10/site-packages/aiohttp/client_reqrep.py", line 898, in start
message, payload = await protocol.read() # type: ignore[union-attr]
File "/usr/local/lib/python3.10/site-packages/aiohttp/streams.py", line 616, in read
await self._waiter
aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected
`
And read json encrypted is responding:
115A7D6C64250C12163F182A56343545183E1400646C037E68436244602B12583923161133255A49407B494A3A485D3848120517646C5A41577F494A3A485D38481A16062E1B1C5158685A441B4F5E3863752717646C5A425768476B3D4B5D133A25270D646C5A434066666C3E4B7662263201002A7442515068476B3D4B5D133E321A15646C5A4A5268476B3D4B5D1339271E0B15265A49407E494A3A485D3848180711777442515268476B3D4B5D1325270357646C5A434066666C3E4B767E1A2344477C7448514E47616F3E601B411E63555F64665A5F6F40626F150D24455F754D477674547E6843624478322007486D5555647A75796B43492947366313507547476A5B727A6B682416437A760B486755494B5C717A40191F03562F760B486755494B5C717A400E191F63606E135A755B684C5F7151262F0730562E760B48654250647A75796B434934522F00580732555F64674B424066666C3E4B76630F341E15231F1C5158685B441B4F5E386375340D2335132612191F074327760B486755684C5F057E6837
from home-assistant-candy.
Same problem here , i tried with 0.7,main and 0.62 and same problem:
`Logger: custom_components.candy.config_flow Source: custom_components/candy/client/init.py:69 Integration: candy (documentation, issues) First occurred: 23:10:56 (2 occurrences) Last logged: 23:11:33
Server disconnected Traceback (most recent call last): File "/config/custom_components/candy/client/init.py", line 62, in detect_encryption assert resp_json.get("response") != "BAD REQUEST" AssertionError
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "/config/custom_components/candy/config_flow.py", line 45, in async_step_user encryption_type, key = await detect_encryption( File "/config/custom_components/candy/client/init.py", line 69, in detect_encryption async with session.get(url) as resp: File "/usr/local/lib/python3.10/site-packages/aiohttp/client.py", line 559, in _request await resp.start(conn) File "/usr/local/lib/python3.10/site-packages/aiohttp/client_reqrep.py", line 898, in start message, payload = await protocol.read() # type: ignore[union-attr] File "/usr/local/lib/python3.10/site-packages/aiohttp/streams.py", line 616, in read await self._waiter aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected ` And read json encrypted is responding:
115A7D6C64250C12163F182A56343545183E1400646C037E68436244602B12583923161133255A49407B494A3A485D3848120517646C5A41577F494A3A485D38481A16062E1B1C5158685A441B4F5E3863752717646C5A425768476B3D4B5D133A25270D646C5A434066666C3E4B7662263201002A7442515068476B3D4B5D133E321A15646C5A4A5268476B3D4B5D1339271E0B15265A49407E494A3A485D3848180711777442515268476B3D4B5D1325270357646C5A434066666C3E4B767E1A2344477C7448514E47616F3E601B411E63555F64665A5F6F40626F150D24455F754D477674547E6843624478322007486D5555647A75796B43492947366313507547476A5B727A6B682416437A760B486755494B5C717A40191F03562F760B486755494B5C717A400E191F63606E135A755B684C5F7151262F0730562E760B48654250647A75796B434934522F00580732555F64674B424066666C3E4B76630F341E15231F1C5158685B441B4F5E386375340D2335132612191F074327760B486755684C5F057E6837
Solved with #54
from home-assistant-candy.
Hi everyone
I have a Candy clothes washer model GVFWFL4139WHR-12.
I have downloaded the Candy SimplyFi addon from HACS, but when I want to add the integration, I receive the following error: "Failed to detect encryption".
I have the correct IP, it responds well to the sentence: http://IP/http-read.json?encrypted=1
With encrypted=0 I receive as response {"response":"BAD REQUEST"}
Trying to decode the response received with "encryption=1" on the website https://www.online-python.com/pm93n5Sqg4 I get no response.
The integration never asks me for the KEY in v0.7.0 Using v0.6.2 ask me for KEY but also with error message.
Now I do in master version also with error. Thank you very much
http://192.x.y.z/http-read.json?encrypted=1
116F626D4E18190A101412290D100F11180B0B014E5116666E6868473B0F280C3916091019184F5146504349616C676C48271A164E514F5951544349616C676C482F0907042609495E435347406B646C634038164E514F5A56434D68666F67473A10380C4E514F5D464D6C6F656F4C3626071E010049574956545447406B646C63403C01011B4F51465354504E4A636F636B4A371C02033814435B475E535B47466F626D6549221B1050435F4E564C496768616D4E241D1F56435B475C444268606B6146231B1958465B43554E4A636F636B4A2B1C1F59495E435147406B646C63402714185E4F5146514349616C676C482D18105A49574954434D68666F674725121C534E514F5B464D6C6F656F4C2A1A16504656495D49486C6B6C65443D110F03054656495D49486C6B6C65442A1713364A5E4E5F4F47696B686C4E220B093C03044656495F5E51434D68666F674738070530050608495E435047406B646C63403A010F021D0E2D05435F4E564C496768616D4E28050E070A34153F120F110F4052465C4960616D1C6C6F11
Hi
I dont resolve this issue
What I see is that every time I run the code http://IP/http-read.json?encrypted=1 the response changes.
I don't know if it depends on the program that the washing machine is running.
I couldn't get the CandySimplyFi-tool to work either the python site to obtain the key.
from home-assistant-candy.
Try with the latest update, it fixed a similar issue for me
from home-assistant-candy.
Try with the latest update, it fixed a similar issue for me
Hi
With last version I' had the same error that in #61 (comment)
from home-assistant-candy.
Same here, with previo ya versión, chamging manifest.json line 8, the problem was solved.
Now i updated yo this versión and problem returns. With:
Reintentando la configuración: Error communicating with API: TimeoutError()
from home-assistant-candy.
Hello everyone 👋
I released version 0.8.0 that contains API rate-limiting, which is the long-term fix for those who had to add the sleep(5)
calls and it solved their connection issues. Rate limiting won't solve everyone's connection problems, but give the latest version a try if you are using a modified version of the integration with extra sleep()
commands.
The rate limiter is set up to only allow 1 request every 3 seconds, I think this will be a good start. If you want to tweak the value, you can find it here:
from home-assistant-candy.
Hi
I just bought a Hoover HWP610AMBC1-S but running ./simplyfi 192.168.1.30 getkey just returns:
Candy Simply-Fi tool by Melvin Groenendaal
error: connect
error: get_candySimplify_data, could not get data from server
If I try to add it to HA, I get the Failed to detect encryption, check logs
The machine works fine with the hOn app.
from home-assistant-candy.
@dennisnn87 if even the CLI tool can't connect to your appliance then I don't think your problem is related to this integration.
from home-assistant-candy.
from home-assistant-candy.
Any ideas what the problem could be?Best regards l Med venlig hilsenDennis Nygaard NielsenDen 30. nov. 2022 kl. 08.32 skrev Olivér Falvai @.>: @dennisnn87 if even the CLI tool can't connect to your appliance then I don't think your problem is related to this integration. —Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.>
I have a Candy washing machine and when I put it on "Wifi" mode, it lasts for 5 or 10 minutes before it goes standby. So you have to be quick configuring everything, otherwise, Home Assistant will not recognize it.
Anyway this Washing machine automation is very weird. One the bright side, it's using an ESP device, so maybe it can be Tasmotized!
from home-assistant-candy.
@SirLouen I find I get more reliable responses from the machines API when a manually set program is running. Not sure why this is. In Wifi mode it can take me a few requests to get a response with curl.
It has been a year though and I still have not got this integration working. This update fails differently to all previous versions. After entering IP in the dialogue flow it just hangs. No responses and no errors. This locked up all of Home Assistant even after closing the box and restarting home assistant. I had to reboot to clear it. No errors showing in logs.
I still use the python script that I wrote to test responses a year ago. A few modifications and I can call it with a command line sensor and that works fine. Not as robust as the integration but does the job for me. I tried comparing what my script does differently but nothing obvious jumps out. The code is here if anybody want to have a go at it.
from home-assistant-candy.
Logger: custom_components.candy.config_flow
Source: custom_components/candy/config_flow.py:45
Integration: Candy (documentation, issues)
First occurred: 12:32:29 (3 occurrences)
Last logged: 12:45:23
Cannot connect to host 192.168.1.28:80 ssl:default [Connect call failed ('192.168.1.28', 80)]
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 992, in _wrap_create_connection
return await self._loop.create_connection(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1085, in create_connection
raise exceptions[0]
File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1069, in create_connection
sock = await self._connect_sock(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/asyncio/base_events.py", line 973, in _connect_sock
await self.sock_connect(sock, address)
File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 628, in sock_connect
return await fut
^^^^^^^^^
File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 668, in _sock_connect_cb
raise OSError(err, f'Connect call failed {address}')
ConnectionRefusedError: [Errno 111] Connect call failed ('192.168.1.28', 80)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/config/custom_components/candy/config_flow.py", line 45, in async_step_user
encryption_type, key = await detect_encryption(
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/candy/client/init.py", line 81, in detect_encryption
async with _LIMITER, session.get(url) as resp:
File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 574, in _request
conn = await self._connector.connect(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 544, in connect
proto = await self._create_connection(req, traces, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 911, in _create_connection
_, proto = await self._create_direct_connection(req, traces, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1235, in _create_direct_connection
raise last_exc
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1204, in _create_direct_connection
transp, proto = await self._wrap_create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1000, in _wrap_create_connection
raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 192.168.1.28:80 ssl:default [Connect call failed ('192.168.1.28', 80)]
from home-assistant-candy.
Related Issues (20)
- Air Conditions support
- Candy Oven in Celsius HOT 1
- backoff - Requirements not found HOT 9
- After last update HA integration not more working HOT 8
- Initial Setup - 500 error HOT 1
- Please add a setting to change the device's IP address HOT 3
- Remaining minutes issue HOT 5
- 2023.3 - async_setup_platforms deprecated ?
- Trying to add device crashes HA HOT 2
- Support for NFC conectivity
- Support for NFC conectivity? HOT 1
- new sensor for your intagration based on my code appdaemon
- Error setting up entry Candy for candy HOT 1
- Time remaining before clean filter
- the intergration broke down HOT 4
- Trying to add induction Hob Hoover HTPSJ644MCWIFI
- Failing initialization when appliance is offline HOT 3
- Washer/Dryer Controls
- TEMP_CELSIUS was used from candy, this is a deprecated constant which will be removed HOT 1
- The method for providing platform translations has changed in Home Assistant Core HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from home-assistant-candy.